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