:root{--paper:#fbfbfd;--paper-deep:#f1f2f6;--surface:#fff;--ink:#16171a;--muted:#646872;--line:#e2e4e9;--accent:#4f58d8;--accent-dark:#3d46b8;--accent-soft:#e4e7ff;--cyan-soft:#ddf6ff;--peach-soft:#ffe6d6;--pink-soft:#f7ddf1;--mint-soft:#ddf4e8;--display:"Avenir Next", Avenir, "Helvetica Neue", "Noto Sans SC", "PingFang SC", sans-serif;--sans:"Avenir Next", Avenir, "Noto Sans SC", "PingFang SC", sans-serif;--mono:"SFMono-Regular", Consolas, monospace;color-scheme:light;font-synthesis:none}*{box-sizing:border-box}html{min-width:320px}body{background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.7;overflow-x:clip}a{color:inherit;text-decoration:none}button{color:inherit;font:inherit}a:focus-visible,button:focus-visible,summary:focus-visible,.table-scroll:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.skip-link{z-index:100;background:var(--ink);color:#fff;border-radius:6px;padding:9px 13px;font-size:13px;position:fixed;top:12px;left:12px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.visually-hidden{clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;width:1px!important;height:1px!important;position:absolute!important;overflow:hidden!important}[hidden]{display:none!important}main:focus{outline:none}.site-header,.page-shell,.site-footer{width:min(1180px,100% - 64px);margin-inline:auto}.site-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-height:92px;display:flex}.identity{align-items:center;gap:14px;display:inline-flex}.identity-mark{border:1px solid var(--ink);width:42px;height:42px;font-family:var(--display);border-radius:50%;place-items:center;font-size:20px;font-style:italic;display:grid}.identity strong,.identity small{display:block}.identity strong{letter-spacing:.01em;font-size:16px}.identity small{color:var(--muted);font-family:var(--mono);font-size:11px;line-height:1.35}nav{align-items:center;gap:clamp(18px,3vw,38px);font-size:15px;display:flex}nav a{color:var(--muted);padding-block:8px;transition:color .16s}nav a:hover,nav a[aria-current=page]{color:var(--ink)}.language-switch{border:1px solid var(--line);min-width:38px;color:var(--ink);font-family:var(--mono);text-align:center;border-radius:999px;padding-inline:10px;font-size:12px;line-height:1}.language-switch:hover{border-color:#b9bdc8}.eyebrow{color:var(--accent);font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;margin:0 0 20px;font-size:12px;font-weight:600}.home-hero{isolation:isolate;align-items:center;min-height:min(620px,100vh - 92px);padding-block:82px 96px;display:flex;position:relative}.home-hero:before{z-index:-1;content:"";filter:blur(30px);opacity:.9;background:radial-gradient(circle at 15% 80%,#ddf6fff0,#0000 36%),radial-gradient(circle at 46% 86%,#e4e7fff5,#0000 43%),radial-gradient(circle at 75% 68%,#f7ddf1cc,#0000 36%),radial-gradient(circle at 90% 96%,#ffe6d6d1,#0000 31%);height:340px;position:absolute;bottom:3%;left:-10%;right:-10%}@media (width<=1320px){.home-hero:before{left:0;right:0}}.hero-copy{max-width:880px}.hero-copy h1{font-family:var(--display);letter-spacing:-.06em;margin:0 0 30px;font-size:clamp(60px,6.4vw,92px);font-weight:650;line-height:.96}html[lang=en] .hero-copy h1{letter-spacing:-.055em;font-size:clamp(58px,6.1vw,88px)}.hero-intro{max-width:760px;color:var(--muted);margin:0 0 34px;font-size:clamp(18px,1.45vw,21px);line-height:1.75}.hero-links{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.button{border:1px solid var(--ink);border-radius:999px;justify-content:center;align-items:center;gap:20px;min-height:50px;padding:0 22px;font-size:15px;font-weight:600;transition:transform .16s,box-shadow .16s;display:inline-flex}.button:hover{transform:translateY(-2px);box-shadow:0 10px 24px #20233a1f}.button--dark{background:var(--ink);color:#fff}.button--light{background:#fffc}.quiet-link{min-height:48px;color:var(--muted);border-bottom:1px solid var(--line);align-items:center;margin-left:4px;padding:0 4px;font-size:15px;font-weight:520;display:inline-flex}.feed{border-top:1px solid var(--line);padding-block:118px 130px}.feed-heading{grid-template-columns:minmax(0,1fr) 420px;align-items:end;gap:60px;margin-bottom:50px;display:grid}.feed-heading h2{max-width:760px;font-family:var(--display);letter-spacing:-.06em;margin:0;font-size:clamp(48px,6vw,78px);font-weight:650;line-height:1}.feed-heading>p{color:var(--muted);margin:0 0 4px}.feed-tabs{flex-wrap:wrap;gap:8px;margin-bottom:22px;display:flex}.feed-tabs button{border:1px solid var(--line);min-height:38px;color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;padding:0 16px;font-size:13px;transition:background-color .16s,border-color .16s,color .16s}.feed-tabs button:hover{color:var(--ink);border-color:#b9bdc8}.feed-tabs button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}.entry-list{background:var(--surface);border:1px solid var(--line);border-radius:22px;overflow:hidden;box-shadow:0 22px 70px #23284612}.entry-row{border-bottom:1px solid var(--line);grid-template-columns:68px minmax(0,1fr) 120px;align-items:center;gap:28px;min-height:200px;padding:34px 32px;transition:filter .16s;display:grid;position:relative}.entry-row:hover{filter:saturate(1.08)brightness(.985)}.entry-row:hover .entry-body h3{color:var(--accent-dark)}.entry-row:focus-visible{z-index:1;outline-offset:-4px}.entry-row:last-child{border-bottom:0}.entry-row--violet{background:linear-gradient(105deg,#fff 50%,#e4e7ffd6)}.entry-row--cyan{background:linear-gradient(105deg,#fff 50%,#ddf6ffcc)}.entry-row--peach{background:linear-gradient(105deg,#fff 50%,#ffe6d6c7)}.entry-row--mint{background:linear-gradient(105deg,#fff 50%,#ddf4e8d1)}.entry-number{color:var(--muted);font-family:var(--mono);align-self:start;font-size:11px}.entry-meta{color:var(--accent-dark);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;gap:14px;margin-bottom:15px;font-size:10px;display:flex}.entry-meta time{color:var(--muted)}.entry-body h3{font-family:var(--display);letter-spacing:-.045em;overflow-wrap:anywhere;margin:0 0 8px;font-size:clamp(28px,3vw,42px);font-weight:650;line-height:1.15}.entry-body p{max-width:720px;color:var(--muted);margin:0}.entry-state{color:var(--muted);white-space:nowrap;background:#ffffffb3;border:1px solid #a6abba6b;border-radius:999px;justify-self:end;padding:6px 10px;font-size:11px}.empty-filter{color:var(--muted);margin:28px 0 0}.feed-empty{border-block:1px solid var(--line);grid-template-columns:minmax(0,1fr) 420px;align-items:start;gap:60px;padding-block:34px 38px;display:grid}.feed-empty strong{font-family:var(--display);letter-spacing:-.04em;font-size:clamp(28px,3vw,40px);font-weight:650;line-height:1.15}.feed-empty p{color:var(--muted);margin:5px 0 0}.post-page{padding-block:62px 124px}.post-back{color:var(--muted);font-family:var(--mono);margin-bottom:54px;font-size:11px;transition:color .16s;display:inline-flex}.post-back:hover{color:var(--ink)}.post-article{--post-glow:var(--accent-soft)}.post-article--cyan{--post-glow:var(--cyan-soft)}.post-article--peach{--post-glow:var(--peach-soft)}.post-article--mint{--post-glow:var(--mint-soft)}.post-hero{isolation:isolate;border-bottom:1px solid var(--line);padding:26px 0 68px;position:relative;overflow:hidden}.post-hero:before{z-index:-1;content:"";background:radial-gradient(circle, var(--post-glow), transparent 68%);filter:blur(16px);opacity:.92;width:min(650px,65vw);height:360px;position:absolute;bottom:-54%;right:-14%}.post-meta{color:var(--muted);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;flex-wrap:wrap;gap:10px 18px;margin-bottom:34px;font-size:10px;display:flex}.post-meta span:first-child{color:var(--accent-dark)}.post-hero h1{max-width:1020px;font-family:var(--display);letter-spacing:-.065em;overflow-wrap:anywhere;margin:0 0 28px;font-size:clamp(54px,7.2vw,102px);font-weight:650;line-height:.98}.post-hero>p{max-width:760px;color:var(--muted);margin:0;font-size:clamp(18px,1.7vw,22px);line-height:1.8}.post-hero>small{color:var(--muted);font-family:var(--mono);margin-top:22px;font-size:10px;display:block}.post-body{color:#292b30;width:min(760px,100%);margin-inline:auto;padding-block:72px 96px;font-size:19px;line-height:1.95}.post-body>:first-child{margin-top:0}.post-body>:last-child{margin-bottom:0}.post-lede{color:var(--ink);font-family:var(--display);letter-spacing:-.025em;font-size:clamp(22px,2.2vw,29px);font-weight:520;line-height:1.65;margin-bottom:2.2em!important}.post-body p,.post-body ul,.post-body ol,.post-body blockquote,.post-body pre{margin-block:0 1.7em}.post-body h2,.post-body h3{color:var(--ink);font-family:var(--display);letter-spacing:-.035em;font-weight:650;line-height:1.3}.post-body h2{margin:2.3em 0 .75em;font-size:34px}.post-body h3{margin:2em 0 .65em;font-size:25px}.post-body ul,.post-body ol{padding-left:1.35em}.post-body li{margin-bottom:.55em;padding-left:.25em}.post-body strong{color:var(--ink);font-weight:650}.post-body a{color:var(--accent-dark);overflow-wrap:anywhere;text-underline-offset:4px;text-decoration:underline #4f58d852}.post-body blockquote{background:var(--paper-deep);border-left:3px solid var(--accent);color:var(--muted);padding:18px 22px}.post-body blockquote p:last-child{margin-bottom:0}.post-body code{background:var(--paper-deep);font-family:var(--mono);border-radius:4px;padding:.14em .35em;font-size:.86em}.post-body pre{color:#f4f4f6;background:#202126;border-radius:12px;padding:22px;line-height:1.65;overflow-x:auto}.post-body pre code{color:inherit;background:0 0;padding:0}.post-body img{border:1px solid var(--line);border-radius:12px;max-width:100%;height:auto;margin-block:2.4em;display:block}.post-figure{margin:2.8em 0}.post-figure--wide{width:min(1080px,100vw - 64px);margin-left:calc(50% + min(1080px,100vw - 64px)/-2)}.post-figure img{background:var(--paper-deep);width:100%;margin:0}.post-figure figcaption{color:var(--muted);font-family:var(--mono);grid-template-columns:28px minmax(0,1fr);gap:12px;margin-top:13px;font-size:10px;line-height:1.65;display:grid}.post-figure figcaption span{color:var(--accent-dark)}.post-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;width:min(1080px,100vw - 64px);margin-left:calc(50% + min(1080px,100vw - 64px)/-2);display:grid}.post-gallery .post-figure{margin-block:2.8em}.post-gallery img{aspect-ratio:3/2;object-fit:cover}.post-callout{border-block:1px solid var(--line);background:linear-gradient(120deg,#ddf6ff85,#ffe6d670);gap:8px;margin:2.8em 0;padding:22px 24px;display:grid}.post-callout__label{color:var(--accent-dark);font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;font-size:9px}.post-callout p{color:var(--muted);margin:0;font-size:.88em}.post-body table{border-collapse:collapse;white-space:nowrap;width:100%;margin:2.2em 0;font-size:15px;line-height:1.65;display:block;overflow-x:auto}.table-scroll{border-radius:4px;max-width:100%;margin:2.2em 0;overflow-x:auto}.post-body .table-scroll table{min-width:640px;margin:0;display:table;overflow:visible}.post-body th,.post-body td{border-bottom:1px solid var(--line);text-align:left;white-space:normal;min-width:150px;padding:13px 16px}.post-body th{background:var(--paper-deep);color:var(--ink);font-weight:650}.post-body tbody tr:hover{background:#e4e7ff38}.post-body input[type=checkbox]{accent-color:var(--accent);margin-right:.55em}.post-body kbd{min-width:1.8em;color:var(--ink);font-family:var(--mono);background:#fff;border:1px solid #cfd2da;border-bottom-width:2px;border-radius:5px;place-items:center;padding:.05em .38em;font-size:.78em;display:inline-grid}.post-details{border-block:1px solid var(--line);margin:2.8em 0}.post-details summary{color:var(--ink);cursor:pointer;padding:18px 2px;font-weight:600}.post-details>div{color:var(--muted);padding:0 2px 20px;font-size:.9em}.post-details p:last-child{margin-bottom:0}.post-signoff{color:var(--ink);font-family:var(--display);text-align:center;font-size:1.2em;font-weight:600;margin-top:3em!important}.post-body hr{border:0;border-top:1px solid var(--line);margin-block:3.5em}.post-ending{border-top:1px solid var(--line);width:min(760px,100%);color:var(--muted);font-family:var(--mono);justify-content:space-between;gap:24px;margin-inline:auto;padding-top:30px;font-size:11px;display:flex}.post-ending p{margin:0}.post-ending a{color:var(--ink)}.site-footer{border-top:1px solid var(--line);color:var(--muted);font-family:var(--mono);justify-content:space-between;gap:24px;padding-block:34px 46px;font-size:10px;display:flex}.site-footer p{margin:0}.footer-links{gap:18px;display:flex}.footer-links a:hover{color:var(--ink)}.resume-site-header nav{gap:24px}.print-button{background:var(--ink);color:#fff;cursor:pointer;white-space:nowrap;border:0;border-radius:999px;min-height:38px;padding:0 14px;font-size:12px}.not-found{flex-direction:column;justify-content:center;align-items:flex-start;min-height:min(660px,100vh - 160px);padding-block:90px;display:flex}.not-found h1{max-width:900px;font-family:var(--display);letter-spacing:-.07em;margin:0 0 26px;font-size:clamp(58px,8vw,108px);font-weight:650;line-height:.96}.not-found>p:not(.eyebrow){color:var(--muted);margin:0 0 30px}.not-found-actions{flex-wrap:wrap;gap:10px;display:flex}.resume-page{padding-block:56px 104px}.resume-sheet{background:linear-gradient(#fff, #fff) padding-box, linear-gradient(135deg, var(--accent-soft), var(--cyan-soft), var(--pink-soft), var(--peach-soft)) border-box;border:1px solid #0000;border-radius:18px;padding:clamp(34px,5vw,64px);box-shadow:0 22px 64px #23284614}.resume-hero{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(280px,340px);gap:48px;padding-bottom:46px;display:grid}.resume-hero h1{font-family:var(--display);letter-spacing:-.055em;margin:0;font-size:clamp(52px,5.4vw,76px);font-weight:650;line-height:.96}.resume-hero h1 span{color:var(--muted);letter-spacing:-.04em;font-size:.55em}.resume-contact{color:var(--muted);align-self:end;gap:10px;font-size:14px;display:grid}.resume-contact p{color:var(--ink);margin:0 0 6px;font-size:17px;font-weight:600}.resume-contact a{text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:4px}.resume-section{border-bottom:1px solid var(--line);padding-block:36px}.resume-section:last-child{border-bottom:0}.resume-section h2{color:var(--accent-dark);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;margin:0 0 26px;font-size:13px;font-weight:700}.resume-summary{grid-template-columns:150px 1fr;gap:36px;display:grid}.resume-summary p{max-width:850px;margin:0;font-size:18px;line-height:1.75}.resume-columns{grid-template-columns:minmax(0,1.5fr) minmax(260px,.7fr);gap:64px;display:grid}.resume-columns>aside{border-left:1px solid var(--line);padding-left:42px}.resume-content--detailed{max-width:none}.resume-education-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:64px;max-width:none;display:grid}.resume-education-grid .resume-item{margin-bottom:0}.resume-role+.resume-role{margin-top:52px}.resume-role-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:28px;margin-bottom:16px;padding-bottom:14px;display:flex}.resume-role-heading h3{font-family:var(--display);letter-spacing:-.025em;margin:0;font-size:24px;font-weight:650;line-height:1.2}.resume-role-heading time{color:#4d515b;font-family:var(--mono);white-space:nowrap;flex:none;padding-top:4px;font-size:13px;font-weight:600}.resume-position{color:var(--accent-dark);margin:5px 0 0;font-size:15px;font-weight:600;line-height:1.45}.resume-role-description{color:var(--muted);margin:0 0 16px;font-size:15px}.resume-project{border-left:2px solid var(--accent-soft);margin-top:26px;padding-left:20px}.resume-project h4{font-family:var(--display);letter-spacing:-.02em;margin:0 0 16px;font-size:18px;font-weight:650}.resume-project h5{color:var(--ink);margin:18px 0 7px;font-size:14px;font-weight:650}.resume-bullets{color:var(--muted);margin:14px 0 0;padding-left:1.15em;font-size:15px;line-height:1.75}.resume-project h5+.resume-bullets{margin-top:0}.resume-bullets li+li{margin-top:8px}.resume-bullets li::marker{color:var(--accent)}.resume-inline-link{color:var(--ink);font-family:var(--mono);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:4px;gap:5px;margin-bottom:3px;font-size:12px;display:inline-flex}.resume-role--compact .resume-bullets{margin-top:12px}.resume-item{margin-bottom:30px}.resume-item:last-child{margin-bottom:0}.resume-item-heading{justify-content:space-between;gap:20px;display:flex}.resume-item h3{font-family:var(--display);letter-spacing:-.03em;margin:0 0 7px;font-size:21px;font-weight:650}.resume-item-heading span{color:var(--muted);font-family:var(--mono);font-size:13px;font-weight:600}.resume-item p,.resume-section>p{color:var(--muted);margin:0}.skill-list{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.skill-list li{background:var(--paper-deep);border-radius:999px;padding:7px 10px;font-size:12px}.resume-note p{font-size:13px}@media (width<=900px){.feed-heading,.resume-hero,.resume-summary,.resume-columns{grid-template-columns:1fr}.home-hero{min-height:auto;padding-block:84px 96px}.feed-heading{gap:24px}.entry-row{grid-template-columns:44px minmax(0,1fr) 100px}.resume-columns{gap:0}.resume-columns>aside{border-left:0;padding-left:0}}@media (width<=640px){.site-header,.page-shell,.site-footer{width:min(100% - 36px,1180px)}.site-header{min-height:78px}.identity small,nav a[aria-current=page]{display:none}nav{gap:12px}nav a{font-size:12px}.home-hero{padding-block:68px 82px}.hero-copy h1{font-size:clamp(48px,15.5vw,64px)}html[lang=en] .hero-copy h1{font-size:clamp(46px,14vw,60px)}.hero-links{align-items:flex-start}.quiet-link{border:0;width:100%;margin:8px 0 0}.feed{padding-block:82px 92px}.feed-heading h2{font-size:48px}.feed-tabs{flex-wrap:nowrap;gap:4px;padding-bottom:4px;overflow-x:auto}.feed-tabs button{flex:none;padding-inline:10px}.feed-empty{grid-template-columns:1fr;gap:10px;padding-block:28px 32px}.site-header nav>a:first-child{display:none}.entry-row{grid-template-columns:28px minmax(0,1fr);gap:16px;min-height:0;padding:28px 20px}.entry-body h3{font-size:28px}.entry-state{grid-column:2;justify-self:start}.post-page{padding-block:38px 82px}.post-back{margin-bottom:34px}.post-hero{padding:18px 0 48px}.post-hero:before{width:110vw;bottom:-34%;right:-38%}.post-meta{margin-bottom:26px}.post-hero h1{font-size:clamp(46px,14vw,62px)}.post-hero>p{font-size:17px}.post-body{padding-block:50px 70px;font-size:17px;line-height:1.9}.post-body h2{font-size:29px}.post-body h3{font-size:23px}.post-figure--wide,.post-gallery{width:calc(100vw - 36px);margin-left:calc(50% + -50vw + 18px)}.post-gallery{grid-template-columns:1fr;gap:0}.post-gallery .post-figure{margin-block:1.8em}.post-callout{padding-inline:18px}.post-body table{font-size:14px}.post-ending{display:grid}.site-footer{flex-wrap:wrap}.site-footer p:nth-child(2),.resume-site-header nav a:first-child,.resume-site-header nav a[rel~=me]{display:none}.print-button{padding-inline:12px;font-size:11px}.resume-page{padding-block:34px 72px}.resume-sheet{border-radius:18px;padding:26px 22px}.resume-hero{gap:34px;padding-bottom:38px}.resume-hero h1{font-size:clamp(44px,14vw,58px)}.resume-education-grid{grid-template-columns:1fr;gap:24px}.resume-role-heading{gap:9px;display:grid}.resume-role-heading time{grid-row:auto;justify-self:start;padding-bottom:0}.resume-role-heading h3{font-size:21px}.resume-position{font-size:14px}.resume-project{padding-left:15px}.not-found h1{letter-spacing:-.055em;font-size:48px}.resume-summary{gap:0}.resume-summary p{font-size:17px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important}}@media (width<=360px){.site-header .identity>span:last-child{display:none}.site-header nav a{white-space:nowrap}}@media print{@page{size:A4;margin:13mm}body{color:#000;background:#fff;font-size:11pt}.site-header,.site-footer{display:none}.resume-page{width:100%;padding:0}.resume-sheet{box-shadow:none;border:0;border-radius:0;padding:0}.resume-hero h1{font-size:52pt}.resume-section{break-inside:avoid;padding-block:22px}.resume-section--long{break-inside:auto}.resume-item,.resume-role-heading,.resume-project,.resume-role--compact{break-inside:avoid}.resume-sheet--detailed .resume-hero h1{font-size:38pt}.resume-sheet--detailed .resume-summary p{font-size:13pt;line-height:1.65}.resume-sheet--detailed .resume-bullets{font-size:9.5pt;line-height:1.55}.resume-role-heading h3{font-size:14pt}.resume-position,.resume-role-heading time,.resume-role-description{font-size:9pt}.resume-columns{grid-template-columns:1.45fr .75fr;gap:34px}.resume-columns>aside{border-left:1px solid #ddd;padding-left:26px}a{text-decoration:none!important}}
