feat: add upload button to desktop header nav (#599)

- adds upload link between library and @handle in desktop nav
- styled with accent border/color as primary CTA
- hover fills with accent background
- hidden when already on /upload page

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

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

authored by zzstoatzz.io Claude Opus 4.5 and committed by GitHub b50e2b61 59d7cd26

Changed files
+20
frontend
src
lib
components
+20
frontend/src/lib/components/Header.svelte
··· 132 132 <span>library</span> 133 133 </a> 134 134 {/if} 135 + {#if $page.url.pathname !== '/upload'} 136 + <a href="/upload" class="nav-link upload-link" title="upload a track"> 137 + <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 138 + <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path> 139 + <polyline points="17 8 12 3 7 8"></polyline> 140 + <line x1="12" y1="3" x2="12" y2="15"></line> 141 + </svg> 142 + <span>upload</span> 143 + </a> 144 + {/if} 135 145 {#if $page.url.pathname !== '/portal'} 136 146 <a href="/portal" class="user-handle" title="go to portal">@{user?.handle}</a> 137 147 {/if} ··· 358 368 color: var(--accent); 359 369 background: var(--bg-tertiary); 360 370 border-color: var(--border-default); 371 + } 372 + 373 + .nav-link.upload-link { 374 + border-color: var(--accent); 375 + color: var(--accent); 376 + } 377 + 378 + .nav-link.upload-link:hover { 379 + background: var(--accent); 380 + color: var(--bg-primary); 361 381 } 362 382 363 383 .nav-link svg {