:root{--bg:#0a0a0b;--bg-2:#111113;--line:#ffffff14;--fg:#ebe8e1;--fg-2:#9a9aa3;--fg-3:#5c5c66;--accent:#ff5a1f;--accent-2:#ffb08a;--font-display:"Bricolage Grotesque", "Noto Sans SC", system-ui, sans-serif;--font-body:"Inter", "Noto Sans SC", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--max:1280px;--gutter:clamp(20px, 5vw, 72px)}*{box-sizing:border-box}html{color-scheme:dark;scroll-behavior:auto}html.lenis,html.lenis body{height:auto}.lenis.lenis-smooth{scroll-behavior:auto!important}body{background:var(--bg);color:var(--fg);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6;overflow-x:hidden}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:#0a0a0b}.grain{pointer-events:none;z-index:50;opacity:.07;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");width:200%;height:200%;animation:1.2s steps(6,end) infinite grain;position:fixed;inset:-50%}@keyframes grain{0%{transform:translate(0)}20%{transform:translate(-2%,3%)}40%{transform:translate(3%,-2%)}60%{transform:translate(-3%,-3%)}80%{transform:translate(2%,2%)}to{transform:translate(0)}}.wrap{width:min(100% - 2 * var(--gutter), var(--max));margin-inline:auto}.mono{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--fg-2);font-size:12px}.accent{color:var(--accent)}.dot{background:var(--accent);vertical-align:middle;border-radius:50%;width:7px;height:7px;margin-right:8px;animation:2.2s infinite pulse;display:inline-block;box-shadow:0 0 #ff5a1f99}@keyframes pulse{0%{box-shadow:0 0 #ff5a1f8c}70%{box-shadow:0 0 0 9px #ff5a1f00}to{box-shadow:0 0 #ff5a1f00}}.nav{z-index:40;mix-blend-mode:difference;position:fixed;top:0;left:0;right:0}.nav .wrap{justify-content:space-between;align-items:center;height:64px;display:flex}.nav .brand{font-family:var(--font-display);letter-spacing:-.02em;font-size:18px;font-weight:700}.nav ul{gap:28px;margin:0;padding:0;list-style:none;display:flex}.nav li a{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;opacity:.7;font-size:12px;transition:opacity .2s}.nav li a:hover{opacity:1}@media (width<=720px){.nav ul{display:none}}section{border-top:1px solid var(--line);padding:clamp(96px,14vh,180px) 0;position:relative}section:first-of-type{border-top:0}.sec-head{grid-template-columns:1fr auto;align-items:end;gap:24px;margin-bottom:clamp(40px,6vh,72px);display:grid}.sec-head h2{font-family:var(--font-display);letter-spacing:-.035em;margin:0;font-size:clamp(34px,5vw,64px);font-weight:600;line-height:1}.sec-head h2 em{color:var(--fg-3);font-style:normal;font-weight:400}.sec-head .idx{font-family:var(--font-mono);color:var(--fg-3);font-size:12px}.hero{align-items:end;min-height:100svh;padding-bottom:72px;display:grid;overflow:hidden}.hero .canvas{z-index:0;position:absolute;inset:0}.hero .wrap{z-index:1;position:relative}.hero h1{font-family:var(--font-display);letter-spacing:-.05em;font-variation-settings:"opsz" 96, "wdth" 100;margin:0 0 32px;font-size:clamp(72px,17vw,200px);font-weight:800;line-height:.88}.hero h1 .char{will-change:transform, opacity;display:inline-block}.hero h1 .accent-char{color:var(--accent)}.hero .lede{grid-template-columns:1.2fr 1fr;align-items:start;gap:40px;max-width:1100px;display:grid}.hero .lede .zh{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:clamp(22px,2.6vw,34px);font-weight:500;line-height:1.3}.hero .lede .en{color:var(--fg-2);max-width:42ch;margin:6px 0 0;font-size:16px}.hero .status{flex-wrap:wrap;gap:28px;margin-top:48px;display:flex}.hero .status span{font-family:var(--font-mono);letter-spacing:.04em;color:var(--fg-2);font-size:12px}.hero .status b{color:var(--fg);font-weight:500}@media (width<=820px){.hero .lede{grid-template-columns:1fr}}.work-grid{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(2,1fr);gap:1px;display:grid}.card{background:var(--bg);flex-direction:column;justify-content:space-between;min-height:300px;padding:36px 32px 32px;transition:background .35s;display:flex;position:relative;overflow:hidden}.card:hover{background:var(--bg-2)}.card:after{content:"";aspect-ratio:1;opacity:0;pointer-events:none;background:radial-gradient(closest-side,#ff5a1f38,#0000);border-radius:50%;width:60%;transition:opacity .5s,transform .6s;position:absolute;inset:auto -20% -60% auto;transform:scale(.6)}.card:hover:after{opacity:1;transform:scale(1)}.card .top{justify-content:space-between;align-items:center;margin-bottom:28px;display:flex}.card h3{font-family:var(--font-display);letter-spacing:-.03em;margin:0 0 12px;font-size:clamp(26px,2.4vw,34px);font-weight:600}.card .zh{max-width:46ch;margin:0 0 8px;font-size:16px}.card .en{color:var(--fg-2);max-width:52ch;margin:0;font-size:14px}.card .tags{flex-wrap:wrap;gap:8px;margin-top:28px;display:flex}.card .tags span{font-family:var(--font-mono);border:1px solid var(--line);color:var(--fg-2);border-radius:999px;padding:5px 9px;font-size:11px}.card .arrow{border:1px solid var(--line);width:36px;height:36px;color:var(--fg-2);border-radius:50%;place-items:center;transition:transform .35s,color .35s,border-color .35s;display:grid;position:absolute;bottom:28px;right:28px}.card:hover .arrow{color:var(--accent);border-color:var(--accent);transform:translate(4px,-4px)}@media (width<=820px){.work-grid{grid-template-columns:1fr}}.workshop-grid{grid-template-columns:1.4fr 1fr;align-items:stretch;gap:48px;display:grid}.starmap{aspect-ratio:4/3;border:1px solid var(--line);background:radial-gradient(ellipse at 30% 20%, #131316, var(--bg) 70%);position:relative;overflow:hidden}.starmap canvas{width:100%;height:100%;display:block}.starmap .hud{font-family:var(--font-mono);color:var(--fg-2);letter-spacing:.04em;font-size:11px;position:absolute;bottom:16px;left:18px}.legend{background:var(--line);border:1px solid var(--line);grid-template-columns:1fr 1fr;align-content:start;gap:1px;display:grid}.legend div{background:var(--bg);padding:22px 20px}.legend .k{font-family:var(--font-mono);color:var(--fg-3);letter-spacing:.06em;text-transform:uppercase;font-size:11px}.legend .v{font-family:var(--font-display);letter-spacing:-.03em;margin-top:8px;font-size:40px;font-weight:600;line-height:1.05}.legend .v small{color:var(--fg-2);font-size:14px;font-weight:400;font-family:var(--font-body);margin-left:6px}.groups{flex-wrap:wrap;gap:10px 22px;margin-top:28px;display:flex}.groups span{font-family:var(--font-mono);color:var(--fg-2);font-size:12px}.groups i{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:8px;display:inline-block}.workshop p.note{color:var(--fg-2);max-width:60ch;margin:28px 0 0;font-size:15px}@media (width<=960px){.workshop-grid{grid-template-columns:1fr}}.now-grid{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.now-grid>div{background:var(--bg);min-height:220px;padding:32px 28px}.now-grid h4{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);margin:0 0 18px;font-size:11px;font-weight:500}.now-grid ul{gap:10px;margin:0;padding:0;list-style:none;display:grid}.now-grid li{font-size:17px}.now-grid li.empty{color:var(--fg-3);font-size:14px}@media (width<=820px){.now-grid{grid-template-columns:1fr}}.contact h2{font-family:var(--font-display);letter-spacing:-.05em;margin:0 0 40px;font-size:clamp(40px,8vw,120px);font-weight:700;line-height:.95}.contact .links{flex-wrap:wrap;gap:14px;display:flex}.contact .links a{font-family:var(--font-mono);letter-spacing:.04em;border:1px solid var(--line);border-radius:999px;padding:14px 20px;font-size:13px;transition:border-color .3s,color .3s,background .3s}.contact .links a:hover{border-color:var(--accent);color:var(--accent)}footer{border-top:1px solid var(--line);padding:36px 0 44px}footer .wrap{flex-wrap:wrap;justify-content:space-between;gap:12px;display:flex}footer span{font-family:var(--font-mono);color:var(--fg-3);letter-spacing:.04em;font-size:11px}.reveal{opacity:0;transform:translateY(24px)}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none}.grain{animation:none}}.hero .kw{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--fg-2);margin:14px 0 0;font-size:12px}.hero .kw i{color:var(--fg-3);margin:0 10px;font-style:normal}.about-grid{grid-template-columns:1.35fr 1fr;align-items:start;gap:56px;display:grid}.about-text p{max-width:62ch;color:var(--fg);margin:0 0 20px;font-size:17px}.about-text p.lead{font-family:var(--font-display);letter-spacing:-.015em;margin-bottom:28px;font-size:clamp(22px,2.3vw,30px);font-weight:500;line-height:1.35}.about-text p.en{color:var(--fg-2);border-left:2px solid var(--accent);margin-top:28px;padding-left:16px;font-size:15px}.facts{background:var(--line);border:1px solid var(--line);grid-template-columns:1fr 1fr;gap:1px;display:grid}.facts div{background:var(--bg);padding:22px 20px}.facts .v{font-family:var(--font-display);letter-spacing:-.04em;font-size:44px;font-weight:600;line-height:1}.facts .k{font-family:var(--font-mono);color:var(--fg-3);letter-spacing:.06em;text-transform:uppercase;margin-top:10px;font-size:11px}.edu{border-top:1px solid var(--line);margin-top:28px;padding-top:22px}.edu .school{font-family:var(--font-display);letter-spacing:-.02em;margin-top:8px;font-size:20px;font-weight:600}.edu .school span{font-family:var(--font-body);color:var(--fg-2);margin-left:8px;font-size:14px;font-weight:400}.edu .degree{color:var(--fg-2);margin-top:4px;font-size:14px}@media (width<=900px){.about-grid{grid-template-columns:1fr}}.stack-note{margin:-28px 0 36px}.stack-grid{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.stack-col{background:var(--bg);padding:26px 24px 18px}.stack-col h3{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin:0 0 16px;font-size:12px;font-weight:500}.stack-col h3 span{color:var(--fg-3);margin-left:8px}.stack-col ul{margin:0;padding:0;list-style:none}.stack-col li{border-top:1px solid var(--line);padding:10px 0}.stack-col li:first-child{border-top:0}.stack-col .row{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.stack-col .n{font-family:var(--font-display);letter-spacing:-.02em;font-size:20px;font-weight:500;transition:color .25s}.stack-col .y{font-family:var(--font-mono);color:var(--fg-3);font-size:12px}.stack-col .y i{color:var(--fg-3);margin-left:3px;font-style:normal}.stack-col .meta{grid-template-rows:0fr;transition:grid-template-rows .3s;display:grid}.stack-col .meta>*{overflow:hidden}.stack-col li:hover .meta{grid-template-rows:1fr}.stack-col li:hover .n{color:var(--accent)}.stack-col .note,.stack-col .used{color:var(--fg-2);padding-top:4px;font-size:13px;display:block}.stack-col .used{font-family:var(--font-mono);color:var(--fg-3);letter-spacing:.02em;font-size:11px}@media (width<=960px){.stack-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=600px){.stack-grid{grid-template-columns:1fr}.stack-col .meta{grid-template-rows:1fr}}.timeline{margin:0;padding:0;list-style:none}.timeline li{border-top:1px solid var(--line);grid-template-columns:200px 1fr;gap:32px;padding:44px 0;display:grid}.timeline li:first-child{border-top:0;padding-top:0}.timeline .when{flex-direction:column;gap:8px;display:flex}.timeline .when .mono{color:var(--fg);font-size:13px}.timeline .when .loc{color:var(--fg-3)}.timeline h3{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:clamp(24px,2.4vw,32px);font-weight:600}.timeline h3 .en{font-family:var(--font-body);color:var(--fg-3);margin-left:10px;font-size:14px;font-weight:400}.timeline .role{font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--accent);margin-top:8px;font-size:12px}.timeline .summary{max-width:70ch;margin:18px 0 12px;font-size:16px}.timeline .bullets{color:var(--fg-2);gap:8px;max-width:76ch;margin:0;padding:0;font-size:15px;list-style:none;display:grid}.timeline .bullets li{border:0;grid-template-columns:none;padding:0 0 0 18px;display:block;position:relative}.timeline .bullets li:before{content:"—";color:var(--accent);position:absolute;left:0}.timeline .tags{flex-wrap:wrap;gap:8px;margin-top:22px;display:flex}.timeline .tags span{font-family:var(--font-mono);border:1px solid var(--line);color:var(--fg-2);border-radius:999px;padding:5px 9px;font-size:11px}@media (width<=800px){.timeline li{grid-template-columns:1fr;gap:12px}.timeline .when{flex-direction:row;gap:18px}}.card .hl{color:var(--fg-2);gap:4px;margin:14px 0 0;padding:0;font-size:14px;list-style:none;display:grid}.card .hl li{padding-left:16px;position:relative}.card .hl li:before{content:"—";color:var(--accent);position:absolute;left:0}div.card{cursor:default}
