/* Grammy tribute site. Evening plum, rose and gold. Everything flies in on Next. Local files only. */
:root{
  --ink:#140b1e; --plum:#2b1238; --plum2:#43204f; --rose:#ff5c8a; --blush:#ffd3e0; --gold:#f3c56e; --cream:#fff5ec;
  --serif:"DM Serif Display",Georgia,"Times New Roman",serif;
  --sans:"Outfit",system-ui,"Segoe UI",sans-serif;
  --hand:"Caveat","Segoe Script","Brush Script MT",cursive;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
/* phones (Derek, 2026-10-09): follow the visible screen (not the screen with the browser bars hidden), so Back/Next never slide under the bar */
body{height:100vh;height:100dvh;overscroll-behavior:none;touch-action:manipulation}
body{background:var(--ink);color:var(--cream);font-family:var(--sans);overflow:hidden;-webkit-tap-highlight-color:transparent}
#sky{position:fixed;inset:0;background:radial-gradient(120% 90% at 50% 0%,var(--plum2) 0%,var(--plum) 45%,var(--ink) 100%);z-index:0;overflow:hidden}
#sky i{position:absolute;border-radius:50%;filter:blur(40px);opacity:.5;animation:drift 22s ease-in-out infinite alternate}
#sky i:nth-child(1){width:46vmax;height:46vmax;left:-12vmax;top:-10vmax;background:radial-gradient(circle,#ff5c8a55,transparent 65%)}
#sky i:nth-child(2){width:40vmax;height:40vmax;right:-12vmax;bottom:-14vmax;background:radial-gradient(circle,#f3c56e44,transparent 65%);animation-duration:28s}
#sky i:nth-child(3){width:26vmax;height:26vmax;left:55%;top:18%;background:radial-gradient(circle,#b46bff33,transparent 65%);animation-duration:34s}
@keyframes drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(4vmax,3vmax,0) scale(1.15)}}
#spark{position:fixed;inset:0;z-index:1;pointer-events:none}

#app{position:relative;z-index:2;height:100%;display:grid;grid-template-rows:auto 1fr auto;padding-inline:clamp(14px,3vw,36px)}
.top{display:flex;align-items:center;gap:14px;padding-top:max(14px,env(safe-area-inset-top));font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--blush)}
.top .chap{flex:1;opacity:.85}
.top button{all:unset;cursor:pointer;padding:6px 10px;border:1px solid #ffffff33;border-radius:999px;font-size:11px}
.top button:focus-visible{outline:2px solid var(--gold)}
.bar{grid-column:1/-1;height:3px;background:#ffffff1f;border-radius:3px;overflow:hidden;margin-top:10px}
.bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--rose),var(--gold));transition:width .5s ease}

main{position:relative;min-height:0}
.scene{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;gap:clamp(8px,2vh,22px);text-align:center;padding-block:8px}
.scene.on{display:flex}
.scene.out{display:flex;animation:sceneout .35s ease forwards}
@keyframes sceneout{to{opacity:0;transform:scale(.97) translateY(-10px)}}

.txt{display:flex;flex-direction:column;align-items:center;gap:clamp(6px,1.4vh,14px);max-width:min(1000px,94vw)}
.kick{font-size:clamp(11px,1.5vw,14px);letter-spacing:.3em;text-transform:uppercase;color:var(--gold)}
.h{font-family:var(--serif);font-weight:400;font-size:clamp(28px,5.6vw,72px);line-height:1.04;margin:0;text-wrap:balance;text-shadow:0 4px 30px #0007}
.h.xl{font-size:clamp(34px,7.4vw,104px)}
.h.rose{color:var(--rose)}
.h.gold{color:var(--gold)}
.p{font-size:clamp(16px,2.3vw,28px);line-height:1.35;margin:0;max-width:34ch;color:var(--cream);text-wrap:balance}
.p.wide{max-width:52ch}
.p.hand{font-family:var(--hand);font-size:clamp(24px,4vw,46px);color:var(--blush);max-width:30ch}
.p.small{font-size:clamp(13px,1.6vw,18px);color:#ffffffa8}
.w{display:inline-block;opacity:0}
.show .w,.w.show{animation:wordin .9s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--i)*70ms)}
@keyframes wordin{from{opacity:0;transform:translateY(.9em) rotate(var(--wr,4deg)) scale(.92);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
.item{opacity:0;pointer-events:none}
.item.show{opacity:1;pointer-events:auto}
.item.show.fly{animation:fly 1s cubic-bezier(.17,.9,.28,1.2) both;animation-delay:var(--d,0ms)}
@keyframes fly{from{opacity:0;transform:translate(var(--fx,0),var(--fy,60px)) rotate(calc(var(--r,0deg) + var(--fr,12deg))) scale(.55)}60%{opacity:1}to{opacity:1;transform:rotate(var(--r,0deg)) scale(1)}}
.item.show.rise{animation:rise .9s cubic-bezier(.16,1,.3,1) both;animation-delay:var(--d,0ms)}
@keyframes rise{from{opacity:0;transform:translateY(36px) scale(.96)}to{opacity:1;transform:none}}

.wall{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:clamp(10px,2vw,28px);max-width:96vw;--ph:30vh}
.pol{position:relative;background:var(--cream);padding:clamp(6px,.9vw,12px) clamp(6px,.9vw,12px) 0;border-radius:3px;box-shadow:0 18px 40px #000a,0 2px 0 #fff3 inset;transform:rotate(var(--r,0deg));color:#2a1a2e}
.pol img{display:block;height:var(--ph);width:auto;max-width:44vw;object-fit:cover;border-radius:1px}
.pol::before{content:"";position:absolute;top:-10px;left:50%;width:70px;height:20px;transform:translateX(-50%) rotate(-3deg);background:#f3c56ecc;opacity:.75;mix-blend-mode:screen}
.pol .cap{font-family:var(--hand);font-size:clamp(18px,2.4vw,30px);line-height:1;padding:8px 4px 10px;min-height:1.6em;white-space:nowrap}
.pol .cap:empty{display:none}
.pol .cap:empty~*{}
.pol:not(:has(.cap:not(:empty))){padding-bottom:clamp(6px,.9vw,12px)}
.stack{position:relative;width:calc(var(--ph)*1.05);height:calc(var(--ph)*1.25)}
.stack .pol{position:absolute;left:0;right:auto}
.stack .pol img{max-width:none}
.stack .name{position:absolute;left:0;right:0;bottom:-6px;font-family:var(--serif);font-size:clamp(18px,2.4vw,30px);color:var(--gold);text-shadow:0 2px 12px #000}

.vid{position:relative;width:min(88vw,calc(var(--vh,52vh)*var(--ar,1.78)));max-height:var(--vh,52vh);border-radius:10px;overflow:hidden;background:#000;box-shadow:0 24px 60px #000b,0 0 0 1px #ffffff22}
.vid video{display:block;width:100%;height:auto;aspect-ratio:var(--ar,1.78);max-height:var(--vh,52vh);object-fit:contain;background:#000}  /* (Derek, 2026-10-09: the box is as tall as the clip, so no black bars above and below on a phone) */
.vid.tall{width:auto}
.vid.tall video{width:auto;height:var(--vh,52vh);max-width:88vw}

.menu{position:fixed;inset:0;z-index:5;background:#140b1ee8;backdrop-filter:blur(8px);display:none;overflow:auto;padding:max(20px,env(safe-area-inset-top)) 20px 20px}
.menu.on{display:block}
.menu ol{max-width:560px;margin:24px auto;padding:0;list-style:none;display:grid;gap:6px}
.menu button{all:unset;cursor:pointer;display:block;width:100%;padding:12px 14px;border-radius:10px;border:1px solid #ffffff22;font-size:18px}
.menu button:hover,.menu button:focus-visible{border-color:var(--rose);background:#ffffff10;outline:none}
.menu h3{font-family:var(--serif);font-weight:400;text-align:center;font-size:30px;margin:0}

nav{display:flex;align-items:center;justify-content:space-between;gap:14px;padding-block:10px max(14px,env(safe-area-inset-bottom))}
nav button{min-width:112px;text-align:center;touch-action:manipulation;font:inherit;font-weight:600;letter-spacing:.04em;color:var(--cream);background:#ffffff14;border:1px solid #ffffff33;border-radius:999px;padding:13px 26px;min-height:48px;cursor:pointer;transition:transform .15s,background .15s}
nav button.next{background:linear-gradient(135deg,var(--rose),#ff8a5c);border:0;color:#2a0d1c;box-shadow:0 8px 28px #ff5c8a55}
@media (hover:hover){nav button:hover:not(:disabled){transform:translateY(-2px)}}
nav button:disabled{opacity:.3;cursor:default}
nav button:focus-visible{outline:3px solid var(--gold);outline-offset:3px}
.hint{font-size:12px;color:#ffffff80;text-align:center;flex:1}

@media (max-width:640px){
  .hint{display:none}
  .pol img{max-width:40vw}
  nav{gap:10px}
  nav button{padding:12px 10px;min-width:0}
  nav #back{flex:0 0 34%}
  nav #next{flex:1 1 0}
}
@media (prefers-reduced-motion:reduce){
  #sky i{animation:none}
  .item.show.fly,.item.show.rise,.show .w,.w.show{animation-duration:.01s;animation-delay:0s}
}

/* stacked pictures for each grandchild: later ones fly in on top, one after another */
.stack.item{opacity:1}
.stack .pol{opacity:0}
.stack.show .pol{animation:fly 1s cubic-bezier(.17,.9,.28,1.2) both;animation-delay:var(--d,0ms)}
.stack:not(.show){visibility:hidden}
.stack .pol .cap{display:none}
.gone{display:none!important}
.h.keep.mini{font-size:clamp(20px,3.2vw,40px)}
.scene{justify-content:flex-start;padding-top:clamp(6px,2vh,20px)}
.wall{flex:0 0 auto}
main{overflow:hidden}
.pol,.stack{flex:none}
.wall{flex:1 1 0;min-height:0;align-content:center;align-content:safe center;width:100%}
.wall.solo .pol img{max-width:90vw}
/* (Derek, 2026-10-09: the browser's default figure margin (16px top and bottom, 40px each side) pushed pictures into one per row and over the buttons; the gap does the spacing now) */
.pol{margin:0}
.wall{gap:clamp(14px,2.4vw,34px)}
.pol{width:min-content;max-width:none}
.pol .cap{white-space:nowrap;width:0;min-width:100%;overflow:hidden;min-height:0;text-align:center;line-height:1.05}
#app{grid-template-columns:minmax(0,1fr)}
main,.scene,.wall,.txt{min-width:0}
/* split scenes: words on the left, one big picture on the right (wide screens only) */
@media (min-width:900px){
  .scene.split{flex-direction:row;align-items:center;justify-content:center;gap:4vw;padding-top:0}
  .scene.split .txt{flex:0 0 36%;align-items:flex-start;text-align:left}
  .scene.split .txt .p{max-width:22ch}
  .scene.split .wall{flex:1 1 0}
}
/* derekblum.com menu bar (Derek, 2026-10-09). Scoped to #sitenav so it can't touch the story's own styles. */
#sitenav{--nav-bg:#1a1e28;--nav-surface:#232936;--nav-border:#333c4e;--nav-ink:#eceff5;--nav-ink-2:#b7c0d1;--accent:#6d9bff;
  position:fixed;top:0;left:0;right:0;z-index:60;height:46px;display:flex;align-items:center;gap:6px 18px;padding:0 clamp(12px,2vw,24px);
  background:rgba(26,30,40,.94);backdrop-filter:blur(8px);border-bottom:1px solid var(--nav-border);font-family:var(--sans)}
#sitenav a,#sitenav summary{font-size:12px;font-weight:600;color:var(--nav-ink-2);text-decoration:none;padding:5px 10px;border-radius:6px;transition:color .15s,background .15s}
#sitenav a:hover,#sitenav summary:hover{color:var(--nav-ink);background:var(--nav-surface)}
#sitenav .sn-brand{font-size:13.5px;font-weight:800;color:var(--nav-ink);padding-left:0;white-space:nowrap}
#sitenav .sn-contact{display:flex;gap:4px}
#sitenav .sn-title{margin:0 auto;font-family:var(--serif);font-size:18px;color:var(--gold);white-space:nowrap;letter-spacing:.01em}
#sitenav .sn-links{display:flex;align-items:center;gap:6px}
#sitenav .sn-cta{font-weight:700;color:var(--nav-bg);background:var(--accent);padding:5px 12px;border-radius:999px;white-space:nowrap}
#sitenav .sn-cta:hover{color:var(--nav-bg);background:var(--accent);filter:brightness(1.08)}
#sitenav .nav-dropdown{position:relative}
#sitenav summary{list-style:none;cursor:pointer;display:inline-block;user-select:none}
#sitenav summary::-webkit-details-marker{display:none}
#sitenav summary::after{content:"\25BE";margin-left:5px;font-size:9px;display:inline-block}
#sitenav .nav-dropdown.is-active>summary,#sitenav .nav-dropdown[open]>summary{color:var(--accent);background:rgba(109,155,255,.12)}
#sitenav .nav-dropdown-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:70;display:flex;flex-direction:column;min-width:190px;background:var(--nav-surface);border:1px solid var(--nav-border);border-radius:10px;padding:6px;box-shadow:0 12px 28px rgba(0,0,0,.4)}
#sitenav .nav-dropdown-menu a{font-size:12.5px;padding:7px 10px;white-space:nowrap}
#sitenav .nav-dropdown-menu a:hover{background:var(--nav-bg)}
#sitenav .nav-dropdown-menu a.is-active{color:var(--accent);background:rgba(109,155,255,.12)}
#sitenav .nav-dropdown-heading{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--nav-ink-2);opacity:.85;padding:8px 10px 4px}
#sitenav .nav-dropdown:last-child>.nav-dropdown-menu{left:auto;right:0}
#app{padding-top:46px}
@media (max-width:1000px){#sitenav .sn-contact,#sitenav .sn-cta{display:none}}
@media (max-width:640px){#sitenav .sn-brand{display:none}#sitenav .sn-title{margin:0 auto 0 0;font-size:16px}}@media (max-width:640px){#sitenav{gap:4px 8px;padding:0 8px}#sitenav .sn-links{gap:2px}#sitenav a,#sitenav summary{font-size:11.5px;padding:5px 6px}}
/* (Derek, 2026-10-09: on a 360px phone the menu words wrapped onto two lines; keep each on one line and tighten) */
@media (max-width:640px){#sitenav a,#sitenav summary{white-space:nowrap}}
@media (max-width:420px){#sitenav{gap:2px 4px;padding:0 6px}#sitenav .sn-title{font-size:14px}#sitenav a,#sitenav summary{font-size:11px;padding:5px 4px}#sitenav summary::after{margin-left:3px}}
/* (Derek, 2026-10-09: on a phone the words always sit in front of the pictures, so nothing crosses over them while it flies in) */
@media (max-width:700px){.txt{position:relative;z-index:3}}
