/* site.css — Micah Westera portfolio. Marquee direction, full site.
   Vocabulary: Space Grotesk (display) + Space Mono (meta), flat discipline
   colour, hard 2px rules. Accent + hero size are driven by CSS vars set by Tweaks. */

:root{
  --ink:#111111;
  --paper:#f3efe6;
  --accent:#e5392c;        /* highlight dot + hero marker; Tweak-driven */
  --hl:#f5b81e;            /* headline highlight swatch */
  --hero-scale:1;          /* Tweak-driven multiplier on hero type */
  --marquee-dur:26s;       /* Tweak-driven band scroll speed */
  --rule:2px solid var(--ink);
  --font-display:'Space Grotesk',sans-serif;
  --font-body:'Space Grotesk',system-ui,sans-serif;
  --font-mono:'Space Mono',ui-monospace,monospace;
  --ink-mute:#676562;      /* solid muted-ink for secondary/meta text — ink blended into paper, ≥4.5:1 on paper */
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;background:var(--paper);color:var(--ink);
  font-family:var(--font-body);-webkit-font-smoothing:antialiased;}
.mono{font-family:var(--font-mono);}
a{color:inherit;text-decoration:none;}
button{font:inherit;cursor:pointer;}

/* ---------- shell ---------- */
.site{min-height:100vh;display:flex;flex-direction:column;}
.topbar{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;
  align-items:center;padding:16px 30px;background:var(--paper);border-bottom:var(--rule);}
.topbar .brand{font-weight:700;font-size:17px;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;}
.topbar .brand .star{color:var(--accent);}
.topbar nav{display:flex;gap:8px;align-items:center;}
.navmeta{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.05em;
  padding:8px 6px 8px 14px;opacity:.65;border-left:1px solid rgba(17,17,17,.25);margin-left:6px;}
.navlink{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;
  letter-spacing:.05em;padding:8px 14px;border:2px solid transparent;}
.navlink:hover{border-color:var(--ink);}
.navlink.on{background:var(--ink);color:var(--paper);}

.main{flex:1;}

/* shared footer */
.footer{border-top:var(--rule);}
.ticker{background:var(--ink);color:var(--paper);font-family:var(--font-mono);
  font-size:13px;letter-spacing:.1em;text-transform:uppercase;padding:10px 0;overflow:hidden;white-space:nowrap;}
.ticker.bar{padding:0;height:44px;}
.ticker .run{display:flex;width:max-content;animation:tickerscroll 38s linear infinite;will-change:transform;}
.ticker .run .set{display:flex;flex:0 0 auto;}
.ticker .run span{padding-right:42px;white-space:nowrap;}
@keyframes tickerscroll{from{transform:translateX(0);}to{transform:translateX(-50%);}}
.footgrid{display:grid;grid-template-columns:1.4fr 1fr 1fr;}
.footgrid>div{padding:34px 30px;border-right:1px solid rgba(17,17,17,.18);}
.footgrid>div:last-child{border-right:none;}
.footgrid h4{font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;margin:0 0 16px;color:var(--ink-mute);}
.footgrid p{margin:0;font-size:15px;line-height:1.7;}
.footBig{font-size:46px;font-weight:600;letter-spacing:-.03em;line-height:.95;}
.footBig .out{-webkit-text-stroke-width:2px;-webkit-text-stroke-color:#111;-webkit-text-fill-color:transparent;}
.footlink{font-family:var(--font-mono);font-size:14px;border-bottom:2px solid var(--accent);
  display:inline-block;padding-bottom:2px;}

/* ---------- home: hero ---------- */
.hero{position:relative;border-bottom:var(--rule);overflow:hidden;}
.hero .heroPad{padding:clamp(48px,7vw,84px) 30px;position:relative;z-index:2;}
.heroKick{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;
  letter-spacing:.14em;margin-bottom:26px;display:flex;gap:16px;align-items:center;flex-wrap:wrap;}
.heroKick b{width:10px;height:10px;border-radius:50%;background:var(--accent);display:inline-block;}
.heroBig{font-size:calc(80px * var(--hero-scale));line-height:.98;font-weight:500;
  letter-spacing:-.03em;margin:0;max-width:18ch;text-wrap:balance;}
.heroBig .hl{background:var(--hl);padding:0 .08em;box-decoration-break:clone;-webkit-box-decoration-break:clone;}
.heroBig .out{-webkit-text-stroke-width:2px;-webkit-text-stroke-color:#111;-webkit-text-fill-color:transparent;}
.heroFoot{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-top:36px;
  font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.04em;flex-wrap:wrap;}
.heroFoot .cta{border:2px solid currentColor;padding:13px 20px;font-weight:700;}

/* hero · minimal variant */
.hero[data-style="minimal"] .heroBig{font-size:calc(46px * var(--hero-scale));font-weight:500;max-width:24ch;}
.hero[data-style="minimal"] .heroPad{padding:clamp(40px,5vw,60px) 30px;}

/* hero · photo variant */
.hero[data-style="photo"]{color:#fff;}
.hero[data-style="photo"] .heroBig .out{-webkit-text-stroke-color:#fff;}
.hero .heroPhoto{position:absolute;inset:0;z-index:0;}
.hero .heroPhoto img,.hero .heroPhoto video{width:100%;height:100%;object-fit:cover;display:block;}
.hero[data-style="photo"] .heroPhoto{background:#1a1a1a;}
.hero .heroScrim{position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(0,0,0,.30),rgba(0,0,0,.62));}
.hero[data-style="photo"] .heroPad{min-height:520px;display:flex;flex-direction:column;justify-content:flex-end;}
.heroDrop{position:absolute;top:16px;right:16px;z-index:3;font-family:var(--font-mono);
  font-size:11px;text-transform:uppercase;letter-spacing:.06em;background:rgba(0,0,0,.55);color:#fff;
  border:1px solid rgba(255,255,255,.4);padding:6px 10px;}

/* ---------- home: filter ---------- */
.filterbar{display:flex;align-items:center;gap:10px;padding:16px 30px;border-bottom:var(--rule);
  flex-wrap:wrap;background:var(--paper);}
.filterbar .lbl{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;
  letter-spacing:.1em;color:var(--ink-mute);margin-right:4px;}
.fchip{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;font-weight:700;
  letter-spacing:.03em;border:2px solid var(--ink);background:transparent;padding:8px 14px;
  display:inline-flex;align-items:center;gap:8px;}
.fchip .sw{width:10px;height:10px;display:inline-block;}
.fchip.on{background:var(--ink);color:var(--paper);}
.fchip .ct{color:var(--ink-mute);}
.fchip.on .ct{opacity:.8;}

/* ---------- home: marquee bands ---------- */
.bands{border-bottom:var(--rule);}
.band{position:relative;display:block;height:134px;overflow:hidden;cursor:pointer;color:#fff;
  transition:height .2s;will-change:height;border-bottom:1px solid rgba(0,0,0,.18);}
.band:last-child{border-bottom:none;}
.bandMedia{position:absolute;inset:0;z-index:0;}
.bandMedia img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(.15) contrast(1.05);}
.bandTint{position:absolute;inset:0;opacity:.66;mix-blend-mode:multiply;}
.bandShade{position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(0,0,0,.22),rgba(0,0,0,0) 16%,rgba(0,0,0,0) 84%,rgba(0,0,0,.22));}
.band .bandInner{position:relative;z-index:1;display:flex;width:max-content;align-items:center;height:100%;white-space:nowrap;
  animation:bandscroll var(--marquee-dur) linear infinite;will-change:transform;}
.band:hover{height:184px;}
.band:hover .bandInner{animation-play-state:paused;}
@keyframes bandscroll{from{transform:translateX(0);}to{transform:translateX(-50%);}}
.bandHalf{display:flex;align-items:center;flex:0 0 auto;}
.unit{display:flex;align-items:center;gap:40px;padding-left:40px;}
.bTitle{font-size:54px;font-weight:700;letter-spacing:-.02em;line-height:1;text-shadow:0 2px 18px rgba(0,0,0,.22);}
.bMeta{font-family:var(--font-mono);font-size:14px;text-transform:uppercase;letter-spacing:.06em;opacity:.95;}
.bSep{font-size:20px;opacity:.6;font-weight:300;}
.bandCap{position:absolute;top:0;bottom:0;z-index:3;display:flex;align-items:center;gap:8px;padding:0 22px;
  font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.07em;color:#fff;
  background:rgba(255,255,255,.1);backdrop-filter:blur(10px) saturate(1.1);-webkit-backdrop-filter:blur(10px) saturate(1.1);}
.bandCap.left{left:0;border-right:1px solid rgba(255,255,255,.3);max-width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bandCap.right{right:0;border-left:1px solid rgba(255,255,255,.3);}
.band.dimmed{display:none;}

/* home CTA */
.homeCta{padding:54px 30px;display:flex;justify-content:space-between;align-items:flex-end;gap:30px;flex-wrap:wrap;}
.homeCta .big{font-size:58px;font-weight:500;letter-spacing:-.03em;line-height:.95;}
.homeCta .big .out{-webkit-text-stroke-width:2px;-webkit-text-stroke-color:#111;-webkit-text-fill-color:transparent;}
.homeCta .btn{font-family:var(--font-mono);font-size:14px;font-weight:700;text-transform:uppercase;
  background:var(--ink);color:var(--paper);padding:18px 26px;}

/* ---------- project detail ---------- */
.proj{}
.projTop{display:flex;justify-content:space-between;align-items:center;padding:14px 30px;
  border-bottom:var(--rule);font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.05em;}
.backlink{display:inline-flex;align-items:center;gap:8px;}
.backlink:hover{color:var(--accent);}
.projHead{color:#fff;padding:46px 30px;position:relative;overflow:hidden;border-bottom:var(--rule);min-height:300px;
  display:flex;align-items:flex-end;}
.projMedia{position:absolute;inset:0;z-index:0;}
.projMedia img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(.15) contrast(1.05);}
.projMedia .tint{position:absolute;inset:0;opacity:.7;mix-blend-mode:multiply;}
.projMedia .shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.1),rgba(0,0,0,.5));}
.projHead .inner{position:relative;z-index:1;}
.projDisc{font-family:var(--font-mono);font-size:14px;text-transform:uppercase;letter-spacing:.14em;margin-bottom:14px;}
.projTitle{font-size:clamp(54px,9vw,120px);line-height:.9;font-weight:700;letter-spacing:-.04em;margin:0;max-width:16ch;}
.projLede{font-size:21px;line-height:1.45;max-width:60ch;margin:22px 0 0;}
.projMetaRow{display:flex;flex-wrap:wrap;gap:0;border-bottom:var(--rule);}
.projMetaRow .cell{flex:1 1 25%;min-width:200px;padding:20px 24px;border-right:1px solid rgba(17,17,17,.18);}
.projMetaRow .cell:last-child{border-right:none;}
.projMetaRow .k{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-mute);margin-bottom:8px;}
.projMetaRow .v{font-size:16px;font-weight:500;line-height:1.3;}
.projBody{display:grid;grid-template-columns:1.5fr 1fr;gap:0;border-bottom:var(--rule);}
.projText{padding:40px 30px;border-right:var(--rule);}
.projText p{font-size:18px;line-height:1.65;margin:0 0 20px;max-width:60ch;}
.projText p:last-child{margin-bottom:0;}
.projCredits{padding:40px 30px;}
.projCredits h3{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.14em;margin:0 0 18px;color:var(--ink-mute);}
.credRow{display:flex;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid rgba(17,17,17,.16);font-size:14px;}
.credRow .ck{font-family:var(--font-mono);text-transform:uppercase;font-size:12px;letter-spacing:.04em;opacity:.6;}
.credRow .cv{font-weight:500;text-align:right;}

/* media blocks */
.mediaWrap{padding:40px 30px;border-bottom:var(--rule);}
.mediaWrap h3{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.14em;margin:0 0 20px;color:var(--ink-mute);}
.mediaGrid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;}
.media{border:var(--rule);background:#fff;overflow:hidden;}
.media.full{grid-column:1 / -1;}
.mediaArt{height:240px;display:flex;align-items:center;justify-content:center;position:relative;color:#fff;}
.media.full .mediaArt{height:300px;}
.mediaArt .ghostNum{font-size:160px;font-weight:700;color:rgba(255,255,255,.16);line-height:1;}
.mediaArt .play{position:absolute;width:74px;height:74px;border-radius:50%;background:#fff;color:var(--ink);
  display:flex;align-items:center;justify-content:center;font-size:26px;border:2px solid var(--ink);}
.mediaArt .kindTag{position:absolute;top:14px;left:14px;font-family:var(--font-mono);font-size:11px;
  text-transform:uppercase;letter-spacing:.08em;background:rgba(0,0,0,.5);padding:5px 9px;}
.mediaBar{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-top:var(--rule);
  font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.04em;}
/* audio waveform placeholder */
.wave{display:flex;align-items:center;gap:3px;height:46px;}
.wave i{width:4px;background:rgba(255,255,255,.85);display:block;border-radius:1px;}

.projNav{display:flex;border-bottom:var(--rule);}
.projNav a{flex:1;padding:30px;display:flex;flex-direction:column;gap:8px;transition:background .12s,color .12s;}
.projNav a:hover{background:var(--ink);color:var(--paper);}
.projNav a.next{text-align:right;border-left:var(--rule);}
.projNav .pn{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.1em;opacity:.6;}
.projNav .pt{font-size:34px;font-weight:700;letter-spacing:-.02em;}

/* ---------- CV ---------- */
.cv{}
.cvHead{padding:54px 30px;border-bottom:var(--rule);display:grid;grid-template-columns:1fr auto;gap:30px;align-items:end;}
.cvHead h1{font-size:clamp(56px,9vw,104px);line-height:.9;font-weight:700;letter-spacing:-.04em;margin:0;}
.cvHead .dl{font-family:var(--font-mono);font-size:14px;font-weight:700;text-transform:uppercase;
  background:var(--ink);color:var(--paper);padding:16px 22px;white-space:nowrap;}
.cvStatement{padding:40px 30px;border-bottom:var(--rule);font-size:22px;line-height:1.5;max-width:70ch;}
.cvStatement .hl{background:var(--hl);padding:0 .06em;}
.cvSection{border-bottom:var(--rule);}
.cvSection .sechead{display:flex;align-items:baseline;gap:14px;padding:22px 30px 0;}
.cvSection .sechead .no{font-family:var(--font-mono);font-size:13px;color:var(--ink-mute);}
.cvSection .sechead h2{font-size:30px;font-weight:700;letter-spacing:-.02em;margin:0;text-transform:uppercase;}
.cvRows{padding:14px 30px 26px;max-width:1080px;}
.cvRow{display:grid;grid-template-columns:120px 1fr;gap:24px;padding:16px 0;border-bottom:1px solid rgba(17,17,17,.15);}
.cvRow:last-child{border-bottom:none;}
.cvRow .yr{font-family:var(--font-mono);font-size:14px;letter-spacing:.02em;padding-top:4px;}
.cvRow .role{font-size:22px;font-weight:600;letter-spacing:-.01em;}
.cvRow .org{font-size:16px;margin-top:3px;}
.cvRow .org .acc{color:var(--accent);}
.cvRow .note{font-family:var(--font-mono);font-size:13px;opacity:.7;margin-top:6px;line-height:1.5;}
.cvRow .tag{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.06em;
  border:1.5px solid var(--ink);padding:3px 8px;display:inline-block;margin-top:6px;}
.cvTwo{display:grid;grid-template-columns:1fr 1fr;}
.cvTwo>div:first-child{border-right:var(--rule);}
.cvTagwrap{display:flex;flex-wrap:wrap;gap:10px;padding:14px 30px 28px;}
.cvTagwrap span{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.03em;
  border:2px solid var(--ink);padding:8px 14px;}

@media (prefers-reduced-motion: reduce){
  .band .bandInner,.ticker .run{animation:none;}
}

/* ---------- rich-text content (from CMS editor) ---------- */
.rtcontent p{font-size:18px;line-height:1.65;margin:0 0 20px;max-width:60ch;}
.rtcontent p:last-child{margin-bottom:0;}
.rtcontent h2{font-size:30px;font-weight:700;letter-spacing:-.02em;margin:30px 0 12px;}
.rtcontent h3{font-size:22px;font-weight:700;letter-spacing:-.01em;margin:26px 0 10px;}
.rtcontent ul,.rtcontent ol{margin:0 0 20px;padding-left:22px;max-width:60ch;}
.rtcontent li{font-size:18px;line-height:1.6;margin:0 0 6px;}
.rtcontent a{border-bottom:2px solid var(--accent);}
.rtcontent strong{font-weight:700;}
.rtcontent em{font-style:italic;}
.cvStatement .rtcontent p{font-size:22px;line-height:1.5;max-width:70ch;margin:0;}

/* ---------- font roles: headings use the display font, copy uses body ---------- */
.topbar .brand,.heroBig,.bTitle,.projTitle,.footBig,.homeCta .big,
.cvHead h1,.cvSection .sechead h2,.cvRow .role,.projNav .pt,
.rtcontent h2,.rtcontent h3{font-family:var(--font-display);}

.cvRow .role a{border-bottom:3px solid var(--accent);}
.cvRow .role a:hover{color:var(--accent);}

/* ---------- project gallery (multiple images) ---------- */
.galleryWrap{padding:40px 30px;border-bottom:var(--rule);}
.galleryWrap h3{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.14em;margin:0 0 20px;color:var(--ink-mute);}
.galleryGrid{display:flex;flex-wrap:wrap;gap:14px;margin-top:18px;}
.gItem{margin:0;border:var(--rule);background:#fff;overflow:hidden;cursor:zoom-in;flex:1 1 auto;min-width:0;height:240px;}
.gItem img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s ease;}
.gItem:hover img{transform:scale(1.03);}
/* absorbs leftover space on the final row so those items keep natural proportions */
.gFill{flex-grow:1000000;}


/* ---------- project media: players + lightbox ---------- */
.gItem{cursor:zoom-in;}
.mediaPlayer{margin:0 0 18px;border:var(--rule);background:#000;}
.mediaPlayer video{width:100%;display:block;max-height:520px;background:#000;}
.mediaPlayer figcaption{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.05em;
  padding:12px 16px;border-top:var(--rule);background:var(--paper);color:var(--ink);}
.scEmbed{margin:0 0 16px;border:var(--rule);background:#fff;}
.scEmbed iframe{width:100%;height:140px;display:block;border:0;}
.scEmbed figcaption{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.05em;padding:10px 14px;border-top:var(--rule);}
.audioRow{margin:0 0 14px;border:var(--rule);background:#fff;
  padding:14px 16px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;}
.audioRow .audioMeta{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.05em;min-width:140px;}
.audioRow audio{flex:1;min-width:240px;height:38px;}
.lightbox{position:fixed;inset:0;z-index:200;background:rgba(10,10,10,.92);display:flex;align-items:center;justify-content:center;padding:40px;cursor:zoom-out;}
.lightbox .lbFig{margin:0;max-width:92vw;max-height:90vh;display:flex;flex-direction:column;cursor:default;}
.lightbox .lbFig img{max-width:92vw;max-height:82vh;object-fit:contain;border:2px solid #fff;background:#000;}
.lightbox .lbFig figcaption{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:#fff;padding:12px 2px;}
.lightbox .lbClose{position:absolute;top:18px;right:22px;width:46px;height:46px;border:2px solid #fff;background:transparent;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.lightbox .lbClose:hover{background:#fff;color:#111;}
.lightbox .lbNav{position:absolute;top:50%;transform:translateY(-50%);width:54px;height:54px;border:2px solid #fff;background:transparent;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.lightbox .lbNav:hover{background:#fff;color:#111;}
.lightbox .lbNav.prev{left:22px;} .lightbox .lbNav.next{right:22px;}

/* ---------- maintenance page ---------- */
.maintWrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--paper);color:var(--ink);padding:30px;}
.maintCard{max-width:620px;text-align:center;}
.maintMark{color:var(--accent);font-size:34px;margin-bottom:18px;}
.maintCard h1{font-family:var(--font-display);font-size:clamp(40px,8vw,84px);line-height:.95;letter-spacing:-.03em;margin:0 0 18px;text-transform:uppercase;}
.maintCard p{font-family:var(--font-body);font-size:20px;line-height:1.5;max-width:46ch;margin:0 auto;text-wrap:pretty;}

/* credit sections + project links */
.credSection{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--accent);margin:22px 0 10px;padding-top:14px;border-top:1px solid rgba(17,17,17,.16);}
.credSection:first-child{margin-top:0;padding-top:0;border-top:none;}
.projLinks{display:flex;flex-direction:column;gap:8px;margin-top:22px;padding-top:16px;border-top:1px solid rgba(17,17,17,.16);}
.projLink{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--accent);align-self:flex-start;padding-bottom:2px;}
.projLink:hover{color:var(--accent);}

/* video gallery: justified rows — fixed media height, width follows aspect ratio */
.videoGallery{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start;}
.videoGallery .videoCell{margin:0;border:var(--rule);background:#000;overflow:hidden;display:flex;flex-direction:column;flex:0 1 auto;max-width:100%;}
.videoGallery .videoCell video{height:232px;width:auto;max-width:100%;display:block;background:#000;}
.videoGallery .videoCell.isEmbed .videoEmbed{height:232px;width:auto;aspect-ratio:16/9;}
.videoGallery .videoCell figcaption{flex:0 0 auto;font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.05em;padding:9px 12px;border-top:var(--rule);background:var(--paper);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
/* a lone video shouldn't look lost */
.videoGallery:has(.videoCell:only-child) .videoCell{width:min(720px,100%);}
.videoGallery:has(.videoCell:only-child) .videoCell video{height:auto;width:100%;max-height:520px;object-fit:contain;}
.videoGallery:has(.videoCell:only-child) .videoCell.isEmbed .videoEmbed{height:auto;width:100%;}

.videoEmbed{position:relative;width:100%;height:100%;overflow:hidden;background:#000;}
.videoEmbed iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}

/* CV portrait */
.cvStatement.withPhoto{display:grid;grid-template-columns:1fr 220px;gap:34px;align-items:start;}
.cvPhoto{border:var(--rule);overflow:hidden;aspect-ratio:4/5;max-width:220px;background:#ddd;}
.cvPhoto img{width:100%;height:100%;object-fit:cover;display:block;transform-origin:center;}
@media (max-width:760px){.cvStatement.withPhoto{grid-template-columns:1fr;}.cvPhoto{aspect-ratio:3/2;}}

/* CV: selected-shows single row */
.cvRow.showRow{display:grid;grid-template-columns:70px minmax(160px,auto) auto auto;gap:14px 32px;align-items:baseline;justify-content:start;}
.cvRow.showRow .showTitle{font-size:18px;font-weight:600;letter-spacing:-.01em;}
.cvRow.showRow .showTitle a{border-bottom:2px solid var(--accent);}
.cvRow.showRow .showRole{font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.03em;opacity:.85;}
.cvRow.showRow .showVenue{font-size:15px;}
@media (max-width:760px){.cvRow.showRow{grid-template-columns:60px 1fr;}.cvRow.showRow .showRole,.cvRow.showRow .showVenue{grid-column:2;}}
/* project credits: keep name on the same line, balance the role wrap */
.credRow{align-items:baseline;}
.credRow .ck{flex:1;text-wrap:balance;padding-right:14px;}
.credRow .cv{white-space:normal;text-align:right;max-width:55%;}
/* project links as a button box that fills the credits column */
.projLinks{gap:10px;}
.projLink{display:block;width:100%;box-sizing:border-box;text-align:center;border:2px solid var(--ink);
  border-bottom:2px solid var(--ink);padding:13px 16px;font-family:var(--font-mono);font-size:13px;
  text-transform:uppercase;letter-spacing:.05em;transition:background .12s,color .12s;}
.projLink:hover{background:var(--ink);color:var(--paper);}

/* CV: two-column tag sections (skills + clients side by side) */
.cvSection.cvTwo{display:grid;grid-template-columns:1fr 1fr;}
.cvSection.cvTwo .cvRows{max-width:none;}
.cvSection.cvTwo>div{border-right:1px solid rgba(17,17,17,.16);}
.cvSection.cvTwo>div:last-child{border-right:none;}
@media (max-width:760px){.cvSection.cvTwo{grid-template-columns:1fr;}.cvSection.cvTwo>div{border-right:none;}}

.filterToggle{display:none;}
/* ===== MOBILE ===== */
html{overflow-x:clip;}
@media (max-width:720px){
  /* header: name on top (scrolls away), nav row sticky */
  .topbar{display:contents;}
  .topbar .brand{justify-content:center;text-align:center;font-size:18px;padding:14px 16px 10px;}
  .topbar nav{position:sticky;top:0;z-index:60;background:var(--paper);border-top:var(--rule);border-bottom:var(--rule);display:flex;justify-content:center;flex-wrap:wrap;gap:4px;padding:7px 8px;}
  .navlink{font-size:12px;padding:7px 11px;}
  .navmeta{display:none;}

  .hero .heroPad,.filterbar,.homeCta,.projTop,.projHead,.projText,.projCredits,.mediaWrap,.galleryWrap,.cvStatement,.cvRows,.cvSection .sechead,.cvTagwrap,.footgrid>div,.projNav a{padding-left:16px;padding-right:16px;}
  .cvHead{padding:30px 16px;}

  .heroBig{font-size:clamp(32px,11vw,52px)!important;max-width:none;}
  .heroKick{font-size:11px;margin-bottom:16px;}
  .hero[data-style="photo"] .heroPad{min-height:360px;}

  .filterbar{gap:8px;padding-top:12px;padding-bottom:12px;}
  .fchip{font-size:12px;padding:7px 10px;}

  /* bands: smaller glass caps + type so the scrolling content stays legible */
  .band{height:90px;}
  .band:hover{height:90px;}
  .bTitle{font-size:30px;}
  .bMeta{font-size:11px;}
  .bSep{font-size:15px;}
  .unit{gap:22px;padding-left:22px;}
  .bandCap{padding:0 10px;font-size:10px;letter-spacing:.04em;}
  .bandCap.left{display:none;}

  .homeCta{flex-direction:column;justify-content:flex-start;align-items:stretch;gap:16px;padding:34px 16px;}
  .homeCta .big{font-size:34px;width:100%;}
  .homeCta .btn{align-self:stretch;text-align:center;}
  .footgrid{grid-template-columns:1fr;}
  .footgrid>div{border-right:none;border-bottom:1px solid rgba(17,17,17,.18);}
  .footBig{font-size:34px;}

  .projTop{flex-wrap:wrap;gap:6px;}
  .projTitle{font-size:clamp(34px,11vw,56px);}
  .projLede{font-size:17px;}
  .projMetaRow{flex-direction:column;}
  .projMetaRow .cell{flex:1 1 auto;min-width:0;border-right:none;border-bottom:1px solid rgba(17,17,17,.18);}
  .projBody{grid-template-columns:1fr;}
  .projText{border-right:none;border-bottom:var(--rule);}
  .mediaGrid{grid-template-columns:1fr;}
  .gItem{height:150px;}
  .projNav{flex-direction:column;}
  .projNav a.next{border-left:none;border-top:var(--rule);text-align:left;}
  .videoGallery{flex-direction:column;}
  .videoGallery .videoCell{height:auto;width:100%;}
  .videoGallery .videoCell video{width:100%;height:auto;max-height:60vh;}
  .videoGallery .videoCell.isEmbed{width:100%;}
  .audioRow .audioMeta{min-width:0;}

  .cvHead{grid-template-columns:1fr;gap:14px;}
  .cvHead h1{font-size:clamp(40px,13vw,64px);}
  .cvStatement.withPhoto{grid-template-columns:1fr;}
  .cvPhoto{max-width:200px;}
  .cvRow{grid-template-columns:54px 1fr;}
  .cvSection.cvTwo{grid-template-columns:1fr;}
  .cvSection.cvTwo>div{border-right:none;}

  .lightbox{padding:16px;}
  .lightbox .lbNav{width:42px;height:42px;}
  .lightbox .lbClose{top:10px;right:12px;}

  /* filters as a tap-to-expand dropdown */
  .filterbar{flex-direction:column;align-items:stretch;padding:0!important;gap:0;}
  .filterbar .lbl{display:none;}
  .filterToggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:14px 16px;background:none;border:0;font-family:var(--font-mono);font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink);}
  .filterToggle .caret{transition:transform .15s;}
  .filterbar.open .filterToggle .caret{transform:rotate(180deg);}
  .filterbar .fchip{display:flex;width:100%;border:0;border-top:1px solid transparent;border-radius:0;justify-content:flex-start;padding:0 16px;box-shadow:none;max-height:0;opacity:0;overflow:hidden;transition:max-height .3s ease,opacity .22s ease,border-color .3s ease;}
  .filterbar.open .fchip{max-height:60px;opacity:1;padding:13px 16px;border-top-color:rgba(17,17,17,.15);}
  .filterbar .fchip .ct{margin-left:auto;}

  /* closing CTA: full width, tidy left-aligned */

  /* gallery: 2-up on mobile, readable heights */
  .galleryGrid{gap:10px;}
  .gItem{flex:1 1 calc(50% - 6px) !important;height:148px;}
}
@media (max-width:400px){
  .heroBig{font-size:clamp(28px,12vw,40px)!important;}
  .bTitle{font-size:26px;}
  .navlink{font-size:11px;padding:6px 9px;}
}


/* ---------- CV layout v2 ---------- */
.cvTop{display:grid;grid-template-columns:1fr 1.25fr;gap:36px;padding:48px 30px;border-bottom:var(--rule);align-items:start;}
.cvTitle{display:flex;flex-direction:column;align-items:flex-start;gap:18px;}
.cvTitle h1{font-family:var(--font-display);font-size:clamp(40px,5.2vw,66px);line-height:.9;letter-spacing:-.03em;text-transform:uppercase;margin:0;overflow-wrap:break-word;}
.cvTitle .dl{font-family:var(--font-mono);font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;background:var(--ink);color:var(--paper);padding:13px 20px;}
.cvTitle .dl:hover{background:var(--accent);}
.cvIntro{display:grid;grid-template-columns:1fr;gap:24px;align-items:start;}
.cvIntro.withPhoto{grid-template-columns:1fr 180px;}
.cvIntro .rtcontent p{font-size:19px;line-height:1.5;max-width:none;margin:0 0 14px;}
.cvIntro .cvPhoto{border:var(--rule);overflow:hidden;aspect-ratio:4/5;max-width:180px;background:#ddd;}
.cvIntro .cvPhoto img{width:100%;height:100%;object-fit:cover;display:block;}

.cvMain{display:grid;grid-template-columns:1fr 1.15fr;border-bottom:var(--rule);align-items:start;}
.cvMain>.cvCol:first-child{border-right:var(--rule);}
.cvBlock{border-bottom:1px solid rgba(17,17,17,.16);}
.cvCol .cvBlock:last-child{border-bottom:none;}
.cvBlock .sechead{padding:22px 30px 0;display:flex;align-items:flex-start;min-height:70px;}
.cvBlock .sechead h2{font-size:21px;font-weight:700;letter-spacing:-.01em;margin:0;text-transform:uppercase;line-height:1.05;}
.cvBlock .cvRows{padding:12px 30px 22px;max-width:none;}
.cvBlock .cvRow{display:grid;grid-template-columns:52px 1fr;gap:14px;padding:13px 0;border-bottom:1px solid rgba(17,17,17,.12);align-items:start;}
.cvBlock .cvRow:last-child{border-bottom:none;}
.showTable{padding:12px 30px 22px;}
.showRow{display:grid;grid-template-columns:46px minmax(0,1.5fr) minmax(0,1fr) minmax(0,1fr);gap:8px 16px;padding:11px 0;border-bottom:1px solid rgba(17,17,17,.12);align-items:baseline;}
.showRow:last-child{border-bottom:none;}
.showHeadRow{border-bottom:2px solid var(--ink);padding-bottom:7px;}
.showHeadRow span{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.09em;opacity:.6;}
.showRow .yr{font-family:var(--font-mono);font-size:13px;}
.showRow .showTitle{font-size:16px;font-weight:600;letter-spacing:-.01em;}
.showRow .showRole{font-family:var(--font-mono);font-size:12px;text-transform:uppercase;opacity:.85;}
.showRow .showVenue{font-size:14px;}
.cvlink{color:var(--ink);font-weight:700;border-bottom:2px solid var(--accent);}
.cvlink:hover{color:var(--accent);}
.cvlink.nolink{border-bottom:none;cursor:default;}
.cvlink.nolink:hover{color:var(--ink);}
.cvWide{border-bottom:1px solid rgba(17,17,17,.16);}
.cvWide .sechead{padding:22px 30px 0;}
.cvWide .cvRows{padding:12px 30px 22px;}
.cvWide .cvRow{grid-template-columns:60px 1fr;}
.cvTwoTag{display:grid;grid-template-columns:1fr 1.15fr;}
.cvTwoTag>div:first-child{border-right:var(--rule);}
.cvContact{display:none;}

@media (max-width:720px){
  .cvTop{grid-template-columns:1fr;padding:24px 16px;gap:18px;}
  .cvTitle h1{font-size:clamp(40px,13vw,64px);}
  .cvIntro.withPhoto{grid-template-columns:1fr;}
  .cvIntro .cvPhoto{max-width:170px;}
  .cvIntro .rtcontent p{font-size:16px;}
  .cvMain{grid-template-columns:1fr;}
  .cvMain>.cvCol:first-child{border-right:none;border-bottom:var(--rule);}
  .cvBlock .sechead,.cvBlock .cvRows,.showTable,.cvWide .sechead,.cvWide .cvRows,.cvTagwrap{padding-left:16px;padding-right:16px;}
  .cvTwoTag{grid-template-columns:1fr;}
  .cvTwoTag>div:first-child{border-right:none;border-bottom:var(--rule);}
  .showRow{grid-template-columns:42px 1fr;gap:2px 10px;}
  .showRow .showRole,.showRow .showVenue{grid-column:2;}
  .showHeadRow{display:none;}
}

/* ---------- print: scaled CV (PDF), same layout as the page ---------- */
@media print{
  @page{ size:A4; margin:12mm 13mm; }
  *{ -webkit-print-color-adjust:exact; print-color-adjust:exact; }
  html,body{ background:#fff; color:#111; }
  .topbar,.footer,.homeCta,.cvTitle .dl,.filterbar{ display:none !important; }
  .cv{ padding:0; }
  .cvTop{ grid-template-columns:.8fr 1.7fr; gap:16px; padding:0 0 8px; border-bottom:1.5px solid #111; }
  .cvTitle h1{ font-size:30px; }
  .cvIntro .rtcontent p{ font-size:10.5px; line-height:1.4; margin:0 0 6px; }
  .cvIntro.withPhoto{ grid-template-columns:1fr 84px; gap:12px; }
  .cvIntro .cvPhoto{ max-width:84px; border:1px solid #111; }
  /* CSS Grid does not fragment reliably across printed pages in Chromium — a
     tall two-column grid with mismatched column heights (Education+Experience
     vs. Selected shows) scatters content unpredictably instead of flowing top
     to bottom. Force a single flowing column for print; only the row-level
     break-inside:avoid below controls pagination, so entries never split but
     a long section can still run across a page boundary cleanly. */
  .cvMain{ display:block !important; border-bottom:1.5px solid #111; }
  .cvMain>.cvCol{ display:block; }
  .cvMain>.cvCol:first-child{ border-right:none; border-bottom:1px solid #111; padding-bottom:4px; margin-bottom:6px; }
  .cvBlock{ border-color:#ddd; break-inside:auto; }
  .cvBlock .sechead{ padding:10px 0 0; min-height:0; break-after:avoid-page; break-inside:avoid; }
  .cvMain>.cvCol:first-child .sechead,.cvMain>.cvCol:first-child .cvRows{ padding-left:0; padding-right:0; }
  .cvMain>.cvCol:last-child .sechead,.cvMain>.cvCol:last-child .showTable{ padding-left:0; padding-right:0; }
  .cvBlock .sechead h2{ font-size:13px; }
  .cvBlock .cvRows,.showTable{ padding-top:4px; padding-bottom:7px; max-width:none; }
  .cvBlock .cvRow{ padding:3px 0; grid-template-columns:38px 1fr; gap:8px; break-inside:avoid; }
  .cvRow .role{ font-size:11px; } .cvRow .org{ font-size:9.5px; } .cvRow .note{ font-size:8.5px; } .cvRow .yr{ font-size:9px; } .cvRow .tag{ font-size:8px; padding:1px 5px; }
  .showRow{ padding:3px 0; gap:1px 10px; break-inside:avoid; }
  .showHeadRow{ break-after:avoid-page; }
  .showHeadRow span{ font-size:7.5px; }
  .showRow .showTitle{ font-size:10.5px; } .showRow .showRole,.showRow .showVenue,.showRow .yr{ font-size:9px; }
  .cvWide .sechead,.cvWide .cvRows,.cvTagwrap{ padding-left:0; padding-right:0; }
  .cvTwoTag{ display:grid !important; grid-template-columns:1fr 1fr !important; }
  .cvTwoTag>div:first-child{ border-right:1px solid #ccc; }
  .cvTwoTag>div:last-child .sechead,.cvTwoTag>div:last-child .cvTagwrap{ padding-left:10px; }
  .cvTagwrap span{ font-size:8.5px; padding:2px 6px; }
  a,.cvlink{ color:#111; }
  .cvlink{ border-bottom:1px solid #111; }
  .cvContact{ display:flex !important; flex-wrap:wrap; gap:5px 16px; align-items:baseline; margin-top:10px; padding-top:8px; border-top:1.5px solid #111; font-family:var(--font-mono); font-size:9.5px; }
  .cvContact .cvContactName{ font-weight:700; font-size:11px; font-family:var(--font-display); margin-right:6px; }
}

/* ---------- first-load intro (Sweep): bands sweep from left, hero reveals top-to-down ---------- */
@media (prefers-reduced-motion: no-preference){
  .home.intro .heroKick{animation:introFade .55s .15s both;}
  .home.intro .heroBig{animation:introClipDown .9s .3s both cubic-bezier(.2,.8,.2,1);}
  .home.intro .filterbar{animation:introFade .5s .5s both;}
  .home.intro .band{animation-name:introSweep;animation-duration:.6s;animation-fill-mode:both;animation-timing-function:cubic-bezier(.3,.7,.1,1);animation-delay:var(--inD,.5s);}
}
@keyframes introSweep{from{transform:translateX(-101%);}to{transform:translateX(0);}}
@keyframes introClipDown{from{opacity:0;clip-path:inset(0 0 100% 0);transform:translateY(-12px);}to{opacity:1;clip-path:inset(0 0 0 0);transform:none;}}
@keyframes introFade{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:none;}}

/* ---------- directional page transitions ---------- */
.pageView.enterR,.pageView.enterL,.pageView.enterU,.pageView.enterD{will-change:transform;}
@media (prefers-reduced-motion: no-preference){
  .pageView.enterR{animation:pvR .5s both cubic-bezier(.5,0,.1,1);}
  .pageView.enterL{animation:pvL .5s both cubic-bezier(.5,0,.1,1);}
  .pageView.enterU{animation:pvU .5s both cubic-bezier(.5,0,.1,1);}
  .pageView.enterD{animation:pvD .5s both cubic-bezier(.5,0,.1,1);}
}
@keyframes pvR{from{transform:translateX(100%);}to{transform:translateX(0);}}
@keyframes pvL{from{transform:translateX(-100%);}to{transform:translateX(0);}}
@keyframes pvU{from{transform:translateY(40px);opacity:0;}to{transform:none;opacity:1;}}
@keyframes pvD{from{transform:translateY(-40px);opacity:0;}to{transform:none;opacity:1;}}
