:root{color-scheme:light;--wall:#e4ebe6;--wall-2:#d8e1db;--paper:#f6f8f6;--paper-2:#ebefec;--card:#fff;--night:#23241f;--night-2:#34352d;--ink:#1a2022;--ink-2:#3c4548;--ink-3:#596366;--ink-4:#7d878a;--bone:#eef1ee;--bone-2:#c6ccc8;--bone-3:#9aa19d;--line:#d6ddd8;--line-soft:#e4e9e5;--line-strong:#aeb8b2;--line-dark:rgba(238,241,238,.18);--line-dark-soft:rgba(238,241,238,.1);--red:#cb3317;--red-deep:#a02710;--red-wash:#f8e4df;--red-dark:#ff8a66;--pen:#2f4fa8;--pen-2:#5a76c8;--pen-dark:#aebff2;--marker:rgba(47,79,168,.16);--pine:#6a6353;--pine-2:#8f8875;--pine-3:#4c4739;--bronze:#3b372b;--bronze-2:#5b5544;--font-display:"Host Grotesk","Helvetica Neue",Arial,sans-serif;--font-text:"Host Grotesk","Helvetica Neue",Arial,sans-serif;--font-mono:"Host Grotesk","Helvetica Neue",Arial,sans-serif;--font-code:ui-monospace,"SF Mono",Menlo,Consolas,monospace;--font-hand:"Nanum Pen Script","Bradley Hand",cursive;--font-cjk:"PingFang SC","Noto Sans SC","Source Han Sans SC",sans-serif;--font-cjk-hand:"Ma Shan Zheng","Songti SC","Noto Serif SC",serif;--gutter:clamp(20px,5vw,72px);--measure:1440px;--topbar-h:68px;--section:clamp(88px,12vw,184px);--ease-out:cubic-bezier(.16,1,.3,1);--shadow-card:0 2px 4px rgba(26,32,34,.05),0 16px 40px rgba(26,32,34,.1);--shadow-lift:var(--shadow-card)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scrollbar-color:var(--pine-2) transparent;scrollbar-width:thin}body{font-family:var(--font-text);font-size:17px;line-height:1.62;color:var(--ink-2);background-color:var(--paper);font-variant-numeric:lining-nums;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip}::-moz-selection{background:#2f4fa833;color:var(--ink)}::selection{background:#2f4fa833;color:var(--ink)}:focus-visible{outline:2px solid var(--pen);outline-offset:3px}[id]{scroll-margin-top:calc(var(--topbar-h) + 16px)}img{max-width:100%;display:block}a{color:inherit;text-decoration-line:underline;text-decoration-thickness:1px;text-decoration-color:var(--line-strong);text-underline-offset:.22em;transition:color .2s,text-decoration-color .2s}a:hover{color:var(--pen);text-decoration-color:currentColor}code,pre{font-family:var(--font-code);font-size:.9em}mark.hl{color:inherit;background:linear-gradient(transparent 64%,var(--marker) 64%)}.mono{font-size:.86rem;color:var(--ink-3)}.hand{font-family:var(--font-hand);font-size:1.6rem;line-height:1.05;color:var(--pen)}[lang=zh]{font-family:var(--font-cjk)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;top:10px;left:10px;z-index:300;background:var(--ink);color:var(--paper);padding:10px 18px;text-decoration:none;transform:translateY(-300%);transition:transform .3s var(--ease-out)}.skip-link:focus{transform:translateY(0);color:var(--paper)}.topbar{position:fixed;inset:0 0 auto;z-index:100;height:var(--topbar-h);display:flex;align-items:center;gap:clamp(20px,3.4vw,52px);padding:0 var(--gutter);transition:transform .4s var(--ease-out),background-color .25s}.topbar.is-scrolled{background:var(--paper)}.topbar.is-hidden{transform:translateY(-100%)}body.menu-open .topbar{background:transparent;transform:none}.topbar-brand{display:inline-flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none}.topbar-mark{width:34px;height:34px;transition:transform .6s var(--ease-out)}.topbar-brand:hover .topbar-mark{transform:rotate(90deg)}.topbar-sig{font-weight:500;font-size:1.06rem;letter-spacing:-.01em}.topbar-cn{font-size:.8rem;color:var(--ink-3)}.topbar-nav{display:flex;flex:1;align-items:center;gap:clamp(14px,2.2vw,30px);font-size:.98rem}.menu-toggle,.topbar-nav a{color:var(--ink);text-decoration:none}.menu-toggle:hover,.topbar-nav a:hover{color:var(--pen)}.menu-toggle{display:inline-flex;align-items:center;gap:10px;margin-left:auto;font:inherit;background:none;border:0;cursor:pointer;transition:color .2s}.menu-toggle-lines{display:grid;gap:5px;width:22px}.menu-toggle-lines i{display:block;height:1.5px;background:currentColor;transition:transform .4s var(--ease-out)}body.menu-open .menu-toggle-lines i:first-child{transform:translateY(3.25px) rotate(45deg)}body.menu-open .menu-toggle-lines i:last-child{transform:translateY(-3.25px) rotate(-45deg)}.menu-overlay{position:fixed;inset:0;z-index:90;overflow-y:auto;background:var(--wall);clip-path:inset(0 0 100% 0);visibility:hidden;transition:clip-path .6s cubic-bezier(.76,0,.24,1),visibility 0s linear .6s}body.menu-open .menu-overlay{clip-path:inset(0);visibility:visible;transition:clip-path .6s cubic-bezier(.76,0,.24,1),visibility 0s}.menu-grid{min-height:100%;display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:clamp(32px,6vw,96px);align-items:end;padding:calc(var(--topbar-h) + 28px) var(--gutter) clamp(32px,5vw,64px)}.menu-list{list-style:none}.menu-list a{display:flex;align-items:baseline;gap:18px;padding:.06em 0;color:var(--ink);text-decoration:none;font-size:clamp(2.1rem,min(5.6vw,8.2vh),4.6rem);font-weight:300;line-height:1.14;letter-spacing:-.03em}.menu-list a:hover{color:var(--pen)}.menu-note{opacity:0;transform:translate(-8px);transition:opacity .25s,transform .4s var(--ease-out);letter-spacing:0}.menu-list a:focus-visible .menu-note,.menu-list a:hover .menu-note{opacity:1;transform:none}.menu-aside{display:grid;gap:18px;justify-items:start}.menu-mail{font-size:1.3rem;color:var(--ink)}.menu-contact-actions,.menu-social{display:flex;flex-wrap:wrap;gap:8px 22px}.menu-cv,.menu-vcard{font:inherit;color:var(--ink);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--line-strong);text-underline-offset:.22em}.menu-vcard:hover{color:var(--pen)}.btn{display:inline-flex;align-items:center;gap:.5em;padding:.72em 1.15em;font:inherit;font-size:.98rem;font-weight:500;line-height:1.2;text-decoration:none;border:0;border-radius:2px;cursor:pointer;transition:background-color .2s,color .2s,box-shadow .2s}.btn-primary{background:var(--ink);color:var(--paper)}.btn-primary:hover{background:var(--pen);color:#fff}.btn-ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-strong)}.btn-ghost:hover{color:var(--pen);box-shadow:inset 0 0 0 1px var(--pen)}.btn:disabled{opacity:.45;cursor:not-allowed}.wall{background:var(--wall)}.hero{--branch-h:min(50svh,36vw,620px);--slot-w:clamp(190px,18vw,264px);position:relative;min-height:max(100svh,760px);display:grid;grid-template-columns:auto minmax(0,1fr);align-content:start;-moz-column-gap:clamp(20px,3.4vw,52px);column-gap:clamp(20px,3.4vw,52px);padding:calc(var(--topbar-h) + clamp(16px,3.4vh,40px)) var(--gutter) 0;overflow:clip}.hero-cn{writing-mode:vertical-rl;font-family:var(--font-cjk-hand);font-size:clamp(4.4rem,8.4vw,7.8rem);line-height:1;color:var(--ink);-webkit-user-select:none;-moz-user-select:none;user-select:none}.hero-cn,.hero-copy{position:relative;z-index:2}.hero-copy{min-width:0;max-width:46rem;padding-top:.4rem}.hero-name{font-size:clamp(3rem,6.5vw,6rem);font-weight:300;line-height:1.02;letter-spacing:-.04em;color:var(--ink)}.hero-line{display:block}.hero-chip{position:relative;display:inline-block}.hero-circle{position:absolute;left:-.16em;top:-.03em;width:calc(100% + .32em);height:calc(100% + .08em);overflow:visible;color:var(--red);pointer-events:none}.hero-circle path,.sketch-u-svg path{vector-effect:non-scaling-stroke}.hero-tagline{margin-top:clamp(16px,2.6vh,28px);max-width:23em;font-size:clamp(1.25rem,1.85vw,1.65rem);line-height:1.3;letter-spacing:-.012em;color:var(--ink);text-wrap:pretty}.sketch-u{position:relative;display:inline-block}.sketch-u-svg{position:absolute;left:0;right:0;bottom:-.2em;width:100%;height:.34em;overflow:visible;color:var(--red)}.hero-role{margin-top:clamp(10px,1.6vh,16px);font-size:.94rem;line-height:1.5;color:var(--ink-3)}.hero-doors{display:flex;flex-wrap:wrap;gap:.3em 1.5em;margin-top:clamp(16px,2.8vh,30px);font-size:clamp(1.14rem,1.5vw,1.36rem);font-weight:500;letter-spacing:-.01em}.door{position:relative;padding-bottom:.12em;color:var(--ink);text-decoration:none}.door:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;background:var(--pine);transform-origin:left;transition:transform .5s var(--ease-out),background-color .2s}.door:hover{color:var(--pen)}.door:hover:after{background:var(--pen);transform:scaleX(.32)}.hero-portrait{position:absolute;z-index:2;left:max(calc(var(--gutter) + var(--branch-h)*2.35 - var(--slot-w)/2),60vw);top:clamp(96px,20vh,180px);width:var(--slot-w)}.hero-photo{width:100%;height:auto;aspect-ratio:1/1.25;-o-object-fit:cover;object-fit:cover;border-radius:3px}.hero-caption{margin-top:8px;text-align:center}.hero-badge-canvas,.hero.has-badge .hero-portrait>*{opacity:0;pointer-events:none}.hero-badge-canvas{position:absolute;top:0;left:0;z-index:3;transition:opacity .6s var(--ease-out)}.hero.has-badge-live .hero-badge-canvas{opacity:1}.hero.is-badge-hover{cursor:grab}.hero.is-badge-grabbing,.hero.is-badge-grabbing *{cursor:grabbing!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.hero-badge-hint{display:none;position:absolute;top:calc(var(--badge-bottom, 60%) - 190px);left:calc(var(--badge-right, 70%) + 16px);z-index:4;width:5.6em;font-size:1.5rem;transform:rotate(-4deg);pointer-events:none}.hero-arrow{display:block;width:62px;margin:4px 0 0 -14px}.hero.has-badge-live .hero-badge-hint{display:block;animation:hint-in .9s var(--ease-out) 2.6s both;transition:opacity .5s var(--ease-out)}.hero.has-badge-played .hero-badge-hint{opacity:0}@keyframes hint-in{0%{opacity:0;transform:rotate(-4deg) translateY(8px)}}.branch{position:absolute;left:0;right:0;bottom:0;padding-left:var(--gutter);pointer-events:none}.branch-svg{position:relative;z-index:1;display:block;width:100%;height:var(--branch-h);overflow:visible;pointer-events:auto;touch-action:pan-y}.branch.has-active .branch-svg{cursor:pointer}.branch-reveal{fill:none;stroke:#fff;stroke-width:60}.branch-limb{fill:var(--pine)}.branch-limb-shade{fill:var(--pine-3)}.branch-foot,.branch-vessel{fill:var(--bronze)}.branch-rim{fill:var(--bronze-2)}.branch-water{fill:var(--wall-2)}.branch-label{font-family:var(--font-hand);font-size:24px;fill:var(--pine)}.bud a{cursor:pointer}.bud-stem{fill:none;stroke:var(--pine);stroke-width:1.5;stroke-linecap:round}.bud.is-featured .bud-stem{stroke:var(--pen);stroke-width:2.2}.bud-closed{fill:var(--pine-2);transition:opacity .2s}.bud-petals{fill:var(--pen);opacity:0;transition:opacity .2s}.bud-fall{fill:var(--pen-2)}.bud a:hover .bud-petals,.bud.is-active .bud-petals,.bud.is-featured .bud-petals{opacity:1}.bud a:hover .bud-closed,.bud.is-active .bud-closed,.bud.is-featured .bud-closed{opacity:0}.bud a:hover .bud-stem,.bud.is-active .bud-stem{stroke:var(--pen)}.branch-caption{position:absolute;z-index:5;display:grid;gap:2px;width:min(340px,88vw);padding:8px 12px;font-size:.92rem;line-height:1.32;color:var(--ink);background:var(--card);border-radius:2px;box-shadow:var(--shadow-card);transform:translate(-50%,-100%);pointer-events:none}.branch-caption,.branch-caption:hover{color:var(--ink);text-decoration:none}.branch-caption b{font-weight:500}.branch-caption span{font-size:.82rem;color:var(--ink-3)}.branch-note{position:absolute;left:calc(var(--gutter) + var(--branch-h)*.97);bottom:clamp(10px,2vh,22px);white-space:nowrap;font-size:1.42rem;transform:rotate(-1deg)}@media(hover:none){.bud a{pointer-events:none}.branch-caption{pointer-events:auto}.branch-caption:after{content:"Tap to open";font-size:.82rem;color:var(--pen)}}@media(prefers-reduced-motion:no-preference){.branch-reveal{stroke-dasharray:1;animation:branch-draw 2s var(--ease-out) .1s both}.bud-stem{stroke-dasharray:1;animation:branch-draw .8s var(--ease-out) var(--d) both}.bud-head{animation:bud-rise .7s var(--ease-out) calc(var(--d) + .35s) both}.branch-note{animation:settle 1.1s var(--ease-out) 2.2s both}.hero-circle path,.sketch-u-svg path{stroke-dasharray:1;animation:branch-draw 1s var(--ease-out) .9s both}@supports (animation-timeline:view()){.sprig-stem{stroke-dasharray:1;animation:branch-draw linear both;animation-timeline:view();animation-range:entry 10% cover 34%}.sprig-bud,.sprig-twig{animation:settle linear both;animation-timeline:view();animation-range:entry 20% cover 38%}}}@keyframes branch-draw{0%{stroke-dashoffset:1}to{stroke-dashoffset:0}}@keyframes bud-rise{0%{transform:scale(0)}}@keyframes settle{0%{opacity:0}}.sprig{display:block;width:112px;height:56px;overflow:visible}.sprig-stem,.sprig-twig{fill:none;stroke:var(--pine);stroke-width:1.1;stroke-linecap:round}.sprig-twig{stroke-width:.8}.sprig-bud{fill:var(--pine)}.chapter{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);-moz-column-gap:clamp(24px,4vw,64px);column-gap:clamp(24px,4vw,64px);max-width:var(--measure);margin:0 auto;padding:var(--section) var(--gutter) 0}.chapter>*{grid-column:2;min-width:0}.chapter>.chapter-head{grid-column:1;grid-row:1/span 12;position:sticky;top:calc(var(--topbar-h) + 20px);align-self:start}.chapter-title{font-size:clamp(2.2rem,4vw,3.5rem);font-weight:300;line-height:1.06;letter-spacing:-.035em;color:var(--ink);text-wrap:balance}.chapter-note{margin-top:10px;transform:rotate(-1.5deg);transform-origin:left}.chapter-side{margin-top:16px;max-width:24em;font-size:.94rem;line-height:1.5;color:var(--ink-3)}.subsection+.subsection{margin-top:clamp(56px,7vw,96px)}.subsection-title{margin-bottom:22px;font-size:1.28rem;font-weight:500;letter-spacing:-.015em;line-height:1.25;color:var(--ink)}.about-para{max-width:66ch;font-size:1.1rem;line-height:1.66}.about-para+.about-para{margin-top:1.1em}.about-para:first-child{font-size:clamp(1.25rem,1.8vw,1.5rem);line-height:1.42;letter-spacing:-.012em;color:var(--ink)}.about-para a{color:var(--ink)}.about-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px clamp(24px,4vw,56px);margin-top:clamp(32px,4vw,56px)}.about-facts dt{font-size:.86rem;color:var(--ink-3)}.about-facts dd{margin-top:2px;color:var(--ink);line-height:1.4}.about-counts{margin-top:clamp(32px,4vw,56px);max-width:44ch;font-size:clamp(1.25rem,1.8vw,1.5rem);line-height:1.34;letter-spacing:-.012em;color:var(--ink)}.interests{margin-top:clamp(56px,7vw,96px)}.interests-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px clamp(24px,4vw,56px);list-style:none}.interests-list strong{display:block;margin-bottom:6px;font-weight:500;font-size:1.08rem;line-height:1.3;color:var(--ink)}.interests-list span{font-size:.98rem;line-height:1.55}.edu-trail{margin-top:clamp(56px,7vw,96px)}.edu-list{display:grid;gap:14px;list-style:none}.edu-school{display:block;font-weight:500;color:var(--ink)}.edu-degree{display:block;font-size:.98rem}.news-list{display:grid;gap:22px;list-style:none}.news-item{display:grid;grid-template-columns:6.5rem minmax(0,1fr);gap:16px;align-items:baseline}.news-date{font-size:.92rem;color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}.news-body{max-width:62ch}.news-body a{color:var(--ink)}.news-flag{grid-column:2;margin-top:-14px;font-size:1.36rem;transform:rotate(-1deg);transform-origin:left}.publication-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 24px;margin-bottom:clamp(32px,4vw,48px)}.legend{font-size:.86rem;color:var(--ink-3)}.publication-view-toggle{display:inline-flex;gap:18px}.publication-view-btn{padding:4px 0;font:inherit;font-size:.98rem;color:var(--ink-3);background:none;border:0;cursor:pointer;transition:color .2s}.publication-view-btn:hover{color:var(--pen)}.publication-view-btn.active{color:var(--ink);font-weight:500;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:.34em;text-decoration-color:var(--pine)}.publication-view-panel[hidden]{display:none}.publication-subsection,.publication-year-group{display:grid;grid-template-columns:6.5rem minmax(0,1fr);gap:16px}.publication-subsection+.publication-subsection,.publication-year-group+.publication-year-group{margin-top:clamp(56px,7vw,96px)}.publication-subsection{grid-template-columns:minmax(0,1fr)}.publication-year-heading{position:sticky;top:calc(var(--topbar-h) + 20px);grid-row:1/span 9;align-self:start;display:grid;gap:6px}.publication-year-type{grid-column:2;min-width:0}.publication-year-label{font-size:2rem;font-weight:300;line-height:1;letter-spacing:-.03em;color:var(--ink);font-variant-numeric:tabular-nums}.publication-count{font-size:.84rem;color:var(--ink-3)}.publication-year-type+.publication-year-type{margin-top:36px}.publication-heading-main{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;margin-bottom:16px}.publication-heading-main h3,.publication-heading-main h4{font-size:1.04rem;font-weight:500;line-height:1.3;color:var(--ink)}.publication-subsection-heading>div>span{display:block;margin:-10px 0 16px;font-size:.9rem;color:var(--ink-3)}.publication-list{display:grid;gap:26px;list-style:none}.publication-entry-main{display:block}.publication-entry-text{display:block;max-width:68ch;overflow-wrap:anywhere;font-size:1rem;line-height:1.55}.publication-entry-text strong{font-weight:600;color:var(--ink)}.publication-entry-text a{color:inherit}.pub-tags,.publication-tags{display:flex;flex-wrap:wrap;gap:2px 14px;margin-top:6px;font-size:.86rem}.publication-tag{color:var(--ink-3)}.publication-tag-award,.publication-tag-red{color:var(--red);font-weight:500}.publication-tag-selective{color:var(--pen)}.publication-actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px 16px;margin-top:8px;font-size:.92rem}.publication-action-btn{display:inline-flex;align-items:center;gap:4px;color:var(--ink);cursor:pointer;list-style:none;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--line-strong);text-underline-offset:.22em;transition:color .2s}.publication-action-btn::-webkit-details-marker{display:none}.publication-action-btn:hover{color:var(--pen)}.publication-page-action{color:var(--pen);font-weight:500}.publication-cite-menu{position:relative}.publication-cite-menu[open]{z-index:5}.publication-cite-options{position:absolute;left:0;top:calc(100% + 6px);display:grid;min-width:130px;padding:6px;background:var(--card);border-radius:2px;box-shadow:var(--shadow-card)}.publication-cite-option{display:block;width:100%;padding:6px 10px;font:inherit;text-align:left;color:var(--ink);background:none;border:0;border-radius:2px;cursor:pointer}.publication-cite-option:hover{background:var(--paper-2)}.publication-cite-option.copied{color:var(--pen)}.publication-cite-option.copy-failed{color:var(--red)}.ledger{display:grid;gap:22px;list-style:none}.ledger-compact{gap:14px}.ledger-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 28px;align-items:baseline}.ledger-title{display:block;font-weight:500;line-height:1.35;color:var(--ink)}.ledger-detail,.ledger-venue{display:block;margin-top:2px;font-size:.96rem;line-height:1.5}.ledger-date,.ledger-detail{color:var(--ink-3)}.ledger-date{font-size:.92rem;font-variant-numeric:tabular-nums;white-space:nowrap}.service-sub{margin:26px 0 12px;font-size:.98rem;font-weight:500;color:var(--ink)}.service-sub:first-of-type{margin-top:0}.reviewer-list{-moz-columns:2;column-count:2;-moz-column-gap:clamp(24px,4vw,56px);column-gap:clamp(24px,4vw,56px);list-style:none}.reviewer-item{display:flex;justify-content:space-between;gap:14px;padding:4px 0;-moz-column-break-inside:avoid;break-inside:avoid;font-size:.96rem}.reviewer-years{flex:none;color:var(--ink-3);font-size:.86rem;font-variant-numeric:tabular-nums}.journal-cloud{display:flex;flex-wrap:wrap;gap:4px 22px;font-size:.96rem}.projects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(32px,5vw,80px);margin-top:0}.projects-col:last-child{margin-top:clamp(64px,11vw,168px)}.project+.project{margin-top:clamp(56px,7vw,104px)}.project-media{display:block;overflow:hidden;background:var(--wall);border-radius:2px}.project-media img{width:100%;aspect-ratio:16/10;-o-object-fit:cover;object-fit:cover;-o-object-position:top left;object-position:top left;transition:transform .9s var(--ease-out)}.project-media:hover img{transform:scale(1.02)}.project h3{margin-top:16px;font-size:1.28rem;font-weight:500;line-height:1.22;letter-spacing:-.015em;color:var(--ink);text-wrap:balance}.project h3 a{color:inherit;text-decoration:none}.project h3 a:hover{color:var(--pen)}.project-role{margin-top:6px;font-size:.9rem;line-height:1.4;color:var(--ink-3)}.project-desc{margin-top:10px;font-size:.98rem;line-height:1.58}.tech-stack{margin-top:10px;font-size:.86rem;line-height:1.5;color:var(--ink-3)}.tech-stack span+span:before{content:" · "}.projects-more{display:none;margin-top:32px}.side-projects{margin-top:clamp(72px,9vw,128px)}.side-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(32px,4vw,56px) clamp(32px,5vw,80px)}.side-icon{width:44px;height:44px;-o-object-fit:cover;object-fit:cover;margin-bottom:12px;border-radius:8px}.side-card h4{font-size:1.1rem;font-weight:500;line-height:1.25;color:var(--ink)}.side-card h4 a{color:inherit;text-decoration:none}.side-card h4 a:hover{color:var(--pen)}.side-card p{margin-top:6px;font-size:.96rem;line-height:1.55}.side-card .tech-stack{font-size:.86rem}.side-card .project-role{font-size:.88rem}#footer{margin-top:var(--section);color:var(--bone-2);background:var(--night)}.footer-inner{max-width:var(--measure);margin:0 auto;padding:clamp(64px,9vw,128px) var(--gutter) clamp(28px,3vw,44px)}#footer a{color:var(--bone);text-decoration-color:var(--line-dark)}#footer a:hover{color:var(--pen-dark);text-decoration-color:currentColor}.footer-hello-title{font-size:clamp(3.2rem,9vw,6rem);font-weight:300;line-height:1;letter-spacing:-.04em;color:var(--bone)}.footer-hello-title a{text-decoration-thickness:2px;text-underline-offset:.1em}.footer-hello-note{margin-top:22px;color:var(--pen-dark);transform:rotate(-1deg);transform-origin:left}.footer-grid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:40px clamp(24px,4vw,64px);margin-top:clamp(56px,7vw,96px)}.footer-identity{display:grid;gap:8px;align-content:start;justify-items:start;font-size:.98rem}.footer-name{font-weight:500;color:var(--bone);text-decoration:none!important}.footer-save{padding:0;font:inherit;color:var(--bone);background:none;border:0;cursor:pointer;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--line-dark);text-underline-offset:.22em}.footer-save:hover{color:var(--pen-dark)}.footer-links,.footer-social{display:flex;flex-wrap:wrap;gap:6px 22px}.footer-links{margin-bottom:28px;font-size:1.14rem}.footer-ship,.footer-social{font-size:.96rem}.footer-ship{margin-top:28px;max-width:44em}.footer-base{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 24px;margin-top:clamp(48px,6vw,80px);font-size:.88rem;color:var(--bone-3)}.error-stage{min-height:74vh;padding:calc(var(--topbar-h) + clamp(40px,8vh,96px)) var(--gutter) clamp(48px,8vh,96px);background:var(--wall)}.error-code{font-size:clamp(5rem,16vw,6rem);font-weight:300;line-height:1;letter-spacing:-.04em;color:var(--ink)}.error-note{margin-top:8px}.error-title{margin-top:28px;font-size:clamp(1.8rem,3.4vw,2.6rem);font-weight:300;line-height:1.12;letter-spacing:-.03em;color:var(--ink);text-wrap:balance}.error-desc{margin-top:14px;max-width:62ch}.error-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}.error-stage+#footer{margin-top:0}@view-transition{navigation:auto}::view-transition-new(root),::view-transition-old(root){animation-duration:.28s}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:after,:before{transition-duration:.01ms!important;animation-duration:.01ms!important}@view-transition{navigation:none}}@media(max-width:1023px){.chapter{grid-template-columns:minmax(0,1fr)}.chapter>*,.chapter>.chapter-head{grid-column:1;grid-row:auto;position:static}.chapter>.chapter-head{margin-bottom:clamp(28px,5vw,44px)}.menu-grid{align-items:start}.footer-grid,.menu-grid{grid-template-columns:minmax(0,1fr)}.hero-badge-hint{top:calc(var(--badge-bottom, 60%) - 76px);left:auto;right:calc(100% - var(--badge-left, 70%) + 14px);width:auto;white-space:nowrap}.hero-arrow{display:none}}@media(max-width:860px){.topbar-cn,.topbar-nav-page{display:none}.hero{min-height:100svh;grid-template-columns:auto minmax(0,1fr);padding-bottom:38vw}.hero-cn{font-size:clamp(3.2rem,15vw,5rem)}.hero-name{font-size:clamp(2.7rem,11.6vw,4.4rem)}.hero-portrait{position:relative;grid-column:1/-1;justify-self:end;top:auto;left:auto;width:clamp(150px,40vw,210px);margin:18px 12px 0 0}.hero.has-badge .hero-portrait{aspect-ratio:1/1.54;margin-top:52px}.hero-cn,.hero-copy{grid-row:1}.hero-badge-hint{top:calc(var(--badge-bottom, 60%) - 210px);right:auto;left:var(--gutter);width:6em;white-space:normal;font-size:1.3rem}.branch{overflow-x:clip;padding-left:0}.branch-svg{width:115%;margin-left:-3%;height:auto}.branch-note{left:var(--gutter);bottom:calc(100% - 26px);width:36vw;white-space:normal;font-size:1.2rem}.projects{display:flex;flex-direction:column;gap:clamp(48px,9vw,72px)}.projects-col{display:contents}.project{order:var(--i)}.project+.project{margin-top:0}.projects.is-collapsed .project.is-rest{display:none}.projects-more{display:inline-flex}}@media(max-width:720px){body{font-size:16px}.about-facts,.interests-list,.news-item,.side-grid{grid-template-columns:minmax(0,1fr)}.news-item{gap:2px}.news-flag{grid-column:1;margin-top:0}.publication-year-group{grid-template-columns:minmax(0,1fr)}.publication-year-type{grid-column:1}.publication-year-heading{position:static;grid-row:auto;grid-template-columns:auto auto 1fr;align-items:center;gap:12px}.ledger-row{grid-template-columns:minmax(0,1fr)}.reviewer-list{-moz-columns:1;column-count:1}}
