/* ═════════════════════════════════════════════════════════════
   DHALMIA — Portfolio hub v2  (dh-portfolio v2.0)
   Wrapper: <div class="dh-scope dh-folio2" data-page="portfolio-hub">
   Selected-work hero (list-driven image stack, auto-advance), proof row,
   sticky filter dock (?filter= / ?view=), editorial plates + typographic
   index (cursor preview), restoration break, capabilities strip, quote, CTA.
   Data: [dh_portfolio_hero] [dh_portfolio_hub] [dh_portfolio_count] (inc/project-render.php).
   JS: assets/js/modules/portfolio-hub-v1.0.js. Replaces dh-portfolio-v1.0 (.dh-folio) once the page is re-pasted.
═════════════════════════════════════════════════════════════ */
.dh-folio2{
  --slate-950:#141617;--slate-900:#1A1C1D;--slate-850:#212121;--slate-800:#272A2B;--slate-750:#2E3132;
  --paper:#E4E5E5;--paper-deep:#D6D8D8;--paper-ink:#1A1C1D;--paper-muted:#5C6163;--paper-hair:rgba(26,28,29,.14);
  --ink-0:#F1F2F2;--ink-1:#BEC2C3;--muted:#8C9092;
  --copper:#C87E33;--copper-bright:#E29A55;--copper-deep:#8F5620;--copper-frame:rgba(200,126,51,.34);
  --copper-metal:linear-gradient(125deg,#E8A75E 0%,#C87E33 46%,#98601F 100%);
  --hair:rgba(241,242,242,.09);--hair-strong:rgba(241,242,242,.16);
  --serif:'Cormorant Garamond',Georgia,serif;--sans:'Manrope',system-ui,sans-serif;
  --t-display:clamp(2.2rem,1rem + 3.3vw,4.2rem);--t-h2:clamp(1.9rem,1.1rem + 2.6vw,3.4rem);--t-h3:clamp(1.25rem,1.05rem + .9vw,1.8rem);
  --t-lede:clamp(1.08rem,.95rem + .55vw,1.4rem);--t-body:clamp(.95rem,.9rem + .2vw,1.05rem);--t-sm:clamp(.82rem,.78rem + .15vw,.9rem);--t-xs:clamp(.68rem,.64rem + .15vw,.74rem);
  --s-1:clamp(.4rem,.3rem + .3vw,.6rem);--s-2:clamp(.85rem,.6rem + .6vw,1.15rem);--s-3:clamp(1.35rem,.9rem + 1.2vw,2rem);--s-4:clamp(2rem,1.2rem + 1.9vw,3.1rem);--s-5:clamp(2.75rem,1.4rem + 3.4vw,4.9rem);
  --sec-y:clamp(4rem,1.8rem + 6vw,8.5rem);--gap:clamp(1.25rem,.7rem + 2.2vw,3.5rem);--pad-x:clamp(1.15rem,.5rem + 4vw,5.5rem);--wrap:1560px;
  --nav-h:clamp(4.25rem,3.5rem + 2vw,5.5rem);--ease:cubic-bezier(.16,1,.3,1);
  background:var(--slate-850);color:var(--ink-1);font-family:var(--sans);font-size:var(--t-body);font-weight:300;line-height:1.7;-webkit-font-smoothing:antialiased;
}
.dh-folio2 *,.dh-folio2 *::before,.dh-folio2 *::after{margin:0;padding:0;box-sizing:border-box}
.dh-folio2 ::selection{background:var(--copper);color:var(--slate-950)}
.dh-folio2 img{display:block;max-width:100%;height:auto}
.dh-folio2 a{color:inherit;text-decoration:none}
.dh-folio2 button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
.dh-folio2 h1,.dh-folio2 h2,.dh-folio2 h3{font-family:var(--serif);color:var(--ink-0);font-weight:300;line-height:1.08;letter-spacing:-.008em}
.dh-folio2 em{font-style:italic}
.dh-folio2 :focus-visible{outline:2px solid var(--copper);outline-offset:4px}
.dh-folio2 .wrap{max-width:var(--wrap);margin-inline:auto;padding-inline:var(--pad-x)}
.dh-folio2 .ovl{display:inline-flex;align-items:center;gap:.9rem;font-size:var(--t-xs);letter-spacing:.32em;text-transform:uppercase;color:var(--copper-bright);font-weight:500}
.dh-folio2 .ovl::before{content:"";width:2.4rem;height:1px;background:var(--copper)}
.dh-folio2 .st{display:inline-flex;align-items:center;gap:.7rem;font-size:var(--t-xs);letter-spacing:.28em;text-transform:uppercase;font-weight:500;color:var(--ink-0)}
.dh-folio2 .st::before{content:"";width:.4rem;height:.4rem;border-radius:50%;border:1px solid var(--copper)}
.dh-folio2 .btn{display:inline-flex;align-items:center;gap:.8rem;font-size:var(--t-xs);letter-spacing:.24em;text-transform:uppercase;font-weight:500;padding:1.05rem 2rem;border:1px solid var(--hair-strong);color:var(--ink-0);min-height:44px;transition:border-color .4s var(--ease),color .4s var(--ease),background-color .4s var(--ease)}
.dh-folio2 .btn .ar{transition:transform .45s var(--ease)}.dh-folio2 .btn:hover .ar{transform:translateX(5px)}
.dh-folio2 .btn--solid{background:var(--copper);border-color:var(--copper);color:var(--slate-950);font-weight:600}.dh-folio2 .btn--solid:hover{background:var(--copper-bright);border-color:var(--copper-bright)}
.dh-folio2 .btn--ghost:hover{border-color:var(--copper);color:var(--copper-bright)}
.dh-folio2 .rv{opacity:0;transform:translateY(22px);transition:opacity .9s var(--ease),transform .9s var(--ease)}.dh-folio2 .rv.in{opacity:1;transform:none}
.dh-folio2 .num{font-family:var(--serif);font-style:italic;font-weight:300;line-height:1;background:var(--copper-metal);-webkit-background-clip:text;background-clip:text;color:transparent}

.dh-folio2 .crumb{font-size:var(--t-xs);letter-spacing:.26em;text-transform:uppercase;color:var(--muted);display:flex;gap:.9rem;flex-wrap:wrap}
.dh-folio2 .crumb a:hover{color:var(--copper-bright)}.dh-folio2 .crumb b{color:var(--copper-bright);font-weight:500}
.dh-folio2 .hero__sum{font-family:var(--serif);font-style:italic;font-size:var(--t-lede);color:var(--ink-1);line-height:1.45}
.dh-folio2 .snap{border-top:1px solid var(--hair-strong)}
.dh-folio2 .snap div{display:grid;grid-template-columns:minmax(8rem,1fr) 2fr;gap:var(--s-2);padding:.75rem 0;border-bottom:1px solid var(--hair);font-size:var(--t-sm)}
.dh-folio2 .snap dt{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.dh-folio2 .snap dd{color:var(--ink-0)}

/* ═══ Portfolio hub v2 blocks ═══ */
.dh-folio2 .ln{display:block;overflow:hidden;padding-bottom:.06em;margin-bottom:-.06em}
.dh-folio2 .ln i{display:block;font-style:inherit;transform:translateY(112%);transition:transform 1.2s var(--ease) .6s}
.dh-folio2.is-loaded .ln i{transform:none}.dh-folio2.is-loaded .ln:nth-child(2) i{transition-delay:.7s}
.dh-folio2 .fh__intro .ovl,.dh-folio2 .fh__intro p,.dh-folio2 .fh__list,.dh-folio2 .fh__top,.dh-folio2 .fh__foot{opacity:0;transition:opacity 1s var(--ease) 1s}
.dh-folio2.is-loaded .fh__intro .ovl,.dh-folio2.is-loaded .fh__intro p,.dh-folio2.is-loaded .fh__list,.dh-folio2.is-loaded .fh__top,.dh-folio2.is-loaded .fh__foot{opacity:1}
.dh-folio2.is-loaded .fh__list{transition-delay:1.3s}.dh-folio2.is-loaded .fh__foot{transition-delay:1.8s}
.dh-folio2.is-filtered .plate,.dh-folio2.is-filtered .plate--7,.dh-folio2.is-filtered .plate--5,.dh-folio2.is-filtered .plate--8{grid-column:span 4;margin-top:0}
.dh-folio2.is-filtered .plate .plate__fig img{aspect-ratio:4/3}
.dh-folio2 .dock{top:var(--dh-header-h,0)}
.dh-folio2 .hero--full{padding:0}
/* ── Featured works hero: list-driven image stack ── */
.dh-folio2 .fh{position:relative;min-height:100svh;background:var(--slate-950);overflow:hidden;isolation:isolate;display:flex;flex-direction:column;justify-content:space-between}
.dh-folio2 .fh__stack{position:absolute;inset:0;z-index:0}
.dh-folio2 .fh__stack img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.9) brightness(.9);opacity:0;transform:scale(1.06);transition:opacity 1.2s var(--ease),transform 6s linear;will-change:transform,opacity}
.dh-folio2 .fh__stack img.on{opacity:1;transform:scale(1)}
.dh-folio2 .fh__scrim{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(20,22,23,.55) 0%,rgba(20,22,23,0) 28%,rgba(20,22,23,.25) 55%,rgba(20,22,23,.95) 100%),linear-gradient(90deg,rgba(20,22,23,.55) 0%,rgba(20,22,23,0) 55%)}
.dh-folio2 .fh__frame{position:absolute;inset:clamp(.9rem,2vw,1.6rem);border:1px solid var(--copper-frame);pointer-events:none;z-index:2;opacity:0;transition:opacity 1.2s var(--ease) .8s}
.dh-folio2.is-loaded .fh__frame{opacity:1}
.dh-folio2 .fh > .wrap{position:relative;z-index:3;width:100%}
.dh-folio2 .fh__top{padding-top:calc(var(--nav-h) + var(--s-3));display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s-3)}
.dh-folio2 .fh__top .crumb{margin:0}
.dh-folio2 .fh__count{font-family:var(--serif);font-style:italic;color:var(--ink-1);white-space:nowrap}
.dh-folio2 .fh__count b{font-style:normal;font-weight:400;color:var(--copper-bright);font-size:1.3rem}
.dh-folio2 .fh__body{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:var(--gap);align-items:end;padding-block:var(--s-5) var(--s-4)}
.dh-folio2 .fh__intro h1{font-size:clamp(2.4rem,1rem + 4vw,5.2rem);max-width:12ch;text-wrap:balance;margin:var(--s-2) 0 var(--s-3)}
.dh-folio2 .fh__intro p{max-width:40ch;color:var(--ink-1)}
.dh-folio2 .fh__intro p a{color:var(--copper-bright)}
.dh-folio2 .fh__list{list-style:none;border-top:1px solid var(--hair-strong);background:rgba(20,22,23,.55)}
.dh-folio2 .fh__item{border-bottom:1px solid var(--hair);position:relative}
.dh-folio2 .fh__item a{display:grid;grid-template-columns:3rem minmax(0,1fr) auto auto;align-items:baseline;gap:var(--s-3);padding:1rem 1.15rem;transition:background .4s}
.dh-folio2 .fh__item .n{font-family:var(--serif);font-style:italic;color:var(--muted);font-size:1.05rem}
.dh-folio2 .fh__item h2{font-size:clamp(1.25rem,1rem + 1.1vw,2rem);transition:transform .6s var(--ease),color .4s}
.dh-folio2 .fh__item .meta{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.dh-folio2 .fh__item .go{color:var(--copper-bright);opacity:0;transform:translateX(-6px);transition:opacity .4s,transform .5s var(--ease)}
.dh-folio2 .fh__item.on a,.dh-folio2 .fh__item a:hover{background:rgba(20,22,23,.75)}
.dh-folio2 .fh__item.on h2{color:var(--copper-bright);transform:translateX(6px)}
.dh-folio2 .fh__item.on .go{opacity:1;transform:none}
.dh-folio2 .fh__item .bar{position:absolute;left:0;bottom:-1px;height:1px;width:0;background:var(--copper)}
.dh-folio2 .fh__item.on .bar{animation:fhBar var(--fh-dur,6s) linear forwards}
@keyframes fhBar{to{width:100%}}
.dh-folio2 .fh__foot{display:flex;justify-content:space-between;align-items:flex-end;padding-bottom:calc(clamp(.9rem,2vw,1.6rem) + var(--s-3))}
.dh-folio2 .fh__cap{display:flex;gap:1.2rem;align-items:baseline;font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-1)}
.dh-folio2 .fh__cap b{font-family:var(--serif);font-style:italic;font-weight:300;font-size:1rem;letter-spacing:0;text-transform:none;color:var(--copper-bright)}
/* proof row */
.dh-folio2 .proof{background:var(--slate-900);border-block:1px solid var(--hair)}
.dh-folio2 .proof .wrap{display:grid;grid-template-columns:repeat(3,1fr)}
.dh-folio2 .proof div{padding:var(--s-4) 0;border-left:1px solid var(--hair);padding-left:var(--s-3)}
.dh-folio2 .proof div:first-child{border-left:0;padding-left:0}
.dh-folio2 .proof b{display:block;font-family:var(--serif);font-weight:300;font-size:clamp(2rem,1rem + 2.6vw,3.6rem);color:var(--ink-0);line-height:1}
.dh-folio2 .proof b i{font-style:normal;color:var(--copper-bright)}
.dh-folio2 .proof span{font-size:var(--t-xs);letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}
/* dock */
.dh-folio2 .dock{position:sticky;top:0;z-index:20;background:rgba(20,22,23,.94);border-bottom:1px solid var(--hair)}
.dh-folio2 .dock .wrap{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);min-height:3.6rem;flex-wrap:wrap}
.dh-folio2 .chips{display:flex;gap:.4rem;flex-wrap:wrap}
.dh-folio2 .chip{font-size:var(--t-xs);letter-spacing:.22em;text-transform:uppercase;padding:.55rem .95rem;border:1px solid transparent;color:var(--muted);transition:color .3s,border-color .3s;min-height:36px}
.dh-folio2 .chip:hover{color:var(--ink-0)}.dh-folio2 .chip.on{color:var(--copper-bright);border-color:var(--copper-frame)}
.dh-folio2 .dock__r{display:flex;align-items:center;gap:var(--s-3)}
.dh-folio2 .dock__count{font-family:var(--serif);font-style:italic;color:var(--muted);white-space:nowrap}
.dh-folio2 .dock__count b{font-style:normal;font-weight:400;color:var(--copper-bright)}
.dh-folio2 .view{display:inline-flex;border:1px solid var(--hair-strong)}
.dh-folio2 .view button{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;padding:.5rem .9rem;color:var(--muted);min-height:36px}
.dh-folio2 .view button.on{color:var(--slate-950);background:var(--copper)}
/* plates */
.dh-folio2 .works{padding-block:var(--sec-y);background:var(--slate-850)}
.dh-folio2 .plates{display:grid;grid-template-columns:repeat(12,1fr);gap:calc(var(--gap)*1.5) var(--gap);align-items:start}
.dh-folio2 .plate{grid-column:span 4;display:block;position:relative;transition:opacity .5s var(--ease),transform .6s var(--ease)}
.dh-folio2 .plate--7{grid-column:span 7}.dh-folio2 .plate--5{grid-column:span 5}.dh-folio2 .plate--6{grid-column:span 6}.dh-folio2 .plate--8{grid-column:span 8}
.dh-folio2 .plate--drop{margin-top:clamp(2rem,6vw,6rem)}
.dh-folio2 .plate.is-hidden{display:none}
.dh-folio2 .plate.is-out{opacity:0;transform:scale(.97) translateY(12px);pointer-events:none}
.dh-folio2 .plate__fig{position:relative;overflow:hidden;background:var(--slate-900)}
.dh-folio2 .plate__fig img{width:100%;aspect-ratio:4/3;object-fit:cover;filter:saturate(.92);transition:transform 1.4s var(--ease)}
.dh-folio2 .plate--7 .plate__fig img,.dh-folio2 .plate--8 .plate__fig img{aspect-ratio:16/10}
.dh-folio2 .plate__fig::after{content:"";position:absolute;inset:0;border:1px solid transparent;pointer-events:none;transition:border-color .6s var(--ease),inset .6s var(--ease)}
.dh-folio2 .plate:hover .plate__fig::after{border-color:var(--copper-frame);inset:.7rem}.dh-folio2 .plate:hover .plate__fig img{transform:scale(1.03)}
.dh-folio2 .plate__num{position:absolute;top:.9rem;left:.9rem;font-family:var(--serif);font-style:italic;color:var(--ink-0);font-size:1.05rem;padding:.2rem .55rem;background:rgba(20,22,23,.7)}
.dh-folio2 .plate__row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-2);margin-top:var(--s-2);border-bottom:1px solid var(--hair);padding-bottom:var(--s-2)}
.dh-folio2 .plate h3{font-size:clamp(1.15rem,1rem + .7vw,1.6rem);transition:color .4s}.dh-folio2 .plate:hover h3{color:var(--copper-bright)}
.dh-folio2 .plate__meta{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.dh-folio2 .plate__go{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--copper-bright);opacity:0;transform:translateX(-6px);transition:opacity .4s,transform .5s var(--ease);margin-top:.5rem;display:inline-block}
.dh-folio2 .plate:hover .plate__go{opacity:1;transform:none}
/* unveil */
.dh-folio2 .plate.rv{opacity:1;transform:none}
.dh-folio2 .plate.rv .plate__fig{clip-path:inset(0 0 100% 0);transition:clip-path 1.2s var(--ease)}
.dh-folio2 .plate.rv .plate__fig img{transform:scale(1.06);transition:transform 1.8s var(--ease)}
.dh-folio2 .plate.rv.in .plate__fig{clip-path:inset(0)}.dh-folio2 .plate.rv.in .plate__fig img{transform:scale(1)}.dh-folio2 .plate.rv.in:hover .plate__fig img{transform:scale(1.03)}
.dh-folio2 .plate.rv .plate__row,.dh-folio2 .plate.rv .plate__go{opacity:0;transform:translateY(10px);transition:opacity .8s var(--ease) .5s,transform .8s var(--ease) .5s}
.dh-folio2 .plate.rv.in .plate__row{opacity:1;transform:none}.dh-folio2 .plate.rv.in .plate__go{transform:translateX(-6px);opacity:0;transition:opacity .4s,transform .5s var(--ease)}
.dh-folio2 .plate.rv.in:hover .plate__go{opacity:1;transform:none}
/* index view */
.dh-folio2 .index{display:none;list-style:none;border-top:1px solid var(--hair-strong)}
.dh-folio2.view-index .index{display:block}.dh-folio2.view-index .plates{display:none}
.dh-folio2 .row{border-bottom:1px solid var(--hair)}
.dh-folio2 .row.is-hidden{display:none}
.dh-folio2 .row a{display:grid;grid-template-columns:3.5rem minmax(0,1fr) minmax(0,1fr) auto auto;align-items:baseline;gap:var(--s-3);padding:1.35rem 0;transition:padding-left .5s var(--ease)}
.dh-folio2 .row a:hover{padding-left:.6rem}
.dh-folio2 .row .n{font-family:var(--serif);font-style:italic;color:var(--muted)}
.dh-folio2 .row h3{font-size:clamp(1.4rem,1rem + 1.4vw,2.4rem);transition:color .4s}.dh-folio2 .row a:hover h3{color:var(--copper-bright)}
.dh-folio2 .row .meta{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.dh-folio2 .row .go{color:var(--copper-bright);opacity:0;transform:translateX(-6px);transition:opacity .4s,transform .5s var(--ease)}
.dh-folio2 .row a:hover .go{opacity:1;transform:none}
.dh-folio2 .row .thumb{display:none}
.dh-folio2 .peek{position:fixed;z-index:30;width:min(28vw,420px);aspect-ratio:4/3;pointer-events:none;opacity:0;transform:translate3d(-50%,-50%,0) scale(.96);transition:opacity .35s var(--ease),transform .5s var(--ease);border:1px solid var(--copper-frame);padding:.6rem;background:var(--slate-950);left:0;top:0}
.dh-folio2 .peek img{width:100%;height:100%;object-fit:cover;filter:saturate(.92)}
.dh-folio2 .peek.on{opacity:1;transform:translate3d(-50%,-50%,0) scale(1)}
.dh-folio2 .empty{display:none;padding:var(--s-5) 0;font-family:var(--serif);font-style:italic;font-size:var(--t-lede);color:var(--muted)}
.dh-folio2 .empty.on{display:block}
/* editorial break — reuse appr--img styling via classes below */
.dh-folio2 .brk{position:relative;overflow:hidden;background:var(--slate-950)}
.dh-folio2 .brk__img{position:relative;height:min(90vh,820px);overflow:hidden}
.dh-folio2 .brk__img img{position:absolute;inset:-10% 0;width:100%;height:120%;object-fit:cover;filter:saturate(.9)}
.dh-folio2 .brk__scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,22,23,0) 25%,rgba(20,22,23,.45) 55%,rgba(20,22,23,.94) 100%),linear-gradient(90deg,rgba(20,22,23,.55) 0%,rgba(20,22,23,0) 55%)}
.dh-folio2 .brk__body{position:absolute;inset:auto 0 0 0;padding:0 var(--pad-x) var(--s-5)}
.dh-folio2 .brk__body .wrap{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--gap);padding:0}
.dh-folio2 .brk h2{font-size:clamp(2rem,1rem + 3.2vw,4.4rem);max-width:14ch;margin-top:var(--s-2)}
.dh-folio2 .brk .btn{white-space:nowrap}
/* capabilities strip */
.dh-folio2 .caps{padding-block:var(--sec-y);background:var(--paper);color:var(--paper-ink);border-block:1px solid var(--paper-hair)}
.dh-folio2 .caps .ovl{color:var(--copper-deep)}.dh-folio2 .caps h2{font-size:var(--t-h2);margin-top:var(--s-2);color:var(--paper-ink)}
.dh-folio2 .caps__head{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--s-3);margin-bottom:var(--s-4)}
.dh-folio2 .caps__head p{max-width:52ch;color:var(--paper-muted)}
.dh-folio2 .caps__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gap)}
.dh-folio2 .cap{display:block;color:var(--paper-ink)}
.dh-folio2 .cap__fig{position:relative;overflow:hidden;background:#F2F3F3;border:1px solid var(--paper-hair);padding:.6rem}
.dh-folio2 .cap__fig img{width:100%;aspect-ratio:4/3;object-fit:cover;filter:saturate(.9);transition:transform 1.4s var(--ease)}
.dh-folio2 .cap:hover .cap__fig img{transform:scale(1.03)}
.dh-folio2 .cap__fig::after{content:"";position:absolute;inset:0;border:1px solid transparent;pointer-events:none;transition:border-color .6s var(--ease),inset .6s var(--ease)}
.dh-folio2 .cap:hover .cap__fig::after{border-color:var(--copper);inset:.6rem}
.dh-folio2 .cap__row{display:flex;justify-content:space-between;align-items:baseline;margin-top:var(--s-2);border-top:1px solid var(--paper-ink);padding-top:.6rem}
.dh-folio2 .cap h3{font-size:1.15rem;color:var(--paper-ink)}.dh-folio2 .cap__row span{font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;color:var(--paper-muted)}
/* quote */
.dh-folio2 .voice{padding-block:var(--sec-y);background:var(--slate-900);border-block:1px solid var(--hair);text-align:center}
.dh-folio2 .voice blockquote{font-family:var(--serif);font-style:italic;font-weight:300;font-size:clamp(1.6rem,1rem + 2.2vw,3rem);color:var(--ink-0);max-width:28ch;margin:0 auto;line-height:1.3;text-wrap:balance}
.dh-folio2 .voice footer{margin-top:var(--s-3);font-size:var(--t-xs);letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}
.dh-folio2 .voice .ovl{justify-content:center;margin-bottom:var(--s-3)}.dh-folio2 .voice .ovl::before{display:none}
@media (max-width:1100px){.dh-folio2 .fh__body{grid-template-columns:1fr}.dh-folio2 .caps__grid{grid-template-columns:repeat(2,1fr)}.dh-folio2 .row a{grid-template-columns:3rem minmax(0,1fr) auto}.dh-folio2 .row .meta:nth-child(3){display:none}}
@media (max-width:960px){.dh-folio2 .plate,.dh-folio2 .plate--7,.dh-folio2 .plate--5,.dh-folio2 .plate--8{grid-column:span 6}.dh-folio2 .plate--drop{margin-top:0}.dh-folio2 .plates{gap:var(--gap)}.dh-folio2 .brk__body .wrap{flex-direction:column;align-items:flex-start}.dh-folio2 .peek{display:none}.dh-folio2 .row .thumb{display:block;width:4.5rem;aspect-ratio:4/3;object-fit:cover}.dh-folio2 .row a{grid-template-columns:4.5rem minmax(0,1fr) auto}.dh-folio2 .row .n{display:none}.dh-folio2 .proof .wrap{grid-template-columns:1fr}.dh-folio2 .proof div{border-left:0;padding-left:0;border-top:1px solid var(--hair)}.dh-folio2 .proof div:first-child{border-top:0}}
@media (max-width:640px){.dh-folio2 .plate,.dh-folio2 .plate--7,.dh-folio2 .plate--5,.dh-folio2 .plate--6,.dh-folio2 .plate--8{grid-column:span 12}.dh-folio2 .caps__grid{grid-template-columns:1fr}.dh-folio2 .fh__item a{grid-template-columns:2rem minmax(0,1fr) auto}.dh-folio2 .fh__item .meta{display:none}}
@media (prefers-reduced-motion:reduce){.dh-folio2 .fh__stack img{transition:none}.dh-folio2 .fh__item .bar{animation:none}.dh-folio2 .plate.rv .plate__fig,.dh-folio2 .plate.rv .plate__fig img,.dh-folio2 .plate.rv .plate__row{transition:none;clip-path:none;transform:none;opacity:1}}
.dh-folio2 .hero__cue{display:flex;flex-direction:column;align-items:center;gap:.6rem;font-size:var(--t-xs);letter-spacing:.28em;text-transform:uppercase;color:var(--muted);transition:color .3s}
.dh-folio2 .hero__cue:hover{color:var(--copper-bright)}
.dh-folio2 .hero__cue i{width:1px;height:2.6rem;background:var(--hair-strong);position:relative;overflow:hidden}
.dh-folio2 .hero__cue i::after{content:"";position:absolute;left:0;top:-100%;width:100%;height:100%;background:var(--copper);animation:dhCue 2.2s var(--ease) infinite 2.6s}
@keyframes dhCue{0%{top:-100%}60%{top:100%}100%{top:100%}}
.dh-folio2 .cta{position:relative;padding-block:clamp(6rem,12vw,10rem);background:var(--slate-950);text-align:center;overflow:hidden}
.dh-folio2 .cta__frame{position:absolute;inset:clamp(.9rem,2vw,1.6rem);border:1px solid var(--copper-frame);pointer-events:none}
.dh-folio2 .cta .wrap{position:relative;z-index:1}
.dh-folio2 .cta .ovl{justify-content:center}.dh-folio2 .cta .ovl::before{display:none}
.dh-folio2 .cta h2{font-size:clamp(2.2rem,1rem + 4vw,4.6rem);max-width:18ch;margin:var(--s-2) auto var(--s-3)}
.dh-folio2 .cta p{max-width:48ch;margin:0 auto var(--s-4)}
.dh-folio2 .cta__row{display:flex;gap:var(--s-2);justify-content:center;flex-wrap:wrap}
/* safety nets: hero shows without the module; plates unveil regardless */
@keyframes dhForceIn{to{opacity:1;transform:none}}
@keyframes dhForceClip{to{clip-path:inset(0)}}
.dh-folio2 .rv{animation:dhForceIn .8s var(--ease) 2.5s forwards}.dh-folio2 .rv.in{animation:none}
.dh-folio2:not(.is-loaded) .ln i{animation:dhForceIn .8s var(--ease) 2.5s forwards}
.dh-folio2:not(.is-loaded) .fh__intro .ovl,.dh-folio2:not(.is-loaded) .fh__intro p,.dh-folio2:not(.is-loaded) .fh__list,.dh-folio2:not(.is-loaded) .fh__top,.dh-folio2:not(.is-loaded) .fh__foot,.dh-folio2:not(.is-loaded) .fh__frame{animation:dhForceIn .8s var(--ease) 2.5s forwards}
.dh-folio2 .plate.rv:not(.in) .plate__fig{animation:dhForceClip .8s var(--ease) 2.5s forwards}
.dh-folio2 .plate.rv:not(.in) .plate__row{animation:dhForceIn .8s var(--ease) 2.5s forwards}
