@font-face{font-family:Funnel Display;font-style:normal;font-weight:300 800;font-display:swap;src:url(../media/0c5dbc8cc99ee77f-s.0r8bupko5j52m.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Funnel Display;font-style:normal;font-weight:300 800;font-display:swap;src:url(../media/43b1f09180d16790-s.p.0xa2imhn0fp5k.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Funnel Display Fallback;src:local(Arial);ascent-override:93.85%;descent-override:23.46%;line-gap-override:0.0%;size-adjust:106.55%}.NTLV5a_className{font-family:Funnel Display,Funnel Display Fallback;font-style:normal}.NTLV5a_variable{--font-display:"Funnel Display", "Funnel Display Fallback"}
@font-face{font-family:Funnel Sans;font-style:normal;font-weight:300 800;font-display:swap;src:url(../media/3b494936e59842b0-s.08z9zpoycruvm.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Funnel Sans;font-style:normal;font-weight:300 800;font-display:swap;src:url(../media/95c109acf44fb1dc-s.p.31rnap-za66mk.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Funnel Sans Fallback;src:local(Arial);ascent-override:98.88%;descent-override:24.72%;line-gap-override:0.0%;size-adjust:101.13%}.TD6wKa_className{font-family:Funnel Sans,Funnel Sans Fallback;font-style:normal}.TD6wKa_variable{--font-body:"Funnel Sans", "Funnel Sans Fallback"}
@font-face{font-family:Atkinson Hyperlegible Mono;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/c5a8e16e4d2fdb67.0oq8s6qy1l2lw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible Mono;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/9a99c25b2c6879f5.p.202x5_1668z2o.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}._2AHM3a_className{font-family:Atkinson Hyperlegible Mono;font-style:normal}._2AHM3a_variable{--font-mono:"Atkinson Hyperlegible Mono"}
:root{--bg:#f5f5f2;--text:#1a1a1f;--body:#36363c;--muted:#64646b;--faint:#a3a3a8;--rule:#e0e0dc;--card:#fafaf8;--panel:#ececea;--accent:#256abf;--serif:var(--font-display), system-ui, sans-serif;--reading:var(--font-body), system-ui, sans-serif;--mono:var(--font-mono), ui-monospace, Menlo, monospace;--ease:cubic-bezier(.2, .7, .2, 1);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#11151d;--text:#eef1f5;--body:#c3cad4;--muted:#8b95a3;--faint:#4a5363;--rule:#232a36;--card:#161b25;--panel:#1b2130;--accent:#8db4ff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--body);font-family:var(--reading);-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.65;overflow-x:clip}::selection{background:var(--accent);color:var(--bg)}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}ol,ul{list-style:none}.meta{font-family:var(--mono);color:var(--muted);font-variant-numeric:tabular-nums;font-size:13px}html{scroll-behavior:smooth}.page{max-width:680px;margin:0 auto;padding:32px 20px 64px;position:relative}.page-bg{z-index:-1;pointer-events:none;width:100vw;height:100vh;position:fixed;inset:0;-webkit-mask-image:linear-gradient(90deg,#000 calc(50% - 460px),#00000080 calc(50% - 340px) calc(50% + 340px),#000 calc(50% + 460px));mask-image:linear-gradient(90deg,#000 calc(50% - 460px),#00000080 calc(50% - 340px) calc(50% + 340px),#000 calc(50% + 460px))}@media (max-width:760px){.page-bg{opacity:.45;-webkit-mask-image:none;mask-image:none}}.top{justify-content:flex-end;align-items:center;margin-bottom:88px;display:flex}.theme-toggle{width:32px;height:32px;color:var(--muted);border-radius:50%;place-items:center;transition:color .2s;display:grid}.theme-toggle:hover{color:var(--text)}h1{font-family:var(--serif);letter-spacing:-.025em;color:var(--text);margin-bottom:24px;font-size:clamp(34px,7vw,48px);font-weight:600;line-height:1.08}.flip{perspective:500px;overflow-anchor:none;display:inline-block}.flip-word{white-space:nowrap}.flip-char{transform-origin:50% 50% -.5em;animation:1.1s cubic-bezier(.17,.84,.44,1) both flip-in;animation-delay:calc(var(--i) * 45ms + 80ms);display:inline-block}@keyframes flip-in{0%{opacity:0;transform:rotateX(-100deg)}}.intro{color:var(--body);font-size:18px;line-height:1.65}.intro+.intro{margin-top:12px}.links{color:var(--text);flex-wrap:wrap;gap:6px 20px;margin-top:22px;display:flex}.links a,.footer a{color:var(--accent);-webkit-text-decoration-color:color-mix(in srgb, var(--accent) 45%, transparent)!important;text-decoration-color:color-mix(in srgb, var(--accent) 45%, transparent)!important}.links a:hover,.footer a:hover{-webkit-text-decoration-color:var(--accent)!important;text-decoration-color:var(--accent)!important}.links a,.footer a,h3 a{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1.5px;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted);transition:text-decoration-color .2s}.links a:hover,.footer a:hover,h3 a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.sec{margin-top:80px}.label{font-family:var(--serif);letter-spacing:-.01em;color:var(--text);margin-bottom:18px;font-size:21px;font-weight:600}.org{align-items:center;gap:10px;display:flex}.org-logo{width:28px;height:28px;box-shadow:0 0 0 1px var(--rule);background:#fff;border-radius:7px;flex:none;place-items:center;display:grid;overflow:hidden}.org-logo img{object-fit:contain;width:100%;height:100%;display:block}.org-logo.pad img{width:64%;height:64%}.row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 16px;display:flex}h3{font-family:var(--serif);color:var(--text);font-size:19px;font-weight:600;line-height:1.25}.sub{color:var(--muted)}.body{margin-top:8px;font-size:16px;line-height:1.7}.list>li+li{margin-top:40px}.icon{width:16px;height:16px;fill:var(--muted);color:var(--muted);flex:none}.stack{gap:10px;display:flex}.stack .icon{width:15px;height:15px;fill:var(--faint);color:var(--faint);transition:fill .3s,color .3s}.card:hover .stack .icon{fill:var(--accent);color:var(--accent)}.skills{gap:14px;display:grid}.skill-group{grid-template-columns:96px 1fr;align-items:start;gap:4px 16px;display:grid}.skill-group h3{font-family:var(--reading);color:var(--muted);font-size:15px}.skill-list{flex-wrap:wrap;gap:4px 14px;display:flex}.skill{align-items:center;gap:6px;font-size:15px;display:inline-flex}.skill:not(:last-child):after{content:",";margin-left:-6px}.skill .icon{width:14px;height:14px}.projects{gap:16px;display:grid}.card{border:1px solid var(--rule);background:var(--card);border-radius:6px}.panel{border-bottom:1px solid var(--rule);background:var(--panel);border-radius:5px 5px 0 0;padding:22px 20px 16px}.card-body{padding:18px 20px 20px}.footer p{font-size:15.5px}.footer .meta{margin-top:24px}.panel svg{width:100%;height:auto;display:block;overflow:visible}.panel text{font-family:var(--mono);fill:var(--muted);text-anchor:middle;font-size:11px}.panel text.start{text-anchor:start}.panel text.note{font-family:var(--serif);font-size:12px;font-style:italic}.panel text.accent{fill:var(--accent)}.panel text.tiny{font-size:8.5px}.draw{fill:none;stroke:var(--muted);stroke-width:1px;stroke-linejoin:round}.draw.dim{stroke:var(--rule)}.node{fill:var(--muted)}.packet{fill:var(--accent)}.boundary{fill:none;stroke:var(--faint);stroke-dasharray:4 4}.fill{fill:var(--accent);fill-opacity:.14}.skip-outline{fill:none;stroke:var(--text);stroke-dasharray:3 3}.cross{fill:none;stroke:var(--text);stroke-width:1.5px}.line{fill:var(--faint)}.scanner{fill:var(--accent);fill-opacity:.07}.card-box{fill:var(--card);stroke:var(--muted)}.card-title{fill:var(--text)}.avatar{fill:var(--rule)}.chip-bg{fill:none;stroke:var(--faint)}.link{fill:none;stroke:var(--faint);stroke-dasharray:2 3}.q-packet{animation:4s linear infinite both q-flow}@keyframes q-flow{0%{transform:translate(20px, var(--cy));opacity:0}4%{opacity:1}13%{transform:translate(80px,65px)}22%{transform:translate(190px,65px)}78%{transform:translate(320px,65px)}96%{opacity:1}to{opacity:0;transform:translate(470px,65px)}}.a-packet{animation:6s linear infinite both ask}@keyframes ask{0%{transform:translate(210px, var(--fy));opacity:0}3%{opacity:1}11%{transform:translate(270px,72px)}19%{transform:translate(210px, var(--fy));opacity:1}21%,to{transform:translate(210px, var(--fy));opacity:0}}.fill{transform-box:fill-box;transform-origin:0;animation:fill-in 6s var(--ease) infinite both}@keyframes fill-in{0%,19%{opacity:1;transform:scaleX(0)}28%{transform:scaleX(1)}82%{opacity:1;transform:scaleX(1)}90%,to{opacity:0;transform:scaleX(1)}}.skip{animation:6s linear infinite both skip}@keyframes skip{0%,19%{opacity:0}25%,82%{opacity:1}90%,to{opacity:0}}.scanner{animation:6s linear infinite both scan}@keyframes scan{0%{opacity:0;transform:translateY(0)}5%{opacity:1}60%{opacity:1;transform:translateY(80px)}66%,to{opacity:0;transform:translateY(80px)}}.task-1{animation:6s linear infinite both hit-1}.task-2{animation:6s linear infinite both hit-2}@keyframes hit-1{0%,10%{fill:var(--faint)}14%,88%{fill:var(--accent)}95%,to{fill:var(--faint)}}@keyframes hit-2{0%,46%{fill:var(--faint)}50%,88%{fill:var(--accent)}95%,to{fill:var(--faint)}}.task-card-1{animation:card-1 6s var(--ease) infinite both}.task-card-2{animation:card-2 6s var(--ease) infinite both}@keyframes card-1{0%,13%{opacity:0;transform:translate(-10px)}20%,88%{opacity:1;transform:none}95%,to{opacity:0;transform:none}}@keyframes card-2{0%,49%{opacity:0;transform:translate(-10px)}56%,88%{opacity:1;transform:none}95%,to{opacity:0;transform:none}}@keyframes rise{0%{opacity:0;filter:blur(6px);transform:translateY(10px)}}.fade{animation:rise .8s var(--ease) both;animation-delay:calc(var(--i,0) * 90ms + 50ms);overflow-anchor:none}.js [data-reveal]:not(.shown){opacity:0}.js [data-reveal].shown{animation:rise .8s var(--ease) both;animation-delay:calc(var(--wait,0s) + var(--r,0) * 90ms);overflow-anchor:none}.js [data-play] .draw{stroke-dasharray:1;stroke-dashoffset:1px;transition:stroke-dashoffset 1.4s var(--ease) .2s}.js [data-play].in .draw{stroke-dashoffset:0}.js [data-play] .after{opacity:0;transition:opacity .8s .9s}.js [data-play].in .after{opacity:1}.js [data-play]:not(.playing) *{animation-play-state:paused}::view-transition-old(root){animation-duration:.35s}::view-transition-new(root){animation-duration:.35s}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}.packet,.scanner{display:none}html{scroll-behavior:auto}}@media (max-width:560px){.top{margin-bottom:56px}.panel{padding:16px 12px 12px}.card-body{padding:16px}.panel text{font-size:13px}.panel text.tiny{font-size:9px}.skill-group{grid-template-columns:1fr}.skill-group h3{padding-top:0}}
