@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}.brand-logo[data-astro-cid-uivuhh7y]{color:var(--fg);align-items:center;gap:.65rem;display:inline-flex}svg[data-astro-cid-uivuhh7y]{flex-shrink:0;display:block}nav[data-astro-cid-wpvy4v7s]{z-index:100;width:100%;max-width:720px;margin:1rem auto 0;padding:0 1.25rem;position:sticky;top:1rem}.nav-inner[data-astro-cid-wpvy4v7s]{background:var(--bg-card);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:99px;justify-content:space-between;align-items:center;padding:.65rem 1.5rem;transition:border-color .3s,box-shadow .3s,background-color .3s;display:flex}.nav-inner[data-astro-cid-wpvy4v7s]:hover{border-color:var(--border-hover);box-shadow:0 4px 20px color-mix(in srgb, var(--brand-blue) 12%, transparent)}.logo[data-astro-cid-wpvy4v7s]{flex-shrink:0;justify-content:center;align-items:center;text-decoration:none;transition:opacity .2s;display:flex}.logo[data-astro-cid-wpvy4v7s]:hover{opacity:.85;text-decoration:none}ul[data-astro-cid-wpvy4v7s]{align-items:center;gap:.75rem;list-style:none;display:flex}li[data-astro-cid-wpvy4v7s]{align-items:center;display:flex}a[data-astro-cid-wpvy4v7s]{font-size:var(--text-nav-size);color:var(--fg-muted);padding:.25rem .5rem;font-weight:500;text-decoration:none;transition:color .2s;position:relative}a[data-astro-cid-wpvy4v7s]:hover{color:var(--fg);text-decoration:none}a[data-astro-cid-wpvy4v7s].active{color:var(--accent-1)}a[data-astro-cid-wpvy4v7s].active:after{content:"";background:var(--brand-blue);width:4px;height:4px;box-shadow:0 0 8px color-mix(in srgb, var(--brand-blue) 45%, transparent);border-radius:99px;transition:width .3s cubic-bezier(.16,1,.3,1),border-radius .3s;position:absolute;bottom:-2px;left:50%;transform:translate(-50%)}a[data-astro-cid-wpvy4v7s]:hover.active:after{width:14px}@media (width<=620px){nav[data-astro-cid-wpvy4v7s]{padding:0 .75rem;top:.75rem}.nav-inner[data-astro-cid-wpvy4v7s]{gap:.5rem;padding:.15rem .35rem .15rem .9rem}.logo[data-astro-cid-wpvy4v7s] .brand-wordmark,.nav-home[data-astro-cid-wpvy4v7s]{display:none}.logo[data-astro-cid-wpvy4v7s]{min-height:44px}ul[data-astro-cid-wpvy4v7s]{gap:0}a[data-astro-cid-wpvy4v7s]{font-size:var(--text-nav-size-sm);align-items:center;min-height:44px;padding:0 .55rem;display:inline-flex}a[data-astro-cid-wpvy4v7s].active:after{bottom:6px}}@media (width<=359px){.nav-inner[data-astro-cid-wpvy4v7s]{padding-left:.7rem}a[data-astro-cid-wpvy4v7s]{padding:0 .4rem}}.social-links[data-astro-cid-y2qsmizv]{flex-wrap:wrap;align-items:center;gap:1.25rem;display:flex}a[data-astro-cid-y2qsmizv]{color:var(--fg-muted);width:var(--sz);height:var(--sz);flex:0 0 var(--sz);justify-content:center;align-items:center;text-decoration:none;transition:color .3s cubic-bezier(.16,1,.3,1),transform .3s cubic-bezier(.16,1,.3,1),filter .3s;display:flex;position:relative}a[data-astro-cid-y2qsmizv]:before{content:"";position:absolute;inset:-.625rem}a[data-astro-cid-y2qsmizv]:hover{color:var(--accent-1);filter:drop-shadow(0 0 6px color-mix(in srgb, var(--accent-1) 50%, transparent));text-decoration:none;transform:scale(1.18)}a[data-astro-cid-y2qsmizv] svg{width:var(--sz);height:var(--sz);display:block}.theme-control[data-astro-cid-m4rhk2r6]{box-sizing:border-box;border:1px solid var(--border);background:var(--bg-card);border-radius:999px;grid-template-columns:auto auto auto;gap:.05rem;height:32px;padding:1px .08rem;display:inline-grid;position:relative}.theme-thumb[data-astro-cid-m4rhk2r6]{z-index:0;background:var(--accent-1);pointer-events:none;border-radius:999px;grid-area:1/3;width:100%;min-width:0;height:100%;transition:transform .28s cubic-bezier(.32,.72,0,1),width .28s cubic-bezier(.32,.72,0,1),background-color .2s}.theme-control[data-astro-cid-m4rhk2r6].thumb-ready .theme-thumb[data-astro-cid-m4rhk2r6]{grid-area:auto;width:0;height:auto;position:absolute;inset:1px auto 1px 0;transform:translate(0)}button[data-astro-cid-m4rhk2r6]{z-index:1;font:inherit;font-size:var(--text-ui-control-size);letter-spacing:.01em;min-width:44px;min-height:28px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;border-radius:999px;padding:.125rem .65rem;line-height:1.2;transition:color .2s;position:relative}button[data-astro-cid-m4rhk2r6][data-theme-option=light]{grid-area:1/1}button[data-astro-cid-m4rhk2r6][data-theme-option=dark]{grid-area:1/2}button[data-astro-cid-m4rhk2r6][data-theme-option=system]{grid-area:1/3}button[data-astro-cid-m4rhk2r6][aria-pressed=true]{color:var(--bg);background:var(--accent-1)}.theme-control[data-astro-cid-m4rhk2r6].thumb-ready button[data-astro-cid-m4rhk2r6][aria-pressed=true]{background:0 0}button[data-astro-cid-m4rhk2r6]:focus-visible{outline:2px solid var(--accent-3);outline-offset:2px}@media (prefers-reduced-motion:reduce){.theme-thumb[data-astro-cid-m4rhk2r6],button[data-astro-cid-m4rhk2r6]{transition:none}}footer[data-astro-cid-jo6i4kqk]{border-top:1px solid var(--border);z-index:1;margin-top:auto;padding:2.5rem 1.25rem;position:relative}.footer-inner[data-astro-cid-jo6i4kqk]{flex-direction:column;align-items:center;gap:1rem;max-width:680px;margin:0 auto;display:flex}.footer-meta[data-astro-cid-jo6i4kqk]{justify-content:space-between;align-items:center;gap:1rem;width:100%;display:flex}.copy[data-astro-cid-jo6i4kqk]{font-size:var(--text-footer-size);color:var(--fg-muted);letter-spacing:.02em;align-items:center;gap:.45rem;font-weight:400;display:flex}.sep[data-astro-cid-jo6i4kqk]{opacity:.55}.copy[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:var(--fg-muted);text-decoration:none;transition:color .2s}.copy[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--accent-1);text-decoration:none}@media (width<=620px){.footer-meta[data-astro-cid-jo6i4kqk]{text-align:center;flex-direction:column;justify-content:center}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}:root{--brand-blue:#2474ff;--bg:#101820;--bg-card:#192532b8;--project-card-bg:#1925328f;--bg-card-hover:#223245d9;--fg:#fff;--fg-muted:#a1afbf;--accent-1:#82b2ff;--accent-2:var(--brand-blue);--accent-3:#b5c9e6;--button-bg-start:#206bea;--button-bg-end:#1958c7;--button-fg:#fff;--link-hover:var(--accent-1);--border:#b5c9e624;--border-hover:#82b2ff61;--radius:16px;--font-heading:"Plus Jakarta Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-body:"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--text-page-title-size:2.75rem;--text-page-title-weight:800;--text-page-title-tracking:-.04em;--text-post-title-size:2.5rem;--text-post-title-weight:800;--text-post-title-tracking:-.03em;--text-post-title-lh:1.25;--text-content-h2-size:1.5rem;--text-content-h3-size:1.25rem;--text-card-title-size:1.05rem;--text-card-title-weight:700;--text-card-title-tracking:-.01em;--text-subtitle-size:1.05rem;--text-subtitle-weight:400;--text-body-size:1rem;--text-body-lh:1.75;--text-prose-size:1.025rem;--text-prose-lh:1.8;--text-supporting-size:.9rem;--text-supporting-lh:1.5;--text-caption-size:.8rem;--text-meta-size:.75rem;--text-meta-weight:600;--text-meta-tracking:.04em;--text-section-label-size:.75rem;--text-section-label-weight:700;--text-section-label-tracking:.12em;--text-chip-size:.7rem;--text-chip-weight:600;--text-badge-size:.65rem;--text-badge-weight:700;--text-badge-tracking:.04em;--text-ext-label-size:.725rem;--text-ext-label-weight:600;--text-code-size:.875rem;--text-empty-size:.95rem;--text-footer-size:.75rem;--text-nav-size:.85rem;--text-nav-size-sm:.82rem;--text-logo-size:.95rem;--text-ui-control-size:.65rem;--shadow:0 8px 32px 0 #050c143d;--ambient-opacity:.1;--ambient-blend-mode:screen;--ambient-blur:120px;color-scheme:dark}@media (width<=480px){:root{--text-post-title-size:2rem}}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#fff;--bg-card:#f5f8fdd1;--project-card-bg:#f5f8fda3;--bg-card-hover:#e9f1ffe6;--fg:#111820;--fg-muted:#566579;--accent-1:#1d63db;--accent-2:var(--brand-blue);--accent-3:#455e80;--border:#1118201a;--border-hover:#2474ff52;--shadow:0 8px 32px 0 #1018200f;--ambient-opacity:.04;--ambient-blend-mode:multiply;--ambient-blur:100px;color-scheme:light}}:root[data-theme=light]{--bg:#fff;--bg-card:#f5f8fdd1;--project-card-bg:#f5f8fda3;--bg-card-hover:#e9f1ffe6;--fg:#111820;--fg-muted:#566579;--accent-1:#1d63db;--accent-2:var(--brand-blue);--accent-3:#455e80;--border:#1118201a;--border-hover:#2474ff52;--shadow:0 8px 32px 0 #1018200f;--ambient-opacity:.04;--ambient-blend-mode:multiply;--ambient-blur:100px;color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*,:before,:after{box-sizing:border-box;margin:0;padding:0}::selection{background:color-mix(in srgb, var(--accent-1) 25%, transparent);color:var(--fg);text-shadow:none!important}html{font-family:var(--font-body);background-color:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;scroll-behavior:smooth;line-height:1.6}body{flex-direction:column;min-height:100vh;display:flex;position:relative;overflow-x:hidden}.skip-link{z-index:200;background:var(--bg);color:var(--fg);border-radius:8px;padding:.65rem 1rem;position:fixed;top:.75rem;left:1rem;transform:translateY(-200%)}.skip-link:focus{outline:2px solid var(--accent-1);outline-offset:3px;transform:translateY(0)}:focus-visible{outline:2px solid var(--accent-1);outline-offset:4px}#main-content,section{scroll-margin-top:calc(8rem + env(safe-area-inset-top))}#main-content:focus{outline:none}.ambient-glow{z-index:-1;pointer-events:none;position:fixed;inset:0;overflow:hidden}.ambient-glow:before,.ambient-glow:after{content:"";width:60vw;min-width:400px;height:60vw;min-height:400px;filter:blur(var(--ambient-blur));opacity:var(--ambient-opacity);pointer-events:none;mix-blend-mode:var(--ambient-blend-mode);border-radius:50%;position:absolute}.ambient-glow:before{background:radial-gradient(circle, var(--brand-blue) 0%, transparent 70%);animation:30s ease-in-out infinite alternate float-glow-1;top:-20%;left:-10%}.ambient-glow:after{background:radial-gradient(circle, var(--accent-2) 0%, transparent 70%);animation:35s ease-in-out infinite alternate float-glow-2;bottom:-20%;right:-10%}@keyframes float-glow-1{0%{transform:translate(0)scale(1)}50%{transform:translate(80px,60px)scale(1.1)}to{transform:translate(-30px,120px)scale(.9)}}@keyframes float-glow-2{0%{transform:translate(0)scale(.95)}50%{transform:translate(-60px,-80px)scale(1.05)}to{transform:translate(40px,-40px)scale(1)}}main{z-index:1;flex:1;width:100%;max-width:720px;margin:0 auto;padding:2.5rem 1.25rem;position:relative}body.layout-wide nav,body.layout-wide main{max-width:1120px}body.layout-wide main{padding-top:1.5rem}a{color:var(--accent-1);text-decoration:none;transition:color .2s}a:hover{color:var(--link-hover);text-decoration:none}h1,h2,h3,h4,p,li,code,strong{overflow-wrap:anywhere}img{max-width:100%;height:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:99px}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}.glass-card{background:var(--bg-card);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);transition:transform .3s cubic-bezier(.16,1,.3,1),border-color .3s,box-shadow .3s,background-color .3s}.glass-card:hover{background:var(--bg-card-hover);border-color:var(--border-hover);transform:translateY(-2px)}h1,h2,h3,h4{font-family:var(--font-heading);letter-spacing:-.02em;font-weight:700}.page-title{font-family:var(--font-heading);font-size:var(--text-page-title-size);font-weight:var(--text-page-title-weight);letter-spacing:var(--text-page-title-tracking);background:linear-gradient(135deg, var(--fg) 20%, var(--accent-1) 70%);-webkit-text-fill-color:transparent;background-clip:text}.post-title{font-family:var(--font-heading);font-size:var(--text-post-title-size);font-weight:var(--text-post-title-weight);letter-spacing:var(--text-post-title-tracking);line-height:var(--text-post-title-lh);background:linear-gradient(135deg, var(--fg) 20%, var(--accent-1) 70%);-webkit-text-fill-color:transparent;background-clip:text}.page-subtitle{color:var(--fg-muted);font-size:var(--text-subtitle-size);font-weight:var(--text-subtitle-weight)}.section-label{font-family:var(--font-heading);font-size:var(--text-section-label-size);font-weight:var(--text-section-label-weight);color:var(--accent-1);letter-spacing:var(--text-section-label-tracking);text-transform:uppercase;display:inline-block;position:relative}.section-label:after{content:"";background:linear-gradient(90deg, var(--accent-1), var(--accent-2));border-radius:99px;width:20px;height:2px;position:absolute;bottom:-4px;left:0}.card-title{font-family:var(--font-heading);font-size:var(--text-card-title-size);font-weight:var(--text-card-title-weight);letter-spacing:var(--text-card-title-tracking)}.body-text{font-size:var(--text-body-size);color:var(--fg-muted);line-height:var(--text-body-lh)}.supporting-text{font-size:var(--text-supporting-size);color:var(--fg-muted);line-height:var(--text-supporting-lh)}.meta{font-size:var(--text-meta-size);font-weight:var(--text-meta-weight);color:var(--accent-1);letter-spacing:var(--text-meta-tracking);text-transform:uppercase}.caption{font-size:var(--text-caption-size);color:var(--fg-muted)}.chip{font-size:var(--text-chip-size);font-weight:var(--text-chip-weight)}.type-badge{font-size:var(--text-badge-size);font-weight:var(--text-badge-weight);letter-spacing:var(--text-badge-tracking);text-transform:uppercase}.ext-link-label{font-size:var(--text-ext-label-size);font-weight:var(--text-ext-label-weight)}.empty-text{color:var(--fg-muted);font-size:var(--text-empty-size)}.font-mono,code{font-family:var(--font-mono)}.scroll-reveal{opacity:1;transform:none}@media (prefers-reduced-motion:no-preference){.js-scroll-reveal .scroll-reveal:not(.reveal-visible){opacity:0;transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1);transform:translateY(24px)}.js-scroll-reveal .scroll-reveal.reveal-visible{opacity:1;transform:translateY(0)}@supports (animation-timeline:view()) and (animation-range:entry){@keyframes fade-reveal{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.scroll-reveal{opacity:1;transition:none;animation:linear both fade-reveal view();animation-range:entry 5% entry 30%;transform:none}.js-scroll-reveal .scroll-reveal:not(.reveal-visible){opacity:1;transition:none;transform:none}}}@keyframes blur-reveal-anim{0%{filter:blur(10px);opacity:0;transform:translateY(12px)}to{filter:blur();opacity:1;transform:translateY(0)}}.blur-reveal{opacity:0;animation:.8s cubic-bezier(.16,1,.3,1) forwards blur-reveal-anim}.blur-reveal-delayed-1{opacity:0;animation:.8s cubic-bezier(.16,1,.3,1) .12s forwards blur-reveal-anim}.blur-reveal-delayed-2{opacity:0;animation:.8s cubic-bezier(.16,1,.3,1) .24s forwards blur-reveal-anim}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.blur-reveal,.blur-reveal-delayed-1,.blur-reveal-delayed-2{opacity:1;filter:none;animation:none;transform:none}.ambient-glow:before,.ambient-glow:after{animation:none}}img.as-badge-light,img.ms-badge-light,:root[data-theme=dark] img.as-badge-dark,:root[data-theme=dark] img.ms-badge-dark{display:none}:root[data-theme=dark] img.as-badge-light,:root[data-theme=dark] img.ms-badge-light{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) img.as-badge-dark,:root:not([data-theme=light]) img.ms-badge-dark{display:none}:root:not([data-theme=light]) img.as-badge-light,:root:not([data-theme=light]) img.ms-badge-light{display:block}}
