/* David Dessel — shared site styles */
:root{
  --bg:#000;
  --fg:#fff;
  --red:#e3211b;
  --muted:#9a9a9a;
  --gap:12px;
  --gutter:clamp(16px,3vw,40px);
  --rowH:clamp(200px,26vw,380px);
  --ease:cubic-bezier(.2,.8,.2,1);
  --sans:'Montserrat','Helvetica Neue',Arial,sans-serif;
  --grow:620ms; --recede:520ms;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased}
body.locked{overflow:hidden}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
img{display:block}

/* ---------- Header ---------- */
.masthead{text-align:center;padding:48px var(--gutter) 40px}
.masthead .name{display:inline-block;margin:0;font-weight:800;font-size:clamp(40px,6.4vw,88px);line-height:.95;letter-spacing:.01em;color:var(--red);text-transform:uppercase}
.masthead .role{margin:16px 0 0;font-weight:500;font-size:clamp(12px,1.1vw,15px);letter-spacing:.55em;text-indent:.55em;color:var(--fg);text-transform:uppercase}
.nav{display:flex;justify-content:center;flex-wrap:wrap;gap:8px 44px;margin-top:28px}
.nav a{font-weight:500;font-size:15px;letter-spacing:.22em;text-transform:uppercase;color:var(--fg);padding:10px 0;transition:color .25s}
.nav a:hover{color:var(--red)}
.nav a[aria-current="page"]{color:var(--red)}
.nav a:focus-visible{outline:2px solid var(--fg);outline-offset:4px}

/* ---------- Motion: staggered rows ---------- */
.reel{display:flex;flex-direction:column;align-items:center;gap:var(--gap);padding:0 var(--gutter)}
.row{display:flex;justify-content:center;gap:var(--gap);width:100%}
.tile{all:unset;position:relative;display:block;height:var(--rowH);flex:0 1 auto;min-width:0;max-width:100%;overflow:hidden;cursor:pointer;background:#111}
.tile img{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .6s ease,transform .9s var(--ease),filter .4s ease}
.tile img.loaded{opacity:1}
.tile .label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:16px;text-align:center;font-weight:700;font-size:clamp(14px,1.4vw,20px);letter-spacing:.12em;text-transform:uppercase;color:var(--red);opacity:0;transition:opacity .35s ease}
/* hover effects only on devices with a real mouse, so phones never dim/zoom a frame while scrolling */
@media (hover:hover){
  .tile:hover img{filter:brightness(.35);transform:scale(1.03)}
  .tile:hover .label{opacity:1}
}
.tile:focus-visible img{filter:brightness(.35)}
.tile:focus-visible .label{opacity:1}
.tile:focus-visible{outline:2px solid var(--fg);outline-offset:3px}
.tile.is-source{visibility:hidden}
.tile.no-thumb .label{opacity:1}
.tile.vertical img{width:316%;max-width:none;margin-left:-108%;object-fit:fill}

/* Phones/tablets: Vimeo player inside each frame */
.tile.m{cursor:default}
.tile.m img{opacity:1;transition:none;transform:none !important;filter:none !important}
.tile.m iframe{position:absolute;inset:0;width:100%;height:100%;border:0;z-index:2;opacity:0;transition:opacity .3s ease}
/* the player stays invisible (but still takes the tap) until it plays,
   so scrolling only ever shows our own sharp thumbnail */
.tile.m.live iframe{opacity:1}
.tile.m .mplay{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;pointer-events:none}
.tile.live .mplay{display:none}
.tile.m .cap{z-index:3;pointer-events:none}
.tile.live{position:fixed !important;left:var(--lx) !important;top:var(--ly) !important;width:var(--lw) !important;height:var(--lh) !important;max-width:none !important;aspect-ratio:auto !important;z-index:60;background:#000;transition:left .55s var(--ease),top .55s var(--ease),width .55s var(--ease),height .55s var(--ease)}
.tile.live img,.tile.live .cap{opacity:0 !important}
.tile-ph{flex:none;max-width:100%}
.mclose{position:fixed;top:14px;right:14px;z-index:61;background:rgba(0,0,0,.55);opacity:0;transition:opacity .3s}
.mclose.on{opacity:1}
.tile .cap{display:none}

/* Player: the tile grows into this, plays, then recedes */
.veil{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.94);opacity:0;transition:opacity var(--grow) ease}
.veil.on{opacity:1}
.stage{position:fixed;z-index:60;background:#000;overflow:hidden;transition:top var(--grow) var(--ease),left var(--grow) var(--ease),width var(--grow) var(--ease),height var(--grow) var(--ease)}
.stage.receding{transition-duration:var(--recede);transition-timing-function:cubic-bezier(.5,0,.25,1)}
.stage .poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.stage iframe{position:absolute;inset:0;width:100%;height:100%;border:0;opacity:0;transition:opacity .45s ease}
.stage iframe.ready{opacity:1}
.stage-meta{position:fixed;z-index:60;display:flex;justify-content:space-between;align-items:center;gap:16px;opacity:0;transform:translateY(8px);transition:opacity .35s ease,transform .35s var(--ease)}
.stage-meta.on{opacity:1;transform:none}
.stage-meta strong{font-weight:700;font-size:16px;letter-spacing:.14em;text-transform:uppercase;color:var(--red);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Round icon buttons (player + lightbox) */
.ibtn{all:unset;cursor:pointer;flex:none;width:44px;height:44px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.6);transition:background .2s,border-color .2s}
.ibtn path{stroke:#fff}
.ibtn:hover{background:var(--red);border-color:var(--red)}
.ibtn:focus-visible{outline:2px solid #fff;outline-offset:3px}

/* ---------- Stills ---------- */
.stills{padding:0 var(--gutter);display:flex;flex-direction:column;gap:56px}
.set h2{margin:0 0 18px;text-align:center;font-weight:500;font-size:13px;letter-spacing:.4em;text-indent:.4em;text-transform:uppercase;color:var(--fg)}
.set .rows{display:flex;flex-direction:column;align-items:center;gap:var(--gap)}
.set .row{display:flex;justify-content:center;gap:var(--gap)}
.photo{all:unset;cursor:zoom-in;display:block;overflow:hidden;background:#111}
.photo img{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .5s ease,filter .4s ease}
.photo img.loaded{opacity:1}
.photo:hover img{filter:brightness(.8)}
.photo:focus-visible{outline:2px solid #fff;outline-offset:3px}

.lb{position:fixed;inset:0;z-index:70;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(0,0,0,.96);opacity:0;transition:opacity .4s ease}
.lb.on{opacity:1}
.lb-inner{display:flex;flex-direction:column;gap:16px;max-width:min(1400px,100%);transform:scale(.92);transition:transform .5s var(--ease)}
.lb.on .lb-inner{transform:none}
.lb-img{display:flex;justify-content:center}
.lb-img img{max-width:100%;max-height:calc(100vh - 130px);width:auto;height:auto;transition:opacity .25s ease}
.lb-img img.fading{opacity:0}
.lb-bar{display:flex;justify-content:space-between;align-items:center;gap:16px}
.lb-cap{font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted)}
.lb-btns{display:flex;gap:8px}

/* ---------- Footer / contact ---------- */
.contact{margin-top:96px;padding:40px var(--gutter) 48px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;border-top:1px solid #1e1e1e}
.contact .links{display:flex;flex-wrap:wrap;gap:12px 36px}
.contact a{display:inline-flex;align-items:center;gap:10px;font-size:14px;letter-spacing:.08em;color:var(--fg);padding:6px 0;transition:color .2s}
.contact a:hover{color:var(--red)}
.contact svg{flex:none}
.contact small{font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}

/* ---------- Phones ---------- */
@media (max-width:760px){
  .masthead{padding-top:36px}
  .nav{gap:4px 28px}
  .nav a{font-size:13px}
  .reel .row{flex-direction:column}
  .tile{height:auto !important;aspect-ratio:16/9 !important;width:100%}
  .tile.vertical{aspect-ratio:9/16 !important;width:60%;align-self:center}
  .tile .label{display:none}
  .tile .cap{display:block;position:absolute;left:0;right:0;bottom:0;padding:28px 12px 10px;font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;background:linear-gradient(transparent,rgba(0,0,0,.75))}
}
@media (prefers-reduced-motion:reduce){
  :root{--grow:1ms;--recede:1ms}
  html{scroll-behavior:auto}
}
