/* =====================================================
   SHOW MUSICAL — PREMIUM v6
   Aurora CSS real + Waveform VU moderno
   ===================================================== */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');

/* ── RESET ──────────────────────────────────────────── */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

:root {
    --accent:        #ff7a00;
    --accent2:       #00e676;
    --bg-deep:       #07070f;
    --bg-card:       rgba(255,255,255,.048);
    --bg-card-hov:   rgba(255,255,255,.08);
    --border:        rgba(255,255,255,.07);
    --border-light:  rgba(255,255,255,.14);
    --text:          #ffffff;
    --text-2:        rgba(255,255,255,.6);
    --text-3:        rgba(255,255,255,.32);
    --r-pill:        999px;
    --r-lg:          24px;
    --r-md:          14px;
    --ease:          cubic-bezier(.4,0,.2,1);
    --dur:           .32s;
    --font:          'Inter', system-ui, sans-serif;
}

html, body {
    width: 100%; height: 100%;
    font-family: var(--font);
    background: var(--bg-deep);
    color: var(--text);
    overflow: hidden;
    -webkit-font-smoothing: antialiased;
}

/* ════════════════════════════════════════════════════
   AURORA — Orbes CSS animados (SIEMPRE VISIBLES)
   ════════════════════════════════════════════════════ */
.bg-wrap {
    position: fixed;
    inset: 0;
    z-index: 0;
    overflow: hidden;
    background: var(--bg-deep);
}

/* Cada orbe es una esfera coloreada con blur */
.aurora-orb {
    position: absolute;
    border-radius: 50%;
    filter: blur(90px);
    opacity: 1;
    will-change: transform;
}

/* Orbe 1 — naranja cálido (top-left) */
.aurora-orb--1 {
    width: 65vw; height: 65vw;
    max-width: 500px; max-height: 500px;
    top: -15%;  left: -15%;
    background: radial-gradient(circle, #ff6a00 0%, #ee4f00 40%, transparent 70%);
    opacity: .55;
    animation: orbFloat1 12s ease-in-out infinite alternate;
}

/* Orbe 2 — violeta (top-right) */
.aurora-orb--2 {
    width: 70vw; height: 70vw;
    max-width: 550px; max-height: 550px;
    top: -20%; right: -20%;
    background: radial-gradient(circle, #a855f7 0%, #7c3aed 40%, transparent 70%);
    opacity: .45;
    animation: orbFloat2 15s ease-in-out infinite alternate;
}

/* Orbe 3 — verde teal (bottom-left) */
.aurora-orb--3 {
    width: 60vw; height: 60vw;
    max-width: 480px; max-height: 480px;
    bottom: 5%; left: -15%;
    background: radial-gradient(circle, #00e676 0%, #00b96b 40%, transparent 70%);
    opacity: .38;
    animation: orbFloat3 18s ease-in-out infinite alternate;
}

/* Orbe 4 — rosa/magenta (bottom-right) */
.aurora-orb--4 {
    width: 55vw; height: 55vw;
    max-width: 420px; max-height: 420px;
    bottom: -10%; right: -10%;
    background: radial-gradient(circle, #ec4899 0%, #be185d 40%, transparent 70%);
    opacity: .4;
    animation: orbFloat4 14s ease-in-out infinite alternate;
}

/* Orbe 5 — cian (centro) */
.aurora-orb--5 {
    width: 45vw; height: 45vw;
    max-width: 350px; max-height: 350px;
    top: 35%; left: 30%;
    background: radial-gradient(circle, #06b6d4 0%, #0891b2 40%, transparent 70%);
    opacity: .3;
    animation: orbFloat5 20s ease-in-out infinite alternate;
}

/* Animaciones de flotación (cada orbe con trayectoria distinta) */
@keyframes orbFloat1 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(8%, 12%) scale(1.15); }
}
@keyframes orbFloat2 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(-10%, 15%) scale(1.1); }
}
@keyframes orbFloat3 {
    from { transform: translate(0, 0) scale(1.05); }
    to   { transform: translate(12%, -10%) scale(0.9); }
}
@keyframes orbFloat4 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(-8%, -12%) scale(1.12); }
}
@keyframes orbFloat5 {
    from { transform: translate(0, 0) scale(1); }
    to   { transform: translate(6%, 8%) scale(1.2); }
}

/* Aceleración de orbes al reproducir */
.bg-wrap.playing .aurora-orb--1 { animation-duration: 7s;  opacity: .7; }
.bg-wrap.playing .aurora-orb--2 { animation-duration: 9s;  opacity: .6; }
.bg-wrap.playing .aurora-orb--3 { animation-duration: 11s; opacity: .5; }
.bg-wrap.playing .aurora-orb--4 { animation-duration: 8s;  opacity: .55; }
.bg-wrap.playing .aurora-orb--5 { animation-duration: 12s; opacity: .45; }

/* Viñeta para oscurecer bordes y asegurar legibilidad del texto */
.bg-vignette {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(ellipse 80% 40% at 50% 50%, rgba(7,7,15,.3) 0%, rgba(7,7,15,.0) 100%),
        linear-gradient(180deg,
            rgba(7,7,15,.65) 0%,
            rgba(7,7,15,.15) 30%,
            rgba(7,7,15,.15) 65%,
            rgba(7,7,15,.92) 100%
        );
    pointer-events: none;
}

/* ── APP LAYOUT ─────────────────────────────────────── */
.app {
    position: relative;
    z-index: 1;
    width: 100%;
    height: 100dvh;
    max-width: 480px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    padding: env(safe-area-inset-top,0) 0 env(safe-area-inset-bottom,0);
    overflow: hidden;
}

/* ── TOPBAR ─────────────────────────────────────────── */
.topbar {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 22px 12px;
    animation: slideDown .6s var(--ease) both;
}
.topbar-brand { display: flex; align-items: center; gap: 10px; }
.topbar-logo {
    width: 36px; height: 36px;
    border-radius: 10px;
    object-fit: contain;
    background: rgba(255,255,255,.06);
    padding: 3px;
    border: 1px solid var(--border-light);
}
.topbar-name { font-size: 1rem; font-weight: 700; letter-spacing: -.2px; }
.topbar-right { display: flex; align-items: center; gap: 10px; }

.live-pill {
    display: flex; align-items: center; gap: 6px;
    background: rgba(255,30,30,.18);
    border: 1px solid rgba(255,60,60,.35);
    color: #ff5a5a;
    font-size: .67rem; font-weight: 700; letter-spacing: 1.8px;
    padding: 5px 12px;
    border-radius: var(--r-pill);
    backdrop-filter: blur(10px);
}
.live-dot {
    width: 7px; height: 7px;
    background: #ff4444; border-radius: 50%;
    box-shadow: 0 0 6px #ff4444;
    animation: blink 1.4s ease-in-out infinite;
}

/* ── STAGE ──────────────────────────────────────────── */
.stage {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 8px 22px 0;
    gap: 16px;
    overflow: hidden;
}

/* ── ARTWORK ────────────────────────────────────────── */
.artwork-wrap {
    position: relative;
    display: flex; align-items: center; justify-content: center;
    flex-shrink: 0;
    animation: scaleIn .7s var(--ease) .1s both;
}
.artwork-aura {
    position: absolute;
    inset: -50px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255,122,0,.28) 0%, transparent 70%);
    filter: blur(24px);
    pointer-events: none;
    z-index: -1;
    animation: auraBreath 4s ease-in-out infinite;
    transition: background 2s ease;
}
@keyframes auraBreath {
    0%,100% { transform: scale(1);    opacity: .8; }
    50%      { transform: scale(1.15); opacity: 1; }
}
.artwork-ring {
    position: absolute;
    border-radius: 50%;
    border: 1px solid transparent;
    pointer-events: none;
    animation: ringPulse 4s ease-in-out infinite;
}
.artwork-ring--1 { inset: -14px; border-color: rgba(255,122,0,.25); animation-delay: 0s; }
.artwork-ring--2 { inset: -28px; border-color: rgba(255,122,0,.10); animation-delay: .7s; }
.artwork-ring.playing { animation: ringPlaying 2.4s ease-in-out infinite; }

.artwork-img-wrap {
    position: relative;
    width: 190px; height: 190px;
    border-radius: 26px; overflow: hidden;
    box-shadow:
        0 0 0 1px rgba(255,255,255,.09),
        0 20px 60px rgba(0,0,0,.65),
        0 0 80px rgba(255,122,0,.2);
    transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.artwork-img-wrap.playing {
    transform: scale(1.04);
    box-shadow:
        0 0 0 1px rgba(255,255,255,.12),
        0 24px 70px rgba(0,0,0,.7),
        0 0 110px rgba(255,122,0,.35);
}
.artwork-img {
    width: 100%; height: 100%;
    object-fit: contain;
    background: rgba(10,10,20,.95);
    display: block;
}
.artwork-img.playing { animation: slowSpin 20s linear infinite; }
.artwork-overlay {
    position: absolute; inset: 0;
    background: linear-gradient(180deg, transparent 40%, rgba(0,0,0,.3) 100%);
    pointer-events: none;
}

/* ── SONG INFO ──────────────────────────────────────── */
.song-info {
    text-align: center; width: 100%;
    animation: fadeUp .6s var(--ease) .2s both;
}
.song-label {
    font-size: .65rem; font-weight: 600;
    letter-spacing: 3px; text-transform: uppercase;
    color: var(--accent); margin-bottom: 8px; opacity: .9;
}
.song-title {
    font-size: 1.35rem; font-weight: 800;
    letter-spacing: -.5px; line-height: 1.2;
    margin-bottom: 4px;
    transition: opacity .3s;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.song-artist {
    font-size: .9rem; color: var(--text-2);
    transition: opacity .3s;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* EQ Bars */
.eq-bars {
    display: flex; justify-content: center; align-items: flex-end;
    gap: 3px; height: 18px; margin-top: 12px;
}
.eq-bars span {
    display: block; width: 3px; border-radius: 2px;
    background: linear-gradient(to top, var(--accent), #ffdd44);
    animation: eq 1s ease-in-out infinite;
}
.eq-bars span:nth-child(1){height:8px; animation-duration:.80s;animation-delay:.00s;}
.eq-bars span:nth-child(2){height:14px;animation-duration:1.1s;animation-delay:.10s;}
.eq-bars span:nth-child(3){height:10px;animation-duration:.90s;animation-delay:.20s;}
.eq-bars span:nth-child(4){height:16px;animation-duration:1.2s;animation-delay:.30s;}
.eq-bars span:nth-child(5){height:7px; animation-duration:.75s;animation-delay:.40s;}
.eq-bars span:nth-child(6){height:13px;animation-duration:1.0s;animation-delay:.50s;}
.eq-bars span:nth-child(7){height:11px;animation-duration:.85s;animation-delay:.60s;}
.eq-bars span:nth-child(8){height:15px;animation-duration:1.15s;animation-delay:.70s;}
.eq-bars.paused span {
    animation-play-state: paused;
    height: 3px !important;
    opacity: .3;
    transition: height .4s, opacity .4s;
}

/* ── VISUALIZADOR WAVEFORM ──────────────────────────── */
.visualizer-wrap {
    width: 100%; flex-shrink: 0;
    animation: fadeUp .6s var(--ease) .3s both;
    position: relative;
}

#vuMeter {
    width: 100%;
    height: 88px;
    display: block;
}

/* Label idle del VU */
.vu-idle {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
}
.vu-idle-line {
    width: 3px;
    border-radius: 2px;
    background: rgba(255,255,255,.08);
    animation: idleBar 2s ease-in-out infinite;
}
.vu-idle-line:nth-child(1){height:12px;animation-delay:0.0s;}
.vu-idle-line:nth-child(2){height:20px;animation-delay:0.1s;}
.vu-idle-line:nth-child(3){height:8px; animation-delay:0.2s;}
.vu-idle-line:nth-child(4){height:24px;animation-delay:0.3s;}
.vu-idle-line:nth-child(5){height:16px;animation-delay:0.4s;}
.vu-idle-line:nth-child(6){height:28px;animation-delay:0.5s;}
.vu-idle-line:nth-child(7){height:12px;animation-delay:0.6s;}
.vu-idle-line:nth-child(8){height:22px;animation-delay:0.7s;}
.vu-idle-line:nth-child(9){height:10px;animation-delay:0.8s;}
.vu-idle-line:nth-child(10){height:20px;animation-delay:0.9s;}
.vu-idle-line:nth-child(11){height:14px;animation-delay:1.0s;}
.vu-idle-line:nth-child(12){height:26px;animation-delay:1.1s;}
@keyframes idleBar {
    0%,100%{transform:scaleY(.5);opacity:.15;}
    50%     {transform:scaleY(1); opacity:.3; }
}
.visualizer-wrap.active .vu-idle { opacity: 0; pointer-events: none; }

/* ── PLAYER DOCK ────────────────────────────────────── */
.player-dock {
    flex-shrink: 0;
    padding: 14px 22px 18px;
    display: flex; flex-direction: column; gap: 13px;
    background: rgba(7,7,15,.62);
    backdrop-filter: blur(40px) saturate(2);
    -webkit-backdrop-filter: blur(40px) saturate(2);
    border-top: 1px solid var(--border);
    animation: slideUp .7s var(--ease) .1s both;
}

/* Wave bar */
.wave-bar {
    width: 100%; height: 2px;
    background: var(--border); border-radius: 2px; overflow: hidden;
}
.wave-bar-fill {
    height: 100%; width: 100%;
    background: linear-gradient(90deg, var(--accent), #ffcc22, var(--accent2));
    border-radius: 2px; transform-origin: left;
    animation: waveFill 7s ease-in-out infinite;
    opacity: .45;
}
.wave-bar-fill.playing { opacity: 1; }

/* Controles */
.controls-row {
    display: flex; align-items: center;
    justify-content: space-between; gap: 10px;
}
.vol-group {
    display: flex; align-items: center; gap: 8px;
    flex: 1; min-width: 0;
}
.vol-group i {
    color: var(--text-3); font-size: .85rem;
    width: 16px; text-align: center; flex-shrink: 0;
    transition: color var(--dur);
}
.vol-slider {
    flex: 1; min-width: 0;
    -webkit-appearance: none; appearance: none;
    height: 3px; border-radius: 2px;
    background: var(--border); outline: none; cursor: pointer;
    transition: height .2s;
}
.vol-slider:hover { height: 5px; }
.vol-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 14px; height: 14px; border-radius: 50%;
    background: var(--text); cursor: pointer;
    box-shadow: 0 0 0 3px rgba(255,255,255,.12);
    transition: transform .2s, background .2s;
}
.vol-slider::-webkit-slider-thumb:hover { transform: scale(1.3); background: var(--accent); }
.vol-slider::-moz-range-thumb {
    width: 14px; height: 14px; border-radius: 50%;
    background: var(--text); cursor: pointer; border: none;
}

/* Botón Play */
.play-btn {
    position: relative;
    width: 70px; height: 70px; border-radius: 50%;
    border: none; cursor: pointer;
    background: linear-gradient(145deg, #ff9a2e, #e05500);
    color: #fff; font-size: 1.45rem;
    display: flex; align-items: center; justify-content: center;
    flex-shrink: 0;
    transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
    box-shadow: 0 8px 28px rgba(255,100,0,.45);
    outline: none;
}
.play-btn-glow {
    position: absolute; inset: -6px; border-radius: 50%;
    background: radial-gradient(circle, rgba(255,122,0,.35), transparent 70%);
    opacity: 0; transition: opacity var(--dur); z-index: -1;
}
.play-btn:hover { transform: scale(1.08); }
.play-btn:hover .play-btn-glow { opacity: 1; }
.play-btn:active { transform: scale(.93); }
.play-btn.playing {
    background: linear-gradient(145deg, #33f08a, #00b84d);
    box-shadow: 0 8px 28px rgba(0,200,80,.45);
    animation: playGlow 2.8s ease-in-out infinite;
}
.play-btn.playing .play-btn-glow {
    background: radial-gradient(circle, rgba(0,230,118,.35), transparent 70%);
    opacity: 1;
    animation: glowPulse 2.8s ease-in-out infinite;
}

/* Estado */
.status-group {
    flex: 1; display: flex; align-items: center;
    justify-content: flex-end; gap: 6px;
    font-size: .72rem; color: var(--text-3); min-width: 0; text-align: right;
}
.status-group i { color: var(--accent); font-size: .78rem; }
.status-group.connected i { color: var(--accent2); animation: blink 2s infinite; }
.status-group span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ── BOTONES ACCIÓN ─────────────────────────────────── */
.action-row {
    display: flex; gap: 8px;
    justify-content: center; flex-wrap: wrap;
}
.action-btn {
    display: flex; align-items: center; gap: 7px;
    padding: 9px 18px; border-radius: var(--r-pill);
    text-decoration: none; color: var(--text);
    font-family: var(--font); font-size: .82rem; font-weight: 600;
    border: 1px solid var(--border-light);
    background: var(--bg-card);
    backdrop-filter: blur(20px);
    cursor: pointer;
    transition: transform var(--dur) var(--ease), background var(--dur), box-shadow var(--dur);
}
.action-btn:hover { transform: translateY(-2px); background: var(--bg-card-hov); }
.action-btn i { font-size: .95rem; }
.action-btn--wa   { border-color: rgba(37,211,102,.3); color: #25D366; }
.action-btn--wa:hover   { background: rgba(37,211,102,.1); box-shadow: 0 6px 20px rgba(37,211,102,.2); }
.action-btn--ps   { border-color: rgba(66,133,244,.3); color: #7ab4ff; }
.action-btn--ps:hover   { background: rgba(66,133,244,.1); box-shadow: 0 6px 20px rgba(66,133,244,.2); }
.action-btn--as   { border-color: rgba(255,255,255,.15); color: var(--text-2); }
.action-btn--as:hover   { background: rgba(255,255,255,.07); }
.action-btn--install { border-color: rgba(255,122,0,.35); color: var(--accent); }
.action-btn--install:hover { background: rgba(255,122,0,.1); box-shadow: 0 6px 20px rgba(255,122,0,.2); }

/* ── REDES SOCIALES ─────────────────────────────────── */
.socials-row { display: flex; justify-content: center; gap: 10px; }
.soc-btn {
    width: 40px; height: 40px; border-radius: 12px;
    display: flex; align-items: center; justify-content: center;
    text-decoration: none; color: var(--text-2); font-size: .95rem;
    border: 1px solid var(--border); background: var(--bg-card);
    backdrop-filter: blur(10px);
    transition: transform var(--dur) var(--ease), background var(--dur),
                color var(--dur), box-shadow var(--dur), border-color var(--dur);
}
.soc-btn:hover { transform: translateY(-3px) scale(1.07); }
.soc-fb:hover  { background: #1877F2; color: #fff; border-color: #1877F2; box-shadow: 0 8px 22px rgba(24,119,242,.4); }
.soc-ig:hover  {
    background: linear-gradient(45deg,#f09433,#e6683c,#dc2743,#cc2366,#bc1888);
    color: #fff; border-color: transparent; box-shadow: 0 8px 22px rgba(220,39,67,.4);
}
.soc-yt:hover  { background: #FF0000; color: #fff; border-color: #FF0000; box-shadow: 0 8px 22px rgba(255,0,0,.4); }
.soc-tt:hover  { background: #111; color: #69C9D0; border-color: #69C9D0; box-shadow: 0 8px 22px rgba(105,201,208,.35); }

/* ── COPYRIGHT ──────────────────────────────────────── */
.copy { text-align: center; font-size: .68rem; color: var(--text-3); letter-spacing: .3px; }

/* ── AER MULTINET BRANDING ──────────────────────────── */
.aer-branding {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    margin-top: 2px;
    opacity: .45;
    transition: opacity .3s;
}
.aer-branding:hover { opacity: .85; }
.aer-branding span {
    font-size: .62rem;
    color: var(--text-3);
    letter-spacing: .5px;
    white-space: nowrap;
}
.aer-branding-logo {
    height: 18px;
    width: auto;
    object-fit: contain;
    filter: brightness(0) invert(1);
    display: block;
}

/* ── PWA INSTALL TOAST ──────────────────────────────── */
.install-toast {
    position: fixed; bottom: -130px; left: 50%;
    transform: translateX(-50%);
    width: calc(100% - 32px); max-width: 440px;
    background: rgba(20,20,36,.94);
    backdrop-filter: blur(30px) saturate(2);
    -webkit-backdrop-filter: blur(30px) saturate(2);
    border: 1px solid rgba(255,122,0,.25);
    border-radius: var(--r-lg);
    padding: 14px 16px;
    display: flex; align-items: center; gap: 12px;
    z-index: 200;
    transition: bottom .4s var(--ease);
    box-shadow: 0 -4px 40px rgba(0,0,0,.5), 0 0 0 1px rgba(255,122,0,.1);
}
.install-toast.visible { bottom: 20px; }
.install-toast-icon {
    width: 44px; height: 44px; border-radius: 12px;
    object-fit: contain; background: rgba(255,122,0,.1);
    padding: 4px; flex-shrink: 0;
    border: 1px solid rgba(255,122,0,.2);
}
.install-toast-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.install-toast-text strong { font-size: .88rem; font-weight: 700; }
.install-toast-text span   { font-size: .75rem; color: var(--text-2); }
.install-toast-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.install-btn-yes {
    padding: 8px 16px; border-radius: var(--r-pill); border: none;
    background: linear-gradient(135deg, var(--accent), #e05500);
    color: #fff; font-size: .82rem; font-weight: 600; cursor: pointer;
    transition: transform .2s, box-shadow .2s;
    box-shadow: 0 4px 14px rgba(255,100,0,.35);
}
.install-btn-yes:hover { transform: scale(1.04); box-shadow: 0 6px 20px rgba(255,100,0,.5); }
.install-btn-no {
    width: 30px; height: 30px; border-radius: 50%;
    border: 1px solid var(--border-light); background: var(--bg-card);
    color: var(--text-2); font-size: 1.1rem; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    transition: background .2s, color .2s; line-height: 1;
}
.install-btn-no:hover { background: rgba(255,255,255,.1); color: var(--text); }

/* ── BANNERS ────────────────────────────────────────── */
.banners-float {
    position: fixed; bottom: 24px; left: 50%;
    transform: translateX(-50%); z-index: 100;
    width: calc(100% - 40px); max-width: 440px;
}
.banner-item {
    display: block; position: relative;
    border-radius: var(--r-md); overflow: hidden;
    border: 1px solid var(--border-light);
    box-shadow: 0 16px 48px rgba(0,0,0,.6);
    animation: fadeUp .5s var(--ease) both;
}
.banner-hidden { display: none; }
.banner-item img { width: 100%; display: block; }
.banner-close {
    position: absolute; top: 8px; right: 8px;
    width: 28px; height: 28px; border-radius: 50%;
    border: none; background: rgba(0,0,0,.5); color: #fff;
    font-size: 1.1rem; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    backdrop-filter: blur(6px); transition: background .2s; line-height: 1;
}
.banner-close:hover { background: rgba(0,0,0,.8); }

/* ════════════════════════════════════════════════════
   ANIMACIONES GLOBALES
   ════════════════════════════════════════════════════ */
@keyframes slideDown { from{opacity:0;transform:translateY(-16px)} to{opacity:1;transform:translateY(0)} }
@keyframes slideUp   { from{opacity:0;transform:translateY(20px)}  to{opacity:1;transform:translateY(0)} }
@keyframes fadeUp    { from{opacity:0;transform:translateY(14px)}  to{opacity:1;transform:translateY(0)} }
@keyframes scaleIn   { from{opacity:0;transform:scale(.88)}        to{opacity:1;transform:scale(1)} }
@keyframes blink     { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.4;transform:scale(.7)} }
@keyframes eq        { 0%,100%{transform:scaleY(.5)} 50%{transform:scaleY(1.3)} }
@keyframes slowSpin  { to{transform:rotate(360deg)} }
@keyframes ringPulse { 0%,100%{opacity:.6;transform:scale(1)} 50%{opacity:1;transform:scale(1.03)} }
@keyframes ringPlaying{ 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.4;transform:scale(1.08)} }
@keyframes playGlow  {
    0%,100%{ box-shadow:0 0 0 0 rgba(0,200,80,.3),0 8px 28px rgba(0,200,80,.45); }
    50%    { box-shadow:0 0 0 14px rgba(0,200,80,0),0 8px 28px rgba(0,200,80,.45); }
}
@keyframes glowPulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.55;transform:scale(1.15)} }
@keyframes waveFill  { 0%{transform:scaleX(.15)} 50%{transform:scaleX(.85)} 100%{transform:scaleX(.15)} }

/* ── RESPONSIVE ─────────────────────────────────────── */
@media (min-width:481px) {
    .app { border-left:1px solid var(--border); border-right:1px solid var(--border); }
    .artwork-img-wrap { width: 220px; height: 220px; }
    .song-title { font-size: 1.55rem; }
    #vuMeter { height: 82px; }
}
@media (max-width:360px) {
    .artwork-img-wrap { width: 150px; height: 150px; border-radius: 20px; }
    .song-title  { font-size: 1.1rem; }
    .play-btn    { width: 60px; height: 60px; font-size: 1.25rem; }
    .action-btn  { padding: 8px 12px; font-size: .78rem; }
    .player-dock { gap: 10px; padding: 10px 14px 14px; }
}
@media (max-height:600px) {
    .artwork-img-wrap { width: 100px; height: 100px; }
    .artwork-ring--2  { display: none; }
    .stage { gap: 8px; }
    #vuMeter { height: 40px; }
    .player-dock { gap: 8px; }
    .eq-bars, .artwork-aura { display: none; }
}
::-webkit-scrollbar { width: 0; }
