/* =====================================================================
   NAVA · Immersive Player-First — total redesign (staging)
   Framework-free. Responsive: desktop · laptop · tablet · car · mobile.
   ===================================================================== */

:root{
  --bg:#07060f; --bg2:#0c0a18;
  --violet:#8b5cf6; --cyan:#22d3ee; --magenta:#d946ef;
  --grad:linear-gradient(135deg,#8b5cf6 0%,#22d3ee 100%);
  --glass:rgba(255,255,255,.05); --glass2:rgba(255,255,255,.08);
  --line:rgba(255,255,255,.10); --line2:rgba(255,255,255,.16);
  --txt:#f4f2ff; --txt2:#b9b4cf; --muted:#7b7595;
  --glow-v:rgba(139,92,246,.45); --glow-c:rgba(34,211,238,.40);
  --r:18px; --r-sm:12px; --r-lg:26px;
  /* ambient colors (overwritten from artwork) */
  --c1:#6d28d9; --c2:#0e7490;
  --topbar-h:64px; --dock-h:0px;
  font-synthesis:none;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html,body{height:100%}
/* themed scrollbars — replace the browser default to match the Midnight-Glass look */
*{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.2) transparent}
::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);border:3px solid transparent;border-radius:10px;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:rgba(139,92,246,.6);background-clip:padding-box}
::-webkit-scrollbar-thumb:active{background:rgba(34,211,238,.65);background-clip:padding-box}
::-webkit-scrollbar-corner{background:transparent}
/* image holders get a gradient base so loading/missing art looks intentional */
.rimg,.mini-art,.art,.rail-card img,.detail-head img,.card .thumb{
  background:linear-gradient(135deg,#241f47,#16324a)}
body{
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  color:var(--txt); background:var(--bg); overflow:hidden;
  -webkit-font-smoothing:antialiased; line-height:1.5;
}
button{font-family:inherit;color:inherit;cursor:pointer;border:none;background:none}
img{display:block;max-width:100%}
input{font-family:inherit}
h1,h2,h3,.brand-name,.now-title{font-family:'Sora',sans-serif}

/* ── Ambient backdrop ─────────────────────────────────────────────── */
.ambient{
  position:fixed;inset:-20% ;z-index:0;pointer-events:none;
  background:
    radial-gradient(60% 60% at 18% 12%, var(--c1), transparent 60%),
    radial-gradient(60% 70% at 88% 18%, var(--c2), transparent 60%),
    radial-gradient(80% 80% at 50% 120%, #5b21b6, transparent 60%),
    linear-gradient(180deg,#0b0a16,#060410);
  filter:saturate(135%) blur(20px);
  transition:background 1.2s ease;
  opacity:.85;
}
.grain{position:fixed;inset:0;z-index:1;pointer-events:none;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");}

/* ── App grid ─────────────────────────────────────────────────────── */
.app{position:relative;z-index:2;height:100%;display:grid;
  grid-template-rows:var(--topbar-h) 1fr;
  /* keep content out of the notch / home-indicator on iOS (env() is 0 on Android/desktop) */
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);}

/* ── Top bar ──────────────────────────────────────────────────────── */
.topbar{display:flex;align-items:center;gap:18px;padding:0 22px;
  background:rgba(10,8,20,.5);backdrop-filter:blur(22px) saturate(150%);
  -webkit-backdrop-filter:blur(22px) saturate(150%);
  border-bottom:1px solid var(--line);}
.brand{display:flex;align-items:center;gap:10px}
.brand-mark{width:34px;height:34px;border-radius:11px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.4)}
.brand-mark img{width:100%;height:100%;object-fit:cover;display:block}
.brand-name{font-weight:800;letter-spacing:3px;font-size:18px;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.top-nav{display:flex;gap:6px;margin-left:8px}
.top-link{display:flex;align-items:center;gap:8px;padding:9px 16px;border-radius:12px;color:var(--txt2);
  font-weight:600;font-size:14px;transition:.2s}
.top-link i{font-size:14px}
.top-link:hover{background:var(--glass2);color:var(--txt)}
.top-link.active{color:#fff;background:linear-gradient(90deg,rgba(139,92,246,.30),rgba(34,211,238,.12));
  box-shadow:inset 0 0 0 1px var(--line2)}
.top-actions{margin-left:auto;display:flex;gap:10px;align-items:center}
.ghost-btn{display:flex;align-items:center;gap:8px;padding:9px 14px;border-radius:12px;
  background:var(--glass);border:1px solid var(--line);color:var(--txt2);font-weight:600;font-size:13px;transition:.2s}
.ghost-btn:hover{background:var(--glass2);color:var(--txt);border-color:var(--line2)}
.drive-toggle.active{background:var(--grad);color:#0a0a14;border-color:transparent;box-shadow:0 0 20px var(--glow-c)}
.offline-pill{display:none;align-items:center;gap:7px;padding:7px 13px;border-radius:11px;background:rgba(251,113,133,.14);border:1px solid rgba(251,113,133,.4);color:#fb7185;font-size:12px;font-weight:700;white-space:nowrap}
body.offline .offline-pill{display:inline-flex}
/* storage readout on Downloaded page */
.storage-bar{margin:0 0 16px}
.sb-top{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:12px;color:var(--txt2);margin-bottom:7px;flex-wrap:wrap}
.sb-top b{color:var(--txt)}.sb-top i{margin-right:6px;color:var(--cyan)}.sb-dev{color:var(--muted)}
.sb-track{height:7px;border-radius:5px;background:rgba(255,255,255,.1);overflow:hidden}
.sb-fill{height:100%;border-radius:5px;background:var(--grad);box-shadow:0 0 12px var(--glow-v)}
.sb-fill.warn{background:linear-gradient(90deg,#f59e0b,#ef4444);box-shadow:0 0 12px rgba(239,68,68,.5)}
.sb-warn{display:flex;align-items:center;gap:7px;color:#fbbf24;font-size:11.5px;margin-top:8px}
.gate-list{list-style:none;margin:2px 0 18px;padding:0;display:flex;flex-direction:column;gap:10px}
.gate-list li{display:flex;align-items:center;gap:11px;font-size:14px;color:var(--txt2)}
.gate-list li.ok{color:var(--txt)} .gate-list li.ok i{color:#34d399} .gate-list li.todo i{color:var(--muted)}

/* ── Stage + hero ─────────────────────────────────────────────────── */
.stage{position:relative;overflow:hidden;display:flex;justify-content:center;align-items:stretch;padding:clamp(14px,2.4vw,34px)}
.hero{width:100%;max-width:1180px;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:clamp(14px,2vw,24px);min-height:0}
.hero-empty{margin:auto;display:grid;place-items:center;gap:14px;text-align:center;color:var(--txt2);padding:40px}
.hero-empty-art{width:120px;height:120px;border-radius:50%;display:grid;place-items:center;font-size:46px;
  background:var(--glass);border:1px solid var(--line);color:var(--violet);animation:spin 8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.inline-link,.text-btn{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;font-weight:700}

.hero-now{display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(20px,3.5vw,52px);align-items:center;min-width:0;width:100%;flex:0 0 auto}

/* artwork */
.art-wrap{position:relative;aspect-ratio:1;width:min(42vh,40vw,440px);justify-self:center;flex:0 0 auto}
.art{width:100%;height:100%;object-fit:cover;border-radius:var(--r-lg);
  box-shadow:0 30px 80px rgba(0,0,0,.6);position:relative;z-index:2;background:var(--glass)}
.art-glow{position:absolute;inset:-8% ;border-radius:50%;z-index:1;filter:blur(46px);opacity:.85;
  background:radial-gradient(circle,var(--c1),var(--c2) 60%,transparent 72%);animation:pulse 6s ease-in-out infinite}
@keyframes pulse{0%,100%{transform:scale(1);opacity:.7}50%{transform:scale(1.06);opacity:.95}}
.art-fav{position:absolute;right:14px;bottom:14px;z-index:3;width:48px;height:48px;border-radius:50%;
  display:grid;place-items:center;font-size:18px;background:rgba(8,6,16,.55);backdrop-filter:blur(10px);
  border:1px solid var(--line2);color:#fff;transition:.2s}
.art-fav:hover{transform:scale(1.08);box-shadow:0 0 24px var(--glow-v)}
.art-fav.on{background:var(--grad);color:#0a0a14}

/* now meta */
.now-meta{min-width:0}
.now-kicker{letter-spacing:3px;font-size:12px;font-weight:700;color:var(--cyan);margin-bottom:10px}
.now-title{font-size:clamp(28px,4.4vw,52px);font-weight:800;line-height:1.16;letter-spacing:-.5px;padding-bottom:2px;
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.now-artist{font-size:clamp(15px,1.8vw,20px);color:var(--txt2);font-weight:600;margin-top:8px;text-align:left}
.now-artist:hover{color:var(--cyan)}

/* scrubber */
.scrubber{display:flex;align-items:center;gap:12px;margin:clamp(20px,3vw,34px) 0 18px}
.scrubber .t{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:38px}
.scrubber .t.dur{text-align:right}
.track{position:relative;flex:1;height:8px;border-radius:6px;background:rgba(255,255,255,.10);cursor:pointer}
.buffered{position:absolute;left:0;top:0;height:100%;border-radius:6px;background:rgba(255,255,255,.12);width:0}
.fill{position:absolute;left:0;top:0;height:100%;border-radius:6px;background:var(--grad);width:0;box-shadow:0 0 14px var(--glow-v)}
.fill .knob{position:absolute;right:-7px;top:50%;transform:translateY(-50%);width:14px;height:14px;border-radius:50%;
  background:#fff;box-shadow:0 0 12px var(--glow-c);opacity:0;transition:opacity .2s}
.track:hover .knob{opacity:1}

/* transport */
.transport{display:flex;align-items:center;gap:clamp(10px,2vw,22px)}
.t-btn{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-size:19px;color:var(--txt2);transition:.18s}
.t-btn:hover{color:#fff;background:var(--glass2);transform:scale(1.06)}
.t-btn.active{color:var(--cyan)}
.t-btn.play{width:74px;height:74px;font-size:26px;background:var(--grad);color:#0a0a14;
  box-shadow:0 0 34px var(--glow-v),0 10px 26px rgba(0,0,0,.4)}
.t-btn.play:hover{transform:scale(1.05);box-shadow:0 0 46px var(--glow-c)}
.t-btn.sm{width:42px;height:42px;font-size:15px}

/* sub controls */
.sub-controls{display:flex;align-items:center;gap:18px;margin-top:clamp(18px,3vw,30px);flex-wrap:wrap}
.volume{display:flex;align-items:center;gap:8px;min-width:150px}
.volume input[type=range]{flex:1;accent-color:var(--cyan);height:4px}
.quality{display:flex;gap:6px;background:var(--glass);padding:4px;border-radius:12px;border:1px solid var(--line)}
.chip{padding:7px 12px;border-radius:9px;font-size:12px;font-weight:600;color:var(--txt2);transition:.2s}
.chip:hover{color:var(--txt)}
.chip.active{background:var(--grad);color:#0a0a14}

/* up next rail */
/* Up Next — horizontal "filmstrip": numbered covers, next-track highlighted, faded edges,
   hidden scrollbar, snap-scroll. Fixed (compact) height so the whole player fits one screen. */
.upnext-rail{flex:0 0 auto;min-width:0;margin-top:2px}
.rail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-weight:700;color:var(--txt2);font-size:13px;letter-spacing:.4px}
.rail-head .text-btn{font-size:12px}
.rail-items{display:flex;gap:14px;overflow-x:auto;overflow-y:hidden;padding:6px 2px 8px 8px;scroll-padding-left:8px;scroll-snap-type:x proximity;scrollbar-width:none;
  -webkit-mask-image:linear-gradient(90deg,#000 0,#000 calc(100% - 52px),transparent 100%);
          mask-image:linear-gradient(90deg,#000 0,#000 calc(100% - 52px),transparent 100%)}
.rail-items::-webkit-scrollbar{display:none}
.rail-card{flex:0 0 auto;width:clamp(76px,11.5vh,108px);cursor:pointer;scroll-snap-align:start}
.rail-card .rc-img{position:relative;width:100%;aspect-ratio:1;border-radius:14px;overflow:hidden;
  border:1px solid var(--line2);box-shadow:0 8px 20px rgba(0,0,0,.42);transition:transform .25s cubic-bezier(.2,.7,.2,1),box-shadow .25s,border-color .25s}
.rail-card .rc-img img{width:100%;height:100%;object-fit:cover}
.rail-card .rc-num{position:absolute;top:6px;left:6px;min-width:20px;height:20px;padding:0 5px;border-radius:7px;display:grid;place-items:center;
  font-size:11px;font-weight:800;color:#fff;background:rgba(8,6,16,.55);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--line2)}
.rail-card:hover .rc-img{transform:translateY(-5px);box-shadow:0 16px 32px rgba(0,0,0,.5),0 0 26px var(--glow-v);border-color:rgba(167,139,250,.6)}
.rail-card:first-child .rc-img{box-shadow:0 0 0 2px var(--cyan),0 0 22px var(--glow-c),0 8px 20px rgba(0,0,0,.42)}
.rail-card:first-child .rc-num{background:var(--grad);color:#06040d;border-color:transparent}
.rail-card .rt{font-size:12px;font-weight:600;margin-top:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rail-card .ra{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ── Browse drawer ────────────────────────────────────────────────── */
.scrim{position:fixed;top:calc(var(--topbar-h) + env(safe-area-inset-top));left:0;right:0;bottom:0;z-index:36;display:none;background:rgba(5,4,12,.32);opacity:0;transition:opacity .25s}
.scrim.show{display:block;opacity:1}
.browse{position:fixed;top:0;right:0;height:100%;width:min(520px,92vw);z-index:40;
  padding-top:env(safe-area-inset-top);
  background:linear-gradient(180deg,rgba(16,12,32,.92),rgba(9,7,18,.95));
  backdrop-filter:blur(26px) saturate(150%);-webkit-backdrop-filter:blur(26px) saturate(150%);
  border-left:1px solid var(--line2);box-shadow:-20px 0 60px rgba(0,0,0,.5);
  transform:translateX(100%);transition:transform .38s cubic-bezier(.2,.7,.2,1);display:grid;grid-template-rows:auto 1fr auto}
.browse.open{transform:translateX(0)}
.head-btn{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;color:var(--txt2);background:var(--glass);border:1px solid var(--line);transition:.2s}
.head-btn:hover{background:var(--glass2);color:#fff}
body.select-mode #selBtn{background:var(--grad);color:#08060f;border-color:transparent}
/* selection visuals */
body.select-mode .play-fab,body.select-mode .ractions,body.select-mode .rdur{display:none}
/* card checkbox (uses FA solid \f00c — the regular font isn't bundled) */
body.select-mode .card .thumb{position:relative}
body.select-mode .card .thumb::after{content:"";position:absolute;top:8px;left:8px;width:24px;height:24px;border-radius:50%;border:2px solid rgba(255,255,255,.9);background:rgba(8,6,16,.6);z-index:3;display:grid;place-items:center;font:900 13px/1 'Font Awesome 6 Free';color:transparent;transition:.15s}
body.select-mode .card.selected .thumb::after{content:"\f00c";background:var(--grad);border-color:transparent;box-shadow:0 0 14px var(--glow-c);color:#08060f}
/* protected card (Liked Songs): show a lock instead of a selectable checkbox */
body.select-mode .card[data-locked] .thumb::after{content:"\f023";color:rgba(255,255,255,.92);border-color:transparent;font-size:11px}
body.select-mode .card[data-locked]{opacity:.65}
.card.selected .thumb{box-shadow:0 0 0 3px var(--cyan),0 10px 26px rgba(0,0,0,.5)}
.card.selected .ct{color:var(--cyan)}
/* row checkbox — sits on the right where the more/download buttons are hidden in select mode */
body.select-mode .row{position:relative}
body.select-mode .row::after{content:"";position:absolute;right:16px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;border:2px solid rgba(255,255,255,.9);background:rgba(8,6,16,.6);display:grid;place-items:center;font:900 13px/1 'Font Awesome 6 Free';color:transparent;z-index:2}
body.select-mode .row.selected::after{content:"\f00c";background:var(--grad);border-color:transparent;box-shadow:0 0 14px var(--glow-c);color:#08060f}
.row.selected{background:linear-gradient(90deg,rgba(34,211,238,.28),rgba(139,92,246,.16))!important;box-shadow:inset 3px 0 0 var(--cyan)}
/* bulk action bar */
.sel-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-top:1px solid var(--line2);
  background:rgba(12,10,24,.92);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}
.sel-count{font-weight:700;font-size:14px;white-space:nowrap}
.sel-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.sel-acts button{padding:9px 13px;border-radius:11px;background:var(--glass);border:1px solid var(--line);color:var(--txt);font-weight:600;font-size:13px;transition:.2s}
.sel-acts button:hover{background:var(--glass2)}
.sel-acts button[data-sa=queue]{background:var(--grad);color:#08060f;border-color:transparent}
.sel-acts button.danger{color:#fb7185;border-color:rgba(251,113,133,.4)}
.prog-msg{margin-top:14px;font-weight:600;color:var(--txt2)}
.browse-head{display:flex;align-items:center;gap:12px;padding:18px 20px;border-bottom:1px solid var(--line);min-width:0}
.browse-title{font-size:20px;font-weight:700}
.back-btn,.close-btn{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;color:var(--txt2);background:var(--glass);border:1px solid var(--line);transition:.2s}
.back-btn:hover,.close-btn:hover{background:var(--glass2);color:#fff}
.close-btn{margin-left:auto}
.searchbar{flex:1;min-width:0;display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:14px;
  background:rgba(255,255,255,.06);border:1px solid var(--line)}
.searchbar i{color:var(--muted)}
.searchbar input{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--txt);font-size:15px}
.searchbar input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}  /* hide tiny native ✕; use our own */
.searchbar:focus-within{border-color:rgba(34,211,238,.6);box-shadow:0 0 0 3px rgba(34,211,238,.16)}
.search-clear{flex:0 0 auto;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:15px;color:var(--txt2);background:rgba(255,255,255,.1);transition:.15s;margin:-4px -6px -4px 0}
.search-clear:hover{color:#fff;background:var(--glass2);transform:scale(1.06)}
.inline-search{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:14px;margin:4px 0 22px;background:rgba(255,255,255,.06);border:1px solid var(--line)}
.inline-search i{color:var(--muted);font-size:13px}
.inline-search input{flex:1;background:none;border:none;outline:none;color:var(--txt);font-size:14px}
.inline-search:focus-within{border-color:rgba(34,211,238,.6);box-shadow:0 0 0 3px rgba(34,211,238,.16)}
.browse-body{overflow-y:auto;padding:20px;scrollbar-width:thin}

/* sections / grids / cards */
.section{margin-bottom:30px}
.section h3,.section-title{font-size:16px;font-weight:700;margin-bottom:14px;display:flex;align-items:center;gap:10px}
.section-title::before{content:"";width:4px;height:18px;border-radius:3px;background:var(--grad);box-shadow:0 0 12px var(--glow-v)}
.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
.card{cursor:pointer;transition:.25s}
.card .thumb{position:relative;aspect-ratio:1;border-radius:16px;overflow:hidden;border:1px solid var(--line);
  box-shadow:0 8px 22px rgba(0,0,0,.4);background:var(--glass)}
.card.artist .thumb{border-radius:50%}
.card .thumb img{width:100%;height:100%;object-fit:cover}
/* playlist mosaic cover (up to 4 track covers) */
.pl-cover{position:absolute;inset:0}
.pl-cover.mosaic{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:1px}
.pl-cover .plm-cell{width:100%;height:100%;object-fit:cover;display:block}
.pl-cover .plm-cell.ph{display:grid;place-items:center;font-size:15px;color:rgba(255,255,255,.45);background:linear-gradient(135deg,rgba(139,92,246,.28),rgba(34,211,238,.2))}
.pl-cover.empty{display:grid;place-items:center;font-size:38px;color:rgba(255,255,255,.6);background:linear-gradient(135deg,rgba(139,92,246,.32),rgba(34,211,238,.22))}
.card .thumb .play-fab{position:absolute;right:10px;bottom:10px;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;
  background:var(--grad);color:#0a0a14;font-size:15px;box-shadow:0 6px 18px rgba(0,0,0,.4),0 0 18px var(--glow-v);
  transform:translateY(8px) scale(.8);opacity:0;transition:.25s}
.card:hover .play-fab{transform:none;opacity:1}
.card:hover .thumb{transform:translateY(-5px);box-shadow:0 18px 38px rgba(0,0,0,.5),0 0 28px var(--glow-v)}
.card .ct{font-size:14px;font-weight:600;margin-top:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card.artist .ct{text-align:center}
.card .cs{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card.artist .cs{text-align:center}

/* track rows */
.rows{display:flex;flex-direction:column;gap:4px}
.row{display:flex;align-items:center;gap:14px;padding:10px 12px;border-radius:12px;cursor:pointer;transition:.18s}
.row:hover{background:var(--glass2)}
.row.playing{background:linear-gradient(90deg,rgba(34,211,238,.16),rgba(139,92,246,.10));box-shadow:inset 3px 0 0 var(--cyan)}
.row .rnum{width:24px;text-align:center;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}
.row .rimg{width:46px;height:46px;border-radius:10px;object-fit:cover;border:1px solid var(--line);flex:0 0 auto}
.row .rinfo{min-width:0;flex:1}
.row .rtitle{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .rartist{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .rdur{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
.ractions{display:flex;align-items:center;gap:2px;flex:0 0 auto}
.row .rbtn{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;color:var(--txt2);opacity:0;transition:.2s}
.row:hover .rbtn{opacity:1}
.row .rbtn:hover{background:var(--glass2);color:#fff}
.row .rbtn[data-qn]:hover,.row .rbtn[data-qq]:hover{color:var(--cyan)}
@media (hover:none){.row .rbtn{opacity:1}}   /* touch devices: quick actions always visible */

/* artist/album header */
.detail-head{display:flex;gap:20px;align-items:flex-end;margin-bottom:24px}
.detail-head img{width:140px;height:140px;border-radius:20px;object-fit:cover;box-shadow:0 18px 44px rgba(0,0,0,.55),0 0 36px var(--glow-v)}
.detail-head.artist img{border-radius:50%}
.detail-head .dh-kicker{font-size:12px;letter-spacing:2px;color:var(--cyan);font-weight:700}
.detail-head h2{font-size:clamp(24px,3vw,38px);font-weight:800;line-height:1.05;margin:6px 0}
.detail-head .dh-sub{color:var(--txt2);font-size:14px}
.play-all{margin-bottom:18px;display:inline-flex;gap:10px;align-items:center;padding:12px 22px;border-radius:14px;
  background:var(--grad);color:#0a0a14;font-weight:700;box-shadow:0 0 26px var(--glow-v);transition:.2s}
.play-all:hover{transform:translateY(-2px);box-shadow:0 0 38px var(--glow-c)}

/* ── Queue panel ──────────────────────────────────────────────────── */
.queue-panel{position:fixed;top:0;right:0;height:100%;width:min(420px,92vw);z-index:45;
  padding-top:env(safe-area-inset-top);
  background:linear-gradient(180deg,rgba(16,12,32,.94),rgba(9,7,18,.96));backdrop-filter:blur(26px);
  border-left:1px solid var(--line2);box-shadow:-20px 0 60px rgba(0,0,0,.5);
  transform:translateX(100%);transition:transform .38s cubic-bezier(.2,.7,.2,1);display:grid;grid-template-rows:auto 1fr}
.queue-panel.open{transform:translateX(0)}
.qp-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:16px 18px;border-bottom:1px solid var(--line)}
.qp-head h3{font-size:18px;display:flex;align-items:baseline;gap:8px}
.qp-count{font-size:12px;color:var(--muted);font-weight:500}
.qp-actions{display:flex;align-items:center;gap:6px}
.qh-btn{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;color:var(--txt2);background:var(--glass);border:1px solid var(--line);font-size:14px;transition:.2s}
.qh-btn:hover{background:var(--glass2);color:#fff}
#queueClear:hover{color:#fb7185;border-color:rgba(251,113,133,.4)}
.qp-list{overflow-y:auto;padding:12px}
.qrow-actions{display:flex;align-items:center;gap:4px;flex:0 0 auto;opacity:0;transition:opacity .15s}
.row:hover .qrow-actions{opacity:1}
.qbtn{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;color:var(--txt2);font-size:14px;transition:.15s}
.qbtn:hover{background:var(--glass2);color:#fff}
.qbtn[data-qrem]{color:#fb7185}
.qbtn[data-qrem]:hover,.qbtn[data-qrem]:active{background:rgba(251,113,133,.18);color:#fb7185}
@media (hover:none){.qrow-actions{opacity:1}}

/* ── Dock + mini (mobile/car) ─────────────────────────────────────── */
.dock{display:none;position:fixed;bottom:0;left:0;right:0;z-index:50;height:var(--dock-h);
  grid-template-columns:repeat(5,1fr);align-items:center;
  background:rgba(8,6,16,.72);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-top:1px solid var(--line2);
  padding-bottom:env(safe-area-inset-bottom)}
.dock-btn{display:grid;justify-items:center;gap:4px;color:var(--muted);font-size:10px;font-weight:600}
.dock-btn i{font-size:18px}
.dock-btn.active{color:var(--cyan)}
/* dock "More" overflow sheet (mobile/tablet only) */
.more-backdrop{position:fixed;inset:0;z-index:48;background:rgba(0,0,0,.4)}
.more-sheet{position:fixed;left:0;right:0;bottom:var(--dock-h);z-index:49;
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:12px 12px 16px;
  background:rgba(12,9,24,.97);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);
  border-top:1px solid var(--line2);box-shadow:0 -14px 34px rgba(0,0,0,.5);animation:moreUp .18s cubic-bezier(.2,.7,.2,1)}
@keyframes moreUp{from{transform:translateY(14px);opacity:0}to{transform:translateY(0);opacity:1}}
.more-item{display:grid;justify-items:center;gap:7px;padding:14px 6px;border-radius:14px;
  color:var(--txt2);font-size:12px;font-weight:600;background:var(--glass);border:1px solid var(--line);transition:.18s}
.more-item i{font-size:21px}
.more-item:hover,.more-item:active{color:var(--txt);background:var(--glass2);border-color:var(--line2)}
.mini{display:none;position:fixed;left:10px;right:10px;bottom:calc(var(--dock-h) + 10px);z-index:48;align-items:center;gap:11px;padding:8px 8px 8px 8px;border-radius:16px;overflow:hidden;cursor:pointer;
  background:rgba(14,11,28,.92);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--line2);box-shadow:0 12px 30px rgba(0,0,0,.5)}
.mini-art{width:46px;height:46px;border-radius:10px;object-fit:cover;flex:none}
.mini-meta{flex:1;min-width:0}
.mini-title{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini-artist{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.mini-btn{width:40px;height:40px;flex:none;display:grid;place-items:center;border-radius:50%;color:var(--txt2);font-size:17px;background:transparent;border:none;transition:transform .12s}
.mini-btn:active{transform:scale(.88)}
#miniPlay{color:#0a0a14;background:var(--grad);box-shadow:0 4px 14px var(--glow-v);font-size:15px}
.mini-prog{position:absolute;left:0;right:0;top:0;height:2.5px;background:rgba(255,255,255,.09)}
.mini-prog-fill{height:100%;width:0;background:var(--cyan);transition:width .25s linear}

/* ── Modals + toasts ──────────────────────────────────────────────── */
.modal-root{position:fixed;inset:0;z-index:60;display:none;place-items:center;padding:20px;
  background:rgba(4,3,12,.6);backdrop-filter:blur(8px)}
.modal-root.open{display:grid}
.modal{position:relative;width:min(420px,100%);max-height:88vh;overflow-y:auto;background:linear-gradient(180deg,rgba(24,19,44,.96),rgba(14,11,28,.96));
  border:1px solid var(--line2);border-radius:22px;box-shadow:0 30px 80px rgba(0,0,0,.6),0 0 50px rgba(139,92,246,.2);padding:26px}
.modal-x{position:absolute;top:14px;right:14px;width:36px;height:36px;border-radius:10px;display:grid;place-items:center;
  color:var(--txt2);background:var(--glass);border:1px solid var(--line);font-size:22px;line-height:1;transition:.2s}
.modal-x:hover{background:var(--glass2);color:#fff}
.modal h3{font-size:22px;margin-bottom:6px}
.modal p.sub{color:var(--txt2);font-size:14px;margin-bottom:18px}
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;color:var(--txt2);margin-bottom:6px}
.field input{width:100%;padding:13px 15px;border-radius:13px;background:rgba(255,255,255,.06);border:1px solid var(--line);color:var(--txt);font-size:15px;outline:none}
.field input:focus{border-color:rgba(34,211,238,.6);box-shadow:0 0 0 3px rgba(34,211,238,.16)}
.btn{width:100%;padding:14px;border-radius:14px;font-weight:700;font-size:15px;transition:.2s}
.btn.primary{background:var(--grad);color:#0a0a14;box-shadow:0 0 24px var(--glow-v)}
.btn.primary:hover{transform:translateY(-2px);box-shadow:0 0 34px var(--glow-c)}
.btn.ghost{background:var(--glass);border:1px solid var(--line);color:var(--txt)}
.btn.danger{background:rgba(251,113,133,.1);border:1px solid rgba(251,113,133,.4);color:#fb7185}
.btn.danger:hover{background:rgba(251,113,133,.18)}
.admin-hint{font-size:11.5px;color:var(--muted);line-height:1.45;margin:7px 4px 2px}
.ad-fb{font-size:12px;color:var(--cyan);line-height:1.4;margin:5px 4px 4px}
.ad-fb:empty{display:none}
.scan-prog{background:var(--glass);border:1px solid var(--line2);border-radius:14px;padding:13px 14px;margin:2px 0 16px}
.scan-prog-top{display:flex;justify-content:space-between;align-items:center;font-size:13px;font-weight:700;color:var(--txt);margin-bottom:9px}
.scan-prog-top span:last-child{color:var(--cyan);font-variant-numeric:tabular-nums;font-size:14px}
.scan-prog-track{height:8px;border-radius:6px;background:rgba(255,255,255,.1);overflow:hidden}
.scan-prog-fill{height:100%;border-radius:6px;background:var(--grad);box-shadow:0 0 12px var(--glow-v);width:0;transition:width .45s ease}
.scan-prog-fill.indet{width:30%!important;transition:none;animation:scanIndet 1.15s ease-in-out infinite}
@keyframes scanIndet{0%{margin-left:-32%}100%{margin-left:100%}}
.scan-prog-sub{font-size:11.5px;color:var(--muted);margin-top:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.modal .switch{text-align:center;margin-top:16px;font-size:14px;color:var(--txt2)}
.modal .switch button{color:var(--cyan);font-weight:700}
.modal .err{color:#fb7185;font-size:13px;margin-bottom:10px;min-height:18px}
.toast-root{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:70;display:flex;flex-direction:column;gap:10px;align-items:center}
.toast{padding:12px 20px;border-radius:14px;background:rgba(20,16,38,.96);border:1px solid var(--line2);
  box-shadow:0 14px 36px rgba(0,0,0,.5);font-size:14px;font-weight:600;animation:rise .3s ease}
.toast.ok{box-shadow:0 0 26px var(--glow-c),0 14px 36px rgba(0,0,0,.5)}
@keyframes rise{from{opacity:0;transform:translateY(12px)}}

/* ── Browse handle (reopen affordance) ────────────────────────────── */
.browse-handle{position:fixed;right:0;top:50%;transform:translateY(-50%);z-index:38;
  display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px 9px;
  background:var(--grad);color:#08060f;font-weight:800;font-size:11px;letter-spacing:2px;
  border-radius:16px 0 0 16px;box-shadow:-6px 0 26px var(--glow-v);
  transition:transform .35s cubic-bezier(.2,.7,.2,1),opacity .25s}
.browse-handle i{font-size:13px}
.browse-handle span{writing-mode:vertical-rl;text-orientation:mixed}
.browse-handle:hover{padding-right:13px}
body.drawer-open .browse-handle,body.queue-open .browse-handle{transform:translate(120%,-50%);opacity:0;pointer-events:none}

/* ── Popover (quality) ────────────────────────────────────────────── */
.popover{position:fixed;top:calc(var(--topbar-h) + env(safe-area-inset-top) + 8px);right:14px;z-index:56;width:236px;
  background:rgba(18,14,36,.98);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  border:1px solid var(--line2);border-radius:16px;box-shadow:0 24px 60px rgba(0,0,0,.6),0 0 40px rgba(139,92,246,.18);
  padding:10px;animation:rise .18s ease}
.pop-title{font-size:11px;color:var(--muted);font-weight:700;letter-spacing:1.5px;padding:6px 10px 8px}
.pop-opt{display:flex;justify-content:space-between;align-items:center;width:100%;padding:11px 12px;border-radius:11px;color:var(--txt);font-size:14px;transition:.15s}
.pop-opt span{display:flex;gap:10px;align-items:center;font-weight:600}
.pop-opt span i{width:18px;text-align:center;color:var(--txt2)}
.pop-opt small{color:var(--muted);font-size:11px}
.pop-opt:hover{background:var(--glass2)}
.pop-opt.active{background:linear-gradient(90deg,rgba(139,92,246,.30),rgba(34,211,238,.12))}
.pop-opt.active small{color:var(--cyan)}
.pop-opt.active span i{color:var(--cyan)}
.pop-note{font-size:11px;color:var(--cyan);padding:8px 10px 4px;line-height:1.4}

/* ── Action sheet / playlist picker rows ──────────────────────────── */
.sheet{display:flex;flex-direction:column;gap:4px;margin-top:6px;max-height:340px;overflow-y:auto}
.sheet-btn{display:flex;justify-content:space-between;align-items:center;width:100%;padding:13px 14px;border-radius:12px;
  color:var(--txt);font-size:15px;font-weight:600;transition:.15s;text-align:left}
.sheet-btn span{display:flex;gap:12px;align-items:center}
.sheet-btn span i{width:18px;text-align:center;color:var(--txt2)}
.sheet-btn small{color:var(--muted);font-size:12px}
.sheet-btn:hover{background:var(--glass2)}
.sheet-btn.danger{color:#fb7185}
.sheet-btn.danger span i{color:#fb7185}
.sheet-btn.liked span i{color:#ff5d8f}

/* ── Detail action row (play / rename / delete) ───────────────────── */
.detail-actions{display:flex;align-items:center;gap:10px;margin-bottom:18px;flex-wrap:wrap}
.detail-actions .play-all{margin-bottom:0}
.icon-action{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;font-size:16px;
  color:var(--txt2);background:var(--glass);border:1px solid var(--line);transition:.2s}
.icon-action:hover{background:var(--glass2);color:#fff;border-color:var(--line2)}
.icon-action.danger:hover{color:#fb7185;border-color:rgba(251,113,133,.5)}
.lib-quick{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}
.play-all.alt{background:var(--glass);color:var(--txt);border:1px solid var(--line);box-shadow:none}
.play-all.alt:hover{background:var(--glass2);box-shadow:none;transform:translateY(-2px)}
/* per-row download button: idle ↓ · progress ring · done ✓ */
.dl-btn{flex:0 0 auto;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:15px;color:var(--muted);background:transparent;transition:color .2s,transform .15s}
.dl-btn:hover{color:var(--txt);transform:scale(1.12)}
/* download control inside the player (id so applyDlBtn's className rewrite keeps the sizing) */
#playerDl{width:42px;height:42px;font-size:18px;background:var(--glass);border:1px solid var(--line);color:var(--txt2)}
#playerDl:hover{transform:none;color:var(--txt);border-color:var(--line2);background:var(--glass2)}
#playerDl.done{color:var(--cyan);background:rgba(34,211,238,.12);border-color:rgba(34,211,238,.4)}
#playerDl .dl-pct{width:24px;height:24px;font-size:10px}
.dl-btn.done{color:var(--cyan)}
.dl-btn.done i{filter:drop-shadow(0 0 6px var(--glow-c))}
.dl-btn.loading{color:#fff}
.dl-btn .dl-pct{width:22px;height:22px;border-radius:50%;background:var(--bg2);display:grid;place-items:center;font-size:9px;font-weight:800;color:#fff}
.icon-action.busy .dl-badge{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--cyan);color:#06040d;font-size:10px;font-weight:800;display:grid;place-items:center}
.icon-action{position:relative}

/* ── Admin stats grid ─────────────────────────────────────────────── */
.admin-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:6px 0 18px}
.admin-cell{background:var(--glass);border:1px solid var(--line);border-radius:14px;padding:14px;text-align:center}
.admin-cell b{display:block;font-size:22px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.admin-cell span{font-size:11px;color:var(--muted);text-transform:capitalize}
.admin-sec{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);font-weight:700;margin:18px 0 8px}
.admin-btn-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.admin-btn-row .btn{margin-top:0;font-size:13px;padding:12px}

/* update-available banner */
.update-banner{position:fixed;top:calc(var(--topbar-h) + env(safe-area-inset-top) + 12px);left:50%;transform:translateX(-50%);z-index:80;display:flex;align-items:center;gap:14px;
  padding:11px 16px;border-radius:14px;background:var(--grad);color:#08060f;font-weight:700;font-size:14px;box-shadow:0 12px 36px rgba(0,0,0,.5),0 0 30px var(--glow-v);animation:rise .3s ease}
.update-banner button{background:rgba(8,6,16,.22);border:1px solid rgba(8,6,16,.3);color:#08060f;padding:6px 14px;border-radius:10px;font-weight:800;cursor:pointer}
.update-banner button:hover{background:rgba(8,6,16,.4)}

/* in-player ±15s seek */
.seek-group{display:flex;gap:4px}

/* ── Dev-mode toggle row ──────────────────────────────────────────── */
.dev-row{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:14px;padding:14px;
  border:1px solid var(--line);border-radius:14px;background:var(--glass)}
.dev-label{display:flex;flex-direction:column;gap:3px;font-size:14px;font-weight:600;color:var(--txt)}
.dev-label i{margin-right:6px;color:var(--cyan)}
.dev-label small{font-weight:400;color:var(--muted);font-size:11px}
.dev-sw{flex:0 0 auto;width:48px;height:28px;border-radius:999px;background:rgba(255,255,255,.12);position:relative;transition:.25s}
.dev-sw::after{content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#fff;transition:.25s}
.dev-sw.on{background:var(--grad);box-shadow:0 0 18px var(--glow-v)}
.dev-sw.on::after{transform:translateX(20px)}

.spinner{width:34px;height:34px;border-radius:50%;border:3px solid var(--line2);border-top-color:var(--cyan);animation:spin .8s linear infinite;margin:40px auto}
.empty-note{color:var(--muted);text-align:center;padding:40px;font-size:14px}
.offline-note{display:flex;flex-direction:column;align-items:center;gap:6px;padding:54px 22px}
.offline-note i{font-size:30px;color:rgba(255,255,255,.45);margin-bottom:8px}
.offline-note .ttl{font-size:18px;font-weight:800;color:#fff;letter-spacing:.2px}
.offline-note .sub{font-size:13.5px;color:var(--muted);max-width:300px;line-height:1.5}
.offline-note .play-all{margin-top:14px}

/* ════════ RESPONSIVE ════════════════════════════════════════════── */

/* The browse drawer / queue panel OVERLAY the player (they float on top); the
   player keeps its size and position. */

/* tablet & below: stack hero, show dock, browse fuller */
@media (max-width:1023px){
  /* dock height includes the home-indicator inset so its buttons aren't squished on iPhone */
  :root{--dock-h:calc(68px + env(safe-area-inset-bottom))}
  .top-nav{display:none}
  .dock{display:grid}
  .stage{padding:16px 16px calc(var(--dock-h) + 16px);overflow-y:auto;align-items:flex-start}
  .hero{justify-content:flex-start}
  .hero-now{grid-template-columns:1fr;justify-items:center;text-align:center;gap:18px}
  .now-meta{justify-self:stretch}   /* full-width meta so the scrubber/transport don't resize with the title length */
  .art-wrap{width:min(68vw,40vh,330px)}
  .now-artist{text-align:center}
  /* let long titles wrap to full multi-line (no truncation/clip), without affecting other styles */
  .now-title{display:block;overflow:visible;-webkit-line-clamp:unset;white-space:normal;overflow-wrap:anywhere}
  .scrubber{margin:22px 0 16px}
  .transport{justify-content:center}
  .sub-controls{justify-content:center}
  .browse{width:100vw;border-left:none;padding-bottom:var(--dock-h)}   /* keep sel-bar + list above the dock */
  .queue-panel{padding-bottom:var(--dock-h)}
  .mini.show{display:flex}
  .browse-handle{display:none}   /* dock provides navigation at this size */
}

/* mobile */
@media (max-width:560px){
  .topbar{padding:0 10px;gap:6px}
  .brand-name{display:none}
  /* 5 dock items — comfortable tap targets; label ellipsis as a safety net */
  .dock-btn{font-size:10.5px;gap:4px;padding:0 2px;min-width:0}
  .dock-btn i{font-size:19px}
  .dock-btn span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .auth-label,#qualityLabel,.offline-pill span{display:none}
  #fsBtn{display:none}                 /* fullscreen rarely used on a phone; Drive Mode covers it */
  .ghost-btn{padding:9px 11px}
  .browse-handle{padding:14px 7px;font-size:10px}
  .browse-head{padding:14px 12px;gap:8px}
  .browse-head .head-btn,.browse-head .back-btn,.browse-head .close-btn{flex:0 0 auto}
  .qp-head{padding:14px 12px}
  .qp-actions{gap:4px}
  .qh-btn{width:32px;height:32px}
  .qp-head h3{min-width:0;overflow:hidden;white-space:nowrap}
  .t-btn{width:46px;height:46px}
  .t-btn.play{width:64px;height:64px;font-size:22px}
  .volume{display:none}
  .sub-controls{gap:12px;justify-content:center}
  .grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr))}
  .upnext-rail{display:none}      /* phones use the dock's Queue button instead */
  .art-wrap{max-width:min(300px,64vw)}
  .now-title{font-size:clamp(24px,7vw,34px)}
}

/* short landscape (phones in car cradle) */
@media (max-height:560px) and (orientation:landscape){
  .hero-now{grid-template-columns:minmax(150px,230px) 1fr;text-align:left;justify-items:start}
  .now-artist,.now-title{text-align:left}
  .art-wrap{max-width:230px}
  .upnext-rail{display:none}
}

/* ════════ DRIVE MODE (car) ══════════════════════════════════════── */
body.drive{font-size:18px}
body.drive .topbar{height:72px}
body.drive .top-nav,body.drive .upnext-rail,body.drive .sub-controls .quality,body.drive .grain{display:none}
body.drive .now-title{font-size:clamp(30px,5vw,60px);-webkit-line-clamp:2}
body.drive .now-artist{font-size:clamp(18px,2.4vw,28px)}
/* sizes scale to viewport width so all 5 controls fit even on a narrow portrait phone */
body.drive .t-btn{width:min(84px,15vw);height:min(84px,15vw);font-size:min(30px,5.5vw)}
body.drive .t-btn.play{width:min(120px,23vw);height:min(120px,23vw);font-size:min(42px,8.5vw)}
body.drive .t-btn.sm{width:min(64px,12vw);height:min(64px,12vw);font-size:min(22px,4.5vw)}
body.drive .track{height:12px}
body.drive .scrubber .t{font-size:clamp(13px,2.4vw,18px);min-width:clamp(40px,7vw,54px)}
body.drive .ambient{opacity:1;filter:saturate(150%) blur(28px)}
body.drive .transport{gap:clamp(8px,3vw,40px);justify-content:center;flex-wrap:nowrap}
body.drive .dock{height:84px}
body.drive .dock-btn{font-size:13px}
body.drive .dock-btn i{font-size:24px}
body.drive .art-wrap{width:min(340px,38vw,40vh)}

/* ░░ Curated home cards ░░ */
.home-cards{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));margin-top:6px}
.hcard{position:relative;display:flex;flex-direction:column;text-align:left;border-radius:18px;overflow:hidden;border:1px solid var(--line);background:var(--glass);cursor:pointer;aspect-ratio:1/1;transition:transform .22s cubic-bezier(.2,.7,.2,1),box-shadow .22s,border-color .22s}
.hcard:hover{transform:translateY(-3px);border-color:var(--line2);box-shadow:0 16px 36px rgba(0,0,0,.5),0 0 26px var(--glow-v)}
.hcard .hc-img,.hcard .hc-grad{position:absolute;inset:0}
.hcard .hc-img img{width:100%;height:100%;object-fit:cover;display:block}
.hcard .hc-img .hc-fall{display:none}
.hcard .hc-img.noimg{display:grid;place-items:center;background:linear-gradient(135deg,rgba(139,92,246,.42),rgba(34,211,238,.3))}
.hcard .hc-img.noimg .hc-fall{display:block;font-size:34px;color:rgba(255,255,255,.85)}
.hcard.text .hc-grad{display:grid;place-items:center;background:linear-gradient(135deg,var(--hc-accent,rgba(139,92,246,.52)),rgba(34,211,238,.32))}
.hcard.text .hc-grad i{font-size:38px;color:rgba(255,255,255,.92)}
.hcard .hc-meta{position:relative;margin-top:auto;z-index:2;padding:12px 13px;background:linear-gradient(transparent,rgba(6,5,14,.55) 38%,rgba(6,5,14,.92))}
.hcard .hc-title{font-weight:800;font-size:15px;color:#fff;line-height:1.2;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.hcard .hc-sub{font-size:12px;color:rgba(255,255,255,.72);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hcard .hc-kind{position:absolute;top:9px;right:9px;z-index:3;width:28px;height:28px;border-radius:9px;display:grid;place-items:center;font-size:12px;color:#fff;background:rgba(8,6,16,.5);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--line2)}
.home-shortcuts{margin-top:18px;max-width:280px}
.detail-head.genre{align-items:center}
.detail-head.genre .dh-genreart{width:120px;height:120px;border-radius:20px;display:grid;place-items:center;font-size:48px;color:#fff;background:linear-gradient(135deg,rgba(139,92,246,.5),rgba(34,211,238,.32));box-shadow:0 18px 44px rgba(0,0,0,.55)}

/* ░░ Genres page ░░ */
.genre-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));margin-top:4px}
.gcard{position:relative;display:flex;flex-direction:column;justify-content:flex-end;gap:2px;text-align:left;height:108px;padding:14px;border-radius:16px;border:1px solid rgba(255,255,255,.12);overflow:hidden;cursor:pointer;
  background:linear-gradient(135deg,hsl(var(--gh,260),68%,44%),hsl(calc(var(--gh,260) + 38),72%,28%));
  transition:transform .2s cubic-bezier(.2,.7,.2,1),box-shadow .2s}
.gcard:hover{transform:translateY(-3px);box-shadow:0 16px 32px rgba(0,0,0,.5)}
.gcard .gc-ic{position:absolute;top:11px;right:13px;font-size:30px;color:rgba(255,255,255,.26)}
.gcard .gc-name{font-weight:800;font-size:16px;color:#fff;line-height:1.15;z-index:1;max-width:88%}
.gcard .gc-count{font-size:12px;color:rgba(255,255,255,.82);z-index:1}

/* ░░ Admin: full page, tabs ░░ */
.admin-page{padding-bottom:24px}
.adtabs{display:flex;gap:8px;overflow-x:auto;margin:4px 0 18px;padding-bottom:4px;-webkit-overflow-scrolling:touch}
.adtabs::-webkit-scrollbar{height:0}
.adtab{flex:0 0 auto;padding:9px 14px;border-radius:11px;font-size:13px;font-weight:700;color:var(--txt2);background:var(--glass);border:1px solid var(--line);white-space:nowrap;transition:.2s}
.adtab i{margin-right:6px;font-size:12px;opacity:.85}
.adtab:hover{color:var(--txt);border-color:var(--line2)}
.adtab.active{color:#0a0a14;background:var(--grad);border-color:transparent;box-shadow:0 0 20px var(--glow-v)}
.adtab.active i{opacity:1}
.adpanel{display:none}
.adpanel.active{display:block}
.adpanel .btn{margin-top:10px}
.adpanel .admin-sec:first-child{margin-top:2px}

/* ░░ Admin: home-cards manager ░░ */
.hc-admin-list{margin-top:14px;display:flex;flex-direction:column;gap:8px}
.hc-admin-row{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:13px;background:var(--glass);border:1px solid var(--line)}
.hc-admin-row.off{opacity:.5}
.hcar-ic{flex:0 0 auto;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,rgba(139,92,246,.45),rgba(34,211,238,.3));font-size:15px}
.hcar-main{flex:1;min-width:0}
.hcar-title{font-weight:700;font-size:14px;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hcar-sub{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.hcar-kind{text-transform:capitalize;color:var(--cyan);font-weight:600}
.hcar-actions{flex:0 0 auto;display:flex;gap:4px}
.iconbtn{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;color:var(--txt2);background:rgba(255,255,255,.05);border:1px solid var(--line);font-size:12px;transition:.18s}
.iconbtn:hover{color:var(--txt);border-color:var(--line2);background:var(--glass2)}
.iconbtn:disabled{opacity:.3;pointer-events:none}
.iconbtn.danger:hover{color:#fb7185;border-color:rgba(251,113,133,.4)}
.hc-editor{margin-top:14px}
.hc-form{background:var(--glass);border:1px solid var(--line2);border-radius:16px;padding:16px}
.hcf-head{font-weight:800;font-size:16px;color:var(--txt);margin-bottom:14px}
.field .opt{color:var(--muted);font-weight:400;font-size:11px}
.field select{width:100%;padding:13px 15px;border-radius:13px;background:rgba(255,255,255,.06);border:1px solid var(--line);color:var(--txt);font-size:15px;outline:none}
.field select:focus{border-color:rgba(34,211,238,.6);box-shadow:0 0 0 3px rgba(34,211,238,.16)}
.field select option{color:#111}
.hc-target{position:relative}
#hcfTarget.hc-has-caret{padding-right:36px;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%237b7595' stroke-width='2'><path d='M4 6l4 4 4-4'/></svg>");background-repeat:no-repeat;background-position:right 13px center;background-size:13px}
.hc-lookup{position:absolute;left:0;right:0;top:100%;margin-top:4px;z-index:20;max-height:240px;overflow-y:auto;background:#100d1f;border:1px solid var(--line2);border-radius:12px;box-shadow:0 18px 40px rgba(0,0,0,.55)}
.hc-lk{display:block;width:100%;text-align:left;padding:11px 14px;font-size:14px;color:var(--txt);border-bottom:1px solid var(--line);transition:.15s}
.hc-lk:last-child{border-bottom:0}
.hc-lk:hover{background:var(--glass2);color:#fff}
.hc-lk small{color:var(--muted);font-size:12px;margin-left:6px}
.hc-lk.none{color:var(--muted);cursor:default}
