/* Shared portfolio styles. Batch 0 preserves the existing cascade and visual design. */
body{margin:0}
a{color:inherit}
.mono{font-family:'IBM Plex Mono',monospace;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;line-height:1.5}
.disp{font-weight:640;font-variation-settings:'wdth' 92;text-transform:uppercase;letter-spacing:-.045em;line-height:.86;margin:0}
.acc{color:var(--red)}
.logo{display:flex;align-items:center;gap:8px;font-weight:700;letter-spacing:.02em;text-decoration:none;font-size:.875rem;text-transform:uppercase}
.navl{display:flex;gap:32px}
.navl a{text-decoration:none;min-height:44px;display:inline-flex;align-items:center}

/* Gallery layout: scoped to the .g shell so homepage/About keep their own composition. */
.g{--ink:#141414;--paper:#F0EDE6;--bone:#E3DDD1;--red:#E23B2E;--gray:#6B6862;font-family:'Archivo',sans-serif;color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased}
.g *{box-sizing:border-box}
:where(.g) .wrap{max-width:1440px;margin:0 auto;padding:0 64px}
.g a:focus-visible,.g button:focus-visible{outline:3px solid var(--red);outline-offset:4px}
:where(.g) .nav{display:flex;justify-content:space-between;align-items:center;height:80px}
:where(.g) .head{background:var(--bone);padding:0 0 64px}
:where(.g) .crumb{display:flex;gap:8px;color:var(--gray);padding-top:48px}
:where(.g) .crumb a{text-decoration:none}
:where(.g) .hgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:24px;align-items:end;margin-top:40px}
:where(.g) .h1{grid-column:1 / span 7;font-size:clamp(3.815rem,8.4vw,8.5rem)}
:where(.g) .qa{grid-column:9 / span 4;display:flex;flex-direction:column;gap:16px}
:where(.g) .qa h2{margin:0;font-size:1.25rem;font-weight:600;letter-spacing:-.01em;line-height:1.2}
:where(.g) .qa p{margin:0;font-size:1rem;line-height:1.6}
:where(.g) .bar{position:sticky;top:0;z-index:5;background:var(--paper);border-bottom:1px solid #D9D5CC}
:where(.g) .bar .wrap{display:flex;justify-content:space-between;align-items:center;gap:24px;min-height:64px}
:where(.g) .tabs{display:flex;gap:4px;flex-wrap:wrap}
:where(.g) .tab{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;text-decoration:none}
:where(.g) .tab.on{background:var(--ink);color:var(--paper)}
:where(.g) .tog{display:inline-flex;align-items:center;gap:12px;min-height:44px;padding:0 16px;border:2px solid var(--ink);background:transparent;color:var(--ink);cursor:pointer;font-family:'IBM Plex Mono',monospace;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase}
:where(.g) .tog .sw{width:32px;height:18px;border-radius:9px;background:#C9C4B9;position:relative;transition:background .2s ease}
:where(.g) .tog .sw::after{content:'';position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--paper);transition:transform .2s ease}
:where(.g) .tog.on .sw{background:var(--red)}
:where(.g) .tog.on .sw::after{transform:translateX(14px)}
:where(.g) .prog{padding:96px 0;border-bottom:1px solid #D9D5CC}
:where(.g) .pgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:24px;align-items:start}
:where(.g) .side{grid-column:1 / span 3;position:sticky;top:96px;display:flex;flex-direction:column;gap:24px}
:where(.g) .side .num{font-size:3.052rem;font-weight:640;letter-spacing:-.04em;line-height:1;color:var(--red)}
:where(.g) .side h2{margin:0;font-size:2.441rem;font-weight:640;font-variation-settings:'wdth' 92;text-transform:uppercase;letter-spacing:-.035em;line-height:.9}
:where(.g) .side p{margin:0;font-size:.9375rem;line-height:1.6}
:where(.g) .meta{display:flex;flex-direction:column;gap:12px;border-top:1px solid var(--ink);padding-top:16px}
:where(.g) .meta div{display:flex;justify-content:space-between;gap:16px}
:where(.g) .meta .k{color:var(--gray)}
:where(.g) .cs{display:inline-flex;align-items:center;gap:12px;min-height:48px;padding:0 20px;background:var(--ink);color:var(--paper);text-decoration:none;font-family:'IBM Plex Mono',monospace;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;align-self:flex-start}
:where(.g) .plates{grid-column:5 / span 8;display:flex;flex-direction:column;gap:40px}
:where(.g) .stage{display:flex;align-items:center;gap:16px;color:var(--gray)}
:where(.g) .stage::after{content:'';flex:1;height:1px;background:#D9D5CC}
:where(.g) .stage.dir{color:var(--red)}
:where(.g) .stage.dir::after{background:rgba(226,59,46,.4)}
:where(.g) .row{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:24px;align-items:start}
:where(.g) .pl{margin:0;display:flex;flex-direction:column;gap:12px;position:relative}
:where(.g) .pl a{display:block;background:#FBFAF7;padding:8px;outline:1px solid rgba(20,20,20,.12);transition:transform .3s cubic-bezier(.3,1.3,.5,1),box-shadow .3s ease}
:where(.g) .pl a:hover{transform:translateY(-4px);box-shadow:8px 8px 0 rgba(20,20,20,.12)}
:where(.g) .pl img{display:block;width:100%;height:auto}
:where(.g) .pl figcaption{display:flex;justify-content:space-between;gap:16px;color:var(--gray)}
:where(.g) .pl figcaption b{font-weight:500;color:var(--ink)}
:where(.g) .tag{position:absolute;left:16px;top:16px;z-index:2;font-family:'IBM Plex Mono',monospace;font-size:.6875rem;letter-spacing:.12em;padding:4px 8px;background:var(--ink);color:var(--paper)}
:where(.g) .tag.red{background:var(--red)}
:where(.g) .s6{grid-column:span 6}
:where(.g) .s4{grid-column:span 4}
:where(.g) .s3{grid-column:span 3}
:where(.g) .s2{grid-column:span 2}
:where(.g) .next{background:var(--ink);color:var(--paper);padding:128px 0 64px}
:where(.g) .next a.big{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;text-decoration:none;border-bottom:1px solid rgba(240,237,230,.3);padding-bottom:32px}
:where(.g) .next a.big:hover .arw{transform:translateX(12px)}
:where(.g) .arw{display:inline-block;transition:transform .3s ease}
:where(.g) .foot{display:flex;justify-content:space-between;margin-top:64px;color:rgba(240,237,230,.6)}
@media (max-width:900px){
:where(.g) .wrap{padding:0 16px}
:where(.g) .navl .hide-m{display:none}
:where(.g) .h1,:where(.g) .qa,:where(.g) .side,:where(.g) .plates{grid-column:1 / -1}
:where(.g) .qa{margin-top:32px}
:where(.g) .side{position:relative;top:auto;margin-bottom:40px}
:where(.g) .bar .wrap{flex-direction:column;align-items:flex-start;padding:12px 16px}
:where(.g) .s4,:where(.g) .s3,:where(.g) .s2{grid-column:span 6}
}

/* Image viewer: rendered outside the page shell. */
.pl a{cursor:zoom-in}
.zg-lb{position:fixed;inset:0;z-index:1000;background:rgba(20,20,20,.95);display:none;align-items:center;justify-content:center;padding:64px 88px 40px;box-sizing:border-box;font-family:'IBM Plex Mono',ui-monospace,monospace;color:#F0EDE6}
.zg-lb.on{display:flex;animation:zgIn .18s ease-out}
@keyframes zgIn{from{opacity:0}to{opacity:1}}
.zg-f{margin:0;display:flex;flex-direction:column;align-items:center;gap:16px;max-width:100%;max-height:100%;min-height:0}
.zg-m{display:flex;align-items:center;justify-content:center;min-height:0;cursor:zoom-out}
.zg-m img,.zg-m video{display:block;max-width:calc(100vw - 176px);max-height:calc(100vh - 168px);width:auto;height:auto;object-fit:contain;background:#FBFAF7;padding:8px;box-sizing:border-box;cursor:default}
.zg-c{display:flex;flex-wrap:wrap;gap:6px 20px;justify-content:center;align-items:baseline;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;max-width:min(900px,100%);text-align:center}
.zg-c b{font-weight:500}.zg-c span{color:#A8A39A}.zg-c i{font-style:normal;color:#E23B2E}
.zg-lb button{position:absolute;width:48px;height:48px;display:grid;place-items:center;background:transparent;color:#F0EDE6;border:1px solid rgba(240,237,230,.35);font:500 1.125rem/1 'IBM Plex Mono',monospace;cursor:pointer;transition:background .15s,border-color .15s}
.zg-lb button:hover{background:rgba(240,237,230,.08);border-color:#F0EDE6}
.zg-lb button:focus-visible{outline:2px solid #E23B2E;outline-offset:2px}
.zg-x{top:16px;right:16px}.zg-p{left:24px;top:50%;transform:translateY(-50%)}.zg-n{right:24px;top:50%;transform:translateY(-50%)}
@media (max-width:700px){.zg-lb{padding:64px 16px 88px}.zg-m img,.zg-m video{max-width:calc(100vw - 32px);max-height:calc(100vh - 220px)}.zg-p,.zg-n{top:auto;bottom:20px;transform:none}.zg-p{left:calc(50% - 56px)}.zg-n{right:calc(50% - 56px)}}
@media (prefers-reduced-motion:reduce){.zg-lb.on{animation:none}}

/* Shared program components: specification cards, video, and archive walls. */
:where(.g) .wall{columns:2 280px;column-gap:24px}
:where(.g) .wall .pl{break-inside:avoid;margin-bottom:24px}
:where(.g) .pl.spec{align-self:stretch}
:where(.g) .sc{height:100%;box-sizing:border-box;background:#FBFAF7;outline:1px solid rgba(20,20,20,.12);padding:28px 28px 24px;display:flex;flex-direction:column;gap:16px}
:where(.g) .sc-k{color:var(--red)}
:where(.g) .sc-t{margin:0;font-family:inherit;font-weight:800;text-transform:uppercase;letter-spacing:-.02em;font-size:1.563rem;line-height:1}
:where(.g) .sc-dl{margin:0;border-top:1px solid var(--ink)}
:where(.g) .sc-dl div{display:grid;grid-template-columns:96px 1fr;gap:12px;padding:10px 0;border-bottom:1px solid #D9D5CC}
:where(.g) .sc-dl dt{color:var(--gray)}
:where(.g) .sc-dl dd{margin:0}
:where(.g) .sc-note{margin:auto 0 0;font-size:1rem;line-height:1.5;color:var(--ink);max-width:40ch}
:where(.g) .pl video{display:block;width:100%;height:auto;background:#1F1E1C}
@media (prefers-reduced-motion:reduce){
:where(.g) .pl video{display:none}
:where(.g) .pl a.vid{aspect-ratio:var(--ar,1);background:#FBFAF7 var(--poster) center / cover no-repeat content-box}
}

/* Launch accessibility and responsive refinements. */
.zg,.ab,.g{--gray:#58554F;--red-text:#B52B22}
.logo{min-width:44px;min-height:44px}
.skip-link{position:fixed;left:16px;top:16px;z-index:2000;padding:14px 20px;background:#141414;color:#F0EDE6;transform:translateY(-180%);font:500 1rem 'IBM Plex Mono',monospace}
.skip-link:focus{transform:none}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
:where(.zg,.g,.ab) .btn:is(:hover,:focus-visible,:active),.g .cs:is(:hover,:focus-visible,:active){background:var(--ink);color:var(--paper)}
.zg .btn.inv:is(:hover,:focus-visible,:active),.ab .btn:is(:hover,:focus-visible,:active){background:var(--paper);color:var(--ink)}
.g .tab.on:is(:hover,:focus-visible,:active){background:var(--ink);color:var(--paper)}
.g .tag.red,.zg .tag.red{background:var(--red-text)}
.g .stage.dir,.g .sc-k,.ab .navl a.on,.g .crumb .acc{color:var(--red-text)}
.zg .rl .cap,.zg .loupe figcaption{color:var(--red-text)}
.zg .pager .dot{position:relative;min-width:44px;min-height:44px;background:transparent!important;border-color:transparent!important}
.zg .pager .dot::before{content:'';position:absolute;inset:9px 15px;border:1px solid currentColor}
.zg .pager .dot.on::before{background:currentColor}
.mobile-menu{display:none;position:relative;z-index:30}
.mobile-menu summary{display:flex;align-items:center;justify-content:center;min-width:64px;min-height:44px;cursor:pointer;list-style:none}
.mobile-menu summary::-webkit-details-marker{display:none}
.mobile-menu summary::after{content:' +';margin-left:8px}
.mobile-menu[open] summary::after{content:' −'}
.mobile-menu nav{position:absolute;right:0;top:52px;min-width:240px;padding:12px;background:#141414;color:#F0EDE6;border:1px solid #58554F;box-shadow:0 16px 32px #0003}
.mobile-menu nav a{display:flex;align-items:center;min-height:44px;padding:0 16px;text-decoration:none;font:500 .875rem 'IBM Plex Mono',monospace}
.mobile-menu nav a:hover{background:#F0EDE6;color:#141414}
.mobile-menu summary:focus-visible,button:focus-visible{outline:3px solid #E23B2E;outline-offset:3px}
.motion-toggle,.media-toggle{min-height:44px;padding:8px 12px;border:1px solid currentColor;background:transparent;color:inherit;font:500 .75rem 'IBM Plex Mono',monospace;cursor:pointer}
.motion-toggle:hover,.media-toggle:hover{background:#F0EDE6;color:#141414}
.ticker .motion-toggle{flex:none}
.ticker.is-paused .tk-run{animation-play-state:paused}
.media-toggle{align-self:flex-start;color:#141414;background:#F0EDE6}
.prog{scroll-margin-top:80px}
@media(min-width:601px) and (max-width:900px){.g .row{grid-template-columns:repeat(2,minmax(0,1fr))}.g .s2,.g .s3,.g .s4{grid-column:span 1}.g .s6{grid-column:span 2}.g .row>.pl:last-child:nth-child(odd){grid-column:1 / -1}}
@media(max-width:900px){.zg .navl,.ab .navl,.g .navl{display:none}.mobile-menu{display:block}.g .bar .wrap{flex-direction:row;align-items:center;gap:8px}.g .tabs{flex-wrap:nowrap;overflow-x:auto;max-width:100%;min-width:0;scrollbar-width:thin}.g .tab{flex:none;white-space:nowrap}.g .tog{flex:none}.g .bar:has(.tog) .wrap{flex-wrap:wrap}.g .bar:has(.tog) .tabs{width:100%}.zg .ticker{padding-left:16px;gap:16px;flex-wrap:wrap}.zg .tk-track{flex-basis:100%}}
@media(prefers-reduced-motion:reduce){.media-toggle{display:none}}

/* Locked Batch 1 layout: only the approved ticker control changes visually. */
.ticker-control-space{display:inline-block;visibility:hidden;pointer-events:none}
.zg .ticker .ticker-inline-control{position:absolute;right:16px;bottom:10px;display:grid;place-items:center;width:44px;height:44px;min-width:44px;padding:0;border:0;border-radius:0;background:#141414;color:var(--paper);z-index:2;box-shadow:16px 0 0 #141414}
.ticker-inline-control svg{width:16px;height:16px;fill:currentColor}
.ticker-inline-control .play-icon{display:none}.ticker.is-paused .pause-icon{display:none}.ticker.is-paused .play-icon{display:block}
.ticker-inline-control:disabled{cursor:default}
.ticker-inline-control:disabled svg{opacity:.5}

/* Approved tablet-only row matching: full images and source order stay intact. */
@media(min-width:601px) and (max-width:900px){
.g .row>figure.pl[data-tablet-span="1"]:nth-child(n){grid-column:span 1}
.g .row>figure.pl[data-tablet-span="2"]:nth-child(n){grid-column:1 / -1}
}

/* Zach-approved final audit fixes: phone controls, tablet source caps, two labels. */
@media(max-width:600px){
.zg .pager:has(.dots){flex-wrap:wrap}
.zg .pager .dots{order:-1;flex:0 0 100%;flex-wrap:wrap;justify-content:center;gap:0}
.zg .pager .dots .dot{flex:0 0 44px;width:44px;min-width:44px;padding:0}
.zg .pager .dots .dot::before{left:16px}
.zg .pager .pg-btn{flex:0 0 44px;width:44px;padding:0}
}
@media(max-width:375px){
.zg .pager .dots:has(.dot:nth-child(7)){display:grid;grid-template-columns:repeat(4,44px)}
}
@media(min-width:601px) and (max-width:900px){
.g figure.pl[style*="--tablet-source-width"]{width:100%;max-width:calc(var(--tablet-source-width) + 16px);justify-self:center;align-self:start}
}
.ab #or-h{color:#58554F!important}
.zg .ticket .stub .no{color:#FF6B5E}

/* Approved accessibility and navigation follow-up; existing galleries stay intact. */
.zg .tk-track:focus-visible{outline:2px solid var(--paper);outline-offset:4px}
.zg .contact-links{margin-top:24px}
.zg .contact-links a{display:inline-flex;align-items:center;min-height:44px;color:var(--ink)}
.g .bar:has(.program-jump) .tabs{flex:1;min-width:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}
.g .bar:has(.program-jump) .tab{flex:none;white-space:nowrap}
.g .program-jump{position:relative;flex:none}
.g .program-jump summary{display:flex;align-items:center;min-height:44px;padding:0 16px;cursor:pointer;list-style:none}
.g .program-jump summary::-webkit-details-marker{display:none}
.g .program-jump summary::after{content:' +';margin-left:8px}
.g .program-jump[open] summary::after{content:' −'}
.g .program-jump nav{position:absolute;right:0;top:calc(100% + 8px);width:min(440px,calc(100vw - 32px));max-height:60vh;overflow-y:auto;box-sizing:border-box;padding:8px;background:var(--ink);color:var(--paper);border:1px solid var(--gray)}
.g .program-jump nav a{display:flex;align-items:center;min-height:44px;padding:0 16px;text-decoration:none}
.g .program-jump nav a:hover{background:var(--paper);color:var(--ink)}
.g .program-jump summary:focus-visible,.g .program-jump a:focus-visible{outline:3px solid var(--red);outline-offset:0}
