/* adriancisneros.dev, "Clean" (v3, October 2026).
   Apple-like finish: the phone's own typeface, white and light-grey sections in turn,
   rounded photos, grouped lists like iPhone Settings, one blue for actions.
   Built for phones first and for older readers: 17px minimum text, 44-56px tap targets.
   A very faint blue glow sits behind the page and shifts color as you scroll. */
:root,:root[data-theme="light"]{
  --bg:#ffffff; --bg2:#f5f5f7; --bg2-a:rgba(245,245,247,.8); --ink:#1d1d1f; --text2:#636366; --line:#d2d2d7; --line-h:#a1a1a6; --hair:rgba(0,0,0,.08);
  --blue:#0071e3; --blue-hover:#0077ed; --link:#0066cc; --pill:#e8e8ed; --pill-h:#dedee3; --tint:#eef5ff;
  --good:#1d7a3a; --good-bg:#e3f4e8; --warn-bg:#fff4d6; --warn:#7a5300; --bad-bg:#fdecec; --bad:#a1261d;
  --glass:rgba(255,255,255,.78); --field-line:#b9b9bf; --bar:#8e8e93; --matte:#ececf0; --card:#ffffff; --shadow:0 1px 2px rgba(0,0,0,.04),0 8px 24px rgba(0,0,0,.06);
  --glow-a:.14; --glow-b:.11;
  color-scheme:light;
}
/* Dark: a deep navy night, like the particle film. Same layout, same blue buttons. */
:root[data-theme="dark"]{
  --bg:#0b0d14; --bg2:#121622; --bg2-a:rgba(18,22,34,.86); --ink:#eef1f8; --text2:#aab3c5; --line:#2a3142; --line-h:#4a5468; --hair:rgba(255,255,255,.1);
  --blue:#0071e3; --blue-hover:#1a82f0; --link:#7ab8ff; --pill:#1f2533; --pill-h:#2a3142; --tint:#13243d;
  --good:#6fd08c; --good-bg:#16301f; --warn-bg:#3a2d0c; --warn:#f3cf7a; --bad-bg:#3a1714; --bad:#ffb4a8;
  --glass:rgba(11,13,20,.74); --field-line:#3e475a; --bar:#6b7385; --matte:#171b27; --card:#151a26; --shadow:0 1px 2px rgba(0,0,0,.3);
  --glow-a:.10; --glow-b:.08;
  color-scheme:dark;
}
:root{
  --font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Segoe UI Variable Text","Segoe UI",system-ui,Roboto,"Helvetica Neue",Arial,sans-serif;
  --r:18px; --r-card:28px; --max:1080px; --gut:20px;
  --p:0;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{font-family:var(--font);background:var(--bg);color:var(--ink);font-size:19px;line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
img,video{max-width:100%;display:block}
img{height:auto}
a{color:var(--link);text-decoration:none}
a:hover{text-decoration:underline}
p a,li p a,.caps a{text-decoration:underline;text-decoration-color:rgba(0,102,204,.35);text-underline-offset:3px}
p a:hover{text-decoration-color:currentColor}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px;border-radius:6px}
ul,ol{list-style:none}
button{font:inherit;color:inherit}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--gut)}
.skip{position:absolute;left:-9999px;background:var(--ink);color:#fff;padding:14px 18px;z-index:200}
.skip:focus{left:0;top:0}
h1,h2,h3{font-weight:600;letter-spacing:-.022em;text-wrap:balance;color:var(--ink)}
h1{font-size:clamp(40px,6.4vw,80px);line-height:1.05;letter-spacing:-.03em}
h2{font-size:clamp(32px,4.6vw,56px);line-height:1.08;letter-spacing:-.028em}
h3{font-size:21px;line-height:1.3;letter-spacing:-.01em}
p+p{margin-top:12px}
[id]{scroll-margin-top:84px}

/* ---------- the glow: two faint color fields behind everything, moved by --p (0 at the top, 1 at the bottom) ---------- */
.glow{position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(62vmax 46vmax at calc(8% + var(--p) * 34%) calc(-6% + var(--p) * 14%), hsl(calc(214 - var(--p) * 30) 95% 62% / var(--glow-a)), transparent 70%),
    radial-gradient(56vmax 42vmax at calc(96% - var(--p) * 30%) calc(104% - var(--p) * 18%), hsl(calc(246 - var(--p) * 44) 90% 66% / var(--glow-b)), transparent 70%)}

/* ---------- sections take turns: clear (the glow shows), then light grey ---------- */
.sec{padding:84px 0}
.grey{background:var(--bg2-a)}
.head-c{text-align:center;max-width:820px;margin:0 auto 44px}
.sub{font-size:clamp(20px,2vw,24px);line-height:1.45;color:var(--text2);margin-top:14px;text-wrap:pretty}
.head-c .sub{max-width:32em;margin-left:auto;margin-right:auto}
.meta{font-size:17px;color:var(--text2);margin-top:10px}
.avail{color:var(--good);font-weight:500}

/* ---------- header: frosted glass, pinned on a wide screen ---------- */
.top{background:var(--glass);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--hair);z-index:50;position:relative}
.top .wrap{display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:16px}
.name{font-weight:600;font-size:20px;letter-spacing:-.015em;color:var(--ink);min-height:56px;display:flex;align-items:center}
.name:hover{text-decoration:none}
.nav{grid-column:1/-1;display:flex;justify-content:center;gap:4px 28px;border-top:1px solid var(--hair)}
.nav a{display:flex;align-items:center;min-height:48px;font-size:17px;color:var(--ink)}
.nav a:hover{color:var(--link);text-decoration:none}
.nav a[aria-current="page"]{color:var(--link);font-weight:600}
.pill-s{display:none;justify-self:end;align-items:center;min-height:44px;padding:0 18px;border-radius:980px;background:var(--blue);color:#fff;font-size:16px;font-weight:500}
.pill-s:hover{background:var(--blue-hover);text-decoration:none}
@media(prefers-reduced-transparency:reduce){.top{background:var(--bg)}}
/* Light / Dark switch: a small segmented control. Light is the default. */
.theme{grid-column:2;grid-row:1;justify-self:end;display:inline-flex;border:1px solid var(--line);border-radius:980px;padding:2px}
.theme button{border:0;background:none;color:var(--ink);font-size:15px;font-weight:500;min-height:44px;min-width:56px;padding:0 12px;border-radius:980px;cursor:pointer}
.theme button[aria-pressed="true"]{background:var(--ink);color:var(--bg)}
.theme button:not([aria-pressed="true"]):hover{background:var(--pill)}
/* the switch crossfades the page colours */
body,.top,.grey,.foot,.group,.card,.est-card,.est-side,.opt>span,.pc{transition:background-color .35s ease,color .35s ease,border-color .35s ease}

/* ---------- buttons and links ---------- */
.act{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:12px 28px;margin-top:30px}
.act.left{justify-content:flex-start}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:56px;padding:0 30px;border:0;border-radius:980px;background:var(--blue);color:#fff;font-size:19px;font-weight:500;cursor:pointer;text-align:center}
.btn:hover{background:var(--blue-hover);text-decoration:none}
.btn:disabled{opacity:.5;cursor:default}
.btn.soft{background:var(--pill);color:var(--ink)}
.btn.soft:hover{background:var(--pill-h)}
.more{display:inline-flex;align-items:center;min-height:48px;min-width:44px;font-size:19px}
.more::after{content:"›";font-size:1.25em;line-height:1;margin-left:6px;transform:translateY(-1px)}

/* ---------- hero ---------- */
.hero{padding:64px 0 84px;text-align:center}
.hero h1{max-width:13em;margin:0 auto}
.hero .sub{max-width:30em;margin-left:auto;margin-right:auto;margin-top:20px}
.photos{margin-top:56px}
.hero.left{text-align:left}
.hero.left h1{margin:0}
.hero.left .sub{margin-left:0}
.prose{margin-top:18px;color:var(--ink)}
.prose p+p{margin-top:12px}
.jump{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:28px}
.jump a{display:inline-flex;align-items:center;min-height:44px;padding:0 20px;border-radius:980px;background:var(--pill);color:var(--ink);font-size:17px}
.jump a:hover{background:var(--pill-h);text-decoration:none}

/* ---------- several photos in one: each keeps its shape, each row shares one height.
   On a phone, the rows stack; on a wide screen, a .jset becomes one row. ---------- */
.jrow{display:flex;gap:10px}
.jrow+.jrow{margin-top:10px}
.jrow>*{flex:var(--ar) 1 0;min-width:0;aspect-ratio:var(--ar);overflow:hidden;border-radius:14px;background:var(--pill)}
.jrow img,.jrow video{width:100%;height:100%;object-fit:cover}
.caps{margin-top:16px;font-size:16px;line-height:1.5;color:var(--text2);text-align:center;max-width:46em;margin-left:auto;margin-right:auto}

/* ---------- grouped list, like iPhone Settings ---------- */
.group{background:var(--bg);border-radius:var(--r-card);overflow:hidden}
.group>li{position:relative;padding:20px 22px}
.group>li+li::before{content:"";position:absolute;top:0;left:22px;right:0;height:1px;background:var(--line)}
.group h3{font-size:clamp(20px,2vw,23px)}
.group p{font-size:18px;color:var(--text2);margin-top:4px}
.group b{font-weight:600}
.group.on-white{background:var(--bg2)}
.narrow{max-width:900px;margin:0 auto}
.dated>li{display:grid;gap:4px 28px}
.dated time,.dated .when{font-size:16px;font-weight:500;color:var(--text2);font-variant-numeric:tabular-nums;padding-top:3px}
.glabel{font-size:15px;font-weight:500;color:var(--text2);margin:26px 0 8px 22px;letter-spacing:0}
.chip{display:inline-block;font-size:14px;font-weight:500;line-height:1;padding:6px 10px;border-radius:980px;background:var(--pill);color:var(--ink);vertical-align:3px;margin-left:6px}
.chip.live{background:var(--good-bg);color:var(--good)}
.bullets{padding-left:22px;list-style:disc;display:grid;gap:8px}
.bullets li::marker{color:var(--text2)}

/* ---------- cards ---------- */
.cards{display:grid;gap:20px}
.card{background:var(--bg2);border-radius:var(--r-card);padding:34px 22px 30px}
.grey .card{background:var(--bg)}
.grey .card .group{background:var(--bg2)}
.card h2{font-size:clamp(28px,3vw,38px)}
.card>p{font-size:18px;color:var(--text2);margin-top:12px}
.card .group{margin-top:20px}
.card .more{font-size:18px;margin-top:14px}

/* ---------- research panel ---------- */
.panel{background:var(--bg2);border-radius:var(--r-card);padding:40px 22px 30px;max-width:900px;margin:0 auto}
.grey .panel{background:var(--bg)}
.big{text-align:center;font-size:clamp(28px,3.4vw,40px);font-weight:600;letter-spacing:-.025em;line-height:1.1}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:34px 0 36px;text-align:center}
.stat b{display:block;font-size:clamp(48px,7vw,84px);font-weight:600;letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums}
.stat.me b{color:var(--blue)}
.stat span{display:block;font-size:17px;color:var(--text2);margin-top:8px}
.bars{max-width:640px;margin:0 auto}
.bar+.bar{margin-top:16px}
.bar-l{display:flex;justify-content:space-between;gap:12px;font-size:16px;color:var(--text2);margin-bottom:6px}
.track{height:14px;border-radius:7px;background:var(--pill);overflow:hidden}
.track i{display:block;height:100%;min-width:10px;border-radius:7px;background:var(--bar)}
.bar.me .track i{background:var(--blue)}
.axis{position:relative;height:20px;margin-top:8px;font-size:14px;color:var(--text2);font-variant-numeric:tabular-nums}
.axis span{position:absolute;top:0;transform:translateX(-50%)}
.axis span:first-child{transform:none}
.axis span:last-child{transform:translateX(-100%)}
.panel figcaption{text-align:center;font-size:15px;color:var(--text2);margin-top:16px}
.center-note{text-align:center;max-width:34em;margin:30px auto 0;font-size:18px;color:var(--text2)}

/* ---------- video ---------- */
.vbox{background:#000;overflow:hidden;border-radius:var(--r);position:relative}
.vbox video{width:100%;height:100%;object-fit:cover;background:#000}
.piece h3{margin-top:14px}
.piece p{font-size:17px;color:var(--text2);margin-top:2px}
.row{display:flex;flex-wrap:wrap;gap:6px 22px;align-items:center;margin-top:12px}
.row .more{font-size:17px}
.snd{min-height:44px;padding:0 20px;border:0;border-radius:980px;background:var(--pill);color:var(--ink);font-size:16px;font-weight:500;cursor:pointer}
.snd:hover{background:var(--pill-h)}
.snd[aria-pressed="true"]{background:var(--ink);color:var(--bg)}
.pair{display:grid;gap:30px;max-width:760px;margin:44px auto 0}
.pair .vbox{aspect-ratio:9/16}

/* ---------- film slider: slides keep their own shape, one shared height ---------- */
.rail-box{position:relative}
.rail{display:flex;gap:16px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;
  padding:4px var(--gut) 8px;scroll-padding-inline:var(--gut)}
.rail::-webkit-scrollbar{display:none}
.rail:focus-visible{outline-offset:-3px}
.slide{flex:0 0 auto;scroll-snap-align:start;width:min(calc(var(--hh) * var(--ar)), calc(100vw - 64px))}
.slide .vbox{aspect-ratio:var(--ar)}
.slide p{max-width:30em}
.rail-ctl{display:flex;justify-content:flex-end;align-items:center;gap:12px;margin-top:18px}
.rail-ctl .hint{margin-right:auto;font-size:16px;color:var(--text2)}
.rail-ctl button{width:48px;height:48px;border-radius:50%;border:0;background:var(--pill);color:var(--ink);font-size:24px;line-height:1;cursor:pointer;display:grid;place-items:center}
.rail-ctl button:hover{background:var(--pill-h)}
.rail-ctl button:disabled{opacity:.35;cursor:default}
:root{--hh:clamp(300px,58vh,500px)}

/* ---------- quote ---------- */
.quote{max-width:900px;margin:56px auto 0;text-align:center}
.quote p{font-size:clamp(23px,2.8vw,34px);font-weight:600;line-height:1.3;letter-spacing:-.02em;text-wrap:balance}
.quote cite{display:block;font-style:normal;font-size:17px;color:var(--text2);margin-top:16px}
.split{display:grid;gap:36px;align-items:center}
.split .quote{margin-top:0;text-align:left}
.photo img{width:100%;height:auto;border-radius:var(--r)}
.photo figcaption{font-size:16px;color:var(--text2);margin-top:12px;line-height:1.45}

/* ---------- the guided quote ---------- */
.est{display:grid;gap:16px;max-width:1000px;margin:0 auto;align-items:start}
.est-card,.est-side{background:var(--bg);border-radius:var(--r-card);padding:28px 20px}
.on-white .est-card,.on-white .est-side{background:var(--bg2)}
.est-step{font-size:15px;font-weight:500;color:var(--text2)}
.est-q{font-size:clamp(23px,2.4vw,28px);margin:6px 0 18px;outline:none}
.est fieldset{border:0;min-width:0}
.est fieldset+fieldset{margin-top:26px}
.est legend{font-size:19px;font-weight:600;margin-bottom:12px;padding:0}
.opts{display:grid;gap:10px}
.opt{position:relative;display:block;cursor:pointer}
.opt input{position:absolute;opacity:0;width:1px;height:1px}
.opt>span{display:block;min-height:56px;padding:14px 18px;border-radius:16px;border:2px solid var(--line);background:var(--bg);transition:border-color .15s,background-color .15s}
.on-white .opt>span{background:var(--bg)}
.opt>span b{display:block;font-weight:600;font-size:18px;line-height:1.3}
.opt>span small{display:block;font-size:16px;color:var(--text2);margin-top:2px}
.opt:hover>span{border-color:var(--line-h)}
.opt input:checked+span{border-color:var(--blue);background:var(--tint)}
.opt input:focus-visible+span{outline:3px solid var(--blue);outline-offset:2px}
.field{display:block}
.field+.field{margin-top:18px}
.field>b{display:block;font-size:18px;font-weight:600;margin-bottom:6px}
.field>b small{font-weight:400;font-size:16px;color:var(--text2)}
.field input,.field textarea{width:100%;font:inherit;font-size:18px;color:var(--ink);background:var(--bg);border:1px solid var(--field-line);border-radius:12px;padding:13px 14px;min-height:52px}
.field textarea{min-height:130px;resize:vertical}
.field input:focus,.field textarea:focus{outline:3px solid rgba(0,113,227,.35);border-color:var(--blue);outline-offset:0}
.est-nav{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:28px}
.est-back{background:none;border:0;color:var(--link);font-size:18px;min-height:48px;padding:0 4px;cursor:pointer}
.est-back::before{content:"‹";font-size:1.25em;margin-right:6px}
.est-back[hidden]{display:none}
.est-msg{border-radius:14px;padding:12px 14px;font-size:17px;margin-top:16px}
.est-msg.bad{background:var(--bad-bg);color:var(--bad)}
.est-side h3{font-size:16px;font-weight:500;color:var(--text2);letter-spacing:0}
.amt{font-size:clamp(34px,4vw,46px);font-weight:600;letter-spacing:-.03em;line-height:1.1;margin-top:6px;font-variant-numeric:tabular-nums}
.amt.wait{font-size:22px;letter-spacing:-.01em;color:var(--text2);font-weight:500}
.amt-unit{font-size:18px;color:var(--text2);font-weight:500;letter-spacing:0}
.est-side .picked{margin-top:14px;font-size:16px;color:var(--text2);display:grid;gap:4px}
.est-side .picked b{color:var(--ink);font-weight:600}
.est-side .fine{font-size:15px;color:var(--text2);margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.draft{display:block;margin-top:12px;font-size:14px;font-weight:600;background:var(--warn-bg);color:var(--warn);border-radius:10px;padding:8px 10px}
.est-done{text-align:center;padding:16px 0}
.est-done .big{margin-bottom:10px}
.hp{position:absolute;left:-9999px}

/* ---------- contact block and footer ---------- */
.end{padding:96px 0;text-align:center}
.end h2{font-size:clamp(40px,6.4vw,76px)}
.mail{display:block;margin-top:16px;font-size:18px;color:var(--text2)}
.mail a{word-break:break-word}
details.more-list{margin-top:20px}
details.more-list summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;min-height:48px;color:var(--link);font-size:18px}
details.more-list summary::-webkit-details-marker{display:none}
details.more-list summary::after{content:"›";font-size:1.25em;margin-left:8px;transition:transform .2s}
details.more-list[open] summary::after{transform:rotate(90deg)}
details.more-list .group{margin-top:8px}
.foot{background:var(--bg2-a);padding:26px 0 34px;font-size:15px;color:var(--text2)}
.foot nav{display:flex;flex-wrap:wrap;gap:0 24px;margin-bottom:8px}
.foot nav a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;color:var(--ink)}
.foot .wrap>div{border-top:1px solid var(--line);padding-top:14px}

/* ---------- larger screens ---------- */
/* ---------- tier list (home, "What I have done") ---------- */
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.tiers{display:grid;gap:22px}
.tier{display:grid;grid-template-columns:48px 1fr;gap:12px 14px}
.tier-row{display:contents}
.tier-tag{grid-column:1;grid-row:1;display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:14px;font-size:26px;font-weight:700;letter-spacing:0;line-height:1}
.tier-s .tier-tag{background:var(--blue);color:#fff}
.tier-a .tier-tag{background:var(--tint);color:var(--blue)}
.tier-b .tier-tag{background:var(--pill);color:var(--text2)}
.tier-label{grid-column:2;grid-row:1;align-self:center;font-size:16px;font-weight:500;color:var(--text2)}
.tier-row>ul{grid-column:1/-1}
.tier h4{font-weight:600;letter-spacing:-.02em;color:var(--ink)}
.tier-cards{display:grid;gap:14px}
.tier-cards>li{display:flex;flex-direction:column;background:var(--bg);border-radius:var(--r-card);padding:26px 24px 22px}
.tier-cards time{font-size:15px;font-weight:500;color:var(--blue)}
.tier-cards h4{font-size:clamp(21px,2.1vw,23px);line-height:1.25;margin-top:6px}
.tier-cards p{font-size:17px;color:var(--text2);margin-top:8px}
.tier-cards .tier-links{display:flex;flex-wrap:wrap;gap:2px 20px;margin-top:auto;padding-top:14px}
.tier-links a{display:inline-flex;align-items:center;min-height:44px}
.tier-a h4{font-size:clamp(19px,1.9vw,21px)}
.tier-chips{display:grid;gap:12px}
.tier-chips a{display:block;height:100%;background:var(--bg);border-radius:var(--r);padding:16px 20px;font-size:17px;line-height:1.45;color:var(--text2)}
.tier-chips a:hover{text-decoration:none;background:var(--tint)}
.tier-chips b{color:var(--ink);font-weight:600}
.tier-chips .go{display:block;margin-top:6px;font-size:15px;color:var(--link)}

@media(min-width:640px){
  .opts.tiles{grid-template-columns:1fr 1fr}
  .pair{grid-template-columns:1fr 1fr}
}
@media(min-width:800px){
  :root{--gut:40px}
  .top{position:sticky;top:env(safe-area-inset-top,0px)}
  .top .wrap{grid-template-columns:auto 1fr auto auto;min-height:60px}
  .nav{grid-column:2;grid-row:1;justify-content:flex-end;border:0;gap:0 30px;margin-right:12px}
  .nav a{font-size:16px;min-height:44px}
  .pill-s{grid-column:3;grid-row:1;display:inline-flex}
  .theme{grid-column:4}
  .nav-c{display:none!important}
  .jset{display:flex;gap:12px}
  .jset .jrow{display:contents}
  .jrow{gap:12px}
  .jrow>*{border-radius:var(--r)}
  .dated>li{grid-template-columns:190px 1fr;padding:24px 30px}
  .dated>li+li::before{left:30px}
  .panel{padding:56px 48px 40px}
  .cards{grid-template-columns:1fr 1fr}
  .card{padding:46px 40px 40px}
  .est-card,.est-side{padding:36px 34px}
  .split{grid-template-columns:1.2fr 1fr;gap:56px}
  .split.flip{grid-template-columns:1fr 1.1fr}
  .rail{padding-inline:max(var(--gut),calc((100vw - var(--max)) / 2 + var(--gut)));scroll-padding-inline:max(var(--gut),calc((100vw - var(--max)) / 2 + var(--gut)))}
  .slide{width:calc(var(--hh) * var(--ar))}
  .tiers{gap:26px}
  .tier{grid-template-columns:64px 1fr;gap:10px 22px}
  .tier-tag{grid-row:1/span 2;align-self:stretch;width:64px;height:auto;min-height:64px;border-radius:18px;font-size:32px}
  .tier-label{align-self:end;margin-left:4px}
  .tier-row>ul{grid-column:2}
  .tier-chips{grid-template-columns:1fr 1fr}
}
@media(min-width:1000px){
  .est{grid-template-columns:1.7fr 1fr}
  .est-side{position:sticky;top:84px}
  .tier-cards{grid-template-columns:repeat(3,1fr)}
}
@media(prefers-reduced-motion:reduce){
  *{transition:none!important;scroll-behavior:auto!important}
}

/* =====================================================================================
   v4 (November 2026): the particle portrait, "This year", the project strip and cards,
   the project pages, and the chip-break scene. Same Clean tokens, light and dark.
   ===================================================================================== */

/* ---------- category colours: a saturated field for category cards, a tint for text covers ---------- */
.cat-research{--cat:#0071e3;--cat-t:#e7f0fc;--cat-i:#004f9e}
.cat-software{--cat:#1d1d1f;--cat-t:#e3e8f0;--cat-i:#1f2b3d}
.cat-ai{--cat:#5b3fd0;--cat-t:#eeeafc;--cat-i:#4227ad}
.cat-websites{--cat:#0b7a55;--cat-t:#e3f3ec;--cat-i:#075e40}
.cat-film{--cat:#9c2f1c;--cat-t:#fbe9e5;--cat-i:#842413}
.cat-workshops{--cat:#8a5300;--cat-t:#fbefd9;--cat-i:#6b4000}
.cat-community{--cat:#24557f;--cat-t:#e5edf5;--cat-i:#1b4466}
:root[data-theme="dark"] .cat-research{--cat-t:#10233d;--cat-i:#93c5ff}
:root[data-theme="dark"] .cat-software{--cat:#343a4a;--cat-t:#1c2433;--cat-i:#e6e9f0}
:root[data-theme="dark"] .cat-ai{--cat-t:#211a42;--cat-i:#c6b9ff}
:root[data-theme="dark"] .cat-websites{--cat-t:#0f2a21;--cat-i:#8adcb9}
:root[data-theme="dark"] .cat-film{--cat-t:#32150f;--cat-i:#ffb3a3}
:root[data-theme="dark"] .cat-workshops{--cat-t:#2e2209;--cat-i:#f4c873}
:root[data-theme="dark"] .cat-community{--cat-t:#12243a;--cat-i:#a2c9ee}

/* ---------- hero with the particle portrait ---------- */
.hero-p{padding:12px 0 72px;text-align:left}
.hero-grid{display:grid;gap:6px}
.portrait{position:relative;height:min(38svh,320px);width:100%}
.portrait img{position:absolute;left:50%;top:0;height:100%;width:auto;max-width:none;transform:translateX(-50%);border-radius:24px;transition:opacity .8s ease}
.portrait canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.pt-live .portrait img{opacity:0}
.hero-p h1{font-size:clamp(31px,8vw,60px);line-height:1.08;max-width:17em;margin:0}
.hero-p .sub{margin-left:0;max-width:31em}
.hero-p .act{margin-top:26px}

/* ---------- This year: a grouped list, each row opens its project ---------- */
.year>li{padding:0}
.year a{display:grid;gap:2px 28px;padding:18px 22px;color:var(--ink);min-height:64px}
.year a:hover{text-decoration:none;background:var(--tint)}
.year time{font-size:16px;font-weight:500;color:var(--text2);font-variant-numeric:tabular-nums;padding-top:3px}
.year b{display:block;font-size:clamp(20px,2vw,23px);font-weight:600;letter-spacing:-.01em;line-height:1.3}
.year b+span{display:block;font-size:18px;color:var(--text2);margin-top:3px}

/* ---------- project cards ---------- */
.pc{display:flex;flex-direction:column;background:var(--bg2);border-radius:22px;overflow:hidden;color:var(--ink);position:relative;isolation:isolate}
.grey .pc{background:var(--bg)}
.pc:hover{text-decoration:none}
.pc-m{display:flex;align-items:center;justify-content:center;background:var(--matte);overflow:hidden;flex:none}
.pc-m img,.pc-m video{height:100%;width:auto;max-width:100%;object-fit:contain;transition:transform .6s ease}
.pc:hover .pc-m img,.pc:hover .pc-m video{transform:scale(1.025)}
.pc-b{display:flex;flex-direction:column;gap:3px;padding:13px 16px 15px}
.pc-h{font-size:18px;font-weight:600;line-height:1.25;letter-spacing:-.012em;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.pc-d{font-size:16px;font-weight:500;color:var(--text2)}
.pc-s{font-size:17px;line-height:1.35;color:var(--text2);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.pc:focus-visible{outline-offset:2px;border-radius:22px}
/* a text cover: the title on a tinted colour field */
.tc{background:var(--cat-t);color:var(--cat-i);align-items:flex-end;justify-content:flex-start;padding:18px 18px 16px}
.tc-t{font-size:clamp(23px,2.3vw,28px);font-weight:600;line-height:1.12;letter-spacing:-.022em;text-wrap:balance}
/* a category card: one saturated field and large type */
.cc{background:var(--cat);color:#fff;padding:22px 22px 18px}
.grey .cc{background:var(--cat)}
.cc:hover{filter:brightness(1.07)}
.cc-t{font-size:clamp(30px,3.2vw,40px);font-weight:600;line-height:1.04;letter-spacing:-.03em;text-wrap:balance}
.cc-l{font-size:17px;line-height:1.4;margin-top:10px;color:rgba(255,255,255,.9);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.cc-n{margin-top:auto;padding-top:10px;font-size:16px;font-weight:500;color:rgba(255,255,255,.88)}

/* ---------- the drifting strip: two rows that fill the width ----------
   Without JavaScript, or with reduced motion, each row is a plain row you scroll by hand.
   With JavaScript (.drift), site.js moves the track with a transform and wraps it seamlessly. */
.strip{--mh:190px;--bh:128px;--minw:236px;position:relative}
.strip-row{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;scroll-snap-type:x proximity;scroll-padding-inline:var(--gut);outline:none}
.strip-row::-webkit-scrollbar{display:none}
.strip-row+.strip-row{margin-top:14px}
.strip-track{display:flex;gap:14px;width:max-content;padding:2px var(--gut)}
.strip .pc{flex:0 0 auto;width:max(calc(var(--mh) * var(--ar)),var(--minw));height:calc(var(--mh) + var(--bh));scroll-snap-align:start}
.strip .pc-m{height:var(--mh)}
.strip .pc-b{flex:1;min-height:0;overflow:hidden}
.strip .pc-s{-webkit-line-clamp:2}
.strip .cc{width:calc((var(--mh) + var(--bh)) * .86)}
.strip.drift .strip-row{overflow:hidden;scroll-snap-type:none;touch-action:pan-y;cursor:grab;-webkit-user-select:none;user-select:none}
.strip.drift .strip-track{will-change:transform;padding:2px 0;backface-visibility:hidden}
.strip.drift .pc{scroll-snap-align:none}
.strip.dragging .strip-row{cursor:grabbing}
.strip.dragging .pc{pointer-events:none}
.strip img{-webkit-user-drag:none}
.strip-ctl{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:28px}
.strip-btns{display:flex;gap:12px}
.strip-btns button{width:48px;height:48px;border-radius:50%;border:0;background:var(--pill);color:var(--ink);font-size:24px;line-height:1;cursor:pointer;display:grid;place-items:center}
.strip-btns button:hover{background:var(--pill-h)}

/* ---------- card rows (build_pages.py card_rows): balanced rows that always fill the width ----------
   build_pages.py cuts every list into rows (3 = 3, 4 = 4 or 2+2, 5 = 3+2, 7 = 4+3, at most 4 a row).
   In a row the cards share the width by their shape (--gar) at one picture height (--mh, from the row's
   --sum of shapes), so each picture fills its frame. A hovered or focused card grows and the others give
   way; the row keeps its height, and pictures stay at their own shape (contain, on the matte).
   On a phone every card is its own row, its picture at its own shape. */
.cards{--gap:12px;container-type:inline-size;display:flex;flex-direction:column;gap:var(--gap)}
.prow,.ph{display:flex;flex-direction:column;gap:var(--gap)}
.ph{display:contents}
.prow a{--gar:max(var(--ar),.78);min-width:0}
.prow .pc-m{aspect-ratio:var(--gar);width:100%}
.prow .pc-m img,.prow .pc-m video{width:100%;height:100%;max-width:none;object-fit:contain}
.prow .pc-s{-webkit-line-clamp:2}
/* a text-only project in a row of pictures: the whole card on its category tint */
.prow .pc-text,.grey .prow .pc-text{background:var(--cat-t)}
.prow .pc-text .pc-m{aspect-ratio:auto;background:none;padding-bottom:4px}
.prow .pc-text .pc-b{padding:0 18px 16px}
.tcard{display:flex;flex-direction:column;gap:4px;background:var(--cat-t);border-radius:22px;padding:20px 22px 22px;color:var(--ink);overflow:hidden}
.tcard:hover{text-decoration:none;filter:brightness(.98)}
:root[data-theme="dark"] .tcard:hover{filter:brightness(1.12)}
.tcard-h{font-size:clamp(21px,2vw,24px);font-weight:600;line-height:1.18;letter-spacing:-.02em;color:var(--cat-i);text-wrap:balance;margin-bottom:6px;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;flex:none}
.tcard .pc-d{flex:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tcard-s{font-size:17px;line-height:1.4;color:var(--text2);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;min-height:0}
.cc-rows .cc{min-height:190px}
@media(min-width:640px){
  .cards{--gap:14px}
  .prow{flex-direction:row;--mh:clamp(150px,(100cqw - (var(--n) - 1) * var(--gap)) / var(--sum),340px);--bh:126px;--th:240px}
  .prow a,.ph a{flex:var(--gar) 1 0}
  .prow .pc-m{aspect-ratio:auto;height:var(--mh)}
  .prow .pc-b{height:var(--bh);overflow:hidden}
  .prow .pc-text .pc-m{height:calc(var(--mh) + var(--bh) - 92px)}
  .prow .pc-text .pc-b{height:92px}
  .pr-text .tcard{height:var(--th)}
  .tcard .pc-d{margin-top:auto}
  .cc-rows .cc{height:240px;min-height:0}
}
/* a row of 4 on a tablet is two rows of 2, each at its own height */
@media(min-width:640px) and (max-width:999px){
  .prow.r4{flex-direction:column}
  .r4 .ph{display:flex;flex-direction:row;gap:var(--gap);--mh:clamp(150px,(100cqw - var(--gap)) / var(--hs),340px)}
  .r4.pr-text .ph{--th:226px}
}
/* text rows of fewer, wider cards need less height */
@media(min-width:1000px){
  .pr-text.r3{--th:228px}
  .pr-text.r2{--th:200px}
  .pr-text.r1{--th:176px}
}
/* the stretch: only with a mouse (no hover growth on touch), and never with reduced motion */
@media(min-width:640px) and (prefers-reduced-motion:no-preference){
  .prow a{transition:flex-grow .35s cubic-bezier(.3,.7,.25,1),background-color .35s ease,color .35s ease,filter .35s ease}
  .prow a:focus-visible{flex-grow:calc(var(--gar) * 1.6)}
}
@media(min-width:640px) and (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){
  .prow a:hover{flex-grow:calc(var(--gar) * 1.6)}
}
@media(min-width:640px) and (hover:hover) and (pointer:fine) and (prefers-reduced-motion:reduce){
  .prow a:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
}
.cat-head{max-width:760px;margin-bottom:28px}
.cat-head .sub{margin-top:8px}

/* ---------- project and category pages ---------- */
.p-hero{padding:22px 0 44px;text-align:left}
.p-hero h1{font-size:clamp(36px,5.6vw,66px);max-width:16em;margin:0}
.p-hero .sub{margin-left:0;max-width:32em}
.p-hero .meta{margin-top:14px;font-weight:500}
.p-hero.tinted{background:var(--cat-t)}
.p-hero.tinted h1{color:var(--cat-i)}
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;font-size:17px;color:var(--text2);margin-bottom:10px}
.crumbs a{display:inline-flex;align-items:center;min-height:44px}
.p-cover{margin-top:34px}
.pc-frame{width:min(100%,calc(74svh * var(--ar)));aspect-ratio:var(--ar);border-radius:22px;overflow:hidden;background:var(--matte)}
.pc-frame img,.pc-frame video{width:100%;height:100%;object-fit:cover}
.p-body{padding-top:20px}
.narrow-t{max-width:760px}
.p-body .prose{font-size:19px;line-height:1.6}
.p-body .prose p+p{margin-top:16px}
.facts{background:var(--bg2);margin-top:40px}
.facts>li{display:grid;gap:2px 24px}
.f-l{font-size:16px;font-weight:500;color:var(--text2);padding-top:2px}
.f-v{font-size:18px;color:var(--ink)}
.p-links{margin-top:30px}
.gallery{--rh:190px;display:flex;flex-wrap:wrap;gap:12px;margin-top:60px}
@media(min-width:640px){.gallery::after{content:"";flex:10 1 0;min-width:0}}
.gallery figure{flex:var(--ar) 1 calc(var(--ar) * var(--rh));min-width:0;max-width:calc(var(--ar) * var(--rh) * 1.8)}
.g-m{aspect-ratio:var(--ar);border-radius:16px;overflow:hidden;background:var(--matte)}
.g-m img,.g-m video{width:100%;height:100%;object-fit:cover}
.gallery figcaption{font-size:16px;line-height:1.45;color:var(--text2);margin-top:8px}

/* ---------- the chip-break scene (the paper's page) ---------- */
.chipfig{--chipA:#0067d8;--chipB:#c27304;position:relative;background:var(--bg2);border-radius:var(--r-card);padding:26px 20px 22px;max-width:900px;margin-top:56px}
:root[data-theme="dark"] .chipfig{--chipA:#4aa6c9;--chipB:#f2b84b}
.chipfig canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;border-radius:inherit}
.chip-status{font-size:16px;line-height:1.45;color:var(--text2);min-height:2.9em}
.chips{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:6px}
.chip-n{font-size:16px;font-weight:600;line-height:1.3;margin-bottom:8px;min-height:2.6em;display:flex;align-items:flex-end}
.chip-box{height:clamp(92px,22vw,190px);position:relative;border:1px solid var(--chipA);border-radius:10px;
  background:repeating-linear-gradient(90deg,transparent 0 8%,var(--bg2) 8% 10%),repeating-linear-gradient(0deg,color-mix(in srgb,var(--chipA) 35%,transparent) 0 14%,var(--bg2) 14% 16.6%)}
.chipc:last-child .chip-box{border-color:var(--chipB);
  background:repeating-linear-gradient(90deg,transparent 0 8%,var(--bg2) 8% 10%),repeating-linear-gradient(0deg,color-mix(in srgb,var(--chipB) 35%,transparent) 0 14%,var(--bg2) 14% 16.6%)}
.chips-live .chip-box{border-color:transparent!important;background:none!important}
.cbars{margin-top:22px}
.cbar{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:0 10px;margin-bottom:12px}
.cbar .nm{font-size:16px}
.cbar .val{font-size:15px;color:var(--text2)}
.cbar .val b{font-size:26px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.ctrack{grid-column:1/-1;height:16px;border-bottom:1px solid var(--line);position:relative;margin-top:4px}
.ctrack i{position:absolute;left:0;top:0;bottom:0;background:var(--chipA);border-radius:3px 3px 0 0}
.cbar.b .ctrack i{background:var(--chipB)}
.chips-live .ctrack i{visibility:hidden}
.chipfig .scale{font-size:15px;color:var(--text2)}
.chipfig .big{text-align:left;margin-top:26px}
.chipfig figcaption{font-size:16px;color:var(--text2);margin-top:8px}
.chip-ctl{min-height:8px}
.chip-replay{border:0;background:none;color:var(--link);cursor:pointer;padding:0;font-size:18px}

/* ---------- the quote, then "Email me" with the headshot ---------- */
.q-top{margin-top:0}
.reach{display:grid;gap:22px;max-width:900px;margin:72px auto 0}
.reach img{width:132px;height:132px;border-radius:24px;object-fit:cover;object-position:50% 22%}
.reach h2{font-size:clamp(34px,4.6vw,56px)}
.reach .sub{max-width:30em}
.reach .mail{margin-top:12px}
.building{font-size:17px;color:var(--text2);margin-top:26px;padding-top:20px;border-top:1px solid var(--line);max-width:40em}

@media(min-width:640px){
  .gallery{--rh:230px}
  .facts>li{grid-template-columns:170px 1fr}
}
@media(min-width:800px){
  .strip{--mh:240px;--bh:128px;--minw:280px}
  .strip-track{gap:16px}
  .strip-row+.strip-row{margin-top:16px}
  .strip-ctl{margin-top:32px}
  .year a{grid-template-columns:190px 1fr;padding:22px 30px}
  .group.year>li+li::before{left:30px}
  .gallery{--rh:270px;gap:14px}
  .chipfig{padding:40px 40px 32px}
  .chip-n{font-size:17px;min-height:0}
  .reach{grid-template-columns:200px 1fr;gap:48px;align-items:start}
  .reach img{width:200px;height:200px;border-radius:28px}
  .p-hero{padding:34px 0 56px}
}
@media(min-width:1000px){
  .hero-p{padding:28px 0 96px}
  .hero-grid{grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);align-items:center;gap:40px}
  .portrait{order:2;height:min(74vh,640px)}
  .hero-p h1{font-size:clamp(42px,3.9vw,56px)}
}
@media(min-width:1200px){
  .strip{--mh:262px}
}

/* ---------- project interactives (site/js/fx.js loads one per project page) ---------- */
.fx-stage{margin:40px auto 8px;max-width:980px}
.fx-box{position:relative;min-height:120px}
.fx-stage:not(.fx-on) .fx-box{min-height:0}
