/* v5 — "A Virtual Exhibition": dark gallery walls, framed prints under
   spotlights, museum wall labels, three rooms. CSS-only motion; no WebGL. */
@font-face {
  font-family: 'Newsreader';
  src: url('fonts/newsreader.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Newsreader';
  src: url('fonts/newsreader-italic.woff2') format('woff2');
  font-weight: 100 900;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: 'Inter';
  src: url('fonts/inter.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
:root {
  color-scheme: dark;
  --wall: #121214;
  --wall-deep: #0b0b0c;
  --ink: #ece9e1;
  --muted: #a9a49a;
  --quiet: #6d6a63;
  --line: #26262a;
  --frame: #1c1c1f;
  --mat: #eae7de;
  --brass: #c2a164;
  --brass-dim: #8a7448;
  --serif: 'Newsreader', 'Iowan Old Style', 'Baskerville', 'Palatino Linotype', 'Book Antiqua', Georgia, serif;
  --sans: 'Inter', 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
* { box-sizing: border-box; }
html { scroll-behavior: auto; scroll-padding-top: 24px; }
body { margin: 0; background: var(--wall); color: var(--ink); font: 16px/1.6 var(--sans); -webkit-font-smoothing: antialiased; }
body.room-mono { background: var(--wall-deep); }
a { color: inherit; text-decoration: none; }
a:hover { color: var(--ink); }
a:focus-visible, button:focus-visible, [tabindex]:focus-visible { outline: 2px solid var(--brass); outline-offset: 6px; }
button { font: inherit; color: inherit; cursor: pointer; background: none; border: 0; padding: 0; }
img { display: block; max-width: 100%; height: auto; }
h1, h2, h3, p, figure { margin: 0; }
h1, h2, h3 { font-family: var(--serif); font-weight: 400; }
main, .site-header, footer { width: min(1400px, calc(100% - 112px)); margin-inline: auto; }

/* ---------- header / footer ---------- */
.site-header { min-height: 88px; display: flex; justify-content: space-between; align-items: center; gap: 32px; }
.wordmark { font: 28px/1.1 var(--serif); letter-spacing: -.4px; white-space: nowrap; color: var(--ink); }
.site-header nav { display: flex; gap: 32px; color: var(--muted); font-size: 14px; letter-spacing: .04em; }
.site-header nav a { display: inline-flex; align-items: center; min-height: 44px; }
.site-header nav a:hover { color: var(--ink); }
.site-header nav a[aria-current=page] { color: var(--ink); position: relative; }
.nav-item{position:relative;display:inline-flex;}.nav-toggle{position:absolute;opacity:0;pointer-events:none;}.nav-burger{display:none;}.nav-links{display:contents;}
.nav-drop{position:absolute;top:100%;left:50%;transform:translateX(-50%) translateY(4px);display:flex;flex-direction:column;gap:2px;min-width:180px;padding:8px;background:#161618;border:1px solid #2a2a2e;border-radius:10px;opacity:0;visibility:hidden;transition:opacity .18s ease,transform .18s ease,visibility .18s;z-index:50;box-shadow:0 12px 32px rgba(0,0,0,.5);}
.nav-item:hover .nav-drop,.nav-item:focus-within .nav-drop{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0);}
.nav-drop a{display:block;padding:10px 14px;min-height:0;font-size:13px;color:var(--muted);border-radius:6px;white-space:nowrap;}
.nav-drop a:hover{background:#222226;color:var(--ink);}
.site-header nav a[aria-current=page]::after { content: ''; position: absolute; bottom: 8px; left: 0; right: 0; height: 1px; background: var(--brass); }
footer { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding-block: 26px 34px; margin-top: 96px; border-top: 1px solid var(--line); font: 14px/1.6 var(--sans); color: var(--quiet); }
footer nav { display: flex; gap: 24px; }
footer nav a { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; color: var(--quiet); }
footer nav a:hover { color: var(--muted); }
.sr-only, .skip:not(:focus) { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; }
.skip:focus { position: fixed; top: 8px; left: 8px; background: var(--wall); color: var(--ink); padding: 12px; z-index: 60; }

/* ---------- homepage hero: one complete work first ---------- */
.hero { min-height: calc(100svh - 88px); display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; padding: 40px 0 64px; position: relative; }
.hero .eyebrow { margin-bottom: 30px; }
.hero-print { margin: 0; }
.hero-print .mat img { max-width: min(1200px, 90vw); max-height: 62svh; }
.hero-plaque { margin-top: 26px; }
.eyebrow { font: 12px/1.6 var(--sans); letter-spacing: .42em; text-transform: uppercase; color: var(--brass); margin-bottom: 34px; }
.entry-cta { margin-top: 46px; display: flex; gap: 28px; align-items: center; flex-wrap: wrap; justify-content: center; }
/* ---------- exhibition statement ---------- */
.statement { text-align: center; padding: clamp(64px, 11svh, 130px) 24px; }
.statement h2 { font-size: clamp(30px, 4.6vw, 56px); letter-spacing: -.01em; }
.statement p { margin: 22px auto 0; font: 17px/1.75 var(--serif); color: var(--muted); max-width: 640px; }
/* ---------- set group headers ---------- */
.set-head { text-align: center; margin-bottom: 36px; }
.set-head h2 { font-size: clamp(26px, 3.4vw, 40px); letter-spacing: .005em; }
.set-head p { margin: 14px auto 0; font: 16px/1.7 var(--serif); color: var(--muted); max-width: 660px; }
/* ---------- room standfirst ---------- */
.room-standfirst { margin: 22px auto 0; font: 17px/1.7 var(--serif); color: var(--muted); max-width: 640px; }
.btn-browse { font: 14px/1 var(--sans); letter-spacing: .22em; text-transform: uppercase; color: #0d0d0e; background: var(--brass); border: 1px solid var(--brass); padding: 18px 38px; border-radius: 999px; transition: background .4s, border-color .4s; }
.btn-browse:hover { background: #d3b476; border-color: #d3b476; color: #0d0d0e; }
.btn-tour { font: 14px/1 var(--sans); letter-spacing: .22em; text-transform: uppercase; color: var(--brass); border: 1px solid var(--brass-dim); padding: 18px 34px; border-radius: 999px; transition: border-color .4s, color .4s, background .4s; background: none; cursor: pointer; }
.btn-tour:hover { color: #0d0d0e; background: var(--brass); border-color: var(--brass); }

/* ---------- room index ---------- */
.rooms { padding: 40px 0 24px; }
.rooms h2, .featured h2 { font-size: clamp(30px, 3.4vw, 42px); letter-spacing: -.01em; margin-bottom: 8px; }
.rooms h2 { margin-bottom: 28px; }
.room-card { display: grid; grid-template-columns: 200px 1fr; gap: 32px; align-items: center; padding: 44px 8px; border-top: 1px solid var(--line); transition: background .5s; }
.room-card:last-of-type { border-bottom: 1px solid var(--line); }
.room-card:hover { background: rgba(255, 244, 220, .018); }
.room-thumb .frame { padding: 8px; box-shadow: 0 18px 44px rgba(0,0,0,.5); }
.room-thumb .mat { padding: 7px; }
.room-thumb .mat img { max-width: none; max-height: none; width: 100%; margin: 0; aspect-ratio: 4/3; object-fit: cover; }
.room-card h3 { font-size: clamp(34px, 4.4vw, 58px); line-height: 1.05; letter-spacing: -.015em; }
.room-card .room-desc { margin-top: 12px; color: var(--muted); font: 15px/1.65 var(--sans); max-width: 560px; }

/* ---------- featured print (entry, slow Ken Burns) ---------- */
.featured { padding: 96px 0 24px; }
.featured .wall { margin-top: 40px; }
.kenburns { overflow: hidden; }
.kenburns img { animation: kb 26s ease-in-out infinite alternate; }
@keyframes kb { from { transform: scale(1); } to { transform: scale(1.055); } }

/* ---------- the walk: one print per wall ---------- */
.room-head { padding: 72px 0 8px; text-align: center; }
.room-head h1 { font-size: clamp(46px, 7vw, 96px); line-height: 1.02; letter-spacing: -.02em; }
.room-head .btn-tour { margin-top: 34px; display: inline-block; }
.gallery-filters { display: flex; flex-wrap: wrap; justify-content: center; gap: 0 30px; margin: 44px 0 0; padding-bottom: 14px; color: var(--quiet); font-size: 14px; letter-spacing: .06em; }
.gallery-filters a { padding: 10px 2px; }
.gallery-filters a:hover { color: var(--ink); }
.gallery-filters a[aria-current=page] { color: var(--brass); border-bottom: 1px solid var(--brass-dim); }
.walk { padding: 24px 0 40px; }
.wall { padding: clamp(72px, 12svh, 150px) 0; position: relative; }
/* the framed print — thin elegant mat, dark outer frame, floating shadow */
.frame { display: inline-block; background: var(--frame); padding: 10px; border: 1px solid #2b2b30; box-shadow: 0 0 0 1px rgba(255,255,255,0.05), 0 18px 48px rgba(0,0,0,0.55); position: relative; }
.wall .frame, .print-room .frame { position: relative; z-index: 1; }
/* hover: the frame edge catches light */
.wall .frame, .print-room .frame { transition: border-color .25s ease, box-shadow .25s ease; }
.wall a:hover .frame, .print-room a:hover .frame,
.wall .frame:hover, .print-room .frame:hover { border-color: rgba(255,244,220,.45); box-shadow: 0 0 0 1px rgba(255,244,220,.22), 0 18px 48px rgba(0,0,0,.55); }
.mat { display: block; background: var(--mat); padding: clamp(8px, 1.1vw, 14px); }
.mat img { width: auto; height: auto; max-width: min(1060px, 84vw); max-height: 66svh; margin-inline: auto; }
.wall { text-align: center; }
/* museum wall label */
.plaque { display: grid; grid-template-columns: 64px minmax(0, 560px); gap: 20px; text-align: left; justify-content: center; margin: 34px auto 0; max-width: 720px; position: relative; z-index: 1; }
.plaque-no { font: 13px/2.2 var(--sans); letter-spacing: .24em; color: var(--brass-dim); }
.plaque h2 { font-size: 26px; line-height: 1.25; letter-spacing: -.01em; }
.plaque h2 a:hover { color: var(--brass); }
.plaque-meta { margin-top: 8px; font: 12.5px/1.6 var(--sans); letter-spacing: .2em; text-transform: uppercase; color: #8f8b82; }
.plaque-note { margin-top: 12px; font: 17px/1.65 var(--serif); color: #c9c4b8; }
.plaque-note p + p { margin-top: 10px; }

/* scroll reveal removed — walls render immediately, no waiting on long pages */

/* ---------- the print room (single work page) ---------- */
.work-top { display: flex; justify-content: space-between; align-items: center; margin: 10px 0 0; font: 14px/1.5 var(--sans); color: var(--muted); }
.work-top a { display: inline-flex; align-items: center; min-height: 44px; letter-spacing: .06em; }
.work-top a:hover { color: var(--ink); }
.work-index { display: flex; align-items: center; gap: 8px; }
.work-counter { min-width: 52px; text-align: center; font-variant-numeric: tabular-nums; letter-spacing: .1em; }
.work-index .index-arrow { display: inline-flex; align-items: center; justify-content: center; width: 44px; min-height: 44px; font: 20px/1 var(--sans); color: var(--muted); }
.work-index .index-arrow:hover { color: var(--brass); }
.index-arrow.is-disabled { opacity: .22; }
.series-end { color: var(--muted); letter-spacing: .04em; white-space: nowrap; }
.series-end:hover { color: var(--brass); }
.work-index { flex-wrap: wrap; justify-content: flex-end; row-gap: 6px; }
.work-index .series-end + .series-end { margin-left: 16px; }
.print-room { padding: clamp(28px, 5svh, 64px) 0 8px; display: flex; flex-direction: column; align-items: center; position: relative; }
.print-room::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(ellipse 70% 60% at 50% 40%, rgba(255, 240, 214, .11), rgba(255, 240, 214, 0) 74%); }
.print-room .mat img { max-width: min(1320px, 88vw); max-height: min(84svh, calc(100svh - 190px), 1250px); }
.print-room .plaque { margin-top: 40px; }
.print-room .plaque h2 { font-size: 32px; }

/* ---------- legal pages ---------- */
.legal { max-width: 680px; margin: 76px auto 100px; }
.legal h1 { font-size: 44px; letter-spacing: -.8px; line-height: 1.15; }
.legal p { margin-top: 24px; font: 19px/1.65 var(--serif); color: var(--muted); }
.legal a { text-decoration: underline; }

/* ---------- guided tour overlay ---------- */
.tour { position: fixed; inset: 0; z-index: 50; background: rgba(7, 7, 8, .985); display: none; }
.tour.open { display: block; }
.tour-stage { position: absolute; inset: 0 0 190px; display: flex; align-items: center; justify-content: center; padding: 48px 72px 0; }
.tour-stage .frame { max-width: 100%; }
.tour-slide { position: absolute; opacity: 0; transition: opacity 1.4s ease; display: flex; align-items: center; justify-content: center; max-width: 100%; max-height: 100%; }
.tour-slide.on { opacity: 1; }
.tour-slide .mat img { max-width: min(1200px, 86vw); max-height: calc(100svh - 300px); }
.tour-caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 26px 72px 34px; display: grid; grid-template-columns: 1fr auto; gap: 8px 40px; align-items: end; border-top: 1px solid var(--line); background: linear-gradient(to top, rgba(7,7,8,.9), rgba(7,7,8,0)); }
.tour-caption h2 { font-size: 30px; letter-spacing: -.01em; }
.tour-caption .plaque-meta { margin-top: 6px; }
.tour-caption .plaque-note { margin-top: 8px; font-size: 16px; max-width: 640px; }
.tour-count { font: 13px/1.6 var(--sans); letter-spacing: .26em; color: var(--brass); font-variant-numeric: tabular-nums; white-space: nowrap; }
.tour-progress { position: absolute; top: 0; left: 0; height: 2px; background: var(--brass); width: 0; transition: width .5s linear; }
.tour-ui { position: absolute; top: 18px; right: 26px; display: flex; gap: 6px; z-index: 3; }
.tour-btn { width: 52px; height: 52px; display: inline-flex; align-items: center; justify-content: center; font: 19px/1 var(--sans); color: var(--muted); border-radius: 999px; }
.tour-btn:hover { color: var(--ink); background: rgba(255,255,255,.06); }
.tour-arrow { position: absolute; top: 96px; bottom: 190px; width: 72px; display: flex; align-items: center; justify-content: center; font: 30px/1 var(--sans); color: var(--quiet); z-index: 2; }
.tour-arrow:hover { color: var(--brass); }
.tour-arrow.prev { left: 0; }
.tour-arrow.next { right: 0; }
/* a set stop: its prints hang together on one tour-scale wall at one height;
   --ar/--n are set inline per set so the row fits the stage. Any print opens
   full size; the back button returns to the set. */
.tour-set-prints { --gap: clamp(18px, 2.6vw, 44px); display: flex; align-items: flex-end; justify-content: safe center; gap: var(--gap); max-width: 100%; overflow-x: auto; scrollbar-width: thin; padding: 4px; }
.tour-member { background: none; border: 0; padding: 0; margin: 0; cursor: zoom-in; min-width: 0; flex: 0 0 auto; }
.tour-member .mat img { height: min(48svh, max(120px, calc((88vw - (var(--n, 3) - 1) * var(--gap) - var(--n, 3) * 64px) / var(--ar, 3)))); width: auto; max-width: 100%; max-height: none; }
/* landscape sets stack vertically in the tour as well; the strip scrolls */
.tour-set-prints.lay-v { flex-direction: column; align-items: center; overflow-x: visible; overflow-y: auto; max-height: calc(100svh - 300px); row-gap: clamp(28px, 4vh, 56px); padding: 12px 4px; width: min(100vw - 160px, 980px); }
.tour-set-prints.lay-v .tour-member { width: 100%; }
.tour-set-prints.lay-v .frame, .tour-set-prints.lay-v .frame a, .tour-set-prints.lay-v .mat { display: block; }
.tour-set-prints.lay-v .tour-member .mat img { width: 100%; height: auto; max-width: none; }
.tour .tour-back { display: none; }
.tour.zoomed .tour-back { display: inline-flex; }

@media (max-width: 1000px) {
  main, .site-header, footer { width: calc(100% - 64px); }
  .room-card { grid-template-columns: 140px 1fr; }
}
@media (max-width: 640px) {
  main, .site-header, footer { width: calc(100% - 40px); }
  .site-header { min-height: 104px; flex-direction: column; align-items: flex-start; justify-content: center; gap: 4px; padding-block: 14px 8px; }
  .wordmark { font-size: 26px; }
  .site-header nav{display:block;font-size:13px;}
  .nav-burger{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:5px;min-height:44px;width:44px;cursor:pointer;position:relative;z-index:120;}
  .nav-burger span{display:block;width:22px;height:2px;background:var(--ink);border-radius:1px;}
  /* mobile drawer: full-height fixed panel, solid, scrollable, slides in from the right */
  .nav-links{display:flex;position:fixed;top:0;right:0;bottom:0;width:min(340px,80vw);flex-direction:column;gap:2px;background:#141416;border-left:1px solid #2a2a2e;padding:110px 14px 24px;z-index:110;box-shadow:-18px 0 48px rgba(0,0,0,.55);overflow-y:auto;-webkit-overflow-scrolling:touch;transform:translateX(103%);transition:transform .28s ease;}
  .nav-toggle:checked ~ .nav-links{transform:none;}
  body:has(.nav-toggle:checked){overflow:hidden;}
  body:has(.nav-toggle:checked)::after{content:'';position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:100;}
  .nav-links .nav-item{display:block;}
  .nav-links .nav-item>a{display:block;padding:11px 14px;}
  .nav-links .nav-drop{position:static;transform:none;opacity:1;visibility:visible;display:flex;box-shadow:none;border:none;background:transparent;padding:0 0 2px 16px;min-width:0;}
  .nav-links .nav-drop a{padding:9px 14px;font-size:13px;}
  .hero { min-height: calc(100svh - 104px); padding: 32px 0 56px; }
  .eyebrow { letter-spacing: .3em; }
  .entry-cta { gap: 22px; }
  .room-card { grid-template-columns: 1fr; gap: 16px; padding: 34px 4px; }
  .room-thumb { max-width: 300px; }
  .mat img { max-width: 86vw; max-height: 58svh; }
  /* set rows stack vertically on phones: no scrollbars in either direction */
  .set-wall.lay-grid .set-prints, .set-wall.lay-v .set-prints { flex-direction: column; align-items: center; overflow-x: visible; }
  .set-wall.lay-grid .set-print .mat img, .set-wall.lay-v .set-print .mat img { height: auto; max-height: 60svh; }
  .plaque { grid-template-columns: 1fr; gap: 8px; margin-top: 26px; }
  .plaque-no { line-height: 1.6; }
  .plaque h2 { font-size: 24px; }
  .print-room .mat img { max-width: 88vw; max-height: 72svh; }
  .tour-stage { inset: 0 0 220px; padding: 40px 20px 0; }
  .tour-slide .mat img { max-width: 88vw; max-height: calc(100svh - 330px); }
  .tour-caption { padding: 20px 24px 26px; grid-template-columns: 1fr; }
  .tour-caption h2 { font-size: 24px; }
  .tour-arrow { width: 52px; bottom: 220px; }
  .legal { margin-top: 48px; }
  .legal h1 { font-size: 36px; }
  footer { flex-wrap: wrap; margin-top: 64px; padding-block: 20px 26px; }
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
  /* reveal removed */
}

/* ---------- photo sets: several prints, one wall ---------- */
/* figures top-align: plaques have different heights (notes wrap to 1-3
   lines), so aligning figure tops keeps the IMAGES in one clean band */
.set-wall .set-prints { --gap: clamp(16px, 2vw, 36px); display: flex; justify-content: safe center; align-items: flex-start; gap: var(--gap); overflow-x: auto; scrollbar-width: thin; position: relative; z-index: 1; padding-bottom: 30px; border-bottom: 1px solid var(--line);  container-type: inline-size; }
.set-print { margin: 0; text-align: center; min-width: 0; flex: 0 0 auto; }
.set-print .frame a { display: block; }
/* one clean row: every print the same display height, bottom-aligned, even
   gaps. --ar (sum of the members' aspect ratios) and --n are set inline per
   set so the whole row fits the wall (main is min(1400px, 100vw - 112px));
   the 64px per print covers frame + mat + border (with slack); on narrow screens the row
   scrolls instead of collapsing. */
/* lay-h rows: fixed vh heights per member count, bypassing the width formula
   that was computing too small on some viewports */
/* truly dynamic: 100cqw = actual rendered width of the row container.
   height fits the row exactly; vh cap keeps it from getting too tall. */
.set-wall.lay-h .set-print .mat img {
  /* dynamic: 100cqw = real row width; chrome = frame(12px*2+1px*2) + mat(clamp(8px,1.1vw,14px)*2) per print */
  height: min(74vh, calc((min(1400px, 100vw - 112px) - (var(--n, 2) - 1) * 56px - var(--n, 2) * (26px + clamp(16px, 2.2vw, 28px))) / var(--ar, 2)));
  width: auto; max-width: none; max-height: none;
}
.set-print .mat img { height: max(120px, calc((min(1400px, 100vw - 112px) - var(--n, 3) * 100px) / var(--ar, 3))); width: auto; max-width: none; max-height: none; }
.set-print .plaque { grid-template-columns: minmax(0, 100%); gap: 8px; margin-top: 24px; width: 0; min-width: 100%; }
.set-print .plaque-no { display: none; }
.set-print .plaque h2 { font-size: 22px; }
.set-print .plaque-meta { font-size: 11.5px; }
.set-print .plaque-note { font-size: 15.5px; }
/* landscape sets stack vertically: one large print per row, centered, the
   page scrolls. .lay-v/.lay-h is set per set by the build (landscape
   majority -> lay-v). */
.set-wall.lay-v .set-prints { flex-direction: column; align-items: center; overflow-x: visible; row-gap: clamp(32px, 5vh, 64px); }
/* vertical stack: the figure gets a definite width (fits the wall) and the
   frame chain goes block so the img's percentage width resolves cleanly */
.set-wall.lay-v .set-print { width: min(100%, 1160px); }
.set-wall.lay-v .frame, .set-wall.lay-v .frame a, .set-wall.lay-v .mat { display: block; }
.set-wall.lay-v .set-print .mat img { width: 100%; height: auto; max-width: none; }
/* lay-grid: a set that wraps across several rows — uniform row height, prints
   flow left to right and wrap; still one wall unit, one guided-tour stop. */
.set-wall.lay-grid .set-prints { flex-wrap: wrap; overflow-x: visible; row-gap: clamp(32px, 5vh, 64px); }
.set-wall.lay-grid .set-print .mat img { height: clamp(240px, 38vh, 430px); width: auto; max-width: none; max-height: none; }
/* a set member shown upside-down for that wall only (180°) */
.set-print.rot180 .frame { transform: rotate(180deg); }
/* a set member shown rotated for that wall only: the slot is portrait, the
   framed print is laid out landscape inside it and turned 90° CW */
.set-print.rot-cw .rotslot { position: relative; display: inline-block; aspect-ratio: 508/800; height: min(50svh, 120vw); }
.set-print.rot-cw .rotslot > .frame { position: absolute; top: 50%; left: 50%; width: calc(100% * 800 / 508); aspect-ratio: 800/508; box-sizing: border-box; transform: translate(-50%, -50%) rotate(90deg); }
.set-print.rot-cw .frame > a { display: block; height: 100%; }
.set-print.rot-cw .mat { height: 100%; box-sizing: border-box; }
.set-print.rot-cw .mat img { width: 100%; height: 100%; max-width: none; max-height: none; object-fit: contain; }
/* quiet one-line strip on a set member's work page */
.set-siblings { margin: 36px auto 0; text-align: center; color: var(--quiet); font: 14px/1.6 var(--sans); letter-spacing: .05em; position: relative; z-index: 1; }
.set-siblings + .set-siblings { margin-top: 10px; }
.set-siblings a { color: var(--muted); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }
.set-siblings a:hover { color: var(--brass); }
@media (max-width: 640px) {
  .set-wall .set-prints { --gap: 40px; }
  .set-print.rot-cw .rotslot { height: min(52svh, 120vw); }
}

/* Hub sections: doors and quiet article pages */
.hub{min-height:72vh;display:flex;flex-direction:column;justify-content:center;max-width:760px;margin:0 auto;padding:0 24px}
.hub .eyebrow{margin-bottom:8px}
.doors{display:flex;flex-direction:column;margin-top:32px}
.door{display:flex;align-items:baseline;gap:20px;padding:24px 4px;border-top:1px solid #2a2a2e;text-decoration:none}
.door:last-of-type{border-bottom:1px solid #2a2a2e}
.door-name{font:44px/1.1 var(--serif);color:var(--ink);letter-spacing:-.5px}
.door-desc{font:14px/1.5 var(--sans);color:var(--muted)}
.door:hover .door-name{color:var(--brass)}
.hub-foot{margin-top:56px;font:14px var(--sans);color:var(--muted)}
.section-foot{margin-top:64px;font:13px var(--sans);color:var(--muted)}
.section-foot a{color:var(--muted);text-decoration:none}
/* cache-bust 2026-09-25: force a fresh stylesheet URL after the apex asset-routing fix */
