an appview-less Bluesky client using Constellation and PDS Queries
reddwarf.app
frontend
spa
bluesky
reddwarf
microcosm
1@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&family=Spectral+SC:wght@500&display=swap');
2@import "tailwindcss";
3
4/* @theme {
5 --color-gray-50: oklch(0.984 0.005 220.000);
6 --color-gray-100: oklch(0.968 0.010 220.000);
7 --color-gray-200: oklch(0.929 0.020 222.000);
8 --color-gray-300: oklch(0.869 0.035 220.000);
9 --color-gray-400: oklch(0.704 0.060 218.000);
10 --color-gray-500: oklch(0.554 0.070 218.000);
11 --color-gray-600: oklch(0.446 0.065 218.000);
12 --color-gray-700: oklch(0.372 0.060 218.000);
13 --color-gray-800: oklch(0.279 0.055 220.000);
14 --color-gray-900: oklch(0.208 0.050 222.000);
15 --color-gray-950: oklch(0.129 0.050 222.000);
16} */
17
18:root {
19 --safe-hue: var(--tw-gray-hue, 28)
20}
21
22@theme {
23 --color-gray-50: oklch(0.984 0.012 var(--safe-hue));
24 --color-gray-100: oklch(0.968 0.017 var(--safe-hue));
25 --color-gray-200: oklch(0.929 0.025 var(--safe-hue));
26 --color-gray-300: oklch(0.869 0.035 var(--safe-hue));
27 --color-gray-400: oklch(0.704 0.05 var(--safe-hue));
28 --color-gray-500: oklch(0.554 0.06 var(--safe-hue));
29 --color-gray-600: oklch(0.446 0.058 var(--safe-hue));
30 --color-gray-700: oklch(0.372 0.058 var(--safe-hue));
31 --color-gray-800: oklch(0.279 0.055 var(--safe-hue));
32 --color-gray-900: oklch(0.208 0.055 var(--safe-hue));
33 --color-gray-950: oklch(0.129 0.055 var(--safe-hue));
34}
35
36@layer base {
37 html {
38 color-scheme: light dark;
39 }
40
41 * {
42 @apply border-gray-200 dark:border-gray-800;
43 }
44
45 html,
46 body {
47 @apply text-gray-900 bg-gray-50 dark:bg-gray-950 dark:text-gray-200;
48 }
49
50 .using-mouse * {
51 outline: none !important;
52 }
53}
54
55@media (width >= 64rem /* 1024px */) {
56 html:not(:has(.disablegutter)),
57 body:not(:has(.disablegutter)) {
58 scrollbar-gutter: stable both-edges !important;
59 }
60 html:has(.disablegutter),
61 body:has(.disablegutter) {
62 scrollbar-width: none;
63 overflow-y: hidden;
64 }
65}
66
67.lightbox:has(+.lightbox-sidebar){
68 opacity: 0;
69}
70
71.scroll-thin {
72 scrollbar-width: thin;
73 /*scrollbar-gutter: stable both-edges !important;*/
74}
75
76.scroll-none {
77 scrollbar-width: none;
78}
79
80.dangerousFediContent {
81 & a[href]{
82 text-decoration: none;
83 color: rgb(29, 122, 242);
84 word-break: break-all;
85 }
86}
87
88.font-inter {
89 font-family: "Inter", sans-serif;
90}
91.font-roboto {
92 font-family: "Roboto", sans-serif;
93}
94
95:root {
96 --header-bg-light: color-mix(in srgb, var(--color-white) calc(var(--is-top) * 100%), var(--color-gray-50));
97 --header-bg-dark: color-mix(in srgb, var(--color-gray-950) calc(var(--is-top) * 100%), var(--color-gray-900));
98}
99
100:root {
101 --header-bg: var(--header-bg-light);
102}
103@media (prefers-color-scheme: dark) {
104 :root {
105 --header-bg: var(--header-bg-dark);
106 }
107}
108
109:root {
110 --shadow-opacity: calc(1 - var(--is-top));
111 --tw-shadow-header: 0 2px 8px hsl(0 0% 0% / calc(var(--shadow-opacity) * 0.15));
112}
113
114
115/* m3 input */
116:root {
117 --m3input-radius: 6px;
118 --m3input-border-width: .0625rem;
119 --m3input-font-size: 16px;
120 --m3input-transition: 150ms cubic-bezier(.2, .8, .2, 1);
121 /* light theme */
122 --m3input-bg: var(--color-gray-50);
123 --m3input-border-color: var(--color-gray-400);
124 --m3input-label-color: var(--color-gray-500);
125 --m3input-text-color: var(--color-gray-900);
126 --m3input-focus-color: var(--color-gray-600);
127}
128
129@media (prefers-color-scheme: dark) {
130 :root {
131 --m3input-bg: var(--color-gray-950);
132 --m3input-border-color: var(--color-gray-700);
133 --m3input-label-color: var(--color-gray-400);
134 --m3input-text-color: var(--color-gray-50);
135 --m3input-focus-color: var(--color-gray-400);
136 }
137}
138
139/* reset page *//*
140html,
141body {
142 background: var(--m3input-bg);
143 margin: 0;
144 padding: 1rem;
145 color: var(--m3input-text-color);
146 font-family: system-ui, sans-serif;
147 font-size: var(--m3input-font-size);
148}*/
149
150/* base wrapper */
151.m3input-field.m3input-label.m3input-border {
152 position: relative;
153 display: inline-block;
154 width: 100%;
155 /*max-width: 400px;*/
156}
157
158/* size variants */
159.m3input-field.size-sm {
160 --m3input-h: 40px;
161}
162
163.m3input-field.size-md {
164 --m3input-h: 48px;
165}
166
167.m3input-field.size-lg {
168 --m3input-h: 56px;
169}
170
171.m3input-field.size-xl {
172 --m3input-h: 64px;
173}
174
175.m3input-field.m3input-label.m3input-border:not(.size-sm):not(.size-md):not(.size-lg):not(.size-xl) {
176 --m3input-h: 48px;
177}
178
179/* outlined input */
180.m3input-field.m3input-label.m3input-border input {
181 width: 100%;
182 height: var(--m3input-h);
183 border: var(--m3input-border-width) solid var(--m3input-border-color);
184 border-radius: var(--m3input-radius);
185 background: var(--m3input-bg);
186 color: var(--m3input-text-color);
187 font-size: var(--m3input-font-size);
188 padding: 0 12px;
189 box-sizing: border-box;
190 outline: none;
191 transition: border-color var(--m3input-transition), box-shadow var(--m3input-transition);
192}
193
194/* focus ring */
195.m3input-field.m3input-label.m3input-border input:focus {
196 border-color: var(--m3input-focus-color);
197 /*box-shadow: 0 0 0 2px color-mix(in srgb, var(--focus-color) 20%, transparent);*/
198}
199
200/* label */
201.m3input-field.m3input-label.m3input-border label {
202 position: absolute;
203 left: 12px;
204 top: 50%;
205 transform: translateY(-50%);
206 background: var(--m3input-bg);
207 padding: 0 .25em;
208 color: var(--m3input-label-color);
209 pointer-events: none;
210 transition: all var(--m3input-transition);
211}
212
213/* float on focus or when filled */
214.m3input-field.m3input-label.m3input-border input:focus+label,
215.m3input-field.m3input-label.m3input-border input:not(:placeholder-shown)+label {
216 top: 0;
217 transform: translateY(-50%) scale(.78);
218 left: 0;
219 color: var(--m3input-focus-color);
220}
221
222/* placeholder trick */
223.m3input-field.m3input-label.m3input-border input::placeholder {
224 color: transparent;
225}