@property --art-color{syntax:'<color>';inherits:true;initial-value:#141414;}

:root{
  --void:      #000000;
  --s1:        #0a0a0a;
  --spring:    cubic-bezier(.34,1.56,.64,1);
  --ios-ease:  cubic-bezier(.32,.72,0,1);
  --ios-spring:cubic-bezier(.25,.84,.26,1.04);
  --ios-decel: cubic-bezier(0,.55,.1,1);
  --s2:        #131313;
  --s3:        #1c1c1c;
  --s4:        #262626;
  --s5:        #2f2f2f;
  --hair:      rgba(255,255,255,0.06);
  --hair2:     rgba(255,255,255,0.03);
  --text:      #ffffff;
  --text-dim:  #8a8a8a;
  --text-dim2: #4a4a4a;
  --acc:       #c8ff00;
  --acc-dim:   rgba(200,255,0,0.12);
  --acc-glow:  rgba(200,255,0,0.08);
  --danger:    #ff4d6d;
  --nav:       64px;
  --player:    82px;
  --glass:     rgba(22,22,22,0.72);
  --glass-thick:rgba(18,18,18,0.88);
  --blur:      blur(28px) saturate(1.8);
  --shadow-sm: 0 2px 8px rgba(0,0,0,.3);
  --shadow-md: 0 8px 24px rgba(0,0,0,.45);
  --shadow-lg: 0 16px 48px rgba(0,0,0,.65);
  --radius-sm: 12px;
  --radius-md: 18px;
  --radius-lg: 24px;
  --radius-xl: 32px;
}

/* ═══ iOS MOMENTUM SCROLL ═══ */
.scroll-area{-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;}

.topbar{position:relative;}
*{margin:0;padding:0;box-sizing:border-box;}
body{background:var(--void);color:var(--text);font-family:'Instrument Sans',sans-serif;
  height:100dvh;overflow:hidden;display:flex;flex-direction:column;
  -webkit-tap-highlight-color:transparent;
  font-feature-settings:'kern' 1,'liga' 1,-webkit-font-smoothing:antialiased,-moz-osx-font-smoothing:grayscale;}
body::before{content:'';position:fixed;top:0;left:50%;transform:translateX(-50%);
  width:600px;height:600px;border-radius:50%;
  background:radial-gradient(circle,var(--acc-glow) 0%,transparent 70%);
  pointer-events:none;z-index:0;opacity:.4;
  animation:ambientPulse 8s ease-in-out infinite;}
@keyframes ambientPulse{0%,100%{opacity:.25;transform:translateX(-50%) scale(.9)}
  50%{opacity:.4;transform:translateX(-50%) scale(1.1)}}
img{display:block;}button{cursor:pointer;border:none;background:none;font-family:inherit;color:inherit;}
input{font-family:inherit;color:inherit;}
::-webkit-scrollbar{width:0;height:0;}

/* ═══ TOPBAR ═══ */
.topbar{display:flex;align-items:center;justify-content:space-between;
  padding:calc(20px + env(safe-area-inset-top)) 20px 4px;flex-shrink:0;}
.topbar-greet{display:flex;flex-direction:column;gap:2px;}
.greet-sub{font-size:11px;color:var(--text-dim2);font-weight:500;letter-spacing:.3px;}
.greet-main{font-family:'Bebas Neue',sans-serif;font-size:30px;letter-spacing:1px;
  color:var(--text);line-height:1;}
.topbar-mark{width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,0.06);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  border:0.5px solid var(--hair);transition:transform .18s var(--ios-spring),background .2s;}
.topbar-mark:active{transform:scale(.88);background:rgba(255,255,255,0.1);}
.topbar-mark svg{color:var(--acc);}
.topbar-actions{display:flex;align-items:center;gap:8px;}

/* ═══ AUTH MODAL ═══ */
.auth-tabs{display:flex;gap:4px;background:rgba(255,255,255,0.04);border-radius:100px;padding:4px;margin-bottom:20px;
  border:0.5px solid var(--hair2);}
.auth-tab{flex:1;padding:10px;border-radius:100px;font-size:12.5px;font-weight:700;color:var(--text-dim);
  transition:all .22s var(--ios-spring);}
.auth-tab.active{background:rgba(255,255,255,0.95);color:var(--void);box-shadow:0 2px 8px rgba(0,0,0,.25);}
.auth-tab:active{transform:scale(.94);}
.auth-sub{font-size:12.5px;color:var(--text-dim);line-height:1.6;margin-bottom:18px;margin-top:-14px;}
.auth-msg{font-size:12.5px;padding:11px 14px;border-radius:10px;margin-bottom:16px;line-height:1.5;
  background:rgba(255,77,77,.1);color:#ff4d4d;border:1px solid rgba(255,77,77,.25);}
.auth-msg.ok{background:var(--acc-dim);color:var(--acc);border-color:var(--acc);}
.field{margin-bottom:14px;}
.field label{display:block;font-family:'JetBrains Mono',monospace;font-size:10px;
  letter-spacing:1px;text-transform:uppercase;color:var(--text-dim);margin-bottom:7px;}
.field input{width:100%;background:rgba(255,255,255,0.04);border:0.5px solid var(--hair);border-radius:var(--radius-sm);
  padding:14px 16px;color:var(--text);font-size:14px;font-family:'Instrument Sans',sans-serif;
  outline:none;transition:border-color .25s var(--ios-ease),background .25s,box-shadow .25s;
  letter-spacing:.05px;}
.field input:focus{border-color:rgba(200,255,0,0.35);background:rgba(255,255,255,0.07);
  box-shadow:0 0 0 3.5px rgba(200,255,0,0.07);}
.field input::placeholder{color:var(--text-dim2);}
.field-pw{position:relative;}
.field-pw input{padding-right:44px;}
.pw-toggle{position:absolute;right:4px;top:50%;transform:translateY(-50%);
  width:36px;height:36px;display:flex;align-items:center;justify-content:center;
  background:none;border:none;padding:0;margin:0;cursor:pointer;
  color:var(--text-dim);border-radius:8px;transition:color .15s,background .15s;}
.pw-toggle:hover{color:var(--text);background:rgba(255,255,255,.05);}
.pw-toggle:active{transform:translateY(-50%) scale(.9);}
.pw-toggle svg{width:18px;height:18px;display:block;}
.auth-submit{width:100%;padding:15px;background:var(--acc);color:var(--void);border:none;
  border-radius:var(--radius-sm);font-size:13.5px;font-weight:700;margin-top:4px;margin-bottom:10px;
  box-shadow:0 6px 20px rgba(200,255,0,0.18);transition:transform .2s var(--ios-spring),box-shadow .2s;
  letter-spacing:.2px;}
.auth-submit:active{transform:scale(.96);box-shadow:0 3px 10px rgba(200,255,0,0.12);}
.auth-shake{animation:authShake .4s cubic-bezier(.36,.07,.19,.97);}
@keyframes authShake{
  10%,90%{transform:translateX(-1px);}
  20%,80%{transform:translateX(2px);}
  30%,50%,70%{transform:translateX(-4px);}
  40%,60%{transform:translateX(4px);}
}

.topbar-bell{position:relative;width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,0.06);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;border:0.5px solid var(--hair);
  color:var(--text);transition:transform .18s var(--ios-spring),background .2s;}
.topbar-bell:active{transform:scale(.88);background:rgba(255,255,255,0.1);}
.bell-dot{position:absolute;top:8px;right:8px;width:8px;height:8px;border-radius:50%;
  background:var(--acc);border:2px solid var(--s3);display:none;}
.bell-dot.show{display:block;}

.notif-item{padding:14px 0;border-bottom:1px solid var(--hair);}
.notif-item:last-child{border-bottom:none;}
.notif-version{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;
  letter-spacing:1px;color:var(--acc);margin-bottom:6px;}
.notif-title{font-size:14px;font-weight:700;margin-bottom:5px;}
.notif-text{font-size:12.5px;color:var(--text-dim);line-height:1.7;}

.guest-reminder{position:fixed;left:16px;right:16px;bottom:calc(var(--player) + var(--nav) + env(safe-area-inset-bottom) + 16px);
  z-index:450;background:var(--glass-thick);border:0.5px solid var(--hair);border-radius:20px;padding:18px;
  display:none;gap:14px;box-shadow:0 20px 60px -16px rgba(0,0,0,.95);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  opacity:0;transform:translateY(20px) scale(.96);transition:all .42s var(--ios-spring);}
.guest-reminder.show{display:flex;opacity:1;transform:translateY(0) scale(1);}
.gr-icon{width:38px;height:38px;border-radius:12px;background:var(--acc-dim);color:var(--acc);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.gr-title{font-size:13.5px;font-weight:700;margin-bottom:5px;}
.gr-text{font-size:12px;color:var(--text-dim);line-height:1.6;margin-bottom:12px;}
.gr-actions{display:flex;gap:8px;}
.gr-btn-primary{flex:1;padding:10px;background:var(--acc);color:var(--void);border:none;
  border-radius:10px;font-size:12px;font-weight:700;transition:transform .18s var(--ios-spring);}
.gr-btn-secondary{padding:10px 14px;background:rgba(255,255,255,0.06);color:var(--text-dim);border:0.5px solid var(--hair);
  border-radius:10px;font-size:12px;font-weight:600;transition:transform .18s var(--ios-spring);}
.gr-btn-primary:active,.gr-btn-secondary:active{transform:scale(.92);}

/* ═══ PROFILE STATS ═══ */
.profile-stats{display:flex;gap:10px;padding:0 20px 8px;}
.profile-stat{flex:1;background:rgba(255,255,255,0.04);border:0.5px solid var(--hair2);border-radius:var(--radius-md);
  padding:18px;text-align:center;transition:transform .18s var(--ios-spring);}
.profile-stat:active{transform:scale(.96);}

/* ═══ AVATAR & PROFILE ═══ */

/* ═══ AUTH FORM POLISH ═══ */
.field-error{font-size:11px;color:#ff4d4d;margin-top:6px;min-height:0;display:none;}

/* ═══ NAV N MARK (logo Profil di bottom nav) ═══ */
.nav-n-mark{width:21px;height:21px;border-radius:6px;background:var(--text-dim2);color:var(--void);
  font-family:'Bebas Neue',sans-serif;font-size:13px;display:flex;align-items:center;justify-content:center;
  transition:background .2s,border-radius .2s;background-position:center;background-size:cover;}
.nav-item.active .nav-n-mark{background-color:var(--acc);}
.nav-n-mark.signed-in{border-radius:50%;background-color:var(--s3);border:1.5px solid var(--text-dim2);
  font-size:11px;}
.nav-item.active .nav-n-mark.signed-in{border-color:var(--acc);}

/* ═══ HALAMAN PROFIL ═══ */
.profile-page-head{display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:18px 24px 24px;}
.ppg-icon{width:64px;height:64px;border-radius:50%;background:var(--s2);color:var(--text-dim);
  display:flex;align-items:center;justify-content:center;margin-bottom:16px;}
.ppg-title{font-family:'Bebas Neue',sans-serif;font-size:22px;letter-spacing:.5px;margin-bottom:6px;}
.ppg-sub{font-size:12.5px;color:var(--text-dim);line-height:1.6;max-width:300px;}
.ppg-joined{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.5px;
  color:var(--text-dim2);margin-top:8px;}

.ppa-wrap{position:relative;width:88px;height:88px;margin-bottom:16px;cursor:pointer;}
.ppa-circle{width:88px;height:88px;border-radius:50%;background:var(--acc);color:var(--void);
  font-family:'Bebas Neue',sans-serif;font-size:36px;display:flex;align-items:center;justify-content:center;
  transition:transform .2s var(--ios-spring),box-shadow .3s;
  box-shadow:0 8px 24px rgba(200,255,0,0.2);}
.ppa-wrap:active .ppa-circle{transform:scale(.93);box-shadow:0 4px 12px rgba(200,255,0,0.15);}
.ppa-edit-badge{position:absolute;bottom:0;right:0;width:28px;height:28px;border-radius:50%;
  background:var(--glass-thick);border:2.5px solid var(--void);color:var(--text);
  display:flex;align-items:center;justify-content:center;
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);}

.profile-stats{display:flex;gap:10px;padding:0 20px 8px;}
.profile-stat{flex:1;background:var(--s1);border:1px solid var(--hair);border-radius:16px;
  padding:16px;text-align:center;}
.ps-num{font-family:'Bebas Neue',sans-serif;font-size:26px;color:var(--acc);line-height:1;}
.ps-label{font-size:11px;color:var(--text-dim);margin-top:6px;font-weight:600;}

.profile-section-title{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:1.5px;
  text-transform:uppercase;color:var(--text-dim2);padding:0 20px 10px;margin-top:6px;}
.profile-row{display:flex;align-items:center;justify-content:space-between;padding:15px 20px;
  border-bottom:0.5px solid var(--hair2);font-size:13.5px;font-weight:600;color:var(--text);
  transition:background .15s;}
.profile-row:last-child{border-bottom:none;}
.profile-row:active{background:rgba(255,255,255,0.05);}
.profile-row svg{color:var(--text-dim2);flex-shrink:0;}

.profile-subview{position:absolute;inset:0;background:var(--void);z-index:20;
  display:flex;flex-direction:column;
  transform:translateX(100%);opacity:0;pointer-events:none;
  transition:transform .35s var(--ios-ease),opacity .35s var(--ios-ease);}
.profile-subview.show{transform:translateX(0);opacity:1;pointer-events:auto;}
.profile-sub-top{display:flex;align-items:center;gap:14px;padding:18px 20px 8px;flex-shrink:0;}
.profile-sub-back{width:36px;height:36px;border-radius:50%;background:var(--s2);color:var(--text);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.profile-sub-back:active{background:var(--s3);transform:scale(.92);}
.profile-sub-title{font-family:'Bebas Neue',sans-serif;font-size:20px;letter-spacing:.5px;}
.profile-sub-body{padding:16px 20px 30px;overflow-y:auto;}
#pageProfile{position:relative;overflow:hidden;min-height:100%;}
.field-error.show{display:block;}
.field input.invalid{border-color:#ff4d4d;}
.auth-submit{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;}
.auth-submit:disabled{opacity:.7;}
.auth-spinner{width:16px;height:16px;border-radius:50%;border:2px solid rgba(0,0,0,.25);
  border-top-color:var(--void);animation:spin .7s linear infinite;}
#authForm{animation:formFade .3s var(--ios-ease);}
@keyframes formFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}

/* ═══ SEARCH BAR — iOS Spotlight-style ═══ */
.search-wrap{padding:16px 20px 10px;flex-shrink:0;}
.search-bar{display:flex;align-items:center;background:rgba(255,255,255,0.06);
  border-radius:14px;padding:13px 16px;gap:10px;border:0.5px solid var(--hair2);
  transition:border-color .2s,background .2s,box-shadow .2s;}
.search-bar:focus-within{border-color:rgba(200,255,0,0.2);background:rgba(255,255,255,0.08);
  box-shadow:0 0 0 3px rgba(200,255,0,0.06);}
.search-bar svg{color:var(--text-dim2);flex-shrink:0;}
.search-bar input{flex:1;background:none;border:none;outline:none;
  font-size:14.5px;color:var(--text);}
.search-bar input::placeholder{color:var(--text-dim2);}
.search-clear{display:none;width:26px;height:26px;border-radius:50%;
  background:var(--s4);color:var(--text-dim);flex-shrink:0;
  align-items:center;justify-content:center;transition:transform .12s,background .15s;}
.search-clear.show{display:flex;}
.search-clear:active{transform:scale(.85);background:var(--s3);}
.search-clear svg{width:12px;height:12px;color:inherit;}

/* ═══ CATEGORY PILLS — iOS Segmented style ═══ */
.cat-scroll{display:flex;gap:8px;overflow-x:auto;padding:4px 20px 18px;flex-shrink:0;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;}
.cat-scroll::-webkit-scrollbar{display:none;}
.cat-pill{flex-shrink:0;padding:8px 18px;border-radius:100px;font-size:13px;font-weight:600;
  background:var(--s2);color:var(--text-dim);border:0.5px solid var(--hair);white-space:nowrap;
  transition:all .25s var(--ios-spring);letter-spacing:.1px;}
.cat-pill:active{transform:scale(.9);}
.cat-pill.active{background:rgba(255,255,255,0.95);color:var(--void);border-color:transparent;
  box-shadow:0 3px 12px rgba(0,0,0,.35);}

/* ═══ SCROLL AREA ═══ */
.scroll-area{flex:1;overflow-y:auto;overflow-x:hidden;
  padding-bottom:calc(var(--player) + var(--nav) + env(safe-area-inset-bottom) + 24px);
  -webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;}

.section{padding:0 20px;margin-bottom:32px;}
.sec-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
.sec-eyebrow{font-family:'JetBrains Mono',monospace;font-size:9.5px;color:var(--text-dim2);
  letter-spacing:2px;text-transform:uppercase;margin-bottom:4px;display:block;}
.sec-title{font-family:'Bebas Neue',sans-serif;font-size:24px;letter-spacing:.5px;line-height:1;}
.sec-more{font-size:11px;color:var(--text-dim2);font-weight:600;}

/* ═══ SPOTLIGHT (hero card) — iOS native media card ═══ */
.spotlight{position:relative;border-radius:var(--radius-xl);overflow:hidden;height:290px;
  background:var(--s2);box-shadow:var(--shadow-lg),0 0 0 0.5px rgba(255,255,255,.04) inset;
  transition:transform .35s var(--ios-spring),box-shadow .35s;}
.spotlight:active{transform:scale(.985);box-shadow:var(--shadow-md),0 0 0 0.5px rgba(255,255,255,.04) inset;}
.spotlight img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  filter:brightness(.55) saturate(1.05);}
.spotlight-veil{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.55) 55%,rgba(0,0,0,.95) 100%);}
.spotlight-tag{position:absolute;top:18px;left:20px;display:flex;align-items:center;gap:6px;
  font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:1.5px;
  color:var(--acc);text-transform:uppercase;}
.spotlight-tag .dot{width:6px;height:6px;border-radius:50%;background:var(--acc);
  box-shadow:0 0 8px var(--acc);}
.spotlight-body{position:absolute;left:20px;right:20px;bottom:20px;
  display:flex;align-items:flex-end;justify-content:space-between;gap:14px;}
.spotlight-title{font-family:'Bebas Neue',sans-serif;font-size:32px;letter-spacing:.5px;
  line-height:1;margin-bottom:6px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.spotlight-artist{font-size:13px;color:rgba(255,255,255,.65);font-weight:500;}
.spotlight-play{width:56px;height:56px;border-radius:50%;background:var(--text);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  box-shadow:0 10px 30px rgba(0,0,0,.5),0 0 0 1px rgba(255,255,255,.1) inset;
  transition:transform .18s var(--ios-spring),box-shadow .2s;}
.spotlight-play:active{transform:scale(.9);box-shadow:0 6px 18px rgba(0,0,0,.4);}
.spotlight-play svg{color:var(--void);margin-left:2px;}

/* ═══ SPEED DIAL GRID ═══ */
.dial-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.dial-card{position:relative;border-radius:18px;overflow:hidden;aspect-ratio:1;
  background:var(--s2);cursor:pointer;transition:transform .25s cubic-bezier(.32,.72,0,1);}
.dial-card:active{transform:scale(.94);}
.dial-card img{width:100%;height:100%;object-fit:cover;
  transition:transform .3s;filter:brightness(.7);}
.dial-card:active img{transform:scale(1.06);filter:brightness(.5);}
.dial-veil{position:absolute;inset:0;
  background:linear-gradient(180deg,transparent 40%,rgba(0,0,0,.9) 100%);}
.dial-label{position:absolute;left:10px;right:10px;bottom:9px;
  font-size:11.5px;font-weight:700;line-height:1.25;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}

/* ═══ TRACK ROWS — iOS native list ═══ */
.track-list{display:flex;flex-direction:column;gap:0;}
.track-row{display:flex;align-items:center;gap:13px;padding:11px 14px;border-radius:var(--radius-sm);
  cursor:pointer;transition:background .18s var(--ios-ease),transform .12s;
  margin:0 2px;position:relative;}
.track-row:active{background:rgba(255,255,255,0.07);transform:scale(.988);}
.track-row.playing{background:rgba(200,255,0,0.05);}
.track-row.playing::before{content:'';position:absolute;left:0;top:25%;bottom:25%;width:2.5px;
  border-radius:0 2px 2px 0;background:var(--acc);box-shadow:0 0 8px var(--acc);}
.track-row::after{content:'';position:absolute;left:72px;right:12px;bottom:0;height:0.5px;background:var(--hair2);}
.track-idx{width:16px;text-align:center;font-family:'JetBrains Mono',monospace;
  font-size:11px;color:var(--text-dim2);flex-shrink:0;}
.track-row.playing .track-idx{color:var(--acc);}
.track-thumb{width:48px;height:48px;border-radius:var(--radius-sm);overflow:hidden;
  background:var(--s3);flex-shrink:0;box-shadow:var(--shadow-sm);}
.track-thumb img{width:100%;height:100%;object-fit:cover;}
.track-body{flex:1;overflow:hidden;min-width:0;}
.track-name{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.track-row.playing .track-name{color:var(--acc);}
.track-sub{font-size:11.5px;color:var(--text-dim);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.track-time{font-family:'JetBrains Mono',monospace;font-size:10.5px;
  color:var(--text-dim2);flex-shrink:0;}
.track-pin{display:inline-flex;align-items:center;gap:3px;margin-left:7px;
  font-family:'JetBrains Mono',monospace;font-size:8.5px;color:var(--void);
  background:var(--text);padding:2px 6px;border-radius:5px;letter-spacing:.5px;
  vertical-align:middle;font-weight:800;}

/* ═══ HORIZONTAL ALBUM/CARD SCROLL ═══ */
.h-scroll{display:flex;gap:13px;overflow-x:auto;padding-bottom:2px;
  -webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;scrollbar-width:none;}
.h-scroll::-webkit-scrollbar{display:none;}
.h-scroll > *{scroll-snap-align:start;}
.v-card{flex-shrink:0;width:132px;cursor:pointer;}
.v-card:active .v-art{transform:scale(.94);}
.v-art{width:132px;height:132px;border-radius:var(--radius-md);overflow:hidden;
  background:var(--s2);margin-bottom:9px;position:relative;
  transition:transform .28s var(--ios-spring),box-shadow .25s;
  box-shadow:var(--shadow-md);}
.v-art img{width:100%;height:100%;object-fit:cover;}
.v-play{position:absolute;bottom:8px;right:8px;width:32px;height:32px;
  border-radius:50%;background:var(--text);display:flex;align-items:center;justify-content:center;
  opacity:0;transform:translateY(4px) scale(.9);transition:all .2s;}
.v-card:active .v-play{opacity:1;transform:none;}
.v-play svg{color:var(--void);}
.v-title{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.v-sub{font-size:10.5px;color:var(--text-dim2);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.v-badge{font-family:'JetBrains Mono',monospace;font-size:8px;color:var(--text-dim2);
  border:0.5px solid var(--hair);padding:2px 6px;border-radius:5px;display:inline-block;margin-bottom:5px;
  letter-spacing:.5px;}

/* ═══ BOTTOM NAV — iOS native translucent bar ═══ */
.bottom-nav{height:calc(var(--nav) + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);
  background:var(--glass-thick);border-top:0.5px solid rgba(255,255,255,0.08);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  display:flex;align-items:center;justify-content:space-around;flex-shrink:0;z-index:20;box-sizing:border-box;
  transition:background .4s;
  box-shadow:0 -8px 32px rgba(0,0,0,.3),0 -1px 0 rgba(255,255,255,.04) inset;}
.nav-item{display:flex;flex-direction:column;align-items:center;gap:5px;
  padding:8px 16px;color:var(--text-dim2);transition:color .22s var(--ios-spring),transform .12s;position:relative;}
.nav-item:active{transform:scale(.82);}
.nav-item.active{color:var(--text);}
.nav-item.active svg{filter:drop-shadow(0 0 10px rgba(200,255,0,.3));}
.nav-item.active .nav-dot{opacity:1;transform:scale(1);}
.nav-dot{position:absolute;top:0;width:5px;height:5px;border-radius:50%;
  background:var(--acc);opacity:0;transform:scale(0);transition:all .25s var(--ios-spring);
  box-shadow:0 0 6px var(--acc);}
.nav-label{font-size:9px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;}

/* ═══ PLAYER BAR — iOS native floating pill ═══ */
.player-bar-wrap{padding:0 14px 8px;flex-shrink:0;position:relative;z-index:15;
  background:linear-gradient(180deg,transparent 0%,var(--void) 20%);}
.player-bar{height:66px;background:var(--glass);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border-radius:22px;border:0.5px solid rgba(255,255,255,0.08);
  display:flex;align-items:center;padding:0 12px;gap:11px;
  position:relative;cursor:pointer;
  box-shadow:var(--shadow-lg),0 0 0 0.5px rgba(255,255,255,.05) inset,0 2px 0 rgba(255,255,255,.03) inset;
  transition:transform .2s var(--ios-spring),background .8s ease,box-shadow .3s;}
.player-bar:hover{box-shadow:var(--shadow-lg),0 0 0 0.5px rgba(255,255,255,.08) inset;}
.player-bar.tinted{background:color-mix(in srgb, var(--art-color, #181818) 55%, var(--glass));}
.player-bar:active{transform:scale(.98);}
.pbar-progress{position:absolute;bottom:0;left:14px;right:14px;height:2.5px;
  background:rgba(255,255,255,.1);border-radius:2px;overflow:hidden;}
.pbar-progress-fill{height:100%;background:var(--acc);width:0%;border-radius:2px;transition:width .3s linear;}
.pbar-art{width:44px;height:44px;border-radius:13px;overflow:hidden;
  background:var(--s3);flex-shrink:0;position:relative;}
.pbar-art img{width:100%;height:100%;object-fit:cover;}
.pbar-art.spin img{animation:spin 9s linear infinite;border-radius:50%;}
@keyframes spin{to{transform:rotate(360deg);}}
.pbar-info{flex:1;overflow:hidden;min-width:0;}
.pbar-title{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pbar-artist{font-size:11px;color:var(--text-dim);margin-top:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pbar-ctrl{display:flex;align-items:center;gap:2px;}
.pbar-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  color:rgba(255,255,255,.55);border-radius:50%;transition:transform .15s;}
.pbar-btn:active{transform:scale(.85);}
.pbar-play{width:40px;height:40px;border-radius:50%;background:var(--text);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  box-shadow:0 4px 16px rgba(0,0,0,.3),0 0 0 1px rgba(255,255,255,.12) inset;
  transition:transform .2s var(--ios-spring),box-shadow .2s;}
.pbar-play svg{color:var(--void);}
.pbar-play:active{transform:scale(.85);box-shadow:0 2px 8px rgba(0,0,0,.3);}

/* ═══ FULL PLAYER — iOS native modal ═══ */
.full-player{position:fixed;inset:0;
  background:radial-gradient(ellipse 130% 65% at 50% 0%,var(--art-color) 0%,var(--void) 70%);
  transition:transform .5s var(--ios-spring),background 1.2s ease;
  z-index:100;
  display:flex;flex-direction:column;transform:translateY(100%);
  overflow-y:auto;padding-bottom:24px;will-change:transform;
  -webkit-overflow-scrolling:touch;}
.full-player.open{transform:translateY(0);}
.fp-drag{width:38px;height:4px;background:var(--s4);border-radius:2px;margin:14px auto 0;}
.fp-top{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 8px;}
.fp-eyebrow{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--text-dim2);
  letter-spacing:2px;text-transform:uppercase;}
.fp-collapse{color:var(--text-dim);padding:8px;}

.fp-artwrap{padding:8px 34px;flex-shrink:0;}
.fp-art{width:100%;aspect-ratio:1;border-radius:var(--radius-xl);overflow:hidden;
  background:var(--s2);position:relative;
  box-shadow:0 50px 100px -25px rgba(0,0,0,.95),0 0 0 0.5px rgba(255,255,255,.06) inset,0 0 80px rgba(0,0,0,.5);
  transition:transform .4s var(--ios-spring),box-shadow .4s;}
.fp-art img{width:100%;height:100%;object-fit:cover;transition:opacity .25s;}
#vizCanvas{position:absolute;bottom:0;left:0;width:100%;height:64px;pointer-events:none;}
#ambientCanvas{position:absolute;inset:0;width:100%;height:100%;opacity:0;
  transition:opacity 1.2s;pointer-events:none;}
#ambientCanvas.show{opacity:.5;}
.fp-art img{position:relative;z-index:1;}
.fp-mv-badge{position:absolute;top:14px;left:14px;z-index:5;background:rgba(200,255,0,.94);
  color:#000;font-family:'JetBrains Mono',monospace;font-size:9.5px;font-weight:700;
  letter-spacing:1px;text-transform:uppercase;padding:5px 10px;border-radius:100px;display:none;}
.fp-mv-badge.show{display:block;}
.fp-mv-toggle{position:absolute;top:14px;right:14px;z-index:135;display:none;gap:2px;
  background:rgba(0,0,0,.6);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border:1px solid var(--hair);border-radius:100px;padding:4px;}
.fp-mv-toggle.show{display:flex;}
.fp-mv-btn{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:1px;
  text-transform:uppercase;color:var(--text-dim);padding:7px 13px;border-radius:100px;
  transition:all .15s;}
.fp-mv-btn.active{background:var(--acc);color:var(--void);font-weight:700;}

.fp-meta{padding:22px 26px 0;display:flex;align-items:flex-start;justify-content:space-between;gap:14px;}
.fp-title{font-family:'Bebas Neue',sans-serif;font-size:28px;letter-spacing:.5px;
  line-height:1.05;flex:1;min-width:0;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.fp-artist{font-size:13px;color:var(--text-dim);margin-top:5px;font-weight:500;}
.fp-like{width:38px;height:38px;flex-shrink:0;color:var(--text-dim);display:flex;
  align-items:center;justify-content:center;border-radius:50%;
  transition:transform .2s var(--ios-spring),color .2s;}
.fp-like:active{transform:scale(.85);}
.fp-like.liked{color:var(--danger);}
.fp-like.pop{animation:heartPop .4s var(--ios-spring);}
@keyframes heartPop{0%{transform:scale(1)}25%{transform:scale(1.35)}50%{transform:scale(.9)}100%{transform:scale(1)}}

.fp-prog{padding:22px 26px 6px;}
.fp-bar{width:100%;height:3px;background:var(--s3);border-radius:2px;position:relative;cursor:pointer;}
.fp-bar-fill{height:100%;background:var(--text);border-radius:2px;width:0%;position:relative;
  transition:width .15s linear;}
.fp-bar-fill::after{content:'';position:absolute;right:-6px;top:50%;transform:translateY(-50%);
  width:13px;height:13px;background:var(--text);border-radius:50%;
  box-shadow:0 0 8px rgba(255,255,255,.3);opacity:0;transition:opacity .2s;}
.fp-bar:hover .fp-bar-fill::after{opacity:1;}
.fp-times{display:flex;justify-content:space-between;margin-top:8px;}
.fp-time{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--text-dim2);}

.fp-ctrls{padding:6px 20px;display:flex;align-items:center;justify-content:space-between;}
.fp-c{width:44px;height:44px;display:flex;align-items:center;justify-content:center;
  color:var(--text-dim);border-radius:50%;}
.fp-c.active{color:var(--acc);}
.fp-main{width:66px;height:66px;border-radius:50%;background:var(--text);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 30px rgba(0,0,0,.4),0 0 0 1px rgba(255,255,255,.12) inset;
  transition:transform .2s var(--ios-spring),box-shadow .2s;}
.fp-main:active{transform:scale(.85);box-shadow:0 4px 16px rgba(0,0,0,.3);}
.fp-main svg{color:var(--void);}

.fp-extra{padding:14px 22px 8px;display:flex;gap:8px;overflow-x:auto;}
.fp-ext-btn{flex-shrink:0;display:flex;align-items:center;gap:6px;padding:9px 15px;
  border-radius:100px;background:rgba(255,255,255,0.05);border:0.5px solid var(--hair);
  font-size:11px;font-weight:600;color:var(--text-dim);
  transition:all .2s var(--ios-spring);}
.fp-ext-btn:active{transform:scale(.92);}
.fp-ext-btn.active{background:rgba(200,255,0,0.1);border-color:rgba(200,255,0,0.25);color:var(--acc);}

.fp-quote{margin:18px 22px 28px;padding:16px 18px;background:var(--s2);border-radius:16px;
  border-left:3px solid var(--acc);display:none;}
.fp-quote.show{display:block;}
.fp-quote-eyebrow{font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--acc);
  letter-spacing:1.5px;text-transform:uppercase;margin-bottom:8px;}
.fp-quote-text{font-size:13.5px;color:var(--text-dim);line-height:1.75;font-style:italic;}

/* ═══ LYRICS PANEL ═══ */
.lyrics-panel{position:fixed;inset:0;background:var(--void);z-index:110;
  display:flex;flex-direction:column;transform:translateY(100%);
  transition:transform .42s var(--ios-spring);will-change:transform;}
.lyrics-panel.open{transform:translateY(0);}
.lp-head{display:flex;align-items:center;justify-content:space-between;
  padding:22px 24px;border-bottom:1px solid var(--hair);flex-shrink:0;}
.lp-title{font-family:'Bebas Neue',sans-serif;font-size:22px;letter-spacing:1px;}
.lp-close{color:var(--text-dim);padding:8px;}
.lp-body{flex:1;overflow-y:auto;padding:26px;}
.lp-now{display:flex;align-items:center;gap:13px;margin-bottom:24px;}
.lp-now-art{width:50px;height:50px;border-radius:10px;overflow:hidden;background:var(--s2);flex-shrink:0;}
.lp-now-art img{width:100%;height:100%;object-fit:cover;}
.lp-now-title{font-size:14px;font-weight:700;}
.lp-now-artist{font-size:11.5px;color:var(--text-dim);margin-top:2px;}
.lrc-line{font-size:17px;line-height:1.9;color:var(--text-dim);padding:7px 0;
  cursor:pointer;transition:all .3s var(--ios-spring);border-radius:8px;}
.lrc-line.active{color:var(--text);font-size:20px;font-weight:700;
  text-shadow:0 0 20px rgba(255,255,255,0.1);}
.lrc-line.past{color:var(--text-dim2);}
.lrc-plain{font-size:16px;line-height:2.1;color:var(--text-dim);white-space:pre-wrap;font-weight:400;}
.lp-msg{text-align:center;padding:60px 20px;color:var(--text-dim);font-size:14px;}
.lp-source{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--text-dim2);margin-top:36px;}

/* ═══ EQ PAGE — iOS native settings style ═══ */
.eq-page{position:fixed;inset:0;background:var(--void);z-index:115;
  display:flex;flex-direction:column;transform:translateY(100%);
  transition:transform .42s var(--ios-spring);will-change:transform;}
.eq-page.open{transform:translateY(0);}
.eq-head{display:flex;align-items:center;justify-content:space-between;padding:22px 24px 18px;}
.eq-title{font-family:'Bebas Neue',sans-serif;font-size:26px;letter-spacing:1.5px;}
.eq-close{color:var(--text-dim);padding:8px;}
.eq-presets-wrap{padding:0 22px;}
.eq-lbl{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--text-dim2);
  letter-spacing:1.5px;text-transform:uppercase;margin-bottom:13px;}
.eq-presets{display:flex;gap:8px;overflow-x:auto;margin-bottom:28px;}
.eq-pbtn{flex-shrink:0;padding:10px 18px;border-radius:100px;background:rgba(255,255,255,0.04);
  border:0.5px solid var(--hair);font-size:12px;font-weight:600;color:var(--text-dim);
  transition:all .2s var(--ios-spring);}
.eq-pbtn:active{transform:scale(.92);}
.eq-pbtn.active{background:var(--acc);color:var(--void);border-color:var(--acc);
  box-shadow:0 2px 8px rgba(200,255,0,0.2);}
.eq-sliders-wrap{flex:1;padding:0 22px;}
.eq-sliders{display:flex;justify-content:space-between;height:200px;gap:6px;}
.eq-band{display:flex;flex-direction:column;align-items:center;gap:8px;flex:1;}
.eq-val{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--acc);}
.eq-slwrap{flex:1;display:flex;align-items:center;}
input[type=range].eq-sl{writing-mode:vertical-lr;direction:rtl;-webkit-appearance:slider-vertical;
  width:24px;height:140px;background:transparent;}
input[type=range].eq-sl::-webkit-slider-runnable-track{width:3px;background:var(--s3);border-radius:2px;}
input[type=range].eq-sl::-webkit-slider-thumb{-webkit-appearance:none;width:17px;height:17px;
  background:var(--acc);border-radius:50%;margin-left:-7px;}
.eq-band-lbl{font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--text-dim2);}
.eq-freqs{display:flex;justify-content:space-between;padding-top:10px;margin-bottom:20px;}
.eq-freq{font-family:'JetBrains Mono',monospace;font-size:8px;color:var(--text-dim2);flex:1;text-align:center;}
.eq-actions{padding:16px 22px 34px;}
.eq-reset{width:100%;padding:15px;background:rgba(255,255,255,0.04);border-radius:14px;
  font-size:13px;font-weight:600;color:var(--text-dim);border:0.5px solid var(--hair);
  transition:all .18s var(--ios-spring);}
.eq-reset:active{transform:scale(.97);background:rgba(255,255,255,0.08);}

/* ═══ ALBUM PAGE — iOS native navigation push ═══ */
.album-page{position:fixed;inset:0;background:var(--void);z-index:105;
  display:flex;flex-direction:column;transform:translateY(100%);
  transition:transform .42s var(--ios-spring);will-change:transform;}
.album-page.open{transform:translateY(0);}
.ap-head{display:flex;align-items:center;gap:14px;padding:22px 20px 18px;
  border-bottom:1px solid var(--hair);}
.ap-back{color:var(--text-dim);padding:8px;flex-shrink:0;}
.ap-thumb{width:50px;height:50px;border-radius:10px;overflow:hidden;background:var(--s2);flex-shrink:0;}
.ap-thumb img{width:100%;height:100%;object-fit:cover;}
.ap-info{flex:1;overflow:hidden;}
.ap-title{font-family:'Bebas Neue',sans-serif;font-size:19px;letter-spacing:.5px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ap-ch{font-size:11px;color:var(--text-dim);margin-top:2px;}
.ap-playall{display:flex;align-items:center;justify-content:center;gap:8px;
  margin:16px 20px;padding:14px;background:var(--text);border-radius:14px;
  color:var(--void);font-size:12.5px;font-weight:700;
  box-shadow:0 4px 16px rgba(0,0,0,.3);transition:transform .18s var(--ios-spring);}
.ap-playall:active{transform:scale(.96);}
.ap-tracks{flex:1;overflow-y:auto;padding:0 16px 20px;}
.ap-albums-wrap{padding:4px 16px 18px;}
.ap-albums-label{font-family:'Bebas Neue',sans-serif;font-size:15px;letter-spacing:.5px;
  color:var(--text-dim);margin-bottom:10px;}
.ap-albums-scroll{display:flex;gap:12px;overflow-x:auto;padding-bottom:2px;}
.ap-album-card{flex-shrink:0;width:108px;cursor:pointer;transition:transform .15s var(--ios-ease);}
.ap-album-card:active{transform:scale(.95);}
.ap-album-thumb{width:108px;height:108px;border-radius:14px;overflow:hidden;background:var(--s2);}
.ap-album-thumb img{width:100%;height:100%;object-fit:cover;}
.ap-album-title{font-size:11.5px;font-weight:600;color:var(--text-dim);margin-top:7px;
  line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.ap-loading{text-align:center;padding:50px 20px;color:var(--text-dim);font-size:13px;}
.artist-page-avatar{width:50px;height:50px;border-radius:50%;overflow:hidden;background:var(--s2);flex-shrink:0;}
.artist-page-avatar img{width:100%;height:100%;object-fit:cover;}

/* ═══ PINNED PAGE ═══ */
.pinned-page{position:fixed;inset:0;background:var(--void);z-index:106;
  display:flex;flex-direction:column;transform:translateY(100%);
  transition:transform .42s var(--ios-spring);overflow-y:auto;will-change:transform;}
.pinned-page.open{transform:translateY(0);}
.pin-head{display:flex;align-items:center;gap:14px;padding:22px 20px 18px;}
.pin-back{color:var(--text-dim);padding:8px;}
.pin-title{font-family:'Bebas Neue',sans-serif;font-size:22px;letter-spacing:1.5px;}
.pin-card{margin:0 20px 20px;border-radius:20px;overflow:hidden;background:var(--s2);
  border:1px solid var(--hair);}
.pin-art{width:100%;height:170px;background:var(--s3);position:relative;overflow:hidden;}
.pin-art img{width:100%;height:100%;object-fit:cover;}
.pin-veil{position:absolute;inset:0;background:linear-gradient(180deg,transparent 45%,rgba(0,0,0,.95) 100%);}
.pin-body{padding:16px 18px 20px;}
.pin-badge{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:8.5px;
  background:var(--text);color:var(--void);padding:3px 8px;border-radius:5px;font-weight:800;
  letter-spacing:.5px;margin-bottom:8px;}
.pin-song-title{font-family:'Bebas Neue',sans-serif;font-size:24px;letter-spacing:.5px;line-height:1;}
.pin-song-artist{font-size:12px;color:var(--text-dim);margin:4px 0 16px;}
.pin-play{display:flex;align-items:center;justify-content:center;gap:8px;
  padding:13px;background:var(--acc);border-radius:12px;color:var(--void);
  font-size:12px;font-weight:800;letter-spacing:.3px;
  box-shadow:0 4px 16px rgba(200,255,0,0.15);transition:transform .18s var(--ios-spring);}
.pin-play:active{transform:scale(.95);}

/* ═══ MODALS — iOS native bottom sheet ═══ */
.modal-veil{position:fixed;inset:0;background:rgba(0,0,0,0);z-index:300;
  display:flex;align-items:flex-end;justify-content:center;
  backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px);
  opacity:0;pointer-events:none;
  transition:opacity .3s,background .3s,backdrop-filter .3s;}
.modal-veil.open{opacity:1;pointer-events:auto;background:rgba(0,0,0,.65);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
.modal-card{background:var(--glass-thick);border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:14px 24px 34px;
  width:100%;max-width:480px;border-top:0.5px solid rgba(255,255,255,0.08);
  transform:translateY(100%);transition:transform .5s var(--ios-spring);}
.modal-veil.open .modal-card{transform:translateY(0);}
.modal-card::before{content:'';display:block;width:36px;height:5px;
  background:rgba(255,255,255,0.2);border-radius:100px;margin:0 auto 18px;}
.modal-title{font-family:'Bebas Neue',sans-serif;font-size:22px;letter-spacing:1px;margin-bottom:22px;}
.modal-close{width:100%;padding:15px;background:rgba(255,255,255,0.06);border-radius:14px;
  color:var(--text);font-size:13px;font-weight:600;margin-top:18px;border:0.5px solid var(--hair);
  transition:transform .18s var(--ios-spring),background .2s;}
.modal-close:active{transform:scale(.97);background:rgba(255,255,255,0.1);}
.sleep-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:9px;margin-bottom:16px;}
.sleep-opt{padding:13px 8px;background:rgba(255,255,255,0.04);border-radius:12px;font-size:12.5px;
  font-weight:600;border:0.5px solid var(--hair);transition:all .18s var(--ios-spring);}
.sleep-opt:active{transform:scale(.94);}
.sleep-opt.active{background:rgba(200,255,0,0.1);border-color:rgba(200,255,0,0.25);color:var(--acc);}
.sleep-status{font-size:12.5px;color:var(--text-dim);text-align:center;min-height:18px;}
.share-box{display:flex;align-items:center;gap:10px;background:rgba(255,255,255,0.04);border-radius:12px;
  padding:13px 16px;border:0.5px solid var(--hair2);}
.share-url{flex:1;font-size:11px;font-family:'JetBrains Mono',monospace;word-break:break-all;
  color:var(--text-dim);background:rgba(255,255,255,0.03);padding:6px 10px;border-radius:8px;}
.share-copy{flex-shrink:0;padding:8px 16px;background:var(--acc);border-radius:9px;
  color:var(--void);font-size:11.5px;font-weight:800;transition:transform .15s var(--ios-spring);}
.share-copy:active{transform:scale(.92);}
.share-info{font-size:12.5px;color:var(--text-dim);margin-bottom:16px;line-height:1.6;}

/* ═══ TOAST — iOS native HUD ═══ */
.toast{position:fixed;bottom:calc(var(--player) + var(--nav) + env(safe-area-inset-bottom) + 16px);left:50%;
  transform:translateX(-50%) translateY(20px) scale(.9);background:var(--glass-thick);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  color:var(--text);font-size:12.5px;font-weight:600;padding:12px 24px;border-radius:100px;opacity:0;
  transition:all .35s var(--ios-spring);pointer-events:none;white-space:nowrap;z-index:400;
  border:0.5px solid rgba(255,255,255,0.1);box-shadow:var(--shadow-lg);letter-spacing:.15px;}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0) scale(1);}

/* ═══ FLOATING MINI PLAYER (widget mengambang) ═══ */
.mini-fab{position:fixed;top:70px;right:16px;width:60px;height:60px;border-radius:50%;
  z-index:500;display:none;align-items:center;justify-content:center;
  box-shadow:0 14px 34px -8px rgba(0,0,0,.85),0 0 0 1px var(--hair);
  transform:scale(.5);opacity:0;transition:transform .4s var(--spring),opacity .3s var(--ios-ease);
  touch-action:none;cursor:grab;}
.mini-fab.show{display:flex;transform:scale(1);opacity:1;}
.mini-fab.dragging{transition:none;cursor:grabbing;}
.fab-art{position:absolute;inset:0;border-radius:50%;overflow:hidden;background:var(--s2);
  animation:fabspin 8s linear infinite;animation-play-state:paused;}
.mini-fab.playing .fab-art{animation-play-state:running;}
@keyframes fabspin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.fab-art img{width:100%;height:100%;object-fit:cover;}
.fab-play{position:absolute;inset:0;margin:auto;width:30px;height:30px;border-radius:50%;
  background:rgba(0,0,0,.55);backdrop-filter:blur(6px);display:flex;align-items:center;
  justify-content:center;color:#fff;}
.fab-close{position:absolute;top:-4px;right:-4px;width:20px;height:20px;border-radius:50%;
  background:var(--s3);border:1px solid var(--hair);color:var(--text-dim);
  display:flex;align-items:center;justify-content:center;}
.player-bar-wrap.hidden-by-float{transform:translateY(120%);transition:transform .35s var(--spring);}
.fp-ext-btn#floatBtn.active{background:var(--acc-dim);border-color:var(--acc);color:var(--acc);}
.fp-ext-btn#offlineBtn.loading{background:var(--acc-dim);border-color:var(--acc);color:var(--acc);
  animation:offlinepulse 1.1s ease-in-out infinite;}
@keyframes offlinepulse{0%,100%{opacity:1}50%{opacity:.55}}
.track-offline-del{width:32px;height:32px;flex-shrink:0;border-radius:50%;
  display:flex;align-items:center;justify-content:center;color:var(--text-dim);
  background:var(--s2);margin-left:6px;}
.track-offline-del:active{color:#ff4d4d;background:var(--s3);}

/* ═══ MICRO-INTERACTION: semua yang bisa di-tap kerasa nge-spring ═══ */
.v-card,.artist-card,.fp-c,.fp-ext-btn,.nav-item,.modal-close,.artist-page-avatar,
.fp-mv-btn,.mini-fab,.fab-play,.track-offline-del,.sec-more{
  transition:transform .15s var(--ios-ease);}
.v-card:active{transform:scale(.96);}
.artist-card:active{transform:scale(.93);}
.fp-c:active{transform:scale(.85);}
.fp-ext-btn:active{transform:scale(.93);}
.nav-item:active{transform:scale(.88);}
.modal-close:active{transform:scale(.97);}
.artist-page-avatar:active{transform:scale(.96);}
.sec-more:active{transform:scale(.92);}

.site-banner{position:sticky;top:0;left:0;right:0;z-index:600;
  background:var(--acc);color:var(--void);font-size:12.5px;font-weight:700;
  display:flex;align-items:center;justify-content:center;gap:14px;
  padding:10px 44px 10px 16px;text-align:center;
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);}
.site-banner button{position:absolute;right:12px;top:50%;transform:translateY(-50%);
  width:24px;height:24px;display:flex;align-items:center;justify-content:center;
  color:var(--void);opacity:.7;}
.site-banner button:active{opacity:1;}

@keyframes secEnter{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
#homeContent .section{animation:secEnter .45s var(--ios-spring) backwards;}
#homeContent .section:nth-child(1){animation-delay:.03s;}
#homeContent .section:nth-child(2){animation-delay:.08s;}
#homeContent .section:nth-child(3){animation-delay:.13s;}
#homeContent .section:nth-child(4){animation-delay:.18s;}
#homeContent .section:nth-child(5){animation-delay:.23s;}
#homeContent .section:nth-child(n+6){animation-delay:.28s;}

.page{display:none;}
.page.active{display:block;animation:pageIn .35s var(--ios-spring);}
@keyframes pageIn{from{opacity:0;transform:translateY(12px) scale(.995)}to{opacity:1;transform:translateY(0) scale(1)}}

@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
.sk{background:linear-gradient(90deg,rgba(255,255,255,0.04) 25%,rgba(255,255,255,0.07) 50%,rgba(255,255,255,0.04) 75%);
  background-size:200% 100%;animation:shimmer 1.6s ease-in-out infinite;border-radius:8px;}

.eqviz{display:flex;align-items:flex-end;gap:2px;height:13px;}
.eqviz .b{width:2.5px;background:var(--acc);border-radius:1px;animation:eqb .6s ease-in-out infinite alternate;}
.eqviz .b:nth-child(2){animation-delay:.15s;}.eqviz .b:nth-child(3){animation-delay:.3s;}
@keyframes eqb{from{height:3px}to{height:13px}}

.empty{text-align:center;padding:60px 24px;color:var(--text-dim2);}
.empty svg{margin-bottom:18px;opacity:.25;transform:scale(.9);
  transition:transform .5s var(--ios-spring),opacity .3s;
  filter:drop-shadow(0 0 12px var(--acc-glow));}
.empty:hover svg{opacity:.35;transform:scale(1);}
.empty p{font-size:13px;line-height:1.75;max-width:260px;margin:0 auto;letter-spacing:.1px;}

/* Search history chips */
.hist-chips{display:flex;gap:8px;flex-wrap:wrap;padding:6px 0 14px}
.hist-chip{display:flex;align-items:center;gap:6px;padding:8px 14px;background:rgba(255,255,255,0.04);
  border-radius:100px;font-size:12px;color:var(--text-dim);border:0.5px solid var(--hair2);
  transition:transform .18s var(--ios-spring),background .2s}
.hist-chip:active{transform:scale(.92);background:rgba(255,255,255,0.08);}
.hist-chip:active{transform:scale(.92)}
.hist-chip svg{opacity:.5}

/* Playlist card */
.pl-card{position:relative;border-radius:16px;overflow:hidden;background:rgba(255,255,255,0.04);
  padding:14px;display:flex;flex-direction:column;justify-content:flex-end;min-height:96px;cursor:pointer;
  transition:transform .18s var(--ios-spring),background .2s;border:0.5px solid var(--hair2);}
.pl-card:active{transform:scale(.96)}
.pl-card-icon{width:34px;height:34px;border-radius:10px;background:var(--acc-dim);
  display:flex;align-items:center;justify-content:center;color:var(--acc);margin-bottom:10px}
.pl-card-name{font-size:13px;font-weight:700}
.pl-card-count{font-size:10.5px;color:var(--text-dim2);margin-top:2px}

/* Queue rows */
.queue-row{display:flex;align-items:center;gap:12px;padding:9px 4px}
.queue-row.now-playing{background:var(--s2);border-radius:12px}
.queue-drag{color:var(--text-dim2);flex-shrink:0}

/* Playlist picker rows */
.pp-row{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;
  background:rgba(255,255,255,0.04);border-radius:12px;font-size:13px;font-weight:600;
  transition:transform .18s var(--ios-spring),background .2s;cursor:pointer;border:0.5px solid var(--hair2);}
.pp-row:active{transform:scale(.97);background:rgba(255,255,255,0.08);}
.pp-row:active{transform:scale(.97)}
.pp-row-check{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--hair);
  display:flex;align-items:center;justify-content:center}
.pp-row-check.checked{background:var(--acc);border-color:var(--acc);color:var(--void)}

/* Stats */
.stat-card{background:rgba(255,255,255,0.04);border-radius:var(--radius-md);padding:22px;margin-bottom:14px;
  border:0.5px solid var(--hair2);transition:transform .18s var(--ios-spring);}
.stat-card:active{transform:scale(.985);}
.stat-num{font-family:'Bebas Neue',sans-serif;font-size:44px;color:var(--acc);line-height:1;
  text-shadow:0 0 20px var(--acc-glow);}
.stat-label{font-size:12px;color:var(--text-dim);margin-top:4px;letter-spacing:.2px}
.stat-rank-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--hair)}
.stat-rank-row:last-child{border-bottom:none}
.stat-rank-num{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text-dim2);width:20px}
.stat-rank-name{font-size:13px;font-weight:600;flex:1}
.stat-rank-count{font-size:11px;color:var(--text-dim2)}
.empty p{font-size:13.5px;line-height:1.7;}
.credits{padding:20px 20px 4px;text-align:center;font-family:'JetBrains Mono',monospace;
  font-size:9.5px;color:var(--text-dim2);letter-spacing:.5px;}
.credits span{color:var(--acc);}

/* ═══ CIRCLE ARTIST CARDS ═══ */
.artist-scroll{display:flex;gap:16px;overflow-x:auto;padding-bottom:4px;
  -webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;}
.artist-scroll > *{scroll-snap-align:start;}
.artist-card{flex-shrink:0;width:84px;text-align:center;cursor:pointer;}
.artist-circle{width:84px;height:84px;border-radius:50%;overflow:hidden;
  background:var(--s2);margin-bottom:9px;border:0.5px solid var(--hair);
  box-shadow:0 4px 16px rgba(0,0,0,.3);transition:transform .28s var(--ios-spring),box-shadow .2s;}
.artist-card:active .artist-circle{transform:scale(.93);box-shadow:0 2px 8px rgba(0,0,0,.2);}
.artist-circle img{width:100%;height:100%;object-fit:cover;}
.artist-name{font-size:11.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.artist-sub{font-size:9.5px;color:var(--text-dim2);margin-top:1px;}

/* ═══ SECTION SKELETON ═══ */
.section-skel{padding:0 20px;margin-bottom:32px;}
.section-skel .sk{margin-bottom:16px;}

/* ═══ NAV BRAND (cuma kepake di desktop sidebar) ═══ */
.nav-brand{display:none;}
.nav-brand-mark{width:34px;height:34px;border-radius:10px;background:var(--acc);color:var(--void);
  font-family:'Bebas Neue',sans-serif;font-size:19px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.nav-brand-text{font-family:'Bebas Neue',sans-serif;font-size:20px;letter-spacing:1.5px;color:var(--text);}

/* ═══════════════════════════════════════════════════════════
   DESKTOP (≥900px) — layout sidebar + panel, bukan lagi tumpukan mobile
   ═══════════════════════════════════════════════════════════ */
@media (min-width:900px){
  body{overflow:auto;}

  #appRoot{
    display:grid;
    grid-template-columns:248px minmax(0,1fr);
    grid-template-rows:auto auto 1fr auto;
    grid-template-areas:
      "nav topbar"
      "nav cats"
      "nav scroll"
      "nav player";
    height:100dvh;
  }

  /* ── SIDEBAR ── */
  .bottom-nav{grid-area:nav;height:100%;flex-direction:column;align-items:stretch;
    justify-content:flex-start;gap:3px;padding:26px 16px;border-top:none;
    border-right:1px solid var(--hair);}
  .nav-brand{display:flex;align-items:center;gap:10px;padding:6px 12px 26px;}
  .nav-item{flex-direction:row;justify-content:flex-start;gap:14px;padding:12px 14px;
    border-radius:14px;width:100%;transition:background .18s,color .18s;}
  .nav-item:hover{background:var(--s2);color:var(--text);}
  .nav-item.active{background:var(--s2);color:var(--text);}
  .nav-dot{display:none;}
  .nav-label{font-size:12.5px;letter-spacing:.3px;}

  /* ── MAIN COLUMN ── */
  .topbar{grid-area:topbar;padding:30px 44px 6px;}
  .greet-main{font-size:34px;}
  .cat-scroll{grid-area:cats;padding:6px 44px 20px;}
  .scroll-area{grid-area:scroll;padding-bottom:24px;}
  .section{padding:0 44px;max-width:1360px;margin-inline:auto;}
  .sec-title{font-size:26px;}
  .spotlight{height:360px;}
  .spotlight-title{font-size:38px;}
  .dial-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:14px;}
  .h-scroll{gap:16px;}

  /* ── MINI PLAYER ── */
  .player-bar-wrap{grid-area:player;padding:0 44px 22px;}
  .player-bar{max-width:820px;margin:0 auto;}

  /* ── FULL PLAYER → panel mengambang, bukan takeover penuh ala mobile ── */
  .full-player{background:rgba(6,6,6,.92);backdrop-filter:blur(30px) saturate(1.3);
    -webkit-backdrop-filter:blur(30px) saturate(1.3);
    display:grid;align-content:center;justify-content:center;
    grid-template-columns:minmax(360px,440px) minmax(380px,480px);
    grid-template-rows:auto auto auto auto auto auto;
    grid-template-areas:
      "art top"
      "art meta"
      "art prog"
      "art ctrls"
      "art extra"
      "art quote";
    column-gap:52px;row-gap:2px;padding:36px;overflow-y:auto;}
  .fp-drag{display:none;}
  .fp-top{grid-area:top;padding:0 0 10px;}
  .fp-artwrap{grid-area:art;align-self:center;padding:0;}
  .fp-art{border-radius:24px;}
  .fp-meta{grid-area:meta;padding:4px 0 0;align-self:start;}
  .fp-prog{grid-area:prog;padding:20px 0 4px;align-self:start;}
  .fp-ctrls{grid-area:ctrls;justify-content:flex-start;gap:22px;padding:8px 0;align-self:start;}
  .fp-extra{grid-area:extra;padding:14px 0 0;align-self:start;flex-wrap:wrap;overflow-x:visible;}
  .fp-quote{grid-area:quote;margin:16px 0 0;align-self:start;}

  /* Widget mengambang: di desktop gak ada bottom-nav (jadi sidebar kiri),
     jadi posisinya cuma perlu ngitung tinggi player bar aja, bukan nav. */
  .guest-reminder{left:auto;right:44px;bottom:calc(var(--player) + 34px);max-width:360px;}
  .mini-fab{top:auto;bottom:calc(var(--player) + 34px);right:44px;}
}


