A personal media tracker built on the AT Protocol opnshelf.xyz
at main 483 lines 16 kB view raw
1/* Plus Jakarta Sans - Material 3 Typography */ 2@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap'); 3 4@import 'tailwindcss'; 5 6@import 'tw-animate-css'; 7 8@custom-variant dark (&:is(.dark *)); 9 10@theme { 11 --color-background: var(--md-sys-color-surface); 12 --color-foreground: var(--md-sys-color-on-surface); 13 --color-popover: var(--md-sys-color-surface-container); 14 --color-popover-foreground: var(--md-sys-color-on-surface); 15 --color-muted-foreground: var(--md-sys-color-on-surface-variant); 16 --color-accent: var(--md-sys-color-tertiary-container); 17 --color-accent-foreground: var(--md-sys-color-on-tertiary-container); 18 --color-destructive: var(--md-sys-color-error); 19 --color-border: var(--md-sys-color-outline-variant); 20 --color-input: var(--md-sys-color-surface-container-highest); 21 --color-ring: var(--md-sys-color-primary); 22 23 --radius-xs: var(--md-sys-shape-corner-extra-small); 24 --radius-sm: var(--md-sys-shape-corner-small); 25 --radius-md: var(--md-sys-shape-corner-medium); 26 --radius-lg: var(--md-sys-shape-corner-large); 27 --radius-xl: var(--md-sys-shape-corner-extra-large); 28 --radius-full: var(--md-sys-shape-corner-full); 29} 30 31/* ============================================ 32 MATERIAL YOU DESIGN SYSTEM - CSS TOKENS 33 ============================================ */ 34 35:root { 36 /* ============================================ 37 SURFACE COLORS 38 ============================================ */ 39 --md-sys-color-surface: #141218; 40 --md-sys-color-surface-variant: #49454f; 41 --md-sys-color-on-surface: #e6e0e9; 42 --md-sys-color-on-surface-variant: #cac4d0; 43 --md-sys-color-outline: #938f99; 44 --md-sys-color-outline-variant: #49454f; 45 --md-sys-color-surface-container: #211f26; 46 --md-sys-color-surface-container-low: #1c191c; 47 --md-sys-color-surface-container-high: #2b2930; 48 --md-sys-color-surface-container-highest: #36343b; 49 50 /* ============================================ 51 PRIMARY COLORS (Amber/Cinematic Warmth) 52 ============================================ */ 53 --md-sys-color-primary: #f3bc00; 54 --md-sys-color-on-primary: #3f2e00; 55 --md-sys-color-primary-container: #5c4500; 56 --md-sys-color-on-primary-container: #ffe08f; 57 58 /* ============================================ 59 SECONDARY COLORS 60 ============================================ */ 61 --md-sys-color-secondary: #d0c1a5; 62 --md-sys-color-on-secondary: #363016; 63 --md-sys-color-secondary-container: #4e462a; 64 --md-sys-color-on-secondary-container: #edddbf; 65 66 /* ============================================ 67 TERTIARY COLORS 68 ============================================ */ 69 --md-sys-color-tertiary: #b0cfba; 70 --md-sys-color-on-tertiary: #1c3526; 71 --md-sys-color-tertiary-container: #324b3b; 72 --md-sys-color-on-tertiary-container: #cbebd6; 73 74 /* ============================================ 75 ERROR COLORS 76 ============================================ */ 77 --md-sys-color-error: #ffb4ab; 78 --md-sys-color-on-error: #690005; 79 --md-sys-color-error-container: #93000a; 80 --md-sys-color-on-error-container: #ffdad6; 81 82 /* ============================================ 83 INVERSE COLORS 84 ============================================ */ 85 --md-sys-color-inverse-surface: #e6e0e9; 86 --md-sys-color-on-inverse-surface: #322f35; 87 --md-sys-color-inverse-primary: #7a5900; 88 89 /* ============================================ 90 SCRIM & SHADOW 91 ============================================ */ 92 --md-sys-color-scrim: #000000; 93 --md-sys-color-shadow: #000000; 94 --md-sys-color-surface-tint: #f3bc00; 95 96 /* ============================================ 97 SURFACE TINT OVERLAYS (Material 3 Elevation) 98 ============================================ */ 99 --md-sys-elevation-level1: rgba(243, 188, 0, 0.05); 100 --md-sys-elevation-level2: rgba(243, 188, 0, 0.08); 101 --md-sys-elevation-level3: rgba(243, 188, 0, 0.11); 102 --md-sys-elevation-level4: rgba(243, 188, 0, 0.12); 103 --md-sys-elevation-level5: rgba(243, 188, 0, 0.14); 104 105 /* ============================================ 106 SHAPE (Corner Radius Tokens) 107 ============================================ */ 108 --md-sys-shape-corner-none: 0px; 109 --md-sys-shape-corner-extra-small: 4px; 110 --md-sys-shape-corner-small: 8px; 111 --md-sys-shape-corner-medium: 12px; 112 --md-sys-shape-corner-large: 16px; 113 --md-sys-shape-corner-extra-large: 28px; 114 --md-sys-shape-corner-full: 9999px; 115 116 /* ============================================ 117 TYPOGRAPHY (Plus Jakarta Sans Scale) 118 ============================================ */ 119 --md-sys-font-family: 'Plus Jakarta Sans', system-ui, sans-serif; 120 121 /* Display */ 122 --md-sys-typescale-display-large-size: 57px; 123 --md-sys-typescale-display-large-line-height: 64px; 124 --md-sys-typescale-display-large-weight: 600; 125 --md-sys-typescale-display-large-letter-spacing: -0.25px; 126 127 --md-sys-typescale-display-medium-size: 45px; 128 --md-sys-typescale-display-medium-line-height: 52px; 129 --md-sys-typescale-display-medium-weight: 600; 130 --md-sys-typescale-display-medium-letter-spacing: 0px; 131 132 --md-sys-typescale-display-small-size: 36px; 133 --md-sys-typescale-display-small-line-height: 44px; 134 --md-sys-typescale-display-small-weight: 600; 135 --md-sys-typescale-display-small-letter-spacing: 0px; 136 137 /* Headline */ 138 --md-sys-typescale-headline-large-size: 32px; 139 --md-sys-typescale-headline-large-line-height: 40px; 140 --md-sys-typescale-headline-large-weight: 600; 141 --md-sys-typescale-headline-large-letter-spacing: 0px; 142 143 --md-sys-typescale-headline-medium-size: 28px; 144 --md-sys-typescale-headline-medium-line-height: 36px; 145 --md-sys-typescale-headline-medium-weight: 600; 146 --md-sys-typescale-headline-medium-letter-spacing: 0px; 147 148 --md-sys-typescale-headline-small-size: 24px; 149 --md-sys-typescale-headline-small-line-height: 32px; 150 --md-sys-typescale-headline-small-weight: 600; 151 --md-sys-typescale-headline-small-letter-spacing: 0px; 152 153 /* Title */ 154 --md-sys-typescale-title-large-size: 22px; 155 --md-sys-typescale-title-large-line-height: 28px; 156 --md-sys-typescale-title-large-weight: 600; 157 --md-sys-typescale-title-large-letter-spacing: 0px; 158 159 --md-sys-typescale-title-medium-size: 16px; 160 --md-sys-typescale-title-medium-line-height: 24px; 161 --md-sys-typescale-title-medium-weight: 600; 162 --md-sys-typescale-title-medium-letter-spacing: 0.15px; 163 164 --md-sys-typescale-title-small-size: 14px; 165 --md-sys-typescale-title-small-line-height: 20px; 166 --md-sys-typescale-title-small-weight: 600; 167 --md-sys-typescale-title-small-letter-spacing: 0.1px; 168 169 /* Body */ 170 --md-sys-typescale-body-large-size: 16px; 171 --md-sys-typescale-body-large-line-height: 24px; 172 --md-sys-typescale-body-large-weight: 400; 173 --md-sys-typescale-body-large-letter-spacing: 0.5px; 174 175 --md-sys-typescale-body-medium-size: 14px; 176 --md-sys-typescale-body-medium-line-height: 20px; 177 --md-sys-typescale-body-medium-weight: 400; 178 --md-sys-typescale-body-medium-letter-spacing: 0.25px; 179 180 --md-sys-typescale-body-small-size: 12px; 181 --md-sys-typescale-body-small-line-height: 16px; 182 --md-sys-typescale-body-small-weight: 400; 183 --md-sys-typescale-body-small-letter-spacing: 0.4px; 184 185 /* Label */ 186 --md-sys-typescale-label-large-size: 14px; 187 --md-sys-typescale-label-large-line-height: 20px; 188 --md-sys-typescale-label-large-weight: 600; 189 --md-sys-typescale-label-large-letter-spacing: 0.1px; 190 191 --md-sys-typescale-label-medium-size: 12px; 192 --md-sys-typescale-label-medium-line-height: 16px; 193 --md-sys-typescale-label-medium-weight: 600; 194 --md-sys-typescale-label-medium-letter-spacing: 0.5px; 195 196 --md-sys-typescale-label-small-size: 11px; 197 --md-sys-typescale-label-small-line-height: 16px; 198 --md-sys-typescale-label-small-weight: 600; 199 --md-sys-typescale-label-small-letter-spacing: 0.5px; 200 201 /* ============================================ 202 MOTION (Easing & Duration) 203 ============================================ */ 204 --md-sys-motion-easing-standard: cubic-bezier(0.2, 0, 0, 1); 205 --md-sys-motion-easing-emphasized: cubic-bezier(0.2, 0, 0, 1); 206 --md-sys-motion-easing-emphasized-decelerate: cubic-bezier(0, 0, 0.2, 1); 207 --md-sys-motion-easing-emphasized-accelerate: cubic-bezier(0.3, 0, 1, 1); 208 --md-sys-motion-duration-short1: 50ms; 209 --md-sys-motion-duration-short2: 100ms; 210 --md-sys-motion-duration-short3: 150ms; 211 --md-sys-motion-duration-short4: 200ms; 212 --md-sys-motion-duration-medium1: 250ms; 213 --md-sys-motion-duration-medium2: 300ms; 214 --md-sys-motion-duration-medium3: 350ms; 215 --md-sys-motion-duration-medium4: 400ms; 216 --md-sys-motion-duration-long1: 450ms; 217 --md-sys-motion-duration-long2: 500ms; 218 --md-sys-motion-duration-long3: 550ms; 219 --md-sys-motion-duration-long4: 600ms; 220 221} 222 223/* ============================================ 224 BASE STYLES 225 ============================================ */ 226 227body { 228 font-family: var(--md-sys-font-family); 229 background-color: var(--md-sys-color-surface); 230 color: var(--md-sys-color-on-surface); 231 -webkit-font-smoothing: antialiased; 232 -moz-osx-font-smoothing: grayscale; 233 margin: 0; 234} 235 236/* ============================================ 237 TYPOGRAPHY UTILITY CLASSES 238 ============================================ */ 239 240.md-display-large { 241 font-family: var(--md-sys-font-family); 242 font-size: var(--md-sys-typescale-display-large-size); 243 line-height: var(--md-sys-typescale-display-large-line-height); 244 font-weight: var(--md-sys-typescale-display-large-weight); 245 letter-spacing: var(--md-sys-typescale-display-large-letter-spacing); 246} 247 248.md-display-medium { 249 font-family: var(--md-sys-font-family); 250 font-size: var(--md-sys-typescale-display-medium-size); 251 line-height: var(--md-sys-typescale-display-medium-line-height); 252 font-weight: var(--md-sys-typescale-display-medium-weight); 253 letter-spacing: var(--md-sys-typescale-display-medium-letter-spacing); 254} 255 256.md-display-small { 257 font-family: var(--md-sys-font-family); 258 font-size: var(--md-sys-typescale-display-small-size); 259 line-height: var(--md-sys-typescale-display-small-line-height); 260 font-weight: var(--md-sys-typescale-display-small-weight); 261 letter-spacing: var(--md-sys-typescale-display-small-letter-spacing); 262} 263 264.md-headline-large { 265 font-family: var(--md-sys-font-family); 266 font-size: var(--md-sys-typescale-headline-large-size); 267 line-height: var(--md-sys-typescale-headline-large-line-height); 268 font-weight: var(--md-sys-typescale-headline-large-weight); 269 letter-spacing: var(--md-sys-typescale-headline-large-letter-spacing); 270} 271 272.md-headline-medium { 273 font-family: var(--md-sys-font-family); 274 font-size: var(--md-sys-typescale-headline-medium-size); 275 line-height: var(--md-sys-typescale-headline-medium-line-height); 276 font-weight: var(--md-sys-typescale-headline-medium-weight); 277 letter-spacing: var(--md-sys-typescale-headline-medium-letter-spacing); 278} 279 280.md-headline-small { 281 font-family: var(--md-sys-font-family); 282 font-size: var(--md-sys-typescale-headline-small-size); 283 line-height: var(--md-sys-typescale-headline-small-line-height); 284 font-weight: var(--md-sys-typescale-headline-small-weight); 285 letter-spacing: var(--md-sys-typescale-headline-small-letter-spacing); 286} 287 288.md-title-large { 289 font-family: var(--md-sys-font-family); 290 font-size: var(--md-sys-typescale-title-large-size); 291 line-height: var(--md-sys-typescale-title-large-line-height); 292 font-weight: var(--md-sys-typescale-title-large-weight); 293 letter-spacing: var(--md-sys-typescale-title-large-letter-spacing); 294} 295 296.md-title-medium { 297 font-family: var(--md-sys-font-family); 298 font-size: var(--md-sys-typescale-title-medium-size); 299 line-height: var(--md-sys-typescale-title-medium-line-height); 300 font-weight: var(--md-sys-typescale-title-medium-weight); 301 letter-spacing: var(--md-sys-typescale-title-medium-letter-spacing); 302} 303 304.md-title-small { 305 font-family: var(--md-sys-font-family); 306 font-size: var(--md-sys-typescale-title-small-size); 307 line-height: var(--md-sys-typescale-title-small-line-height); 308 font-weight: var(--md-sys-typescale-title-small-weight); 309 letter-spacing: var(--md-sys-typescale-title-small-letter-spacing); 310} 311 312.md-body-large { 313 font-family: var(--md-sys-font-family); 314 font-size: var(--md-sys-typescale-body-large-size); 315 line-height: var(--md-sys-typescale-body-large-line-height); 316 font-weight: var(--md-sys-typescale-body-large-weight); 317 letter-spacing: var(--md-sys-typescale-body-large-letter-spacing); 318} 319 320.md-body-medium { 321 font-family: var(--md-sys-font-family); 322 font-size: var(--md-sys-typescale-body-medium-size); 323 line-height: var(--md-sys-typescale-body-medium-line-height); 324 font-weight: var(--md-sys-typescale-body-medium-weight); 325 letter-spacing: var(--md-sys-typescale-body-medium-letter-spacing); 326} 327 328.md-body-small { 329 font-family: var(--md-sys-font-family); 330 font-size: var(--md-sys-typescale-body-small-size); 331 line-height: var(--md-sys-typescale-body-small-line-height); 332 font-weight: var(--md-sys-typescale-body-small-weight); 333 letter-spacing: var(--md-sys-typescale-body-small-letter-spacing); 334} 335 336.md-label-large { 337 font-family: var(--md-sys-font-family); 338 font-size: var(--md-sys-typescale-label-large-size); 339 line-height: var(--md-sys-typescale-label-large-line-height); 340 font-weight: var(--md-sys-typescale-label-large-weight); 341 letter-spacing: var(--md-sys-typescale-label-large-letter-spacing); 342} 343 344.md-label-medium { 345 font-family: var(--md-sys-font-family); 346 font-size: var(--md-sys-typescale-label-medium-size); 347 line-height: var(--md-sys-typescale-label-medium-line-height); 348 font-weight: var(--md-sys-typescale-label-medium-weight); 349 letter-spacing: var(--md-sys-typescale-label-medium-letter-spacing); 350} 351 352.md-label-small { 353 font-family: var(--md-sys-font-family); 354 font-size: var(--md-sys-typescale-label-small-size); 355 line-height: var(--md-sys-typescale-label-small-line-height); 356 font-weight: var(--md-sys-typescale-label-small-weight); 357 letter-spacing: var(--md-sys-typescale-label-small-letter-spacing); 358} 359 360/* ============================================ 361 RIPPLE EFFECT UTILITY 362 ============================================ */ 363 364.md-ripple { 365 position: relative; 366 overflow: hidden; 367} 368 369.md-ripple::after { 370 content: ''; 371 position: absolute; 372 top: 50%; 373 left: 50%; 374 width: 0; 375 height: 0; 376 background: radial-gradient( 377 circle, 378 var(--md-sys-color-on-surface) 0%, 379 transparent 70% 380 ); 381 opacity: 0; 382 transform: translate(-50%, -50%); 383 transition: 384 width 0.4s var(--md-sys-motion-easing-standard), 385 height 0.4s var(--md-sys-motion-easing-standard), 386 opacity 0.4s var(--md-sys-motion-easing-standard); 387 pointer-events: none; 388} 389 390.md-ripple:active::after { 391 width: 200%; 392 height: 200%; 393 opacity: 0.12; 394} 395 396/* ============================================ 397 ELEVATION SURFACE TINTS 398 ============================================ */ 399 400.md-elevation-0 { 401 background-color: var(--md-sys-color-surface); 402} 403 404.md-elevation-1 { 405 background-color: var(--md-sys-elevation-level1); 406 box-shadow: 407 0 1px 3px 1px rgba(0, 0, 0, 0.15), 408 0 1px 2px 0 rgba(0, 0, 0, 0.3); 409} 410 411.md-elevation-2 { 412 background-color: var(--md-sys-elevation-level2); 413 box-shadow: 414 0 2px 6px 2px rgba(0, 0, 0, 0.15), 415 0 1px 2px 0 rgba(0, 0, 0, 0.3); 416} 417 418.md-elevation-3 { 419 background-color: var(--md-sys-elevation-level3); 420 box-shadow: 421 0 4px 8px 3px rgba(0, 0, 0, 0.15), 422 0 1px 3px 0 rgba(0, 0, 0, 0.3); 423} 424 425.md-elevation-4 { 426 background-color: var(--md-sys-elevation-level4); 427 box-shadow: 428 0 6px 10px 4px rgba(0, 0, 0, 0.15), 429 0 2px 3px 0 rgba(0, 0, 0, 0.3); 430} 431 432.md-elevation-5 { 433 background-color: var(--md-sys-elevation-level5); 434 box-shadow: 435 0 8px 12px 6px rgba(0, 0, 0, 0.15), 436 0 4px 4px 0 rgba(0, 0, 0, 0.3); 437} 438 439/* ============================================ 440 STATE LAYERS 441 ============================================ */ 442 443.md-state-hover { 444 background-color: color-mix( 445 in srgb, 446 var(--md-sys-color-on-surface) 8%, 447 transparent 448 ); 449} 450 451.md-state-focus { 452 background-color: color-mix( 453 in srgb, 454 var(--md-sys-color-on-surface) 12%, 455 transparent 456 ); 457} 458 459.md-state-pressed { 460 background-color: color-mix( 461 in srgb, 462 var(--md-sys-color-on-surface) 12%, 463 transparent 464 ); 465} 466 467.md-state-drag { 468 background-color: color-mix( 469 in srgb, 470 var(--md-sys-color-on-surface) 16%, 471 transparent 472 ); 473} 474 475/* ============================================ 476 TAILWIND THEME CONFIGURATION 477 ============================================ */ 478 479@layer base { 480 * { 481 border-color: var(--md-sys-color-outline-variant); 482 } 483}