a tool for shared writing and social publishing
1@import "tailwindcss";
2
3@theme inline {
4 --breakpoint-*: initial;
5 --breakpoint-sm: 640px;
6 --breakpoint-md: 960px;
7 --breakpoint-lg: 1280px;
8
9 --radius-*: initial;
10 --radius-none: 0;
11 --radius-md: 0.25rem;
12 --radius-lg: 0.5rem;
13 --radius-full: 9999px;
14
15 --color-*: initial;
16 --color-inherit: inherit;
17 --color-transparent: transparent;
18 --color-current: currentColor;
19 --color-primary: rgb(var(--primary));
20 --color-secondary: color-mix(
21 in oklab,
22 rgb(var(--primary)),
23 rgb(var(--bg-page)) 25%
24 );
25 --color-tertiary: color-mix(
26 in oklab,
27 rgb(var(--primary)),
28 rgb(var(--bg-page)) 55%
29 );
30 --color-border: color-mix(
31 in oklab,
32 rgb(var(--primary)),
33 rgb(var(--bg-page)) 75%
34 );
35 --color-border-light: color-mix(
36 in oklab,
37 rgb(var(--primary)),
38 rgb(var(--bg-page)) 85%
39 );
40 --color-white: #ffffff;
41 --color-accent-1: rgb(var(--accent-1));
42 --color-accent-2: rgb(var(--accent-2));
43 --color-accent-contrast: rgb(var(--accent-contrast));
44 --color-bg-leaflet: rgb(var(--bg-leaflet));
45 --color-bg-page: rgb(var(--bg-page));
46 --color-highlight-1: var(--highlight-1);
47 --color-highlight-2: rgb(var(--highlight-2));
48 --color-highlight-3: rgb(var(--highlight-3));
49 --color-test: #e18181;
50 --color-test-blue: #48d1ef;
51
52 --text-*: initial;
53 --text-xs: 0.75rem;
54 --text-sm: 0.875rem;
55 --text-base: 1rem;
56 --text-lg: 1.125rem;
57 --text-xl: 1.625rem;
58 --text-2xl: 2rem;
59
60 --shadow-sm: 0.9px 1.5px 1.7px -1.8px rgba(var(--primary), 0.2),
61 4.2px 6.9px 7.8px -3.5px rgba(var(--primary), 0.15);
62 --shadow-md: 1.2px 2.5px 2.7px -1.8px rgba(var(--primary), 0.1),
63 5.6px 11.6px 12.5px -3.5px rgba(var(--primary), 0.15);
64
65 --font-sans: var(--font-quattro);
66 --font-serif: Garamond;
67}
68
69/*
70 The default border color has changed to `currentcolor` in Tailwind CSS v4,
71 so we've added these compatibility styles to make sure everything still
72 looks the same as it did with Tailwind CSS v3.
73
74 If we ever want to remove these styles, we need to add an explicit border
75 color utility to any element that depends on these defaults.
76*/
77@layer base {
78 *,
79 ::after,
80 ::before,
81 ::backdrop,
82 ::file-selector-button {
83 border-color: var(--color-gray-200, currentcolor);
84 }
85}
86
87@layer base {
88 :root {
89 --bg-leaflet: 240, 247, 250;
90 --bg-page: 255, 255, 255;
91 --bg-page-alpha: 1;
92
93 --primary: 39, 39, 39;
94
95 --accent-1: 0, 0, 225;
96 --accent-2: 255, 255, 255;
97 --accent-contrast: 0, 0, 225;
98 --accent-1-is-contrast: "true";
99 --accent-light: color-mix(
100 in oklab,
101 rgb(var(--accent-contrast)),
102 rgb(var(--bg-page)) 85%
103 );
104
105 --highlight-1: 255, 177, 177;
106 --highlight-2: 253, 245, 203;
107 --highlight-3: 255, 205, 195;
108
109 --list-marker-width: 36px;
110 --page-width-unitless: min(
111 var(--page-width-setting),
112 calc(var(--leaflet-width-unitless) - 12)
113 );
114 --page-width-units: min(
115 calc(var(--page-width-unitless) * 1px),
116 calc(100vw - 12px)
117 );
118
119 --gripperSVG: url("/gripperPattern.svg");
120 --gripperSVG2: url("/gripperPattern2.svg");
121 --hatchSVG: url("/hatchPattern.svg");
122 --wavySVG: (url("/RSVPBackground/wavy.svg"));
123
124 --safe-padding-bottom: max(calc(env(safe-area-inset-bottom) - 8px), 16px);
125 }
126 @media (max-width: 640px) {
127 :root {
128 --list-marker-width: 20px;
129 }
130 }
131
132 @media (min-width: 640px) {
133 :root {
134 /*picks between max width and screen width with 64px of padding*/
135 --page-width-unitless: min(
136 var(--page-width-setting),
137 calc(var(--leaflet-width-unitless) - 128)
138 );
139 --page-width-units: min(
140 calc(var(--page-width-unitless) * 1px),
141 calc(100vw - 128px)
142 );
143 }
144 }
145
146 html,
147 body {
148 @apply h-full;
149 @apply p-0;
150 @apply overscroll-y-none;
151 min-height: -webkit-fill-available;
152 @apply font-sans;
153 font-synthesis: none;
154 }
155
156 #__next {
157 height: 100%;
158 }
159
160 /* START FONT STYLING */
161 h1 {
162 @apply text-2xl;
163 @apply font-bold;
164 }
165
166 h2 {
167 @apply text-xl;
168 @apply font-bold;
169 }
170
171 h3 {
172 @apply text-lg;
173 @apply font-bold;
174 }
175
176 h4 {
177 @apply text-base;
178 @apply font-bold;
179 }
180
181 p {
182 @apply text-base;
183 }
184
185 small {
186 @apply text-sm;
187 }
188
189 a {
190 @apply text-accent-contrast;
191 @apply hover:cursor-pointer;
192 @apply no-underline;
193 @apply hover:underline;
194 }
195
196 pre {
197 font-family: var(--font-quattro);
198 }
199
200 p {
201 font-size: inherit;
202 }
203
204 ::placeholder {
205 @apply text-tertiary;
206 @apply italic;
207 }
208 /*END FONT STYLING*/
209
210 /* START GLOBAL STYLING */
211
212 /* END GLOBAL STYLING */
213}
214
215img {
216 font-size: 0;
217}
218
219button:hover {
220 cursor: pointer;
221}
222
223blockquote {
224 margin: 0;
225}
226
227/* Hide scrollbar for Chrome, Safari and Opera */
228.no-scrollbar::-webkit-scrollbar {
229 display: none;
230}
231.no-scrollbar {
232 scrollbar-width: none;
233}
234
235input::-webkit-outer-spin-button,
236input::-webkit-inner-spin-button {
237 -webkit-appearance: none;
238 margin: 0;
239}
240input[type="number"] {
241 -moz-appearance: textfield;
242}
243
244::-webkit-calendar-picker-indicator {
245 mask-image: url(/timeInputIcon.svg);
246 mask-size: 100% 100%;
247 background-image: url(/gripperPattern1.svg);
248 background-color: color-mix(
249 in oklab,
250 rgb(var(--primary)),
251 rgb(var(--bg-page)) 55%
252 );
253}
254
255.inline-code {
256 display: inline;
257 font-size: 1em;
258 @apply bg-border-light;
259 @apply font-mono;
260 @apply px-px;
261 @apply py-px;
262 @apply -mx-px;
263 @apply -my-px;
264 @apply rounded-[4px];
265 @apply box-decoration-clone;
266}
267
268pre.shiki code {
269 display: block;
270}
271
272pre.shiki {
273 @apply sm:p-3;
274 @apply p-2;
275 @apply rounded-md;
276 @apply overflow-auto;
277 @apply sm:min-h-12;
278 @apply min-h-10;
279
280 @media (min-width: 640px) {
281 @apply p-3;
282 }
283}
284
285.highlight:has(+ .highlight) {
286 @apply rounded-r-none;
287}
288.highlight + .highlight {
289 @apply rounded-l-none;
290}
291
292.highlight {
293 @apply px-px;
294 @apply py-px;
295 @apply -mx-px;
296 @apply -my-px;
297 @apply rounded-[4px];
298 @apply box-decoration-clone;
299}
300
301.selected .selection-highlight {
302 background-color: Highlight;
303 @apply py-[1.5px];
304}
305
306.ProseMirror:focus-within .selection-highlight {
307 background-color: transparent;
308}
309
310.ProseMirror .atMention.ProseMirror-selectednode,
311.ProseMirror .didMention.ProseMirror-selectednode {
312 @apply text-accent-contrast;
313 @apply px-0.5;
314 @apply rounded-[4px];
315 @apply box-decoration-clone;
316 background-color: rgba(var(--accent-contrast), 0.2);
317 border: 1px solid rgba(var(--accent-contrast), 1);
318}
319
320.mention {
321 @apply cursor-pointer;
322 @apply text-accent-contrast;
323 @apply px-0.5;
324 @apply rounded-[4px];
325 @apply box-decoration-clone;
326 background-color: rgba(var(--accent-contrast), 0.2);
327 border: 1px solid transparent;
328 display: inline;
329 white-space: normal;
330}
331
332.multiselected:focus-within .selection-highlight {
333 background-color: transparent;
334}
335
336.transparent-outline {
337 @apply outline-solid;
338 @apply outline-transparent;
339}
340
341.selected-outline {
342 @apply border;
343 @apply focus:outline-solid;
344 @apply focus:outline-2;
345 @apply focus:outline-offset-1;
346 @apply focus-within:outline-solid;
347 @apply focus-within:outline-2;
348 @apply focus-within:outline-offset-1;
349 @apply hover:outline-solid;
350 @apply hover:outline-2;
351 @apply hover:outline-offset-1;
352}
353
354.input-with-border {
355 @apply border;
356 @apply border-border;
357 @apply bg-bg-page;
358 @apply rounded-md;
359 @apply px-1;
360 @apply py-0.5;
361 @apply hover:border-tertiary;
362
363 @apply focus:border-tertiary;
364 @apply focus:outline-solid;
365 @apply focus:outline-tertiary;
366 @apply focus:outline-2;
367 @apply focus:outline-offset-1;
368
369 @apply focus-within:border-tertiary;
370 @apply focus-within:outline-solid;
371 @apply focus-within:outline-tertiary;
372 @apply focus-within:outline-2;
373 @apply focus-within:outline-offset-1;
374
375 @apply disabled:border-border-light;
376 @apply disabled:hover:border-border-light;
377 @apply disabled:bg-border-light;
378 @apply disabled:text-tertiary;
379}
380
381.block-border {
382 @apply border;
383 @apply border-border-light;
384 @apply rounded-lg;
385 @apply outline-solid;
386 @apply outline-offset-1;
387 @apply outline-2;
388 @apply outline-transparent;
389 @apply hover:border-border;
390}
391
392.block-border-selected {
393 @apply border;
394 @apply border-border;
395 @apply rounded-lg;
396 @apply outline-solid;
397 @apply outline-offset-1;
398 @apply outline-2;
399 @apply outline-border;
400}
401
402.blockquote {
403 @apply border-l-2;
404 @apply border-border;
405 @apply pl-3;
406 @apply ml-2;
407}
408
409.transparent-container {
410 @apply border;
411 @apply border-border-light;
412 @apply rounded-md;
413}
414
415.container {
416 background: rgba(var(--bg-page), 0.75);
417 @apply border;
418 @apply border-bg-page;
419 @apply rounded-md;
420}
421
422.opaque-container {
423 @apply bg-bg-page;
424 @apply border;
425 @apply border-border-light;
426 @apply rounded-md;
427}
428
429.accent-container {
430 background: color-mix(
431 in oklab,
432 rgb(var(--accent-contrast)),
433 rgb(var(--bg-page)) 85%
434 );
435 @apply rounded-md;
436}
437
438.menuItem {
439 @apply text-secondary;
440 @apply hover:text-secondary;
441 @apply data-highlighted:bg-[var(--accent-light)];
442 @apply data-highlighted:outline-none;
443 @apply hover:bg-[var(--accent-light)];
444 text-align: left;
445 font-weight: 800;
446 padding: 0.25rem 0.5rem;
447 border-radius: 0.25rem;
448 outline: none !important;
449 cursor: pointer;
450 background-color: transparent;
451 display: flex;
452 gap: 0.5rem;
453
454 :hover {
455 text-decoration: none !important;
456 background-color: rgb(var(--accent-light));
457 }
458}
459
460.pwa-padding {
461 padding-top: max(calc(env(safe-area-inset-top) - 8px)) !important;
462}
463.pwa-padding-bottom {
464 padding-bottom: var(--safe-padding-bottom);
465}
466
467/* animation for new star in publish success illustration */
468@keyframes new-star-animation {
469 0% {
470 transform: scale(0);
471 opacity: 0;
472 }
473 50% {
474 transform: scale(0.1);
475 opacity: 0;
476 }
477 80% {
478 transform: scale(1.2);
479 opacity: 1;
480 }
481 100% {
482 transform: scale(1);
483 }
484}
485
486.new-star {
487 animation-name: new-star-animation;
488 animation-duration: 1s;
489 animation-iteration-count: 1;
490 animation-timing-function: ease-in;
491}