:root{
  --ink:#0a0908;
  --bone:#f3eee3;
  --blood:#d4351e;
  --acid:#c4ff00;
  --rust:#6b1d0f;
  --mute:#7B7481;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{background:var(--ink);color:var(--bone);font-family:"Space Mono",monospace;overflow-x:hidden}
body{min-height:100vh;position:relative;cursor:crosshair;padding-bottom:11rem}
@media (max-width:640px){ body{padding-bottom:4.2rem} }

/* selection highlight — oxblood instead of system blue */
::selection{background:var(--blood);color:var(--bone);text-shadow:none}
::-moz-selection{background:var(--blood);color:var(--bone);text-shadow:none}

/* === SILK BACKGROUND CANVAS === */
#silk{position:fixed;inset:0;width:100vw;height:100vh;z-index:0;display:block;pointer-events:none}
#vignette{
  position:fixed;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(ellipse at 50% 40%, transparent 0%, transparent 30%, rgba(10,9,8,.65) 75%, rgba(10,9,8,.95) 100%),
    linear-gradient(180deg, rgba(10,9,8,.4) 0%, transparent 18%, transparent 70%, rgba(10,9,8,.9) 100%);
}
#grain{
  position:fixed;inset:0;z-index:2;pointer-events:none;opacity:.22;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='1.6' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .6 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}
/* film grain on TOP of everything (above all UI) — still / barely moving */
#grain-top{
  position:fixed;inset:-40px;z-index:9999;pointer-events:none;opacity:.85;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='2.8' numOctaves='4' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 1 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  background-size:200px 200px;
}
/* second grain layer in soft-light for extra texture depth */
#grain-top::after{
  content:"";position:fixed;inset:-40px;pointer-events:none;
  opacity:.18;mix-blend-mode:soft-light;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='340' height='340'><filter id='n2'><feTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='2' stitchTiles='stitch' seed='7'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 .9 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n2)'/></svg>");
  background-size:260px 260px;
}
@keyframes grain-jitter{
  0%{transform:translate(0,0)}
  17%{transform:translate(-8px,4px)}
  33%{transform:translate(6px,-6px)}
  50%{transform:translate(-4px,8px)}
  67%{transform:translate(8px,2px)}
  83%{transform:translate(-6px,-4px)}
  100%{transform:translate(0,0)}
}
#scanlines{
  position:fixed;inset:0;z-index:3;pointer-events:none;opacity:.08;mix-blend-mode:overlay;
  background-image:repeating-linear-gradient(0deg, rgba(255,255,255,.6) 0 1px, transparent 1px 3px);
}

/* === LAYOUT === */
main{position:relative;z-index:10}
.wrap{padding:0 28px;max-width:1600px;margin:0 auto}

/* === TOP BAR === */
header.bar{
  position:sticky;top:0;z-index:20;
  border-bottom:2px solid var(--bone);
  background:rgba(10,9,8,.55);
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
}
header.bar .row{display:flex;align-items:center;justify-content:space-between;padding:10px 28px;gap:24px;font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase}
header.bar .row .b{display:flex;gap:18px;align-items:center}
header.bar .mark{font-family:"Archivo Black",sans-serif;letter-spacing:.04em;font-size:14px;text-shadow:0 0 4px rgba(255,236,210,.25), 0 0 10px rgba(212,53,30,.18)}
header.bar .blink{display:inline-block;width:8px;height:8px;background:var(--blood);border-radius:50%;animation:blink 1.1s steps(2) infinite}
@keyframes blink{50%{opacity:0}}
header.bar a{color:var(--bone);text-decoration:none}
header.bar a:hover{background:var(--bone);color:var(--ink)}

/* === HERO === */
.hero{padding:60px 0 40px;position:relative}
.hero .deck{
  display:grid;grid-template-columns:1fr;gap:10px;
}
.hero .tag{
  font-family:"JetBrains Mono",monospace;font-size:12px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--bone);opacity:.7;
}
.hero .tag .dot{display:inline-block;width:6px;height:6px;background:var(--blood);margin:0 8px 2px;vertical-align:middle}

.hero h1{
  font-family:"Anton",sans-serif;
  font-weight:400;
  font-size:clamp(48px, 11.5vw, 200px);
  line-height:.82;
  letter-spacing:-.02em;
  text-transform:uppercase;
  color:var(--bone);
  position:relative;
  display:grid;
  gap:8px;
}
.hero h1 .l1{
  display:flex;align-items:baseline;gap:.02em;white-space:nowrap;
  position:relative;
  text-shadow:
    0 0 6px rgba(243,238,227,.10),
    0 0 18px rgba(255,236,210,.06),
    0 0 42px rgba(212,53,30,.06);
}
/* very soft bloom halo */
.hero h1 .l1::before{
  content:"DR./DAWGOG.";
  position:absolute;inset:0;
  color:rgba(255,240,220,.12);
  filter:blur(16px);
  z-index:-1;
  pointer-events:none;
  letter-spacing:inherit;
  animation:bloom-pulse 6.5s ease-in-out infinite;
}
.hero h1 .l1::after{
  content:"";
  position:absolute;left:-2%;top:-10%;right:-2%;bottom:-10%;
  background:radial-gradient(ellipse at 50% 55%, rgba(255,220,180,.03), transparent 65%),
             radial-gradient(ellipse at 70% 50%, rgba(212,53,30,.035), transparent 60%);
  filter:blur(20px);
  z-index:-2;pointer-events:none;
}
@keyframes bloom-pulse{
  0%,100%{opacity:.22;filter:blur(16px)}
  50%{opacity:.38;filter:blur(20px)}
}
.hero h1 .l2{display:flex;align-items:center;justify-content:space-between;gap:.04em;width:100%;font-size:.42em}
.hero h1 .punct{color:var(--blood)}
.hero h1 .og{
  font-style:italic;-webkit-text-stroke:2px var(--bone);color:transparent;
  position:relative;
  z-index:1;
}
.hero h1 .dot{
  color:var(--blood);
  display:inline-block;
  position:relative;
  z-index:5;
  text-shadow:
    0 0 4px rgba(212,53,30,.7),
    0 0 12px rgba(255,80,40,.5),
    0 0 26px rgba(255,80,40,.35),
    0 0 50px rgba(255,80,40,.22);
  animation:dot-pulse 2.8s ease-in-out infinite;
}
/* extra glow halo behind the dot */
.hero h1 .dot::before{
  content:"";
  position:absolute;left:50%;top:55%;
  width:1.4em;height:1.4em;
  transform:translate(-50%,-50%);
  background:radial-gradient(circle, rgba(255,90,50,.4) 0%, rgba(212,53,30,.18) 35%, transparent 70%);
  filter:blur(8px);
  z-index:-1;
  pointer-events:none;
  animation:dot-halo 2.8s ease-in-out infinite;
}
@keyframes dot-pulse{
  0%,100%{
    opacity:.6;
    text-shadow:
      0 0 3px rgba(212,53,30,.55),
      0 0 9px rgba(212,53,30,.35),
      0 0 18px rgba(255,80,40,.22);
  }
  50%{
    opacity:.92;
    text-shadow:
      0 0 6px rgba(255,90,60,.8),
      0 0 16px rgba(255,80,40,.55),
      0 0 36px rgba(255,80,40,.42),
      0 0 70px rgba(255,80,40,.25);
  }
}
@keyframes dot-halo{
  0%,100%{opacity:.25;transform:translate(-50%,-50%) scale(.85)}
  50%{opacity:.6;transform:translate(-50%,-50%) scale(1.1)}
}
.hero h1 .stamp{
  font-family:"JetBrains Mono",monospace;
  font-size:.34em; /* relative to .l2 which is .42em of h1 */
  text-transform:uppercase;
  letter-spacing:.18em;
  border:1.5px solid var(--bone);
  padding:.4em .8em;
  align-self:center;
  color:var(--bone);
  white-space:nowrap;
  text-align:center;
}

.hero .sub{
  display:grid;grid-template-columns:auto 1fr auto;gap:24px;align-items:end;
  border-top:2px solid var(--bone);border-bottom:2px solid var(--bone);
  padding:14px 0;margin-top:18px;
}
.hero .sub .l{font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:.2em;text-transform:uppercase}
.hero .sub .m{font-family:"Anton",sans-serif;font-size:clamp(20px,2.4vw,42px);letter-spacing:.02em;text-transform:uppercase;line-height:1;text-align:center}
.hero .sub .m em{font-style:italic;color:var(--blood)}
.hero .sub .r{font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:.2em;text-transform:uppercase;text-align:right}

/* genre ticker */
.ticker{
  border-top:2px solid var(--bone);border-bottom:2px solid var(--bone);
  overflow:hidden;white-space:nowrap;background:var(--ink);
  margin-top:-2px;
  position:relative;
}
/* gradient-blur edges on both sides of the ticker */
.tick-blur{
  position:absolute;top:0;bottom:0;width:13rem;
  pointer-events:none;z-index:5;isolation:isolate;
}
.tick-blur.l{left:0}
.tick-blur.r{right:0}
.tick-blur > div{
  position:absolute;inset:0;
  -webkit-backdrop-filter:inherit;backdrop-filter:inherit;
}
@media (max-width:640px){ .tick-blur{width:7rem} }
.ticker .roll{
  display:inline-block;animation:roll 38s linear infinite;
  font-family:"Anton",sans-serif;font-size:42px;letter-spacing:.02em;text-transform:uppercase;
  padding:10px 0;
}
.ticker .roll span{margin:0 26px}
.ticker .roll .sep{color:var(--blood)}
@keyframes roll{to{transform:translateX(-50%)}}

/* === AUDIO REEL === */
.section-head{
  display:flex;align-items:baseline;gap:18px;justify-content:space-between;
  padding:42px 0 14px;border-bottom:2px solid var(--bone);
}
.section-head .num{font-family:"JetBrains Mono",monospace;font-size:12px;letter-spacing:.22em;text-transform:uppercase;opacity:.7}
.section-head h2{font-family:"Anton",sans-serif;font-size:clamp(36px,5vw,72px);letter-spacing:-.01em;text-transform:uppercase;line-height:.9;flex:1;text-align:center}
.section-head h2 em{color:var(--blood);font-style:italic}
.section-head .meta{font-family:"JetBrains Mono",monospace;font-size:12px;letter-spacing:.18em;text-transform:uppercase;opacity:.7;text-align:right}

.reel{display:grid;grid-template-columns:1fr;border-left:2px solid var(--bone);border-right:2px solid var(--bone);border-bottom:2px solid var(--bone)}
.track{
  display:grid;
  grid-template-columns:160px 1fr 1fr 80px 60px 60px 60px;
  align-items:stretch;
  border-bottom:1px solid rgba(243,238,227,.25);
  background:rgba(10,9,8,.55);
  transition:background .15s;
  position:relative;
}
.track:last-child{border-bottom:0}
.track:hover{background:rgba(212,53,30,.10)}
.track.playing{background:rgba(212,53,30,.18)}

.track .cover{
  border-right:1px solid rgba(243,238,227,.25);
  position:relative;
  aspect-ratio:1/1;
  background:#000;
}
.track .cover image-slot{width:100%;height:100%;display:block}
/* default cover poster — red background with brand star.
   Overlaid <img> (added by app.js when meta.json has a "cover" field)
   sits on top via object-fit:cover. If the img 404s it removes itself
   and the star shows through. */
.cover-art{
  position:absolute;inset:0;
  background:var(--blood);
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;
}
.cover-art::before{
  content:"★";
  font-family:"Anton",sans-serif;
  font-size:72px;
  line-height:1;
  color:var(--bone);
  text-shadow:0 2px 0 rgba(0,0,0,.25), 0 0 14px rgba(243,238,227,.35);
}
.cover-art img{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;
  display:block;
}
@media (max-width:640px){
  .cover-art::before{font-size:44px}
}
.track .cover .ix{
  position:absolute;top:6px;left:8px;font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:.18em;color:var(--bone);text-shadow:0 1px 2px #000;
}

.track .title{
  padding:18px 22px;display:flex;flex-direction:column;justify-content:center;gap:6px;
  border-right:1px solid rgba(243,238,227,.25);min-width:0;
}
.track .title .name{font-family:"Anton",sans-serif;font-size:clamp(26px,2.6vw,42px);text-transform:uppercase;letter-spacing:.01em;line-height:.95;color:var(--bone);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.track .title .tags{font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:.2em;text-transform:uppercase;opacity:.65}
.track .title .tags .pip{color:var(--blood)}

.track .wave{
  padding:14px 16px;display:flex;align-items:center;border-right:1px solid rgba(243,238,227,.25);min-width:0;overflow:hidden;position:relative;
}
.track .wave .bars{display:flex;align-items:center;gap:2px;width:100%;height:48px}
.track .wave .bars span{flex:1;background:var(--bone);opacity:.55;transition:opacity .12s, background .12s;border-radius:1px}
.track.playing .wave .bars span.played{background:var(--blood);opacity:1}
.track.playing .wave .bars span.head{background:var(--acid);opacity:1;box-shadow:0 0 8px var(--acid)}
.track .wave .time{
  position:absolute;right:18px;bottom:6px;
  font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:.18em;opacity:.7;
}

.track .bpm,.track .key,.track .yr{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  font-family:"JetBrains Mono",monospace;
  border-right:1px solid rgba(243,238,227,.25);
}
.track .bpm .v,.track .key .v,.track .yr .v{font-family:"Anton",sans-serif;font-size:26px;letter-spacing:.02em;line-height:1}
.track .bpm .l,.track .key .l,.track .yr .l{font-size:9px;letter-spacing:.22em;text-transform:uppercase;opacity:.65}
.track .yr{border-right:0}

.track .play{
  position:absolute;
  right:8px;bottom:8px;width:46px;height:46px;
  display:flex;align-items:center;justify-content:center;
  background:var(--bone);color:var(--ink);
  border:none;cursor:pointer;
  font-family:"Archivo Black",sans-serif;font-size:14px;
  transition:transform .12s, background .12s;
  z-index:5;
}
/* override: anchor play btn to the cover cell, not the row */
.track .cover{position:relative}
.track .cover .play{position:absolute;right:8px;bottom:8px}
.track .play:hover{background:var(--acid);transform:translateY(-1px)}
.track.playing .play{background:var(--blood);color:var(--bone)}
.track.playing .play::before{content:"❚❚";letter-spacing:-2px}
.track:not(.playing) .play::before{content:"▶"}
/* Audio is fetching+decoding (first click on a precomputed-waveform track).
   Soft pulse on the button so the user sees the wait. */
.track.loading .play{
  background:var(--mute);
  animation:btn-pulse 1s ease-in-out infinite;
  pointer-events:none;
}
@keyframes btn-pulse{
  0%,100%{opacity:.55}
  50%{opacity:1}
}

/* audio-loaded indicator + drop-zone feedback */
.track.has-audio .cover::after{
  content:"♪ LIVE";
  position:absolute;top:6px;right:8px;
  font-family:"JetBrains Mono",monospace;font-size:9px;letter-spacing:.18em;
  color:var(--acid);text-shadow:0 0 4px var(--ink), 0 0 8px rgba(196,255,0,.6);
  pointer-events:none;
}
.track.drag-hot{
  outline:2px dashed var(--acid);outline-offset:-2px;
  background:rgba(196,255,0,.08);
}
.track.drag-hot::before{
  content:"DROP AUDIO TO LOAD";
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-family:"Archivo Black",sans-serif;font-size:16px;letter-spacing:.18em;
  color:var(--acid);text-shadow:0 0 10px var(--ink);
  pointer-events:none;z-index:6;
}

/* === CREDITS === */
.credits{padding:30px 0 0}
.credits .list{
  display:grid;grid-template-columns:repeat(2,1fr);
  border:2px solid var(--bone);
  background:rgba(10,9,8,.55);
}
.credits .row{
  display:grid;grid-template-columns:48px 1fr auto auto;
  gap:18px;align-items:center;padding:18px 22px;
  border-bottom:1px solid rgba(243,238,227,.18);
  font-family:"JetBrains Mono",monospace;
  transition:background .12s;
}
.credits .row:hover{background:rgba(212,53,30,.10)}
.credits .row:nth-child(odd){border-right:1px solid rgba(243,238,227,.25)}
.credits .row .n{font-size:10px;letter-spacing:.2em;opacity:.55}
.credits .row .artist{font-family:"Anton",sans-serif;font-size:26px;text-transform:uppercase;letter-spacing:.02em;line-height:1;color:var(--bone)}
.credits .row .artist em{color:var(--blood);font-style:italic}
.credits .row .work{font-size:10px;letter-spacing:.18em;text-transform:uppercase;opacity:.7}
.credits .row .yr{font-size:10px;letter-spacing:.18em;opacity:.55}

/* === SHOUT WALL === */
.shout{
  margin-top:48px;padding:54px 0;border-top:2px solid var(--bone);border-bottom:2px solid var(--bone);
  text-align:center;position:relative;overflow:hidden;
}
.shout h3{
  font-family:"Anton",sans-serif;text-transform:uppercase;letter-spacing:-.01em;line-height:.88;
  font-size:clamp(40px,8vw,128px);color:var(--bone);
}
.shout h3 em{color:var(--blood);font-style:italic}
.shout h3 .out{color:transparent;-webkit-text-stroke:2px var(--bone)}
.shout .stamp{
  position:absolute;top:18px;right:24px;
  border:1.5px solid var(--blood);color:var(--blood);
  padding:6px 12px;font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  transform:rotate(-6deg);
}
.shout .stamp2{
  position:absolute;bottom:18px;left:24px;
  border:1.5px solid var(--bone);color:var(--bone);
  padding:6px 12px;font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  transform:rotate(4deg);opacity:.7;
}

/* === FOOTER === */
footer{padding:48px 0 36px;font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--bone)}
footer .row{display:flex;justify-content:space-between;flex-wrap:wrap;gap:18px;align-items:flex-end}
footer .links{display:flex;gap:18px;flex-wrap:wrap}
footer .links a{color:var(--bone);text-decoration:none;border-bottom:1px solid var(--bone);padding-bottom:2px}
footer .links a:hover{color:var(--blood);border-color:var(--blood)}
footer .sig{font-family:"Anton",sans-serif;font-size:46px;letter-spacing:.01em;text-transform:uppercase}
footer .sig em{color:var(--blood);font-style:italic}

/* === RESPONSIVE === */
@media (max-width:980px){
  .track{grid-template-columns:120px 1fr 70px 70px}
  .track .wave,.track .yr{display:none}
  .credits .list{grid-template-columns:1fr}
  .credits .row:nth-child(odd){border-right:0}
  .hero .sub{grid-template-columns:1fr;gap:6px;text-align:left}
  .hero .sub .m,.hero .sub .r{text-align:left}
}

/* === MOBILE / ANDROID === */
@media (max-width:640px){
  .wrap{padding:0 14px}

  /* header */
  header.bar .row{padding:8px 14px;gap:8px;font-size:10px;letter-spacing:.12em}
  header.bar .mark{font-size:13px}
  header.bar .b:first-child > span:not(.mark){display:none} /* hide "ON AIR / BSMT.STUDIO" */
  header.bar .b:last-child > span:last-child{display:none} /* hide "EST. 2014" */
  header.bar .b{gap:12px}

  /* hero — supporting text centered on mobile so the three sub-rows read
     as a tidy stack under the title. Title itself stays left-flush; it's
     wide enough to fill the column and centering does nothing visually. */
  .hero{padding:34px 0 22px}
  .hero h1{font-size:clamp(38px,12.5vw,80px);gap:10px;justify-items:center;text-align:center}
  .hero h1 .l1{letter-spacing:-.03em;justify-content:center}
  .hero h1 .l2{font-size:.26em;letter-spacing:.08em;opacity:.9;padding-top:4px;border-top:1px solid rgba(243,238,227,.25);justify-content:center}
  .hero h1 .dot{font-size:.95em}
  .hero .tag{font-size:9.5px;letter-spacing:.14em;line-height:1.7;padding-bottom:6px;text-align:center}
  .hero .deck{gap:14px}
  .hero .sub{padding:12px 0;gap:8px;margin-top:18px;text-align:center}
  .hero .sub .l,.hero .sub .m,.hero .sub .r{text-align:center}
  .hero .sub .l,.hero .sub .r{font-size:10px;letter-spacing:.14em}
  .hero .sub .m{font-size:22px;line-height:1.05}

  /* ticker */
  .ticker .roll{font-size:30px;padding:8px 0}
  .ticker .roll span{margin:0 16px}

  /* section header — stacked + centered on mobile.
     Desktop uses `flex:1` on h2 and `order:3` to ride the same row as num+meta.
     On a phone that whole layout fights flex-wrap and ends up jumbled. Forcing
     column direction (and resetting flex:none) lets the three pieces read
     top-to-bottom in source order: num → title → meta. */
  .section-head{padding:30px 0 14px;gap:6px;flex-direction:column;align-items:stretch}
  .section-head .num{font-size:10px;letter-spacing:.16em;text-align:center;flex:none}
  .section-head h2{font-size:46px;padding-top:2px;text-align:center;flex:none}
  .section-head .meta{font-size:9px;letter-spacing:.14em;text-align:center;flex:none}

  /* === TRACKS: restructured for mobile === */
  .track{
    display:grid;
    grid-template-columns:96px 1fr;
    grid-template-rows:auto auto;
    grid-template-areas:
      "cover title"
      "meta meta";
  }
  .track .cover{grid-area:cover;aspect-ratio:1/1;border-right:1px solid rgba(243,238,227,.25);border-bottom:1px solid rgba(243,238,227,.25)}
  .track .title{
    grid-area:title;
    padding:10px 12px;border-right:0;border-bottom:1px solid rgba(243,238,227,.25);
    justify-content:center;
  }
  .track .title .name{font-size:22px;white-space:normal;line-height:.95}
  .track .title .tags{font-size:9px;letter-spacing:.16em}
  .track .bpm,.track .key{
    grid-area:auto;display:flex;flex-direction:row;gap:6px;align-items:baseline;justify-content:center;
    padding:8px 6px;border-right:1px solid rgba(243,238,227,.25);
  }
  .track .bpm .v,.track .key .v{font-size:18px}
  .track .bpm .l,.track .key .l{font-size:9px;opacity:.6}
  /* meta strip: just bpm + key spans bottom; yr hidden via earlier rule */
  .track{
    grid-template-areas:
      "cover title"
      "bpm key";
    grid-template-columns:96px 1fr;
  }
  .track .bpm{grid-area:bpm}
  .track .key{grid-area:key;border-right:0}
  .track .play{width:26px;height:26px;right:6px;bottom:6px;font-size:10px}
  .track .cover .ix{font-size:9px;letter-spacing:.14em}

  /* credits */
  .credits .row{padding:14px 14px;grid-template-columns:32px 1fr auto;gap:10px}
  .credits .row .yr{display:none}
  .credits .row .artist{font-size:20px}
  .credits .row .work{font-size:9px;letter-spacing:.14em;text-align:right}
  .credits .row .n{font-size:9px}

  /* shout */
  .shout{padding:38px 0;margin-top:30px}
  .shout h3{font-size:42px;line-height:.95}
  .shout .stamp,.shout .stamp2{font-size:8px;padding:4px 8px;top:8px;right:10px}
  .shout .stamp2{bottom:8px;left:10px;top:auto;right:auto}

  /* footer — centered on mobile so the three blocks read as a tidy stack */
  footer{padding:32px 0 28px;font-size:10px}
  footer .row{flex-direction:column;align-items:center;gap:22px}
  footer .row > div{width:100%;text-align:center !important}
  footer .sig{font-size:34px}
  footer .links{gap:12px;width:100%;justify-content:center}
}

/* Drop the crosshair cursor on coarse pointers; speed the ticker up a bit
   on phones. (No play-button size bump here — mobile already chose a
   compact 32px above, and on desktop the 46px is fine for finger taps on
   the rare touchscreen laptop.) */
@media (pointer:coarse){
  body{cursor:auto}
  .ticker .roll{animation-duration:24s}
}
/* ===== GRADUAL BLUR (bottom of page, fixed) ===== */
#grad-blur{
  position:fixed;left:0;right:0;bottom:0;
  height:11rem;width:100%;
  z-index:1100; /* above content, below the top grain */
  pointer-events:none;
  isolation:isolate;
}
#grad-blur > div{
  position:absolute;inset:0;
  -webkit-backdrop-filter:inherit;backdrop-filter:inherit;
}
@media (max-width:640px){
  #grad-blur{height:4.2rem}
}
