@font-face{font-family:Caveat;font-style:normal;font-weight:400 700;font-display:swap;src:url(/_next/static/media/e44cdba7d0878bc5-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Caveat;font-style:normal;font-weight:400 700;font-display:swap;src:url(/_next/static/media/07fccecd6728972a-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Caveat;font-style:normal;font-weight:400 700;font-display:swap;src:url(/_next/static/media/486fce9f36bc8f45-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Caveat;font-style:normal;font-weight:400 700;font-display:swap;src:url(/_next/static/media/46bdd75a3ff56824-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Caveat Fallback;src:local("Arial");ascent-override:124.77%;descent-override:38.99%;line-gap-override:0.00%;size-adjust:76.94%}.__className_97f5e1{font-family:Caveat,Caveat Fallback;font-style:normal}.__variable_97f5e1{--font-caveat:"Caveat","Caveat Fallback"}:root{color-scheme:light;--bg:#ffffff;--fg:#171717;--fg-muted:#737373;--fg-subtle:#a3a3a3;--link:#171717;--link-hover:#525252;--border:#ebebeb;--font-sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;--font-serif:ui-serif,"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;--max-width:36rem;--line-height:1.65}*,:after,:before{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overflow-x:clip}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:1rem;line-height:var(--line-height)}.shell,body{min-height:100dvh;overflow-x:clip}.shell{display:flex;flex-direction:column;width:100%;max-width:100%}a{color:var(--link);text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb,var(--link) 30%,transparent);text-decoration-color:color-mix(in srgb,var(--link) 30%,transparent);text-underline-offset:.15em;transition:color .12s ease,-webkit-text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease,-webkit-text-decoration-color .12s ease}a:hover{color:var(--link-hover);-webkit-text-decoration-color:color-mix(in srgb,var(--link-hover) 50%,transparent);text-decoration-color:color-mix(in srgb,var(--link-hover) 50%,transparent)}.page{flex:1 1;padding:4.5rem 0 3rem}.container,.page{width:min(100% - 2.5rem,var(--max-width));max-width:100%;margin:0 auto}.header{margin-bottom:2.75rem}.name{margin:0;font-family:var(--font-serif);font-size:1.125rem;font-weight:500;letter-spacing:-.01em}.intro p{margin:0 0 1.15rem;color:var(--fg-muted)}.intro p:last-child{margin-bottom:0}.intro strong{font-weight:500;color:var(--fg)}.links-inline{color:var(--fg-muted)}.section{margin-top:3.25rem}.section-label{margin:0 0 1.25rem;font-size:.8125rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--fg-subtle)}.list{list-style:none;margin:0;padding:0}.list,.list-item{min-width:0;max-width:100%}.list-item{border-top:1px solid var(--border)}.list-item:last-child{border-bottom:1px solid var(--border)}.list-item>a{display:block;padding:.85rem 0;text-decoration:none;color:inherit;overflow:hidden}.list-item>a,.project-row{min-width:0;max-width:100%}.project-row{display:flex;align-items:baseline;gap:.75rem;width:100%}.item-title{flex-shrink:0;max-width:42%;font-weight:500;color:var(--fg);text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb,var(--fg) 30%,transparent);text-decoration-color:color-mix(in srgb,var(--fg) 30%,transparent);text-underline-offset:.15em}.item-desc,.item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-desc{flex:1 1;min-width:0;color:var(--fg-muted);font-size:.9375rem;text-decoration:none}.page-loading{min-height:100dvh}@media (max-width:520px){.page{padding-top:3rem}.container,.page{width:min(100% - 1.5rem,var(--max-width))}.project-row{gap:.5rem}.item-title{max-width:38%;font-size:.9375rem}.item-desc{font-size:.875rem}}.site-footer{position:relative;z-index:2;background:var(--bg);width:100%;max-width:100%;overflow-x:clip}.footer-inner{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;grid-gap:.75rem;gap:.75rem;padding:1.125rem 0 1.5rem;border-top:1px solid var(--border);min-width:0}.footer-brand{font-family:var(--font-caveat),cursive;font-size:1.125rem;justify-self:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.footer-brand,.footer-time{margin:0;color:var(--fg-subtle);min-width:0}.footer-time{font-size:.8125rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;justify-self:end;text-align:right}.footer-lang{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.6875rem;color:var(--fg-subtle);letter-spacing:.02em;justify-self:center}.footer-lang-sep{opacity:.5}.footer-lang-btn{padding:0;border:none;background:none;font:inherit;color:inherit;cursor:pointer;opacity:.45;transition:opacity .12s ease}.footer-lang-btn.is-active,.footer-lang-btn:hover{opacity:1}.footer-lang-btn.is-active{color:var(--fg-muted)}.footer-glow{position:fixed;bottom:0;left:0;right:0;height:5rem;pointer-events:none;z-index:1;overflow:hidden}.footer-glow:before{content:"";position:absolute;bottom:-3rem;left:50%;transform:translateX(-50%);width:min(100%,48rem);height:6rem;background:radial-gradient(ellipse 70% 100% at 50% 100%,rgba(124,58,237,.22) 0,rgba(99,102,241,.14) 35%,rgba(59,130,246,.08) 55%,transparent 75%);filter:blur(24px)}@media (max-width:520px){.footer-inner{gap:.5rem;padding-bottom:max(1.25rem,env(safe-area-inset-bottom))}.footer-brand{font-size:.9375rem}.footer-time{font-size:.6875rem;line-height:1.35}}@media (prefers-reduced-motion:reduce){a{transition:none}}