/* ── Type system ──────────────────────────────────────────────
   Display  : Instrument Serif (EN, roman + italic) · Noto Serif SC 500 (ZH)
   Text     : Instrument Sans (EN) · Noto Sans SC (ZH)
   Label    : JetBrains Mono, uppercase, wide tracking
   Bilingual: ZH leads in roman serif; EN follows in italic serif, muted. */
@property --fg{syntax:"<color>";inherits:true;initial-value:#ecebe8}
@property --fg2{syntax:"<color>";inherits:true;initial-value:#c3c4c8}
@property --mute{syntax:"<color>";inherits:true;initial-value:#8a8d93}
@property --dim{syntax:"<color>";inherits:true;initial-value:#5c6066}
@property --line{syntax:"<color>";inherits:true;initial-value:#ffffff16}
@property --line2{syntax:"<color>";inherits:true;initial-value:#ffffff2a}
@property --glass{syntax:"<color>";inherits:true;initial-value:#ffffff10}
@property --gold{syntax:"<color>";inherits:true;initial-value:#e9c27e}
@property --bg{syntax:"<color>";inherits:true;initial-value:#07080d}
:root{
  --red:#e2492f;
  --display:"Instrument Serif","Noto Serif SC","Songti SC",serif;
  --zh-display:"Noto Serif SC","Songti SC",serif;
  --text:"Instrument Sans","Noto Sans SC","PingFang SC",system-ui,sans-serif;
  --mono:"JetBrains Mono","Noto Sans SC",ui-monospace,monospace;
  --pad:clamp(20px,4.4vw,72px);
  --ease:cubic-bezier(.2,.7,.2,1);
}
body{--fg:#f1efea;--fg2:#c9cacd;--mute:#9a9da4;--dim:#666a71;--line:#ffffff18;--line2:#ffffff2e;--glass:#ffffff12;--gold:#e9c27e;--bg:#07080d;
  transition:--fg 1s,--fg2 1s,--mute 1s,--dim 1s,--line 1s,--line2 1s,--glass 1s,--gold 1s,--bg 1s}
body[data-theme=light]{--fg:#121116;--fg2:#3a3a42;--mute:#5d5c66;--dim:#8c8a94;--line:#1211161a;--line2:#12111630;--glass:#ffffff55;--gold:#9a5f12;--bg:#f4f0f5}

*{box-sizing:border-box}
html{scroll-behavior:smooth;background:#07080d}
body{margin:0;color:var(--fg);font:400 16px/1.75 var(--text);-webkit-font-smoothing:antialiased;overflow-x:hidden;font-feature-settings:"kern","liga"}
a{color:inherit;text-decoration:none}
::selection{background:#d9b77a55}
body[data-lang=zh] .en,body[data-lang=en] .zh{display:none!important}
.cmt,.kicker,.w-type,.w-meta li,.w-no,.s-no,.st-no,.tl,.ct-k,.credit,.foot,.ld-meta,.hint,.lbl .no,.lbl .ty{font-family:var(--mono);font-weight:400;letter-spacing:.14em;text-transform:uppercase}
body[data-lang=both] h2 .en,body[data-lang=both] h3 .en,body[data-lang=both] h4 .en,.lbl i.en{font-family:var(--display);font-style:italic;font-weight:400;letter-spacing:0;text-transform:none;color:var(--mute)}

/* code-comment kicker, typed (from 天问) */
.cmt{margin:0 0 18px;font-size:11px;color:var(--gold);text-transform:none;letter-spacing:.04em;min-height:1.5em}
body[data-lang=both] .cmt .en{margin-left:1.2em;color:var(--gold);opacity:.7}
.cmt.typing::after{content:"▍";margin-left:2px;animation:blink .9s steps(1) infinite;color:var(--gold)}
@keyframes blink{50%{opacity:0}}

/* Nobel-style highlight box */
mark.hl{background:none;color:inherit;position:relative;white-space:nowrap;padding:0 .1em;isolation:isolate}
mark.hl::before{content:"";position:absolute;inset:.1em -.04em .04em;background:var(--red);transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease) .3s;z-index:-1}
mark.hl span{transition:color .4s .5s}
.in mark.hl::before{transform:scaleX(1)}
.in mark.hl span{color:#fff}

/* loader */
#loader{position:fixed;inset:0;z-index:60;background:var(--bg);display:grid;place-items:center;transition:opacity 1s .2s,visibility 0s 1.2s}
#loader.done{opacity:0;visibility:hidden}
.ld-line{width:min(420px,60vw);height:1px;background:var(--line2);position:relative;overflow:hidden}
.ld-line i{position:absolute;inset:0;width:0;background:var(--fg);transition:width .4s}
.ld-meta{position:absolute;top:calc(50% + 18px);width:min(420px,60vw);display:flex;justify-content:space-between;font-size:10px;color:var(--mute)}
#gl{position:fixed;inset:0;width:100vw;height:100vh;display:block;z-index:0;transition:opacity .25s linear}

/* top bar */
.top{position:fixed;top:0;left:0;right:0;z-index:30;display:flex;align-items:center;gap:30px;padding:20px var(--pad) 30px;background:linear-gradient(180deg,color-mix(in oklab,var(--bg) 70%,transparent),transparent)}
.brand{font:400 22px/1 var(--display);letter-spacing:.01em}
.menu{display:flex;gap:28px;margin-left:auto;font:400 14px var(--text)}
.menu a{opacity:.72;transition:opacity .2s}.menu a:hover{opacity:1}
body[data-lang=both] .menu .en{margin-left:6px;font:italic 400 15px var(--display);color:var(--mute)}
.lang{display:flex;border:1px solid var(--line2);border-radius:20px;padding:2px}
.lang button{all:unset;cursor:pointer;padding:4px 11px;border-radius:16px;font:500 11px var(--text);letter-spacing:.06em;opacity:.6}
.lang button.on{background:var(--fg);color:var(--bg);opacity:1}

/* hero */
#hero{position:relative;height:280vh;z-index:2}
.stick{position:sticky;top:0;height:100vh;overflow:hidden;pointer-events:none}
.hero-copy{position:absolute;left:var(--pad);bottom:11vh;max-width:min(600px,84vw);transition:opacity .4s,transform .4s}
.hero-line{margin:0 0 18px;font:400 clamp(22px,2.2vw,32px)/1.4 var(--display)}
.hero-line .zh{display:block;font-family:var(--zh-display);font-weight:500;font-size:.86em;line-height:1.65}
body[data-lang=both] .hero-line .en{display:block;margin-top:10px;font-style:italic;font-size:.8em;color:var(--mute)}
.kicker{font-size:10px;color:var(--dim)}
.hint{position:absolute;left:50%;bottom:5vh;transform:translateX(-50%);font-size:10px;color:var(--mute);white-space:nowrap;transition:opacity .4s}
body[data-lang=both] .hint .en::before{content:"  /  "}
.field{position:absolute;left:50%;top:12vh;transform:translateX(-50%);text-align:center;opacity:0;transition:opacity .5s;width:min(760px,90vw)}
.field .cmt{margin-bottom:10px}
.field-title{margin:0;font:400 clamp(40px,4.6vw,72px)/1 var(--display);letter-spacing:-.01em}
.field-title .zh{font-family:var(--zh-display);font-weight:500;font-size:.62em;letter-spacing:.24em;margin-right:.3em}
.labels{position:absolute;inset:0;opacity:0;transition:opacity .5s}
.lbl{position:absolute;left:0;top:0;display:grid;grid-template-columns:auto auto;justify-content:center;column-gap:10px;align-items:baseline;pointer-events:auto;padding:8px 12px;border-radius:10px;transition:background .25s;white-space:nowrap}
.lbl .no{font-size:10px;color:var(--dim)}
.lbl .t b{font:500 17px var(--zh-display)}
body[data-lang=en] .lbl .t i.en{font-style:normal;color:var(--fg);font-size:20px}
body[data-lang=both] .lbl .t i.en{margin-left:8px;font-size:18px}
.lbl .ty{grid-column:1 / 3;text-align:center;font-size:9.5px;color:var(--dim);max-height:0;overflow:hidden;transition:max-height .3s,color .3s}
body[data-lang=both] .lbl .ty .en::before{content:" · "}
.lbl.on,.lbl:hover{background:var(--glass);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.lbl.on .ty,.lbl:hover .ty{max-height:20px;color:var(--mute)}
.lbl.on .no{color:var(--gold)}

/* works — sticky stage on the left, copy scrolls on the right */
#works{position:relative;z-index:2;display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:clamp(28px,5vw,88px);padding:0 var(--pad)}
.stage-col{position:relative}
.stage{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;justify-content:center}
.amb{position:absolute;left:-30%;right:-30%;top:10%;bottom:10%;background:var(--amb,#1d3346);filter:blur(120px);opacity:.38;transition:background-color 1.4s var(--ease);pointer-events:none;border-radius:50%}
.frame{position:relative;aspect-ratio:16/9;width:100%;border-radius:4px;box-shadow:0 60px 160px -60px #000}
.layer{position:absolute;inset:0;clip-path:inset(100% 0 0 0);transition:clip-path 1.15s cubic-bezier(.77,0,.18,1);will-change:clip-path}
.layer.on{clip-path:inset(0 0 0 0)}
.layer.above{clip-path:inset(0 0 100% 0)}
.layer.below{clip-path:inset(100% 0 0 0)}
.w-clip{position:absolute;inset:0;border-radius:4px;overflow:hidden;background:#0b0c0e}
.w-clip video{width:100%;height:100%;object-fit:cover;display:block;transform:scale(1.14);transition:transform 1.6s cubic-bezier(.2,.7,.2,1)}
.layer.on .w-clip video{transform:scale(1)}
.w-clip::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px #ffffff12;pointer-events:none;border-radius:4px}
.w-media canvas.fx{position:absolute;inset:0;width:100%;height:100%;display:block}
.stage-ui{display:flex;justify-content:space-between;align-items:center;margin-top:22px;font:400 10px var(--mono);letter-spacing:.14em;color:var(--dim)}
.count{display:flex;align-items:baseline;gap:10px}
.roll{display:inline-block;height:44px;overflow:hidden}
.digits{display:flex;flex-direction:column;transition:transform .9s cubic-bezier(.77,0,.18,1)}
.digits b{display:block;height:44px;font:400 44px/44px var(--display);color:var(--fg);letter-spacing:-.01em}
.of{font-size:10px}
.ticks{display:flex;gap:6px}
.ticks i{display:block;width:22px;height:1px;background:var(--line2);transition:background .6s,width .6s var(--ease)}
.ticks i.on{background:var(--fg);width:40px}
.texts{position:relative}
.work{min-height:100vh;display:flex;align-items:center;padding:12vh 0}
.w-text{max-width:520px}
.w-text > *{transition:opacity .9s var(--ease),transform .9s var(--ease)}
.work:not(.on) .w-text > *{opacity:.18;transform:translateY(14px)}
.work.on .w-text > *:nth-child(2){transition-delay:.06s}.work.on .w-text > *:nth-child(3){transition-delay:.12s}.work.on .w-text > *:nth-child(4){transition-delay:.18s}.work.on .w-text > *:nth-child(5){transition-delay:.24s}.work.on .w-text > *:nth-child(6){transition-delay:.3s}.work.on .w-text > *:nth-child(7){transition-delay:.36s}
.fx-hint{position:absolute;right:14px;top:12px;z-index:3;font:400 9.5px var(--mono);letter-spacing:.14em;text-transform:uppercase;color:#ffffffb0;padding:4px 9px;border-radius:12px;background:#0007;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;transition:opacity .6s .6s}
.layer.on .fx-hint{opacity:1}
.w-type{font-size:10.5px;color:var(--mute)}
body[data-lang=both] .fx-hint .en::before{content:" · "}
body[data-lang=both] .w-type .en::before{content:" · "}
.w-title{margin:16px 0 8px;font-weight:400;position:relative}
.w-title .zh{display:block;font:500 clamp(36px,3.8vw,60px)/1.18 var(--zh-display);letter-spacing:.02em}
.w-title .en{display:block;font:400 clamp(34px,3.6vw,58px)/1.02 var(--display);letter-spacing:-.005em}
body[data-lang=both] .w-title .en{margin-top:6px;font-size:clamp(24px,2.2vw,34px)}
.w-sub{margin:4px 0 26px;font-size:14px;color:var(--mute)}
body[data-lang=both] .w-sub .en{font:italic 400 16px var(--display)}
body[data-lang=both] .w-sub .en::before{content:"  "}
.w-body p{margin:0 0 12px;max-width:52ch;font-size:15.5px;line-height:1.85}
body[data-lang=both] .w-body p.en{font-size:14.5px;line-height:1.7;color:var(--mute)}
.w-meta{display:flex;flex-wrap:wrap;gap:6px;list-style:none;padding:0;margin:20px 0 0}
.w-meta li{font-size:10px;border:1px solid var(--line);border-radius:20px;padding:4px 11px;color:var(--fg2);letter-spacing:.1em}
.w-stats{display:flex;gap:44px;margin:26px 0 30px}
.w-stats dt{font:400 46px/1 var(--display)}
.w-stats dd{margin:6px 0 0;font-size:12px;color:var(--mute)}
body[data-lang=both] .w-stats dd .en::before,body[data-lang=both] .numbers dd .en::before{content:" · "}
.btn{display:inline-flex;align-items:center;gap:10px;padding:12px 20px 12px 22px;border-radius:40px;border:1px solid var(--line2);font:500 13.5px var(--text);letter-spacing:.02em;transition:background .25s,color .25s,border-color .25s;pointer-events:auto}
.btn:hover{background:var(--fg);color:var(--bg);border-color:var(--fg)}
body[data-lang=both] .btn .en{font:italic 400 15px var(--display)}
body[data-lang=both] .btn .en::before{content:" · "}
.arr{width:14px;height:14px;transition:transform .25s}.btn:hover .arr{transform:translate(2px,-2px)}

/* per-project motion */
.shapes{position:absolute;right:18px;top:16px;display:flex;align-items:flex-end;gap:10px;z-index:4;pointer-events:none}
.shapes i{display:block;width:24px;height:24px;transition:transform .7s var(--ease)}
.shapes .c{border-radius:50%;background:#2c5cb8}.shapes .s{background:var(--red)}.shapes .t{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:24px solid #f2c230}
.shapes{opacity:0;transition:opacity .6s .5s}.layer.on .shapes{opacity:1}
.layer.on .shapes .c{animation:bob 3.2s var(--ease) infinite}.layer.on .shapes .s{animation:spin 6s linear infinite}.layer.on .shapes .t{animation:bob 3.2s var(--ease) .4s infinite}
@keyframes bob{50%{transform:translateY(-8px)}}@keyframes spin{to{transform:rotate(360deg)}}
.peek{position:absolute;right:22px;bottom:-4px;width:60px;height:60px;z-index:4;background:url(media/worm.png) 0 0/720px 60px;image-rendering:pixelated;animation:sp 1.4s steps(12) infinite;transform:translateY(100%);opacity:0;transition:transform .8s var(--ease),opacity .4s}
.layer.on .peek{transform:translateY(0);opacity:1;transition-delay:.7s}
@keyframes sp{to{background-position:-720px 0}}
.w-title canvas.pt{position:absolute;pointer-events:none}

/* sections */
section#about,section#method{position:relative;z-index:2;padding:18vh var(--pad)}
.sec-head{margin-bottom:8vh}
.sec-head h2{margin:0;font:400 clamp(56px,7vw,112px)/1 var(--display);letter-spacing:-.015em}
.sec-head h2 .zh{font-family:var(--zh-display);font-weight:500;font-size:.62em;letter-spacing:.14em;margin-right:.35em}
body[data-lang=zh] .sec-head h2 .zh{font-size:.8em}
.about-lead{position:relative;max-width:1000px}
.about-lead p{margin:0;font:500 clamp(26px,2.9vw,44px)/1.6 var(--zh-display)}
.about-lead p.en{font:400 clamp(26px,2.6vw,40px)/1.35 var(--display);margin-top:22px}
body[data-lang=both] .about-lead p.en{font-style:italic;color:var(--mute);font-size:clamp(20px,2vw,30px)}
.about-lead.reading p{color:var(--dim)}
body[data-lang=both] .about-lead.reading p.en{color:var(--dim)}
::highlight(worm){color:var(--fg)}
.read-caret{position:absolute;left:0;top:0;height:1px;width:0;background:linear-gradient(90deg,transparent,var(--gold));opacity:0;transition:opacity .4s;pointer-events:none}
.about-lead.reading .read-caret{opacity:.9}
.worm{position:absolute;left:-62px;top:0;width:44px;height:44px;pointer-events:auto;cursor:pointer;opacity:0;transition:opacity .5s,transform .7s cubic-bezier(.45,0,.2,1);z-index:3}
.worm.on{opacity:1}
.worm-sp{position:absolute;inset:0;background:url(media/worm.png) 0 0/528px 44px;image-rendering:pixelated;animation:sp44 1.3s steps(12) infinite}
@keyframes sp44{to{background-position:-528px 0}}
.bubble{position:absolute;left:52px;top:4px;background:#f4efe4;color:#111;border-radius:10px;padding:6px 12px;font:500 12.5px var(--text);white-space:nowrap;opacity:0;transform:translateX(-6px);transition:opacity .35s,transform .35s var(--ease)}
.bubble.on{opacity:1;transform:none}
.bubble::before{content:"";position:absolute;left:-5px;top:12px;border:5px solid transparent;border-right-color:#f4efe4;border-left:0}
.motto{margin:10vh 0 0 auto;max-width:520px;padding-left:24px;border-left:1px solid var(--line2)}
.motto p{margin:0 0 6px;font:400 22px/1.5 var(--display)}
.motto p.zh{font:500 18px/1.8 var(--zh-display)}
body[data-lang=both] .motto p.en{font-style:italic;color:var(--mute);font-size:19px}
.motto cite{display:block;margin-top:12px;font:400 10px var(--mono);letter-spacing:.16em;color:var(--dim);font-style:normal}
.numbers{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin:13vh 0 0;padding:30px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.numbers dt{font:400 clamp(56px,6.6vw,104px)/.95 var(--display);letter-spacing:-.02em}
.numbers dd{margin:10px 0 0;font-size:12.5px;color:var(--mute)}
.skills{display:grid;grid-template-columns:repeat(4,1fr);gap:32px;margin-top:11vh}
.skill,.steps li{padding-top:20px;border-top:1px solid var(--line2)}
.s-no,.st-no{font-size:10px;color:var(--dim)}
.skill h4,.steps h4{margin:14px 0 12px;font-weight:400}
.skill h4 .zh,.steps h4 .zh{font:500 21px/1.4 var(--zh-display)}
.skill h4 .en,.steps h4 .en{font:400 24px/1.2 var(--display)}
body[data-lang=both] .skill h4 .en,body[data-lang=both] .steps h4 .en{display:block;margin-top:4px;font-size:18px}
.skill p,.steps p{margin:0 0 8px;font-size:14.5px;line-height:1.8}
body[data-lang=both] .skill p.en,body[data-lang=both] .steps p.en{font-size:13.5px;color:var(--mute)}
.tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10vh}
.tl{font-size:10px;color:var(--dim);margin-right:12px}
body[data-lang=both] .tl .en::before{content:" · "}
.chip{border:1px solid var(--line);border-radius:20px;padding:6px 14px;font-size:13px}
.routes{position:relative;height:clamp(120px,14vw,190px);margin:0 0 7vh}
.routes canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.r-end{position:absolute;right:0;top:50%;transform:translate(0,14px);font:400 10px var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--mute);opacity:0;transition:opacity .8s var(--ease)}
.routes.done .r-end{opacity:1}
body[data-lang=both] .r-end .en::before{content:" · "}
.steps li{opacity:.0;transform:translateY(16px);transition:opacity .9s var(--ease),transform .9s var(--ease),border-color .9s}
.steps li.lit{opacity:1;transform:none;border-top-color:var(--line2)}
.steps{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(4,1fr);gap:32px}

/* say hi — mascot */
#say{position:relative;z-index:2;min-height:130vh;display:grid;align-items:center;padding:24vh var(--pad);overflow:hidden}
.mascot{position:absolute;inset:0;width:100%;height:100%;display:block;-webkit-mask-image:linear-gradient(180deg,transparent 0,#000 26%,#000 74%,transparent 100%),radial-gradient(120% 90% at 66% 50%,#000 55%,transparent 100%);-webkit-mask-composite:source-in;mask-image:linear-gradient(180deg,transparent 0,#000 26%,#000 74%,transparent 100%),radial-gradient(120% 90% at 66% 50%,#000 55%,transparent 100%);mask-composite:intersect}
#say::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,color-mix(in oklab,var(--bg) 85%,transparent) 0%,color-mix(in oklab,var(--bg) 60%,transparent) 28%,transparent 60%);z-index:1;pointer-events:none}
.say-in{position:relative;z-index:2;max-width:560px}
.say-title{margin:0;font:400 clamp(64px,8vw,128px)/.95 var(--display);letter-spacing:-.02em}
.say-title .zh{display:block;font:500 .42em/1.6 var(--zh-display);letter-spacing:.3em}
body[data-lang=zh] .say-title .zh{font-size:.6em}
body[data-lang=both] .say-title .en{font-style:normal;color:var(--fg)}
.say-sub{margin:20px 0 34px;color:var(--mute);font-size:15px}
body[data-lang=both] .say-sub .en{display:block;font:italic 400 17px var(--display)}
.cts{list-style:none;margin:0;padding:0;border-top:1px solid var(--line2)}
.ct{display:grid;grid-template-columns:120px 1fr auto;align-items:center;gap:16px;padding:15px 0;border-bottom:1px solid var(--line2)}
.ct-k{font-size:10px;color:var(--mute)}
body[data-lang=both] .ct-k .en::before{content:" · "}
.ct-v{font:400 26px/1.1 var(--display);letter-spacing:.01em;word-break:break-all}
a.ct-v:hover{color:var(--gold)}
.ct-a{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font:500 12px var(--text);padding:7px 14px;border:1px solid var(--line2);border-radius:20px;transition:background .2s,color .2s}
.ct-a:hover{background:var(--fg);color:var(--bg)}
body[data-lang=both] .ct-a .en::before{content:" · "}
.ct-a.done{background:var(--gold);color:#000;border-color:var(--gold)}
.credit{margin:22px 0 0;font-size:9.5px;color:var(--dim);letter-spacing:.1em}
body[data-lang=both] .credit .en{display:none}

/* finale */
#contact{position:relative;height:240vh;z-index:2}
.contact-in{position:absolute;left:0;right:0;bottom:12vh;text-align:center;opacity:0;transform:translateY(20px);transition:opacity .8s,transform .8s;pointer-events:auto;padding:0 var(--pad)}
#contact.whole .contact-in{opacity:1;transform:none}
.c-title{margin:0 0 30px;font:400 clamp(48px,6.4vw,104px)/1 var(--display);letter-spacing:-.015em}
.c-title .zh{display:block;font:500 .4em/1.8 var(--zh-display);letter-spacing:.3em}
body[data-lang=zh] .c-title .zh{font-size:.7em;letter-spacing:.12em}
body[data-lang=both] .c-title .en{font-style:normal;color:var(--fg)}
.btn.big{padding:15px 26px 15px 30px;font-size:15px;background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.foot{position:absolute;left:var(--pad);right:var(--pad);bottom:22px;display:flex;justify-content:space-between;gap:20px;font-size:10px;color:var(--dim);pointer-events:auto}
.foot a:hover{color:var(--fg)}

/* FX Prompt Foundry case files — horizontal, pinned */
#cases{position:relative;z-index:2}
.cases-pin{position:sticky;top:0;height:100vh;overflow:hidden}
.track{display:flex;align-items:center;gap:clamp(40px,5vw,96px);height:100%;padding:0 var(--pad);will-change:transform;width:max-content}
.panel{flex:none;margin:0;position:relative}
.p-intro{width:min(520px,38vw)}
.cs-title{margin:0 0 22px;font:400 clamp(44px,4.8vw,76px)/1.02 var(--display);letter-spacing:-.01em}
.cs-title .zh{display:block;font:500 .5em/1.6 var(--zh-display);letter-spacing:.12em}
body[data-lang=both] .cs-title .en{font-style:normal;color:var(--fg)}
.cs-title.sm{font-size:clamp(36px,3.6vw,56px)}
.cs-sub p{margin:0 0 10px;font-size:15px;line-height:1.8;max-width:46ch}
body[data-lang=both] .cs-sub p.en{color:var(--mute);font-size:14px}
.cs-go{margin:34px 0 0;font:400 10px var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
body[data-lang=both] .cs-go .en{display:none}
.pm{position:relative;border-radius:4px;box-shadow:0 60px 140px -60px #000}
.pm .w-clip{position:relative;inset:auto}
.p-film .pm,.p-samsara .pm{width:min(60vw,1000px);aspect-ratio:16/9}
.p-film .w-clip,.p-samsara .w-clip{width:100%;height:100%}
.p-fold .pm{height:min(74vh,760px);aspect-ratio:9/16}
.p-fold .w-clip{width:100%;height:100%}
.p-prompt .pm{width:min(46vw,720px)}
.panel figcaption{display:grid;grid-template-columns:auto 1fr;column-gap:16px;margin-top:20px;max-width:620px}
.p-fold{display:flex;align-items:flex-end;gap:36px}
.p-fold figcaption{width:300px;grid-template-columns:1fr;margin:0}
.cs-tag{font:400 10px var(--mono);letter-spacing:.16em;color:var(--gold);padding-top:6px}
.panel figcaption h4{margin:0 0 8px;font-weight:400}
.panel figcaption h4 .zh{font:500 22px/1.3 var(--zh-display)}
.panel figcaption h4 .en{font:400 24px/1.2 var(--display)}
body[data-lang=both] .panel figcaption h4 .en{margin-left:10px;font-size:20px}
.panel figcaption p{grid-column:2;margin:0 0 6px;font-size:14px;line-height:1.75;color:var(--fg2)}
.p-fold figcaption p,.p-fold figcaption h4{grid-column:1}
body[data-lang=both] .panel figcaption p.en{color:var(--mute);font-size:13px}
.samsara,.fold{cursor:crosshair}
.samsara img,.fold img,.samsara canvas,.fold canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.cs-hint{position:absolute;left:0;right:0;bottom:22px;text-align:center;font:500 13px var(--zh-display);letter-spacing:.42em;color:#ffffffc0;pointer-events:none;transition:opacity .8s;text-shadow:0 1px 12px #000}
.cs-hint .en{font:italic 400 15px var(--display);letter-spacing:.06em;margin-left:12px}
.cs-hint.gone{opacity:0}
.placard{position:absolute;left:0;right:0;bottom:56px;text-align:center;font:500 12px var(--zh-display);letter-spacing:.3em;color:#f5ecd6eb;text-shadow:0 1px 14px #000c;pointer-events:none;transition:opacity .5s}
.fold-dot{position:absolute;right:12px;top:0;width:5px;height:5px;margin-top:-2px;border-radius:50%;background:#f5ecd6;box-shadow:0 0 10px #f5ecd6;transition:top .1s linear}
.fold::after{content:"";position:absolute;right:14px;top:8%;bottom:8%;width:1px;background:#f5ecd630}
.term{background:#07100c;border:1px solid #9fe8b822;border-radius:6px;overflow:hidden}
.term-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid #9fe8b81a;font:400 10px var(--mono);letter-spacing:.14em;color:#9fe8b8a0;text-transform:uppercase}
.term-bar .ct-a{font-size:11px;padding:5px 12px;border-color:#9fe8b840;color:#cfeedd}
.term-body{margin:0;padding:22px 22px 26px;min-height:15em;white-space:pre-wrap;font:400 13px/1.85 var(--mono);color:#a9e9c2}
.term-body.typing::after{content:"▍";color:#9fe8b8;animation:blink .9s steps(1) infinite}
.guards{border-top:1px solid #9fe8b81a;overflow:hidden;padding:12px 0;-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
.g-row{display:flex;gap:44px;width:max-content;animation:tick 38s linear infinite;font:400 10.5px var(--mono);letter-spacing:.12em;color:#7e9a8b}
.g-row s{text-decoration:line-through;text-decoration-color:#e2492f;color:#6c7a73}
.g-row b{font-weight:400;color:#bdf0d1}
@keyframes tick{to{transform:translateX(-50%)}}
.p-shop{width:min(520px,40vw)}
.shop{list-style:none;padding:0;margin:0 0 34px;border-top:1px solid var(--line2)}
.shop li{display:grid;grid-template-columns:56px 1fr auto;gap:14px;align-items:baseline;padding:13px 0;border-bottom:1px solid var(--line2)}
.sh-t{font:400 10px var(--mono);letter-spacing:.12em;color:var(--gold)}
.sh-n .zh{font:500 15px var(--zh-display)}
body[data-lang=both] .sh-n .en{display:block;font:italic 400 15px var(--display);color:var(--mute)}
.sh-p{font:400 20px var(--display);white-space:nowrap}
.cs-progress{position:absolute;left:var(--pad);right:var(--pad);bottom:28px;height:1px;background:var(--line2)}
.cs-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,#9fe8b8,var(--gold))}
.btn.ghost{border-style:dashed}
.btn .down{display:inline-block;transition:transform .25s}.btn:hover .down{transform:translateY(2px)}
@media (max-width:860px){
  #cases{height:auto!important}
  .cases-pin{position:relative;height:auto;overflow:visible}
  .track{flex-direction:column;align-items:stretch;width:auto;transform:none!important;gap:12vh;padding:14vh var(--pad)}
  .p-intro,.p-shop,.p-prompt .pm,.p-film .pm,.p-samsara .pm{width:100%}
  .p-fold .pm{height:auto;width:100%;max-width:420px}
  .p-fold{flex-direction:column;align-items:stretch;gap:0}
  .p-fold figcaption{width:auto;margin-top:20px}
  .p-fold .pm{align-self:center;width:min(100%,420px);aspect-ratio:9/16}
  .cs-progress{display:none}
}

/* Agent.Space: where the work was made */
.asx{width:1em;height:1em;fill:currentColor;flex:none;display:inline-block;vertical-align:-.12em}
.studio{display:flex;align-items:center;gap:16px;margin-top:9vh;padding:20px 24px;border:1px solid var(--line2);border-radius:16px;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);transition:border-color .4s,transform .6s var(--ease),background .4s;max-width:880px}
.studio .asx{width:26px;height:26px;transition:transform .9s var(--ease)}
.studio:hover{border-color:var(--fg);transform:translateY(-2px)}
.studio:hover .asx{transform:rotate(-90deg)}
.st-line{flex:1;font:500 17px/1.5 var(--zh-display)}
.st-line .en{font:400 19px/1.4 var(--display)}
body[data-lang=both] .st-line .en{display:block;font-style:italic;color:var(--mute);font-size:16px}
.st-cta{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;font:500 13px var(--text);padding:9px 16px;border-radius:30px;background:var(--fg);color:var(--bg)}
body[data-lang=both] .st-cta .en{display:none}
.chip-asx{display:inline-flex;align-items:center;gap:7px;transition:background .3s,color .3s}
.chip-asx:hover{background:var(--fg);color:var(--bg)}
.foot-asx{display:inline-flex;align-items:center;gap:7px}
@media (max-width:860px){.studio{flex-wrap:wrap}.st-line{flex-basis:calc(100% - 50px)}}

/* persistent Agent.Space credit in the top bar */
.made{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 9px;border:1px solid var(--line2);border-radius:20px;font:500 12px var(--text);letter-spacing:.01em;color:var(--fg);background:var(--glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .3s,color .3s,border-color .3s}
.made .asx{width:14px;height:14px;transition:transform .8s var(--ease)}
.made i{font:italic 400 14px var(--display);color:var(--mute);margin-right:2px}
.made:hover{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.made:hover i{color:inherit;opacity:.7}
.made:hover .asx{transform:rotate(-90deg)}
@media (max-width:860px){.made{padding:6px;margin-left:auto}.made-t{display:none}.lang{margin-left:0}}

.lbl .thumb{grid-column:1 / 3;justify-self:center;width:132px;aspect-ratio:16/9;object-fit:cover;border-radius:6px;margin-bottom:8px;box-shadow:0 18px 40px -18px #0006;transition:transform .5s var(--ease)}
.lbl.on .thumb,.lbl:hover .thumb{transform:scale(1.08)}
@media (max-width:860px){.lbl .thumb{width:92px}}
.rv{opacity:0;transform:translateY(26px);transition:opacity 1.1s var(--ease),transform 1.1s var(--ease)}
.rv.in{opacity:1;transform:none}
@media (max-width:860px){
  .menu{display:none}.lang{margin-left:auto}
  #works{grid-template-columns:1fr;gap:0}
  .stage-col{position:sticky;top:58px;z-index:3;height:auto}
  .stage{position:relative;height:auto;padding:10px 0 12px;background:color-mix(in oklab,var(--bg) 94%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
  .stage::after{content:"";position:absolute;left:0;right:0;bottom:-36px;height:36px;background:linear-gradient(var(--bg),transparent);pointer-events:none}
  .amb{display:none}.stage-ui{margin-top:10px}.roll,.digits b{height:28px}.digits b{font-size:28px;line-height:28px}
  .work{min-height:86vh;padding:6vh 0 10vh;align-items:flex-start}
  .worm{display:none}
  .numbers,.skills,.steps{grid-template-columns:1fr 1fr}
  .lbl .t b{font-size:14px}body[data-lang=both] .lbl .t i.en{display:none}
  .hint{white-space:normal;width:86vw;text-align:center;line-height:2}
  .field{top:9vh}.field-title{font-size:38px}
  .ct{grid-template-columns:1fr auto}.ct-k{grid-column:1 / 3}
  #say::before{background:linear-gradient(0deg,color-mix(in oklab,var(--bg) 92%,transparent) 0%,color-mix(in oklab,var(--bg) 80%,transparent) 50%,transparent 64%)}
  #say{align-items:end;padding-top:52vh;min-height:auto}
  .mascot{-webkit-mask-image:linear-gradient(180deg,transparent 0,#000 12%,#000 50%,transparent 62%);mask-image:linear-gradient(180deg,transparent 0,#000 12%,#000 50%,transparent 62%)}
  .foot-mid{display:none}
}
@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}html{scroll-behavior:auto}}
/* no orphans after ablation: balance short multi-line copy */
.hero-line,.about-lead p,.cs-title,.c-title,.say-title,.w-title{text-wrap:balance}
.w-body p,.panel figcaption p,.motto p{text-wrap:pretty}
/* site-wide background: ambient light + glass dust + film grain */
#bg-amb{position:fixed;inset:0;width:100vw;height:100vh;display:block;z-index:0;pointer-events:none}
#bg-amb{image-rendering:auto}
.amb{display:none}
body::after{content:"";position:fixed;inset:-50%;z-index:40;pointer-events:none;opacity:.045;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");animation:grain 1s steps(6) infinite}
@keyframes grain{0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}60%{transform:translate(-2%,-1%)}80%{transform:translate(3%,3%)}100%{transform:translate(0,0)}}
@media (prefers-reduced-motion:reduce){body::after{animation:none}}
/* case-files progress: a short centred bar that never crosses content */
.cs-progress{left:50%;right:auto;width:180px;transform:translateX(-50%);bottom:22px}
.track{padding-top:72px;padding-bottom:72px;box-sizing:border-box}
