learn and share notes on atproto (wip) 馃 malfestio.stormlightlabs.org/
readability solid axum atproto srs
at main 326 lines 6.9 kB view raw
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}