@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/04c5164763c40239-s.1kd-r_s9smv5m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/26f284dcc38c84c0-s.3hlisc-pwq13z.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/7e7f32a39836f228-s.0-oo9_1x_xmvg.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/fa39153a3fc630ba-s.36fqqi66-3tjb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/6a5386fd6038edbe-s.3_z45zcoc-xoz.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/051742360c26797e-s.p.1bkzbscqrt8rl.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:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/04c5164763c40239-s.1kd-r_s9smv5m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/26f284dcc38c84c0-s.3hlisc-pwq13z.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/7e7f32a39836f228-s.0-oo9_1x_xmvg.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/fa39153a3fc630ba-s.36fqqi66-3tjb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/6a5386fd6038edbe-s.3_z45zcoc-xoz.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/051742360c26797e-s.p.1bkzbscqrt8rl.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:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/04c5164763c40239-s.1kd-r_s9smv5m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/26f284dcc38c84c0-s.3hlisc-pwq13z.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/7e7f32a39836f228-s.0-oo9_1x_xmvg.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/fa39153a3fc630ba-s.36fqqi66-3tjb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/6a5386fd6038edbe-s.3_z45zcoc-xoz.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/051742360c26797e-s.p.1bkzbscqrt8rl.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:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_1ba41a22-module__HuXfPG__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_1ba41a22-module__HuXfPG__variable{--font-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ground:#fff;--card:#fff;--nav:#ffffffeb;--ink:#0b0d12;--ink-2:#383f4f;--ink-3:#6b7382;--line:#e4e7ed;--line-2:#cfd4de;--accent:#3b5bd9;--accent-ink:#2a43a8;--glow:#3b5bd921;--tint-2:#f4f6fa;--ok:#067a52;--ok-bg:#dff5ec;--shadow:0 1px 2px #0b0d120a;--shadow-hover:0 2px 4px #0b0d120d, 0 18px 40px -20px #3b5bd942}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ground:#07090d;--card:#10141b;--nav:#07090deb;--ink:#f1f3f7;--ink-2:#afb7c6;--ink-3:#798296;--line:#1e242f;--line-2:#2c3441;--accent:#7c9ae6;--accent-ink:#a6bcef;--glow:#7c9ae629;--tint-2:#141922;--ok:#4fd6a4;--ok-bg:#0d2620;--shadow:0 1px 2px #0006;--shadow-hover:0 2px 4px #00000073, 0 18px 40px -20px #7c9ae647}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ground:#07090d;--card:#10141b;--nav:#07090deb;--ink:#f1f3f7;--ink-2:#afb7c6;--ink-3:#798296;--line:#1e242f;--line-2:#2c3441;--accent:#7c9ae6;--accent-ink:#a6bcef;--glow:#7c9ae629;--tint-2:#141922;--ok:#4fd6a4;--ok-bg:#0d2620;--shadow:0 1px 2px #0006;--shadow-hover:0 2px 4px #00000073, 0 18px 40px -20px #7c9ae647}*{box-sizing:border-box}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{--mono:var(--font-mono), ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;background:var(--ground);color:var(--ink);letter-spacing:-.008em;-webkit-font-smoothing:antialiased;margin:0;padding:0 0 130px;font-family:Pretendard Variable,Pretendard,-apple-system,BlinkMacSystemFont,system-ui,Malgun Gothic,sans-serif;font-size:15px;font-weight:400;line-height:1.78}.wrap{max-width:780px;padding-left:max(22px, env(safe-area-inset-left));padding-right:max(22px, env(safe-area-inset-right));margin:0 auto}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-ink)}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}.skip{z-index:40;background:var(--card);border:1px solid var(--line-2);color:var(--ink);box-shadow:var(--shadow);border-radius:8px;padding:10px 16px;font-size:13.5px;font-weight:600;transition:transform .18s;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip:focus-visible{transform:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}a,button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}main:focus{outline:none}.tnum{font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em}.nav{z-index:20;background:var(--nav);-webkit-backdrop-filter:saturate(180%)blur(20px);border-bottom:1px solid var(--line);position:sticky;top:0}.nav-in{max-width:780px;padding-left:max(22px, env(safe-area-inset-left));padding-right:max(22px, env(safe-area-inset-right));align-items:center;gap:20px;height:56px;margin:0 auto;display:flex}.nav-links{overscroll-behavior-x:contain;scrollbar-width:none;flex:1;gap:20px;min-width:0;display:flex;overflow-x:auto}.nav-links::-webkit-scrollbar{display:none}.nav-links a{color:var(--ink-2);white-space:nowrap;padding:4px 0;font-size:14px;font-weight:500;transition:color .18s}.nav-links a:hover{color:var(--accent)}.nav-links a.on{color:var(--ink);font-weight:600}.nav-name{letter-spacing:-.03em;color:var(--ink);white-space:nowrap;flex:none;font-size:14px;font-weight:700}.nav-name:hover{color:var(--accent)}.toggle{font:inherit;color:var(--ink-2);border:1px solid var(--line);cursor:pointer;white-space:nowrap;background:0 0;border-radius:999px;padding:6px 14px;font-size:13px;font-weight:500;transition:color .18s,border-color .18s}.toggle:hover{color:var(--accent);border-color:var(--accent)}.toggle:active{transform:translateY(1px)}.hero{padding:92px 0 54px;position:relative}.hero>*{position:relative}.greet{letter-spacing:-.045em;text-wrap:balance;margin:0;font-size:clamp(29px,5.4vw,44px);font-weight:800;line-height:1.34}.greet b{color:var(--accent);z-index:0;white-space:nowrap;font-weight:800;position:relative}.greet b:after{content:"";background:var(--glow);z-index:-1;border-radius:3px;height:.32em;position:absolute;bottom:.06em;left:-.06em;right:-.06em}.verse{letter-spacing:-.022em;color:var(--ink);margin:30px 0 0;font-size:clamp(16px,2.2vw,18px);font-weight:400;line-height:1.95}.verse span{display:block}.verse span:last-child{color:var(--ink-2)}.sec{padding:58px 0 0;scroll-margin-top:72px}.sec-title{font-family:var(--mono);letter-spacing:.14em;color:var(--ink-3);align-items:center;gap:14px;margin:0 0 22px;font-size:12.5px;font-weight:600;display:flex}.sec-title:after{content:"";background:var(--line);flex:1;height:1px}.company{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:26px;padding:0 0 18px;display:flex}.company strong{letter-spacing:-.025em;font-size:16px;font-weight:700}.company .sub{color:var(--ink-2);font-size:13.5px}.company .per{color:var(--ink-3);margin-left:auto;font-size:13px}.cards{flex-direction:column;gap:18px;display:flex}.cards.tl{gap:36px}.card{border-radius:18px;padding:28px 28px 30px;scroll-margin-top:78px;transition:transform .22s}.cards:not(.tl) .card{isolation:isolate;background:var(--tint-2);position:relative}.cards:not(.tl) .card:after{content:"";z-index:-1;border-radius:inherit;background:var(--card);box-shadow:var(--shadow-hover);opacity:0;transition:opacity .22s;position:absolute;inset:0}.cards.tl .card{padding:0 0 2px}@media (hover:hover){.cards:not(.tl) .card:hover{transform:translateY(-2px)}.cards:not(.tl) .card:hover:after{opacity:1}}.card-top{flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-bottom:6px;display:flex}.card h3{letter-spacing:-.032em;text-wrap:balance;margin:0;font-size:18px;font-weight:700;line-height:1.45}.badge{white-space:nowrap;border-radius:999px;padding:3px 11px;font-size:12px;font-weight:600}.badge.live{color:var(--ok);background:var(--ok-bg)}.meta{color:var(--ink-3);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:4px 14px;margin:0 0 18px;font-size:13px;display:flex}.meta .role{color:var(--ink-2);font-weight:600}.bullets{flex-direction:column;gap:13px;margin:0;padding:0;list-style:none;display:flex}.bullets li{color:var(--ink-2);padding-left:17px;font-size:14px;line-height:1.76;position:relative}.bullets li:before{content:"";background:var(--accent);opacity:.4;border-radius:50%;width:5px;height:5px;position:absolute;top:10px;left:1px}.bullets strong{color:var(--ink);font-weight:700}.stack{border-top:1px solid var(--line);flex-wrap:wrap;gap:6px;margin:22px 0 0;padding:20px 0 0;list-style:none;display:flex}.chip{font-family:var(--mono);color:var(--ink-2);background:var(--tint-2);border:1px solid var(--line);border-radius:7px;align-items:center;gap:6px;padding:4px 10px;font-size:11.5px;font-weight:500;transition:border-color .18s,color .18s,background .18s;display:inline-flex}.chip:hover{color:var(--ink);border-color:var(--line-2);background:var(--card)}.chip-logo{fill:var(--brand);flex:none;transition:fill .18s}.chip-logo.light-brand{fill:var(--brand-lo)}:root[data-theme=dark] .chip-logo.dark-brand{fill:var(--ink)}:root[data-theme=dark] .chip-logo.light-brand{fill:var(--brand)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .chip-logo.dark-brand{fill:var(--ink)}:root:not([data-theme=light]) .chip-logo.light-brand{fill:var(--brand)}}.svc{flex-wrap:wrap;align-items:center;gap:8px 18px;margin-top:18px;display:flex}.svc a{font-size:13.5px;font-weight:600}.skills{flex-direction:column;display:flex}.skillrow{border-bottom:1px solid var(--line);grid-template-columns:130px 1fr;align-items:start;gap:10px 18px;padding:15px 0;display:grid}.skillrow:last-child{border-bottom:0}.skillrow dt{font-family:var(--mono);letter-spacing:.06em;color:var(--ink-3);padding-top:7px;font-size:11.5px;font-weight:600}.skillrow dd{margin:0}.chips{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.edu{flex-direction:column;display:flex}.edu-item{border-bottom:1px solid var(--line);grid-template-columns:130px 1fr;align-items:baseline;gap:4px 18px;padding:16px 0;display:grid}.edu-item:last-child{border-bottom:0}.edu-item .when{color:var(--ink-3);font-variant-numeric:tabular-nums;font-size:13px}.edu-item h3{letter-spacing:-.025em;margin:0;font-size:15px;font-weight:700}.edu-item p{color:var(--ink-2);margin:2px 0 0;font-size:13.5px}.reach-meta{flex-wrap:wrap;gap:8px 28px;margin:30px 0 0;display:flex}.reach-meta div{align-items:baseline;gap:9px;min-width:0;display:flex}.reach-meta dt{color:var(--ink-3);white-space:nowrap;font-size:12.5px;font-weight:600}.reach-meta dd{color:var(--ink-2);min-width:0;margin:0;font-size:13.5px}.reach-meta .mail{font-family:var(--mono);letter-spacing:-.02em;overflow-wrap:anywhere;font-size:13px;font-weight:500}footer{border-top:1px solid var(--line);color:var(--ink-3);flex-wrap:wrap;justify-content:space-between;gap:10px;margin-top:64px;padding-top:26px;font-size:13px;display:flex}.strip{--lane:10px;--lane-gap:14px;border-top:1px solid var(--line);margin:36px 0 0;padding:22px 0 0}.strip-head{color:var(--ink-3);justify-content:space-between;margin-bottom:11px;font-size:11.5px;display:flex}.strip-plot{height:calc(var(--lanes) * (var(--lane) + var(--lane-gap)) - var(--lane-gap));position:relative}.strip-tick{background:var(--line);width:1px;position:absolute;top:-5px;bottom:-5px}.strip-bars{margin:0;padding:0;list-style:none;position:absolute;inset:0}.strip-seg{height:var(--lane);min-width:6px;position:absolute}.strip-seg a{background:color-mix(in srgb, var(--accent) 72%, transparent);border-radius:3px;height:100%;transition:background-color .18s;display:block}.strip-seg a:before{content:"";position:absolute;inset:-7px -2px}.strip-seg a:hover,.strip-seg a:focus-visible{background:var(--accent)}.strip-seg a:after{content:attr(data-label);text-overflow:ellipsis;white-space:nowrap;max-width:270px;font-family:var(--mono);letter-spacing:-.01em;background:var(--ink);color:var(--ground);opacity:0;pointer-events:none;z-index:5;border-radius:6px;padding:5px 9px;font-size:11px;transition:opacity .14s;position:absolute;bottom:calc(100% + 10px);left:0;overflow:hidden}.strip-seg.flip a:after{left:auto;right:0}.strip-seg a:hover:after,.strip-seg a:focus-visible:after{opacity:1}.strip-years{height:14px;margin-top:9px;position:relative}.strip-years span{color:var(--ink-3);font-size:11px;position:absolute;transform:translate(-50%)}.strip-cap{font-family:var(--mono);color:var(--ink);letter-spacing:-.02em;margin:17px 0 0;font-size:13.5px;font-weight:500}.strip-cap .unit,.strip-cap .sep{color:var(--ink-2);letter-spacing:-.01em;font-family:Pretendard Variable,Pretendard,sans-serif;font-size:12.5px;font-weight:500}.act{color:var(--ink-2);border:1px solid var(--line-2);background:0 0;border-radius:999px;padding:8px 17px;font-size:13.5px;font-weight:600;transition:color .18s,border-color .18s,background .18s}.act:hover{color:var(--accent);border-color:var(--accent)}.act:active{transform:translateY(1px)}button.act{font:inherit;cursor:pointer}button.act:disabled{opacity:.55;cursor:default}button.act:disabled:hover,.act-key{color:var(--ground);background:var(--ink);border-color:var(--ink)}.act-key:hover{color:var(--ground);background:var(--accent);border-color:var(--accent)}.tl{padding-left:30px;position:relative}.tl:before{content:"";background:linear-gradient(var(--line-2), var(--line-2) 88%, transparent);width:2px;position:absolute;top:10px;bottom:10px;left:6px}.tl .card{position:relative}.tl .card:before{content:"";background:var(--card);border:2px solid var(--line-2);border-radius:50%;width:12px;height:12px;transition:border-color .22s;position:absolute;top:7px;left:-31px}@media (hover:hover){.tl .card:hover:before{border-color:var(--accent)}}footer .built{color:var(--ink-3);font-size:12px}.fallback{padding-top:120px}.fallback .code{color:var(--ink-3);margin:0 0 10px;font-size:13px}.fallback h1{letter-spacing:-.04em;margin:0;font-size:clamp(24px,4vw,32px);font-weight:800}.fallback p{color:var(--ink-2);max-width:46ch;margin:14px 0 0}.fallback .act{margin-top:28px;display:inline-block}.js .reveal{opacity:0;transition:opacity .62s cubic-bezier(.22,.61,.36,1),transform .62s cubic-bezier(.22,.61,.36,1);transform:translateY(16px)}.js .reveal.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}.js .reveal{opacity:1;transform:none}}@media print{.js .reveal{opacity:1!important;transform:none!important}.nav,.skip{display:none}.card{box-shadow:none;break-inside:avoid}.hero{padding-top:0}.strip-seg a:after{display:none}body{padding-bottom:0}a{color:inherit}}@media (max-width:560px){.wrap{padding-left:max(18px, env(safe-area-inset-left));padding-right:max(18px, env(safe-area-inset-right))}.nav-in{padding-left:max(18px, env(safe-area-inset-left));padding-right:max(18px, env(safe-area-inset-right));gap:14px}.hero{padding:62px 0 60px}.card{border-radius:16px;padding:24px 20px 26px}.company .per{width:100%;margin-left:0}.reach-meta{flex-direction:column;gap:8px}.strip-seg a:after{max-width:168px}.cards.tl{gap:28px}.tl{padding-left:22px}.tl .card:before{width:10px;height:10px;top:6px;left:-23px}.nav-name{display:none}.skillrow,.edu-item{grid-template-columns:1fr}}
