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.gutter{
56 scrollbar-gutter: stable both-edges;
57}
58
59@media (width >= 64rem /* 1024px */) {
60 html:not(:has(.disablegutter)),
61 body:not(:has(.disablegutter)) {
62 scrollbar-gutter: stable both-edges !important;
63 }
64 html:has(.disablescroll),
65 body:has(.disablescroll) {
66 scrollbar-width: none;
67 overflow-y: hidden;
68 }
69}
70
71.lightbox:has(+.lightbox-sidebar){
72 opacity: 0;
73}
74
75.scroll-thin {
76 scrollbar-width: thin;
77 /*scrollbar-gutter: stable both-edges !important;*/
78}
79
80.scroll-none {
81 scrollbar-width: none;
82}
83
84.dangerousFediContent {
85 & a[href]{
86 text-decoration: none;
87 color: rgb(29, 122, 242);
88 word-break: break-all;
89 }
90}
91
92.font-inter {
93 font-family: "Inter", sans-serif;
94}
95.font-roboto {
96 font-family: "Roboto", sans-serif;
97}
98
99:root {
100 --header-bg-light: color-mix(in srgb, var(--color-white) calc(var(--is-top) * 100%), var(--color-gray-50));
101 --header-bg-dark: color-mix(in srgb, var(--color-gray-950) calc(var(--is-top) * 100%), var(--color-gray-900));
102}
103
104:root {
105 --header-bg: var(--header-bg-light);
106}
107@media (prefers-color-scheme: dark) {
108 :root {
109 --header-bg: var(--header-bg-dark);
110 }
111}
112
113:root {
114 --shadow-opacity: calc(1 - var(--is-top));
115 --tw-shadow-header: 0 2px 8px hsl(0 0% 0% / calc(var(--shadow-opacity) * 0.15));
116}
117
118
119/* m3 input */
120:root {
121 --m3input-radius: 6px;
122 --m3input-border-width: .0625rem;
123 --m3input-font-size: 16px;
124 --m3input-transition: 150ms cubic-bezier(.2, .8, .2, 1);
125 /* light theme */
126 --m3input-bg: var(--color-gray-50);
127 --m3input-border-color: var(--color-gray-400);
128 --m3input-label-color: var(--color-gray-500);
129 --m3input-text-color: var(--color-gray-900);
130 --m3input-focus-color: var(--color-gray-600);
131}
132
133@media (prefers-color-scheme: dark) {
134 :root {
135 --m3input-bg: var(--color-gray-950);
136 --m3input-border-color: var(--color-gray-700);
137 --m3input-label-color: var(--color-gray-400);
138 --m3input-text-color: var(--color-gray-50);
139 --m3input-focus-color: var(--color-gray-400);
140 }
141}
142
143/* reset page *//*
144html,
145body {
146 background: var(--m3input-bg);
147 margin: 0;
148 padding: 1rem;
149 color: var(--m3input-text-color);
150 font-family: system-ui, sans-serif;
151 font-size: var(--m3input-font-size);
152}*/
153
154/* base wrapper */
155.m3input-field.m3input-label.m3input-border {
156 position: relative;
157 display: inline-block;
158 width: 100%;
159 /*max-width: 400px;*/
160}
161
162/* size variants */
163.m3input-field.size-sm {
164 --m3input-h: 40px;
165}
166
167.m3input-field.size-md {
168 --m3input-h: 48px;
169}
170
171.m3input-field.size-lg {
172 --m3input-h: 56px;
173}
174
175.m3input-field.size-xl {
176 --m3input-h: 64px;
177}
178
179.m3input-field.m3input-label.m3input-border:not(.size-sm):not(.size-md):not(.size-lg):not(.size-xl) {
180 --m3input-h: 48px;
181}
182
183/* outlined input */
184.m3input-field.m3input-label.m3input-border input {
185 width: 100%;
186 height: var(--m3input-h);
187 border: var(--m3input-border-width) solid var(--m3input-border-color);
188 border-radius: var(--m3input-radius);
189 background: var(--m3input-bg);
190 color: var(--m3input-text-color);
191 font-size: var(--m3input-font-size);
192 padding: 0 12px;
193 box-sizing: border-box;
194 outline: none;
195 transition: border-color var(--m3input-transition), box-shadow var(--m3input-transition);
196}
197
198/* focus ring */
199.m3input-field.m3input-label.m3input-border input:focus {
200 border-color: var(--m3input-focus-color);
201 /*box-shadow: 0 0 0 2px color-mix(in srgb, var(--focus-color) 20%, transparent);*/
202}
203
204/* label */
205.m3input-field.m3input-label.m3input-border label {
206 position: absolute;
207 left: 12px;
208 top: 50%;
209 transform: translateY(-50%);
210 background: var(--m3input-bg);
211 padding: 0 .25em;
212 color: var(--m3input-label-color);
213 pointer-events: none;
214 transition: all var(--m3input-transition);
215}
216
217/* float on focus or when filled */
218.m3input-field.m3input-label.m3input-border input:focus+label,
219.m3input-field.m3input-label.m3input-border input:not(:placeholder-shown)+label {
220 top: 0;
221 transform: translateY(-50%) scale(.78);
222 left: 0;
223 color: var(--m3input-focus-color);
224}
225
226/* placeholder trick */
227.m3input-field.m3input-label.m3input-border input::placeholder {
228 color: transparent;
229}
230
231/* radix i love you but like cmon man */
232body[data-scroll-locked]{
233 margin-left: var(--removed-body-scroll-bar-size) !important;
234}