@font-face{font-family:Geist;src:url(/assets/fonts/geist-variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/assets/fonts/GeistMono-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Pixel;src:url(/assets/fonts/GeistPixel-Grid.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Geist;src:url(/assets/fonts/geist-variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/assets/fonts/GeistMono-Variable.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Pixel;src:url(/assets/fonts/GeistPixel-Grid.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--font-body: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;--font-heading: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "Geist Mono", ui-monospace, monospace;--font-pixel: "Geist Pixel", "Geist Mono", ui-monospace, monospace;--font-serif: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;--font-size-base: 18px;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.563rem;--font-size-3xl: 1.953rem;--font-size-4xl: 2.441rem;--font-size-reading: 1.125rem;--line-height-tight: 1.1;--line-height-normal: 1.5;--line-height-relaxed: 1.6;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--container-max: 90vw;--border-radius: 4px;--color-bg: #ffffff;--color-bg-alt: #f8f8f8;--color-text: #1a1a1a;--color-text-muted: #666666;--color-border: #e0e0e0;--color-accent: #0066cc;--color-accent-hover: #0052a3;--color-code-bg: #f0f4f8;--color-code-border: #d0dbe8;--color-code-badge-bg: #dce4ee;--color-code-badge-text: #4a6a8a;--color-selection: rgba(0, 102, 204, .15)}@media(prefers-color-scheme:dark){:root{--color-bg: #1a1612;--color-bg-alt: #252118;--color-text: #c9c5c0;--color-text-muted: #8a857f;--color-border: #3a342e;--color-accent: #8da3b9;--color-accent-hover: #a4b9cc;--color-code-bg: #1a1e2e;--color-code-border: #2a3248;--color-code-badge-bg: #2a3248;--color-code-badge-text: #8a9ab8;--color-selection: rgba(141, 163, 185, .25)}}*,*:before,*:after{box-sizing:border-box}*{margin:0;padding:0}html{font-size:var(--font-size-base);-webkit-text-size-adjust:100%}body{font-family:var(--font-body);font-size:var(--font-size-base);line-height:var(--line-height-relaxed);color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-weight:400;font-kerning:normal;-webkit-text-size-adjust:100%;text-size-adjust:100%}::selection{background-color:var(--color-selection)}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);margin-top:var(--space-6);margin-bottom:var(--space-3);font-weight:700;line-height:var(--line-height-tight);letter-spacing:-.02em;text-wrap:balance}h1{font-size:var(--font-size-4xl)}h2{font-size:var(--font-size-3xl)}h3{font-size:var(--font-size-2xl)}h4{font-size:var(--font-size-xl)}h5{font-size:var(--font-size-lg)}h6{font-size:var(--font-size-md)}p,ul,ol,pre,table,blockquote{margin-bottom:var(--space-4)}table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm);line-height:var(--line-height-normal);overflow-x:auto;display:block}thead{border-bottom:2px solid var(--color-border)}th{font-weight:600;text-align:left;padding:var(--space-3) var(--space-4);color:var(--color-text);white-space:nowrap}td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border);color:var(--color-text);vertical-align:top}tr:last-child td{border-bottom:none}tbody tr:hover{background-color:var(--color-bg-alt)}p{text-wrap:pretty;hyphenate-limit-chars:6 3 2;text-spacing:trim-start allow-end;word-break:auto-phrase}pre+p,pre+ul,pre+ol,pre+blockquote{margin-top:var(--space-6)}a{color:var(--color-accent);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s,color .2s;font-feature-settings:"case","lnum","pnum","ss01";cursor:pointer}a:hover{color:var(--color-accent-hover);border-bottom-color:currentColor}ul,ol{padding-left:var(--space-6)}li{margin-bottom:var(--space-2)}blockquote{position:relative;margin-left:0;margin-right:0;padding:var(--space-6) var(--space-8);padding-left:var(--space-8);background-color:var(--color-bg-alt);border-radius:var(--border-radius);border:1px solid var(--color-border);border-left:3px solid var(--color-accent);color:var(--color-text);font-style:normal}blockquote:before{content:"“";position:absolute;top:var(--space-2);left:var(--space-4);font-family:var(--font-serif);font-size:2.5rem;line-height:1;color:var(--color-accent);opacity:.3}blockquote p{font-family:var(--font-serif);font-size:var(--font-size-lg);line-height:var(--line-height-relaxed);font-style:italic}blockquote p:last-child{margin-bottom:0}blockquote cite,blockquote footer{display:block;margin-top:var(--space-3);font-family:var(--font-body);font-size:var(--font-size-sm);font-style:normal;color:var(--color-text-muted)}blockquote cite:before,blockquote footer:before{content:"— "}code{font-family:var(--font-mono);font-size:.875em;padding:.15em .4em;background-color:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:4px;word-break:break-word}pre{overflow-x:auto;overflow-y:hidden;padding:var(--space-4);margin:0;background-color:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:6px;font-family:var(--font-mono);font-size:.875rem;line-height:1.6;position:relative}pre code{padding:0;background:none;border:none;font-family:inherit}.astro-code{background-color:var(--color-code-bg)!important;border:1px solid var(--color-code-border);border-radius:6px;padding:var(--space-4);padding-top:var(--space-8);margin:var(--space-6) 0}.astro-code[data-language]:before{content:attr(data-language);position:absolute;top:0;right:0;padding:var(--space-1) var(--space-3);font-family:var(--font-pixel);font-size:.75rem;font-weight:400;letter-spacing:.05em;text-transform:uppercase;color:var(--color-code-badge-text);background-color:var(--color-code-badge-bg);border-bottom-left-radius:6px;border-top-right-radius:5px}.astro-code code{display:block;width:100%;background:transparent!important;padding:0!important}@media(prefers-color-scheme:light){.astro-code{color:var(--shiki-light)!important;background-color:var(--color-code-bg)!important}.astro-code span{color:var(--shiki-light)!important;background-color:transparent!important}}@media(prefers-color-scheme:dark){.astro-code{color:var(--shiki-dark)!important;background-color:var(--color-code-bg)!important}.astro-code span{color:var(--shiki-dark)!important;background-color:transparent!important}}.code-block-tabs{margin:var(--space-6) 0;background-color:var(--color-code-bg);border:1px solid var(--color-code-border);border-radius:6px;overflow:hidden}.code-tabs-container{display:flex;gap:0;border-bottom:1px solid var(--color-code-border);padding:0;background-color:var(--color-code-badge-bg)}.code-tab{background:none;border:none;padding:var(--space-3) var(--space-4);min-height:44px;font-family:var(--font-pixel);font-size:.75rem;color:var(--color-text-muted);cursor:pointer;text-transform:lowercase;letter-spacing:.05em;transition:color .2s ease,background-color .2s ease;border-bottom:2px solid transparent;position:relative;top:1px}.code-tab:hover{color:var(--color-text)}.code-tab.active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.code-block-tabs .code-content{display:none;margin:0;border:none;border-radius:0;padding:var(--space-4);background-color:transparent!important}.code-block-tabs .code-content.active,.code-block-tabs .code-content code{display:block}.code-block-tabs .code-content,.code-block-tabs .code-content span{background-color:transparent!important}@media(prefers-color-scheme:light){.code-block-tabs .code-content,.code-block-tabs .code-content span{color:var(--shiki-light)!important}}@media(prefers-color-scheme:dark){.code-block-tabs .code-content,.code-block-tabs .code-content span{color:var(--shiki-dark)!important}}img{max-width:100%;height:auto;display:block;margin:var(--space-8) auto}hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-10) 0}.container{display:grid;grid-template-columns:1fr min(var(--container-max),100%) 1fr;grid-template-rows:auto 1fr auto;min-height:100vh;padding:0 var(--space-6);overflow-x:hidden}.container>*{grid-column:2}.site-header{padding:var(--space-4) 0;border-bottom:1px solid var(--color-border);margin-bottom:var(--space-6);background-color:var(--color-bg)}.nav{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:nowrap;position:relative}.mobile-menu-toggle{display:none;background:none;border:none;padding:var(--space-3);min-width:48px;min-height:48px;cursor:pointer;z-index:1000}.hamburger{display:block;width:24px;height:2px;background-color:var(--color-text);position:relative;transition:background-color .3s ease}.hamburger:before,.hamburger:after{content:"";position:absolute;width:24px;height:2px;background-color:var(--color-text);transition:transform .3s ease}.hamburger:before{top:-8px}.hamburger:after{top:8px}.mobile-menu-toggle[aria-expanded=true] .hamburger{background-color:transparent}.mobile-menu-toggle[aria-expanded=true] .hamburger:before{transform:rotate(45deg) translate(6px,6px)}.mobile-menu-toggle[aria-expanded=true] .hamburger:after{transform:rotate(-45deg) translate(6px,-6px)}.nav-title{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);border:none;font-family:var(--font-heading);letter-spacing:-.02em;transition:color .2s ease;flex-shrink:0}.nav-title:hover{color:var(--color-accent);border:none}.nav-links{display:flex;align-items:center;gap:var(--space-4);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;flex-shrink:1;min-width:0;flex-wrap:nowrap}.nav-links::-webkit-scrollbar{height:4px}.nav-links::-webkit-scrollbar-track{background:transparent}.nav-links::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:2px}.nav-links::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}.nav-links a{color:var(--color-text-muted);border:none;font-weight:500;font-size:var(--font-size-md);padding:var(--space-1) var(--space-2);border-radius:var(--border-radius);transition:color .2s ease;position:relative;white-space:nowrap;flex-shrink:0}.nav-links a:after{content:"";position:absolute;bottom:0;left:var(--space-3);right:var(--space-3);height:2px;background-color:var(--color-accent);transform:scaleX(0);transition:transform .2s ease}.nav-links a:hover{color:var(--color-text)}.nav-links a:hover:after{transform:scaleX(1)}.nav-links a[aria-current=page]{color:var(--color-accent);font-weight:600}.nav-links a[aria-current=page]:after{transform:scaleX(1)}.main{container-type:inline-size;min-height:calc(100vh - 200px);margin-bottom:var(--space-12)}.posts-list{list-style:none;padding:0;display:grid;grid-template-columns:1fr auto;gap:0}.post-item{display:grid;grid-template-columns:subgrid;grid-column:1 / -1;padding:var(--space-6) var(--space-4);margin:0 calc(-1 * var(--space-4));border-bottom:1px solid var(--color-border);border-radius:var(--border-radius);align-items:baseline;transition:background-color .2s ease}.post-item:hover{background-color:var(--color-bg-alt)}.post-item:first-child{padding-top:0}.post-item:last-child{border-bottom:none}.post-header{display:grid;grid-template-columns:subgrid;grid-column:1 / -1;align-items:baseline;gap:var(--space-6)}.post-meta{font-family:var(--font-pixel);font-size:var(--font-size-sm);color:var(--color-text-muted);white-space:nowrap;flex-shrink:0}.post-title,.article-title{font-family:var(--font-serif)}.post-title{font-size:var(--font-size-2xl);font-weight:700;margin:0;line-height:var(--line-height-tight);text-wrap:balance;flex:1}.post-title a{color:var(--color-text);border:none}.post-title a:hover{color:var(--color-accent);border:none}.post-excerpt{grid-column:1 / -1;color:var(--color-text-muted);text-wrap:pretty;font-size:var(--font-size-md);line-height:var(--line-height-normal);margin:var(--space-2) 0 0}.post-type-devlog .post-title a{color:var(--color-accent)}.post-type-devlog .post-title a:hover{color:var(--color-accent-hover)}.post-type-devlog .post-meta:before{content:"◉ ";color:var(--color-accent);font-weight:700}.devlog-page h1{font-family:var(--font-serif);text-align:center}.devlog-intro{text-align:center;color:var(--color-text-muted);margin-bottom:var(--space-12)}.no-posts{text-align:center;color:var(--color-text-muted);margin-top:var(--space-12)}.projects-page h1,.project-page h1{font-family:var(--font-serif);text-align:center}.projects-intro{text-align:center;color:var(--color-text-muted);margin-bottom:var(--space-12)}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-6);margin-top:var(--space-12)}.project-card{padding:var(--space-6);border:1px solid var(--color-border);border-radius:6px;transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease}.project-card:hover{border-color:var(--color-accent);background-color:var(--color-bg-alt);box-shadow:0 4px 12px #0000000f}@media(prefers-color-scheme:dark){.project-card:hover{box-shadow:0 4px 12px #00000040}}.project-title{font-size:var(--font-size-lg);margin:0 0 var(--space-2) 0}.project-title a{color:var(--color-text)}.project-description{color:var(--color-text-muted);margin-bottom:var(--space-4)}.project-meta{font-size:var(--font-size-sm);color:var(--color-text-muted)}.no-projects{text-align:center;color:var(--color-text-muted);margin-top:var(--space-12)}.project-page .project-description{text-align:center;font-size:var(--font-size-lg);margin-bottom:var(--space-8)}.project-nav{display:flex;justify-content:center;align-items:center;gap:var(--space-4);margin-bottom:var(--space-12);font-size:var(--font-size-sm)}.project-nav a{color:var(--color-text-muted)}.project-nav a:hover{color:var(--color-text)}.post-project a{color:var(--color-accent);font-weight:500}.post-project a:hover{color:var(--color-accent-hover)}.project-nav-links{text-align:center;margin-bottom:var(--space-12)}.project-nav-links a{color:var(--color-accent)}.project-nav-links a:hover{color:var(--color-accent-hover)}.project-section{margin-bottom:var(--space-16)}.project-section:last-child{margin-bottom:0}.project-section-title{font-family:var(--font-serif);font-size:var(--font-size-2xl);color:var(--color-accent);margin-bottom:var(--space-6);padding-bottom:var(--space-2);border-bottom:2px solid var(--color-border)}.project-section .post-title{font-size:var(--font-size-lg)}.posts-page h1{font-family:var(--font-serif);text-align:center}.view-all{text-align:center;margin-top:var(--space-12)}.tags-index h1,.tag-page h1{margin-bottom:var(--space-8)}.tags-list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-4)}.tags-list li{margin:0}.tags-list a{display:inline-block;padding:var(--space-1) var(--space-2);background:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:var(--border-radius)}.tags-list a:hover{background:var(--color-accent);color:var(--color-bg);border-color:var(--color-accent)}.tag-count{color:var(--color-text-muted);font-size:var(--font-size-sm);margin-left:var(--space-1)}.article-header{position:sticky;top:0;margin-bottom:var(--space-8);padding:var(--space-3) var(--space-6);background-color:var(--color-bg);z-index:10;border-bottom:1px solid var(--color-border);display:flex;flex-direction:row;justify-content:space-between;align-items:center;min-height:3rem;gap:var(--space-4)}.article-header-content{flex:1;text-align:center;min-width:0}.article-header .article-title{margin:0;line-height:1.2}.article-title{margin-top:var(--space-4);margin-bottom:var(--space-4);text-wrap:balance;font-size:clamp(1.75rem,4vw,2.25rem);font-weight:800;line-height:var(--line-height-tight);letter-spacing:-.025em}.article-meta{display:flex;gap:var(--space-4);font-family:var(--font-pixel);font-size:var(--font-size-sm);color:var(--color-text-muted);justify-content:center;align-items:center;overflow:hidden;flex-wrap:wrap}.like-button{display:inline-flex;align-items:center;gap:var(--space-1);background:none;border:none;color:var(--color-text-muted);font-family:var(--font-pixel);font-size:.75rem;cursor:pointer;padding:var(--space-2);transition:all .2s ease;position:relative}.like-button:hover{color:var(--color-accent);transform:scale(1.05)}.like-button .heart-icon{transition:all .2s ease}.like-button.liked{color:#e63946}.like-button.liked .heart-icon path{fill:#e63946;stroke:#e63946}.like-button.liked:hover{color:#d62828}.like-button.animating{animation:heartBeat .3s ease}@keyframes heartBeat{0%,to{transform:scale(1)}25%{transform:scale(1.2)}50%{transform:scale(.95)}75%{transform:scale(1.1)}}.scroll-to-top-link{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);text-decoration:none;border:none;white-space:nowrap;flex-shrink:0;transition:color .2s ease;cursor:pointer;opacity:0;visibility:hidden}.scroll-to-top-link.visible{opacity:1;visibility:visible}.scroll-to-top-link:hover{color:var(--color-accent)}.article-content>*:first-child{margin-top:0}.article-content{font-family:var(--font-body);font-size:var(--font-size-reading);line-height:var(--line-height-relaxed);hanging-punctuation:first last;text-rendering:optimizeLegibility;font-feature-settings:"kern" 1,"liga" 1,"calt" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.article-content h1,.article-content h2,.article-content h3,.article-content h4,.article-content h5,.article-content h6{font-family:var(--font-heading);margin-top:var(--space-8);margin-bottom:var(--space-4);font-weight:700}.article-content h1{color:#355e3b}@media(prefers-color-scheme:dark){.article-content h1{color:#7ba05b}}.article-content em{font-style:italic}.article-content strong{font-weight:700}.warning-box{margin:var(--space-6) 0;padding:var(--space-4) var(--space-6);position:relative;border-radius:6px;border:1px solid var(--color-border);border-left:3px solid var(--color-text-muted);background-color:var(--color-bg-alt)}.warning-header{margin-bottom:var(--space-2);font-weight:600}.warning-title{font-size:var(--font-size-md);letter-spacing:-.02em;font-family:var(--font-serif)}.warning-content{font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-muted)}.warning-content p:last-child{margin-bottom:0}.warning-warning{border-left-color:#dc2626;background-color:#dc26260a}.warning-warning .warning-title{color:#dc2626}@media(prefers-color-scheme:dark){.warning-warning{border-left-color:#ef4444;background-color:#ef44440f}.warning-warning .warning-title{color:#ef4444}}.warning-danger{border-left-color:#ef4444;background-color:#ef44440a}.warning-danger .warning-title{color:#ef4444}@media(prefers-color-scheme:dark){.warning-danger{border-left-color:#f87171;background-color:#f871710f}.warning-danger .warning-title{color:#f87171}}.warning-muted{border-left-color:var(--color-text-muted);background-color:var(--color-bg-alt)}.warning-muted .warning-title{color:var(--color-text-muted)}.post-tags{margin-top:var(--space-4);color:var(--color-text-muted)}.post-tag{color:var(--color-accent);text-decoration:underline}.post-tag:hover{color:var(--color-accent-hover)}.related-posts{margin-top:var(--space-8);margin-bottom:var(--space-6);padding:var(--space-6);background-color:var(--color-bg-alt);border:1px solid var(--color-border);border-left:3px solid var(--color-accent);border-radius:6px}.related-posts h3{margin-top:0;margin-bottom:var(--space-4);font-size:var(--font-size-md);color:var(--color-text-muted);font-weight:600;letter-spacing:.02em}.related-posts-list{list-style:none;padding:0;margin:0}.related-posts-list li{margin-bottom:var(--space-3);padding-left:var(--space-4);position:relative}.related-posts-list li:before{content:"→";position:absolute;left:0;color:var(--color-text-muted)}.related-posts-list li:last-child{margin-bottom:0}.related-posts-list a{color:var(--color-accent);border:none}.related-posts-list a:hover{color:var(--color-accent-hover);border-bottom:1px solid currentColor}.references{margin-top:var(--space-10);margin-bottom:var(--space-6);padding-top:var(--space-6);border-top:1px solid var(--color-border)}.references-title{margin-top:0;margin-bottom:var(--space-4);font-family:var(--font-serif);font-size:var(--font-size-md);font-weight:400;font-style:italic;color:var(--color-text-muted);letter-spacing:.02em}.references-list{list-style:none;counter-reset:ref;padding:0;margin:0}.references-list li{counter-increment:ref;position:relative;padding-left:var(--space-8);margin-bottom:var(--space-3);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-muted)}.references-list li:before{content:counter(ref) ".";position:absolute;left:0;width:var(--space-6);text-align:right;font-family:var(--font-mono);font-size:.75rem;color:var(--color-text-muted);opacity:.6}.references-list li:last-child{margin-bottom:0}.references-list a{color:var(--color-accent);border:none;word-break:break-all}.references-list a:hover{color:var(--color-accent-hover);border-bottom:1px solid currentColor}.site-footer{display:grid;gap:var(--space-6);padding:var(--space-12) var(--space-6) var(--space-10);border-top:1px solid var(--color-border);margin-top:var(--space-12);margin-left:calc(-1 * var(--space-6));margin-right:calc(-1 * var(--space-6));background-color:var(--color-bg-alt);text-align:center;font-size:var(--font-size-sm);color:var(--color-text-muted)}.footer-links{display:flex;gap:var(--space-6);justify-content:center;flex-wrap:wrap}.footer-links a{color:var(--color-text-muted);border:none;transition:color .2s ease}.footer-links a:hover{color:var(--color-accent)}.footer-meta{display:flex;gap:var(--space-4);justify-content:center;flex-wrap:wrap;font-size:.8rem}.footer-meta a{color:var(--color-text-muted);border:none}.footer-meta a:hover{color:var(--color-accent)}.mdx-image-figure{margin:var(--space-xl) 0}.code-block{margin:var(--space-xl) 0;border:1px solid var(--color-border);border-radius:var(--border-radius);overflow:hidden}.code-header{background-color:var(--color-bg-alt);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:var(--font-size-sm)}.code-title{color:var(--color-text);font-weight:600}.code-filename{color:var(--color-text-muted);font-style:italic}.code-content{position:relative}.code-block pre{margin:0;border:none;border-radius:0}.code-block code{display:block;padding:var(--space-lg);background:transparent;border:none;font-size:.9em;line-height:1.5}.mdx-image{cursor:zoom-in;border:1px solid var(--color-border);border-radius:6px;transition:box-shadow .2s ease,border-color .2s ease}.mdx-image:hover{border-color:var(--color-accent);box-shadow:0 4px 12px #00000014}@media(prefers-color-scheme:dark){.mdx-image:hover{box-shadow:0 4px 12px #0000004d}}.mdx-image-figure figcaption{margin-top:var(--space-3);font-size:var(--font-size-sm);color:var(--color-text-muted);text-align:center;line-height:var(--line-height-normal)}.image-dialog{padding:0;border:none;background:transparent;width:100vw;height:100vh;max-width:100vw;max-height:100vh;overflow:visible}.image-dialog[open]{display:flex;align-items:center;justify-content:center}.image-dialog::backdrop{background:#000000e6;backdrop-filter:blur(4px)}.image-dialog .zoomed-image{max-width:90vw;max-height:90vh;object-fit:contain;cursor:default}.dialog-close{position:absolute;top:var(--space-xl);right:var(--space-xl);padding:var(--space-sm);border:none;background:none;color:#ffffffb3;font-size:var(--font-size-sm);font-family:var(--font-mono);font-weight:400;cursor:pointer;transition:color .2s,transform .2s;text-transform:lowercase;letter-spacing:.1em;outline:none}.dialog-close:hover{color:#fff;transform:scale(1.05)}.dialog-close:focus{outline:none}.dialog-close:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:2px}.header-anchor{color:inherit;text-decoration:none;border:none;font-family:inherit}.header-anchor:hover{color:inherit;border:none}.header-anchor:before{content:"#";position:absolute;left:-1.5em;opacity:0;transition:opacity .2s;color:var(--color-text-muted)}h1:hover .header-anchor:before,h2:hover .header-anchor:before,h3:hover .header-anchor:before,h4:hover .header-anchor:before,h5:hover .header-anchor:before,h6:hover .header-anchor:before{opacity:1}.table-of-contents{background-color:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:var(--space-lg);margin:var(--space-xl) 0}.table-of-contents ol{margin:0;padding-left:var(--space-lg)}.table-of-contents li{margin-bottom:var(--space-xs)}.text-muted{color:var(--color-text-muted)}.text-small{font-size:var(--font-size-sm)}@media(max-width:1024px){:root{--container-max: 90vw}}@media(max-width:900px){.nav-links{gap:var(--space-4)}.nav-links a{font-size:var(--font-size-sm);padding:var(--space-2)}}@media(max-width:640px){:root{--container-max: 95vw}.site-header{padding:var(--space-4) 0}.nav{gap:var(--space-4)}.nav-title{font-size:var(--font-size-lg)}.mobile-menu-toggle{display:block}.nav-links{position:fixed;top:0;left:0;right:0;background-color:var(--color-bg);flex-direction:column;align-items:stretch;gap:0;padding:calc(var(--space-8) + var(--space-12)) var(--space-6) var(--space-8);margin:0;max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .3s ease;border-bottom:1px solid var(--color-border);z-index:999}.mobile-menu-toggle[aria-expanded=true]~.nav-links{max-height:100vh;opacity:1}.nav-links::-webkit-scrollbar{display:none}.scroll-to-top-link{display:none!important}.nav-links a{font-size:var(--font-size-md);padding:var(--space-4);border-bottom:1px solid var(--color-border);text-align:left;width:100%}.nav-links a:after{display:none}.dialog-close{top:var(--space-sm);right:var(--space-sm)}.article-header{padding:var(--space-2) var(--space-4);gap:var(--space-1)}.article-header .article-title{font-size:clamp(.875rem,3.5vw,1.25rem);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.article-title{font-size:clamp(1.5rem,5vw,1.75rem)}.article-meta{gap:var(--space-2);font-size:.75rem}}@container (max-width: 500px){.posts-list,.post-item{grid-template-columns:1fr}.post-header{grid-template-columns:1fr;gap:var(--space-2)}.post-meta{order:-1}.post-title{font-size:var(--font-size-xl)}.projects-grid{grid-template-columns:1fr}}.social-embed{margin:var(--space-8) 0;display:flex;justify-content:center;align-items:center}.social-embed-mastodon iframe{border:1px solid var(--color-border);border-radius:var(--border-radius);background:var(--color-bg-alt);max-width:100%}.social-embed-bluesky{width:100%;max-width:600px;margin:0 auto}.social-embed-bluesky .bluesky-embed{border:1px solid var(--color-border);border-radius:var(--border-radius);padding:var(--space-4);background:var(--color-bg-alt);margin:0;font-family:var(--font-body);font-size:var(--font-size-md)}.social-embed-bluesky .bluesky-embed a{color:var(--color-accent);text-decoration:none}.social-embed-bluesky .bluesky-embed a:hover{color:var(--color-accent-hover);text-decoration:underline}.social-embed-error{padding:var(--space-4);background:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:var(--border-radius);color:var(--color-text-muted);font-family:var(--font-mono);font-size:var(--font-size-sm);margin:var(--space-4) 0}@media(max-width:640px){.social-embed-mastodon iframe{width:100%;height:auto;min-height:400px}.social-embed-bluesky{max-width:100%}}.github-repo-link,.youtube-video-link{display:inline;white-space:nowrap}.github-repo-link svg,.youtube-video-link svg{display:inline-block;width:15px;height:15px;color:var(--color-text-muted);vertical-align:middle;margin-right:.25rem}.github-repo-link a,.youtube-video-link a{color:var(--color-accent);text-decoration:underline;border:none}.github-repo-link a:hover,.youtube-video-link a:hover{color:var(--color-accent-hover);border:none}.github-repo-link{position:relative;display:inline}.github-link-anchor{anchor-name:--github-link}.github-popup{display:block;position:absolute;position-anchor:--github-link;bottom:anchor(top);left:anchor(center);translate:-50% 0;margin-bottom:var(--space-3);position-try-options:--below-center,--above-left,--above-right,--below-left,--below-right;background-color:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:8px;padding:0;min-width:280px;max-width:320px;box-shadow:0 8px 24px #0003;overflow:hidden;opacity:0;pointer-events:none;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:100}@position-try --below-center{top:anchor(bottom);bottom:auto;left:anchor(center);translate:-50% 0;margin-top:var(--space-3);margin-bottom:0}@position-try --above-left{bottom:anchor(top);left:anchor(left);translate:0 0;margin-bottom:var(--space-3)}@position-try --above-right{bottom:anchor(top);right:anchor(right);left:auto;translate:0 0;margin-bottom:var(--space-3)}@position-try --below-left{top:anchor(bottom);bottom:auto;left:anchor(left);translate:0 0;margin-top:var(--space-3)}@position-try --below-right{top:anchor(bottom);bottom:auto;right:anchor(right);left:auto;translate:0 0;margin-top:var(--space-3)}.github-repo-link:hover .github-popup,.github-link-anchor:focus+.github-popup{opacity:1;pointer-events:auto;visibility:visible}.github-popup-content{display:flex;flex-direction:column;font-family:var(--font-mono);font-size:var(--font-size-sm)}.github-popup-header{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-4);background:linear-gradient(135deg,var(--color-bg-alt) 0%,var(--color-bg) 100%);border-bottom:1px solid var(--color-border)}.github-popup-avatar{width:48px;height:48px;border-radius:6px;flex-shrink:0;border:1px solid var(--color-border)}.github-popup-title{flex:1;min-width:0}.github-popup-repo-name{color:var(--color-text);font-weight:600;font-size:var(--font-size-base);margin-bottom:var(--space-1);word-break:break-word}.github-popup-description{color:var(--color-text-muted);font-size:var(--font-size-sm);line-height:1.4;margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.github-popup-stats{display:flex;gap:var(--space-4);padding:var(--space-3) var(--space-4);background-color:var(--color-bg-alt)}.github-popup-stat{display:flex;align-items:center;gap:var(--space-2);color:var(--color-text);font-size:var(--font-size-sm);font-weight:500}.github-popup-stat svg{width:14px;height:14px;color:var(--color-accent);flex-shrink:0}.github-popup-loading,.github-popup-error{color:var(--color-text-muted);font-family:var(--font-mono);font-size:var(--font-size-sm);font-style:italic;padding:var(--space-2)}.github-popup-error{color:#ef4444}@media(prefers-color-scheme:dark){.github-popup{box-shadow:0 4px 12px #0006}}@media(prefers-reduced-motion:reduce){.github-popup{transition:none}}
