:root{
  --paper:#f2f0ec;
  --paper-2:#e8e5df;
  --ink:#1a1917;
  --ink-60:rgba(26,25,23,.74);
  --ink-40:rgba(26,25,23,.62); /* 4.7:1 on paper — .58 fell below WCAG AA for small text */
  --line:rgba(26,25,23,.16);
  --pad:clamp(20px,4.5vw,64px);
  --sans:"Neue Haas Grotesk Display","Helvetica Neue",Helvetica,Inter,"Hiragino Kaku Gothic ProN","Yu Gothic","Noto Sans JP",Arial,sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--sans);
  font-size:clamp(15px,1.02vw,17px);
  line-height:1.55;letter-spacing:-.005em;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
html[lang="ja"] body{letter-spacing:0;line-height:1.85}
a{color:inherit;text-decoration:none}
img{display:block;width:100%;height:auto}
picture{display:block}
:focus-visible{outline:1px solid var(--ink);outline-offset:4px}
/* buttons reset with all:unset would otherwise lose the ring (specificity) */
.langs button:focus-visible,.lb button:focus-visible{outline:1px solid var(--ink);outline-offset:2px}

.skip{
  position:fixed;top:8px;left:8px;z-index:100;
  padding:10px 14px;background:var(--paper);border:1px solid var(--ink);
  font-size:12px;letter-spacing:.08em;text-transform:uppercase;
  transform:translateY(-200%);transition:transform .2s;
}
.skip:focus{transform:none}

.wrap{padding-left:var(--pad);padding-right:var(--pad)}
.rule{border:0;border-top:1px solid var(--line);margin:0}
.label{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-60);font-weight:500}
html[lang="ja"] .label{letter-spacing:.08em}
.num{font-variant-numeric:tabular-nums;font-size:11px;letter-spacing:.12em;color:var(--ink-40)}

/* ---------- header ---------- */
header{position:sticky;top:0;z-index:50;background:var(--paper);border-bottom:1px solid var(--line)}
@supports (backdrop-filter:blur(10px)){
  header{background:color-mix(in srgb,var(--paper) 90%,transparent);backdrop-filter:saturate(140%) blur(10px)}
}
.bar{display:flex;align-items:baseline;gap:clamp(16px,4vw,56px);padding-top:16px;padding-bottom:14px}
.brand{font-size:14px;letter-spacing:.16em;text-transform:uppercase;font-weight:500;white-space:nowrap}
nav{display:flex;gap:clamp(14px,2.4vw,32px);margin-left:auto;flex-wrap:wrap}
nav a{font-size:12.5px;letter-spacing:.06em;color:var(--ink-40);padding-bottom:2px;border-bottom:1px solid transparent;transition:color .25s,border-color .25s}
nav a:hover,nav a.active{color:var(--ink)}
nav a.active{border-color:var(--ink)}
.langs{display:flex;gap:10px;padding-left:clamp(12px,2vw,28px);border-left:1px solid var(--line)}
.langs button{all:unset;cursor:pointer;font:inherit;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-40);transition:color .2s}
.langs button:hover{color:var(--ink)}
.langs button[aria-current="true"]{color:var(--ink);text-decoration:underline;text-underline-offset:4px}
.langs button:focus-visible{outline-offset:2px}
@media(max-width:720px){
  .bar{flex-wrap:wrap;gap:4px 14px;align-items:center;padding-top:12px;padding-bottom:8px}
  .brand{margin-right:auto}
  nav{order:3;width:100%;margin-left:0;gap:22px}
  nav a{padding-top:6px;padding-bottom:4px}
  .langs{border-left:0;padding-left:0;gap:8px}
}
@media(pointer:coarse){
  .langs button{padding:12px 5px;margin:-12px -5px}
}

/* ---------- home ---------- */
.intro{padding-top:clamp(48px,10vh,110px);padding-bottom:clamp(34px,5vh,64px)}
.intro h1{margin:22px 0 0;font-size:clamp(2.4rem,7.6vw,6.4rem);line-height:.94;letter-spacing:-.035em;font-weight:500}
html[lang="ja"] .intro h1{letter-spacing:-.01em;line-height:1.1}
.intro .lead{margin:clamp(26px,4vw,46px) 0 0;max-width:32ch;font-size:clamp(1.05rem,1.9vw,1.5rem);line-height:1.34;letter-spacing:-.02em}

.projects{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));
  gap:clamp(26px,3.4vw,52px) clamp(18px,2.6vw,38px);
  padding-bottom:clamp(50px,7vw,100px);
}
.card{border-top:1px solid var(--ink)}
.card a{display:block;padding-top:16px}
.card .frame{aspect-ratio:4/3;overflow:hidden;background:var(--paper-2)}
.card .frame img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s cubic-bezier(.2,.7,.2,1),opacity .4s}
.card a:hover .frame img{transform:scale(1.035)}
.card .meta{display:grid;grid-template-columns:3ch minmax(0,1fr);gap:4px 14px;padding-top:14px}
.card h2{margin:0;grid-column:2;font-size:clamp(1.15rem,1.9vw,1.5rem);line-height:1.12;letter-spacing:-.028em;font-weight:500}
.card .sub{grid-column:2;font-size:13px;color:var(--ink-60)}
.card .stage{grid-column:2;font-size:12px;color:var(--ink-40);letter-spacing:.02em}
.card .num{grid-row:1;grid-column:1;padding-top:5px}

/* ---------- project page ---------- */
.phead{padding-top:clamp(44px,8vh,96px);padding-bottom:clamp(26px,4vw,44px)}
.phead .kicker{display:flex;gap:16px;align-items:baseline}
.phead h1{margin:20px 0 0;font-size:clamp(2rem,5.4vw,4.2rem);line-height:1.02;letter-spacing:-.034em;font-weight:500;max-width:20ch}
html[lang="ja"] .phead h1{line-height:1.24;letter-spacing:-.01em}
.phero{margin:0 0 clamp(30px,4.5vw,60px)}

.facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px clamp(18px,3vw,40px);margin:0;font-size:14px;max-width:66ch}
.facts dt{color:var(--ink-40);white-space:nowrap}
.facts dd{margin:0;color:var(--ink-60)}
.motto{margin:clamp(30px,4vw,52px) 0 0;font-size:clamp(1.05rem,2vw,1.45rem);line-height:1.3;letter-spacing:-.022em;max-width:30ch}
.motto span{display:block;font-size:13px;letter-spacing:0;color:var(--ink-40);margin-top:10px;line-height:1.5}

.goals-label{margin:clamp(40px,5vw,70px) 0 0}
.goals{margin:clamp(34px,4.6vw,60px) 0 0;padding:0;list-style:none;max-width:74ch;border-top:1px solid var(--ink)}
.goals li{padding:11px 0;border-bottom:1px solid var(--line);display:grid;grid-template-columns:3ch minmax(0,1fr);gap:14px;font-size:14.5px;color:var(--ink-60)}
.goals li .num{padding-top:3px}

.gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(14px,2.4vw,34px);margin-top:clamp(34px,5vw,68px);align-items:start}
.gallery .full{grid-column:1/-1}
@media(max-width:700px){.gallery{grid-template-columns:1fr}}
figure{margin:0}
figcaption{margin-top:10px;font-size:12px;letter-spacing:.02em;color:var(--ink-40);display:flex;gap:14px}
figcaption .num{flex:none}
figcaption span:not(.num){min-width:0}
figcaption,.facts dd,.person dd,.goals li,.works li span,.note,td,.lead,.motto,.contact a.big{overflow-wrap:break-word}
.zoom img{cursor:zoom-in}

.works{display:grid;gap:clamp(26px,4vw,56px);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin-top:clamp(40px,5vw,72px)}
.works h2{margin:0 0 14px;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-40);font-weight:500;border-top:1px solid var(--ink);padding-top:12px}
.works ul{margin:0;padding:0;list-style:none}
.works li{padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;color:var(--ink-60);display:grid;grid-template-columns:9ch minmax(0,1fr);gap:14px}
.works li b{font-weight:400;color:var(--ink-40);font-size:12px;letter-spacing:.04em;padding-top:2px}
html[lang="ja"] .works li{grid-template-columns:11ch minmax(0,1fr)}
html[lang="es"] .works li{grid-template-columns:10ch minmax(0,1fr)}
html[lang="de"] .works li{grid-template-columns:11ch minmax(0,1fr)}

table{border-collapse:collapse;width:100%;margin-top:clamp(26px,4vw,44px);font-size:14px}
caption{text-align:left;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-40);padding-bottom:12px;border-top:1px solid var(--ink);padding-top:12px}
th{text-align:left;font-weight:500;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-40);padding:0 18px 10px 0;border-bottom:1px solid var(--line)}
td{padding:11px 18px 11px 0;border-bottom:1px solid var(--line);color:var(--ink-60);vertical-align:top}
td:first-child{color:var(--ink)}
.note{margin:14px 0 0;font-size:12.5px;color:var(--ink-40);max-width:70ch}
.table-scroll{overflow-x:auto}

/* next / previous project */
.pnav{
  display:flex;justify-content:space-between;gap:20px;align-items:baseline;
  border-top:1px solid var(--ink);margin-top:clamp(50px,7vw,100px);
  padding:clamp(20px,2.6vw,30px) 0 clamp(50px,7vw,96px);
}
.pnav a{font-size:clamp(1rem,1.8vw,1.35rem);letter-spacing:-.025em;transition:opacity .25s}
.pnav a:hover{opacity:.55}
.pnav .lbl{display:block;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-40);margin-bottom:6px}
.pnav .right{text-align:right}
@media(max-width:520px){
  .facts{grid-template-columns:1fr;gap:0}
  .facts dt{white-space:normal;margin-top:14px}
  .facts dt:first-of-type{margin-top:0}
  .facts dd{margin-top:2px}
  .pnav{flex-direction:column;align-items:flex-start;gap:26px}
  .pnav .right{text-align:left}
}

/* ---------- studio ---------- */
.people{display:grid;gap:clamp(34px,5vw,72px);grid-template-columns:repeat(auto-fit,minmax(290px,1fr));padding-bottom:clamp(50px,7vw,96px)}
.person h2{margin:0;font-size:clamp(1.25rem,2.1vw,1.6rem);letter-spacing:-.025em;font-weight:500;line-height:1.15}
.person .role{margin:10px 0 0;font-size:12.5px;letter-spacing:.05em;color:var(--ink-40)}
.person dl{margin:22px 0 0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px 18px;font-size:13.5px}
.person dt{color:var(--ink-40);white-space:nowrap}
.person dd{margin:0;color:var(--ink-60)}

.contact{padding-top:clamp(40px,5.5vw,80px);padding-bottom:clamp(56px,8vw,108px)}
.contact h2{margin:20px 0 0;font-size:clamp(1.5rem,3.6vw,2.6rem);line-height:1.08;letter-spacing:-.03em;font-weight:500;max-width:26ch}
a.big{display:inline-block;margin-top:clamp(26px,4vw,44px);font-size:clamp(1rem,1.8vw,1.35rem);letter-spacing:-.02em;border-bottom:1px solid var(--line);padding-bottom:3px;transition:border-color .3s}
a.big:hover{border-color:var(--ink)}

footer{border-top:1px solid var(--line);padding-top:22px;padding-bottom:30px}
.foot{display:flex;flex-wrap:wrap;gap:8px 28px;align-items:baseline}
.foot p{margin:0;font-size:11.5px;letter-spacing:.06em;color:var(--ink-40)}
.foot p:last-child{margin-left:auto}

.r{opacity:0;transform:translateY(12px);transition:opacity .9s ease,transform .9s cubic-bezier(.2,.7,.2,1)}
.r.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){
  .r{opacity:1;transform:none;transition:none}
  .card .frame img{transition:none}
  .card a:hover .frame img{transform:none}
  .skip{transition:none}
}

/* ---------- lightbox ----------
   .lb is fixed inset:0, so its height is definite. The figure is a flex
   column capped at 100% of that height; the img is the shrinkable child
   (min-height:0). The caption keeps its natural height and the image
   gives way, so img + caption always fit, whatever the caption wraps to. */
.lb{
  position:fixed;inset:0;z-index:90;display:none;background:var(--paper);
  padding:clamp(56px,9vh,84px) clamp(16px,4.5vw,64px) clamp(18px,4vh,40px);
  padding:clamp(56px,9dvh,84px) clamp(16px,4.5vw,64px) clamp(18px,4dvh,40px);
}
.lb[open]{display:flex}
.lb figure{
  margin:auto;display:flex;flex-direction:column;align-items:center;
  min-width:0;min-height:0;max-width:100%;max-height:100%;
}
.lb img{
  flex:0 1 auto;min-height:0;
  width:auto;height:auto;max-width:100%;
  object-fit:contain;
}
.lb figcaption{flex:none;max-width:100%;justify-content:center;padding-top:14px}
.lb button{
  all:unset;cursor:pointer;position:absolute;z-index:2;
  display:grid;place-items:center;min-width:48px;min-height:48px;
  font-size:22px;line-height:1;color:var(--ink-40);transition:color .2s;
}
.lb button:hover{color:var(--ink)}
/* higher specificity than `.lb button`, whose all:unset would reset the offsets */
.lb .lb-close{top:clamp(4px,2vw,18px);right:clamp(4px,2vw,18px);font-size:26px}
.lb .lb-prev{left:clamp(0px,1.5vw,14px);top:50%;transform:translateY(-50%)}
.lb .lb-next{right:clamp(0px,1.5vw,14px);top:50%;transform:translateY(-50%)}
body.lb-open{overflow:hidden}
