learn and share notes on atproto (wip) 馃
malfestio.stormlightlabs.org/
readability
solid
axum
atproto
srs
1@import "tailwindcss";
2@plugin "@tailwindcss/forms";
3@plugin "@egoist/tailwindcss-icons";
4
5@font-face {
6 font-family: "Mattern";
7 src: url("/fonts/Mattern-Regular.otf") format("opentype"),
8 url("/fonts/Mattern-Regular.ttf") format("truetype");
9 font-weight: 400;
10 font-style: normal;
11 font-display: swap;
12}
13
14@theme {
15 --font-display: "Mattern", serif;
16 --font-body: "Figtree Variable", sans-serif;
17
18 /* Editor Fonts */
19 --font-code-neon: "Monaspace Neon", monospace;
20 --font-code-argon: "Monaspace Argon", monospace;
21 --font-code-krypton: "Monaspace Krypton", monospace;
22 --font-code-radon: "Monaspace Radon", monospace;
23 --font-code-xenon: "Monaspace Xenon", monospace;
24 --font-code-jetbrains: "JetBrains Mono Variable", monospace;
25 --font-code-google: "Google Sans Code", monospace;
26 --font-code: var(--font-code-jetbrains);
27
28 /* Spacing Tokens - 16px grid */
29 /*
30 FIXME: These conflict with, and break existing usage of classes like max-w-4xl
31 --spacing-xs: 4px;
32 --spacing-sm: 8px;
33 --spacing-md: 12px;
34 --spacing-base: 16px;
35 --spacing-lg: 24px;
36 --spacing-xl: 32px;
37 --spacing-2xl: 48px;
38 --spacing-3xl: 64px;
39 --spacing-4xl: 96px; */
40
41 /* Elevation Layers */
42 --layer-00: #161616;
43 --layer-01: #1e1e1e;
44 --layer-02: #262626;
45 --layer-03: #2c2c2c;
46 --layer-04: #323232;
47
48 /* Elevation Shadows - Subtle depth */
49 --shadow-01: 0 1px 2px rgba(0, 0, 0, 0.1);
50 --shadow-02: 0 2px 4px rgba(0, 0, 0, 0.15);
51 --shadow-03: 0 4px 8px rgba(0, 0, 0, 0.2);
52 --shadow-04: 0 8px 16px rgba(0, 0, 0, 0.25);
53
54 /* Motion Tokens */
55 --duration-instant: 100ms;
56 --duration-fast: 150ms;
57 --duration-normal: 250ms;
58 --duration-slow: 350ms;
59 --duration-slower: 500ms;
60
61 --easing-standard: cubic-bezier(0.4, 0, 0.2, 1);
62 --easing-accelerate: cubic-bezier(0.4, 0, 1, 1);
63 --easing-decelerate: cubic-bezier(0, 0, 0.2, 1);
64 --easing-sharp: cubic-bezier(0.4, 0, 0.6, 1);
65
66 --density-multiplier: 1;
67}
68
69* {
70 @apply font-body;
71}
72
73h1,
74h2,
75h3,
76h4,
77h5,
78h6 {
79 @apply font-display;
80}
81
82.grid-pattern {
83 background-size: 32px 32px;
84 background-image: linear-gradient(
85 to right,
86 rgba(85, 85, 85, 0.3) 1px,
87 transparent 1px
88 ),
89 linear-gradient(to bottom, rgba(85, 85, 85, 0.3) 1px, transparent 1px);
90}
91
92/* Elevation Utilities - Carbon-inspired layering */
93.surface-00 {
94 background-color: var(--layer-00);
95}
96
97.surface-01 {
98 background-color: var(--layer-01);
99 box-shadow: var(--shadow-01);
100}
101
102.surface-02 {
103 background-color: var(--layer-02);
104 box-shadow: var(--shadow-02);
105}
106
107.surface-03 {
108 background-color: var(--layer-03);
109 box-shadow: var(--shadow-03);
110}
111
112.surface-04 {
113 background-color: var(--layer-04);
114 box-shadow: var(--shadow-04);
115}
116
117/* Density Utilities - Applied to container elements */
118.density-compact {
119 --density-multiplier: 0.75;
120}
121
122.density-comfortable {
123 --density-multiplier: 1;
124}
125
126.density-spacious {
127 --density-multiplier: 1.25;
128}
129
130.transition-standard {
131 transition-duration: var(--duration-normal);
132 transition-timing-function: var(--easing-standard);
133}
134
135.transition-fast {
136 transition-duration: var(--duration-fast);
137 transition-timing-function: var(--easing-standard);
138}
139
140.transition-slow {
141 transition-duration: var(--duration-slow);
142 transition-timing-function: var(--easing-decelerate);
143}
144
145@keyframes pulse {
146 0%,
147 100% {
148 opacity: 1;
149 }
150 50% {
151 opacity: 0.5;
152 }
153}
154
155@keyframes shimmer {
156 0% {
157 background-position: -200% 0;
158 }
159 100% {
160 background-position: 200% 0;
161 }
162}
163
164@keyframes breathe {
165 0%,
166 100% {
167 transform: scale(1);
168 }
169 50% {
170 transform: scale(1.02);
171 }
172}
173
174.animate-pulse {
175 animation: pulse 2s ease-in-out infinite;
176}
177
178.animate-shimmer {
179 background: linear-gradient(
180 90deg,
181 var(--layer-01) 0%,
182 var(--layer-02) 50%,
183 var(--layer-01) 100%
184 );
185 background-size: 200% 100%;
186 animation: shimmer 1.5s ease-in-out infinite;
187}
188
189.animate-breathe {
190 animation: breathe 3s ease-in-out infinite;
191}
192
193.press-effect:active {
194 transform: scale(0.97);
195 transition: transform var(--duration-instant) var(--easing-sharp);
196}
197
198button {
199 @apply cursor-pointer disabled:cursor-not-allowed disabled:opacity-50;
200}
201
202/* Textcomplete dropdown styling */
203.textcomplete-dropdown {
204 background-color: var(--layer-02);
205 border: 1px solid var(--layer-03);
206 border-radius: 0.5rem;
207 box-shadow: var(--shadow-04);
208 overflow: hidden;
209 z-index: 50;
210}
211
212.textcomplete-dropdown .textcomplete-item {
213 padding: 0.5rem 0.75rem;
214 cursor: pointer;
215 color: #e2e8f0;
216}
217
218.textcomplete-dropdown .textcomplete-item:hover,
219.textcomplete-dropdown .textcomplete-item.active {
220 background-color: var(--layer-03);
221}
222
223/* Wikilink styling in rendered content */
224.wikilink {
225 color: #60a5fa;
226 text-decoration: underline;
227 text-decoration-color: rgba(96, 165, 250, 0.3);
228 transition: color var(--duration-fast) var(--easing-standard);
229}
230
231.wikilink:hover {
232 color: #93c5fd;
233 text-decoration-color: rgba(147, 197, 253, 0.5);
234}
235
236.wikilink-broken {
237 color: #fbbf24;
238 text-decoration: line-through;
239}
240
241/* Prose styling for rendered markdown */
242.prose h1 {
243 @apply text-3xl font-bold mb-4 mt-8 text-white;
244}
245
246.prose h2 {
247 @apply text-2xl font-semibold mb-3 mt-6 text-white;
248}
249
250.prose h3 {
251 @apply text-xl font-semibold mb-2 mt-4 text-white;
252}
253
254.prose h4 {
255 @apply text-lg font-semibold mb-2 mt-3 text-white;
256}
257
258.prose h5 {
259 @apply text-base font-semibold mb-1 mt-2 text-white;
260}
261
262.prose h6 {
263 @apply text-sm font-semibold mb-1 mt-2 text-slate-300;
264}
265
266.prose p {
267 @apply mb-4 leading-relaxed text-slate-300;
268}
269
270.prose a:not(.wikilink) {
271 @apply text-blue-400 hover:text-blue-300 underline;
272}
273
274.prose code:not(pre code) {
275 @apply bg-slate-700 px-1.5 py-0.5 rounded text-sm text-emerald-400;
276}
277
278.prose pre {
279 @apply bg-slate-800 rounded-lg p-4 overflow-x-auto my-4;
280}
281
282.prose blockquote {
283 @apply border-l-4 border-blue-500 pl-4 italic text-slate-400 my-4;
284}
285
286.prose ul {
287 @apply list-disc list-inside mb-4 space-y-1 text-slate-300;
288}
289
290.prose ol {
291 @apply list-decimal list-inside mb-4 space-y-1 text-slate-300;
292}
293
294.prose li {
295 @apply leading-relaxed;
296}
297
298.prose hr {
299 @apply border-slate-600 my-6;
300}
301
302.prose strong {
303 @apply font-semibold text-white;
304}
305
306.prose em {
307 @apply italic text-slate-200;
308}
309
310/* Shiki editor highlight container styling */
311.shiki-editor-highlight {
312 @apply w-full h-full;
313}
314
315.shiki-editor-highlight pre {
316 @apply bg-transparent m-0 p-0;
317}
318
319.shiki-editor-highlight code {
320 @apply bg-transparent;
321}
322
323/* Shiki content in preview mode */
324.shiki-content pre {
325 @apply bg-slate-800 rounded-lg p-4 overflow-x-auto my-4;
326}