refactor(css): add typography scale tokens (#663)

* refactor(css): add typography scale tokens

adds a typography scale to the design system and replaces hardcoded
font-size values across the frontend.

tokens added:
- --text-xs: 0.75rem
- --text-sm: 0.85rem
- --text-base: 0.9rem
- --text-lg: 1rem
- --text-xl: 1.1rem
- --text-2xl: 1.25rem
- --text-3xl: 1.5rem

semantic aliases updated to use scale:
- --text-page-heading: var(--text-3xl)
- --text-body: var(--text-lg)
- --text-small: var(--text-base)

397/471 occurrences tokenized (84%). remaining 74 are edge cases
(large display text, very small text, pixel values).

normalizations:
- 0.7rem → --text-xs (0.75rem)
- 0.8rem → --text-sm (0.85rem)
- 0.95rem → --text-base (0.9rem)

closes #658

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: add digest slash command for external resource analysis

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

authored by zzstoatzz.io Claude Opus 4.5 and committed by GitHub b78cabfe e7879907

+66
.claude/commands/digest.md
··· 1 + --- 2 + description: Extract actionable insights from an external resource 3 + argument-hint: [URL, AT-URI, or description of resource] 4 + --- 5 + 6 + # digest 7 + 8 + break down an external resource and identify what it means for us. 9 + 10 + ## process 11 + 12 + 1. **fetch the resource**: $ARGUMENTS 13 + - use pdsx MCP for AT-URIs (bsky posts, leaflet docs, etc.) 14 + - use WebFetch for URLs 15 + - ask for clarification if the resource type is unclear 16 + 17 + 2. **extract concrete information**: 18 + - what are they doing? 19 + - what's their architecture/approach? 20 + - what are their constraints and priorities? 21 + - what's their roadmap? 22 + 23 + 3. **cross-reference with our state**: 24 + - check open issues for overlap or gaps 25 + - grep codebase for related implementations 26 + - identify where we align or diverge 27 + 28 + 4. **identify actionable implications** - the core output: 29 + - "given that X is true, we should consider Y" 30 + - specific issues to open or update 31 + - code changes to consider 32 + - integration opportunities 33 + - things we're missing or doing wrong 34 + 35 + 5. **present findings** - be direct: 36 + - lead with the implications, not the summary 37 + - include specific file:line or issue references 38 + - propose concrete next steps 39 + 40 + ## anti-patterns 41 + 42 + - philosophical musing without action items 43 + - "we're complementary" without specifics 44 + - agreeing that everything is fine 45 + - backpedaling when challenged 46 + 47 + ## output format 48 + 49 + ``` 50 + ## implications 51 + 52 + 1. **[actionable item]**: [reasoning] 53 + - related: `file.py:123` or issue #456 54 + - suggested: [specific change or issue to create] 55 + 56 + 2. **[actionable item]**: ... 57 + 58 + ## extracted facts 59 + 60 + - [concrete thing from the resource] 61 + - [another concrete thing] 62 + 63 + ## open questions 64 + 65 + - [things to clarify or investigate further] 66 + ```
+8 -8
frontend/src/lib/components/AddToMenu.svelte
··· 510 510 background: transparent; 511 511 border: none; 512 512 color: var(--text-primary); 513 - font-size: 0.9rem; 513 + font-size: var(--text-base); 514 514 font-family: inherit; 515 515 cursor: pointer; 516 516 transition: background 0.15s; ··· 544 544 border: none; 545 545 border-bottom: 1px solid var(--border-subtle); 546 546 color: var(--text-secondary); 547 - font-size: 0.85rem; 547 + font-size: var(--text-sm); 548 548 font-family: inherit; 549 549 cursor: pointer; 550 550 transition: background 0.15s; ··· 588 588 background: transparent; 589 589 border: none; 590 590 color: var(--text-primary); 591 - font-size: 0.9rem; 591 + font-size: var(--text-base); 592 592 font-family: inherit; 593 593 cursor: pointer; 594 594 transition: background 0.15s; ··· 639 639 gap: 0.5rem; 640 640 padding: 1.5rem 1rem; 641 641 color: var(--text-tertiary); 642 - font-size: 0.85rem; 642 + font-size: var(--text-sm); 643 643 } 644 644 645 645 .create-playlist-btn { ··· 652 652 border: none; 653 653 border-top: 1px solid var(--border-subtle); 654 654 color: var(--accent); 655 - font-size: 0.9rem; 655 + font-size: var(--text-base); 656 656 font-family: inherit; 657 657 cursor: pointer; 658 658 transition: background 0.15s; ··· 678 678 border-radius: var(--radius-base); 679 679 color: var(--text-primary); 680 680 font-family: inherit; 681 - font-size: 0.9rem; 681 + font-size: var(--text-base); 682 682 } 683 683 684 684 .create-form input:focus { ··· 701 701 border-radius: var(--radius-base); 702 702 color: white; 703 703 font-family: inherit; 704 - font-size: 0.9rem; 704 + font-size: var(--text-base); 705 705 font-weight: 500; 706 706 cursor: pointer; 707 707 transition: opacity 0.15s; ··· 783 783 784 784 .menu-item { 785 785 padding: 1rem 1.25rem; 786 - font-size: 1rem; 786 + font-size: var(--text-lg); 787 787 } 788 788 789 789 .back-button {
+3 -3
frontend/src/lib/components/AlbumSelect.svelte
··· 104 104 border: 1px solid var(--border-default); 105 105 border-radius: var(--radius-sm); 106 106 color: var(--text-primary); 107 - font-size: 1rem; 107 + font-size: var(--text-lg); 108 108 font-family: inherit; 109 109 transition: all 0.2s; 110 110 } ··· 203 203 } 204 204 205 205 .album-stats { 206 - font-size: 0.85rem; 206 + font-size: var(--text-sm); 207 207 color: var(--text-tertiary); 208 208 overflow: hidden; 209 209 text-overflow: ellipsis; ··· 212 212 213 213 .similar-hint { 214 214 margin-top: 0.5rem; 215 - font-size: 0.85rem; 215 + font-size: var(--text-sm); 216 216 color: var(--warning); 217 217 font-style: italic; 218 218 margin-bottom: 0;
+9 -9
frontend/src/lib/components/BrokenTracks.svelte
··· 213 213 } 214 214 215 215 .section-header h2 { 216 - font-size: 1.5rem; 216 + font-size: var(--text-3xl); 217 217 margin: 0; 218 218 color: var(--warning); 219 219 } ··· 225 225 border-radius: var(--radius-sm); 226 226 color: var(--warning); 227 227 font-family: inherit; 228 - font-size: 0.9rem; 228 + font-size: var(--text-base); 229 229 font-weight: 600; 230 230 cursor: pointer; 231 231 transition: all 0.2s; ··· 249 249 color: var(--warning); 250 250 padding: 0.25rem 0.6rem; 251 251 border-radius: var(--radius-lg); 252 - font-size: 0.85rem; 252 + font-size: var(--text-sm); 253 253 font-weight: 600; 254 254 } 255 255 ··· 280 280 } 281 281 282 282 .warning-icon { 283 - font-size: 1.25rem; 283 + font-size: var(--text-2xl); 284 284 flex-shrink: 0; 285 285 } 286 286 ··· 291 291 292 292 .track-title { 293 293 font-weight: 600; 294 - font-size: 1rem; 294 + font-size: var(--text-lg); 295 295 margin-bottom: 0.25rem; 296 296 color: var(--text-primary); 297 297 } 298 298 299 299 .track-meta { 300 - font-size: 0.9rem; 300 + font-size: var(--text-base); 301 301 color: var(--text-secondary); 302 302 margin-bottom: 0.5rem; 303 303 } 304 304 305 305 .issue-description { 306 - font-size: 0.85rem; 306 + font-size: var(--text-sm); 307 307 color: var(--warning); 308 308 } 309 309 ··· 314 314 border-radius: var(--radius-sm); 315 315 color: var(--warning); 316 316 font-family: inherit; 317 - font-size: 0.9rem; 317 + font-size: var(--text-base); 318 318 font-weight: 500; 319 319 cursor: pointer; 320 320 transition: all 0.2s; ··· 339 339 border: 1px solid var(--border-subtle); 340 340 border-radius: var(--radius-base); 341 341 padding: 1rem; 342 - font-size: 0.9rem; 342 + font-size: var(--text-base); 343 343 color: var(--text-secondary); 344 344 } 345 345
+4 -4
frontend/src/lib/components/ColorSettings.svelte
··· 147 147 align-items: center; 148 148 margin-bottom: 1rem; 149 149 color: var(--text-primary); 150 - font-size: 0.9rem; 150 + font-size: var(--text-base); 151 151 } 152 152 153 153 .close-btn { 154 154 background: transparent; 155 155 border: none; 156 156 color: var(--text-secondary); 157 - font-size: 1.5rem; 157 + font-size: var(--text-3xl); 158 158 cursor: pointer; 159 159 padding: 0; 160 160 width: 24px; ··· 198 198 199 199 .color-value { 200 200 font-family: monospace; 201 - font-size: 0.85rem; 201 + font-size: var(--text-sm); 202 202 color: var(--text-secondary); 203 203 } 204 204 ··· 209 209 } 210 210 211 211 .presets-label { 212 - font-size: 0.85rem; 212 + font-size: var(--text-sm); 213 213 color: var(--text-tertiary); 214 214 } 215 215
+3 -3
frontend/src/lib/components/HandleAutocomplete.svelte
··· 133 133 border: 1px solid var(--border-default); 134 134 border-radius: var(--radius-sm); 135 135 color: var(--text-primary); 136 - font-size: 1rem; 136 + font-size: var(--text-lg); 137 137 font-family: inherit; 138 138 transition: border-color 0.2s; 139 139 box-sizing: border-box; ··· 159 159 top: 50%; 160 160 transform: translateY(-50%); 161 161 color: var(--text-muted); 162 - font-size: 0.85rem; 162 + font-size: var(--text-sm); 163 163 } 164 164 165 165 .results { ··· 252 252 } 253 253 254 254 .handle { 255 - font-size: 0.85rem; 255 + font-size: var(--text-sm); 256 256 color: var(--text-tertiary); 257 257 overflow: hidden; 258 258 text-overflow: ellipsis;
+7 -7
frontend/src/lib/components/HandleSearch.svelte
··· 181 181 border: 1px solid var(--border-default); 182 182 border-radius: var(--radius-sm); 183 183 color: var(--text-primary); 184 - font-size: 1rem; 184 + font-size: var(--text-lg); 185 185 font-family: inherit; 186 186 transition: all 0.2s; 187 187 } ··· 201 201 right: 0.75rem; 202 202 top: 50%; 203 203 transform: translateY(-50%); 204 - font-size: 0.85rem; 204 + font-size: var(--text-sm); 205 205 color: var(--text-muted); 206 206 } 207 207 ··· 299 299 } 300 300 301 301 .result-handle { 302 - font-size: 0.85rem; 302 + font-size: var(--text-sm); 303 303 color: var(--text-tertiary); 304 304 overflow: hidden; 305 305 text-overflow: ellipsis; ··· 322 322 border: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border-subtle)); 323 323 border-radius: var(--radius-xl); 324 324 color: var(--text-primary); 325 - font-size: 0.9rem; 325 + font-size: var(--text-base); 326 326 } 327 327 328 328 .chip-avatar { ··· 365 365 366 366 .max-features-message { 367 367 margin-top: 0.5rem; 368 - font-size: 0.85rem; 368 + font-size: var(--text-sm); 369 369 color: var(--warning); 370 370 } 371 371 ··· 376 376 border: 1px solid color-mix(in srgb, var(--warning) 20%, var(--border-subtle)); 377 377 border-radius: var(--radius-sm); 378 378 color: var(--warning); 379 - font-size: 0.9rem; 379 + font-size: var(--text-base); 380 380 text-align: center; 381 381 } 382 382 ··· 401 401 402 402 .selected-artist-chip { 403 403 padding: 0.4rem 0.6rem; 404 - font-size: 0.85rem; 404 + font-size: var(--text-sm); 405 405 } 406 406 407 407 .chip-avatar {
+8 -8
frontend/src/lib/components/Header.svelte
··· 276 276 color: var(--text-secondary); 277 277 padding: 0.5rem 1rem; 278 278 border-radius: var(--radius-base); 279 - font-size: 0.9rem; 279 + font-size: var(--text-base); 280 280 font-family: inherit; 281 281 cursor: pointer; 282 282 transition: all 0.2s; ··· 320 320 } 321 321 322 322 h1 { 323 - font-size: 1.5rem; 323 + font-size: var(--text-3xl); 324 324 margin: 0; 325 325 color: var(--text-primary); 326 326 transition: color 0.2s; ··· 353 353 .nav-link { 354 354 color: var(--text-secondary); 355 355 text-decoration: none; 356 - font-size: 0.9rem; 356 + font-size: var(--text-base); 357 357 transition: all 0.2s; 358 358 white-space: nowrap; 359 359 display: flex; ··· 388 388 .user-handle { 389 389 color: var(--text-secondary); 390 390 text-decoration: none; 391 - font-size: 0.9rem; 391 + font-size: var(--text-base); 392 392 padding: 0.4rem 0.75rem; 393 393 background: var(--bg-tertiary); 394 394 border-radius: var(--radius-base); ··· 409 409 color: var(--accent); 410 410 padding: 0.5rem 1rem; 411 411 border-radius: var(--radius-base); 412 - font-size: 0.9rem; 412 + font-size: var(--text-base); 413 413 text-decoration: none; 414 414 transition: all 0.2s; 415 415 cursor: pointer; ··· 467 467 468 468 .nav-link { 469 469 padding: 0.3rem 0.5rem; 470 - font-size: 0.8rem; 470 + font-size: var(--text-sm); 471 471 } 472 472 473 473 .nav-link span { ··· 475 475 } 476 476 477 477 .user-handle { 478 - font-size: 0.8rem; 478 + font-size: var(--text-sm); 479 479 padding: 0.3rem 0.5rem; 480 480 } 481 481 482 482 .btn-primary { 483 - font-size: 0.8rem; 483 + font-size: var(--text-sm); 484 484 padding: 0.3rem 0.65rem; 485 485 } 486 486 }
+7 -7
frontend/src/lib/components/HiddenTagsFilter.svelte
··· 126 126 align-items: center; 127 127 gap: 0.5rem; 128 128 flex-wrap: wrap; 129 - font-size: 0.8rem; 129 + font-size: var(--text-sm); 130 130 } 131 131 132 132 .filter-toggle { ··· 157 157 } 158 158 159 159 .filter-count { 160 - font-size: 0.7rem; 160 + font-size: var(--text-xs); 161 161 color: var(--text-tertiary); 162 162 } 163 163 164 164 .filter-label { 165 165 color: var(--text-tertiary); 166 166 white-space: nowrap; 167 - font-size: 0.75rem; 167 + font-size: var(--text-xs); 168 168 font-family: inherit; 169 169 } 170 170 ··· 184 184 border: 1px solid var(--border-default); 185 185 color: var(--text-secondary); 186 186 border-radius: var(--radius-sm); 187 - font-size: 0.75rem; 187 + font-size: var(--text-xs); 188 188 font-family: inherit; 189 189 cursor: pointer; 190 190 transition: all 0.15s; ··· 201 201 } 202 202 203 203 .remove-icon { 204 - font-size: 0.8rem; 204 + font-size: var(--text-sm); 205 205 line-height: 1; 206 206 opacity: 0.5; 207 207 } ··· 221 221 border: 1px dashed var(--border-default); 222 222 border-radius: var(--radius-sm); 223 223 color: var(--text-tertiary); 224 - font-size: 0.8rem; 224 + font-size: var(--text-sm); 225 225 cursor: pointer; 226 226 transition: all 0.15s; 227 227 } ··· 236 236 background: transparent; 237 237 border: 1px solid var(--border-default); 238 238 color: var(--text-primary); 239 - font-size: 0.75rem; 239 + font-size: var(--text-xs); 240 240 font-family: inherit; 241 241 min-height: 24px; 242 242 width: 70px;
+5 -5
frontend/src/lib/components/LikersTooltip.svelte
··· 155 155 .error, 156 156 .empty { 157 157 color: var(--text-tertiary); 158 - font-size: 0.85rem; 158 + font-size: var(--text-sm); 159 159 text-align: center; 160 160 padding: 0.5rem; 161 161 } ··· 206 206 justify-content: center; 207 207 color: var(--text-tertiary); 208 208 font-weight: 600; 209 - font-size: 0.9rem; 209 + font-size: var(--text-base); 210 210 } 211 211 212 212 .liker-info { ··· 217 217 .display-name { 218 218 color: var(--text-primary); 219 219 font-weight: 500; 220 - font-size: 0.9rem; 220 + font-size: var(--text-base); 221 221 white-space: nowrap; 222 222 overflow: hidden; 223 223 text-overflow: ellipsis; ··· 225 225 226 226 .handle { 227 227 color: var(--text-tertiary); 228 - font-size: 0.8rem; 228 + font-size: var(--text-sm); 229 229 white-space: nowrap; 230 230 overflow: hidden; 231 231 text-overflow: ellipsis; ··· 233 233 234 234 .liked-time { 235 235 color: var(--text-muted); 236 - font-size: 0.75rem; 236 + font-size: var(--text-xs); 237 237 flex-shrink: 0; 238 238 } 239 239
+3 -3
frontend/src/lib/components/LinksMenu.svelte
··· 186 186 } 187 187 188 188 .menu-header span { 189 - font-size: 0.9rem; 189 + font-size: var(--text-base); 190 190 font-weight: 600; 191 191 color: var(--text-primary); 192 192 text-transform: uppercase; ··· 263 263 } 264 264 265 265 .link-title { 266 - font-size: 0.95rem; 266 + font-size: var(--text-base); 267 267 font-weight: 500; 268 268 color: var(--text-primary); 269 269 } 270 270 271 271 .link-subtitle { 272 - font-size: 0.8rem; 272 + font-size: var(--text-sm); 273 273 color: var(--text-tertiary); 274 274 } 275 275
+2 -2
frontend/src/lib/components/PlatformStats.svelte
··· 182 182 gap: 0.5rem; 183 183 margin-bottom: 0.75rem; 184 184 color: var(--text-secondary); 185 - font-size: 0.7rem; 185 + font-size: var(--text-xs); 186 186 font-weight: 600; 187 187 text-transform: uppercase; 188 188 letter-spacing: 0.05em; ··· 229 229 } 230 230 231 231 .stats-menu-value { 232 - font-size: 0.95rem; 232 + font-size: var(--text-base); 233 233 font-weight: 600; 234 234 color: var(--text-primary); 235 235 font-variant-numeric: tabular-nums;
+8 -8
frontend/src/lib/components/ProfileMenu.svelte
··· 326 326 } 327 327 328 328 .menu-header span { 329 - font-size: 0.9rem; 329 + font-size: var(--text-base); 330 330 font-weight: 600; 331 331 color: var(--text-primary); 332 332 text-transform: uppercase; ··· 414 414 } 415 415 416 416 .item-title { 417 - font-size: 0.95rem; 417 + font-size: var(--text-base); 418 418 font-weight: 500; 419 419 color: var(--text-primary); 420 420 } 421 421 422 422 .item-subtitle { 423 - font-size: 0.8rem; 423 + font-size: var(--text-sm); 424 424 color: var(--text-tertiary); 425 425 overflow: hidden; 426 426 text-overflow: ellipsis; ··· 443 443 border-radius: var(--radius-base); 444 444 color: var(--text-secondary); 445 445 font-family: inherit; 446 - font-size: 0.85rem; 446 + font-size: var(--text-sm); 447 447 cursor: pointer; 448 448 transition: all 0.15s; 449 449 -webkit-tap-highlight-color: transparent; ··· 469 469 470 470 .settings-section h3 { 471 471 margin: 0; 472 - font-size: 0.75rem; 472 + font-size: var(--text-xs); 473 473 text-transform: uppercase; 474 474 letter-spacing: 0.08em; 475 475 color: var(--text-tertiary); ··· 518 518 } 519 519 520 520 .theme-btn span { 521 - font-size: 0.7rem; 521 + font-size: var(--text-xs); 522 522 text-transform: uppercase; 523 523 letter-spacing: 0.05em; 524 524 } ··· 583 583 align-items: center; 584 584 gap: 0.75rem; 585 585 color: var(--text-primary); 586 - font-size: 0.9rem; 586 + font-size: var(--text-base); 587 587 cursor: pointer; 588 588 padding: 0.5rem 0; 589 589 } ··· 635 635 border-top: 1px solid var(--border-subtle); 636 636 color: var(--text-secondary); 637 637 text-decoration: none; 638 - font-size: 0.9rem; 638 + font-size: var(--text-base); 639 639 transition: color 0.15s; 640 640 } 641 641
+9 -9
frontend/src/lib/components/Queue.svelte
··· 249 249 250 250 .queue-header h2 { 251 251 margin: 0; 252 - font-size: 1rem; 252 + font-size: var(--text-lg); 253 253 text-transform: uppercase; 254 254 letter-spacing: 0.12em; 255 255 color: var(--text-tertiary); ··· 263 263 264 264 .clear-btn { 265 265 padding: 0.25rem 0.75rem; 266 - font-size: 0.75rem; 266 + font-size: var(--text-xs); 267 267 font-family: inherit; 268 268 text-transform: uppercase; 269 269 letter-spacing: 0.08em; ··· 290 290 } 291 291 292 292 .section-label { 293 - font-size: 0.75rem; 293 + font-size: var(--text-xs); 294 294 text-transform: uppercase; 295 295 letter-spacing: 0.08em; 296 296 color: var(--text-tertiary); ··· 316 316 } 317 317 318 318 .now-playing-card .track-artist { 319 - font-size: 0.9rem; 319 + font-size: var(--text-base); 320 320 color: var(--text-secondary); 321 321 } 322 322 ··· 344 344 justify-content: space-between; 345 345 align-items: center; 346 346 color: var(--text-tertiary); 347 - font-size: 0.85rem; 347 + font-size: var(--text-sm); 348 348 text-transform: uppercase; 349 349 letter-spacing: 0.08em; 350 350 } 351 351 352 352 .section-header h3 { 353 353 margin: 0; 354 - font-size: 0.85rem; 354 + font-size: var(--text-sm); 355 355 font-weight: 600; 356 356 color: var(--text-secondary); 357 357 text-transform: uppercase; ··· 449 449 } 450 450 451 451 .track-artist { 452 - font-size: 0.85rem; 452 + font-size: var(--text-sm); 453 453 color: var(--text-tertiary); 454 454 white-space: nowrap; 455 455 overflow: hidden; ··· 524 524 525 525 .empty-state p { 526 526 margin: 0.5rem 0 0.25rem; 527 - font-size: 1.1rem; 527 + font-size: var(--text-xl); 528 528 color: var(--text-secondary); 529 529 } 530 530 531 531 .empty-state span { 532 - font-size: 0.9rem; 532 + font-size: var(--text-base); 533 533 } 534 534 535 535 .queue-tracks::-webkit-scrollbar {
+10 -10
frontend/src/lib/components/SearchModal.svelte
··· 303 303 background: transparent; 304 304 border: none; 305 305 outline: none; 306 - font-size: 1rem; 306 + font-size: var(--text-lg); 307 307 font-family: inherit; 308 308 color: var(--text-primary); 309 309 } ··· 313 313 } 314 314 315 315 .search-shortcut { 316 - font-size: 0.7rem; 316 + font-size: var(--text-xs); 317 317 padding: 0.25rem 0.5rem; 318 318 background: var(--bg-tertiary); 319 319 border: 1px solid var(--border-default); ··· 397 397 justify-content: center; 398 398 background: var(--bg-tertiary); 399 399 border-radius: var(--radius-md); 400 - font-size: 0.9rem; 400 + font-size: var(--text-base); 401 401 flex-shrink: 0; 402 402 position: relative; 403 403 overflow: hidden; ··· 441 441 } 442 442 443 443 .result-title { 444 - font-size: 0.9rem; 444 + font-size: var(--text-base); 445 445 font-weight: 500; 446 446 white-space: nowrap; 447 447 overflow: hidden; ··· 449 449 } 450 450 451 451 .result-subtitle { 452 - font-size: 0.75rem; 452 + font-size: var(--text-xs); 453 453 color: var(--text-secondary); 454 454 white-space: nowrap; 455 455 overflow: hidden; ··· 471 471 padding: 2rem; 472 472 text-align: center; 473 473 color: var(--text-secondary); 474 - font-size: 0.9rem; 474 + font-size: var(--text-base); 475 475 } 476 476 477 477 .search-hints { ··· 482 482 .search-hints p { 483 483 margin: 0 0 1rem 0; 484 484 color: var(--text-secondary); 485 - font-size: 0.85rem; 485 + font-size: var(--text-sm); 486 486 } 487 487 488 488 .hint-shortcuts { ··· 490 490 justify-content: center; 491 491 gap: 1.5rem; 492 492 color: var(--text-muted); 493 - font-size: 0.75rem; 493 + font-size: var(--text-xs); 494 494 } 495 495 496 496 .hint-shortcuts span { ··· 512 512 padding: 1rem; 513 513 text-align: center; 514 514 color: var(--error); 515 - font-size: 0.85rem; 515 + font-size: var(--text-sm); 516 516 } 517 517 518 518 /* mobile optimizations */ ··· 535 535 } 536 536 537 537 .search-input::placeholder { 538 - font-size: 0.85rem; 538 + font-size: var(--text-sm); 539 539 } 540 540 541 541 .search-results {
+2 -2
frontend/src/lib/components/SensitiveImage.svelte
··· 72 72 border: 1px solid var(--border-default); 73 73 border-radius: var(--radius-sm); 74 74 padding: 0.25rem 0.5rem; 75 - font-size: 0.7rem; 75 + font-size: var(--text-xs); 76 76 color: var(--text-tertiary); 77 77 white-space: nowrap; 78 78 opacity: 0; ··· 89 89 transform: translate(-50%, -50%); 90 90 margin-bottom: 0; 91 91 padding: 0.5rem 0.75rem; 92 - font-size: 0.8rem; 92 + font-size: var(--text-sm); 93 93 } 94 94 95 95 .sensitive-wrapper.blur:hover .sensitive-tooltip {
+7 -7
frontend/src/lib/components/SettingsMenu.svelte
··· 216 216 align-items: center; 217 217 color: var(--text-primary); 218 218 font-weight: 600; 219 - font-size: 0.95rem; 219 + font-size: var(--text-base); 220 220 } 221 221 222 222 .close-btn { ··· 245 245 246 246 .settings-section h3 { 247 247 margin: 0; 248 - font-size: 0.85rem; 248 + font-size: var(--text-sm); 249 249 text-transform: uppercase; 250 250 letter-spacing: 0.08em; 251 251 color: var(--text-tertiary); ··· 288 288 } 289 289 290 290 .theme-btn span { 291 - font-size: 0.7rem; 291 + font-size: var(--text-xs); 292 292 text-transform: uppercase; 293 293 letter-spacing: 0.05em; 294 294 } ··· 319 319 320 320 .color-value { 321 321 font-family: monospace; 322 - font-size: 0.85rem; 322 + font-size: var(--text-sm); 323 323 color: var(--text-secondary); 324 324 } 325 325 ··· 354 354 align-items: center; 355 355 gap: 0.65rem; 356 356 color: var(--text-primary); 357 - font-size: 0.9rem; 357 + font-size: var(--text-base); 358 358 } 359 359 360 360 .toggle input { ··· 403 403 .toggle-hint { 404 404 margin: 0; 405 405 color: var(--text-tertiary); 406 - font-size: 0.8rem; 406 + font-size: var(--text-sm); 407 407 line-height: 1.3; 408 408 } 409 409 ··· 415 415 border-top: 1px solid var(--border-subtle); 416 416 color: var(--text-secondary); 417 417 text-decoration: none; 418 - font-size: 0.85rem; 418 + font-size: var(--text-sm); 419 419 transition: color 0.15s; 420 420 } 421 421
+1 -1
frontend/src/lib/components/ShareButton.svelte
··· 68 68 color: var(--accent); 69 69 padding: 0.25rem 0.75rem; 70 70 border-radius: var(--radius-sm); 71 - font-size: 0.75rem; 71 + font-size: var(--text-xs); 72 72 white-space: nowrap; 73 73 pointer-events: none; 74 74 animation: fadeIn 0.2s ease-in;
+1 -1
frontend/src/lib/components/SupporterBadge.svelte
··· 24 24 border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent); 25 25 border-radius: var(--radius-sm); 26 26 color: var(--accent); 27 - font-size: 0.75rem; 27 + font-size: var(--text-xs); 28 28 font-weight: 500; 29 29 text-transform: lowercase; 30 30 white-space: nowrap;
+5 -5
frontend/src/lib/components/TagInput.svelte
··· 196 196 border: 1px solid color-mix(in srgb, var(--accent) 20%, transparent); 197 197 color: var(--accent-hover); 198 198 border-radius: var(--radius-xl); 199 - font-size: 0.9rem; 199 + font-size: var(--text-base); 200 200 font-weight: 500; 201 201 } 202 202 ··· 233 233 background: transparent; 234 234 border: none; 235 235 color: var(--text-primary); 236 - font-size: 1rem; 236 + font-size: var(--text-lg); 237 237 font-family: inherit; 238 238 outline: none; 239 239 } ··· 249 249 250 250 .spinner { 251 251 color: var(--text-muted); 252 - font-size: 0.85rem; 252 + font-size: var(--text-sm); 253 253 margin-left: auto; 254 254 } 255 255 ··· 317 317 } 318 318 319 319 .tag-count { 320 - font-size: 0.85rem; 320 + font-size: var(--text-sm); 321 321 color: var(--text-tertiary); 322 322 } 323 323 ··· 332 332 333 333 .tag-chip { 334 334 padding: 0.3rem 0.5rem; 335 - font-size: 0.85rem; 335 + font-size: var(--text-sm); 336 336 } 337 337 } 338 338 </style>
+4 -4
frontend/src/lib/components/Toast.svelte
··· 63 63 border: 1px solid rgba(255, 255, 255, 0.06); 64 64 border-radius: var(--radius-md); 65 65 pointer-events: none; 66 - font-size: 0.85rem; 66 + font-size: var(--text-sm); 67 67 max-width: 450px; 68 68 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); 69 69 } 70 70 71 71 .toast-icon { 72 - font-size: 0.8rem; 72 + font-size: var(--text-sm); 73 73 flex-shrink: 0; 74 74 opacity: 0.7; 75 75 margin-top: 0.1rem; ··· 135 135 136 136 .toast { 137 137 padding: 0.35rem 0.7rem; 138 - font-size: 0.8rem; 138 + font-size: var(--text-sm); 139 139 max-width: 90vw; 140 140 } 141 141 142 142 .toast-icon { 143 - font-size: 0.75rem; 143 + font-size: var(--text-xs); 144 144 } 145 145 146 146 .toast-message {
+9 -9
frontend/src/lib/components/TrackActionsMenu.svelte
··· 474 474 } 475 475 476 476 .menu-item span { 477 - font-size: 1rem; 477 + font-size: var(--text-lg); 478 478 font-weight: 400; 479 479 flex: 1; 480 480 } ··· 508 508 border: none; 509 509 border-bottom: 1px solid var(--border-default); 510 510 color: var(--text-secondary); 511 - font-size: 0.9rem; 511 + font-size: var(--text-base); 512 512 font-family: inherit; 513 513 cursor: pointer; 514 514 transition: background 0.15s; ··· 534 534 border: none; 535 535 border-bottom: 1px solid var(--border-subtle); 536 536 color: var(--text-primary); 537 - font-size: 1rem; 537 + font-size: var(--text-lg); 538 538 font-family: inherit; 539 539 cursor: pointer; 540 540 transition: background 0.15s; ··· 590 590 gap: 0.5rem; 591 591 padding: 2rem 1rem; 592 592 color: var(--text-tertiary); 593 - font-size: 0.9rem; 593 + font-size: var(--text-base); 594 594 } 595 595 596 596 .create-playlist-btn { ··· 603 603 border: none; 604 604 border-top: 1px solid var(--border-subtle); 605 605 color: var(--accent); 606 - font-size: 1rem; 606 + font-size: var(--text-lg); 607 607 font-family: inherit; 608 608 cursor: pointer; 609 609 transition: background 0.15s; ··· 630 630 border-radius: var(--radius-md); 631 631 color: var(--text-primary); 632 632 font-family: inherit; 633 - font-size: 1rem; 633 + font-size: var(--text-lg); 634 634 } 635 635 636 636 .create-form input:focus { ··· 653 653 border-radius: var(--radius-md); 654 654 color: white; 655 655 font-family: inherit; 656 - font-size: 1rem; 656 + font-size: var(--text-lg); 657 657 font-weight: 500; 658 658 cursor: pointer; 659 659 transition: opacity 0.15s; ··· 723 723 } 724 724 725 725 .menu-item span { 726 - font-size: 0.9rem; 726 + font-size: var(--text-base); 727 727 } 728 728 729 729 .menu-item svg { ··· 737 737 738 738 .playlist-item { 739 739 padding: 0.625rem 1rem; 740 - font-size: 0.9rem; 740 + font-size: var(--text-base); 741 741 } 742 742 743 743 .playlist-thumb,
+12 -12
frontend/src/lib/components/TrackItem.svelte
··· 370 370 371 371 .track-index { 372 372 width: 24px; 373 - font-size: 0.85rem; 373 + font-size: var(--text-sm); 374 374 color: var(--text-muted); 375 375 text-align: center; 376 376 flex-shrink: 0; ··· 540 540 align-items: flex-start; 541 541 gap: 0.15rem; 542 542 color: var(--text-secondary); 543 - font-size: 0.9rem; 543 + font-size: var(--text-base); 544 544 font-family: inherit; 545 545 min-width: 0; 546 546 width: 100%; ··· 560 560 561 561 .metadata-separator { 562 562 display: none; 563 - font-size: 0.7rem; 563 + font-size: var(--text-xs); 564 564 } 565 565 566 566 .artist-link { ··· 660 660 background: color-mix(in srgb, var(--accent) 15%, transparent); 661 661 color: var(--accent-hover); 662 662 border-radius: var(--radius-sm); 663 - font-size: 0.75rem; 663 + font-size: var(--text-xs); 664 664 font-weight: 500; 665 665 text-decoration: none; 666 666 transition: all 0.15s; ··· 680 680 color: var(--text-muted); 681 681 border: none; 682 682 border-radius: var(--radius-sm); 683 - font-size: 0.75rem; 683 + font-size: var(--text-xs); 684 684 font-weight: 500; 685 685 font-family: inherit; 686 686 cursor: pointer; ··· 695 695 } 696 696 697 697 .track-meta { 698 - font-size: 0.8rem; 698 + font-size: var(--text-sm); 699 699 color: var(--text-tertiary); 700 700 display: flex; 701 701 align-items: center; ··· 709 709 710 710 .meta-separator { 711 711 color: var(--text-muted); 712 - font-size: 0.7rem; 712 + font-size: var(--text-xs); 713 713 } 714 714 715 715 .likes { ··· 822 822 } 823 823 824 824 .track-title { 825 - font-size: 0.9rem; 825 + font-size: var(--text-base); 826 826 } 827 827 828 828 .track-metadata { 829 - font-size: 0.8rem; 829 + font-size: var(--text-sm); 830 830 gap: 0.35rem; 831 831 } 832 832 833 833 .track-meta { 834 - font-size: 0.7rem; 834 + font-size: var(--text-xs); 835 835 } 836 836 837 837 .track-actions { ··· 875 875 } 876 876 877 877 .track-title { 878 - font-size: 0.85rem; 878 + font-size: var(--text-sm); 879 879 } 880 880 881 881 .track-metadata { 882 - font-size: 0.75rem; 882 + font-size: var(--text-xs); 883 883 } 884 884 885 885 .metadata-separator {
+1 -1
frontend/src/lib/components/WaveLoading.svelte
··· 67 67 .message { 68 68 margin: 0; 69 69 color: var(--text-secondary); 70 - font-size: 0.9rem; 70 + font-size: var(--text-base); 71 71 text-align: center; 72 72 } 73 73 </style>
+2 -2
frontend/src/lib/components/player/PlaybackControls.svelte
··· 310 310 } 311 311 312 312 .time { 313 - font-size: 0.85rem; 313 + font-size: var(--text-sm); 314 314 color: var(--text-tertiary); 315 315 min-width: 45px; 316 316 font-variant-numeric: tabular-nums; ··· 493 493 } 494 494 495 495 .time { 496 - font-size: 0.75rem; 496 + font-size: var(--text-xs); 497 497 min-width: 38px; 498 498 } 499 499
+3 -3
frontend/src/lib/components/player/TrackInfo.svelte
··· 197 197 198 198 .player-title, 199 199 .player-title-link { 200 - font-size: 0.95rem; 200 + font-size: var(--text-base); 201 201 font-weight: 600; 202 202 color: var(--text-primary); 203 203 margin-bottom: 0; ··· 384 384 385 385 .player-title, 386 386 .player-title-link { 387 - font-size: 0.9rem; 387 + font-size: var(--text-base); 388 388 margin-bottom: 0; 389 389 } 390 390 391 391 .player-metadata { 392 - font-size: 0.8rem; 392 + font-size: var(--text-sm); 393 393 } 394 394 395 395 .player-title.scrolling,
+4 -4
frontend/src/routes/+error.svelte
··· 62 62 } 63 63 64 64 .error-message { 65 - font-size: 1.25rem; 65 + font-size: var(--text-2xl); 66 66 color: var(--text-secondary); 67 67 margin: 0 0 0.5rem 0; 68 68 } 69 69 70 70 .error-detail { 71 - font-size: 1rem; 71 + font-size: var(--text-lg); 72 72 color: var(--text-tertiary); 73 73 margin: 0 0 2rem 0; 74 74 } ··· 76 76 .home-link { 77 77 color: var(--accent); 78 78 text-decoration: none; 79 - font-size: 1.1rem; 79 + font-size: var(--text-xl); 80 80 padding: 0.75rem 1.5rem; 81 81 border: 1px solid var(--accent); 82 82 border-radius: var(--radius-base); ··· 98 98 } 99 99 100 100 .error-message { 101 - font-size: 1.1rem; 101 + font-size: var(--text-xl); 102 102 } 103 103 } 104 104 </style>
+12 -3
frontend/src/routes/+layout.svelte
··· 450 450 --text-muted: #666666; 451 451 452 452 /* typography scale */ 453 - --text-page-heading: 1.5rem; 453 + --text-xs: 0.75rem; 454 + --text-sm: 0.85rem; 455 + --text-base: 0.9rem; 456 + --text-lg: 1rem; 457 + --text-xl: 1.1rem; 458 + --text-2xl: 1.25rem; 459 + --text-3xl: 1.5rem; 460 + 461 + /* semantic typography (aliases) */ 462 + --text-page-heading: var(--text-3xl); 454 463 --text-section-heading: 1.2rem; 455 - --text-body: 1rem; 456 - --text-small: 0.9rem; 464 + --text-body: var(--text-lg); 465 + --text-small: var(--text-base); 457 466 458 467 /* border radius scale */ 459 468 --radius-sm: 4px;
+1 -1
frontend/src/routes/+page.svelte
··· 227 227 } 228 228 229 229 .section-header h2 { 230 - font-size: 1.25rem; 230 + font-size: var(--text-2xl); 231 231 } 232 232 } 233 233 </style>
+16 -16
frontend/src/routes/costs/+page.svelte
··· 373 373 374 374 .subtitle { 375 375 color: var(--text-tertiary); 376 - font-size: 0.9rem; 376 + font-size: var(--text-base); 377 377 margin: 0; 378 378 } 379 379 ··· 391 391 392 392 .error-state .hint { 393 393 color: var(--text-tertiary); 394 - font-size: 0.85rem; 394 + font-size: var(--text-sm); 395 395 margin-top: 0.5rem; 396 396 } 397 397 ··· 411 411 } 412 412 413 413 .total-label { 414 - font-size: 0.8rem; 414 + font-size: var(--text-sm); 415 415 text-transform: uppercase; 416 416 letter-spacing: 0.08em; 417 417 color: var(--text-tertiary); ··· 426 426 427 427 .updated { 428 428 text-align: center; 429 - font-size: 0.75rem; 429 + font-size: var(--text-xs); 430 430 color: var(--text-tertiary); 431 431 margin-top: 0.75rem; 432 432 } ··· 438 438 439 439 .breakdown-section h2, 440 440 .audd-section h2 { 441 - font-size: 0.8rem; 441 + font-size: var(--text-sm); 442 442 text-transform: uppercase; 443 443 letter-spacing: 0.08em; 444 444 color: var(--text-tertiary); ··· 496 496 } 497 497 498 498 .cost-note { 499 - font-size: 0.75rem; 499 + font-size: var(--text-xs); 500 500 color: var(--text-tertiary); 501 501 } 502 502 ··· 529 529 .time-range-toggle button { 530 530 padding: 0.35rem 0.75rem; 531 531 font-family: inherit; 532 - font-size: 0.75rem; 532 + font-size: var(--text-xs); 533 533 font-weight: 500; 534 534 background: transparent; 535 535 border: none; ··· 551 551 .no-data { 552 552 text-align: center; 553 553 color: var(--text-tertiary); 554 - font-size: 0.85rem; 554 + font-size: var(--text-sm); 555 555 padding: 2rem; 556 556 background: var(--bg-tertiary); 557 557 border: 1px solid var(--border-subtle); ··· 566 566 } 567 567 568 568 .audd-explainer { 569 - font-size: 0.8rem; 569 + font-size: var(--text-sm); 570 570 color: var(--text-secondary); 571 571 margin-bottom: 1.5rem; 572 572 line-height: 1.5; ··· 587 587 } 588 588 589 589 .stat-value { 590 - font-size: 1.25rem; 590 + font-size: var(--text-2xl); 591 591 font-weight: 700; 592 592 color: var(--text-primary); 593 593 font-variant-numeric: tabular-nums; 594 594 } 595 595 596 596 .stat-label { 597 - font-size: 0.7rem; 597 + font-size: var(--text-xs); 598 598 color: var(--text-tertiary); 599 599 text-align: center; 600 600 margin-top: 0.25rem; ··· 610 610 } 611 611 612 612 .daily-chart h3 { 613 - font-size: 0.75rem; 613 + font-size: var(--text-xs); 614 614 text-transform: uppercase; 615 615 letter-spacing: 0.05em; 616 616 color: var(--text-tertiary); ··· 683 683 684 684 .support-text h3 { 685 685 margin: 0 0 0.5rem; 686 - font-size: 1.1rem; 686 + font-size: var(--text-xl); 687 687 color: var(--text-primary); 688 688 } 689 689 690 690 .support-text p { 691 691 margin: 0 0 1.5rem; 692 692 color: var(--text-secondary); 693 - font-size: 0.9rem; 693 + font-size: var(--text-base); 694 694 } 695 695 696 696 .support-button { ··· 703 703 border-radius: var(--radius-md); 704 704 text-decoration: none; 705 705 font-weight: 600; 706 - font-size: 0.9rem; 706 + font-size: var(--text-base); 707 707 transition: transform 0.15s, box-shadow 0.15s; 708 708 } 709 709 ··· 715 715 /* footer */ 716 716 .footer-note { 717 717 text-align: center; 718 - font-size: 0.8rem; 718 + font-size: var(--text-sm); 719 719 color: var(--text-tertiary); 720 720 padding-bottom: 1rem; 721 721 }
+15 -15
frontend/src/routes/library/+page.svelte
··· 264 264 } 265 265 266 266 .page-header p { 267 - font-size: 0.9rem; 267 + font-size: var(--text-base); 268 268 color: var(--text-tertiary); 269 269 margin: 0; 270 270 } ··· 331 331 } 332 332 333 333 .collection-info h3 { 334 - font-size: 1rem; 334 + font-size: var(--text-lg); 335 335 font-weight: 600; 336 336 color: var(--text-primary); 337 337 margin: 0 0 0.15rem 0; ··· 341 341 } 342 342 343 343 .collection-info p { 344 - font-size: 0.85rem; 344 + font-size: var(--text-sm); 345 345 color: var(--text-tertiary); 346 346 margin: 0; 347 347 } ··· 370 370 } 371 371 372 372 .section-header h2 { 373 - font-size: 1.1rem; 373 + font-size: var(--text-xl); 374 374 font-weight: 600; 375 375 color: var(--text-primary); 376 376 margin: 0; ··· 432 432 } 433 433 434 434 .empty-state p { 435 - font-size: 1rem; 435 + font-size: var(--text-lg); 436 436 font-weight: 500; 437 437 color: var(--text-secondary); 438 438 margin: 0 0 0.25rem 0; 439 439 } 440 440 441 441 .empty-state span { 442 - font-size: 0.85rem; 442 + font-size: var(--text-sm); 443 443 color: var(--text-muted); 444 444 } 445 445 ··· 476 476 } 477 477 478 478 .modal-header h3 { 479 - font-size: 1.1rem; 479 + font-size: var(--text-xl); 480 480 font-weight: 600; 481 481 color: var(--text-primary); 482 482 margin: 0; ··· 507 507 508 508 .modal-body label { 509 509 display: block; 510 - font-size: 0.85rem; 510 + font-size: var(--text-sm); 511 511 font-weight: 500; 512 512 color: var(--text-secondary); 513 513 margin-bottom: 0.5rem; ··· 520 520 border: 1px solid var(--border-default); 521 521 border-radius: var(--radius-md); 522 522 font-family: inherit; 523 - font-size: 1rem; 523 + font-size: var(--text-lg); 524 524 color: var(--text-primary); 525 525 transition: border-color 0.15s; 526 526 } ··· 536 536 537 537 .modal-body .error { 538 538 margin: 0.5rem 0 0 0; 539 - font-size: 0.85rem; 539 + font-size: var(--text-sm); 540 540 color: #ef4444; 541 541 } 542 542 ··· 552 552 padding: 0.625rem 1.25rem; 553 553 border-radius: var(--radius-md); 554 554 font-family: inherit; 555 - font-size: 0.9rem; 555 + font-size: var(--text-base); 556 556 font-weight: 500; 557 557 cursor: pointer; 558 558 transition: all 0.15s; ··· 596 596 } 597 597 598 598 .page-header h1 { 599 - font-size: 1.5rem; 599 + font-size: var(--text-3xl); 600 600 } 601 601 602 602 .collection-card { ··· 609 609 } 610 610 611 611 .collection-info h3 { 612 - font-size: 0.95rem; 612 + font-size: var(--text-base); 613 613 } 614 614 615 615 .section-header h2 { 616 - font-size: 1rem; 616 + font-size: var(--text-lg); 617 617 } 618 618 619 619 .create-btn { 620 620 padding: 0.5rem 0.875rem; 621 - font-size: 0.85rem; 621 + font-size: var(--text-sm); 622 622 } 623 623 624 624 .empty-state {
+8 -8
frontend/src/routes/liked/+page.svelte
··· 345 345 } 346 346 347 347 .count { 348 - font-size: 0.85rem; 348 + font-size: var(--text-sm); 349 349 font-weight: 500; 350 350 color: var(--text-tertiary); 351 351 background: var(--bg-tertiary); ··· 364 364 padding: 0.75rem 1.5rem; 365 365 border-radius: var(--radius-2xl); 366 366 font-weight: 600; 367 - font-size: 0.95rem; 367 + font-size: var(--text-base); 368 368 font-family: inherit; 369 369 cursor: pointer; 370 370 transition: all 0.2s; ··· 419 419 } 420 420 421 421 .empty-state h2 { 422 - font-size: 1.5rem; 422 + font-size: var(--text-3xl); 423 423 font-weight: 600; 424 424 color: var(--text-secondary); 425 425 margin: 0 0 0.5rem 0; 426 426 } 427 427 428 428 .empty-state p { 429 - font-size: 0.95rem; 429 + font-size: var(--text-base); 430 430 margin: 0; 431 431 } 432 432 ··· 505 505 } 506 506 507 507 .section-header h2 { 508 - font-size: 1.25rem; 508 + font-size: var(--text-2xl); 509 509 } 510 510 511 511 .count { 512 - font-size: 0.8rem; 512 + font-size: var(--text-sm); 513 513 padding: 0.15rem 0.45rem; 514 514 } 515 515 ··· 518 518 } 519 519 520 520 .empty-state h2 { 521 - font-size: 1.25rem; 521 + font-size: var(--text-2xl); 522 522 } 523 523 524 524 .header-actions { ··· 528 528 .queue-button, 529 529 .reorder-button { 530 530 padding: 0.6rem 1rem; 531 - font-size: 0.85rem; 531 + font-size: var(--text-sm); 532 532 } 533 533 534 534 .queue-button svg,
+14 -14
frontend/src/routes/liked/[handle]/+page.svelte
··· 137 137 justify-content: center; 138 138 background: var(--bg-tertiary); 139 139 color: var(--text-secondary); 140 - font-size: 1.5rem; 140 + font-size: var(--text-3xl); 141 141 font-weight: 600; 142 142 } 143 143 ··· 149 149 } 150 150 151 151 .user-info h1 { 152 - font-size: 1.5rem; 152 + font-size: var(--text-3xl); 153 153 font-weight: 700; 154 154 color: var(--text-primary); 155 155 margin: 0; ··· 159 159 } 160 160 161 161 .handle { 162 - font-size: 0.9rem; 162 + font-size: var(--text-base); 163 163 color: var(--text-tertiary); 164 164 text-decoration: none; 165 165 transition: color 0.15s; ··· 189 189 } 190 190 191 191 .count { 192 - font-size: 0.95rem; 192 + font-size: var(--text-base); 193 193 font-weight: 500; 194 194 color: var(--text-secondary); 195 195 } ··· 209 209 border: 1px solid var(--border-default); 210 210 color: var(--text-secondary); 211 211 border-radius: var(--radius-base); 212 - font-size: 0.85rem; 212 + font-size: var(--text-sm); 213 213 font-family: inherit; 214 214 cursor: pointer; 215 215 transition: all 0.15s; ··· 241 241 } 242 242 243 243 .empty-state h2 { 244 - font-size: 1.5rem; 244 + font-size: var(--text-3xl); 245 245 font-weight: 600; 246 246 color: var(--text-secondary); 247 247 margin: 0 0 0.5rem 0; 248 248 } 249 249 250 250 .empty-state p { 251 - font-size: 0.95rem; 251 + font-size: var(--text-base); 252 252 margin: 0; 253 253 } 254 254 ··· 275 275 } 276 276 277 277 .avatar-placeholder { 278 - font-size: 1.25rem; 278 + font-size: var(--text-2xl); 279 279 } 280 280 281 281 .user-info h1 { 282 - font-size: 1.25rem; 282 + font-size: var(--text-2xl); 283 283 } 284 284 285 285 .handle { 286 - font-size: 0.85rem; 286 + font-size: var(--text-sm); 287 287 } 288 288 289 289 .section-header h2 { 290 - font-size: 1.25rem; 290 + font-size: var(--text-2xl); 291 291 } 292 292 293 293 .count { 294 - font-size: 0.85rem; 294 + font-size: var(--text-sm); 295 295 } 296 296 297 297 .empty-state { ··· 299 299 } 300 300 301 301 .empty-state h2 { 302 - font-size: 1.25rem; 302 + font-size: var(--text-2xl); 303 303 } 304 304 305 305 .btn-action { 306 306 padding: 0.45rem 0.7rem; 307 - font-size: 0.8rem; 307 + font-size: var(--text-sm); 308 308 } 309 309 310 310 .btn-action svg {
+5 -5
frontend/src/routes/login/+page.svelte
··· 171 171 172 172 label { 173 173 color: var(--text-secondary); 174 - font-size: 0.9rem; 174 + font-size: var(--text-base); 175 175 } 176 176 177 177 button.primary { ··· 181 181 color: white; 182 182 border: none; 183 183 border-radius: var(--radius-md); 184 - font-size: 0.95rem; 184 + font-size: var(--text-base); 185 185 font-weight: 500; 186 186 font-family: inherit; 187 187 cursor: pointer; ··· 213 213 border: none; 214 214 color: var(--text-secondary); 215 215 font-family: inherit; 216 - font-size: 0.9rem; 216 + font-size: var(--text-base); 217 217 cursor: pointer; 218 218 text-align: left; 219 219 } ··· 234 234 .faq-content { 235 235 padding: 0 0 1rem 0; 236 236 color: var(--text-tertiary); 237 - font-size: 0.85rem; 237 + font-size: var(--text-sm); 238 238 line-height: 1.6; 239 239 } 240 240 ··· 269 269 } 270 270 271 271 h1 { 272 - font-size: 1.5rem; 272 + font-size: var(--text-3xl); 273 273 } 274 274 } 275 275 </style>
+20 -20
frontend/src/routes/playlist/[id]/+page.svelte
··· 1400 1400 1401 1401 .art-edit-overlay span { 1402 1402 font-family: inherit; 1403 - font-size: 0.85rem; 1403 + font-size: var(--text-sm); 1404 1404 font-weight: 500; 1405 1405 } 1406 1406 ··· 1432 1432 1433 1433 .playlist-type { 1434 1434 text-transform: uppercase; 1435 - font-size: 0.75rem; 1435 + font-size: var(--text-xs); 1436 1436 font-weight: 600; 1437 1437 letter-spacing: 0.1em; 1438 1438 color: var(--text-tertiary); ··· 1473 1473 display: flex; 1474 1474 align-items: center; 1475 1475 gap: 0.75rem; 1476 - font-size: 0.95rem; 1476 + font-size: var(--text-base); 1477 1477 color: var(--text-secondary); 1478 1478 } 1479 1479 ··· 1490 1490 1491 1491 .meta-separator { 1492 1492 color: var(--text-muted); 1493 - font-size: 0.7rem; 1493 + font-size: var(--text-xs); 1494 1494 } 1495 1495 1496 1496 .show-on-profile-toggle { ··· 1499 1499 gap: 0.5rem; 1500 1500 margin-top: 0.75rem; 1501 1501 cursor: pointer; 1502 - font-size: 0.85rem; 1502 + font-size: var(--text-sm); 1503 1503 color: var(--text-secondary); 1504 1504 } 1505 1505 ··· 1562 1562 padding: 0.75rem 1.5rem; 1563 1563 border-radius: var(--radius-2xl); 1564 1564 font-weight: 600; 1565 - font-size: 0.95rem; 1565 + font-size: var(--text-base); 1566 1566 font-family: inherit; 1567 1567 cursor: pointer; 1568 1568 transition: all 0.2s; ··· 1615 1615 } 1616 1616 1617 1617 .section-heading { 1618 - font-size: 1.25rem; 1618 + font-size: var(--text-2xl); 1619 1619 font-weight: 600; 1620 1620 color: var(--text-primary); 1621 1621 margin-bottom: 1rem; ··· 1735 1735 border-radius: var(--radius-md); 1736 1736 color: var(--text-tertiary); 1737 1737 font-family: inherit; 1738 - font-size: 0.9rem; 1738 + font-size: var(--text-base); 1739 1739 cursor: pointer; 1740 1740 transition: all 0.2s; 1741 1741 } ··· 1769 1769 } 1770 1770 1771 1771 .empty-state p { 1772 - font-size: 1rem; 1772 + font-size: var(--text-lg); 1773 1773 font-weight: 500; 1774 1774 color: var(--text-secondary); 1775 1775 margin: 0 0 0.25rem 0; 1776 1776 } 1777 1777 1778 1778 .empty-state span { 1779 - font-size: 0.85rem; 1779 + font-size: var(--text-sm); 1780 1780 color: var(--text-muted); 1781 1781 margin-bottom: 1.5rem; 1782 1782 } ··· 1788 1788 border: none; 1789 1789 border-radius: var(--radius-md); 1790 1790 font-family: inherit; 1791 - font-size: 0.9rem; 1791 + font-size: var(--text-base); 1792 1792 font-weight: 500; 1793 1793 cursor: pointer; 1794 1794 transition: all 0.15s; ··· 1838 1838 } 1839 1839 1840 1840 .modal-header h3 { 1841 - font-size: 1.1rem; 1841 + font-size: var(--text-xl); 1842 1842 font-weight: 600; 1843 1843 color: var(--text-primary); 1844 1844 margin: 0; ··· 1877 1877 background: transparent; 1878 1878 border: none; 1879 1879 font-family: inherit; 1880 - font-size: 1rem; 1880 + font-size: var(--text-lg); 1881 1881 color: var(--text-primary); 1882 1882 outline: none; 1883 1883 } ··· 1898 1898 padding: 2rem 1.5rem; 1899 1899 text-align: center; 1900 1900 color: var(--text-muted); 1901 - font-size: 0.9rem; 1901 + font-size: var(--text-base); 1902 1902 margin: 0; 1903 1903 } 1904 1904 ··· 1947 1947 } 1948 1948 1949 1949 .result-title { 1950 - font-size: 0.9rem; 1950 + font-size: var(--text-base); 1951 1951 font-weight: 500; 1952 1952 color: var(--text-primary); 1953 1953 white-space: nowrap; ··· 1956 1956 } 1957 1957 1958 1958 .result-artist { 1959 - font-size: 0.8rem; 1959 + font-size: var(--text-sm); 1960 1960 color: var(--text-tertiary); 1961 1961 white-space: nowrap; 1962 1962 overflow: hidden; ··· 1994 1994 .modal-body p { 1995 1995 margin: 0; 1996 1996 color: var(--text-secondary); 1997 - font-size: 0.95rem; 1997 + font-size: var(--text-base); 1998 1998 line-height: 1.5; 1999 1999 } 2000 2000 ··· 2010 2010 padding: 0.625rem 1.25rem; 2011 2011 border-radius: var(--radius-md); 2012 2012 font-family: inherit; 2013 - font-size: 0.9rem; 2013 + font-size: var(--text-base); 2014 2014 font-weight: 500; 2015 2015 cursor: pointer; 2016 2016 transition: all 0.15s; ··· 2099 2099 } 2100 2100 2101 2101 .playlist-meta { 2102 - font-size: 0.85rem; 2102 + font-size: var(--text-sm); 2103 2103 } 2104 2104 2105 2105 .playlist-actions { ··· 2142 2142 } 2143 2143 2144 2144 .playlist-meta { 2145 - font-size: 0.8rem; 2145 + font-size: var(--text-sm); 2146 2146 flex-wrap: wrap; 2147 2147 } 2148 2148 }
+64 -64
frontend/src/routes/portal/+page.svelte
··· 1142 1142 .view-profile-link { 1143 1143 color: var(--text-secondary); 1144 1144 text-decoration: none; 1145 - font-size: 0.8rem; 1145 + font-size: var(--text-sm); 1146 1146 padding: 0.35rem 0.6rem; 1147 1147 background: var(--bg-tertiary); 1148 1148 border-radius: var(--radius-sm); ··· 1160 1160 .settings-link { 1161 1161 color: var(--text-secondary); 1162 1162 text-decoration: none; 1163 - font-size: 0.8rem; 1163 + font-size: var(--text-sm); 1164 1164 padding: 0.35rem 0.6rem; 1165 1165 background: var(--bg-tertiary); 1166 1166 border-radius: var(--radius-sm); ··· 1219 1219 .upload-card-title { 1220 1220 display: block; 1221 1221 font-weight: 600; 1222 - font-size: 0.95rem; 1222 + font-size: var(--text-base); 1223 1223 color: var(--text-primary); 1224 1224 } 1225 1225 1226 1226 .upload-card-subtitle { 1227 1227 display: block; 1228 - font-size: 0.8rem; 1228 + font-size: var(--text-sm); 1229 1229 color: var(--text-tertiary); 1230 1230 } 1231 1231 ··· 1259 1259 display: block; 1260 1260 color: var(--text-secondary); 1261 1261 margin-bottom: 0.4rem; 1262 - font-size: 0.85rem; 1262 + font-size: var(--text-sm); 1263 1263 } 1264 1264 1265 1265 input[type='text'] { ··· 1269 1269 border: 1px solid var(--border-default); 1270 1270 border-radius: var(--radius-sm); 1271 1271 color: var(--text-primary); 1272 - font-size: 0.95rem; 1272 + font-size: var(--text-base); 1273 1273 font-family: inherit; 1274 1274 transition: all 0.15s; 1275 1275 } ··· 1291 1291 border: 1px solid var(--border-default); 1292 1292 border-radius: var(--radius-sm); 1293 1293 color: var(--text-primary); 1294 - font-size: 0.95rem; 1294 + font-size: var(--text-base); 1295 1295 font-family: inherit; 1296 1296 transition: all 0.15s; 1297 1297 resize: vertical; ··· 1310 1310 1311 1311 .hint { 1312 1312 margin-top: 0.35rem; 1313 - font-size: 0.75rem; 1313 + font-size: var(--text-xs); 1314 1314 color: var(--text-muted); 1315 1315 } 1316 1316 ··· 1328 1328 display: block; 1329 1329 color: var(--text-secondary); 1330 1330 margin-bottom: 0.6rem; 1331 - font-size: 0.85rem; 1331 + font-size: var(--text-sm); 1332 1332 } 1333 1333 1334 1334 .support-options { ··· 1368 1368 } 1369 1369 1370 1370 .support-option span { 1371 - font-size: 0.9rem; 1371 + font-size: var(--text-base); 1372 1372 color: var(--text-primary); 1373 1373 } 1374 1374 1375 1375 .support-status { 1376 1376 margin-left: auto; 1377 - font-size: 0.75rem; 1377 + font-size: var(--text-xs); 1378 1378 color: var(--text-tertiary); 1379 1379 } 1380 1380 1381 1381 .support-setup-link, 1382 1382 .support-status-link { 1383 1383 margin-left: auto; 1384 - font-size: 0.75rem; 1384 + font-size: var(--text-xs); 1385 1385 text-decoration: none; 1386 1386 } 1387 1387 ··· 1414 1414 border: 1px solid var(--border-default); 1415 1415 border-radius: var(--radius-sm); 1416 1416 color: var(--text-primary); 1417 - font-size: 0.95rem; 1417 + font-size: var(--text-base); 1418 1418 font-family: inherit; 1419 1419 transition: all 0.15s; 1420 1420 margin-bottom: 0.5rem; ··· 1452 1452 border: 1px solid var(--border-default); 1453 1453 border-radius: var(--radius-sm); 1454 1454 color: var(--text-primary); 1455 - font-size: 0.9rem; 1455 + font-size: var(--text-base); 1456 1456 font-family: inherit; 1457 1457 cursor: pointer; 1458 1458 } ··· 1464 1464 1465 1465 .file-info { 1466 1466 margin-top: 0.5rem; 1467 - font-size: 0.85rem; 1467 + font-size: var(--text-sm); 1468 1468 color: var(--text-muted); 1469 1469 } 1470 1470 ··· 1475 1475 color: var(--text-primary); 1476 1476 border: none; 1477 1477 border-radius: var(--radius-sm); 1478 - font-size: 1rem; 1478 + font-size: var(--text-lg); 1479 1479 font-weight: 600; 1480 1480 font-family: inherit; 1481 1481 cursor: pointer; ··· 1586 1586 } 1587 1587 1588 1588 .track-view-link { 1589 - font-size: 0.7rem; 1589 + font-size: var(--text-xs); 1590 1590 color: var(--text-muted); 1591 1591 text-decoration: none; 1592 1592 transition: color 0.15s; ··· 1633 1633 } 1634 1634 1635 1635 .edit-label { 1636 - font-size: 0.85rem; 1636 + font-size: var(--text-sm); 1637 1637 color: var(--text-secondary); 1638 1638 } 1639 1639 ··· 1642 1642 align-items: center; 1643 1643 gap: 0.5rem; 1644 1644 cursor: pointer; 1645 - font-size: 0.9rem; 1645 + font-size: var(--text-base); 1646 1646 color: var(--text-primary); 1647 1647 } 1648 1648 ··· 1653 1653 } 1654 1654 1655 1655 .field-hint { 1656 - font-size: 0.8rem; 1656 + font-size: var(--text-sm); 1657 1657 color: var(--text-tertiary); 1658 1658 margin-top: 0.25rem; 1659 1659 } ··· 1669 1669 1670 1670 .track-title { 1671 1671 font-weight: 600; 1672 - font-size: 1rem; 1672 + font-size: var(--text-lg); 1673 1673 margin-bottom: 0.25rem; 1674 1674 color: var(--text-primary); 1675 1675 display: flex; ··· 1705 1705 } 1706 1706 1707 1707 .track-meta { 1708 - font-size: 0.9rem; 1708 + font-size: var(--text-base); 1709 1709 color: var(--text-secondary); 1710 1710 margin-bottom: 0.25rem; 1711 1711 display: flex; ··· 1774 1774 background: color-mix(in srgb, var(--accent) 15%, transparent); 1775 1775 color: var(--accent-hover); 1776 1776 border-radius: var(--radius-sm); 1777 - font-size: 0.8rem; 1777 + font-size: var(--text-sm); 1778 1778 font-weight: 500; 1779 1779 text-decoration: none; 1780 1780 transition: all 0.15s; ··· 1786 1786 } 1787 1787 1788 1788 .track-date { 1789 - font-size: 0.85rem; 1789 + font-size: var(--text-sm); 1790 1790 color: var(--text-muted); 1791 1791 } 1792 1792 ··· 1854 1854 border: 1px solid var(--border-default); 1855 1855 border-radius: var(--radius-sm); 1856 1856 color: var(--text-primary); 1857 - font-size: 0.9rem; 1857 + font-size: var(--text-base); 1858 1858 font-family: inherit; 1859 1859 } 1860 1860 ··· 1878 1878 1879 1879 .current-image-label { 1880 1880 color: var(--text-tertiary); 1881 - font-size: 0.85rem; 1881 + font-size: var(--text-sm); 1882 1882 } 1883 1883 1884 1884 .edit-input:focus { ··· 1949 1949 } 1950 1950 1951 1951 .album-title { 1952 - font-size: 1rem; 1952 + font-size: var(--text-lg); 1953 1953 font-weight: 600; 1954 1954 color: var(--text-primary); 1955 1955 margin: 0 0 0.25rem 0; ··· 1959 1959 } 1960 1960 1961 1961 .album-stats { 1962 - font-size: 0.85rem; 1962 + font-size: var(--text-sm); 1963 1963 color: var(--text-tertiary); 1964 1964 margin: 0; 1965 1965 } ··· 1977 1977 .view-playlists-link { 1978 1978 color: var(--text-secondary); 1979 1979 text-decoration: none; 1980 - font-size: 0.8rem; 1980 + font-size: var(--text-sm); 1981 1981 padding: 0.35rem 0.6rem; 1982 1982 background: var(--bg-tertiary); 1983 1983 border-radius: var(--radius-sm); ··· 2040 2040 } 2041 2041 2042 2042 .playlist-title { 2043 - font-size: 1rem; 2043 + font-size: var(--text-lg); 2044 2044 font-weight: 600; 2045 2045 color: var(--text-primary); 2046 2046 margin: 0 0 0.25rem 0; ··· 2050 2050 } 2051 2051 2052 2052 .playlist-stats { 2053 - font-size: 0.85rem; 2053 + font-size: var(--text-sm); 2054 2054 color: var(--text-tertiary); 2055 2055 margin: 0; 2056 2056 } ··· 2087 2087 } 2088 2088 2089 2089 .control-info h3 { 2090 - font-size: 0.9rem; 2090 + font-size: var(--text-base); 2091 2091 font-weight: 600; 2092 2092 margin: 0 0 0.15rem 0; 2093 2093 color: var(--text-primary); 2094 2094 } 2095 2095 2096 2096 .control-description { 2097 - font-size: 0.75rem; 2097 + font-size: var(--text-xs); 2098 2098 color: var(--text-tertiary); 2099 2099 margin: 0; 2100 2100 line-height: 1.4; ··· 2106 2106 color: var(--text-primary); 2107 2107 border: none; 2108 2108 border-radius: var(--radius-base); 2109 - font-size: 0.9rem; 2109 + font-size: var(--text-base); 2110 2110 font-weight: 600; 2111 2111 cursor: pointer; 2112 2112 transition: all 0.2s; ··· 2152 2152 border: 1px solid var(--error); 2153 2153 border-radius: var(--radius-base); 2154 2154 font-family: inherit; 2155 - font-size: 0.9rem; 2155 + font-size: var(--text-base); 2156 2156 font-weight: 600; 2157 2157 cursor: pointer; 2158 2158 transition: all 0.2s; ··· 2174 2174 .delete-warning { 2175 2175 margin: 0 0 1rem; 2176 2176 color: var(--error); 2177 - font-size: 0.9rem; 2177 + font-size: var(--text-base); 2178 2178 line-height: 1.5; 2179 2179 } 2180 2180 ··· 2189 2189 display: flex; 2190 2190 align-items: center; 2191 2191 gap: 0.5rem; 2192 - font-size: 0.9rem; 2192 + font-size: var(--text-base); 2193 2193 color: var(--text-primary); 2194 2194 cursor: pointer; 2195 2195 } ··· 2202 2202 2203 2203 .atproto-note { 2204 2204 margin: 0.5rem 0 0; 2205 - font-size: 0.8rem; 2205 + font-size: var(--text-sm); 2206 2206 color: var(--text-tertiary); 2207 2207 } 2208 2208 ··· 2220 2220 padding: 0.5rem; 2221 2221 background: color-mix(in srgb, var(--warning) 10%, transparent); 2222 2222 border-radius: var(--radius-sm); 2223 - font-size: 0.8rem; 2223 + font-size: var(--text-sm); 2224 2224 color: var(--warning); 2225 2225 } 2226 2226 2227 2227 .confirm-prompt { 2228 2228 margin: 0 0 0.5rem; 2229 - font-size: 0.9rem; 2229 + font-size: var(--text-base); 2230 2230 color: var(--text-secondary); 2231 2231 } 2232 2232 ··· 2237 2237 border: 1px solid var(--border-default); 2238 2238 border-radius: var(--radius-base); 2239 2239 color: var(--text-primary); 2240 - font-size: 0.9rem; 2240 + font-size: var(--text-base); 2241 2241 font-family: inherit; 2242 2242 margin-bottom: 1rem; 2243 2243 } ··· 2260 2260 border-radius: var(--radius-base); 2261 2261 color: var(--text-secondary); 2262 2262 font-family: inherit; 2263 - font-size: 0.9rem; 2263 + font-size: var(--text-base); 2264 2264 cursor: pointer; 2265 2265 transition: all 0.15s; 2266 2266 } ··· 2282 2282 border-radius: var(--radius-base); 2283 2283 color: white; 2284 2284 font-family: inherit; 2285 - font-size: 0.9rem; 2285 + font-size: var(--text-base); 2286 2286 font-weight: 600; 2287 2287 cursor: pointer; 2288 2288 transition: all 0.15s; ··· 2308 2308 } 2309 2309 2310 2310 .portal-header h2 { 2311 - font-size: 1.25rem; 2311 + font-size: var(--text-2xl); 2312 2312 } 2313 2313 2314 2314 .profile-section h2, ··· 2316 2316 .albums-section h2, 2317 2317 .playlists-section h2, 2318 2318 .data-section h2 { 2319 - font-size: 1.1rem; 2319 + font-size: var(--text-xl); 2320 2320 } 2321 2321 2322 2322 .section-header { ··· 2324 2324 } 2325 2325 2326 2326 .view-profile-link { 2327 - font-size: 0.75rem; 2327 + font-size: var(--text-xs); 2328 2328 padding: 0.3rem 0.5rem; 2329 2329 } 2330 2330 ··· 2337 2337 } 2338 2338 2339 2339 label { 2340 - font-size: 0.8rem; 2340 + font-size: var(--text-sm); 2341 2341 margin-bottom: 0.3rem; 2342 2342 } 2343 2343 ··· 2345 2345 input[type='url'], 2346 2346 textarea { 2347 2347 padding: 0.5rem 0.6rem; 2348 - font-size: 0.9rem; 2348 + font-size: var(--text-base); 2349 2349 } 2350 2350 2351 2351 textarea { ··· 2353 2353 } 2354 2354 2355 2355 .hint { 2356 - font-size: 0.7rem; 2356 + font-size: var(--text-xs); 2357 2357 } 2358 2358 2359 2359 .avatar-preview img { ··· 2363 2363 2364 2364 button[type="submit"] { 2365 2365 padding: 0.6rem; 2366 - font-size: 0.9rem; 2366 + font-size: var(--text-base); 2367 2367 } 2368 2368 2369 2369 /* upload card mobile */ ··· 2383 2383 } 2384 2384 2385 2385 .upload-card-title { 2386 - font-size: 0.9rem; 2386 + font-size: var(--text-base); 2387 2387 } 2388 2388 2389 2389 .upload-card-subtitle { 2390 - font-size: 0.75rem; 2390 + font-size: var(--text-xs); 2391 2391 } 2392 2392 2393 2393 /* tracks mobile */ ··· 2421 2421 } 2422 2422 2423 2423 .track-title { 2424 - font-size: 0.9rem; 2424 + font-size: var(--text-base); 2425 2425 } 2426 2426 2427 2427 .track-meta { 2428 - font-size: 0.8rem; 2428 + font-size: var(--text-sm); 2429 2429 } 2430 2430 2431 2431 .track-date { 2432 - font-size: 0.75rem; 2432 + font-size: var(--text-xs); 2433 2433 } 2434 2434 2435 2435 .track-actions { ··· 2457 2457 } 2458 2458 2459 2459 .edit-label { 2460 - font-size: 0.8rem; 2460 + font-size: var(--text-sm); 2461 2461 } 2462 2462 2463 2463 .edit-input { 2464 2464 padding: 0.45rem 0.5rem; 2465 - font-size: 0.85rem; 2465 + font-size: var(--text-sm); 2466 2466 } 2467 2467 2468 2468 .edit-actions { ··· 2476 2476 } 2477 2477 2478 2478 .control-info h3 { 2479 - font-size: 0.85rem; 2479 + font-size: var(--text-sm); 2480 2480 } 2481 2481 2482 2482 .control-description { 2483 - font-size: 0.7rem; 2483 + font-size: var(--text-xs); 2484 2484 } 2485 2485 2486 2486 .export-btn { 2487 2487 padding: 0.5rem 0.85rem; 2488 - font-size: 0.8rem; 2488 + font-size: var(--text-sm); 2489 2489 } 2490 2490 2491 2491 /* albums mobile */ ··· 2500 2500 } 2501 2501 2502 2502 .album-title { 2503 - font-size: 0.85rem; 2503 + font-size: var(--text-sm); 2504 2504 } 2505 2505 2506 2506 /* playlists mobile */ ··· 2515 2515 } 2516 2516 2517 2517 .playlist-title { 2518 - font-size: 0.85rem; 2518 + font-size: var(--text-sm); 2519 2519 } 2520 2520 2521 2521 .playlist-stats { 2522 - font-size: 0.75rem; 2522 + font-size: var(--text-xs); 2523 2523 } 2524 2524 2525 2525 .view-playlists-link { 2526 - font-size: 0.75rem; 2526 + font-size: var(--text-xs); 2527 2527 padding: 0.3rem 0.5rem; 2528 2528 } 2529 2529 }
+4 -4
frontend/src/routes/profile/setup/+page.svelte
··· 248 248 display: block; 249 249 color: var(--text-secondary); 250 250 margin-bottom: 0.5rem; 251 - font-size: 0.9rem; 251 + font-size: var(--text-base); 252 252 font-weight: 500; 253 253 } 254 254 ··· 261 261 border: 1px solid var(--border-default); 262 262 border-radius: var(--radius-sm); 263 263 color: var(--text-primary); 264 - font-size: 1rem; 264 + font-size: var(--text-lg); 265 265 font-family: inherit; 266 266 transition: all 0.2s; 267 267 } ··· 287 287 288 288 .hint { 289 289 margin-top: 0.5rem; 290 - font-size: 0.85rem; 290 + font-size: var(--text-sm); 291 291 color: var(--text-muted); 292 292 } 293 293 ··· 298 298 color: white; 299 299 border: none; 300 300 border-radius: var(--radius-sm); 301 - font-size: 1rem; 301 + font-size: var(--text-lg); 302 302 font-weight: 600; 303 303 cursor: pointer; 304 304 transition: all 0.2s;
+25 -25
frontend/src/routes/settings/+page.svelte
··· 788 788 789 789 .token-overlay-content h2 { 790 790 margin: 0 0 0.75rem; 791 - font-size: 1.5rem; 791 + font-size: var(--text-3xl); 792 792 color: var(--text-primary); 793 793 } 794 794 795 795 .token-overlay-warning { 796 796 color: var(--warning); 797 - font-size: 0.9rem; 797 + font-size: var(--text-base); 798 798 margin: 0 0 1.5rem; 799 799 line-height: 1.5; 800 800 } ··· 811 811 812 812 .token-overlay-display code { 813 813 flex: 1; 814 - font-size: 0.85rem; 814 + font-size: var(--text-sm); 815 815 word-break: break-all; 816 816 color: var(--accent); 817 817 text-align: left; ··· 825 825 border-radius: var(--radius-base); 826 826 color: var(--text-primary); 827 827 font-family: inherit; 828 - font-size: 0.85rem; 828 + font-size: var(--text-sm); 829 829 font-weight: 600; 830 830 cursor: pointer; 831 831 white-space: nowrap; ··· 837 837 } 838 838 839 839 .token-overlay-hint { 840 - font-size: 0.8rem; 840 + font-size: var(--text-sm); 841 841 color: var(--text-tertiary); 842 842 margin: 0 0 1.5rem; 843 843 } ··· 858 858 border-radius: var(--radius-md); 859 859 color: var(--text-secondary); 860 860 font-family: inherit; 861 - font-size: 0.9rem; 861 + font-size: var(--text-base); 862 862 cursor: pointer; 863 863 transition: all 0.15s; 864 864 } ··· 901 901 .portal-link { 902 902 color: var(--text-secondary); 903 903 text-decoration: none; 904 - font-size: 0.85rem; 904 + font-size: var(--text-sm); 905 905 padding: 0.4rem 0.75rem; 906 906 background: var(--bg-tertiary); 907 907 border-radius: var(--radius-base); ··· 919 919 } 920 920 921 921 .settings-section h2 { 922 - font-size: 0.8rem; 922 + font-size: var(--text-sm); 923 923 text-transform: uppercase; 924 924 letter-spacing: 0.08em; 925 925 color: var(--text-tertiary); ··· 957 957 958 958 .setting-info h3 { 959 959 margin: 0 0 0.25rem; 960 - font-size: 0.95rem; 960 + font-size: var(--text-base); 961 961 font-weight: 600; 962 962 color: var(--text-primary); 963 963 } 964 964 965 965 .setting-info p { 966 966 margin: 0; 967 - font-size: 0.8rem; 967 + font-size: var(--text-sm); 968 968 color: var(--text-tertiary); 969 969 line-height: 1.4; 970 970 } ··· 1087 1087 border: 1px solid var(--border-default); 1088 1088 border-radius: var(--radius-base); 1089 1089 color: var(--text-primary); 1090 - font-size: 0.85rem; 1090 + font-size: var(--text-sm); 1091 1091 font-family: inherit; 1092 1092 } 1093 1093 ··· 1104 1104 display: flex; 1105 1105 align-items: center; 1106 1106 gap: 0.4rem; 1107 - font-size: 0.8rem; 1107 + font-size: var(--text-sm); 1108 1108 color: var(--text-secondary); 1109 1109 cursor: pointer; 1110 1110 } ··· 1169 1169 border: 1px solid color-mix(in srgb, var(--warning) 30%, transparent); 1170 1170 border-radius: var(--radius-base); 1171 1171 margin-top: 0.75rem; 1172 - font-size: 0.8rem; 1172 + font-size: var(--text-sm); 1173 1173 color: var(--warning); 1174 1174 } 1175 1175 ··· 1191 1191 /* developer tokens */ 1192 1192 .loading-tokens { 1193 1193 color: var(--text-tertiary); 1194 - font-size: 0.85rem; 1194 + font-size: var(--text-sm); 1195 1195 } 1196 1196 1197 1197 .existing-tokens { ··· 1199 1199 } 1200 1200 1201 1201 .tokens-header { 1202 - font-size: 0.75rem; 1202 + font-size: var(--text-xs); 1203 1203 text-transform: uppercase; 1204 1204 letter-spacing: 0.05em; 1205 1205 color: var(--text-tertiary); ··· 1233 1233 .token-name { 1234 1234 font-weight: 500; 1235 1235 color: var(--text-primary); 1236 - font-size: 0.9rem; 1236 + font-size: var(--text-base); 1237 1237 } 1238 1238 1239 1239 .token-meta { 1240 - font-size: 0.75rem; 1240 + font-size: var(--text-xs); 1241 1241 color: var(--text-tertiary); 1242 1242 } 1243 1243 ··· 1248 1248 border-radius: var(--radius-sm); 1249 1249 color: var(--text-secondary); 1250 1250 font-family: inherit; 1251 - font-size: 0.8rem; 1251 + font-size: var(--text-sm); 1252 1252 cursor: pointer; 1253 1253 transition: all 0.15s; 1254 1254 white-space: nowrap; ··· 1277 1277 1278 1278 .token-value { 1279 1279 flex: 1; 1280 - font-size: 0.8rem; 1280 + font-size: var(--text-sm); 1281 1281 word-break: break-all; 1282 1282 color: var(--accent); 1283 1283 } ··· 1290 1290 border-radius: var(--radius-sm); 1291 1291 color: var(--text-secondary); 1292 1292 font-family: inherit; 1293 - font-size: 0.8rem; 1293 + font-size: var(--text-sm); 1294 1294 cursor: pointer; 1295 1295 transition: all 0.15s; 1296 1296 } ··· 1303 1303 1304 1304 .token-warning { 1305 1305 margin-top: 0.5rem; 1306 - font-size: 0.8rem; 1306 + font-size: var(--text-sm); 1307 1307 color: var(--warning); 1308 1308 } 1309 1309 ··· 1322 1322 border: 1px solid var(--border-default); 1323 1323 border-radius: var(--radius-base); 1324 1324 color: var(--text-primary); 1325 - font-size: 0.9rem; 1325 + font-size: var(--text-base); 1326 1326 font-family: inherit; 1327 1327 } 1328 1328 ··· 1335 1335 display: flex; 1336 1336 align-items: center; 1337 1337 gap: 0.5rem; 1338 - font-size: 0.85rem; 1338 + font-size: var(--text-sm); 1339 1339 color: var(--text-secondary); 1340 1340 } 1341 1341 ··· 1345 1345 border: 1px solid var(--border-default); 1346 1346 border-radius: var(--radius-base); 1347 1347 color: var(--text-primary); 1348 - font-size: 0.85rem; 1348 + font-size: var(--text-sm); 1349 1349 font-family: inherit; 1350 1350 cursor: pointer; 1351 1351 } ··· 1362 1362 border-radius: var(--radius-base); 1363 1363 color: var(--text-primary); 1364 1364 font-family: inherit; 1365 - font-size: 0.9rem; 1365 + font-size: var(--text-base); 1366 1366 font-weight: 600; 1367 1367 cursor: pointer; 1368 1368 transition: all 0.15s;
+9 -9
frontend/src/routes/tag/[name]/+page.svelte
··· 197 197 } 198 198 199 199 .subtitle { 200 - font-size: 0.95rem; 200 + font-size: var(--text-base); 201 201 color: var(--text-tertiary); 202 202 margin: 0; 203 203 text-shadow: var(--text-shadow, none); ··· 212 212 border: 1px solid var(--glass-btn-border, var(--accent)); 213 213 color: var(--accent); 214 214 border-radius: var(--radius-base); 215 - font-size: 0.9rem; 215 + font-size: var(--text-base); 216 216 font-family: inherit; 217 217 cursor: pointer; 218 218 transition: all 0.2s; ··· 240 240 } 241 241 242 242 .empty-state h2 { 243 - font-size: 1.5rem; 243 + font-size: var(--text-3xl); 244 244 font-weight: 600; 245 245 color: var(--text-secondary); 246 246 margin: 0 0 0.5rem 0; 247 247 } 248 248 249 249 .empty-state p { 250 - font-size: 0.95rem; 250 + font-size: var(--text-base); 251 251 margin: 0; 252 252 } 253 253 ··· 264 264 text-align: center; 265 265 padding: 4rem 1rem; 266 266 color: var(--text-tertiary); 267 - font-size: 0.95rem; 267 + font-size: var(--text-base); 268 268 } 269 269 270 270 .tracks-list { ··· 292 292 } 293 293 294 294 .empty-state h2 { 295 - font-size: 1.25rem; 295 + font-size: var(--text-2xl); 296 296 } 297 297 298 298 .btn-queue-all { 299 299 padding: 0.5rem 0.75rem; 300 - font-size: 0.85rem; 300 + font-size: var(--text-sm); 301 301 } 302 302 303 303 .btn-queue-all svg { ··· 330 330 } 331 331 332 332 .subtitle { 333 - font-size: 0.85rem; 333 + font-size: var(--text-sm); 334 334 } 335 335 336 336 .btn-queue-all { 337 337 padding: 0.45rem 0.65rem; 338 - font-size: 0.8rem; 338 + font-size: var(--text-sm); 339 339 } 340 340 341 341 .btn-queue-all svg {
+25 -25
frontend/src/routes/track/[id]/+page.svelte
··· 769 769 gap: 0.75rem; 770 770 flex-wrap: wrap; 771 771 color: var(--text-secondary); 772 - font-size: 1.1rem; 772 + font-size: var(--text-xl); 773 773 } 774 774 775 775 .separator { 776 776 color: var(--text-muted); 777 - font-size: 0.8rem; 777 + font-size: var(--text-sm); 778 778 } 779 779 780 780 .artist-link { ··· 855 855 856 856 .track-stats { 857 857 color: var(--text-tertiary); 858 - font-size: 0.95rem; 858 + font-size: var(--text-base); 859 859 display: flex; 860 860 align-items: center; 861 861 gap: 0.5rem; ··· 863 863 } 864 864 865 865 .track-stats .separator { 866 - font-size: 0.7rem; 866 + font-size: var(--text-xs); 867 867 } 868 868 869 869 .track-tags { ··· 879 879 background: color-mix(in srgb, var(--accent) 15%, transparent); 880 880 color: var(--accent-hover); 881 881 border-radius: var(--radius-sm); 882 - font-size: 0.85rem; 882 + font-size: var(--text-sm); 883 883 font-weight: 500; 884 884 text-decoration: none; 885 885 transition: all 0.15s; ··· 915 915 color: var(--bg-primary); 916 916 border: none; 917 917 border-radius: var(--radius-2xl); 918 - font-size: 0.95rem; 918 + font-size: var(--text-base); 919 919 font-weight: 600; 920 920 font-family: inherit; 921 921 cursor: pointer; ··· 940 940 color: var(--text-primary); 941 941 border: 1px solid var(--border-emphasis); 942 942 border-radius: var(--radius-2xl); 943 - font-size: 0.95rem; 943 + font-size: var(--text-base); 944 944 font-weight: 500; 945 945 font-family: inherit; 946 946 cursor: pointer; ··· 984 984 } 985 985 986 986 .track-title { 987 - font-size: 1.5rem; 987 + font-size: var(--text-3xl); 988 988 } 989 989 990 990 .track-metadata { 991 - font-size: 0.9rem; 991 + font-size: var(--text-base); 992 992 gap: 0.5rem; 993 993 } 994 994 995 995 .track-stats { 996 - font-size: 0.85rem; 996 + font-size: var(--text-sm); 997 997 } 998 998 999 999 .track-actions { ··· 1010 1010 min-width: calc(50% - 0.25rem); 1011 1011 justify-content: center; 1012 1012 padding: 0.6rem 1rem; 1013 - font-size: 0.9rem; 1013 + font-size: var(--text-base); 1014 1014 } 1015 1015 1016 1016 .btn-play svg { ··· 1023 1023 min-width: calc(50% - 0.25rem); 1024 1024 justify-content: center; 1025 1025 padding: 0.6rem 1rem; 1026 - font-size: 0.9rem; 1026 + font-size: var(--text-base); 1027 1027 } 1028 1028 1029 1029 .btn-queue svg { ··· 1042 1042 } 1043 1043 1044 1044 .comments-title { 1045 - font-size: 1rem; 1045 + font-size: var(--text-lg); 1046 1046 font-weight: 600; 1047 1047 color: var(--text-primary); 1048 1048 margin: 0 0 0.75rem 0; ··· 1069 1069 border: 1px solid var(--border-default); 1070 1070 border-radius: var(--radius-base); 1071 1071 color: var(--text-primary); 1072 - font-size: 0.9rem; 1072 + font-size: var(--text-base); 1073 1073 font-family: inherit; 1074 1074 } 1075 1075 ··· 1088 1088 color: var(--bg-primary); 1089 1089 border: none; 1090 1090 border-radius: var(--radius-base); 1091 - font-size: 0.9rem; 1091 + font-size: var(--text-base); 1092 1092 font-weight: 600; 1093 1093 font-family: inherit; 1094 1094 cursor: pointer; ··· 1106 1106 1107 1107 .login-prompt { 1108 1108 color: var(--text-tertiary); 1109 - font-size: 0.9rem; 1109 + font-size: var(--text-base); 1110 1110 margin-bottom: 1rem; 1111 1111 } 1112 1112 ··· 1121 1121 1122 1122 .no-comments { 1123 1123 color: var(--text-muted); 1124 - font-size: 0.9rem; 1124 + font-size: var(--text-base); 1125 1125 text-align: center; 1126 1126 padding: 1rem; 1127 1127 } ··· 1169 1169 } 1170 1170 1171 1171 .comment-timestamp { 1172 - font-size: 0.8rem; 1172 + font-size: var(--text-sm); 1173 1173 font-weight: 600; 1174 1174 color: var(--accent); 1175 1175 background: color-mix(in srgb, var(--accent) 10%, transparent); ··· 1207 1207 } 1208 1208 1209 1209 .comment-time { 1210 - font-size: 0.75rem; 1210 + font-size: var(--text-xs); 1211 1211 color: var(--text-muted); 1212 1212 } 1213 1213 ··· 1226 1226 } 1227 1227 1228 1228 .comment-author { 1229 - font-size: 0.85rem; 1229 + font-size: var(--text-sm); 1230 1230 font-weight: 500; 1231 1231 color: var(--text-secondary); 1232 1232 text-decoration: none; ··· 1237 1237 } 1238 1238 1239 1239 .comment-text { 1240 - font-size: 0.9rem; 1240 + font-size: var(--text-base); 1241 1241 color: var(--text-primary); 1242 1242 margin: 0; 1243 1243 line-height: 1.4; ··· 1277 1277 border: none; 1278 1278 padding: 0; 1279 1279 color: var(--text-muted); 1280 - font-size: 0.8rem; 1280 + font-size: var(--text-sm); 1281 1281 cursor: pointer; 1282 1282 transition: color 0.15s; 1283 1283 font-family: inherit; ··· 1312 1312 border: 1px solid var(--border-default); 1313 1313 border-radius: var(--radius-sm); 1314 1314 color: var(--text-primary); 1315 - font-size: 0.9rem; 1315 + font-size: var(--text-base); 1316 1316 font-family: inherit; 1317 1317 } 1318 1318 ··· 1329 1329 1330 1330 .edit-form-btn { 1331 1331 padding: 0.25rem 0.6rem; 1332 - font-size: 0.8rem; 1332 + font-size: var(--text-sm); 1333 1333 font-family: inherit; 1334 1334 border-radius: var(--radius-sm); 1335 1335 cursor: pointer; ··· 1443 1443 } 1444 1444 1445 1445 .comment-timestamp { 1446 - font-size: 0.75rem; 1446 + font-size: var(--text-xs); 1447 1447 padding: 0.15rem 0.4rem; 1448 1448 } 1449 1449 }
+4 -4
frontend/src/routes/u/[handle]/+error.svelte
··· 96 96 } 97 97 98 98 .error-message { 99 - font-size: 1.25rem; 99 + font-size: var(--text-2xl); 100 100 color: var(--text-secondary); 101 101 margin: 0 0 0.5rem 0; 102 102 } 103 103 104 104 .error-detail { 105 - font-size: 1rem; 105 + font-size: var(--text-lg); 106 106 color: var(--text-tertiary); 107 107 margin: 0 0 2rem 0; 108 108 } ··· 118 118 .bsky-link { 119 119 color: var(--accent); 120 120 text-decoration: none; 121 - font-size: 1.1rem; 121 + font-size: var(--text-xl); 122 122 padding: 0.75rem 1.5rem; 123 123 border: 1px solid var(--accent); 124 124 border-radius: var(--radius-base); ··· 151 151 } 152 152 153 153 .error-message { 154 - font-size: 1.1rem; 154 + font-size: var(--text-xl); 155 155 } 156 156 157 157 .actions {
+16 -16
frontend/src/routes/u/[handle]/+page.svelte
··· 653 653 border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent); 654 654 border-radius: var(--radius-sm); 655 655 color: var(--accent); 656 - font-size: 0.85rem; 656 + font-size: var(--text-sm); 657 657 text-decoration: none; 658 658 transition: all 0.2s ease; 659 659 } ··· 695 695 696 696 .handle { 697 697 color: var(--text-tertiary); 698 - font-size: 1.1rem; 698 + font-size: var(--text-xl); 699 699 text-decoration: none; 700 700 transition: color 0.2s; 701 701 } ··· 738 738 739 739 .section-header span { 740 740 color: var(--text-tertiary); 741 - font-size: 0.9rem; 741 + font-size: var(--text-base); 742 742 text-transform: uppercase; 743 743 letter-spacing: 0.1em; 744 744 } ··· 820 820 .album-card-meta p { 821 821 margin: 0; 822 822 color: var(--text-tertiary); 823 - font-size: 0.9rem; 823 + font-size: var(--text-base); 824 824 display: flex; 825 825 align-items: center; 826 826 gap: 0.4rem; ··· 853 853 854 854 .stat-label { 855 855 color: var(--text-tertiary); 856 - font-size: 0.9rem; 856 + font-size: var(--text-base); 857 857 text-transform: lowercase; 858 858 line-height: 1; 859 859 } 860 860 861 861 .stat-duration { 862 862 margin-top: 0.5rem; 863 - font-size: 0.85rem; 863 + font-size: var(--text-sm); 864 864 color: var(--text-secondary); 865 865 font-variant-numeric: tabular-nums; 866 866 } ··· 888 888 889 889 .top-item-plays { 890 890 color: var(--accent); 891 - font-size: 1rem; 891 + font-size: var(--text-lg); 892 892 line-height: 1; 893 893 } 894 894 ··· 963 963 border-radius: var(--radius-md); 964 964 color: var(--text-secondary); 965 965 font-family: inherit; 966 - font-size: 0.95rem; 966 + font-size: var(--text-base); 967 967 cursor: pointer; 968 968 transition: all 0.2s ease; 969 969 } ··· 981 981 982 982 .tracks-loading { 983 983 margin-left: 0.75rem; 984 - font-size: 0.95rem; 984 + font-size: var(--text-base); 985 985 color: var(--text-secondary); 986 986 font-weight: 400; 987 987 text-transform: lowercase; ··· 1003 1003 1004 1004 .empty-message { 1005 1005 color: var(--text-secondary); 1006 - font-size: 1.25rem; 1006 + font-size: var(--text-2xl); 1007 1007 margin: 0 0 0.5rem 0; 1008 1008 } 1009 1009 ··· 1015 1015 .bsky-link { 1016 1016 color: var(--accent); 1017 1017 text-decoration: none; 1018 - font-size: 1rem; 1018 + font-size: var(--text-lg); 1019 1019 padding: 0.75rem 1.5rem; 1020 1020 border: 1px solid var(--accent); 1021 1021 border-radius: var(--radius-base); ··· 1072 1072 1073 1073 .support-btn { 1074 1074 height: 28px; 1075 - font-size: 0.8rem; 1075 + font-size: var(--text-sm); 1076 1076 padding: 0 0.6rem; 1077 1077 } 1078 1078 ··· 1116 1116 } 1117 1117 1118 1118 .album-card-meta h3 { 1119 - font-size: 0.95rem; 1119 + font-size: var(--text-base); 1120 1120 margin-bottom: 0.25rem; 1121 1121 } 1122 1122 1123 1123 .album-card-meta p { 1124 - font-size: 0.8rem; 1124 + font-size: var(--text-sm); 1125 1125 } 1126 1126 } 1127 1127 ··· 1193 1193 1194 1194 .collection-info h3 { 1195 1195 margin: 0 0 0.25rem 0; 1196 - font-size: 1.1rem; 1196 + font-size: var(--text-xl); 1197 1197 color: var(--text-primary); 1198 1198 } 1199 1199 1200 1200 .collection-info p { 1201 1201 margin: 0; 1202 - font-size: 0.9rem; 1202 + font-size: var(--text-base); 1203 1203 color: var(--text-tertiary); 1204 1204 } 1205 1205
+10 -10
frontend/src/routes/u/[handle]/album/[slug]/+page.svelte
··· 865 865 justify-content: center; 866 866 gap: 0.5rem; 867 867 color: white; 868 - font-size: 0.85rem; 868 + font-size: var(--text-sm); 869 869 opacity: 0; 870 870 transition: opacity 0.2s; 871 871 } ··· 893 893 894 894 .album-type { 895 895 text-transform: uppercase; 896 - font-size: 0.75rem; 896 + font-size: var(--text-xs); 897 897 font-weight: 600; 898 898 letter-spacing: 0.1em; 899 899 color: var(--text-tertiary); ··· 917 917 display: flex; 918 918 align-items: center; 919 919 gap: 0.75rem; 920 - font-size: 0.95rem; 920 + font-size: var(--text-base); 921 921 color: var(--text-secondary); 922 922 text-shadow: var(--text-shadow, none); 923 923 } ··· 936 936 937 937 .meta-separator { 938 938 color: var(--text-muted); 939 - font-size: 0.7rem; 939 + font-size: var(--text-xs); 940 940 } 941 941 942 942 .album-actions { ··· 950 950 padding: 0.75rem 1.5rem; 951 951 border-radius: var(--radius-2xl); 952 952 font-weight: 600; 953 - font-size: 0.95rem; 953 + font-size: var(--text-base); 954 954 font-family: inherit; 955 955 cursor: pointer; 956 956 transition: all 0.2s; ··· 1000 1000 } 1001 1001 1002 1002 .section-heading { 1003 - font-size: 1.25rem; 1003 + font-size: var(--text-2xl); 1004 1004 font-weight: 600; 1005 1005 color: var(--text-primary); 1006 1006 margin-bottom: 1rem; ··· 1111 1111 } 1112 1112 1113 1113 .album-meta { 1114 - font-size: 0.85rem; 1114 + font-size: var(--text-sm); 1115 1115 } 1116 1116 1117 1117 .album-actions { ··· 1143 1143 } 1144 1144 1145 1145 .album-meta { 1146 - font-size: 0.8rem; 1146 + font-size: var(--text-sm); 1147 1147 flex-wrap: wrap; 1148 1148 } 1149 1149 } ··· 1202 1202 1203 1203 .modal-header h3 { 1204 1204 margin: 0; 1205 - font-size: 1.25rem; 1205 + font-size: var(--text-2xl); 1206 1206 font-weight: 600; 1207 1207 color: var(--text-primary); 1208 1208 } ··· 1228 1228 padding: 0.625rem 1.25rem; 1229 1229 border-radius: var(--radius-md); 1230 1230 font-weight: 500; 1231 - font-size: 0.9rem; 1231 + font-size: var(--text-base); 1232 1232 font-family: inherit; 1233 1233 cursor: pointer; 1234 1234 transition: all 0.2s;
+11 -11
frontend/src/routes/upload/+page.svelte
··· 435 435 display: block; 436 436 color: var(--text-secondary); 437 437 margin-bottom: 0.5rem; 438 - font-size: 0.9rem; 438 + font-size: var(--text-base); 439 439 } 440 440 441 441 input[type="text"] { ··· 445 445 border: 1px solid var(--border-default); 446 446 border-radius: var(--radius-sm); 447 447 color: var(--text-primary); 448 - font-size: 1rem; 448 + font-size: var(--text-lg); 449 449 font-family: inherit; 450 450 transition: all 0.2s; 451 451 } ··· 462 462 border: 1px solid var(--border-default); 463 463 border-radius: var(--radius-sm); 464 464 color: var(--text-primary); 465 - font-size: 0.9rem; 465 + font-size: var(--text-base); 466 466 font-family: inherit; 467 467 cursor: pointer; 468 468 } 469 469 470 470 .format-hint { 471 471 margin-top: 0.25rem; 472 - font-size: 0.8rem; 472 + font-size: var(--text-sm); 473 473 color: var(--text-tertiary); 474 474 } 475 475 476 476 .file-info { 477 477 margin-top: 0.5rem; 478 - font-size: 0.85rem; 478 + font-size: var(--text-sm); 479 479 color: var(--text-muted); 480 480 } 481 481 ··· 486 486 color: var(--text-primary); 487 487 border: none; 488 488 border-radius: var(--radius-sm); 489 - font-size: 1rem; 489 + font-size: var(--text-lg); 490 490 font-weight: 600; 491 491 font-family: inherit; 492 492 cursor: pointer; ··· 542 542 } 543 543 544 544 .checkbox-text { 545 - font-size: 0.95rem; 545 + font-size: var(--text-base); 546 546 color: var(--text-primary); 547 547 line-height: 1.4; 548 548 } ··· 550 550 .attestation-note { 551 551 margin-top: 0.75rem; 552 552 margin-left: 2rem; 553 - font-size: 0.8rem; 553 + font-size: var(--text-sm); 554 554 color: var(--text-tertiary); 555 555 line-height: 1.4; 556 556 } ··· 584 584 .gating-note { 585 585 margin-top: 0.5rem; 586 586 margin-left: 2rem; 587 - font-size: 0.8rem; 587 + font-size: var(--text-sm); 588 588 color: var(--text-tertiary); 589 589 line-height: 1.4; 590 590 } ··· 611 611 } 612 612 613 613 .gating-disabled-text { 614 - font-size: 0.85rem; 614 + font-size: var(--text-sm); 615 615 line-height: 1.4; 616 616 } 617 617 ··· 638 638 } 639 639 640 640 .section-header h2 { 641 - font-size: 1.25rem; 641 + font-size: var(--text-2xl); 642 642 } 643 643 } 644 644 </style>