/* SoundQuest v2 — Core Styles */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
  --c1: #FF6B6B; --c2: #FFCE54; --c3: #4ECDC4; --c4: #6C63FF; --c5: #FF8E53;
  --bg: #0d0d14; --bg2: #15151f; --bg3: #1c1c2a;
  --text: #f0f0ff; --text2: #9090b0; --border: rgba(255,255,255,0.08);
  --radius: 16px; --sidebar-w: 220px; --mobile-topbar-h: 68px; --mobile-tabbar-h: 74px;
  --font: 'DM Sans', sans-serif; --font-display: 'Righteous', sans-serif;
  --radius-card: 12px; --radius-control: 8px;
}
body { font-family: var(--font); background: var(--bg); color: var(--text); min-height: 100vh; overflow-x: hidden; }
a { color: inherit; text-decoration: none; }
.mobile-topbar,.mobile-tabbar { display:none; }

/* Login page */
.bg-blobs { position: fixed; inset: 0; pointer-events: none; z-index: 0; overflow: hidden; }
.blob { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.18; animation: blobFloat 8s ease-in-out infinite; }
.blob-1 { width:400px;height:400px;background:#FF6B6B;top:-100px;left:-100px; }
.blob-2 { width:500px;height:500px;background:#6C63FF;bottom:-150px;right:-100px;animation-delay:2s; }
.blob-3 { width:300px;height:300px;background:#4ECDC4;top:40%;left:40%;animation-delay:4s; }
.blob-4 { width:250px;height:250px;background:#FFCE54;bottom:20%;left:10%;animation-delay:1s; }
@keyframes blobFloat { 0%,100%{transform:translate(0,0) scale(1)} 50%{transform:translate(20px,-20px) scale(1.05)} }
.login-page { display:flex;align-items:center;justify-content:center;min-height:100vh; }
.login-container { position:relative;z-index:1;width:100%;max-width:440px;padding:24px; }
.login-card { background:rgba(21,21,31,0.85);backdrop-filter:blur(20px);border:1px solid var(--border);border-radius:24px;padding:48px 40px;text-align:center; }
.logo-mark { margin-bottom:20px;display:flex;justify-content:center; }
.app-title { font-family:var(--font-display);font-size:42px;background:linear-gradient(135deg,#FF6B6B,#C850C0,#4158D0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin-bottom:12px; }
.app-tagline { color:var(--text2);font-size:16px;line-height:1.6;margin-bottom:28px; }
.feature-pills { display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:32px; }
.pill { padding:6px 14px;border-radius:20px;font-size:13px;font-weight:500; }
.pill-orange { background:rgba(255,107,107,0.15);color:var(--c1);border:1px solid rgba(255,107,107,0.3); }
.pill-purple { background:rgba(108,99,255,0.15);color:var(--c4);border:1px solid rgba(108,99,255,0.3); }
.pill-blue { background:rgba(78,205,196,0.15);color:var(--c3);border:1px solid rgba(78,205,196,0.3); }
.pill-green { background:rgba(168,224,99,0.15);color:#a8e063;border:1px solid rgba(168,224,99,0.3); }
.config-box { margin-bottom:16px;text-align:left; }
.config-label { display:block;font-size:13px;font-weight:500;color:var(--text2);margin-bottom:8px; }
.config-input { width:100%;padding:12px 16px;background:var(--bg3);border:1px solid var(--border);border-radius:12px;color:var(--text);font-family:var(--font);font-size:14px;outline:none;transition:border-color 0.2s; }
.config-input:focus { border-color:var(--c4); }
.config-hint { font-size:12px;color:var(--text2);margin-top:8px;line-height:1.5; }
.config-hint a { color:var(--c3); }
.config-hint code { font-size:11px;background:var(--bg);padding:2px 6px;border-radius:4px;word-break:break-all; }
.login-btn { width:100%;padding:16px;border:none;border-radius:14px;background:linear-gradient(135deg,#1DB954,#1ed760);color:#000;font-family:var(--font);font-size:16px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:10px;transition:opacity 0.2s,transform 0.2s; }
.login-btn:hover { opacity:0.9;transform:translateY(-1px); }
.error-msg { margin-top:16px;padding:12px;background:rgba(255,107,107,0.1);border:1px solid rgba(255,107,107,0.3);border-radius:10px;color:var(--c1);font-size:13px; }
.loading-spinner { width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--c4);border-radius:50%;animation:spin 0.8s linear infinite;margin:20px auto; }
@keyframes spin { to{transform:rotate(360deg)} }

/* App layout */
.app-page { display:flex;min-height:100vh;max-width:100vw;overflow-x:hidden; }
.sidebar { width:var(--sidebar-w);min-height:100vh;position:fixed;left:0;top:0;background:rgba(13,13,20,0.97);backdrop-filter:blur(20px);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:24px 16px;z-index:100; }
.nav-logo { display:flex;align-items:center;gap:10px;padding:0 8px 24px;border-bottom:1px solid var(--border);margin-bottom:24px; }
.sq-logo-mark { width:32px;height:32px;flex-shrink:0; }
.nav-brand { font-family:var(--font-display);font-size:18px;background:linear-gradient(135deg,#FF6B6B,#C850C0);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text; }
.nav-links { display:flex;flex-direction:column;gap:4px;flex:1; }
.nav-link { display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius-control);color:var(--text2);font-size:14px;font-weight:500;transition:all 0.2s; }
.nav-link:hover { background:var(--bg3);color:var(--text); }
.nav-link.active { background:linear-gradient(135deg,rgba(255,107,107,0.15),rgba(108,99,255,0.15));color:var(--text);border:1px solid rgba(255,255,255,0.06); }
.nav-icon { width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;color:currentColor;flex-shrink:0; }
.nav-icon svg,.mobile-tab-icon svg { width:18px;height:18px;display:block;stroke:currentColor; }
.sq-svg-icon{width:1em;height:1em;display:inline-block;vertical-align:-0.14em;filter:drop-shadow(0 0 8px color-mix(in srgb,currentColor 28%,transparent))}
.badge-big-emoji .sq-svg-icon{width:46px;height:46px}
.badge-emoji .sq-svg-icon,.challenge-emoji .sq-svg-icon,.tier-node-emoji .sq-svg-icon{width:24px;height:24px}
.genre-chip .sq-svg-icon{width:14px;height:14px;margin-right:4px;vertical-align:-0.2em}
.track-img .sq-svg-icon,.artist-avatar .sq-svg-icon{width:18px;height:18px}
.stamp-emoji .sq-svg-icon{width:30px;height:30px}
.mp-emoji .sq-svg-icon{width:58px;height:58px}
.exp-icon .sq-svg-icon{width:24px;height:24px}
.nav-profile { display:flex;align-items:center;gap:10px;padding:16px 8px 0;border-top:1px solid var(--border);margin-top:auto; }
.nav-avatar { width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,#FF6B6B,#C850C0);display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px;flex-shrink:0; }
.nav-user-info { flex:1;min-width:0; }
.nav-username { display:block;font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.nav-level { display:block;font-size:11px;color:var(--text2); }
.logout-btn { background:none;border:none;color:var(--text2);cursor:pointer;font-size:16px;padding:4px;border-radius:6px;transition:color 0.2s; }
.logout-btn:hover { color:var(--c1); }
.app-main {
  margin-left:var(--sidebar-w);
  width:calc(100vw - var(--sidebar-w));
  max-width:calc(100vw - var(--sidebar-w));
  flex:0 0 calc(100vw - var(--sidebar-w));
  padding:32px;
  position:relative;
  z-index:1;
  overflow-x:hidden;
}
.page-header { display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:32px;gap:16px;flex-wrap:wrap; }
.page-title { font-family:var(--font-display);font-size:32px;line-height:1.2; }
.page-subtitle { color:var(--text2);font-size:15px;margin-top:4px; }

/* Cards */
.card { background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-card);padding:22px;min-width:0;max-width:100%;overflow:hidden; }
.card-wide { grid-column:span 2; }
.card-label { font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--text2);margin-bottom:16px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px; }
.card-link { font-size:12px;color:var(--c4);text-transform:none;letter-spacing:0; }

/* Dashboard grid */
.dashboard-grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:start;width:100%;max-width:100%; }
.dashboard-grid > * { min-width:0; }
.score-number { font-family:var(--font-display);font-size:52px;line-height:1; }
.score-level { font-size:14px;font-weight:500; }
.score-bar-wrap { height:6px;background:var(--bg3);border-radius:3px;margin-bottom:10px;overflow:hidden; }
.score-bar { height:100%;background:linear-gradient(90deg,#FF6B6B,#C850C0,#4158D0);border-radius:3px;transition:width 1s ease; }
.score-display { display:flex;align-items:baseline;gap:12px;margin-bottom:12px; }
.streak-display { display:flex;align-items:baseline;gap:8px;margin-bottom:8px; }
.streak-number { font-family:var(--font-display);font-size:48px;line-height:1;color:var(--c2); }
.streak-unit { font-size:16px;color:var(--text2); }
.challenge-display { display:flex;gap:16px;align-items:flex-start; }
.challenge-emoji { font-size:36px;flex-shrink:0; }
.challenge-title { font-size:16px;font-weight:600;margin-bottom:6px; }
.challenge-desc { font-size:13px;color:var(--text2);line-height:1.5; }

/* Track/artist rows */
.artists-list,.tracks-list { display:flex;flex-direction:column;gap:8px; }
.artist-row,.track-row { display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--border);width:100%;min-width:0;max-width:100%; }
.artist-row:last-child,.track-row:last-child { border-bottom:none; }
.rank { font-size:12px;color:var(--text2);width:20px;text-align:center;flex-shrink:0;font-weight:600; }
.artist-img,.track-img { width:40px;height:40px;border-radius:8px;background:var(--bg3);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;background-size:cover;background-position:center; }
.artist-info,.track-info { flex:1;min-width:0; }
.artist-name,.track-name { font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.artist-genres,.track-artist { font-size:12px;color:var(--text2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.track-duration { font-size:12px;color:var(--text2);flex-shrink:0; }
.pop-bar { height:4px;background:linear-gradient(90deg,#4ECDC4,#6C63FF);border-radius:2px; }
.artist-pop { width:60px;height:4px;background:var(--bg3);border-radius:2px;overflow:hidden;flex-shrink:0; }

/* Time tabs */
.time-tabs { display:flex;gap:4px; }
.time-tab { padding:4px 10px;border-radius:var(--radius-control);border:none;background:var(--bg3);color:var(--text2);font-size:12px;font-family:var(--font);cursor:pointer;transition:all 0.2s; }
.time-tab.active { background:var(--c4);color:white; }

/* Now playing */
.now-playing-bar { display:flex;align-items:center;gap:10px;padding:10px 16px;background:rgba(29,185,84,0.1);border:1px solid rgba(29,185,84,0.25);border-radius:100px;font-size:13px;color:#1ed760;white-space:nowrap; }
.now-playing-dot { width:8px;height:8px;border-radius:50%;background:#1ed760;animation:pulse 1.5s ease-in-out infinite;flex-shrink:0; }
@keyframes pulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.5;transform:scale(0.8)} }

/* Badges */
.badges-full-grid { display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px; }
.badge-card { background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-card);padding:22px;text-align:center;transition:all 0.2s; }
.badge-card.badge-earned { border-color:rgba(255,200,84,0.3);background:rgba(255,200,84,0.05); }
.badge-card.badge-earned:hover { transform:translateY(-3px); }
.badge-card.badge-locked { opacity:0.4; }
.badge-big-emoji { font-size:40px;margin-bottom:12px; }
.badge-card-name { font-size:14px;font-weight:600;margin-bottom:6px; }
.badge-card-desc { font-size:12px;color:var(--text2);line-height:1.5;margin-bottom:10px; }
.badge-earned-tag { font-size:11px;color:#FFCE54;font-weight:600; }
.badges-snap { display:flex;flex-direction:column;gap:10px; }
.badge-chip { display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:12px;background:var(--bg3);border:1px solid var(--border);width:100%;min-width:0;max-width:100%; }
.badge-chip.earned { border-color:rgba(255,200,84,0.3);background:rgba(255,200,84,0.06); }
.badge-emoji { font-size:20px; }
.badge-name { font-size:13px;font-weight:500; }

/* Genre chips */
.genre-chip { padding:6px 14px;border-radius:20px;font-size:12px;font-weight:500;border:1px solid var(--border);color:var(--text2);max-width:100%; }
.genre-chip.explored { font-weight:600; }
.genre-chip.unexplored { opacity:0.4; }

/* Stats */
.stats-grid { display:grid;grid-template-columns:1fr 1fr;gap:20px; }
.stat-hero-row { display:flex;gap:0; }
.stat-hero-item { flex:1;text-align:center;padding:8px;border-right:1px solid var(--border); }
.stat-hero-item:last-child { border-right:none; }
.stat-big { font-family:var(--font-display);font-size:40px;color:var(--c4);margin-bottom:4px; }
.genre-stat-row { display:flex;align-items:center;gap:10px;margin-bottom:10px; }
.genre-stat-name { font-size:13px;font-weight:500;width:140px;flex-shrink:0; }
.genre-stat-bar-wrap { flex:1;height:8px;background:var(--bg3);border-radius:4px;overflow:hidden; }
.genre-stat-bar { height:100%;border-radius:4px;transition:width 1s ease; }
.genre-stat-count { font-size:12px;color:var(--text2);width:24px;text-align:right;flex-shrink:0; }
.pop-chart { display:flex;align-items:flex-end;gap:4px;height:80px;margin-bottom:4px; }
.pop-bar-col { flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px; }
.pop-bar-fill { width:100%;border-radius:3px 3px 0 0;transition:height 1s ease;min-height:2px; }
.pop-bar-label { font-size:10px;color:var(--text2); }
.pop-labels { display:flex;justify-content:space-between;font-size:11px;color:var(--text2);margin-top:4px; }

/* Loading */
.loading-dots { display:flex;gap:6px;align-items:center;padding:20px 0; }
.loading-dots span { width:8px;height:8px;border-radius:50%;background:var(--c4);animation:dotBounce 1.2s ease-in-out infinite; }
.loading-dots span:nth-child(2){animation-delay:0.2s;background:var(--c1)}
.loading-dots span:nth-child(3){animation-delay:0.4s;background:var(--c3)}
@keyframes dotBounce { 0%,80%,100%{transform:scale(0.6);opacity:0.4} 40%{transform:scale(1);opacity:1} }
.empty-state { color:var(--text2);font-size:14px;padding:16px 0; }

/* Toast */
.toast { position:fixed;bottom:90px;right:32px;padding:14px 20px;background:var(--bg2);border:1px solid rgba(108,99,255,0.4);border-radius:12px;font-size:14px;font-weight:500;z-index:1000;opacity:0;transform:translateY(10px);transition:all 0.3s; }
.toast.toast-show { opacity:1;transform:translateY(0); }

/* Tier filter */
.tier-btn { padding:6px 12px;border-radius:var(--radius-control);border:1px solid rgba(255,255,255,0.1);background:none;color:#9090b0;font-size:12px;font-family:inherit;cursor:pointer;transition:all 0.2s; }
.tier-btn.active { background:rgba(108,99,255,0.2);color:#8080f0;border-color:rgba(108,99,255,0.4); }

@media (max-width:900px) {
  .sidebar { width:64px; }
  .nav-brand,.nav-text,.nav-user-info { display:none; }
  .nav-logo { justify-content:center;padding:0 0 16px; }
  .nav-link { justify-content:center;padding:12px; }
  .app-main {
    margin-left:64px;
    width:calc(100vw - 64px);
    max-width:calc(100vw - 64px);
    flex:0 0 calc(100vw - 64px);
    padding:20px;
  }
  .dashboard-grid { grid-template-columns:1fr; }
  .card-wide { grid-column:span 1; }
  .stats-grid { grid-template-columns:1fr; }
}

@media (max-width:767px) {
  .app-page { display:block; }
  .sidebar { display:none; }
  .mobile-topbar {
    position:fixed;top:0;left:0;right:0;height:var(--mobile-topbar-h);
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:12px 16px calc(10px + env(safe-area-inset-top, 0px));
    background:rgba(13,13,20,0.96);backdrop-filter:blur(18px);border-bottom:1px solid var(--border);z-index:220;
  }
  .mobile-brand { display:inline-flex;align-items:center;gap:10px;min-width:0; }
  .mobile-brand-mark { width:28px;height:28px;flex-shrink:0; }
  .mobile-brand-text { font-family:var(--font-display);font-size:19px;line-height:1; }
  .mobile-topbar-meta { display:flex;align-items:center;gap:12px;min-width:0; }
  .mobile-page-label {
    font-size:11px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px;
  }
  .mobile-topbar-actions { display:flex;align-items:center;gap:8px; }
  .mobile-avatar {
    width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
    background:linear-gradient(135deg,#FF6B6B,#C850C0);color:#fff;font-size:12px;font-weight:700;background-size:cover;background-position:center;
  }
  .mobile-logout-btn {
    width:30px;height:30px;padding:0;display:inline-flex;align-items:center;justify-content:center;
    background:rgba(255,255,255,0.05);border:1px solid var(--border);border-radius:999px;
  }
  .mobile-tabbar {
    position:fixed;left:0;right:0;bottom:0;display:flex;gap:4px;overflow-x:auto;
    padding:8px 10px calc(8px + env(safe-area-inset-bottom, 0px));
    background:rgba(13,13,20,0.97);backdrop-filter:blur(20px);border-top:1px solid var(--border);z-index:220;scrollbar-width:none;
  }
  .mobile-tabbar::-webkit-scrollbar { display:none; }
  .mobile-tab-link {
    min-width:68px;padding:8px 10px;border-radius:10px;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    color:var(--text2);font-size:10px;font-weight:600;flex-shrink:0;
  }
  .mobile-tab-link.active { background:linear-gradient(135deg,rgba(255,107,107,0.16),rgba(108,99,255,0.18));color:var(--text);border:1px solid rgba(255,255,255,0.06); }
  .mobile-tab-icon { width:18px;height:18px;line-height:1;display:inline-flex;align-items:center;justify-content:center; }
  .mobile-tab-label { line-height:1;white-space:nowrap; }
  .app-main {
    margin-left:0;
    width:100%;
    max-width:100%;
    flex:1 1 auto;
    padding:calc(var(--mobile-topbar-h) + 16px) 16px calc(var(--mobile-tabbar-h) + 18px);
  }
  .page-header { margin-bottom:20px;align-items:flex-start; }
  .page-title { font-size:28px; }
  .page-subtitle { font-size:14px; }
  .card { padding:16px; }
  .badges-full-grid,.passport-grid { grid-template-columns:1fr; }
}
