/* ============================================================================
   DJ KMad — site.css  (shared shell for every page)
   Extracted from the LOCKED design reference design/concepts/concept-6.html.
   Obsidian glass + subtle warm neon. Aesthetic is locked; do not cheapen it.
   Additions on top of concept-6:
     (a) readability text-size bumps
     (b) full mobile responsiveness (<=640px)
     (c) body.page layout mode for scrolling content pages
   ========================================================================== */

/* M13 — self-hosted fonts (formerly Google Fonts): kills the third-party CSS
   fetch + connection on the critical path. Same woff2 files Google served;
   unicode-range means visitors only download the subsets they use. */
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/plexmono-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/plexmono-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/plexmono-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/plexmono-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/inter-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/inter-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/inter-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('fonts/inter-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/inter-600-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/inter-600-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/montserrat-600-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:600;font-display:swap;src:url('fonts/montserrat-600-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:800;font-display:swap;src:url('fonts/montserrat-800-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:800;font-display:swap;src:url('fonts/montserrat-800-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:900;font-display:swap;src:url('fonts/montserrat-900-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Montserrat';font-style:normal;font-weight:900;font-display:swap;src:url('fonts/montserrat-900-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}

:root{
  /* minimum breathing room between content and any viewport edge — raise here, never per-page */
  --edge-safe:clamp(32px,3vw,56px);
  --void:#0A0710; --void-2:#0E0A18;
  --ink:#F6F1FB; --dim:#B6A9D0; --mute:#8E80AD;
  --magenta:#FF2E88; --violet:#A855F7; --cyan:#22D3EE;
  --line:rgba(214,196,255,.12);
  --sans:'Inter',system-ui,sans-serif; --disp:'Montserrat',system-ui,sans-serif; --mono:'IBM Plex Mono',monospace;
  --reach:360px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;overflow-x:hidden;max-width:100vw}
/* fewer awkward line breaks: balance short headings/titles, pretty-wrap body text */
h1,h2,h3,h4,.frame-title,.tagline,.sec-title,.cat-head h2, .lede, .about-lede, .mf-title, .c-email, .frame-foot .lk, .frame-foot .lk-sub, .about-cta .line {text-wrap:balance}
p,.frame-intro,.lead,.c-note,.disc,.fine{text-wrap:pretty}
/* keep impactful small tags from breaking mid-phrase */
.eyebrow .seg, .latest, .c-go, .mf-kick, .mf-genre, .cat-head .count, .latest em, .icon-link, .stat, .badge { white-space: nowrap; }
/* body font bumped 15px -> 16px for comfortable reading */
body{background:var(--void, #0A0710);color:var(--ink, #F6F1FB);font-family:var(--sans, 'Inter',system-ui,sans-serif);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;height:100svh;overflow:hidden;cursor:default;text-wrap:pretty}
a{color:inherit;text-decoration:none}
/* only actually-clickable things get the pointer; nothing shows the text I-beam */
a,button,input,select,label,summary,[role="button"],[onclick]{cursor:pointer}

/* ---------- smooth neon aurora (diffuse, low-opacity, slow) — the subtle neon ---------- */
.aurora{position:fixed;inset:-25%;z-index:-2;pointer-events:none;filter:blur(60px);opacity:.9}
.aurora span{position:absolute;border-radius:50%;mix-blend-mode:screen;opacity:.5}
.a1{width:60vw;height:60vw;left:6%;top:2%;background:radial-gradient(circle,var(--magenta, #FF2E88),transparent 62%);animation:float1 26s ease-in-out infinite alternate}
.a2{width:66vw;height:66vw;right:2%;top:14%;background:radial-gradient(circle,var(--violet, #A855F7),transparent 62%);animation:float2 32s ease-in-out infinite alternate}
.a3{width:50vw;height:50vw;left:28%;bottom:-6%;background:radial-gradient(circle,var(--cyan, #22D3EE),transparent 62%);opacity:.32;animation:float3 30s ease-in-out infinite alternate}
@keyframes float1{to{transform:translate3d(10%,8%,0) scale(1.15)}}
@keyframes float2{to{transform:translate3d(-8%,10%,0) scale(1.1)}}
@keyframes float3{to{transform:translate3d(6%,-8%,0) scale(1.2)}}
.grain{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.045;mix-blend-mode:overlay;
  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='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.vignette{position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(120% 100% at 50% 40%,transparent 45%,rgba(10,7,16,.7) 100%)}

/* ---------- reusable glass ---------- */
.glass{--lit:0;position:relative;overflow:hidden;
  background:linear-gradient(160deg,rgba(255,255,255,.06),rgba(255,255,255,.012) 45%,rgba(0,0,0,.12));
  border:1px solid rgba(255,255,255,calc(.10 + .12*var(--lit)));
  border-radius:20px;backdrop-filter:blur(22px) saturate(1.3);-webkit-backdrop-filter:blur(22px) saturate(1.3);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),inset 0 -1px 0 rgba(0,0,0,.35),
    0 30px 80px rgba(0,0,0,.5),
    0 0 calc(40px*var(--lit)) rgba(255,46,136,calc(.18*var(--lit)));
  transition:border-color .25s,box-shadow .25s,transform .3s}

/* soft specular that follows the cursor across the glass */
.glass::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(260px 260px at var(--mx,50%) var(--my,-15%),rgba(226,216,255,.10),transparent 62%);
  opacity:calc(.15 + .85*var(--lit));mix-blend-mode:screen;transition:opacity .3s}

/* ---------- nav (fixed top, identical on every page) ---------- */
/* mono label bumped 11px -> 12px for legibility */
nav{position:fixed;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:clamp(24px,3vh,48px) clamp(24px,2.6vw,48px);
  font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim, #B6A9D0)}
/* nav links: color shift + a gentle underline-slide (grows from the left on direct :hover) */
nav a{transition:color .2s}
nav a, .frame-foot a, footer.strip a { display: inline-block; padding: 13px; margin: -13px; position: relative; z-index: 10; }
@media (hover:hover){nav a:hover{color:var(--ink, #F6F1FB)}}
nav .nav-links a{position:relative}
nav .nav-links a::after{content:'';position:absolute;left:0;right:0;bottom:-5px;height:1px;
  background:linear-gradient(90deg,var(--magenta, #FF2E88),var(--violet, #A855F7));border-radius:1px;
  transform:scaleX(0);transform-origin:left;transition:transform .28s cubic-bezier(.2,.7,.2,1)}
@media (hover:hover){nav .nav-links a:hover::after{transform:scaleX(1)}}
/* brand wordmark keeps its authored casing ("DJ KMad") — exempt from the nav's uppercase transform */
nav .brand{color:rgba(255,255,255,0.75);font-weight:500;letter-spacing:.16em;text-transform:none;transition:color .2s,text-shadow .3s,opacity .2s;}
@media (hover:hover){nav .brand:hover{color:var(--ink, #F6F1FB);text-shadow:0 0 18px rgba(255,46,136,.5)}}
nav .nav-links{display:flex;align-items:center;flex-wrap:wrap;gap:32px}
/* body.page nav backdrop removed - nav is now transparent until .scrolled kicks in */

/* ---------- centered hero stage (landing) ---------- */
.hero{height:100svh;display:flex;align-items:center;justify-content:center;padding:96px 24px 100px;text-align:center}
.stage{width:min(90vw,860px);padding:clamp(44px,7.5vh,72px) clamp(24px,5vw,64px);display:flex;flex-direction:column;align-items:center;gap:clamp(24px,4vh,44px)}
.stage .logo{margin:-64px -64px}
/* premium light: a soft drifting source (barely moving; felt-not-seen) */
.light{position:fixed;inset:0;z-index:-2;pointer-events:none;overflow:hidden}
.light .src{position:absolute;width:82vw;height:82vw;right:-10%;top:-24%;border-radius:50%;
  background:radial-gradient(circle,rgba(224,210,255,.15),rgba(224,210,255,.05) 40%,transparent 64%);
  filter:blur(24px);animation:srcdrift 46s ease-in-out infinite alternate}
@keyframes srcdrift{to{transform:translate(-8%,5%) scale(1.12)}}
.eyebrow{font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.28em;text-transform:uppercase;color:var(--dim, #B6A9D0)}
.eyebrow b{color:var(--magenta, #FF2E88);font-weight:500}
.eyebrow:has(.seg) b{margin:0 .34em}
.logo{width:min(70vw,560px);height:auto;display:block; padding:64px; box-sizing:content-box;
  filter:drop-shadow(0 0 24px rgba(255,46,136,.18)) drop-shadow(0 0 48px rgba(168,85,247,.13))}
.logo .stroke{fill:none;stroke:var(--ink, #F6F1FB)}
.logo .fill{fill:var(--ink, #F6F1FB)}
.logo .cut{fill:var(--void, #0A0710);stroke:var(--void, #0A0710)}
.tagline{font-family:var(--disp);font-weight:600;font-size:clamp(22px,3vw,33px);line-height:1.2;letter-spacing:-.01em}
.tagline .em{background:linear-gradient(100deg,var(--magenta, #FF2E88),var(--violet, #A855F7) 50%,var(--cyan, #22D3EE) 78%,var(--magenta, #FF2E88));
  background-size:220% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
  animation:flow 12s ease-in-out infinite}
@keyframes flow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
/* interactive = clean :hover engage/disengage (NOT proximity-lit, so it never sticks) */
.cta{margin-top:0;display:inline-flex;align-items:center;gap:12px;font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:13px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink, #F6F1FB);border-radius:999px;padding:16px 32px;
  border:1px solid rgba(255,255,255,.14);
  background:linear-gradient(160deg,rgba(255,255,255,.08),rgba(0,0,0,.14));backdrop-filter:blur(16px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
  transition:border-color .25s ease,box-shadow .25s ease,transform .25s ease; min-height: 48px;}
@media (hover:hover){.cta:hover{transform:translateY(-2px);border-color:rgba(255,46,136,.55);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 0 32px rgba(255,46,136,.38)}}
.cta .dot{width:8px;height:8px;border-radius:99px;background:linear-gradient(var(--magenta, #FF2E88),var(--violet, #A855F7));box-shadow:0 0 12px var(--magenta, #FF2E88)}
.scrollcue{position:absolute;bottom:32px;left:50%;transform:translateX(-50%);font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;
  letter-spacing:.24em;text-transform:uppercase;color:var(--mute, #8E80AD);animation:bob 2.6s ease-in-out infinite}
/* landing cue is a phones-only affordance (desktop landing never scrolls) — see <=900 block */
.hero .scrollcue{display:none;pointer-events:none;transition:opacity .3s}
@keyframes bob{0%,100%{transform:translate(-50%,0);opacity:.5}50%{transform:translate(-50%,8px);opacity:1}}

/* logo ignition on hover (light strike) */
@keyframes ignite{0%,100%{filter:drop-shadow(0 0 24px rgba(255,46,136,.18)) drop-shadow(0 0 48px rgba(168,85,247,.13))}
  32%{filter:drop-shadow(0 0 48px rgba(255,46,136,.6)) drop-shadow(0 0 96px rgba(168,85,247,.45)) drop-shadow(0 0 48px rgba(34,211,238,.36))}}
.stage:hover .logo{animation:ignite 1.2s ease-out}

/* latest-drop chip in hero — bumped 11px -> 12px */
.latest{display:inline-flex;align-items:center;gap:12px;margin-top:0;font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--dim, #B6A9D0);padding:8px 16px;border-radius:999px;
  border:1px solid var(--line, rgba(214,196,255,.12));background:rgba(255,255,255,.03);transition:color .2s,border-color .2s,background .2s; min-height: 48px;}
@media (hover:hover){.latest:hover{color:var(--ink, #F6F1FB);border-color:rgba(255,46,136,.45);background:rgba(255,46,136,.06)}}
.latest em{color:var(--ink, #F6F1FB);font-style:normal;font-weight:600;letter-spacing:.1em;text-transform:uppercase}
.latest .sep{color:var(--mute, #8E80AD);opacity:.55}
.latest .arr{color:var(--magenta, #FF2E88)}
.latest .pulse{width:8px;height:8px;border-radius:99px;background:var(--magenta, #FF2E88);box-shadow:0 0 12px var(--magenta, #FF2E88);animation:pulse 2.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}

/* ---------- shared centered content primitives (reused by content pages) ---------- */
.wrap{max-width:1080px;margin:0 auto;padding:0 24px}
section.blk{padding:96px 0;text-align:center}
.sec-head{font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.24em;text-transform:uppercase;color:var(--dim, #B6A9D0);margin-bottom:12px}
.sec-title{font-family:var(--disp);font-weight:800;font-size:clamp(24px,4vw,48px);letter-spacing:-.02em;margin-bottom:48px}
.sec-title .em{background:linear-gradient(100deg,var(--magenta, #FF2E88),var(--violet, #A855F7));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}

.disco{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px}
.card{--lit:0;padding:0;overflow:hidden;text-align:left;display:flex;flex-direction:column;min-height: 48px;}
.card .cover{aspect-ratio:1/1;position:relative;overflow:hidden;
  background:linear-gradient(150deg,color-mix(in srgb,var(--hue) 55%,var(--void-2, #0E0A18)),var(--void, #0A0710))}
.card .cover::after{content:'';position:absolute;inset:0;
  background:radial-gradient(90% 80% at 25% 15%,color-mix(in srgb,var(--hue) 70%,transparent),transparent 64%);
  opacity:calc(.5 + .5*var(--lit));transition:opacity .25s;mix-blend-mode:screen}
.card .cvtxt{position:absolute;left:16px;bottom:16px;font-family:var(--disp);font-weight:900;font-size:48px;color:rgba(255,255,255,.9);mix-blend-mode:overlay}
.card .meta{padding:16px}
.card .t{font-family:var(--disp);font-weight:600;font-size:16px}
.card .g{font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim, #B6A9D0);margin-top:4px}
.h-m{--hue:var(--magenta, #FF2E88)}.h-v{--hue:var(--violet, #A855F7)}.h-c{--hue:var(--cyan, #22D3EE)}

.about{max-width:720px;margin:0 auto;padding:32px 48px}
.about .lede{font-family:var(--disp);font-weight:600;font-size:clamp(20px,2.6vw,28px);line-height:1.35}
.about .lede .em{background:linear-gradient(100deg,var(--magenta, #FF2E88),var(--violet, #A855F7));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.about p{color:var(--dim, #B6A9D0);margin-top:16px}

/* ---------- full footer (content pages) ---------- */
footer{padding:48px 24px;text-align:center;font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.1em;color:var(--mute, #8E80AD)}
footer a{color:var(--dim, #B6A9D0); min-height: 48px;}
@media (hover:hover){footer a:hover{color:var(--magenta, #FF2E88)}}
footer .lk{display:flex;gap:24px;justify-content:center;text-transform:uppercase;letter-spacing:.14em}
footer .disc{max-width:660px;margin:24px auto 0;font-family:var(--sans, 'Inter',system-ui,sans-serif);font-size:13px;line-height:1.7;color:var(--mute, #8E80AD);text-transform:none;letter-spacing:normal}
footer .disc p{margin-top:12px}
footer .disc a{color:var(--dim, #B6A9D0);text-decoration:underline;text-underline-offset:2px}
@media (hover:hover){footer .disc a:hover{color:var(--magenta, #FF2E88)}}
footer .fine{margin-top:24px;font-size:12px;letter-spacing:.08em;color:var(--mute, #8E80AD)}
footer .fine a{color:var(--mute, #8E80AD)}
@media (hover:hover){footer .fine a:hover{color:var(--dim, #B6A9D0)}}

/* fixed no-scroll landing: minimal legal strip — bumped 11px -> 12px */
footer.strip{position:fixed;left:0;right:0;bottom:0;z-index:15;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 16px;
  padding:10px 32px;font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.07em;color:var(--mute, #8E80AD);
  /* F7: clear the home-bar on notched phones; max() => identical on desktop (inset 0) */
  padding-bottom:max(10px,env(safe-area-inset-bottom));
  background:linear-gradient(0deg,rgba(8,7,16,.72),transparent);backdrop-filter:blur(8px)}
/* rows stay one text-line tall; the 44pt+ touch target comes from padding + negative margin (same trick as the nav) */
footer.strip a{color:var(--mute, #8E80AD);transition:color .2s;padding:15px 12px;margin:-15px -12px;position:relative;z-index:10;}
@media (hover:hover){footer.strip a:hover{color:var(--magenta, #FF2E88)}}
footer.strip .s-links{text-transform:uppercase;letter-spacing:.14em;white-space:nowrap;flex:1;text-align:left}
footer.strip .s-legal{text-align:center;min-width:220px;white-space:normal; line-height:1.4; text-wrap:balance; padding: 0 16px}
footer.strip .s-legal a{color:inherit;display:inline-block;padding:15px 4px;margin:-15px -4px;transition:color .2s;}
@media (hover:hover){footer.strip .s-legal a:hover{color:var(--magenta, #FF2E88)}}
footer.strip .s-policy{width:100%;order:-1;white-space:nowrap;text-align:center; display: flex; gap: 16px; justify-content: center;}
footer.strip .s-fine{white-space:nowrap;flex:1;text-align:right}

/* ============================================================================
   body.page — SCROLLING content-page layout mode (releases / about / legal)
   Fixed top nav, content flows in a comfortable column, full footer at bottom.
   Reuses every glass / neon / type token above.
   ========================================================================== */
body.page{height:auto;min-height:100svh;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column}
body.page .page-main{flex:1 0 auto;width:100%;max-width:780px;margin:0 auto;padding:128px 24px 80px}
body.page footer{flex-shrink:0}

/* ============================================================================
   .split — FIXED-FRAME + SCROLLING-PANE content-page layout
   Desktop: the PAGE itself does not scroll. Fixed top nav, then a .split
   region that fills the rest of 100svh: a fixed LEFT .frame (does not scroll —
   eyebrow + big gradient title + intro, with a compact legal bit pinned to its
   bottom) and a RIGHT .pane (scrolls internally — the page's main content).
   The no-scroll lock is scoped to body.page:has(.split), so any legacy page
   still using .page-main keeps its normal document scroll.

   Canonical markup a content page copies:
     <body class="page">
       …ambient bg layers… <nav>…</nav>
       <div class="split">
         <aside class="frame">
           <div class="frame-top">
             <div class="eyebrow">…</div>
             <h1 class="frame-title">Title <span class="em">accent</span></h1>
             <p class="frame-intro">One short context line.</p>
           </div>
           <div class="frame-foot"> …compact legal / links… </div>
         </aside>
         <main class="pane"> …the page's scrolling content… </main>
       </div>
     </body>
   ========================================================================== */
body.page:has(.split){height:100svh;overflow:hidden;display:block}

.split{position:relative;display:grid;grid-template-columns:clamp(300px,36vw,460px) 1fr;
  height:100svh;padding-top:clamp(64px,7vh,96px)}

/* LEFT: fixed frame — never scrolls */
.frame{position:relative;min-height:0;overflow:hidden;display:flex;flex-direction:column;
  justify-content:space-between;gap:24px;
  padding:clamp(24px,3.4vw,48px) clamp(24px,2.6vw,48px) var(--edge-safe, clamp(32px,3vw,56px));
  container-type:inline-size}
.frame::after{content:"";position:absolute;top:clamp(24px,3.4vw,48px);bottom:128px;right:0;width:1px;background:var(--line, rgba(214,196,255,.12));z-index:-1}
.frame .eyebrow{margin-bottom:16px;display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px}
@container (max-width: 460px) {
  .frame .eyebrow { flex-direction: column; align-items: flex-start; gap: 6px; width: fit-content; }
  .frame .eyebrow b { display: none; }
  .frame .eyebrow .seg { font-size: 11px; }
  .frame .eyebrow .seg:not(:last-child) { border-bottom: 1px solid var(--line, rgba(214,196,255,.12)); padding-bottom: 6px; align-self: stretch; }
}
.frame-title{font-family:var(--disp);font-weight:800;font-size:clamp(34px,4vw,60px);
  line-height:1.02;letter-spacing:-.02em;color:var(--ink, #F6F1FB)}
.frame-title .em{background:linear-gradient(100deg,var(--magenta, #FF2E88),var(--violet, #A855F7) 55%,var(--cyan, #22D3EE));
  background-size:220% auto;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
  animation:flow 12s ease-in-out infinite}
.frame-intro{color:var(--dim, #B6A9D0);margin-top:18px;font-size:16px;line-height:1.6;max-width:40ch}
.frame-foot{margin-top:auto;font-family:var(--mono, 'IBM Plex Mono',monospace);font-size:12px;letter-spacing:.08em;
  color:var(--mute, #8E80AD);border-top:1px solid var(--line, rgba(214,196,255,.12));padding-top:18px;text-wrap:balance;
  display:flex;flex-direction:column;gap:12px}
.frame-foot .lk{display:flex;flex-wrap:wrap;gap:16px;text-transform:uppercase;letter-spacing:.14em}
.frame-foot .lk-sub{display:flex;flex-wrap:wrap;gap:16px;text-transform:uppercase;letter-spacing:.12em;font-size:10px;opacity:.6}
.frame-foot a{color:var(--mute, #8E80AD);transition:color .2s}
@media (hover:hover){.frame-foot a:hover{color:var(--magenta, #FF2E88)}}
.frame-foot .copy{margin:0}
.frame-foot .copy a{color:inherit;display:inline;padding:0;margin:0;transition:color .2s}
@media (hover:hover){.frame-foot .copy a:hover{color:var(--magenta, #FF2E88)}}

/* RIGHT: scrolling pane — the only thing that scrolls on desktop */
.pane{position:relative;min-height:0;overflow-y:auto;overflow-x:hidden;
  padding:clamp(32px,3.4vw,48px) clamp(24px,3.2vw,48px) clamp(88px,8vw,112px);
  scrollbar-width:thin;scrollbar-color:rgba(168,85,247,.5) transparent;
  -webkit-overflow-scrolling:touch;
  /* top/bottom fade so it unmistakably reads as a scroll area; bottom padding stays
     larger than the fade so the last line is never dimmed at scroll end */
  -webkit-mask:linear-gradient(180deg,transparent 0,black 26px,black calc(100% - 48px),transparent 100%);
  mask:linear-gradient(180deg,transparent 0,black 26px,black calc(100% - 48px),transparent 100%)}

/* short windows: the fixed left frame must still fit ALL its content above --edge-safe.
   Tighten padding, gaps, and scaling to prevent unwanted scroll/clipping. */
@media (max-height:860px){
  .frame{gap:12px; padding-top:20px; padding-bottom:44px}
  .frame .glass.note{padding:10px 12px; margin-top:12px}
  .frame .glass.note h3{font-size:14px; margin-bottom:4px}
  .frame .glass.note p{font-size:12px; line-height:1.45}
  .frame-title{font-size:clamp(28px, 3.2vw, 44px)}
  .frame-intro{margin-top:12px; font-size:14px; line-height:1.5}
  .frame .updated{margin-top:10px}
  .frame-foot{gap:6px;padding-top:10px}
  .frame-foot .lk, .frame-foot .lk-sub{gap:10px}
}
/* genuinely short windows (<740px): safety valve — the frame scrolls internally
   rather than clipping its foot or shrinking the identity. */
@media (max-height:740px){
  .frame{overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(168,85,247,.35) transparent;-webkit-overflow-scrolling:touch}
}
/* pane scroll stays in the pane — no chaining/rubber-band leak into the page */
.pane{overscroll-behavior:contain}
/* on-brand thin scrollbar (faint violet thumb) */
.pane::-webkit-scrollbar{width:10px}
.pane::-webkit-scrollbar-track{background:transparent}
.pane::-webkit-scrollbar-thumb{background-color:rgba(168,85,247,.42);
  border:3px solid transparent;background-clip:padding-box;border-radius:999px;transition:background-color .25s}
.pane::-webkit-scrollbar-thumb:hover{background-color:rgba(168,85,247,.72)}

/* content-link underline-slide inside the pane (grows on direct :hover) */
.pane p a,.pane li a{color:var(--dim, #B6A9D0);text-decoration:none;
  background-image:linear-gradient(var(--magenta, #FF2E88),var(--magenta, #FF2E88));
  background-size:0% 1px;background-position:0 100%;background-repeat:no-repeat;
  transition:background-size .28s cubic-bezier(.2,.7,.2,1),color .2s}
@media (hover:hover){.pane p a:hover,.pane li a:hover{color:var(--ink, #F6F1FB);background-size:100% 1px}}

/* clickable glass cards/buttons: soft lift + border-glow on DIRECT :hover only */
@media (hover:hover){a.glass:hover,button.glass:hover{transform:translateY(-3px);border-color:rgba(255,46,136,.4);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 30px 80px rgba(0,0,0,.5),0 0 34px rgba(255,46,136,.28)}}

/* a11y: tasteful violet focus ring for keyboard users */
a:focus-visible,button:focus-visible,[role="button"]:focus-visible,summary:focus-visible,
input:focus-visible,select:focus-visible{outline:2px solid rgba(168,85,247,.75);outline-offset:3px;border-radius:8px}
/* readable content defaults inside the column */
.page-main h1{font-family:var(--disp);font-weight:800;font-size:clamp(30px,5vw,52px);letter-spacing:-.02em;line-height:1.06;margin-bottom:6px}
.page-main .eyebrow{margin-bottom:14px}
.page-main h2{font-family:var(--disp);font-weight:700;font-size:clamp(20px,3vw,28px);letter-spacing:-.01em;margin:40px 0 10px}
.page-main h3{font-family:var(--disp);font-weight:600;font-size:clamp(17px,2.2vw,21px);margin:28px 0 8px}
.page-main p{color:var(--dim, #B6A9D0);margin-top:14px}
.page-main ul,.page-main ol{color:var(--dim, #B6A9D0);margin:14px 0 0;padding-left:22px}
.page-main li{margin-top:8px}
.page-main a{color:var(--dim, #B6A9D0);text-decoration:underline;text-underline-offset:2px}
@media (hover:hover){.page-main a:hover{color:var(--magenta, #FF2E88)}}
.page-main .lead{font-family:var(--disp);font-weight:600;font-size:clamp(20px,2.6vw,27px);line-height:1.35;color:var(--ink, #F6F1FB)}
.page-main .glass{padding:28px 30px;margin-top:24px}

/* ---------- reveal-in ---------- */
.reveal{opacity:0;transform:translateY(16px);animation:up 1s cubic-bezier(.2,.7,.2,1) forwards}
@keyframes up{to{opacity:1;transform:none}}

/* ============================================================================
   <=900px: collapse .split to a single column and let the PAGE scroll normally.
   Frame stacks above the pane; the pane fade + internal scroll are removed.
   ========================================================================== */
@media (max-width:900px){
  body.page:has(.split){height:auto;min-height:100svh;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column}
  .split{position:static;display:flex;flex-direction:column;height:auto;flex:1 0 auto;
    padding-top:clamp(88px,14vh,104px)}
  .frame{display:contents}
  .frame-top{order:1;padding:0 24px 26px;max-width:820px;margin:0 auto;width:100%;border-bottom:1px solid var(--line, rgba(214,196,255,.12))}
  .pane{order:2;overflow:visible;-webkit-mask:none;mask:none;max-width:820px;margin:0 auto;width:100%;
    padding:32px 24px 64px}
  .frame-foot{order:3;padding:22px 24px 64px;max-width:820px;margin:0 auto;width:100%;text-align:center}
  
  footer.strip{position:static;background:none;backdrop-filter:none;display:flex;flex-direction:column;gap:clamp(8px,2vh,24px);padding:clamp(16px,3vh,32px) 16px clamp(16px,4vh,40px);text-align:center;font-size:11px}
  footer.strip .s-links{order:1; text-align:center}
  footer.strip .s-policy{order:2}
  footer.strip .s-fine{order:3; text-align:center}
  footer.strip .s-legal{order:4;min-width:0}

  /* M1: the static strip sits BELOW the 100svh hero, but the landing body was
     overflow:hidden — the strip (streaming links, Terms/Privacy/Copyright, the
     takedown contact) was unreachable on phones. Let the landing scroll: the first
     screen is still the full-viewport hero; a swipe reveals the strip. */
  body:not(.page){height:auto;min-height:100svh;overflow:hidden auto}
  footer.strip{padding-bottom:max(clamp(16px,4vh,40px),env(safe-area-inset-bottom))}

  /* whisper scroll cue at the hero's fold line; fades as soon as scrolling starts
     (rides the existing nav.scrolled toggle — nav and .hero are body siblings) */
  .hero .scrollcue{display:block}
  nav.scrolled ~ .hero .scrollcue{animation:none;opacity:0}
}

/* ============================================================================
   Full mobile responsiveness (<=640px): landing scales into a 390px phone,
   nav adapts, everything stacks.
   ========================================================================== */
@media (max-width:640px){
  .split{padding-top:clamp(96px,18vh,120px)}
  .frame-top{padding:0 18px 22px}
  /* F7: bottom paddings clear the home-bar on notched phones (max() => no-op where inset is 0) */
  .frame-foot{padding:22px 18px max(56px,calc(40px + env(safe-area-inset-bottom)))}
  .frame-intro{max-width:none}
  .pane{padding:24px 18px max(56px,calc(40px + env(safe-area-inset-bottom)))}

  /* F1: brand + all 4 links on ONE row at 360/390/430. Tighter type/padding + a
     smaller brand mark; hit area still ≥44px via the padding/negative-margin trick. */
  nav{padding:clamp(9px,1.4vh,14px) 14px;gap:8px;font-size:12px;letter-spacing:.05em;flex-wrap:wrap;row-gap:0}
  nav .nav-links{gap:8px}
  nav .brand{letter-spacing:.06em;flex-shrink:0;min-width:0}
  nav a{padding:16px 8px;margin:-16px -8px}
  .nav-logo{height:18px}
  /* F7: fixed nav clears the status-bar/notch when the page draws under it (viewport-fit=cover).
     max() keeps the referee/desktop value (inset 0) identical to F1's padding. */
  nav{padding-top:max(clamp(9px,1.4vh,14px),env(safe-area-inset-top));
      padding-left:max(14px,env(safe-area-inset-left));
      padding-right:max(14px,env(safe-area-inset-right))}
  /* the landing normally hides its brand (see the desktop-scoped rule below); on phones
     it stays visible so the nav is one real row with a clear home affordance */

  .hero{padding:72px 14px 92px}
  .stage{width:min(94vw,860px);padding:clamp(32px,6vh,64px) 16px;gap:clamp(20px,3.5vh,32px)}
  .eyebrow{font-size:12px;letter-spacing:.16em;line-height:1.9;max-width:100%}   /* F6: 11->12 readable floor */
  /* the segs+dots have NO whitespace between them in the markup, so a text line can
     never wrap — flex items wrap without needing break points. This is what lets the
     identity eyebrow reflow to two lines on phones instead of clipping at the card edge. */
  .eyebrow:has(.seg){display:flex;flex-wrap:wrap;justify-content:center;row-gap:2px;font-size:12px;line-height:1.6;max-width:100%}
  .eyebrow .seg{white-space:nowrap}
  .logo{width:min(84vw,560px)}
  /* scaled to be slightly narrower than 84vw logo */
  .tagline{font-size:min(5.5vw,37px);white-space:nowrap}
  .cta{padding:13px 24px;font-size:12px}
  /* latest-drop chip wraps natively on mobile */
  .latest{font-size:12px;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:6px 11px;padding:11px 18px}   /* F6: 11->12 */



  body.page .page-main{padding:96px 18px max(56px,calc(40px + env(safe-area-inset-bottom)))}   /* F7: home-bar clearance */
  .wrap{padding:0 18px}
  section.blk{padding:64px 0}
  .about{padding:28px 22px}
  footer{padding:32px 16px}

  /* Balance long legal text on mobile to avoid awkward long/short lines */
  footer.strip .s-legal { text-wrap: balance; line-height: 1.5; white-space: normal; }
  footer.strip .s-policy { flex-wrap: nowrap; gap: 12px; }
  .frame-foot > div:nth-child(2) { text-wrap: balance; line-height: 1.5; }


  /* Fix copyright orphan */
  .frame-foot .lk, .frame-foot .lk-sub { margin: 0 auto; row-gap: 8px; justify-content: center; flex-wrap: nowrap; gap: 12px; }

  /* F4: frame-foot links reach a >=44px hit area — padding grows, equal negative
     margin keeps the visual rows tight (never min-height). lk-sub carries a touch
     more to offset its 10px type. */
  .frame-foot a{padding-block:14px;margin-block:-14px}
  .frame-foot .lk-sub a{padding-block:15px;margin-block:-15px}

  /* F4: in-copy links (pane / page-main / frame-column body text) — inline vertical
     padding grows the tap box to >=44px WITHOUT moving line boxes (inline padding
     never affects line height), so paragraphs look identical while the hit area
     grows. 15px clears 44 even for 13px-font notes. */
  .pane p a,.pane li a,.page-main p a,.page-main li a,.frame-top p a{padding-block:15px}

  /* F6: 12px readable floor on phones for legal / identity text.
     The frame eyebrow segs are 11px via a @container rule that also matches on
     desktop (frame caps at 460px), so this media rule bumps them on phones only.
     div.copy out-specifies the terms/copyright page-local 11px .frame-foot .copy. */
  .frame .eyebrow .seg{font-size:12px}
  footer.strip{font-size:12px}
  .frame-foot .lk-sub{font-size:12px}
  .frame-foot div.copy{font-size:12px}
}

/* honor reduced-motion (JS also disables the proximity light / specular) */
@media (prefers-reduced-motion:reduce){
  .aurora span,.reveal,.latest .pulse,.tagline .em,.light .src,.stage:hover .logo,.scrollcue,
  .frame-title .em{animation:none}
  .reveal{opacity:1;transform:none}
  html{scroll-behavior:auto}
  nav .nav-links a::after,.pane p a,.pane li a{transition:none}
  a.glass:hover,button.glass:hover{transform:none}
}

/* ============================================================================
   F2 — rest-state tap affordance. On touch there is no hover, so every link must
   read as interactive AT REST. Scoped to (hover:none): desktop keeps its
   hover-reveal grammar untouched.
   ========================================================================== */
@media (hover:none){
  /* nav links: the gradient underline sits at rest (dimmed), full on the active page.
     (Desktop still grows it from scaleX(0) on direct hover.) */
  nav .nav-links a::after{transform:scaleX(1);opacity:.45}
  nav .nav-links a:active::after,
  nav .nav-links a.active::after,
  nav .nav-links a[aria-current="page"]::after{opacity:1}

  /* legal + in-copy links: always underlined, magenta-tinted */
  footer.strip a:not(.icon-link),
  .frame-foot a:not(.icon-link),
  .legal-line a,
  .pane p a, .pane li a,
  .page-main p a, .page-main li a,
  .frame-top p a{
    text-decoration-line:underline;
    text-decoration-color:color-mix(in srgb,var(--magenta, #FF2E88) 55%,transparent);
    text-underline-offset:3px;
  }

  /* icon links (Spotify / Apple Music): pill so they read as buttons, not bare text.
     Drop the negative margin here so adjacent pills don't overlap. */
  footer.strip a.icon-link, .frame-foot a.icon-link{
    border:1px solid var(--line, rgba(214,196,255,.12));border-radius:999px;background:rgba(255,255,255,.04);margin:0}

  /* brand mark: a whisper of a rest surface so the home target reads as tappable */
  nav .brand{background:rgba(255,255,255,.03);border-radius:10px}
}

/* ============================================================================
   F3 — touch feedback: convert the hover grammar into press feedback.
   Brand-magenta tap flash, then :active press states. The :active COLOUR rules are
   TOP-LEVEL (so they register site-wide), but each MIRRORS an existing :hover colour
   — on desktop a press is always also a hover, so they are a no-op there; the
   feedback only surfaces on touch, where there is no hover. Desktop is unchanged.
   ========================================================================== */
html{-webkit-tap-highlight-color:rgba(255,46,136,.18)}
nav a:active{color:var(--ink, #F6F1FB)}                                   /* mirrors nav a:hover */
.frame-foot a:active{color:var(--magenta, #FF2E88)}                       /* mirrors .frame-foot a:hover */
footer.strip a:active{color:var(--magenta, #FF2E88)}                      /* mirrors footer.strip a:hover */
footer a:active{color:var(--magenta, #FF2E88)}                            /* mirrors footer a:hover */
footer .fine a:active{color:var(--dim, #B6A9D0)}                          /* mirrors footer .fine a:hover */
.page-main a:active{color:var(--magenta, #FF2E88)}                        /* mirrors .page-main a:hover */
.pane p a:active,.pane li a:active{color:var(--ink, #F6F1FB)}             /* mirrors .pane p a:hover */
.cta:active{border-color:rgba(255,46,136,.55)}                   /* mirrors .cta:hover border */
.latest:active{border-color:rgba(255,46,136,.45)}                /* mirrors .latest:hover border */

/* Nicer press feedback (scale) on touch ONLY — desktop press stays exactly as it was. */
@media (hover:none){
  .cta:active,.latest:active,a.card:active,.mf-listen:active,
  .icon-link:active,.req-btn:active,.req-chip:active{transform:scale(.97);transition:transform .08s}
  .back-btn:active,.play-btn:active{transform:scale(.94);transition:transform .08s}
}

/* ============================================================================
   M8 — app-like page moves on phones: cross-document view transitions (a quick
   180ms root crossfade between pages). Progressive enhancement — Safari 18.2+ /
   Chrome 126+; everything older ignores the at-rule. Desktop keeps instant navs.
   ========================================================================== */
@media (hover:none){
  @view-transition { navigation: auto; }
  ::view-transition-old(root),
  ::view-transition-new(root){ animation-duration:.18s }
}
@media (prefers-reduced-motion:reduce){
  @view-transition { navigation: none; }
}

/* ============================================================================
   M4 — touch input polish. (hover:none)-scoped; desktop untouched.
   ========================================================================== */
/* no iOS landscape text inflation (inert on desktop browsers) */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
@media (hover:none){
  /* instant taps: keep pan + pinch, drop the double-tap-zoom wait.
     (.progress-wrap keeps its own touch-action:none for scrubbing.) */
  a,button,input,select,textarea,label,summary,[role="button"],[onclick],.lyric-line{touch-action:manipulation}
  /* press-and-hold on tap chrome shouldn't pop text-selection handles
     (lyrics and body copy stay selectable) */
  nav a,.cta,.latest,.icon-link,.mf-listen,.card .listen,.badge,.req-chip,.req-btn,
  .req-adv-toggle,.back-btn,.play-btn,.scroll-indicator,.scrollcue{-webkit-user-select:none;user-select:none}
}


/* Hide nav brand on the main landing page because it has the huge center logo.
   Desktop-only: on phones the brand stays visible so the nav is one real single row
   (see the max-width:640px block) rather than a lone right-aligned link cluster. */
@media (min-width:641px){
  body:not(.page) nav { justify-content: flex-end; }
  body:not(.page) nav .brand { display: none; }
}

/* SVG Logo in Nav */
.nav-logo { height: 20px; width: auto; display: block; transition: filter .3s; }
@media (hover:hover){nav .brand:hover .nav-logo { filter: drop-shadow(0 0 10px rgba(255,46,136,.5)); }}

.icon-link { display: inline-flex; align-items: center; gap: 8px; }
.icon-link svg { width: 1.3em; height: 1.3em; transform: translateY(0.06em); opacity: 0.65; }

/* nav scrolling border */
nav { transition: border-bottom 0.3s, background 0.3s, backdrop-filter 0.3s, -webkit-backdrop-filter 0.3s; border-bottom: 1px solid transparent; }
nav.scrolled { border-bottom: 1px solid rgba(255,255,255,0.06); background: rgba(10, 7, 16, 0.35); backdrop-filter: blur(24px) saturate(1.2); -webkit-backdrop-filter: blur(24px) saturate(1.2); }

.scroll-indicator {
  position: absolute;
  /* sits just ABOVE the footer, outside the pane's fade mask */
  bottom: 56px;
  left: calc(50% + clamp(150px, 18vw, 230px));
  transform: translateX(-50%);
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.16);
  border: 1px solid rgba(255, 255, 255, 0.3);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
  transition: opacity 0.4s ease-out, transform 0.25s, color 0.25s, border-color 0.25s, background 0.25s;
  opacity: 0;
  pointer-events: none;
  z-index: 10;
}
@keyframes subtle-bob {
  0%, 100% { transform: translateX(-50%) translateY(0); }
  50% { transform: translateX(-50%) translateY(6px); }
}
body.has-scroll .scroll-indicator {
  opacity: 1;
  pointer-events: auto;
  cursor: pointer;
  animation: subtle-bob 2.4s ease-in-out infinite;
}
.scroll-indicator:hover {
  background: rgba(255, 255, 255, 0.25);
  border-color: rgba(255, 255, 255, 0.45);
  color: #fff;
  animation: none;
  transform: translateX(-50%) translateY(-2px);
}
@media (max-width: 900px) {
  .scroll-indicator { display: none; }
}
