/* Drift: one stylesheet for every page. Tokens and shared pieces first, then the homepage, case studies, archive, viewer and documents. */
/* Layout: one 12-column grid inside a single left edge and a single right edge. A rail on the right is kept clear for the chain.
   Work floats past as glass plates: each arrives edge-on out of the haze, faces you at mid-screen and turns away as you pass. */
:root{
  color-scheme:dark;
  --abyss:#020a1c; --navy:#062048; --beam:#58b7ff; --ice:#a9d8ff; --foam:#f1f9ff; --mute:#9dbfe0;
  --display:'Syne','Arial Black',system-ui,sans-serif;
  --body:'Manrope','Segoe UI',system-ui,sans-serif;
  --gutter:clamp(20px,5vw,72px);   /* phones; wider screens get the margins below */ --rail:clamp(96px,9vw,128px); --gap:clamp(16px,2.2vw,32px);
  --s1:8px; --s2:16px; --s3:24px; --s4:40px; --s5:clamp(56px,7vw,96px); --s6:clamp(96px,12vw,176px);
}
*{box-sizing:border-box}
body{margin:0;background:var(--abyss);color:var(--foam);font:400 17px/1.6 var(--body);overflow-x:hidden;-webkit-font-smoothing:antialiased}
.no-gl body{background:linear-gradient(#1c7fc4,var(--navy) 22%,var(--abyss) 70%) fixed}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;cursor:pointer}
a:focus-visible,button:focus-visible{outline:2px solid var(--foam);outline-offset:6px;border-radius:14px}
#gl{position:fixed;inset:0;width:100%;height:100%;display:block}
#page{position:fixed;top:0;left:0;width:100%;will-change:transform}
.no-smooth #page{position:relative}
.wrap{padding-inline:var(--gutter);max-width:1440px;margin-inline:auto}
.bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-block:22px;flex-wrap:wrap}
.bar .me{font:800 15px/1 var(--display)}
.bar nav{display:flex;gap:clamp(12px,2.2vw,32px);flex-wrap:wrap}
.bar nav a{font-weight:700;font-size:15px;padding:10px 0;color:var(--foam);text-shadow:0 1px 10px #04204a}
.bar nav a:hover{text-shadow:0 0 14px var(--beam)}
.slot{aspect-ratio:1/1.1;width:100%;max-width:340px;justify-self:center}
.pill{display:inline-flex;align-items:center;gap:12px;min-height:50px;padding:0 26px;border-radius:999px;border:1px solid #bfe3ff;font-weight:700;font-size:15px;color:var(--foam);background:radial-gradient(120% 140% at 30% 0%,#7fc8ff66,#0c3e7a88 60%);box-shadow:inset 0 1px 0 #ffffffaa,inset 0 -10px 18px #02102c88,0 0 30px #2f8cff55;transition:transform .3s cubic-bezier(.2,.9,.3,1.5),box-shadow .3s}
.pill:hover{transform:scale(1.05);box-shadow:inset 0 1px 0 #ffffffaa,inset 0 -10px 18px #02102c88,0 0 46px #58b7ffaa}
.mail{user-select:all}
.foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px 24px;padding-block:18px 26px;font-size:14px;font-weight:600;color:var(--ice)}
.foot .links{display:flex;flex-wrap:wrap;gap:8px 22px}
.foot button{background:none;border:0;padding:0;border-bottom:1px solid currentColor}
.gauge{position:fixed;left:clamp(6px,1.4vw,24px);top:50%;transform:translateY(-50%);height:min(46vh,380px);width:44px;pointer-events:none;z-index:3}
.gauge::before{content:'';position:absolute;left:0;top:0;bottom:0;width:10px;background:repeating-linear-gradient(to bottom,var(--ice) 0 1px,transparent 1px calc(100%/20));opacity:.5}
.gauge b{position:absolute;left:0;top:calc(var(--p,0)*100%);transform:translateY(-1px);display:flex;flex-direction:column-reverse;align-items:flex-start;gap:6px;font:700 12px/1 var(--body);font-variant-numeric:tabular-nums;white-space:nowrap}
.gauge b::after{content:'';width:18px;height:2px;background:var(--foam);box-shadow:0 0 10px var(--beam)}
#toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);opacity:0;pointer-events:none;transition:.3s;background:var(--foam);color:var(--abyss);padding:12px 20px;border-radius:999px;font-size:14px;font-weight:700;max-width:calc(100% - 32px);z-index:5}
#toast.on{opacity:1;transform:translate(-50%,0)}
@media(max-width:760px){
  .gauge{height:auto;top:50%;left:auto;right:8px;transform:translateY(-50%);width:auto}.gauge::before{display:none}
  .gauge b{position:static;transform:none;background:#04163acc;padding:8px 12px;border-radius:999px;border:1px solid #58b7ff66}.gauge b::after{display:none}
}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

.wrap{padding-left:var(--gutter);padding-right:calc(var(--gutter) + var(--rail));max-width:none}
.bar{padding-block:var(--s3);align-items:baseline}
.bar .me{font-size:16px}
.bar nav a{padding:var(--s1) 0}
#rail{position:fixed;top:0;bottom:0;right:var(--gutter);width:var(--rail);pointer-events:none}

.glow{font-family:var(--display);font-weight:800;text-transform:lowercase;line-height:.94;letter-spacing:-.02em;margin:0;color:var(--foam);text-shadow:0 0 .05em #fff,0 0 .22em #8fd0ffcc,0 0 .7em #2f8cff88}
.glow .ln{display:block}
.hero{min-height:min(820px,calc(100svh - 84px));display:flex;flex-direction:column;justify-content:center;padding-block:var(--s4) var(--s6)}
.hero h1{font-size:clamp(40px,9.4vw,160px)}
.hero .sub{margin:var(--s4) 0 0;font-size:clamp(18px,1.6vw,23px);line-height:1.3;font-weight:600;color:var(--ice)}
.actions{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s4)}
.pill.solid{color:#08294b;border-color:#fff;background:linear-gradient(180deg,#fff 0%,#e9f5fd 46%,#bcdcf2 52%,#d7ecfa 100%);box-shadow:inset 0 -6px 10px #7fb4de55,0 0 26px #58b7ff66}

.zone{padding-top:var(--s6)}
.zone>header{margin-bottom:var(--s5)}
.zone h2{font-size:clamp(28px,6.6vw,104px);display:flex;align-items:center;gap:.26em}
.ico{flex:0 0 auto;display:block;height:1em;width:1em;margin-block:-.1em}
.no-gl .ico{display:none}
.zone>header p{margin:var(--s3) 0 0;font-weight:600;color:var(--ice);font-size:clamp(17px,1.4vw,21px);line-height:1.35;max-width:34ch}
.stream{list-style:none;margin:0;padding:0;display:grid;row-gap:var(--s6)}
.drop{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:center}
.plate{grid-column:1 / span 7;grid-row:1;display:block;aspect-ratio:4/3;border-radius:4.5%/6%}
.cap{grid-column:8 / span 5;grid-row:1;min-width:0}
.drop:nth-child(even) .plate{grid-column:6 / span 7}
.drop:nth-child(even) .cap{grid-column:1 / span 5}
.plate img{width:100%;height:100%;object-fit:cover;border-radius:inherit;display:block;opacity:0}
.no-gl .plate img{opacity:1;box-shadow:0 0 0 1px #ffffff66,0 0 60px #2f8cff66}
.cap h3{font:800 clamp(22px,2.5vw,38px)/1.08 var(--display);margin:0;text-wrap:balance;overflow-wrap:anywhere}
.cap p{text-wrap:balance;margin:var(--s2) 0 0;color:var(--mute);font-size:clamp(15px,1.2vw,18px);line-height:1.5;max-width:32ch}
.cap .open{display:inline-block;margin-top:var(--s3);font-weight:700;font-size:15px;border-bottom:1px solid var(--beam);padding-bottom:3px}
.more{display:inline-block;margin-top:var(--s5);font-weight:700;border-bottom:1px solid var(--beam);padding-bottom:3px}
/* about: its own chapter, set well apart from the work above and the closing below */
.about{padding-block:var(--s4) 0}
.about-head{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:var(--s3);align-items:end}
.about-head h2{grid-column:1 / span 5;font-size:clamp(28px,6.6vw,104px)}
.about-lead{grid-column:6 / span 5;margin:0;font:600 clamp(18px,1.5vw,24px)/1.4 var(--body);color:var(--foam);max-width:34ch;text-wrap:pretty}
.about-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s4) var(--gap);margin:var(--s5) 0 0}
.about-facts div{padding-top:0}
.about-facts dt{font-size:14px;font-weight:700;color:var(--beam);letter-spacing:.02em}
.about-facts dd{margin:var(--s1) 0 0;font-weight:600;line-height:1.45;color:#d5e6f6;max-width:28ch}
.about .actions{margin-top:var(--s5)}
.floor{min-height:min(720px,90svh);display:flex;flex-direction:column;justify-content:flex-end;padding-block:var(--s6) clamp(150px,24vh,230px)}
.floor h2{font-size:clamp(40px,9.4vw,160px)}
.floor p{margin:var(--s4) 0 var(--s3);font-weight:600;color:var(--ice);max-width:34ch;font-size:clamp(17px,1.4vw,21px);line-height:1.35}
.floor .pill{align-self:flex-start}
.foot{padding-block:var(--s3)}
@media(max-width:760px){
  :root{--rail:44px}
  .bar{align-items:center}
  .hero h1{font-size:12.4vw}
  .stream{row-gap:var(--s6)}
  .drop{display:block}
  .cap{margin-top:var(--s3)}
  .plate{width:100%}
}

/* ---------- every page ---------- */
.skip{position:fixed;top:-80px;left:20px;z-index:30;background:#fff;color:#000;padding:12px;border-radius:8px}.skip:focus{top:12px}
.bar nav a[aria-current=page]{text-decoration:underline;text-underline-offset:7px;text-decoration-thickness:2px}
[data-plate]{display:block;padding:0;border:0;background:none;width:100%;color:inherit;font:inherit;text-align:inherit;border-radius:4.5%/6%}
button[data-plate]{cursor:zoom-in}
[data-plate] img{width:100%;height:100%;object-fit:cover;border-radius:inherit;display:block;opacity:0}
.no-gl [data-plate] img{opacity:1;box-shadow:0 0 0 1px #ffffff66,0 0 60px #2f8cff66}
.kicker{margin:0 0 var(--s3);font-weight:700;font-size:15px;color:var(--beam)}
.page-hero{padding-block:var(--s5)}
.page-hero h1{font-size:clamp(34px,7.6vw,128px)}
.page-hero .lead{margin:var(--s4) 0 0;font-size:clamp(18px,1.6vw,23px);line-height:1.35;font-weight:600;color:var(--ice);max-width:38ch}
.h2{font:800 clamp(26px,3.6vw,56px)/1 var(--display);letter-spacing:-.02em;margin:0}
.actions.gapless{margin-top:0}

/* ---------- case studies ---------- */
.meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s3) var(--gap);margin:0 0 var(--s5);padding-top:var(--s3);border-top:1px solid #a9d8ff40}
.meta dt{font-size:14px;font-weight:700;color:var(--beam)}
.meta dd{margin:6px 0 0;font-weight:700;font-size:clamp(15px,1.2vw,18px);line-height:1.3}
figure{margin:0}
.figure [data-plate]{width:min(100%,calc(76svh * var(--ar)),var(--max,100%))}
figcaption{margin-top:var(--s2);font-size:14px;line-height:1.4;color:var(--mute);max-width:60ch}
.lead-figure{margin-bottom:var(--s6)}
.story{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s5) var(--gap);margin-bottom:var(--s6)}
.story h2,.tech h2{font:800 clamp(21px,2vw,30px)/1.1 var(--display);margin:0 0 var(--s2);text-wrap:balance}
.story p,.tech p{margin:0;max-width:56ch;color:#d5e6f6;line-height:1.62}
.section-head{margin-bottom:var(--s4)}
.section-head p{margin:var(--s2) 0 0;font-weight:600;color:var(--ice)}
.gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s5) var(--gap);align-items:start}
.tech>section{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:var(--s4);padding-bottom:var(--s6);align-items:start}
.tech .text{grid-column:1 / span 5}
.tech .media{grid-column:6 / span 7;min-width:0}
.tech section.solo .text{grid-column:1 / span 8}
.tech h2{font-size:clamp(24px,2.6vw,40px)}
.note{margin:var(--s3) 0 0;color:var(--ice);font-size:15px;line-height:1.5;max-width:56ch}
.code{border:1px solid #a9d8ff40;border-radius:20px;background:#04163acc;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.code+.code,.figure+.code{margin-top:var(--s3)}
.code summary{padding:16px 20px;font-weight:700;cursor:pointer;display:flex;justify-content:space-between;gap:16px}
.code summary span{font:500 14px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--ice)}
.code pre{margin:0;padding:4px 20px 20px;overflow-x:auto;font:14px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#d5e6f6;tab-size:2}
.next{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:center;row-gap:var(--s4)}
.next>div{grid-column:1 / span 5}
.next .tile{grid-column:7 / span 6}

.story a,.tech a{text-decoration:underline;text-underline-offset:3px}

/* ---------- work tiles and the archive ---------- */
.tile{display:block;min-width:0}
.tile [data-plate]{aspect-ratio:4/3}
.tile h3{font:800 clamp(18px,1.6vw,24px)/1.12 var(--display);margin:var(--s3) 0 var(--s1);text-wrap:balance}
.tile p{margin:0;color:var(--mute);font-size:15px;line-height:1.45;max-width:38ch}
.grid-work{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s5) var(--gap)}
.toolbar{display:flex;flex-wrap:wrap;gap:var(--s1);align-items:center;margin-bottom:var(--s5)}
.chipbtn{min-height:44px;padding:0 20px;border-radius:999px;border:1px solid #a9d8ff66;background:#0c2f5f80;font-weight:700;font-size:15px;transition:background .2s,color .2s}
.chipbtn:hover{border-color:#fff}
.chipbtn[aria-pressed=true]{color:#08294b;border-color:#fff;background:linear-gradient(180deg,#fff,#d7ecfa)}
.count{margin:0 0 0 auto;font-weight:700;color:var(--ice);font-variant-numeric:tabular-nums}

/* ---------- the closing stretch above the sand ---------- */
.floor.sub{min-height:0;padding-top:var(--s6)}
.floor.sub .h2{font-size:clamp(26px,3.6vw,56px)}
.floor.sub>p{margin:var(--s3) 0 0}
.floor.sub .h2+p{margin-top:var(--s3)}

/* ---------- picture viewer ---------- */
.viewer{border:1px solid #a9d8ff66;border-radius:24px;background:#031230f5;color:var(--foam);padding:14px;max-width:min(94vw,1500px);max-height:94vh}
.viewer::backdrop{background:#010818d9;backdrop-filter:blur(6px)}
.viewer-bar{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.viewer-bar button{min-height:40px;padding:0 16px;border-radius:999px;border:1px solid #a9d8ff66;background:#0c2f5f80;font-weight:700;font-size:14px}
.viewer-bar button:hover{border-color:#fff}
.viewer-count{font-weight:700;font-size:14px;font-variant-numeric:tabular-nums;margin-inline:8px auto}
.viewer img{display:block;max-width:100%;max-height:calc(94vh - 130px);margin:auto;border-radius:12px;background:#fff}
.viewer-caption{margin:12px 4px 2px;font-size:14px;color:var(--ice)}

/* ---------- documents: the sheet keeps its own type and colours inside a glass frame ---------- */
.doc-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--s3);margin-bottom:var(--s4);max-width:920px}
.switch{border:0;padding:0;margin:0;min-width:0}
.switch legend{font-size:14px;font-weight:700;color:var(--ice);padding:0 0 8px 4px}
.segments{display:flex;gap:3px;padding:4px;border-radius:999px;background:#0c2f5f99;border:1px solid #a9d8ff55}
.segments label{position:relative;cursor:pointer}
.segments input{position:absolute;opacity:0;width:1px;height:1px}
.segments span{display:block;padding:10px 20px;border-radius:999px;font-weight:700;font-size:14px;white-space:nowrap;transition:background .18s,color .18s}
.segments input:checked+span{color:#08294b;background:linear-gradient(180deg,#fff,#d7ecfa)}
.segments input:focus-visible+span{outline:2px solid #fff;outline-offset:3px}
.doc-controls .push{margin-left:auto}
.sheet-frame{max-width:920px;padding:10px;border-radius:36px;border:1px solid #cfeaff99;background:linear-gradient(145deg,#bfe3ff66,#0c3e7a40 40%,#9fd4ff66);box-shadow:inset 0 1px 0 #ffffffaa,0 40px 90px -40px #000;color:var(--color-text-body,#274255)}
.sheet-frame #document-content{padding:0!important;margin:0!important;display:block!important}
.sheet-frame .print-container{width:100%!important;min-height:0!important;margin:0!important;border-radius:26px!important;border:1px solid #fff!important;box-shadow:none!important}
.sheet-frame a{text-decoration:underline;text-underline-offset:3px}
.doc main{padding-top:var(--s4)}

@media(max-width:900px){.grid-work{grid-template-columns:repeat(2,minmax(0,1fr))}.tech .text,.tech .media,.tech section.solo .text{grid-column:1 / -1}.next>div,.next .tile{grid-column:1 / -1}}
@media(max-width:760px){
  .meta{grid-template-columns:repeat(2,minmax(0,1fr))}
  .story,.gallery{grid-template-columns:minmax(0,1fr)}
  .count{margin-left:0;flex-basis:100%}
  .doc-controls .push{margin-left:0}
  .sheet-frame{padding:6px;border-radius:28px}.sheet-frame .print-container{border-radius:22px!important}
}
@media(max-width:520px){.grid-work{grid-template-columns:minmax(0,1fr)}}
@media print{
  #gl,#rail,.bar,.foot,.doc-controls,.doc-panel,.page-hero,#toast,.skip,.floor,.viewer,.peek{display:none!important}
  .doc-layout{display:block!important;padding:0!important}
  html,body,#page,.wrap,main,.doc-layout,.sheet-frame{background:#fff!important;padding:0!important;margin:0!important;border:0!important;box-shadow:none!important}
  body.doc{color:#000}
  :root{color-scheme:light!important}
  *,*::before,*::after{transition:none!important;animation:none!important}
  .sheet-frame a{text-decoration:none!important}
  #page{position:static!important;transform:none!important}
  body{height:auto!important;background:#fff!important;overflow:visible!important}
  .wrap{padding:0!important}.doc main{padding:0!important}
  .sheet-frame{border:0!important;padding:0!important;background:none!important;box-shadow:none!important;max-width:none!important;border-radius:0!important}
  .sheet-frame .print-container{border:0!important;border-radius:0!important;background:#fff!important}
}

/* =========================================================================================
   Inner pages. Glass panels share one recipe; long pages get a contents rail that follows the reader.
   ========================================================================================= */
.glass{border:1px solid #a9d8ff40;border-radius:24px;background:linear-gradient(160deg,#0f3a7299,#04163acc 60%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:inset 0 1px 0 #ffffff33,0 30px 70px -40px #000}
.label{font:700 15px/1.3 var(--body);color:var(--beam);margin:0 0 var(--s2)}
.step-no{display:block;font:800 15px/1 var(--display);color:var(--beam);letter-spacing:.02em}
.no-smooth [data-stick]{position:sticky;top:104px}

/* case study header: the title on the left, the facts in a glass card on the right */
.cs-head{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:var(--s4);align-items:end;padding-block:var(--s5) var(--s5)}
.cs-title{grid-column:1 / span 8;min-width:0}
.cs-title h1{font-size:clamp(34px,4.8vw,88px)}
.cs-title .lead{margin:var(--s4) 0 0;font-size:clamp(18px,1.6vw,23px);line-height:1.35;font-weight:600;color:var(--ice);max-width:36ch}
.crumbs{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:var(--s4);font-weight:700;font-size:14px;color:var(--ice)}
.crumbs a{border-bottom:1px solid transparent}.crumbs a:hover{border-color:var(--ice)}
.crumbs span[aria-hidden]{opacity:.5}
.facts{grid-column:9 / span 4;margin:0;padding:var(--s3) var(--s3) var(--s1);border:1px solid #a9d8ff40;border-radius:24px;background:linear-gradient(160deg,#0f3a7299,#04163acc 60%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:inset 0 1px 0 #ffffff33}
.facts div{display:grid;grid-template-columns:minmax(0,9ch) minmax(0,1fr);gap:var(--s2);padding-bottom:var(--s2)}
.facts dt{font-size:13px;font-weight:700;color:var(--beam);padding-top:2px}
.facts dd{margin:0;font-weight:700;font-size:15px;line-height:1.35}
.cs-hero{margin-bottom:var(--s6)}
.cs-hero .lead-figure{margin:0}
.cs-hero .figure [data-plate]{width:min(100%,calc(80svh * var(--ar)),var(--max,100%))}

/* the story: context in large type, then the steps side by side */
.context{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-bottom:var(--s5)}
.context p{grid-column:1 / span 10;margin:0;font:600 clamp(20px,2vw,30px)/1.4 var(--body);color:var(--foam);text-wrap:pretty;max-width:42ch}
.steps{list-style:none;margin:0 0 var(--s6);padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s4) var(--gap);counter-reset:s}
.steps li{position:relative}
.steps h2{font:800 clamp(17px,1.4vw,22px)/1.2 var(--display);margin:var(--s1) 0 var(--s2);text-wrap:balance;text-shadow:0 0 .4em #2f8cff88}
.step-no{font-size:clamp(28px,3vw,46px);color:#a9d8ff;opacity:.55;text-shadow:0 0 .4em #2f8cff}
.steps p{margin:0;color:#d5e6f6;line-height:1.6;max-width:44ch}
.steps:has(li:nth-child(2):last-child){grid-template-columns:repeat(2,minmax(0,1fr))}

/* gallery: one picture full width, two side by side, more as a staggered two-column wall */
.more-pics{margin-bottom:var(--s6)}
.bento{display:grid;gap:var(--s4) var(--gap);align-items:start}
.bento.n2{grid-template-columns:repeat(2,minmax(0,1fr))}
.bento.n3{grid-template-columns:repeat(12,minmax(0,1fr))}
.bento.n3>.figure:nth-child(3n+1){grid-column:1 / span 7}
.bento.n3>.figure:nth-child(3n+2){grid-column:8 / span 5;margin-top:var(--s6)}
.bento.n3>.figure:nth-child(3n){grid-column:3 / span 6}
.bento.n3.many{grid-template-columns:repeat(3,minmax(0,1fr))}
.bento.n3.many>.figure{grid-column:auto!important;margin-top:0}
.bento.n3.many>.figure:nth-child(3n+2){margin-top:var(--s5)}
.bento .figure [data-plate]{width:100%}

/* long-form case studies: a two-part intro, then numbered chapters beside a contents rail */
.intro{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s4) var(--gap);margin-bottom:var(--s6)}
.intro p{margin:0;font:600 clamp(18px,1.5vw,22px)/1.5 var(--body);color:var(--foam);max-width:46ch}
.chapters{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-bottom:var(--s5)}
.toc{grid-column:1 / span 4;align-self:start;--stick:1;padding:var(--s3);border:1px solid #a9d8ff40;border-radius:24px;background:linear-gradient(160deg,#0f3a7299,#04163acc 60%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.toc ol{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.toc a{display:grid;grid-template-columns:2.2em 1fr;padding:9px 12px;border-radius:12px;font-weight:600;font-size:15px;line-height:1.3;color:var(--mute);transition:background .2s,color .2s}
.toc a span{font:800 13px/1.6 var(--display);color:var(--beam)}
.toc a:hover{color:var(--foam)}
.toc a[aria-current=true]{color:var(--foam);background:#58b7ff26}
.toc-links{display:grid;gap:8px;margin-top:var(--s3);font-weight:700;font-size:14px}
.ch-body{grid-column:6 / span 7;min-width:0}
.chapter{padding-bottom:var(--s6);scroll-margin-top:100px}
.chapter h2{font:800 clamp(24px,2.6vw,40px)/1.1 var(--display);margin:var(--s1) 0 var(--s3);text-wrap:balance;text-shadow:0 0 .05em #fff,0 0 .3em #8fd0ff99}
.chapter>p{margin:0;max-width:60ch;color:#d5e6f6;line-height:1.65}
.chapter .media{margin-top:var(--s4)}
.chapter .media .figure [data-plate]{width:min(100%,calc(64svh * var(--ar)),var(--max,100%))}

/* previous / next */
.pn{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap);padding-top:var(--s5)}
.pn-card{display:block;min-width:0}
.pn-card:last-child{text-align:right}
.pn-label{display:block;font-weight:700;font-size:14px;color:var(--beam);margin-bottom:var(--s2)}
.pn-title{display:block;margin-top:var(--s3);font:800 clamp(20px,2.2vw,32px)/1.1 var(--display);text-wrap:balance;text-shadow:0 0 .05em #fff,0 0 .3em #8fd0ff99}
.pn-card [data-plate]{aspect-ratio:16/10}

/* the work index */
.toolbar sup{font-size:11px;margin-left:6px;vertical-align:4px;opacity:.75}
.featured{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s4) var(--gap);margin-bottom:var(--s6)}
.feat{display:block;min-width:0;grid-column:8 / span 5}
.feat.big{grid-column:1 / span 7;grid-row:1 / span 2}
.feat-cap{display:grid;gap:4px;margin-top:var(--s2)}
.feat-kind{font-weight:700;font-size:13px;color:var(--beam)}
.feat-title{font:800 clamp(20px,2vw,30px)/1.1 var(--display)}
.feat.big .feat-title{font-size:clamp(26px,3vw,46px)}
.feat-blurb{color:var(--mute);font-size:15px;line-height:1.45;max-width:46ch}
.feat [data-plate]{transition:none}
.index{display:grid;gap:var(--s6);margin-bottom:var(--s6)}
.coll{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:var(--s3);scroll-margin-top:100px}
.coll>header{grid-column:1 / span 4;min-width:0}
.coll>header .h2{font-size:clamp(24px,2.7vw,42px);text-wrap:balance}
.coll>header p{margin:var(--s2) 0 0;color:var(--mute);line-height:1.5;max-width:30ch}
.coll-count{display:block;margin-top:var(--s2);font-weight:700;font-size:13px;color:var(--beam)}
.rows{grid-column:5 / span 8;list-style:none;margin:0;padding:0;border-top:1px solid #a9d8ff55}
.row{display:grid;grid-template-columns:3.2em minmax(0,1fr) auto 4.2em 1.4em;align-items:center;column-gap:var(--s3);padding:18px 14px;margin-inline:-14px;border-bottom:1px solid #a9d8ff2e;border-radius:14px;transition:background .25s}
.row-thumb{display:none}
.row-no{font:800 14px/1 var(--display);color:var(--beam)}
.row-main{display:grid;gap:2px;min-width:0}
.row-title{font:800 clamp(18px,1.7vw,24px)/1.15 var(--display);transition:transform .35s cubic-bezier(.2,.9,.3,1)}
.row-sub{font-size:14px;color:var(--mute)}
.row-kind{font-size:13px;font-weight:700;padding:6px 12px;border-radius:999px;border:1px solid #a9d8ff55;color:var(--ice);white-space:nowrap}
.row-year{font-weight:700;font-size:14px;color:var(--ice);text-align:right;font-variant-numeric:tabular-nums}
.row-go{opacity:0;transform:translateX(-8px);transition:.3s;font-weight:700;text-align:right}
.row:hover,.row:focus-visible{background:#58b7ff1f}
.row:hover .row-title,.row:focus-visible .row-title{transform:translateX(8px)}
.row:hover .row-go,.row:focus-visible .row-go{opacity:1;transform:none}
[data-theme][hidden]{display:none!important}
.peek{position:fixed;left:0;top:0;width:min(320px,26vw);aspect-ratio:4/3;pointer-events:none;z-index:40;border-radius:18px;overflow:hidden;border:1px solid #cfeaffaa;box-shadow:inset 0 1px 0 #fff8,0 30px 60px -20px #000a,0 0 40px #2f8cff44;opacity:0;transform:scale(.86);transition:opacity .25s,transform .35s cubic-bezier(.2,.9,.3,1.2)}
.peek.on{opacity:1;transform:scale(1)}
.peek img{width:100%;height:100%;object-fit:cover;display:block}

/* documents: the controls in a panel that follows down the page, the sheet beside it */
.doc-layout{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:var(--s4);align-items:start;padding-top:var(--s4)}
.doc-panel{grid-column:1 / span 3;align-self:start;--stick:1;min-width:0}
.doc-panel h1{font-size:clamp(28px,2.4vw,42px);margin-bottom:var(--s4);overflow-wrap:normal;word-break:keep-all;hyphens:none}
.doc-note{margin:0 0 var(--s4);color:var(--ice);font-weight:600;line-height:1.5}
.doc-panel .doc-controls{flex-direction:column;align-items:flex-start;gap:var(--s3);margin:0}
.doc-links{list-style:none;margin:var(--s4) 0 0;padding:0;display:grid;gap:10px;font-weight:700;font-size:14px;overflow-wrap:anywhere}
.doc-links a:hover{text-shadow:0 0 14px var(--beam)}
.doc-layout .sheet-frame{grid-column:4 / span 9;max-width:none}
.doc main{padding-top:0}

/* sources: each note in its own glass card */
.colophon{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap);margin-bottom:var(--s5)}
.colophon section{padding:var(--s4);border:1px solid #a9d8ff40;border-radius:24px;background:linear-gradient(160deg,#0f3a7299,#04163acc 60%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.colophon h2{font:800 clamp(20px,1.8vw,28px)/1.15 var(--display);margin:0 0 var(--s2)}
.colophon p{margin:0;color:#d5e6f6;line-height:1.6}
.colophon a{text-decoration:underline;text-underline-offset:3px}

@media(max-width:1200px){
  .cs-title{grid-column:1 / -1}
  .facts{grid-column:1 / -1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--gap);padding:var(--s3)}
  .facts div{display:block;border:0;margin:0;padding:0}
  .facts dd{margin-top:6px}
}
@media(max-width:1100px){
  .doc-panel{grid-column:1 / -1;--stick:0}
  .doc-panel .doc-controls{flex-direction:row;flex-wrap:wrap;align-items:flex-end}
  .doc-layout .sheet-frame{grid-column:1 / -1}
  .toc{--stick:0}
}
@media(max-width:900px){
  .context .label,.context p{grid-column:1 / -1}
  .steps,.steps:has(li:nth-child(2):last-child){grid-template-columns:minmax(0,1fr)}
  .chapters{display:block}.toc{margin-bottom:var(--s5)}
  .coll>header,.rows{grid-column:1 / -1}
  .featured{grid-template-columns:minmax(0,1fr)}.feat,.feat.big{grid-column:auto;grid-row:auto}
  .bento.n3>.figure{grid-column:1 / -1!important;margin-top:0!important}.bento.n3.many{grid-template-columns:repeat(2,minmax(0,1fr))}
  .about-head h2,.about-lead{grid-column:1 / -1}.about-facts{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:760px){
  .intro,.colophon,.bento.n2,.pn{grid-template-columns:minmax(0,1fr)}
  .pn-card:last-child{text-align:left}
  .row{grid-template-columns:56px minmax(0,1fr) auto;column-gap:var(--s2);padding:14px 10px;margin-inline:-10px}
  .row-thumb{display:block;width:56px;height:42px;object-fit:cover;border-radius:8px;border:1px solid #cfeaff88}
  .row-no,.row-go,.row-kind{display:none}
  .about-facts{grid-template-columns:minmax(0,1fr)}
  .facts{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(hover:none){.peek{display:none}}

/* work: theme tabs set as glowing type, and every project on a plate */
.tabs{display:flex;flex-wrap:wrap;gap:clamp(18px,3vw,48px);margin:calc(var(--s4) * -.25) 0 var(--s6)}
.tab{background:none;border:0;padding:0;font:800 clamp(22px,2.6vw,40px)/1 var(--display);letter-spacing:-.01em;color:#a9d8ff70;transition:color .25s,text-shadow .25s}
.tab:hover{color:#d8eeff}
.tab[aria-pressed=true]{color:var(--foam);text-shadow:0 0 .05em #fff,0 0 .22em #8fd0ffcc,0 0 .7em #2f8cff88}
.coll{display:block}
.coll-name{font-size:clamp(30px,5.4vw,88px);margin-bottom:var(--s5)}
.tiles{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s5) var(--gap);align-items:start}
.wtile{display:block;min-width:0}
.c-l7{grid-column:1 / span 7}.c-r5{grid-column:9 / span 4}.c-l5{grid-column:2 / span 4}.c-r7{grid-column:6 / span 7}
.wtile.low{margin-top:var(--s6)}
.wt-title{display:block;margin-top:var(--s3);font:800 clamp(18px,1.8vw,28px)/1.1 var(--display);text-wrap:balance;text-shadow:0 0 .05em #fff,0 0 .3em #8fd0ff88;transition:text-shadow .3s}
.wtile:hover .wt-title{text-shadow:0 0 .05em #fff,0 0 .3em #bfe6ff,0 0 .9em #58b7ff}
.index{display:grid;gap:calc(var(--s6) * 1.2);margin-bottom:var(--s6)}
@media(max-width:760px){.tiles{grid-template-columns:minmax(0,1fr)}.c-l7,.c-r5,.c-l5,.c-r7{grid-column:auto}.wtile.low{margin-top:0}}

.cased{text-transform:none;letter-spacing:-.015em}
.toc-links a{display:inline;padding:0;color:var(--foam);white-space:nowrap}
@media(max-width:1300px){
  .chapters{display:block}
  .toc{--stick:0;margin-bottom:var(--s5)}
  .toc ol{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px var(--s2)}
  .toc-links{display:flex;flex-wrap:wrap;gap:var(--s3)}
}

/* homepage introduction beside the name, and the two kinds of action: one solid button, and the email as text with a copy icon */
.hero-intro{margin:var(--s3) 0 0;max-width:52ch;font-size:clamp(17px,1.35vw,20px);line-height:1.6;color:#d5e6f6}
.hero-links{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2) var(--s4);margin-top:var(--s4)}
.copy-mail{display:inline-flex;align-items:center;gap:10px;padding:8px 0;border:0;background:none;font-weight:700;font-size:16px;color:var(--foam);text-shadow:0 1px 8px #04204a}
.copy-mail .copy-ico{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.8;transition:opacity .2s,transform .2s}
.copy-mail:hover .copy-ico{opacity:1;transform:scale(1.12)}
.copy-mail:hover{text-shadow:0 0 14px var(--beam)}
/* the name and the links share one optical centre line: Syne's small lowercase is set larger to match Manrope's */
.bar .me{font-size:19px;letter-spacing:-.005em;transform:translateY(-1px)}

/* closing: the email sits beside the invitation */
.floor-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2) var(--s5);margin:var(--s4) 0 var(--s3)}
.floor .floor-row p{margin:0}

/* =========================================================================================
   Case studies: placards. One glowing title, one line under it, the facts, then pictures and paragraphs in turn.
   ========================================================================================= */
.pl figure{margin:0}
.pl-head{padding-block:var(--s4)}
.pl-title{font-size:clamp(40px,5vw,84px)}
.pl-sub{margin:var(--s2) 0 0;font-weight:600;font-size:clamp(17px,1.4vw,21px);color:var(--ice)}
.facts-line{display:flex;flex-wrap:wrap;gap:var(--s3) clamp(28px,4vw,64px);margin:var(--s4) 0 0}
.facts-line dt{font-size:13px;font-weight:700;color:var(--beam)}
.facts-line dd{margin:4px 0 0;font-weight:700;font-size:clamp(15px,1.2vw,18px)}
.pl-fig{margin:0 0 var(--s5)!important}
.pl-fig [data-plate]{width:min(100%,calc(80svh * var(--ar)))}
.pl figcaption{margin-top:var(--s2);font-size:14px;line-height:1.4;color:var(--mute)}
.pl-text{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-bottom:var(--s4)}
.pl-text p{grid-column:1 / span 8;margin:0;font-size:clamp(17px,1.35vw,20px);line-height:1.6;color:#d5e6f6;max-width:60ch}
.pl-text+.pl-fig,.pl-text+.pl-pair,.pl-text+.pl-ch{margin-top:var(--s2)}
.pl-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap);margin-bottom:var(--s5);align-items:start}
.pl-pair .pl-fig{margin:0!important}
.pl-pair .pl-fig [data-plate]{width:100%}
.pl-ch{margin:var(--s5) 0 var(--s4);max-width:60ch}
.pl-ch h2{margin:0 0 var(--s2);font:700 clamp(20px,1.8vw,28px)/1.2 var(--body);color:var(--foam);text-shadow:0 0 .4em #2f8cff66;text-wrap:balance}
.pl-ch p{margin:0;font-size:clamp(17px,1.35vw,20px);line-height:1.6;color:#d5e6f6}
.pl-ch .pl-note{margin-top:var(--s2);font-size:16px;color:var(--ice)}
.pl-code{margin:0 0 var(--s5);max-width:66.6%}
.pl-links{display:flex;flex-wrap:wrap;gap:var(--s4);margin:var(--s5) 0 0;font-weight:700}
.pl-links a{border-bottom:1px solid var(--beam);padding-bottom:2px}
.pl-next{display:block;margin-top:var(--s6)}
.nx-label{display:block;font-weight:700;font-size:14px;color:var(--beam)}
.nx-title{display:block;margin:6px 0 var(--s3);font:700 clamp(26px,2.6vw,40px)/1.1 var(--body)}
.pl-next [data-plate]{width:58%}
@media(max-width:900px){.pl-text p{grid-column:1 / -1}.pl-code{max-width:none}}
@media(max-width:760px){.pl-pair{grid-template-columns:minmax(0,1fr)}.pl-pair .pl-fig+.pl-fig{margin-top:var(--s4)!important}.pl-next [data-plate]{width:100%}}

/* about reads like the sections below it: the heading, then its line underneath, then the facts */
.about-head{display:block}
.about-head h2{font-size:clamp(28px,6.6vw,104px)}
.about-lead{margin:var(--s3) 0 0;font-weight:600;color:var(--ice);font-size:clamp(17px,1.4vw,21px);line-height:1.4;max-width:46ch}

/* =========================================================================================
   Work index, simplified: small filters, small collection names, and one even three-column grid of identical tiles.
   ========================================================================================= */
.wk .tabs{gap:var(--s4);margin:0 0 var(--s5)}
.wk .tab{font:700 17px/1 var(--body);letter-spacing:0;color:var(--mute);padding:6px 0}
.wk .tab[aria-pressed=true]{color:var(--foam);text-shadow:0 0 .6em #58b7ffaa}
.wk .index{gap:var(--s5)}
.wk .coll-name{margin:0 0 var(--s3);font:700 clamp(20px,1.8vw,26px)/1.2 var(--body);color:var(--foam);text-shadow:0 0 .4em #2f8cff66;text-transform:none;letter-spacing:0}
.wk .tiles{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s4) var(--gap)}
.wk .wtile{grid-column:auto!important;margin-top:0!important}
.wk .wt-title{margin-top:var(--s2);font:700 clamp(17px,1.3vw,20px)/1.25 var(--body);text-shadow:none}
.wk .wt-sub{display:block;margin-top:4px;font-size:15px;line-height:1.4;color:var(--mute)}
.wk .wtile:hover .wt-title{text-shadow:0 0 .6em #58b7ffaa}
@media(max-width:900px){.wk .tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.wk .tiles{grid-template-columns:minmax(0,1fr)}}

/* homepage: the way into the work index, a slowly moving strip of project pictures above a glowing link */
.all-work{display:block;margin-top:var(--s6);max-width:820px}
.aw-strip{display:block;overflow:hidden;border-radius:20px;-webkit-mask:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.aw-track{display:flex;gap:12px;width:max-content;animation:aw 60s linear infinite}
.aw-track img{width:150px;aspect-ratio:4/3;object-fit:cover;border-radius:12px;border:1px solid #cfeaff99;box-shadow:inset 0 1px 0 #fff6,0 10px 24px -12px #000a;display:block}
.all-work:hover .aw-track{animation-play-state:paused}
.aw-label{display:inline-flex;align-items:center;gap:12px;margin-top:var(--s3);font:800 clamp(24px,2.6vw,40px)/1.1 var(--display);color:var(--foam);text-shadow:0 0 .05em #fff,0 0 .22em #8fd0ffcc,0 0 .7em #2f8cff88;transition:gap .3s}
.all-work:hover .aw-label,.all-work:focus-visible .aw-label{gap:20px}
@keyframes aw{to{transform:translateX(-50%)}}
.still .aw-track{animation:none}
@media(prefers-reduced-motion:reduce){.aw-track{animation:none}}
@media(max-width:760px){.aw-track img{width:110px}.aw-label{font-size:22px;white-space:nowrap}}

/* every page sits in a centred column with open sea either side: the text, the chain and the anchor all stay inside it */
@media(min-width:761px){:root{--gutter:max(7.75vw,calc((100vw - 1320px) / 2))}}

/* the resume sheet keeps the original site's type, on screen and in the saved PDF */
.sheet-frame{font-family:var(--font-sans,'Plus Jakarta Sans',sans-serif);font-size:16px;line-height:1.5}
body.doc{transition:none}
