@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-wght-normal.BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-vietnamese-wght-normal.6IgcOCM7.woff2)format("woff2-variations");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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-ext-wght-normal.DC-KSUi6.woff2)format("woff2-variations");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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-wght-normal.BgDaEnEv.woff2)format("woff2-variations");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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-vietnamese-wght-normal.DadHysG0.woff2)format("woff2-variations");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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2)format("woff2-variations");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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-wght-normal.XN7g48iV.woff2)format("woff2-variations");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}:root{--bg:#fff;--fg:#52525b;--fg-strong:#09090b;--fg-label:#3f3f46;--fg-muted:#71717a;--fg-faint:#a1a1aa;--border:#e4e4e7;--border-soft:#e4e4e799;--acc-frame:#d4d4d859;--card:#fff;--card-frame:#fafafa80;--chip:#f4f4f5;--chip-hover-bg:#09090b;--chip-hover-fg:#fafafa;--accent:#ca8a04;--glow:#09090b29;--selection:#fde04780;--sans:"Geist Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, "Helvetica Neue", Arial, sans-serif;--mono:"Geist Mono Variable", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--measure:40rem;color-scheme:light}html.dark{--bg:#000;--fg:#a1a1aa;--fg-strong:#fafafa;--fg-label:#fafafa;--fg-muted:#a1a1aa;--fg-faint:#71717a;--border:#27272a;--border-soft:#27272ab3;--acc-frame:#52525b4d;--card:#09090b;--card-frame:#09090b66;--chip:#27272a;--chip-hover-bg:#3f3f46;--chip-hover-fg:#fafafa;--accent:#eab308;--glow:#fafafa38;--selection:#fde04729;color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--sans);letter-spacing:-.014em;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:17px;line-height:1.65}::selection{background:var(--selection);color:#000}a{color:inherit;text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:2px;transition:text-decoration-color .15s}a:hover{text-decoration-color:currentColor}strong{color:var(--fg-strong);font-weight:500}h1,h2,h3,h4{color:var(--fg-strong)}.skip-link{background:var(--fg-strong);color:var(--bg);z-index:10;padding:.5rem 1rem;text-decoration:none;position:absolute;top:0;left:-999px}.skip-link:focus{top:1rem;left:1rem}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.page{max-width:var(--measure);margin:0 auto;padding:3rem 1.25rem 0}@media (width>=640px){.page{padding-top:5rem}}.section{margin-bottom:6rem;scroll-margin-top:2rem}.section:last-child{margin-bottom:0}.section-label{text-transform:uppercase;letter-spacing:.11em;color:var(--fg-label);margin:0 0 1.25rem;font-size:.875rem;font-weight:500}p{margin:0 0 1rem}.section>p:last-child{margin-bottom:0}.intro p{color:var(--fg)}.intro ul{margin:.75rem 0 0;padding-left:1.25rem;list-style:outside}.intro li{margin:.5rem 0}.intro h3{margin:1.75rem 0 .35rem;font-size:1rem;font-weight:500}.pill{border:1px solid var(--border);background:var(--chip);color:var(--fg-label);border-radius:999px;align-items:center;gap:.5rem;margin-top:1.75rem;padding:.35rem .9rem;font-size:.875rem;font-weight:500;display:inline-flex}.pill:before{content:"";opacity:.55;background:currentColor;border-radius:999px;width:6px;height:6px}.section h3{margin:1.75rem 0 .35rem;font-size:1rem;font-weight:500}.section h3:first-of-type{margin-top:0}.cards{grid-template-columns:1fr;gap:1.5rem;display:grid}@media (width>=640px){.cards{grid-template-columns:1fr 1fr}}.card{display:block}.card-frame{background:var(--card-frame);box-shadow:inset 0 0 0 1px var(--border-soft);isolation:isolate;border-radius:1rem;padding:.25rem;position:relative}.card-media{z-index:1;aspect-ratio:16/9;cursor:pointer;background-color:color-mix(in oklab, var(--fg-strong) 5%, var(--card));background-image:radial-gradient(circle at 20% 24%, color-mix(in oklab, var(--accent) 55%, transparent), transparent 58%), radial-gradient(circle at 84% 82%, color-mix(in oklab, var(--fg-strong) 28%, transparent), transparent 55%), linear-gradient(135deg, color-mix(in oklab, var(--accent) 18%, var(--card)), var(--card) 75%);border:0;border-radius:.75rem;width:100%;padding:0;display:block;position:relative;overflow:hidden}.card:nth-child(2n) .card-media{background-image:radial-gradient(circle at 80% 22%, color-mix(in oklab, var(--fg-strong) 32%, transparent), transparent 55%), radial-gradient(circle at 14% 84%, color-mix(in oklab, var(--accent) 50%, transparent), transparent 58%), linear-gradient(225deg, color-mix(in oklab, var(--accent) 16%, var(--card)), var(--card) 75%)}.card-media img{object-fit:cover;width:100%;height:100%;display:block}.card-body{padding:.75rem .25rem 0}.card-title{color:var(--fg-strong);font-weight:450;position:relative}.card-title .arr{color:var(--fg-faint);font-size:.8em;font-weight:300}.card-title:after{content:"";background:currentColor;width:0;height:1px;transition:width .2s;position:absolute;bottom:-2px;left:0}.card:hover .card-title:after,.card-title:hover:after{width:100%}.card-desc{color:var(--fg);margin:.5rem 0 0;font-size:.95rem;line-height:1.6}.acc{border:1px solid var(--border);background:var(--card);border-radius:14px;margin-bottom:.6rem;transition:border-color .2s,box-shadow .2s;position:relative;overflow:hidden}.acc:hover,.acc:has(.acc-head[aria-expanded=true]){border-color:var(--fg-faint);box-shadow:0 10px 30px -14px var(--glow)}.acc-head,.acc-body{z-index:1;position:relative}.acc-head{width:100%;font:inherit;text-align:left;color:var(--fg-strong);cursor:pointer;background:0 0;border:0;grid-template-columns:1fr auto;align-items:center;gap:.15rem 1rem;padding:1rem;display:grid}.acc-title{grid-column:1;font-weight:450}.acc-loc{color:var(--fg-muted);grid-column:1;font-size:.85rem}.acc-right{grid-area:1/2/span 2;align-items:center;gap:.6rem;display:inline-flex}.acc-years{color:var(--fg-muted);font-size:.85rem;font-family:var(--mono)}.acc-chevron{width:.9rem;height:.9rem;color:var(--fg-faint);transition:transform .2s,color .2s}.acc-head[aria-expanded=true] .acc-chevron{color:var(--accent);transform:rotate(180deg)}.acc:hover .acc-chevron{color:var(--accent)}.acc-body{overflow:hidden}html.js .acc-body{height:0;transition:height .28s}.acc-body-inner{padding:0 1rem 1rem}.course-list{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.course-list li{color:var(--fg);padding:.55rem 0;font-size:.9375rem}.course-list li+li{border-top:1px solid var(--border)}.course-list .term{font-family:var(--mono);color:var(--fg-faint);margin-top:.1rem;font-size:.7rem;display:block}.connect-line{color:var(--fg)}.email-copy{font:inherit;color:var(--fg-strong);cursor:pointer;text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:2px;background:0 0;border:0;padding:0}.email-copy:hover{text-decoration-color:currentColor}.email-copy[data-copied]:after{content:" ✓ copied";color:var(--accent);text-decoration:none}.chips{flex-wrap:wrap;gap:.5rem;margin-top:1rem;display:flex}.chip{background:var(--chip);color:var(--fg-strong);border-radius:999px;align-items:center;gap:.35rem;padding:.28rem .75rem;font-size:.85rem;text-decoration:none;transition:background .15s,color .15s;display:inline-flex}.chip:hover{background:var(--chip-hover-bg);color:var(--chip-hover-fg)}.chip .arr{opacity:.7;font-size:.85em}.site-footer{border-top:1px solid var(--border);color:var(--fg-faint);justify-content:space-between;align-items:center;gap:1rem;margin-top:6rem;padding:.85rem 0 2.5rem;font-size:.75rem;display:flex}.footer-note{white-space:nowrap;overflow:hidden}.footer-note a{color:inherit;text-decoration:none}.theme-toggle{flex-shrink:0;gap:.25rem;display:inline-flex}.theme-toggle button{width:1.75rem;height:1.75rem;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;border-radius:.5rem;justify-content:center;align-items:center;transition:background .12s,color .12s;display:inline-flex}.theme-toggle button:hover,.theme-toggle button[aria-pressed=true]{background:var(--chip);color:var(--fg-strong)}.theme-toggle svg{width:.95rem;height:.95rem}.post-title{letter-spacing:-.02em;margin:0 0 .4rem;font-size:1.5rem;font-weight:500;line-height:1.25}.post-date{font-family:var(--mono);color:var(--fg-faint);font-size:.75rem}.post-header{margin-bottom:2rem}.prose{color:var(--fg)}.prose>:first-child{margin-top:0}.prose h2{margin:2.25rem 0 .75rem;font-size:1.15rem;font-weight:500}.prose h3{margin:1.75rem 0 .5rem;font-size:1rem;font-weight:500}.prose a{text-decoration-color:currentColor}.prose blockquote{border-left:2px solid var(--border);color:var(--fg-muted);margin:1.5rem 0;padding-left:1rem}.prose ul,.prose ol{padding-left:1.2rem}.prose li{margin:.35rem 0}.prose pre{border:1px solid var(--border);border-radius:6px;margin:1.5rem 0;padding:1rem;font-size:.85rem;line-height:1.5;overflow-x:auto}.prose :not(pre)>code{font-family:var(--mono);font-size:.85em}.prose img{max-width:100%;height:auto}.prose hr{border:0;border-top:1px solid var(--border);margin:2.5rem 0}.entries{margin:0;padding:0;list-style:none}.entries>li{padding:.9rem 0}.entries>li+li{border-top:1px solid var(--border)}.entry-row{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.entry-title{color:var(--fg-strong);text-decoration:none}.entry-title:hover{text-underline-offset:2px;text-decoration:underline}.entry-meta{font-family:var(--mono);color:var(--fg-faint);flex-shrink:0;font-size:.72rem}.entry-sub{color:var(--fg);margin:.2rem 0 0;font-size:.9375rem}.back-link{color:var(--fg-muted);margin-top:4rem;font-size:.8125rem;text-decoration:none;display:inline-block}.back-link:hover{color:var(--fg-strong)}@keyframes nim-reveal{0%{opacity:0;filter:blur(8px);transform:translateY(20px)}to{opacity:1;filter:blur();transform:translateY(0)}}html.js .reveal{animation:.3s cubic-bezier(.22,1,.36,1) backwards nim-reveal;animation-delay:calc(var(--reveal-i,0) * .15s)}.text-effect .te-seg{white-space:pre;display:inline-block}html.js .text-effect .te-seg{animation:.3s backwards nim-fade;animation-delay:calc(var(--te-delay,0s) + var(--te-i,0) * var(--te-stagger,30ms))}@keyframes nim-fade{0%{opacity:0}to{opacity:1}}.text-loop{white-space:nowrap;vertical-align:bottom;display:inline-block;position:relative;overflow:hidden}.text-loop>*{display:block}.text-loop>:not(.is-active){opacity:0;pointer-events:none;position:absolute;inset:0;transform:translateY(20px)}.text-loop>.is-active{opacity:1;transform:translateY(0)}.text-loop.js>*{transition:opacity .3s,transform .3s cubic-bezier(.22,1,.36,1)}.text-loop.js>.is-leaving{opacity:0;transform:translateY(-20px)}.magnetic{will-change:transform;transition:transform .45s cubic-bezier(.22,1,.36,1);display:inline-flex}.magnetic.is-pulling{transition:transform .15s ease-out}.has-spotlight{position:relative;overflow:hidden}.spotlight{pointer-events:none;z-index:0;width:var(--spot-size,160px);height:var(--spot-size,160px);background:radial-gradient(circle at center, var(--fg-strong), transparent 72%);filter:blur(32px);opacity:0;transform:translate3d(calc(var(--spot-x,0px) - var(--spot-size,160px) / 2), calc(var(--spot-y,0px) - var(--spot-size,160px) / 2), 0);border-radius:999px;transition:opacity .2s;position:absolute}.has-spotlight:hover .spotlight{opacity:.16}html.dark .has-spotlight:hover .spotlight{opacity:.22}.slide-group{position:relative}.slide-hl{background:var(--chip);opacity:0;pointer-events:none;border-radius:.6rem;width:0;height:0;transition:transform .2s cubic-bezier(.4,0,.2,1),width .2s cubic-bezier(.4,0,.2,1),height .2s cubic-bezier(.4,0,.2,1),opacity .2s;position:absolute;top:0;left:0}.slide-group.is-active .slide-hl{opacity:1}.slide-group [data-slide-item]{z-index:1;position:relative}.lightbox{z-index:50;background:color-mix(in oklab, var(--bg) 82%, transparent);backdrop-filter:blur(4px);opacity:0;pointer-events:none;justify-content:center;align-items:center;padding:1.5rem;transition:opacity .2s;display:flex;position:fixed;inset:0}.lightbox.is-open{opacity:1;pointer-events:auto}.lightbox-inner{background:var(--card-frame);max-width:min(90vw,60rem);max-height:85vh;box-shadow:inset 0 0 0 1px var(--border-soft);border-radius:1rem;padding:.25rem;transition:transform .3s cubic-bezier(.22,1,.36,1);transform:scale(.96)}.lightbox.is-open .lightbox-inner{transform:scale(1)}.lightbox-inner img{object-fit:contain;border-radius:.85rem;width:100%;height:auto;max-height:calc(85vh - .5rem);display:block}.lightbox-close{background:var(--card);width:2rem;height:2rem;color:var(--fg-muted);cursor:pointer;box-shadow:0 2px 10px -2px var(--glow);border:0;border-radius:999px;justify-content:center;align-items:center;display:inline-flex;position:fixed;top:1.25rem;right:1.25rem}.scroll-progress{transform-origin:0;background:var(--accent);z-index:60;width:100%;height:2px;position:fixed;top:0;left:0;transform:scaleX(0)}@media (prefers-reduced-motion:reduce){*,.reveal,.text-effect .te-seg{transition-duration:.01ms!important;animation:none!important}.reveal,.text-effect .te-seg{opacity:1!important;filter:none!important;transform:none!important}}.sr-only[data-astro-cid-g72qob43]{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.site-header[data-astro-cid-fzpbxy5g]{margin-bottom:2.5rem}.site-header[data-astro-cid-fzpbxy5g] .name[data-astro-cid-fzpbxy5g]{letter-spacing:-.025em;color:var(--fg-strong);font-size:1.3125rem;font-weight:500;text-decoration:none;display:inline-block}.site-header[data-astro-cid-fzpbxy5g] .role[data-astro-cid-fzpbxy5g]{color:var(--fg-muted);margin:.15rem 0 0;font-size:.9rem}.tt[data-astro-cid-l6lhmie6]{flex-shrink:0;gap:.15rem;display:inline-flex;position:relative}.tt-hl[data-astro-cid-l6lhmie6]{background:var(--chip);opacity:0;pointer-events:none;border-radius:.5rem;width:1.75rem;height:1.75rem;transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s;position:absolute;top:0;left:0}.tt[data-astro-cid-l6lhmie6] button[data-astro-cid-l6lhmie6]{z-index:1;width:1.75rem;height:1.75rem;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;border-radius:.5rem;justify-content:center;align-items:center;transition:color .12s;display:inline-flex;position:relative}.tt[data-astro-cid-l6lhmie6] button[data-astro-cid-l6lhmie6]:hover,.tt[data-astro-cid-l6lhmie6] button[data-astro-cid-l6lhmie6][aria-pressed=true]{color:var(--fg-strong)}.tt[data-astro-cid-l6lhmie6] svg[data-astro-cid-l6lhmie6]{width:.95rem;height:.95rem}
