/* Parallax (Claude): one photograph, taken apart into the planes it is made of.
   House rules from base.css: black ground, warm off-white ink, no accent colour,
   Space Grotesk for the one type gesture, Space Mono for metadata in brackets. */

.pc{--head:clamp(56px,7vh,72px)}
.pc main{display:block}

/* ---------- masthead: floats over the photograph, readable on sky and on black ---------- */
.pc-mast{position:fixed;inset:0 0 auto;z-index:40;display:flex;align-items:flex-start;justify-content:space-between;
  gap:24px;padding:18px var(--gutter);color:#fff;mix-blend-mode:difference;pointer-events:none}
.pc-mast a{pointer-events:auto;text-decoration:none}
.pc-brand{display:grid;gap:2px;font-family:var(--sans);font-size:13px;line-height:1.25;letter-spacing:-.005em}
.pc-brand b{font-weight:600}
.pc-brand span{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;opacity:.8}
.pc-mast nav{display:flex;gap:clamp(14px,2.2vw,30px);font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase}
.pc-mast nav a{min-height:28px;display:inline-flex;align-items:flex-start}
.pc-mast nav a:hover{text-decoration:underline;text-underline-offset:4px}

/* ---------- the hero ---------- */
.pc-hero{position:relative;height:430svh;background:#000}
.pc-stage{position:sticky;top:0;height:100svh;overflow:hidden;background:#000;contain:layout paint}
.pc-scene{position:absolute;inset:0;perspective:var(--persp,2000px);perspective-origin:var(--po-x,50%) var(--po-y,50%)}
.pc-rig{position:absolute;inset:0;transform-style:preserve-3d;will-change:transform}

/* The frame is the photograph's 1920 x 1280 space, covering the viewport. JS refines it;
   without JS it still covers the screen as a still picture. */
.pc-frame{position:absolute;left:50%;top:50%;width:max(104vw,156svh);aspect-ratio:3/2;translate:-50% -50%;
  transform-style:preserve-3d}
.pc.js .pc-frame{left:var(--fx);top:var(--fy);width:var(--fw);height:var(--fh);aspect-ratio:auto;translate:none}

/* every plane is a sheet the size of the photograph; its picture sits where it sat in the frame */
.pc-sheet{position:absolute;inset:0;transform-origin:var(--vx,50%) var(--vy,50%);will-change:transform;pointer-events:none}
.pc-img{position:absolute;left:calc(var(--x) / 1920 * 100%);top:calc(var(--y) / 1280 * 100%);
  width:calc(var(--w) / 1920 * 100%);height:calc(var(--h) / 1280 * 100%);max-width:none;display:block;
  user-select:none;-webkit-user-drag:none}
.pc-box{position:absolute;left:0;right:0;bottom:0;top:var(--box-top,0);pointer-events:none}
.pc-sheet[data-id="sky"] .pc-img{clip-path:inset(var(--sky-clip,0) var(--sky-side,0) 0 var(--sky-side,0))}

/* once the picture comes apart, each piece carries a small label, like a technical drawing */
.pc-tag{position:absolute;left:calc(var(--tx,0) / 1920 * 100%);top:calc(var(--ty,0) / 1280 * 100%);
  translate:0 calc(-100% - var(--tag,11px) * .7);white-space:nowrap;font-family:var(--mono);font-size:var(--tag,11px);
  line-height:1;letter-spacing:.14em;text-transform:uppercase;color:var(--ink);opacity:var(--mk-o,0)}
.pc-tag i{font-style:normal;color:var(--muted);margin-right:.9em}

/* the name is one of the planes. Wide screens: one line, the rock's tower stands between first and last
   name. Tall screens: two lines in the sky above the rock. Positions are in the photograph's pixels. */
.pc-name{position:absolute;inset:0;margin:0;font-family:var(--display);font-weight:600;text-transform:uppercase;
  letter-spacing:-.045em;line-height:.84;font-size:calc(var(--fw,100vw) * var(--ns,.1));color:var(--name-c,#050505);white-space:nowrap}
.pc-name span{position:absolute;top:calc(var(--ny,262) / 1280 * 100%)}
.pc-name span:first-child{right:calc((1920 - var(--n1,812)) / 1920 * 100%)}
.pc-name span:last-child{left:calc(var(--n2,742) / 1920 * 100%)}
.is-tall .pc-name span{left:calc(var(--cx,948) / 1920 * 100%);right:auto;translate:-50% 0}
.is-tall .pc-name span:last-child{top:calc((var(--ny,0) + var(--ns,.128) * 1612.8) / 1280 * 100%)}

.pc-meta{position:absolute;z-index:5;left:var(--gutter);right:var(--gutter);bottom:18px;display:flex;justify-content:space-between;
  align-items:flex-end;gap:18px;color:#fff;mix-blend-mode:difference;font-family:var(--mono);font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;pointer-events:none}
.pc-meta p{margin:0}
.pc-meta .pc-count{min-width:11ch;text-align:right}
.pc-note{position:absolute;z-index:5;left:var(--gutter);bottom:54px;max-width:34ch;margin:0;color:var(--ink);
  font-family:var(--sans);font-size:clamp(13px,1.05vw,15px);line-height:1.45;opacity:var(--note-o,0);pointer-events:none}
.pc-note b{font-weight:600}

/* loading: black until every plane has decoded, then the photograph arrives whole */
/* (the fade sits on the scene: opacity on the 3D rig itself would flatten its preserve-3d context) */
.pc.js .pc-scene{opacity:0;transition:opacity 1.1s var(--ease)}
.pc.ready .pc-scene{opacity:1}

/* ---------- collections ---------- */
.pc-index{position:relative;z-index:2;background:#000;padding:clamp(80px,12vh,140px) var(--gutter) clamp(60px,10vh,120px)}
.pc-index-head{display:flex;justify-content:space-between;align-items:baseline;gap:24px;margin-bottom:clamp(28px,5vh,56px)}
.pc-index-head h2{margin:0;font-family:var(--display);font-weight:500;font-size:clamp(34px,5.4vw,84px);letter-spacing:-.04em;line-height:.9}
.pc-index-head p{margin:0;max-width:44ch;color:var(--muted);font-size:14px}
.pc-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.pc-row{border-bottom:1px solid var(--line)}
.pc-row button{width:100%;display:grid;grid-template-columns:4ch 1fr auto;align-items:baseline;gap:clamp(10px,2vw,28px);
  padding:clamp(14px,2.2vh,22px) 0;text-align:left;cursor:pointer;color:var(--ink)}
.pc-row .n{font-family:var(--mono);font-size:10px;letter-spacing:.14em;color:var(--muted)}
.pc-row .t{font-family:var(--display);font-weight:500;font-size:clamp(22px,3.1vw,46px);letter-spacing:-.035em;line-height:1}
.pc-row .m{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);text-align:right}
.pc-row button:hover .t,.pc-row button:focus-visible .t{color:#fff}
.pc-row button:hover .n,.pc-row button:hover .m{color:var(--ink)}
.pc-peek{position:fixed;z-index:30;left:0;top:0;width:clamp(220px,22vw,360px);pointer-events:none;opacity:0;
  transition:opacity .25s var(--ease);translate:var(--px,0) var(--py,0)}
.pc-peek img{width:100%;height:auto;aspect-ratio:var(--pa,3/2);object-fit:cover;background:#111}
.pc-peek.on{opacity:1}
.pc-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px 28px;padding:28px var(--gutter) 40px;
  font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);border-top:1px solid var(--line)}
.pc-foot a{text-decoration:none;color:var(--ink)}
.pc-foot a:hover{text-decoration:underline;text-underline-offset:4px}

/* ---------- viewer ---------- */
.pc-viewer{position:fixed;inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;
  background:#000;color:var(--ink);overscroll-behavior:contain}
.pc-viewer::backdrop{background:#000}
.pc-viewer[open]{display:grid;grid-template-rows:auto 1fr auto}
.pc-vbar{display:flex;justify-content:space-between;align-items:baseline;gap:18px;padding:18px var(--gutter)}
.pc-vbar h3{margin:0;font-family:var(--display);font-weight:500;font-size:clamp(20px,2.4vw,32px);letter-spacing:-.03em}
.pc-vbar .meta{margin-top:4px}
.pc-vclose{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;min-height:44px;padding:0 4px}
.pc-vclose:hover{text-decoration:underline;text-underline-offset:4px}
.pc-vtrack{display:flex;gap:clamp(8px,1.2vw,16px);overflow-x:auto;scroll-snap-type:x mandatory;padding:0 var(--gutter);
  align-items:center;scrollbar-width:none;min-height:0}
.pc-vtrack::-webkit-scrollbar{display:none}
.pc-vtrack figure{margin:0;flex:none;height:100%;max-height:calc(100svh - 150px);scroll-snap-align:center;display:flex;align-items:center}
.pc-vtrack img{height:100%;max-height:calc(100svh - 150px);width:auto;max-width:calc(100vw - 2 * var(--gutter));object-fit:contain;background:#0b0b0b}
.pc-vnav{display:flex;justify-content:space-between;align-items:center;padding:12px var(--gutter) 18px;font-family:var(--mono);
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.pc-vnav button{min-height:44px;min-width:44px;color:var(--ink)}
.pc-vnav button:hover{text-decoration:underline;text-underline-offset:4px}

@media (max-width:359px){.pc-brand span{display:none}}
@media (max-width:720px){
  .pc-mast nav a:not(.keep){display:none}
  .pc-row button{grid-template-columns:3ch 1fr}
  .pc-row .m{grid-column:2;text-align:left;margin-top:6px}
  .pc-peek{display:none}
  .pc-meta .pc-where{display:none}
  .pc-note{bottom:48px;max-width:30ch}
}

@media (prefers-reduced-motion:reduce){
  .pc-hero{height:100svh}
  .pc.js .pc-scene{transition:none}
}

.pc-inline{display:inline;color:var(--ink);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;cursor:pointer}
.pc-inline:hover{color:#fff}
