refactor(css): add border-radius design tokens (#662)

* refactor(css): add border-radius design tokens

adds a border-radius scale to the design system and replaces hardcoded
values across 46 frontend files.

tokens added:
- --radius-sm: 4px
- --radius-base: 6px
- --radius-md: 8px
- --radius-lg: 12px
- --radius-xl: 16px
- --radius-2xl: 24px
- --radius-full: 9999px

285/296 occurrences tokenized (96%). remaining 11 are intentional edge
cases (partial radii, calc(), 2px slider tracks).

normalizations:
- 5px, 3px → --radius-sm (4px)
- 10px → --radius-md (8px)
- 20px → --radius-xl (16px)

closes #657

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

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

* chore: update STATUS.md for end-of-year QoL mode

- sprint #625 complete, moved to quality of life mode
- documented what shipped (moderation consolidation, atprotofans)
- deferred rules engine and time-release gating to aspirational

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

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

---------

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

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

+10 -7
STATUS.md
··· 168 168 169 169 ## immediate priorities 170 170 171 - ### end-of-year sprint (Dec 20-31) 171 + ### quality of life mode (Dec 29-31) 172 172 173 - see [sprint tracking issue #625](https://github.com/zzstoatzz/plyr.fm/issues/625) for details. 173 + end-of-year sprint [#625](https://github.com/zzstoatzz/plyr.fm/issues/625) complete. remaining days before 2026 are for minor polish and bug fixes as they arise. 174 + 175 + **what shipped in the sprint:** 176 + - moderation consolidation: sensitive images moved to moderation service (#644) 177 + - atprotofans: supporter badges (#627) and content gating (#637) 174 178 175 - | track | focus | status | 176 - |-------|-------|--------| 177 - | moderation | consolidate architecture, add rules engine | core cleanup shipped (PR #617), sensitive images moved (PR #644) | 178 - | atprotofans | supporter validation, content gating | shipped | 179 + **aspirational (deferred until scale justifies):** 180 + - configurable rules engine for moderation 181 + - time-release gating (#642) 179 182 180 183 ### known issues 181 184 - playback auto-start on refresh (#225) ··· 335 338 336 339 --- 337 340 338 - this is a living document. last updated 2025-12-26. 341 + this is a living document. last updated 2025-12-29.
+8 -8
frontend/src/lib/components/AddToMenu.svelte
··· 439 439 justify-content: center; 440 440 background: transparent; 441 441 border: 1px solid var(--border-default); 442 - border-radius: 4px; 442 + border-radius: var(--radius-sm); 443 443 color: var(--text-tertiary); 444 444 cursor: pointer; 445 445 transition: all 0.2s; ··· 490 490 min-width: 200px; 491 491 background: var(--bg-secondary); 492 492 border: 1px solid var(--border-default); 493 - border-radius: 8px; 493 + border-radius: var(--radius-md); 494 494 box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3); 495 495 overflow: hidden; 496 496 z-index: 10; ··· 567 567 568 568 .playlist-list::-webkit-scrollbar-track { 569 569 background: transparent; 570 - border-radius: 4px; 570 + border-radius: var(--radius-sm); 571 571 } 572 572 573 573 .playlist-list::-webkit-scrollbar-thumb { 574 574 background: var(--border-default); 575 - border-radius: 4px; 575 + border-radius: var(--radius-sm); 576 576 } 577 577 578 578 .playlist-list::-webkit-scrollbar-thumb:hover { ··· 607 607 .playlist-thumb-placeholder { 608 608 width: 32px; 609 609 height: 32px; 610 - border-radius: 4px; 610 + border-radius: var(--radius-sm); 611 611 flex-shrink: 0; 612 612 } 613 613 ··· 675 675 padding: 0.625rem 0.75rem; 676 676 background: var(--bg-tertiary); 677 677 border: 1px solid var(--border-default); 678 - border-radius: 6px; 678 + border-radius: var(--radius-base); 679 679 color: var(--text-primary); 680 680 font-family: inherit; 681 681 font-size: 0.9rem; ··· 698 698 padding: 0.625rem 1rem; 699 699 background: var(--accent); 700 700 border: none; 701 - border-radius: 6px; 701 + border-radius: var(--radius-base); 702 702 color: white; 703 703 font-family: inherit; 704 704 font-size: 0.9rem; ··· 721 721 height: 16px; 722 722 border: 2px solid var(--border-default); 723 723 border-top-color: var(--accent); 724 - border-radius: 50%; 724 + border-radius: var(--radius-full); 725 725 animation: spin 0.8s linear infinite; 726 726 } 727 727
+4 -4
frontend/src/lib/components/AlbumSelect.svelte
··· 102 102 padding: 0.75rem; 103 103 background: var(--bg-primary); 104 104 border: 1px solid var(--border-default); 105 - border-radius: 4px; 105 + border-radius: var(--radius-sm); 106 106 color: var(--text-primary); 107 107 font-size: 1rem; 108 108 font-family: inherit; ··· 127 127 overflow-y: auto; 128 128 background: var(--bg-tertiary); 129 129 border: 1px solid var(--border-default); 130 - border-radius: 4px; 130 + border-radius: var(--radius-sm); 131 131 margin-top: 0.25rem; 132 132 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); 133 133 } ··· 139 139 140 140 .album-results::-webkit-scrollbar-track { 141 141 background: var(--bg-primary); 142 - border-radius: 4px; 142 + border-radius: var(--radius-sm); 143 143 } 144 144 145 145 .album-results::-webkit-scrollbar-thumb { 146 146 background: var(--border-default); 147 - border-radius: 4px; 147 + border-radius: var(--radius-sm); 148 148 } 149 149 150 150 .album-results::-webkit-scrollbar-thumb:hover {
+6 -6
frontend/src/lib/components/BrokenTracks.svelte
··· 194 194 margin-bottom: 3rem; 195 195 background: color-mix(in srgb, var(--warning) 5%, transparent); 196 196 border: 1px solid color-mix(in srgb, var(--warning) 20%, transparent); 197 - border-radius: 8px; 197 + border-radius: var(--radius-md); 198 198 padding: 1.5rem; 199 199 } 200 200 ··· 222 222 padding: 0.5rem 1rem; 223 223 background: color-mix(in srgb, var(--warning) 20%, transparent); 224 224 border: 1px solid color-mix(in srgb, var(--warning) 50%, transparent); 225 - border-radius: 4px; 225 + border-radius: var(--radius-sm); 226 226 color: var(--warning); 227 227 font-family: inherit; 228 228 font-size: 0.9rem; ··· 248 248 background: color-mix(in srgb, var(--warning) 20%, transparent); 249 249 color: var(--warning); 250 250 padding: 0.25rem 0.6rem; 251 - border-radius: 12px; 251 + border-radius: var(--radius-lg); 252 252 font-size: 0.85rem; 253 253 font-weight: 600; 254 254 } ··· 263 263 .broken-track-item { 264 264 background: var(--bg-tertiary); 265 265 border: 1px solid color-mix(in srgb, var(--warning) 30%, transparent); 266 - border-radius: 6px; 266 + border-radius: var(--radius-base); 267 267 padding: 1rem; 268 268 display: flex; 269 269 align-items: center; ··· 311 311 padding: 0.5rem 1rem; 312 312 background: color-mix(in srgb, var(--warning) 15%, transparent); 313 313 border: 1px solid color-mix(in srgb, var(--warning) 40%, transparent); 314 - border-radius: 4px; 314 + border-radius: var(--radius-sm); 315 315 color: var(--warning); 316 316 font-family: inherit; 317 317 font-size: 0.9rem; ··· 337 337 .info-box { 338 338 background: var(--bg-primary); 339 339 border: 1px solid var(--border-subtle); 340 - border-radius: 6px; 340 + border-radius: var(--radius-base); 341 341 padding: 1rem; 342 342 font-size: 0.9rem; 343 343 color: var(--text-secondary);
+4 -4
frontend/src/lib/components/ColorSettings.svelte
··· 115 115 border: 1px solid var(--border-default); 116 116 color: var(--text-secondary); 117 117 padding: 0.5rem; 118 - border-radius: 4px; 118 + border-radius: var(--radius-sm); 119 119 cursor: pointer; 120 120 transition: all 0.2s; 121 121 display: flex; ··· 134 134 right: 0; 135 135 background: var(--bg-secondary); 136 136 border: 1px solid var(--border-default); 137 - border-radius: 6px; 137 + border-radius: var(--radius-base); 138 138 padding: 1rem; 139 139 min-width: 240px; 140 140 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); ··· 182 182 width: 48px; 183 183 height: 32px; 184 184 border: 1px solid var(--border-default); 185 - border-radius: 4px; 185 + border-radius: var(--radius-sm); 186 186 cursor: pointer; 187 187 background: transparent; 188 188 } ··· 222 222 .preset-btn { 223 223 width: 32px; 224 224 height: 32px; 225 - border-radius: 4px; 225 + border-radius: var(--radius-sm); 226 226 border: 2px solid transparent; 227 227 cursor: pointer; 228 228 transition: all 0.2s;
+6 -6
frontend/src/lib/components/HandleAutocomplete.svelte
··· 131 131 padding: 0.75rem; 132 132 background: var(--bg-primary); 133 133 border: 1px solid var(--border-default); 134 - border-radius: 4px; 134 + border-radius: var(--radius-sm); 135 135 color: var(--text-primary); 136 136 font-size: 1rem; 137 137 font-family: inherit; ··· 170 170 overflow-y: auto; 171 171 background: var(--bg-tertiary); 172 172 border: 1px solid var(--border-default); 173 - border-radius: 4px; 173 + border-radius: var(--radius-sm); 174 174 margin-top: 0.25rem; 175 175 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); 176 176 scrollbar-width: thin; ··· 183 183 184 184 .results::-webkit-scrollbar-track { 185 185 background: var(--bg-primary); 186 - border-radius: 4px; 186 + border-radius: var(--radius-sm); 187 187 } 188 188 189 189 .results::-webkit-scrollbar-thumb { 190 190 background: var(--border-default); 191 - border-radius: 4px; 191 + border-radius: var(--radius-sm); 192 192 } 193 193 194 194 .results::-webkit-scrollbar-thumb:hover { ··· 222 222 .avatar { 223 223 width: 36px; 224 224 height: 36px; 225 - border-radius: 50%; 225 + border-radius: var(--radius-full); 226 226 object-fit: cover; 227 227 border: 2px solid var(--border-default); 228 228 flex-shrink: 0; ··· 231 231 .avatar-placeholder { 232 232 width: 36px; 233 233 height: 36px; 234 - border-radius: 50%; 234 + border-radius: var(--radius-full); 235 235 background: var(--border-default); 236 236 flex-shrink: 0; 237 237 }
+8 -8
frontend/src/lib/components/HandleSearch.svelte
··· 179 179 padding: 0.75rem; 180 180 background: var(--bg-primary); 181 181 border: 1px solid var(--border-default); 182 - border-radius: 4px; 182 + border-radius: var(--radius-sm); 183 183 color: var(--text-primary); 184 184 font-size: 1rem; 185 185 font-family: inherit; ··· 213 213 overflow-y: auto; 214 214 background: var(--bg-tertiary); 215 215 border: 1px solid var(--border-default); 216 - border-radius: 4px; 216 + border-radius: var(--radius-sm); 217 217 margin-top: 0.25rem; 218 218 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); 219 219 } ··· 225 225 226 226 .search-results::-webkit-scrollbar-track { 227 227 background: var(--bg-primary); 228 - border-radius: 4px; 228 + border-radius: var(--radius-sm); 229 229 } 230 230 231 231 .search-results::-webkit-scrollbar-thumb { 232 232 background: var(--border-default); 233 - border-radius: 4px; 233 + border-radius: var(--radius-sm); 234 234 } 235 235 236 236 .search-results::-webkit-scrollbar-thumb:hover { ··· 277 277 .result-avatar { 278 278 width: 36px; 279 279 height: 36px; 280 - border-radius: 50%; 280 + border-radius: var(--radius-full); 281 281 object-fit: cover; 282 282 border: 2px solid var(--border-default); 283 283 flex-shrink: 0; ··· 320 320 padding: 0.5rem 0.75rem; 321 321 background: color-mix(in srgb, var(--accent) 10%, var(--bg-tertiary)); 322 322 border: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border-subtle)); 323 - border-radius: 20px; 323 + border-radius: var(--radius-xl); 324 324 color: var(--text-primary); 325 325 font-size: 0.9rem; 326 326 } ··· 328 328 .chip-avatar { 329 329 width: 24px; 330 330 height: 24px; 331 - border-radius: 50%; 331 + border-radius: var(--radius-full); 332 332 object-fit: cover; 333 333 border: 1px solid var(--border-default); 334 334 } ··· 374 374 padding: 0.75rem; 375 375 background: color-mix(in srgb, var(--warning) 10%, var(--bg-primary)); 376 376 border: 1px solid color-mix(in srgb, var(--warning) 20%, var(--border-subtle)); 377 - border-radius: 4px; 377 + border-radius: var(--radius-sm); 378 378 color: var(--warning); 379 379 font-size: 0.9rem; 380 380 text-align: center;
+6 -6
frontend/src/lib/components/Header.svelte
··· 228 228 justify-content: center; 229 229 width: 44px; 230 230 height: 44px; 231 - border-radius: 10px; 231 + border-radius: var(--radius-md); 232 232 background: transparent; 233 233 border: none; 234 234 color: var(--text-secondary); ··· 275 275 border: 1px solid var(--border-emphasis); 276 276 color: var(--text-secondary); 277 277 padding: 0.5rem 1rem; 278 - border-radius: 6px; 278 + border-radius: var(--radius-base); 279 279 font-size: 0.9rem; 280 280 font-family: inherit; 281 281 cursor: pointer; ··· 309 309 } 310 310 311 311 .tangled-icon { 312 - border-radius: 4px; 312 + border-radius: var(--radius-sm); 313 313 opacity: 0.7; 314 314 transition: opacity 0.2s, box-shadow 0.2s; 315 315 } ··· 360 360 align-items: center; 361 361 gap: 0.4rem; 362 362 padding: 0.4rem 0.75rem; 363 - border-radius: 6px; 363 + border-radius: var(--radius-base); 364 364 border: 1px solid transparent; 365 365 } 366 366 ··· 391 391 font-size: 0.9rem; 392 392 padding: 0.4rem 0.75rem; 393 393 background: var(--bg-tertiary); 394 - border-radius: 6px; 394 + border-radius: var(--radius-base); 395 395 border: 1px solid var(--border-default); 396 396 transition: all 0.2s; 397 397 white-space: nowrap; ··· 408 408 border: 1px solid var(--accent); 409 409 color: var(--accent); 410 410 padding: 0.5rem 1rem; 411 - border-radius: 6px; 411 + border-radius: var(--radius-base); 412 412 font-size: 0.9rem; 413 413 text-decoration: none; 414 414 transition: all 0.2s;
+4 -4
frontend/src/lib/components/HiddenTagsFilter.svelte
··· 139 139 color: var(--text-tertiary); 140 140 cursor: pointer; 141 141 transition: all 0.15s; 142 - border-radius: 6px; 142 + border-radius: var(--radius-base); 143 143 } 144 144 145 145 .filter-toggle:hover { ··· 183 183 background: transparent; 184 184 border: 1px solid var(--border-default); 185 185 color: var(--text-secondary); 186 - border-radius: 3px; 186 + border-radius: var(--radius-sm); 187 187 font-size: 0.75rem; 188 188 font-family: inherit; 189 189 cursor: pointer; ··· 219 219 padding: 0; 220 220 background: transparent; 221 221 border: 1px dashed var(--border-default); 222 - border-radius: 3px; 222 + border-radius: var(--radius-sm); 223 223 color: var(--text-tertiary); 224 224 font-size: 0.8rem; 225 225 cursor: pointer; ··· 241 241 min-height: 24px; 242 242 width: 70px; 243 243 outline: none; 244 - border-radius: 3px; 244 + border-radius: var(--radius-sm); 245 245 } 246 246 247 247 .add-input:focus {
+1 -1
frontend/src/lib/components/LikeButton.svelte
··· 84 84 justify-content: center; 85 85 background: transparent; 86 86 border: 1px solid var(--border-default); 87 - border-radius: 4px; 87 + border-radius: var(--radius-sm); 88 88 color: var(--text-tertiary); 89 89 cursor: pointer; 90 90 transition: all 0.2s;
+4 -4
frontend/src/lib/components/LikersTooltip.svelte
··· 134 134 margin-bottom: 0.5rem; 135 135 background: var(--bg-secondary); 136 136 border: 1px solid var(--border-default); 137 - border-radius: 8px; 137 + border-radius: var(--radius-md); 138 138 padding: 0.75rem; 139 139 min-width: 240px; 140 140 max-width: 320px; ··· 177 177 align-items: center; 178 178 gap: 0.75rem; 179 179 padding: 0.5rem; 180 - border-radius: 6px; 180 + border-radius: var(--radius-base); 181 181 text-decoration: none; 182 182 transition: background 0.2s; 183 183 } ··· 190 190 .avatar-placeholder { 191 191 width: 32px; 192 192 height: 32px; 193 - border-radius: 50%; 193 + border-radius: var(--radius-full); 194 194 flex-shrink: 0; 195 195 } 196 196 ··· 248 248 249 249 .likers-list::-webkit-scrollbar-thumb { 250 250 background: var(--border-default); 251 - border-radius: 3px; 251 + border-radius: var(--radius-sm); 252 252 } 253 253 254 254 .likers-list::-webkit-scrollbar-thumb:hover {
+5 -5
frontend/src/lib/components/LinksMenu.svelte
··· 140 140 height: 32px; 141 141 background: transparent; 142 142 border: 1px solid var(--border-default); 143 - border-radius: 6px; 143 + border-radius: var(--radius-base); 144 144 color: var(--text-secondary); 145 145 cursor: pointer; 146 146 transition: all 0.2s; ··· 171 171 width: min(320px, calc(100vw - 2rem)); 172 172 background: var(--bg-secondary); 173 173 border: 1px solid var(--border-default); 174 - border-radius: 12px; 174 + border-radius: var(--radius-lg); 175 175 box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); 176 176 z-index: 101; 177 177 animation: slideIn 0.2s cubic-bezier(0.16, 1, 0.3, 1); ··· 201 201 height: 28px; 202 202 background: transparent; 203 203 border: none; 204 - border-radius: 4px; 204 + border-radius: var(--radius-sm); 205 205 color: var(--text-secondary); 206 206 cursor: pointer; 207 207 transition: all 0.2s; ··· 224 224 gap: 1rem; 225 225 padding: 1rem; 226 226 background: transparent; 227 - border-radius: 8px; 227 + border-radius: var(--radius-md); 228 228 text-decoration: none; 229 229 color: var(--text-primary); 230 230 transition: all 0.2s; ··· 245 245 } 246 246 247 247 .tangled-menu-icon { 248 - border-radius: 4px; 248 + border-radius: var(--radius-sm); 249 249 opacity: 0.7; 250 250 transition: opacity 0.2s, box-shadow 0.2s; 251 251 }
+4 -4
frontend/src/lib/components/MigrationBanner.svelte
··· 152 152 .migration-banner { 153 153 background: var(--bg-tertiary); 154 154 border: 1px solid var(--border-default); 155 - border-radius: 8px; 155 + border-radius: var(--radius-md); 156 156 padding: 1rem; 157 157 margin-bottom: 1.5rem; 158 158 } ··· 190 190 gap: 1rem; 191 191 background: color-mix(in srgb, var(--success) 10%, transparent); 192 192 border: 1px solid color-mix(in srgb, var(--success) 30%, transparent); 193 - border-radius: 6px; 193 + border-radius: var(--radius-base); 194 194 padding: 1rem; 195 195 animation: slideIn 0.3s ease-out; 196 196 } ··· 239 239 .collection-name { 240 240 background: color-mix(in srgb, var(--text-primary) 5%, transparent); 241 241 padding: 0.15em 0.4em; 242 - border-radius: 3px; 242 + border-radius: var(--radius-sm); 243 243 font-family: monospace; 244 244 font-size: 0.95em; 245 245 color: var(--text-primary); ··· 265 265 .migrate-button, 266 266 .dismiss-button { 267 267 padding: 0.5rem 1rem; 268 - border-radius: 4px; 268 + border-radius: var(--radius-sm); 269 269 font-size: 0.9em; 270 270 font-family: inherit; 271 271 cursor: pointer;
+2 -2
frontend/src/lib/components/PlatformStats.svelte
··· 203 203 background: linear-gradient(90deg, var(--bg-tertiary) 0%, var(--bg-hover) 50%, var(--bg-tertiary) 100%); 204 204 background-size: 200% 100%; 205 205 animation: shimmer 1.5s ease-in-out infinite; 206 - border-radius: 6px; 206 + border-radius: var(--radius-base); 207 207 } 208 208 209 209 .stats-menu-grid { ··· 219 219 gap: 0.15rem; 220 220 padding: 0.6rem 0.4rem; 221 221 background: var(--bg-tertiary, #1a1a1a); 222 - border-radius: 6px; 222 + border-radius: var(--radius-base); 223 223 } 224 224 225 225 .menu-stat-icon {
+11 -11
frontend/src/lib/components/ProfileMenu.svelte
··· 276 276 height: 44px; 277 277 background: transparent; 278 278 border: 1px solid var(--border-default); 279 - border-radius: 8px; 279 + border-radius: var(--radius-md); 280 280 color: var(--text-secondary); 281 281 cursor: pointer; 282 282 transition: all 0.15s; ··· 311 311 overflow-y: auto; 312 312 background: var(--bg-secondary); 313 313 border: 1px solid var(--border-default); 314 - border-radius: 16px; 314 + border-radius: var(--radius-xl); 315 315 box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); 316 316 z-index: 101; 317 317 animation: slideIn 0.18s cubic-bezier(0.16, 1, 0.3, 1); ··· 341 341 height: 36px; 342 342 background: transparent; 343 343 border: none; 344 - border-radius: 8px; 344 + border-radius: var(--radius-md); 345 345 color: var(--text-secondary); 346 346 cursor: pointer; 347 347 transition: all 0.15s; ··· 371 371 min-height: 56px; 372 372 background: transparent; 373 373 border: none; 374 - border-radius: 12px; 374 + border-radius: var(--radius-lg); 375 375 text-decoration: none; 376 376 color: var(--text-primary); 377 377 font-family: inherit; ··· 440 440 padding: 0.5rem 0.75rem; 441 441 background: transparent; 442 442 border: none; 443 - border-radius: 6px; 443 + border-radius: var(--radius-base); 444 444 color: var(--text-secondary); 445 445 font-family: inherit; 446 446 font-size: 0.85rem; ··· 490 490 min-height: 54px; 491 491 background: var(--bg-tertiary); 492 492 border: 1px solid var(--border-default); 493 - border-radius: 8px; 493 + border-radius: var(--radius-md); 494 494 color: var(--text-secondary); 495 495 cursor: pointer; 496 496 transition: all 0.15s; ··· 533 533 width: 44px; 534 534 height: 44px; 535 535 border: 1px solid var(--border-default); 536 - border-radius: 8px; 536 + border-radius: var(--radius-md); 537 537 cursor: pointer; 538 538 background: transparent; 539 539 flex-shrink: 0; ··· 544 544 } 545 545 546 546 .color-input::-webkit-color-swatch { 547 - border-radius: 4px; 547 + border-radius: var(--radius-sm); 548 548 border: none; 549 549 } 550 550 ··· 557 557 .preset-btn { 558 558 width: 36px; 559 559 height: 36px; 560 - border-radius: 6px; 560 + border-radius: var(--radius-base); 561 561 border: 2px solid transparent; 562 562 cursor: pointer; 563 563 transition: all 0.15s; ··· 592 592 appearance: none; 593 593 width: 48px; 594 594 height: 28px; 595 - border-radius: 999px; 595 + border-radius: var(--radius-full); 596 596 background: var(--border-default); 597 597 position: relative; 598 598 cursor: pointer; ··· 608 608 left: 3px; 609 609 width: 20px; 610 610 height: 20px; 611 - border-radius: 50%; 611 + border-radius: var(--radius-full); 612 612 background: var(--text-secondary); 613 613 transition: transform 0.15s, background 0.15s; 614 614 }
+7 -7
frontend/src/lib/components/Queue.svelte
··· 270 270 background: transparent; 271 271 border: 1px solid var(--border-subtle); 272 272 color: var(--text-tertiary); 273 - border-radius: 4px; 273 + border-radius: var(--radius-sm); 274 274 cursor: pointer; 275 275 transition: all 0.15s ease; 276 276 } ··· 302 302 align-items: center; 303 303 justify-content: space-between; 304 304 padding: 1rem 1.1rem; 305 - border-radius: 10px; 305 + border-radius: var(--radius-md); 306 306 background: var(--bg-secondary); 307 307 border: 1px solid var(--border-default); 308 308 gap: 1rem; ··· 372 372 align-items: center; 373 373 gap: 0.5rem; 374 374 padding: 0.85rem 0.9rem; 375 - border-radius: 8px; 375 + border-radius: var(--radius-md); 376 376 cursor: pointer; 377 377 transition: all 0.2s; 378 378 border: 1px solid var(--border-subtle); ··· 412 412 color: var(--text-muted); 413 413 cursor: grab; 414 414 touch-action: none; 415 - border-radius: 4px; 415 + border-radius: var(--radius-sm); 416 416 transition: all 0.2s; 417 417 flex-shrink: 0; 418 418 } ··· 476 476 align-items: center; 477 477 justify-content: center; 478 478 transition: all 0.2s; 479 - border-radius: 4px; 479 + border-radius: var(--radius-sm); 480 480 opacity: 0; 481 481 flex-shrink: 0; 482 482 } ··· 499 499 500 500 .empty-up-next { 501 501 border: 1px dashed var(--border-subtle); 502 - border-radius: 6px; 502 + border-radius: var(--radius-base); 503 503 padding: 1.25rem; 504 504 text-align: center; 505 505 color: var(--text-tertiary); ··· 542 542 543 543 .queue-tracks::-webkit-scrollbar-thumb { 544 544 background: var(--border-default); 545 - border-radius: 4px; 545 + border-radius: var(--radius-sm); 546 546 } 547 547 548 548 .queue-tracks::-webkit-scrollbar-thumb:hover {
+10 -10
frontend/src/lib/components/SearchModal.svelte
··· 276 276 backdrop-filter: blur(20px) saturate(180%); 277 277 -webkit-backdrop-filter: blur(20px) saturate(180%); 278 278 border: 1px solid var(--border-subtle); 279 - border-radius: 16px; 279 + border-radius: var(--radius-xl); 280 280 box-shadow: 281 281 0 24px 80px color-mix(in srgb, var(--bg-primary) 50%, transparent), 282 282 0 0 1px var(--border-subtle) inset; ··· 317 317 padding: 0.25rem 0.5rem; 318 318 background: var(--bg-tertiary); 319 319 border: 1px solid var(--border-default); 320 - border-radius: 5px; 320 + border-radius: var(--radius-sm); 321 321 color: var(--text-muted); 322 322 font-family: inherit; 323 323 } ··· 327 327 height: 16px; 328 328 border: 2px solid var(--border-default); 329 329 border-top-color: var(--accent); 330 - border-radius: 50%; 330 + border-radius: var(--radius-full); 331 331 animation: spin 0.6s linear infinite; 332 332 } 333 333 ··· 351 351 352 352 .search-results::-webkit-scrollbar-track { 353 353 background: transparent; 354 - border-radius: 4px; 354 + border-radius: var(--radius-sm); 355 355 } 356 356 357 357 .search-results::-webkit-scrollbar-thumb { 358 358 background: var(--border-default); 359 - border-radius: 4px; 359 + border-radius: var(--radius-sm); 360 360 } 361 361 362 362 .search-results::-webkit-scrollbar-thumb:hover { ··· 371 371 padding: 0.75rem; 372 372 background: transparent; 373 373 border: none; 374 - border-radius: 8px; 374 + border-radius: var(--radius-md); 375 375 cursor: pointer; 376 376 text-align: left; 377 377 font-family: inherit; ··· 396 396 align-items: center; 397 397 justify-content: center; 398 398 background: var(--bg-tertiary); 399 - border-radius: 8px; 399 + border-radius: var(--radius-md); 400 400 font-size: 0.9rem; 401 401 flex-shrink: 0; 402 402 position: relative; ··· 409 409 width: 100%; 410 410 height: 100%; 411 411 object-fit: cover; 412 - border-radius: 8px; 412 + border-radius: var(--radius-md); 413 413 } 414 414 415 415 .result-icon[data-type='track'] { ··· 463 463 color: var(--text-muted); 464 464 padding: 0.2rem 0.45rem; 465 465 background: var(--bg-tertiary); 466 - border-radius: 4px; 466 + border-radius: var(--radius-sm); 467 467 flex-shrink: 0; 468 468 } 469 469 ··· 504 504 padding: 0.15rem 0.35rem; 505 505 background: var(--bg-tertiary); 506 506 border: 1px solid var(--border-default); 507 - border-radius: 4px; 507 + border-radius: var(--radius-sm); 508 508 font-family: inherit; 509 509 } 510 510
+1 -1
frontend/src/lib/components/SearchTrigger.svelte
··· 24 24 border: 1px solid var(--border-default); 25 25 color: var(--text-secondary); 26 26 padding: 0.5rem; 27 - border-radius: 4px; 27 + border-radius: var(--radius-sm); 28 28 cursor: pointer; 29 29 transition: all 0.2s; 30 30 display: flex;
+1 -1
frontend/src/lib/components/SensitiveImage.svelte
··· 70 70 margin-bottom: 4px; 71 71 background: var(--bg-primary); 72 72 border: 1px solid var(--border-default); 73 - border-radius: 4px; 73 + border-radius: var(--radius-sm); 74 74 padding: 0.25rem 0.5rem; 75 75 font-size: 0.7rem; 76 76 color: var(--text-tertiary);
+7 -7
frontend/src/lib/components/SettingsMenu.svelte
··· 181 181 border: 1px solid var(--border-default); 182 182 color: var(--text-secondary); 183 183 padding: 0.5rem; 184 - border-radius: 4px; 184 + border-radius: var(--radius-sm); 185 185 cursor: pointer; 186 186 transition: all 0.2s; 187 187 display: flex; ··· 200 200 right: 0; 201 201 background: var(--bg-secondary); 202 202 border: 1px solid var(--border-default); 203 - border-radius: 8px; 203 + border-radius: var(--radius-md); 204 204 padding: 1.25rem; 205 205 min-width: 280px; 206 206 box-shadow: 0 4px 16px rgba(0, 0, 0, 0.45); ··· 265 265 padding: 0.6rem 0.5rem; 266 266 background: var(--bg-tertiary); 267 267 border: 1px solid var(--border-default); 268 - border-radius: 6px; 268 + border-radius: var(--radius-base); 269 269 color: var(--text-secondary); 270 270 cursor: pointer; 271 271 transition: all 0.2s; ··· 303 303 width: 48px; 304 304 height: 32px; 305 305 border: 1px solid var(--border-default); 306 - border-radius: 4px; 306 + border-radius: var(--radius-sm); 307 307 cursor: pointer; 308 308 background: transparent; 309 309 } ··· 332 332 .preset-btn { 333 333 width: 32px; 334 334 height: 32px; 335 - border-radius: 4px; 335 + border-radius: var(--radius-sm); 336 336 border: 2px solid transparent; 337 337 cursor: pointer; 338 338 transition: all 0.2s; ··· 361 361 appearance: none; 362 362 width: 42px; 363 363 height: 22px; 364 - border-radius: 999px; 364 + border-radius: var(--radius-full); 365 365 background: var(--border-default); 366 366 position: relative; 367 367 cursor: pointer; ··· 377 377 left: 2px; 378 378 width: 16px; 379 379 height: 16px; 380 - border-radius: 50%; 380 + border-radius: var(--radius-full); 381 381 background: var(--text-secondary); 382 382 transition: transform 0.2s, background 0.2s; 383 383 }
+2 -2
frontend/src/lib/components/ShareButton.svelte
··· 38 38 .share-btn { 39 39 background: var(--glass-btn-bg, transparent); 40 40 border: 1px solid var(--glass-btn-border, var(--border-default)); 41 - border-radius: 6px; 41 + border-radius: var(--radius-base); 42 42 width: 32px; 43 43 height: 32px; 44 44 padding: 0; ··· 67 67 border: 1px solid var(--accent); 68 68 color: var(--accent); 69 69 padding: 0.25rem 0.75rem; 70 - border-radius: 4px; 70 + border-radius: var(--radius-sm); 71 71 font-size: 0.75rem; 72 72 white-space: nowrap; 73 73 pointer-events: none;
+1 -1
frontend/src/lib/components/SupporterBadge.svelte
··· 22 22 padding: 0.2rem 0.5rem; 23 23 background: color-mix(in srgb, var(--accent) 15%, transparent); 24 24 border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent); 25 - border-radius: 4px; 25 + border-radius: var(--radius-sm); 26 26 color: var(--accent); 27 27 font-size: 0.75rem; 28 28 font-weight: 500;
+5 -5
frontend/src/lib/components/TagInput.svelte
··· 178 178 padding: 0.75rem; 179 179 background: var(--bg-primary); 180 180 border: 1px solid var(--border-default); 181 - border-radius: 4px; 181 + border-radius: var(--radius-sm); 182 182 min-height: 48px; 183 183 transition: all 0.2s; 184 184 } ··· 195 195 background: color-mix(in srgb, var(--accent) 10%, transparent); 196 196 border: 1px solid color-mix(in srgb, var(--accent) 20%, transparent); 197 197 color: var(--accent-hover); 198 - border-radius: 20px; 198 + border-radius: var(--radius-xl); 199 199 font-size: 0.9rem; 200 200 font-weight: 500; 201 201 } ··· 261 261 overflow-y: auto; 262 262 background: var(--bg-secondary); 263 263 border: 1px solid var(--border-default); 264 - border-radius: 4px; 264 + border-radius: var(--radius-sm); 265 265 margin-top: 0.25rem; 266 266 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); 267 267 scrollbar-width: thin; ··· 274 274 275 275 .suggestions::-webkit-scrollbar-track { 276 276 background: var(--bg-primary); 277 - border-radius: 4px; 277 + border-radius: var(--radius-sm); 278 278 } 279 279 280 280 .suggestions::-webkit-scrollbar-thumb { 281 281 background: var(--border-default); 282 - border-radius: 4px; 282 + border-radius: var(--radius-sm); 283 283 } 284 284 285 285 .suggestions::-webkit-scrollbar-thumb:hover {
+1 -1
frontend/src/lib/components/Toast.svelte
··· 61 61 backdrop-filter: blur(12px); 62 62 -webkit-backdrop-filter: blur(12px); 63 63 border: 1px solid rgba(255, 255, 255, 0.06); 64 - border-radius: 8px; 64 + border-radius: var(--radius-md); 65 65 pointer-events: none; 66 66 font-size: 0.85rem; 67 67 max-width: 450px;
+6 -6
frontend/src/lib/components/TrackActionsMenu.svelte
··· 402 402 justify-content: center; 403 403 background: transparent; 404 404 border: 1px solid var(--border-default); 405 - border-radius: 4px; 405 + border-radius: var(--radius-sm); 406 406 color: var(--text-tertiary); 407 407 cursor: pointer; 408 408 transition: all 0.2s; ··· 558 558 .playlist-thumb-placeholder { 559 559 width: 36px; 560 560 height: 36px; 561 - border-radius: 4px; 561 + border-radius: var(--radius-sm); 562 562 flex-shrink: 0; 563 563 } 564 564 ··· 627 627 padding: 0.75rem 1rem; 628 628 background: var(--bg-tertiary); 629 629 border: 1px solid var(--border-default); 630 - border-radius: 8px; 630 + border-radius: var(--radius-md); 631 631 color: var(--text-primary); 632 632 font-family: inherit; 633 633 font-size: 1rem; ··· 650 650 padding: 0.75rem 1rem; 651 651 background: var(--accent); 652 652 border: none; 653 - border-radius: 8px; 653 + border-radius: var(--radius-md); 654 654 color: white; 655 655 font-family: inherit; 656 656 font-size: 1rem; ··· 673 673 height: 18px; 674 674 border: 2px solid var(--border-default); 675 675 border-top-color: var(--accent); 676 - border-radius: 50%; 676 + border-radius: var(--radius-full); 677 677 animation: spin 0.8s linear infinite; 678 678 } 679 679 ··· 700 700 top: 50%; 701 701 transform: translateY(-50%); 702 702 margin-right: 0.5rem; 703 - border-radius: 8px; 703 + border-radius: var(--radius-md); 704 704 min-width: 180px; 705 705 max-height: none; 706 706 animation: slideIn 0.15s cubic-bezier(0.16, 1, 0.3, 1);
+8 -8
frontend/src/lib/components/TrackItem.svelte
··· 359 359 gap: 0.75rem; 360 360 background: var(--track-bg, var(--bg-secondary)); 361 361 border: 1px solid var(--track-border, var(--border-subtle)); 362 - border-radius: 8px; 362 + border-radius: var(--radius-md); 363 363 padding: 1rem; 364 364 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); 365 365 transition: ··· 428 428 position: absolute; 429 429 inset: 0; 430 430 background: rgba(0, 0, 0, 0.3); 431 - border-radius: 4px; 431 + border-radius: var(--radius-sm); 432 432 pointer-events: none; 433 433 } 434 434 ··· 443 443 justify-content: center; 444 444 background: var(--accent); 445 445 border: 2px solid var(--bg-secondary); 446 - border-radius: 50%; 446 + border-radius: var(--radius-full); 447 447 color: white; 448 448 z-index: 1; 449 449 } ··· 456 456 display: flex; 457 457 align-items: center; 458 458 justify-content: center; 459 - border-radius: 4px; 459 + border-radius: var(--radius-sm); 460 460 overflow: hidden; 461 461 background: var(--bg-tertiary); 462 462 border: 1px solid var(--border-subtle); ··· 490 490 } 491 491 492 492 .track-avatar img { 493 - border-radius: 50%; 493 + border-radius: var(--radius-full); 494 494 border: 2px solid var(--border-default); 495 495 transition: border-color 0.2s; 496 496 } ··· 659 659 padding: 0.1rem 0.4rem; 660 660 background: color-mix(in srgb, var(--accent) 15%, transparent); 661 661 color: var(--accent-hover); 662 - border-radius: 3px; 662 + border-radius: var(--radius-sm); 663 663 font-size: 0.75rem; 664 664 font-weight: 500; 665 665 text-decoration: none; ··· 679 679 background: var(--bg-tertiary); 680 680 color: var(--text-muted); 681 681 border: none; 682 - border-radius: 3px; 682 + border-radius: var(--radius-sm); 683 683 font-size: 0.75rem; 684 684 font-weight: 500; 685 685 font-family: inherit; ··· 756 756 justify-content: center; 757 757 background: transparent; 758 758 border: 1px solid var(--border-default); 759 - border-radius: 4px; 759 + border-radius: var(--radius-sm); 760 760 color: var(--text-tertiary); 761 761 cursor: pointer; 762 762 transition: all 0.2s;
+4 -4
frontend/src/lib/components/player/PlaybackControls.svelte
··· 244 244 align-items: center; 245 245 justify-content: center; 246 246 transition: all 0.2s; 247 - border-radius: 50%; 247 + border-radius: var(--radius-full); 248 248 } 249 249 250 250 .control-btn svg { ··· 282 282 display: flex; 283 283 align-items: center; 284 284 justify-content: center; 285 - border-radius: 6px; 285 + border-radius: var(--radius-base); 286 286 transition: all 0.2s; 287 287 position: relative; 288 288 } ··· 382 382 background: var(--accent); 383 383 height: 14px; 384 384 width: 14px; 385 - border-radius: 50%; 385 + border-radius: var(--radius-full); 386 386 margin-top: -5px; 387 387 transition: all 0.2s; 388 388 box-shadow: 0 0 0 8px transparent; ··· 419 419 background: var(--accent); 420 420 height: 14px; 421 421 width: 14px; 422 - border-radius: 50%; 422 + border-radius: var(--radius-full); 423 423 border: none; 424 424 transition: all 0.2s; 425 425 box-shadow: 0 0 0 8px transparent;
+1 -1
frontend/src/lib/components/player/TrackInfo.svelte
··· 156 156 flex-shrink: 0; 157 157 width: 56px; 158 158 height: 56px; 159 - border-radius: 4px; 159 + border-radius: var(--radius-sm); 160 160 overflow: hidden; 161 161 background: var(--bg-tertiary); 162 162 border: 1px solid var(--border-default);
+1 -1
frontend/src/routes/+error.svelte
··· 79 79 font-size: 1.1rem; 80 80 padding: 0.75rem 1.5rem; 81 81 border: 1px solid var(--accent); 82 - border-radius: 6px; 82 + border-radius: var(--radius-base); 83 83 transition: all 0.2s; 84 84 } 85 85
+10 -1
frontend/src/routes/+layout.svelte
··· 455 455 --text-body: 1rem; 456 456 --text-small: 0.9rem; 457 457 458 + /* border radius scale */ 459 + --radius-sm: 4px; 460 + --radius-base: 6px; 461 + --radius-md: 8px; 462 + --radius-lg: 12px; 463 + --radius-xl: 16px; 464 + --radius-2xl: 24px; 465 + --radius-full: 9999px; 466 + 458 467 /* semantic */ 459 468 --success: #4ade80; 460 469 --warning: #fbbf24; ··· 589 598 right: 20px; 590 599 width: 48px; 591 600 height: 48px; 592 - border-radius: 50%; 601 + border-radius: var(--radius-full); 593 602 background: var(--bg-secondary); 594 603 border: 1px solid var(--border-default); 595 604 color: var(--text-secondary);
+11 -11
frontend/src/routes/costs/+page.svelte
··· 407 407 padding: 2rem; 408 408 background: var(--bg-tertiary); 409 409 border: 1px solid var(--border-subtle); 410 - border-radius: 12px; 410 + border-radius: var(--radius-lg); 411 411 } 412 412 413 413 .total-label { ··· 454 454 .cost-item { 455 455 background: var(--bg-tertiary); 456 456 border: 1px solid var(--border-subtle); 457 - border-radius: 8px; 457 + border-radius: var(--radius-md); 458 458 padding: 1rem; 459 459 } 460 460 ··· 479 479 .cost-bar-bg { 480 480 height: 8px; 481 481 background: var(--bg-primary); 482 - border-radius: 4px; 482 + border-radius: var(--radius-sm); 483 483 overflow: hidden; 484 484 margin-bottom: 0.5rem; 485 485 } ··· 487 487 .cost-bar { 488 488 height: 100%; 489 489 background: var(--accent); 490 - border-radius: 4px; 490 + border-radius: var(--radius-sm); 491 491 transition: width 0.3s ease; 492 492 } 493 493 ··· 522 522 gap: 0.25rem; 523 523 background: var(--bg-tertiary); 524 524 border: 1px solid var(--border-subtle); 525 - border-radius: 6px; 525 + border-radius: var(--radius-base); 526 526 padding: 0.25rem; 527 527 } 528 528 ··· 533 533 font-weight: 500; 534 534 background: transparent; 535 535 border: none; 536 - border-radius: 4px; 536 + border-radius: var(--radius-sm); 537 537 color: var(--text-secondary); 538 538 cursor: pointer; 539 539 transition: all 0.15s; ··· 555 555 padding: 2rem; 556 556 background: var(--bg-tertiary); 557 557 border: 1px solid var(--border-subtle); 558 - border-radius: 8px; 558 + border-radius: var(--radius-md); 559 559 } 560 560 561 561 .audd-stats { ··· 583 583 padding: 1rem; 584 584 background: var(--bg-tertiary); 585 585 border: 1px solid var(--border-subtle); 586 - border-radius: 8px; 586 + border-radius: var(--radius-md); 587 587 } 588 588 589 589 .stat-value { ··· 604 604 .daily-chart { 605 605 background: var(--bg-tertiary); 606 606 border: 1px solid var(--border-subtle); 607 - border-radius: 8px; 607 + border-radius: var(--radius-md); 608 608 padding: 1rem; 609 609 overflow: hidden; 610 610 } ··· 673 673 var(--bg-tertiary) 674 674 ); 675 675 border: 1px solid var(--border-subtle); 676 - border-radius: 12px; 676 + border-radius: var(--radius-lg); 677 677 } 678 678 679 679 .support-icon { ··· 700 700 padding: 0.75rem 1.5rem; 701 701 background: var(--accent); 702 702 color: white; 703 - border-radius: 8px; 703 + border-radius: var(--radius-md); 704 704 text-decoration: none; 705 705 font-weight: 600; 706 706 font-size: 0.9rem;
+1 -1
frontend/src/routes/embed/track/[id]/+page.svelte
··· 184 184 .play-btn { 185 185 width: 48px; 186 186 height: 48px; 187 - border-radius: 50%; 187 + border-radius: var(--radius-full); 188 188 background: #fff; 189 189 color: #000; 190 190 border: none;
+10 -10
frontend/src/routes/library/+page.svelte
··· 282 282 padding: 1rem 1.25rem; 283 283 background: var(--bg-secondary); 284 284 border: 1px solid var(--border-default); 285 - border-radius: 12px; 285 + border-radius: var(--radius-lg); 286 286 text-decoration: none; 287 287 color: inherit; 288 288 transition: all 0.15s; ··· 300 300 .collection-icon { 301 301 width: 48px; 302 302 height: 48px; 303 - border-radius: 10px; 303 + border-radius: var(--radius-md); 304 304 display: flex; 305 305 align-items: center; 306 306 justify-content: center; ··· 320 320 .playlist-artwork { 321 321 width: 48px; 322 322 height: 48px; 323 - border-radius: 10px; 323 + border-radius: var(--radius-md); 324 324 object-fit: cover; 325 325 flex-shrink: 0; 326 326 } ··· 384 384 background: var(--accent); 385 385 color: white; 386 386 border: none; 387 - border-radius: 8px; 387 + border-radius: var(--radius-md); 388 388 font-family: inherit; 389 389 font-size: 0.875rem; 390 390 font-weight: 500; ··· 415 415 padding: 3rem 2rem; 416 416 background: var(--bg-secondary); 417 417 border: 1px dashed var(--border-default); 418 - border-radius: 12px; 418 + border-radius: var(--radius-lg); 419 419 text-align: center; 420 420 } 421 421 422 422 .empty-icon { 423 423 width: 64px; 424 424 height: 64px; 425 - border-radius: 16px; 425 + border-radius: var(--radius-xl); 426 426 display: flex; 427 427 align-items: center; 428 428 justify-content: center; ··· 461 461 .modal { 462 462 background: var(--bg-primary); 463 463 border: 1px solid var(--border-default); 464 - border-radius: 16px; 464 + border-radius: var(--radius-xl); 465 465 width: 100%; 466 466 max-width: 400px; 467 467 box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); ··· 490 490 height: 32px; 491 491 background: transparent; 492 492 border: none; 493 - border-radius: 8px; 493 + border-radius: var(--radius-md); 494 494 color: var(--text-secondary); 495 495 cursor: pointer; 496 496 transition: all 0.15s; ··· 518 518 padding: 0.75rem 1rem; 519 519 background: var(--bg-secondary); 520 520 border: 1px solid var(--border-default); 521 - border-radius: 8px; 521 + border-radius: var(--radius-md); 522 522 font-family: inherit; 523 523 font-size: 1rem; 524 524 color: var(--text-primary); ··· 550 550 .cancel-btn, 551 551 .confirm-btn { 552 552 padding: 0.625rem 1.25rem; 553 - border-radius: 8px; 553 + border-radius: var(--radius-md); 554 554 font-family: inherit; 555 555 font-size: 0.9rem; 556 556 font-weight: 500;
+4 -4
frontend/src/routes/liked/+page.svelte
··· 350 350 color: var(--text-tertiary); 351 351 background: var(--bg-tertiary); 352 352 padding: 0.2rem 0.55rem; 353 - border-radius: 4px; 353 + border-radius: var(--radius-sm); 354 354 } 355 355 356 356 .header-actions { ··· 362 362 .queue-button, 363 363 .reorder-button { 364 364 padding: 0.75rem 1.5rem; 365 - border-radius: 24px; 365 + border-radius: var(--radius-2xl); 366 366 font-weight: 600; 367 367 font-size: 0.95rem; 368 368 font-family: inherit; ··· 441 441 display: flex; 442 442 align-items: center; 443 443 gap: 0.5rem; 444 - border-radius: 8px; 444 + border-radius: var(--radius-md); 445 445 transition: all 0.2s; 446 446 position: relative; 447 447 } ··· 473 473 color: var(--text-muted); 474 474 cursor: grab; 475 475 touch-action: none; 476 - border-radius: 4px; 476 + border-radius: var(--radius-sm); 477 477 transition: all 0.2s; 478 478 flex-shrink: 0; 479 479 }
+2 -2
frontend/src/routes/liked/[handle]/+page.svelte
··· 126 126 .avatar { 127 127 width: 64px; 128 128 height: 64px; 129 - border-radius: 50%; 129 + border-radius: var(--radius-full); 130 130 object-fit: cover; 131 131 flex-shrink: 0; 132 132 } ··· 208 208 background: transparent; 209 209 border: 1px solid var(--border-default); 210 210 color: var(--text-secondary); 211 - border-radius: 6px; 211 + border-radius: var(--radius-base); 212 212 font-size: 0.85rem; 213 213 font-family: inherit; 214 214 cursor: pointer;
+3 -3
frontend/src/routes/login/+page.svelte
··· 142 142 .login-card { 143 143 background: var(--bg-tertiary); 144 144 border: 1px solid var(--border-subtle); 145 - border-radius: 12px; 145 + border-radius: var(--radius-lg); 146 146 padding: 2.5rem; 147 147 max-width: 420px; 148 148 width: 100%; ··· 180 180 background: var(--accent); 181 181 color: white; 182 182 border: none; 183 - border-radius: 8px; 183 + border-radius: var(--radius-md); 184 184 font-size: 0.95rem; 185 185 font-weight: 500; 186 186 font-family: inherit; ··· 259 259 .faq-content code { 260 260 background: var(--bg-secondary); 261 261 padding: 0.15rem 0.4rem; 262 - border-radius: 4px; 262 + border-radius: var(--radius-sm); 263 263 font-size: 0.85em; 264 264 } 265 265
+17 -17
frontend/src/routes/playlist/[id]/+page.svelte
··· 1341 1341 .playlist-art { 1342 1342 width: 200px; 1343 1343 height: 200px; 1344 - border-radius: 8px; 1344 + border-radius: var(--radius-md); 1345 1345 object-fit: cover; 1346 1346 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); 1347 1347 } ··· 1349 1349 .playlist-art-placeholder { 1350 1350 width: 200px; 1351 1351 height: 200px; 1352 - border-radius: 8px; 1352 + border-radius: var(--radius-md); 1353 1353 background: var(--bg-tertiary); 1354 1354 border: 1px solid var(--border-subtle); 1355 1355 display: flex; ··· 1394 1394 opacity: 0; 1395 1395 transition: opacity 0.2s; 1396 1396 pointer-events: none; 1397 - border-radius: 8px; 1397 + border-radius: var(--radius-md); 1398 1398 font-family: inherit; 1399 1399 } 1400 1400 ··· 1526 1526 height: 32px; 1527 1527 background: var(--glass-btn-bg, rgba(18, 18, 18, 0.75)); 1528 1528 border: 1px solid var(--glass-btn-border, rgba(255, 255, 255, 0.1)); 1529 - border-radius: 6px; 1529 + border-radius: var(--radius-base); 1530 1530 color: var(--text-secondary); 1531 1531 cursor: pointer; 1532 1532 transition: all 0.15s; ··· 1560 1560 .play-button, 1561 1561 .queue-button { 1562 1562 padding: 0.75rem 1.5rem; 1563 - border-radius: 24px; 1563 + border-radius: var(--radius-2xl); 1564 1564 font-weight: 600; 1565 1565 font-size: 0.95rem; 1566 1566 font-family: inherit; ··· 1634 1634 display: flex; 1635 1635 align-items: center; 1636 1636 gap: 0.5rem; 1637 - border-radius: 8px; 1637 + border-radius: var(--radius-md); 1638 1638 transition: all 0.2s; 1639 1639 position: relative; 1640 1640 } ··· 1666 1666 color: var(--text-muted); 1667 1667 cursor: grab; 1668 1668 touch-action: none; 1669 - border-radius: 4px; 1669 + border-radius: var(--radius-sm); 1670 1670 transition: all 0.2s; 1671 1671 flex-shrink: 0; 1672 1672 } ··· 1699 1699 padding: 0.5rem; 1700 1700 background: transparent; 1701 1701 border: 1px solid var(--border-default); 1702 - border-radius: 4px; 1702 + border-radius: var(--radius-sm); 1703 1703 color: var(--text-muted); 1704 1704 cursor: pointer; 1705 1705 transition: all 0.2s; ··· 1732 1732 margin-top: 0.5rem; 1733 1733 background: transparent; 1734 1734 border: 1px dashed var(--border-default); 1735 - border-radius: 8px; 1735 + border-radius: var(--radius-md); 1736 1736 color: var(--text-tertiary); 1737 1737 font-family: inherit; 1738 1738 font-size: 0.9rem; ··· 1759 1759 .empty-icon { 1760 1760 width: 64px; 1761 1761 height: 64px; 1762 - border-radius: 16px; 1762 + border-radius: var(--radius-xl); 1763 1763 display: flex; 1764 1764 align-items: center; 1765 1765 justify-content: center; ··· 1786 1786 background: var(--accent); 1787 1787 color: white; 1788 1788 border: none; 1789 - border-radius: 8px; 1789 + border-radius: var(--radius-md); 1790 1790 font-family: inherit; 1791 1791 font-size: 0.9rem; 1792 1792 font-weight: 500; ··· 1816 1816 .modal { 1817 1817 background: var(--bg-primary); 1818 1818 border: 1px solid var(--border-default); 1819 - border-radius: 16px; 1819 + border-radius: var(--radius-xl); 1820 1820 width: 100%; 1821 1821 max-width: 400px; 1822 1822 box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); ··· 1852 1852 height: 32px; 1853 1853 background: transparent; 1854 1854 border: none; 1855 - border-radius: 8px; 1855 + border-radius: var(--radius-md); 1856 1856 color: var(--text-secondary); 1857 1857 cursor: pointer; 1858 1858 transition: all 0.15s; ··· 1922 1922 .result-image-placeholder { 1923 1923 width: 40px; 1924 1924 height: 40px; 1925 - border-radius: 6px; 1925 + border-radius: var(--radius-base); 1926 1926 flex-shrink: 0; 1927 1927 } 1928 1928 ··· 1971 1971 height: 36px; 1972 1972 background: var(--accent); 1973 1973 border: none; 1974 - border-radius: 8px; 1974 + border-radius: var(--radius-md); 1975 1975 color: white; 1976 1976 cursor: pointer; 1977 1977 transition: all 0.15s; ··· 2008 2008 .cancel-btn, 2009 2009 .confirm-btn { 2010 2010 padding: 0.625rem 1.25rem; 2011 - border-radius: 8px; 2011 + border-radius: var(--radius-md); 2012 2012 font-family: inherit; 2013 2013 font-size: 0.9rem; 2014 2014 font-weight: 500; ··· 2053 2053 height: 16px; 2054 2054 border: 2px solid currentColor; 2055 2055 border-top-color: transparent; 2056 - border-radius: 50%; 2056 + border-radius: var(--radius-full); 2057 2057 animation: spin 0.6s linear infinite; 2058 2058 } 2059 2059
+36 -36
frontend/src/routes/portal/+page.svelte
··· 1145 1145 font-size: 0.8rem; 1146 1146 padding: 0.35rem 0.6rem; 1147 1147 background: var(--bg-tertiary); 1148 - border-radius: 5px; 1148 + border-radius: var(--radius-sm); 1149 1149 border: 1px solid var(--border-default); 1150 1150 transition: all 0.15s; 1151 1151 white-space: nowrap; ··· 1163 1163 font-size: 0.8rem; 1164 1164 padding: 0.35rem 0.6rem; 1165 1165 background: var(--bg-tertiary); 1166 - border-radius: 5px; 1166 + border-radius: var(--radius-sm); 1167 1167 border: 1px solid var(--border-default); 1168 1168 transition: all 0.15s; 1169 1169 white-space: nowrap; ··· 1183 1183 padding: 1rem 1.25rem; 1184 1184 background: var(--bg-tertiary); 1185 1185 border: 1px solid var(--border-default); 1186 - border-radius: 8px; 1186 + border-radius: var(--radius-md); 1187 1187 text-decoration: none; 1188 1188 color: var(--text-primary); 1189 1189 transition: all 0.15s; ··· 1206 1206 width: 44px; 1207 1207 height: 44px; 1208 1208 background: color-mix(in srgb, var(--accent) 15%, transparent); 1209 - border-radius: 10px; 1209 + border-radius: var(--radius-md); 1210 1210 color: var(--accent); 1211 1211 flex-shrink: 0; 1212 1212 } ··· 1243 1243 form { 1244 1244 background: var(--bg-tertiary); 1245 1245 padding: 1.25rem; 1246 - border-radius: 8px; 1246 + border-radius: var(--radius-md); 1247 1247 border: 1px solid var(--border-subtle); 1248 1248 } 1249 1249 ··· 1267 1267 padding: 0.6rem 0.75rem; 1268 1268 background: var(--bg-primary); 1269 1269 border: 1px solid var(--border-default); 1270 - border-radius: 4px; 1270 + border-radius: var(--radius-sm); 1271 1271 color: var(--text-primary); 1272 1272 font-size: 0.95rem; 1273 1273 font-family: inherit; ··· 1289 1289 padding: 0.6rem 0.75rem; 1290 1290 background: var(--bg-primary); 1291 1291 border: 1px solid var(--border-default); 1292 - border-radius: 4px; 1292 + border-radius: var(--radius-sm); 1293 1293 color: var(--text-primary); 1294 1294 font-size: 0.95rem; 1295 1295 font-family: inherit; ··· 1345 1345 padding: 0.6rem 0.75rem; 1346 1346 background: var(--bg-primary); 1347 1347 border: 1px solid var(--border-default); 1348 - border-radius: 6px; 1348 + border-radius: var(--radius-base); 1349 1349 cursor: pointer; 1350 1350 transition: all 0.15s; 1351 1351 margin-bottom: 0; ··· 1412 1412 padding: 0.6rem 0.75rem; 1413 1413 background: var(--bg-primary); 1414 1414 border: 1px solid var(--border-default); 1415 - border-radius: 4px; 1415 + border-radius: var(--radius-sm); 1416 1416 color: var(--text-primary); 1417 1417 font-size: 0.95rem; 1418 1418 font-family: inherit; ··· 1440 1440 .avatar-preview img { 1441 1441 width: 64px; 1442 1442 height: 64px; 1443 - border-radius: 50%; 1443 + border-radius: var(--radius-full); 1444 1444 object-fit: cover; 1445 1445 border: 2px solid var(--border-default); 1446 1446 } ··· 1450 1450 padding: 0.75rem; 1451 1451 background: var(--bg-primary); 1452 1452 border: 1px solid var(--border-default); 1453 - border-radius: 4px; 1453 + border-radius: var(--radius-sm); 1454 1454 color: var(--text-primary); 1455 1455 font-size: 0.9rem; 1456 1456 font-family: inherit; ··· 1474 1474 background: var(--accent); 1475 1475 color: var(--text-primary); 1476 1476 border: none; 1477 - border-radius: 4px; 1477 + border-radius: var(--radius-sm); 1478 1478 font-size: 1rem; 1479 1479 font-weight: 600; 1480 1480 font-family: inherit; ··· 1512 1512 padding: 2rem; 1513 1513 text-align: center; 1514 1514 background: var(--bg-tertiary); 1515 - border-radius: 8px; 1515 + border-radius: var(--radius-md); 1516 1516 border: 1px solid var(--border-subtle); 1517 1517 } 1518 1518 ··· 1529 1529 gap: 1rem; 1530 1530 background: var(--bg-tertiary); 1531 1531 border: 1px solid var(--border-subtle); 1532 - border-radius: 6px; 1532 + border-radius: var(--radius-base); 1533 1533 padding: 1rem; 1534 1534 transition: all 0.2s; 1535 1535 } ··· 1564 1564 .track-artwork { 1565 1565 width: 48px; 1566 1566 height: 48px; 1567 - border-radius: 4px; 1567 + border-radius: var(--radius-sm); 1568 1568 overflow: hidden; 1569 1569 background: var(--bg-primary); 1570 1570 border: 1px solid var(--border-subtle); ··· 1773 1773 padding: 0.1rem 0.4rem; 1774 1774 background: color-mix(in srgb, var(--accent) 15%, transparent); 1775 1775 color: var(--accent-hover); 1776 - border-radius: 3px; 1776 + border-radius: var(--radius-sm); 1777 1777 font-size: 0.8rem; 1778 1778 font-weight: 500; 1779 1779 text-decoration: none; ··· 1807 1807 padding: 0; 1808 1808 background: transparent; 1809 1809 border: 1px solid var(--border-default); 1810 - border-radius: 6px; 1810 + border-radius: var(--radius-base); 1811 1811 color: var(--text-tertiary); 1812 1812 cursor: pointer; 1813 1813 transition: all 0.15s; ··· 1852 1852 padding: 0.5rem; 1853 1853 background: var(--bg-primary); 1854 1854 border: 1px solid var(--border-default); 1855 - border-radius: 4px; 1855 + border-radius: var(--radius-sm); 1856 1856 color: var(--text-primary); 1857 1857 font-size: 0.9rem; 1858 1858 font-family: inherit; ··· 1865 1865 padding: 0.5rem; 1866 1866 background: var(--bg-primary); 1867 1867 border: 1px solid var(--border-default); 1868 - border-radius: 4px; 1868 + border-radius: var(--radius-sm); 1869 1869 margin-bottom: 0.5rem; 1870 1870 } 1871 1871 1872 1872 .current-image-preview img { 1873 1873 width: 48px; 1874 1874 height: 48px; 1875 - border-radius: 4px; 1875 + border-radius: var(--radius-sm); 1876 1876 object-fit: cover; 1877 1877 } 1878 1878 ··· 1910 1910 .album-card { 1911 1911 background: var(--bg-tertiary); 1912 1912 border: 1px solid var(--border-subtle); 1913 - border-radius: 8px; 1913 + border-radius: var(--radius-md); 1914 1914 padding: 1rem; 1915 1915 transition: all 0.2s; 1916 1916 display: flex; ··· 1928 1928 .album-cover { 1929 1929 width: 100%; 1930 1930 aspect-ratio: 1; 1931 - border-radius: 6px; 1931 + border-radius: var(--radius-base); 1932 1932 object-fit: cover; 1933 1933 } 1934 1934 1935 1935 .album-cover-placeholder { 1936 1936 width: 100%; 1937 1937 aspect-ratio: 1; 1938 - border-radius: 6px; 1938 + border-radius: var(--radius-base); 1939 1939 background: linear-gradient(135deg, rgba(var(--accent-rgb, 139, 92, 246), 0.15), rgba(var(--accent-rgb, 139, 92, 246), 0.05)); 1940 1940 display: flex; 1941 1941 align-items: center; ··· 1980 1980 font-size: 0.8rem; 1981 1981 padding: 0.35rem 0.6rem; 1982 1982 background: var(--bg-tertiary); 1983 - border-radius: 5px; 1983 + border-radius: var(--radius-sm); 1984 1984 border: 1px solid var(--border-default); 1985 1985 transition: all 0.15s; 1986 1986 white-space: nowrap; ··· 2001 2001 .playlist-card { 2002 2002 background: var(--bg-tertiary); 2003 2003 border: 1px solid var(--border-subtle); 2004 - border-radius: 8px; 2004 + border-radius: var(--radius-md); 2005 2005 padding: 1rem; 2006 2006 transition: all 0.2s; 2007 2007 display: flex; ··· 2019 2019 .playlist-cover { 2020 2020 width: 100%; 2021 2021 aspect-ratio: 1; 2022 - border-radius: 6px; 2022 + border-radius: var(--radius-base); 2023 2023 object-fit: cover; 2024 2024 } 2025 2025 2026 2026 .playlist-cover-placeholder { 2027 2027 width: 100%; 2028 2028 aspect-ratio: 1; 2029 - border-radius: 6px; 2029 + border-radius: var(--radius-base); 2030 2030 background: linear-gradient(135deg, rgba(var(--accent-rgb, 139, 92, 246), 0.15), rgba(var(--accent-rgb, 139, 92, 246), 0.05)); 2031 2031 display: flex; 2032 2032 align-items: center; ··· 2069 2069 padding: 1rem 1.25rem; 2070 2070 background: var(--bg-tertiary); 2071 2071 border: 1px solid var(--border-subtle); 2072 - border-radius: 8px; 2072 + border-radius: var(--radius-md); 2073 2073 display: flex; 2074 2074 justify-content: space-between; 2075 2075 align-items: center; ··· 2105 2105 background: var(--accent); 2106 2106 color: var(--text-primary); 2107 2107 border: none; 2108 - border-radius: 6px; 2108 + border-radius: var(--radius-base); 2109 2109 font-size: 0.9rem; 2110 2110 font-weight: 600; 2111 2111 cursor: pointer; ··· 2150 2150 background: transparent; 2151 2151 color: var(--error); 2152 2152 border: 1px solid var(--error); 2153 - border-radius: 6px; 2153 + border-radius: var(--radius-base); 2154 2154 font-family: inherit; 2155 2155 font-size: 0.9rem; 2156 2156 font-weight: 600; ··· 2168 2168 padding: 1rem; 2169 2169 background: var(--bg-primary); 2170 2170 border: 1px solid var(--border-default); 2171 - border-radius: 8px; 2171 + border-radius: var(--radius-md); 2172 2172 } 2173 2173 2174 2174 .delete-warning { ··· 2182 2182 margin-bottom: 1rem; 2183 2183 padding: 0.75rem; 2184 2184 background: var(--bg-tertiary); 2185 - border-radius: 6px; 2185 + border-radius: var(--radius-base); 2186 2186 } 2187 2187 2188 2188 .atproto-option { ··· 2219 2219 margin: 0.5rem 0 0; 2220 2220 padding: 0.5rem; 2221 2221 background: color-mix(in srgb, var(--warning) 10%, transparent); 2222 - border-radius: 4px; 2222 + border-radius: var(--radius-sm); 2223 2223 font-size: 0.8rem; 2224 2224 color: var(--warning); 2225 2225 } ··· 2235 2235 padding: 0.6rem 0.75rem; 2236 2236 background: var(--bg-tertiary); 2237 2237 border: 1px solid var(--border-default); 2238 - border-radius: 6px; 2238 + border-radius: var(--radius-base); 2239 2239 color: var(--text-primary); 2240 2240 font-size: 0.9rem; 2241 2241 font-family: inherit; ··· 2257 2257 padding: 0.6rem; 2258 2258 background: transparent; 2259 2259 border: 1px solid var(--border-default); 2260 - border-radius: 6px; 2260 + border-radius: var(--radius-base); 2261 2261 color: var(--text-secondary); 2262 2262 font-family: inherit; 2263 2263 font-size: 0.9rem; ··· 2279 2279 padding: 0.6rem; 2280 2280 background: var(--error); 2281 2281 border: none; 2282 - border-radius: 6px; 2282 + border-radius: var(--radius-base); 2283 2283 color: white; 2284 2284 font-family: inherit; 2285 2285 font-size: 0.9rem;
+4 -4
frontend/src/routes/profile/setup/+page.svelte
··· 222 222 223 223 .error { 224 224 padding: 1rem; 225 - border-radius: 4px; 225 + border-radius: var(--radius-sm); 226 226 margin-bottom: 1.5rem; 227 227 background: color-mix(in srgb, var(--error) 10%, transparent); 228 228 border: 1px solid color-mix(in srgb, var(--error) 30%, transparent); ··· 232 232 form { 233 233 background: var(--bg-tertiary); 234 234 padding: 2rem; 235 - border-radius: 8px; 235 + border-radius: var(--radius-md); 236 236 border: 1px solid var(--border-subtle); 237 237 } 238 238 ··· 259 259 padding: 0.75rem; 260 260 background: var(--bg-primary); 261 261 border: 1px solid var(--border-default); 262 - border-radius: 4px; 262 + border-radius: var(--radius-sm); 263 263 color: var(--text-primary); 264 264 font-size: 1rem; 265 265 font-family: inherit; ··· 297 297 background: var(--accent); 298 298 color: white; 299 299 border: none; 300 - border-radius: 4px; 300 + border-radius: var(--radius-sm); 301 301 font-size: 1rem; 302 302 font-weight: 600; 303 303 cursor: pointer;
+21 -21
frontend/src/routes/settings/+page.svelte
··· 774 774 .token-overlay-content { 775 775 background: var(--bg-secondary); 776 776 border: 1px solid var(--border-default); 777 - border-radius: 16px; 777 + border-radius: var(--radius-xl); 778 778 padding: 2rem; 779 779 max-width: 500px; 780 780 width: 100%; ··· 804 804 gap: 0.5rem; 805 805 background: var(--bg-primary); 806 806 border: 1px solid var(--border-default); 807 - border-radius: 8px; 807 + border-radius: var(--radius-md); 808 808 padding: 1rem; 809 809 margin-bottom: 1rem; 810 810 } ··· 822 822 padding: 0.5rem 1rem; 823 823 background: var(--accent); 824 824 border: none; 825 - border-radius: 6px; 825 + border-radius: var(--radius-base); 826 826 color: var(--text-primary); 827 827 font-family: inherit; 828 828 font-size: 0.85rem; ··· 855 855 padding: 0.75rem 2rem; 856 856 background: var(--bg-tertiary); 857 857 border: 1px solid var(--border-default); 858 - border-radius: 8px; 858 + border-radius: var(--radius-md); 859 859 color: var(--text-secondary); 860 860 font-family: inherit; 861 861 font-size: 0.9rem; ··· 904 904 font-size: 0.85rem; 905 905 padding: 0.4rem 0.75rem; 906 906 background: var(--bg-tertiary); 907 - border-radius: 6px; 907 + border-radius: var(--radius-base); 908 908 border: 1px solid var(--border-default); 909 909 transition: all 0.15s; 910 910 } ··· 930 930 .settings-card { 931 931 background: var(--bg-tertiary); 932 932 border: 1px solid var(--border-subtle); 933 - border-radius: 10px; 933 + border-radius: var(--radius-md); 934 934 padding: 1rem 1.25rem; 935 935 } 936 936 ··· 993 993 padding: 0.6rem 0.75rem; 994 994 background: var(--bg-primary); 995 995 border: 1px solid var(--border-default); 996 - border-radius: 8px; 996 + border-radius: var(--radius-md); 997 997 color: var(--text-secondary); 998 998 cursor: pointer; 999 999 transition: all 0.15s; ··· 1034 1034 width: 40px; 1035 1035 height: 40px; 1036 1036 border: 1px solid var(--border-default); 1037 - border-radius: 8px; 1037 + border-radius: var(--radius-md); 1038 1038 cursor: pointer; 1039 1039 background: transparent; 1040 1040 } ··· 1044 1044 } 1045 1045 1046 1046 .color-input::-webkit-color-swatch { 1047 - border-radius: 4px; 1047 + border-radius: var(--radius-sm); 1048 1048 border: none; 1049 1049 } 1050 1050 ··· 1056 1056 .preset-btn { 1057 1057 width: 32px; 1058 1058 height: 32px; 1059 - border-radius: 6px; 1059 + border-radius: var(--radius-base); 1060 1060 border: 2px solid transparent; 1061 1061 cursor: pointer; 1062 1062 transition: all 0.15s; ··· 1085 1085 padding: 0.5rem 0.75rem; 1086 1086 background: var(--bg-primary); 1087 1087 border: 1px solid var(--border-default); 1088 - border-radius: 6px; 1088 + border-radius: var(--radius-base); 1089 1089 color: var(--text-primary); 1090 1090 font-size: 0.85rem; 1091 1091 font-family: inherit; ··· 1132 1132 width: 48px; 1133 1133 height: 28px; 1134 1134 background: var(--border-default); 1135 - border-radius: 999px; 1135 + border-radius: var(--radius-full); 1136 1136 position: relative; 1137 1137 cursor: pointer; 1138 1138 transition: background 0.2s; ··· 1145 1145 left: 4px; 1146 1146 width: 20px; 1147 1147 height: 20px; 1148 - border-radius: 50%; 1148 + border-radius: var(--radius-full); 1149 1149 background: var(--text-secondary); 1150 1150 transition: transform 0.2s, background 0.2s; 1151 1151 } ··· 1167 1167 padding: 0.75rem; 1168 1168 background: color-mix(in srgb, var(--warning) 10%, transparent); 1169 1169 border: 1px solid color-mix(in srgb, var(--warning) 30%, transparent); 1170 - border-radius: 6px; 1170 + border-radius: var(--radius-base); 1171 1171 margin-top: 0.75rem; 1172 1172 font-size: 0.8rem; 1173 1173 color: var(--warning); ··· 1220 1220 padding: 0.75rem; 1221 1221 background: var(--bg-primary); 1222 1222 border: 1px solid var(--border-default); 1223 - border-radius: 6px; 1223 + border-radius: var(--radius-base); 1224 1224 } 1225 1225 1226 1226 .token-info { ··· 1245 1245 padding: 0.4rem 0.75rem; 1246 1246 background: transparent; 1247 1247 border: 1px solid var(--border-emphasis); 1248 - border-radius: 4px; 1248 + border-radius: var(--radius-sm); 1249 1249 color: var(--text-secondary); 1250 1250 font-family: inherit; 1251 1251 font-size: 0.8rem; ··· 1272 1272 padding: 0.75rem; 1273 1273 background: var(--bg-primary); 1274 1274 border: 1px solid var(--border-default); 1275 - border-radius: 6px; 1275 + border-radius: var(--radius-base); 1276 1276 } 1277 1277 1278 1278 .token-value { ··· 1287 1287 padding: 0.4rem 0.6rem; 1288 1288 background: var(--bg-tertiary); 1289 1289 border: 1px solid var(--border-default); 1290 - border-radius: 4px; 1290 + border-radius: var(--radius-sm); 1291 1291 color: var(--text-secondary); 1292 1292 font-family: inherit; 1293 1293 font-size: 0.8rem; ··· 1320 1320 padding: 0.6rem 0.75rem; 1321 1321 background: var(--bg-primary); 1322 1322 border: 1px solid var(--border-default); 1323 - border-radius: 6px; 1323 + border-radius: var(--radius-base); 1324 1324 color: var(--text-primary); 1325 1325 font-size: 0.9rem; 1326 1326 font-family: inherit; ··· 1343 1343 padding: 0.5rem 0.75rem; 1344 1344 background: var(--bg-primary); 1345 1345 border: 1px solid var(--border-default); 1346 - border-radius: 6px; 1346 + border-radius: var(--radius-base); 1347 1347 color: var(--text-primary); 1348 1348 font-size: 0.85rem; 1349 1349 font-family: inherit; ··· 1359 1359 padding: 0.6rem 1rem; 1360 1360 background: var(--accent); 1361 1361 border: none; 1362 - border-radius: 6px; 1362 + border-radius: var(--radius-base); 1363 1363 color: var(--text-primary); 1364 1364 font-family: inherit; 1365 1365 font-size: 0.9rem;
+1 -1
frontend/src/routes/tag/[name]/+page.svelte
··· 211 211 background: var(--glass-btn-bg, transparent); 212 212 border: 1px solid var(--glass-btn-border, var(--accent)); 213 213 color: var(--accent); 214 - border-radius: 6px; 214 + border-radius: var(--radius-base); 215 215 font-size: 0.9rem; 216 216 font-family: inherit; 217 217 cursor: pointer;
+16 -16
frontend/src/routes/track/[id]/+page.svelte
··· 697 697 width: 100%; 698 698 max-width: 300px; 699 699 aspect-ratio: 1; 700 - border-radius: 8px; 700 + border-radius: var(--radius-md); 701 701 overflow: hidden; 702 702 box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); 703 703 } ··· 878 878 padding: 0.25rem 0.6rem; 879 879 background: color-mix(in srgb, var(--accent) 15%, transparent); 880 880 color: var(--accent-hover); 881 - border-radius: 4px; 881 + border-radius: var(--radius-sm); 882 882 font-size: 0.85rem; 883 883 font-weight: 500; 884 884 text-decoration: none; ··· 914 914 background: var(--accent); 915 915 color: var(--bg-primary); 916 916 border: none; 917 - border-radius: 24px; 917 + border-radius: var(--radius-2xl); 918 918 font-size: 0.95rem; 919 919 font-weight: 600; 920 920 font-family: inherit; ··· 939 939 background: transparent; 940 940 color: var(--text-primary); 941 941 border: 1px solid var(--border-emphasis); 942 - border-radius: 24px; 942 + border-radius: var(--radius-2xl); 943 943 font-size: 0.95rem; 944 944 font-weight: 500; 945 945 font-family: inherit; ··· 1067 1067 padding: 0.6rem 0.8rem; 1068 1068 background: var(--bg-tertiary); 1069 1069 border: 1px solid var(--border-default); 1070 - border-radius: 6px; 1070 + border-radius: var(--radius-base); 1071 1071 color: var(--text-primary); 1072 1072 font-size: 0.9rem; 1073 1073 font-family: inherit; ··· 1087 1087 background: var(--accent); 1088 1088 color: var(--bg-primary); 1089 1089 border: none; 1090 - border-radius: 6px; 1090 + border-radius: var(--radius-base); 1091 1091 font-size: 0.9rem; 1092 1092 font-weight: 600; 1093 1093 font-family: inherit; ··· 1142 1142 1143 1143 .comments-list::-webkit-scrollbar-track { 1144 1144 background: var(--bg-primary); 1145 - border-radius: 4px; 1145 + border-radius: var(--radius-sm); 1146 1146 } 1147 1147 1148 1148 .comments-list::-webkit-scrollbar-thumb { 1149 1149 background: var(--border-default); 1150 - border-radius: 4px; 1150 + border-radius: var(--radius-sm); 1151 1151 } 1152 1152 1153 1153 .comments-list::-webkit-scrollbar-thumb:hover { ··· 1160 1160 gap: 0.6rem; 1161 1161 padding: 0.5rem 0.6rem; 1162 1162 background: var(--bg-tertiary); 1163 - border-radius: 6px; 1163 + border-radius: var(--radius-base); 1164 1164 transition: background 0.15s; 1165 1165 } 1166 1166 ··· 1174 1174 color: var(--accent); 1175 1175 background: color-mix(in srgb, var(--accent) 10%, transparent); 1176 1176 padding: 0.2rem 0.5rem; 1177 - border-radius: 4px; 1177 + border-radius: var(--radius-sm); 1178 1178 white-space: nowrap; 1179 1179 height: fit-content; 1180 1180 border: none; ··· 1214 1214 .comment-avatar { 1215 1215 width: 20px; 1216 1216 height: 20px; 1217 - border-radius: 50%; 1217 + border-radius: var(--radius-full); 1218 1218 object-fit: cover; 1219 1219 } 1220 1220 1221 1221 .comment-avatar-placeholder { 1222 1222 width: 20px; 1223 1223 height: 20px; 1224 - border-radius: 50%; 1224 + border-radius: var(--radius-full); 1225 1225 background: var(--border-default); 1226 1226 } 1227 1227 ··· 1310 1310 padding: 0.5rem; 1311 1311 background: var(--bg-primary); 1312 1312 border: 1px solid var(--border-default); 1313 - border-radius: 4px; 1313 + border-radius: var(--radius-sm); 1314 1314 color: var(--text-primary); 1315 1315 font-size: 0.9rem; 1316 1316 font-family: inherit; ··· 1331 1331 padding: 0.25rem 0.6rem; 1332 1332 font-size: 0.8rem; 1333 1333 font-family: inherit; 1334 - border-radius: 4px; 1334 + border-radius: var(--radius-sm); 1335 1335 cursor: pointer; 1336 1336 transition: all 0.15s; 1337 1337 } ··· 1381 1381 ); 1382 1382 background-size: 200% 100%; 1383 1383 animation: shimmer 1.5s ease-in-out infinite; 1384 - border-radius: 4px; 1384 + border-radius: var(--radius-sm); 1385 1385 } 1386 1386 1387 1387 .comment-timestamp-skeleton { ··· 1393 1393 .comment-avatar-skeleton { 1394 1394 width: 20px; 1395 1395 height: 20px; 1396 - border-radius: 50%; 1396 + border-radius: var(--radius-full); 1397 1397 } 1398 1398 1399 1399 .comment-author-skeleton {
+1 -1
frontend/src/routes/u/[handle]/+error.svelte
··· 121 121 font-size: 1.1rem; 122 122 padding: 0.75rem 1.5rem; 123 123 border: 1px solid var(--accent); 124 - border-radius: 6px; 124 + border-radius: var(--radius-base); 125 125 transition: all 0.2s; 126 126 display: inline-block; 127 127 }
+13 -13
frontend/src/routes/u/[handle]/+page.svelte
··· 613 613 padding: 2rem; 614 614 background: var(--bg-secondary); 615 615 border: 1px solid var(--border-subtle); 616 - border-radius: 8px; 616 + border-radius: var(--radius-md); 617 617 } 618 618 619 619 .artist-details { ··· 651 651 padding: 0 0.75rem; 652 652 background: color-mix(in srgb, var(--accent) 15%, transparent); 653 653 border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent); 654 - border-radius: 4px; 654 + border-radius: var(--radius-sm); 655 655 color: var(--accent); 656 656 font-size: 0.85rem; 657 657 text-decoration: none; ··· 671 671 .artist-avatar { 672 672 width: 120px; 673 673 height: 120px; 674 - border-radius: 50%; 674 + border-radius: var(--radius-full); 675 675 object-fit: cover; 676 676 border: 3px solid var(--border-default); 677 677 } ··· 756 756 padding: 1rem; 757 757 background: var(--bg-secondary); 758 758 border: 1px solid var(--border-subtle); 759 - border-radius: 10px; 759 + border-radius: var(--radius-md); 760 760 color: inherit; 761 761 text-decoration: none; 762 762 transition: transform 0.15s ease, border-color 0.15s ease; ··· 772 772 .album-cover-wrapper { 773 773 width: 72px; 774 774 height: 72px; 775 - border-radius: 6px; 775 + border-radius: var(--radius-base); 776 776 overflow: hidden; 777 777 flex-shrink: 0; 778 778 background: var(--bg-tertiary); ··· 834 834 .stat-card { 835 835 background: var(--bg-secondary); 836 836 border: 1px solid var(--border-subtle); 837 - border-radius: 8px; 837 + border-radius: var(--radius-md); 838 838 padding: 1.5rem; 839 839 transition: border-color 0.2s; 840 840 } ··· 908 908 ); 909 909 background-size: 200% 100%; 910 910 animation: shimmer 1.5s ease-in-out infinite; 911 - border-radius: 4px; 911 + border-radius: var(--radius-sm); 912 912 } 913 913 914 914 /* match .stat-value dimensions: 2.5rem font + 0.5rem margin-bottom */ ··· 960 960 padding: 0.75rem 1.5rem; 961 961 background: var(--bg-secondary); 962 962 border: 1px solid var(--border-subtle); 963 - border-radius: 8px; 963 + border-radius: var(--radius-md); 964 964 color: var(--text-secondary); 965 965 font-family: inherit; 966 966 font-size: 0.95rem; ··· 998 998 padding: 3rem; 999 999 background: var(--bg-secondary); 1000 1000 border: 1px solid var(--border-subtle); 1001 - border-radius: 8px; 1001 + border-radius: var(--radius-md); 1002 1002 } 1003 1003 1004 1004 .empty-message { ··· 1018 1018 font-size: 1rem; 1019 1019 padding: 0.75rem 1.5rem; 1020 1020 border: 1px solid var(--accent); 1021 - border-radius: 6px; 1021 + border-radius: var(--radius-base); 1022 1022 transition: all 0.2s; 1023 1023 display: inline-block; 1024 1024 } ··· 1112 1112 .album-cover-wrapper { 1113 1113 width: 56px; 1114 1114 height: 56px; 1115 - border-radius: 4px; 1115 + border-radius: var(--radius-sm); 1116 1116 } 1117 1117 1118 1118 .album-card-meta h3 { ··· 1148 1148 padding: 1.25rem 1.5rem; 1149 1149 background: var(--bg-secondary); 1150 1150 border: 1px solid var(--border-subtle); 1151 - border-radius: 10px; 1151 + border-radius: var(--radius-md); 1152 1152 color: inherit; 1153 1153 text-decoration: none; 1154 1154 transition: transform 0.15s ease, border-color 0.15s ease; ··· 1162 1162 .collection-icon { 1163 1163 width: 48px; 1164 1164 height: 48px; 1165 - border-radius: 8px; 1165 + border-radius: var(--radius-md); 1166 1166 display: flex; 1167 1167 align-items: center; 1168 1168 justify-content: center;
+10 -10
frontend/src/routes/u/[handle]/album/[slug]/+page.svelte
··· 766 766 .album-art { 767 767 width: 200px; 768 768 height: 200px; 769 - border-radius: 8px; 769 + border-radius: var(--radius-md); 770 770 object-fit: cover; 771 771 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); 772 772 } ··· 774 774 .album-art-placeholder { 775 775 width: 200px; 776 776 height: 200px; 777 - border-radius: 8px; 777 + border-radius: var(--radius-md); 778 778 background: var(--bg-tertiary); 779 779 border: 1px solid var(--border-subtle); 780 780 display: flex; ··· 817 817 height: 32px; 818 818 background: transparent; 819 819 border: 1px solid var(--border-default); 820 - border-radius: 4px; 820 + border-radius: var(--radius-sm); 821 821 color: var(--text-tertiary); 822 822 cursor: pointer; 823 823 transition: all 0.15s; ··· 858 858 position: absolute; 859 859 inset: 0; 860 860 background: rgba(0, 0, 0, 0.6); 861 - border-radius: 8px; 861 + border-radius: var(--radius-md); 862 862 display: flex; 863 863 flex-direction: column; 864 864 align-items: center; ··· 948 948 .play-button, 949 949 .queue-button { 950 950 padding: 0.75rem 1.5rem; 951 - border-radius: 24px; 951 + border-radius: var(--radius-2xl); 952 952 font-weight: 600; 953 953 font-size: 0.95rem; 954 954 font-family: inherit; ··· 1018 1018 display: flex; 1019 1019 align-items: center; 1020 1020 gap: 0.5rem; 1021 - border-radius: 8px; 1021 + border-radius: var(--radius-md); 1022 1022 transition: all 0.2s; 1023 1023 position: relative; 1024 1024 } ··· 1050 1050 color: var(--text-muted); 1051 1051 cursor: grab; 1052 1052 touch-action: none; 1053 - border-radius: 4px; 1053 + border-radius: var(--radius-sm); 1054 1054 transition: all 0.2s; 1055 1055 flex-shrink: 0; 1056 1056 } ··· 1155 1155 justify-content: center; 1156 1156 width: 32px; 1157 1157 height: 32px; 1158 - border-radius: 50%; 1158 + border-radius: var(--radius-full); 1159 1159 background: transparent; 1160 1160 border: none; 1161 1161 color: var(--text-muted); ··· 1188 1188 1189 1189 .modal { 1190 1190 background: var(--bg-secondary); 1191 - border-radius: 12px; 1191 + border-radius: var(--radius-lg); 1192 1192 padding: 1.5rem; 1193 1193 max-width: 400px; 1194 1194 width: calc(100% - 2rem); ··· 1226 1226 .cancel-btn, 1227 1227 .confirm-btn { 1228 1228 padding: 0.625rem 1.25rem; 1229 - border-radius: 8px; 1229 + border-radius: var(--radius-md); 1230 1230 font-weight: 500; 1231 1231 font-size: 0.9rem; 1232 1232 font-family: inherit;
+6 -6
frontend/src/routes/upload/+page.svelte
··· 423 423 form { 424 424 background: var(--bg-tertiary); 425 425 padding: 2rem; 426 - border-radius: 8px; 426 + border-radius: var(--radius-md); 427 427 border: 1px solid var(--border-subtle); 428 428 } 429 429 ··· 443 443 padding: 0.75rem; 444 444 background: var(--bg-primary); 445 445 border: 1px solid var(--border-default); 446 - border-radius: 4px; 446 + border-radius: var(--radius-sm); 447 447 color: var(--text-primary); 448 448 font-size: 1rem; 449 449 font-family: inherit; ··· 460 460 padding: 0.75rem; 461 461 background: var(--bg-primary); 462 462 border: 1px solid var(--border-default); 463 - border-radius: 4px; 463 + border-radius: var(--radius-sm); 464 464 color: var(--text-primary); 465 465 font-size: 0.9rem; 466 466 font-family: inherit; ··· 485 485 background: var(--accent); 486 486 color: var(--text-primary); 487 487 border: none; 488 - border-radius: 4px; 488 + border-radius: var(--radius-sm); 489 489 font-size: 1rem; 490 490 font-weight: 600; 491 491 font-family: inherit; ··· 520 520 .attestation { 521 521 background: var(--bg-primary); 522 522 padding: 1rem; 523 - border-radius: 4px; 523 + border-radius: var(--radius-sm); 524 524 border: 1px solid var(--border-default); 525 525 } 526 526 ··· 567 567 .supporter-gating { 568 568 background: color-mix(in srgb, var(--accent) 8%, var(--bg-primary)); 569 569 padding: 1rem; 570 - border-radius: 4px; 570 + border-radius: var(--radius-sm); 571 571 border: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border-default)); 572 572 } 573 573