@font-face{font-family:notoSansSC;src:url(../media/noto_sans_sc_variable-s.p.10j3i_sckuuuv.woff2)format("woff2");font-display:swap;font-weight:100 900}@font-face{font-family:notoSansSC Fallback;src:local(Arial);ascent-override:117.61%;descent-override:29.2%;line-gap-override:0.0%;size-adjust:98.63%}.f-kzGW_className{font-family:notoSansSC,notoSansSC Fallback}.f-kzGW_variable{--font-noto-sans-sc:"notoSansSC", "notoSansSC Fallback"}
:root{--paper:#fff;--ink:#252d35;--muted:#677786;--subtle:#758493;--line:#dce9f3;--accent:#b6dafa;--accent-strong:#386f9f;--accent-soft:#edf6ff;--width:880px;--gutter:clamp(22px, 5vw, 72px);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--ink);background:var(--paper);font-synthesis:none;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:Helvetica Neue,Arial,PingFang SC,Microsoft YaHei,sans-serif}*,:before,:after{box-sizing:border-box}html{scroll-behavior:auto;scrollbar-gutter:stable both-edges}body{--font-editorial:var(--font-lora,Georgia), "Songti SC", "STSong", "SimSun", serif;isolation:isolate;margin:0;font-size:16px}body:before{content:"";z-index:-2;pointer-events:none;background-image:radial-gradient(circle,#00000029 .8px,#0000 1.1px);background-position:12px 12px;background-size:24px 24px;position:fixed;inset:0}body:after{content:"";z-index:-3;pointer-events:none;opacity:.28;background:radial-gradient(at 85% 12%,#c8e4ff80,#0000 56%),radial-gradient(at 4% 66%,#d5ebff73,#0000 49%),radial-gradient(at 82% 100%,#e0efff66,#0000 46%);position:fixed;inset:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:0}a{color:inherit;text-decoration:none}h1{margin:0}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent-strong);outline-offset:5px;border-radius:4px}::selection{background:#b6dafa80}[hidden]{display:none!important}.wrap{width:min(var(--width), calc(100% - var(--gutter) * 2));margin-inline:auto}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:120;background:var(--ink);color:#fff;border-radius:8px;padding:12px 20px;position:fixed;top:10px;left:10px;transform:translateY(-160%)}.skip-link:focus-visible{transform:none}.site-header{z-index:40;justify-content:space-between;align-items:center;gap:32px;height:100px;display:flex;position:relative}.wordmark{letter-spacing:.045em;color:#536575;align-items:center;min-height:40px;font-size:14px;font-weight:400;line-height:1;display:inline-flex}.brand-dot{background:#d5eaff;border:1px solid #79add5;border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-right:8px}.wordmark sup{letter-spacing:0;margin-left:2px;font-size:7px;line-height:1;position:relative;top:-3px}.header-right{align-items:center;gap:4px;height:40px;display:flex}.language-switch{width:40px;height:40px;font-family:var(--font-editorial);color:#536575;border-radius:6px;flex-shrink:0;place-items:center;padding:0;font-size:14px;line-height:1;transition:color .16s,background .16s;display:grid}.language-switch:hover{color:var(--accent-strong);background:#dceeff80}.language-switch:active{background:#dceeff}.header-icon-button{color:#536575;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;padding:10px;line-height:1;transition:color .16s,background .16s;display:inline-flex}.header-icon-button:hover{color:var(--accent-strong);background:#dceeff80}.header-icon-button:active{background:#dceeff}.header-icon-button svg{flex-shrink:0;width:20px;height:20px;display:block}.header-link .github-icon{width:18px;height:18px}.email-trigger svg{width:21px;height:21px;transform:translateY(1px)}.email-dialog{border:1px solid var(--line);background:var(--paper);width:440px;max-height:calc(100svh - 40px);color:var(--ink);border-radius:20px;padding:0;overflow:auto;box-shadow:0 3px 12px #234c7110,0 24px 90px #234c7126}.email-dialog[open]{animation:.22s ease-out both email-appear}.email-dialog::backdrop{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#263f5830}.email-dialog[open]::backdrop{animation:.18s ease-out both email-backdrop}.email-dialog-content{padding:42px 32px 32px;position:relative}.email-close{position:absolute;top:12px;right:12px}.email-dialog h2{font-family:var(--font-editorial);letter-spacing:.02em;text-align:center;margin:0;font-size:26px;font-weight:500;line-height:1.4}.email-details{background:var(--accent-soft);border-radius:10px;align-items:center;gap:12px;margin-top:24px;padding:10px 10px 10px 18px;display:flex}.email-address{letter-spacing:-.025em;white-space:nowrap;-webkit-user-select:text;user-select:text;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:5px;flex:1;font-size:20px;line-height:1.4}.email-address:hover{text-decoration-line:underline}.email-copy{border:1px solid var(--line);background:var(--paper);color:#305e86;border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;gap:7px;min-width:88px;height:40px;padding:0 10px;font-size:13px;transition:background .16s,transform .16s;display:inline-flex}.email-copy svg{width:16px;height:16px}.email-copy:hover{background:#d9ecff}.email-copy:active{transform:scale(.97)}.email-copy-error{color:var(--muted);margin:16px 0 0;font-size:13px;line-height:1.7}@keyframes email-appear{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@keyframes email-backdrop{0%{opacity:0}to{opacity:1}}.hero{flex-direction:column;align-items:flex-start;padding:clamp(64px,12svh,140px) 0 112px;display:flex;position:relative}.hero-lanyard{--hero-lanyard-height:clamp(500px, calc(100svh - 110px), 680px);z-index:1;width:min(500px,56%);height:var(--hero-lanyard-height);pointer-events:none;position:absolute;top:-12px;right:-28px}.hero-lanyard-hint{top:calc(24% - 65px);left:calc(50% + var(--hero-lanyard-height) * .213333 + 12px);color:#57534e;opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none;width:68px;position:absolute}.hero:has(.tech-text[data-intro-state=complete]) .hero-lanyard:has(.lanyard[data-intro-state=complete]) .hero-lanyard-hint[data-revealed=true]{opacity:1}.hero-lanyard-hint svg{width:68px;height:75px;display:block;overflow:visible}.hero-lanyard-hint .hint-ink{stroke-dasharray:1;stroke-dashoffset:1px}.hero-lanyard-hint .hint-glyph-complete{opacity:0}.hero:not([data-intro-restored=true]):has(.tech-text[data-intro-state=complete]) .hero-lanyard:has(.lanyard[data-intro-state=complete]) .hero-lanyard-hint[data-revealed=true] .hint-ink{animation:hint-write var(--hint-duration) linear var(--hint-delay) both}.hero:not([data-intro-restored=true]):has(.tech-text[data-intro-state=complete]) .hero-lanyard:has(.lanyard[data-intro-state=complete]) .hero-lanyard-hint[data-revealed=true] .hint-glyph-complete{animation:hint-letter-finish 1ms steps(1, end) calc(var(--hint-delay) + var(--hint-duration)) both}@keyframes hint-write{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}@keyframes hint-letter-finish{0%{opacity:0}to{opacity:1}}.hero-title-wrap{width:100%;min-width:0}.hero-wordmark{width:100%;height:clamp(350px,34vw,440px);font-family:var(--font-lora,Georgia), "Times New Roman", serif;font-weight:580;container-type:inline-size}.hero-wordmark .tech-text{width:calc(100% + 32px);min-width:0;margin-inline:-16px}.hero-wordmark .tech-text-fallback{font-size:min(150px,28cqw)}.hero-identity{text-align:left;width:100%;margin-top:12px}.identity-name{letter-spacing:.16em;color:var(--subtle);font-size:clamp(11px,1.2vw,16px);font-weight:400}.identity-letter{opacity:0;display:inline-block;transform:translateY(4px)}.hero-identity[data-revealed=true] .identity-letter{animation:.46s ease-out both identity-letter-enter;animation-delay:calc(var(--letter-index) * 22ms)}@keyframes identity-letter-enter{to{opacity:1;transform:none}}.section-nav-shell{opacity:0;animation:.46s ease-out both identity-letter-enter;animation-play-state:var(--section-intro-play-state,paused);align-items:center;margin-bottom:40px;display:flex}:is(.hero:has(.hero-identity[data-revealed=true])+.work-section,.work-section:focus-within){--section-intro-play-state:running}.section-nav.gooey-nav{--gn-pad:8px;--gn-font:34px;--gn-x:16px;--gn-y:8px;width:100%;font-family:var(--font-noto-sans-sc), "Microsoft YaHei", sans-serif;margin-inline:auto;transform:translate(-32px)}.section-nav.gooey-nav--framed{border:1.5px solid var(--ink);box-shadow:3px 4px 0 var(--ink);background:#fff;padding-inline:28px}.section-nav .gooey-nav__stage{width:100%}.section-nav .gooey-nav__list{flex-wrap:nowrap;justify-content:space-between}.section-nav .gooey-nav__link{justify-content:center;min-height:64px;font-weight:650}.section-nav-letter{opacity:0;animation:.46s ease-out both identity-letter-enter;animation-delay:calc(var(--item-index) * .14s + var(--letter-index) * 22ms);animation-play-state:var(--section-intro-play-state,paused);display:inline-block;transform:translateY(4px)}html[lang=en] .section-nav.gooey-nav{--gn-font:26px;--gn-x:6px}.tab-panel{min-height:300px}.hero[data-intro-restored=true] .identity-letter,.hero[data-intro-restored=true]+.work-section .section-nav-shell,.hero[data-intro-restored=true]+.work-section .section-nav-letter{opacity:1;animation:none;transform:none}.work-section:has(#panel-becoming:not([hidden])) .section-nav-shell{opacity:1;animation:none;transform:none}.work-section:has(#panel-becoming:not([hidden])) .section-nav-letter{opacity:1;animation:none;transform:none}.hero[data-intro-restored=true] .hero-lanyard-hint{opacity:1}.hero[data-intro-restored=true] .hero-lanyard-hint .hint-ink{stroke-dashoffset:0}.hero[data-intro-restored=true] .hero-lanyard-hint .hint-glyph-complete{opacity:1}@media (max-width:760px){.hero{padding:clamp(60px,12svh,120px) 0 32px}.hero-wordmark{height:clamp(290px,76vw,360px)}.hero-identity{margin-top:5px}.identity-name{letter-spacing:.12em;font-size:11px}.section-nav-shell{min-height:85px;margin-bottom:22px;padding:14px 0}.tab-panel{min-height:240px}}@media (max-width:365px){:root{--gutter:18px}.identity-name{letter-spacing:.1em;font-size:10px}}@media (prefers-reduced-motion:reduce){.header-icon-button,.language-switch,.section-nav button,.email-copy{transition:none}.email-dialog[open],.email-dialog[open]::backdrop{animation:none}.hero-identity .identity-letter,.section-nav-shell,.section-nav-letter{opacity:1;animation:none;transform:none}.hero:has(.tech-text[data-intro-state=complete]) .hero-lanyard:has(.lanyard[data-intro-state=complete]) .hero-lanyard-hint{opacity:1}.hero:not([data-intro-restored=true]):has(.tech-text[data-intro-state=complete]) .hero-lanyard:has(.lanyard[data-intro-state=complete]) .hero-lanyard-hint .hint-ink{animation:1ms step-end both hint-write}.hero:not([data-intro-restored=true]):has(.tech-text[data-intro-state=complete]) .hero-lanyard:has(.lanyard[data-intro-state=complete]) .hero-lanyard-hint .hint-glyph-complete{animation:1ms step-end both hint-letter-finish}}
:root{--journal-title-duration:.32s;--journal-exit-duration:.12s;--journal-reveal-duration:.22s;--journal-reveal-delay:0s}.journal-title-anchor{width:fit-content;max-width:100%;display:block}::view-transition{pointer-events:none}:root:active-view-transition-type(journal-open)::view-transition-group(root){animation-duration:var(--journal-reveal-duration)}:root:active-view-transition-type(journal-close)::view-transition-group(root){animation-duration:var(--journal-reveal-duration)}::view-transition-group(.journal-title-morph){z-index:1;animation-duration:var(--journal-title-duration);animation-timing-function:cubic-bezier(.22,.75,.18,1)}::view-transition-old(.journal-title-morph){display:none}::view-transition-new(.journal-title-morph){object-fit:fill;width:100%;height:100%;animation:none}:root:active-view-transition-type(journal-open)::view-transition-old(root){animation:journal-content-leave var(--journal-exit-duration) ease-out both}:root:active-view-transition-type(journal-close)::view-transition-old(root){animation:journal-content-leave var(--journal-exit-duration) ease-out both}:root:active-view-transition-type(journal-open)::view-transition-new(root){animation:journal-content-reveal var(--journal-reveal-duration) ease-out var(--journal-reveal-delay) both}:root:active-view-transition-type(journal-close)::view-transition-new(root){animation:journal-content-reveal var(--journal-reveal-duration) ease-out var(--journal-reveal-delay) both}@keyframes journal-content-leave{to{opacity:0}}@keyframes journal-content-reveal{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){:root{--journal-title-duration:0s;--journal-exit-duration:0s;--journal-reveal-duration:0s;--journal-reveal-delay:0s}}
