@font-face{font-family:Crimson Pro Variable fallback;src:local(Times New Roman);size-adjust:111.298%;ascent-override:80.5481%;descent-override:19.3035%;line-gap-override:0%;font-style:normal;font-weight:200 900}@font-face{font-family:Crimson Pro Variable fallback;src:local(Georgia);size-adjust:101.424%;ascent-override:88.3899%;descent-override:21.1828%;line-gap-override:0%;font-style:normal;font-weight:200 900}@font-face{font-family:Crimson Pro Variable;font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/crimson-pro-vietnamese-wght-normal.Djpar-EE.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:Crimson Pro Variable fallback;src:local(Times New Roman);size-adjust:111.298%;ascent-override:80.5481%;descent-override:19.3035%;line-gap-override:0%;font-style:normal;font-weight:200 900}@font-face{font-family:Crimson Pro Variable fallback;src:local(Georgia);size-adjust:101.424%;ascent-override:88.3899%;descent-override:21.1828%;line-gap-override:0%;font-style:normal;font-weight:200 900}@font-face{font-family:Crimson Pro Variable;font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/crimson-pro-latin-ext-wght-normal.4mBZvMWv.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:Crimson Pro Variable fallback;src:local(Times New Roman);size-adjust:98.5577%;ascent-override:90.9604%;descent-override:21.7988%;line-gap-override:0%;font-style:normal;font-weight:200 900}@font-face{font-family:Crimson Pro Variable fallback;src:local(Georgia);size-adjust:89.8138%;ascent-override:99.8159%;descent-override:23.921%;line-gap-override:0%;font-style:normal;font-weight:200 900}@font-face{font-family:Crimson Pro Variable;font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/crimson-pro-latin-wght-normal.C4R2PX-h.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:DM Sans Variable fallback;src:local(Noto Sans);size-adjust:107.173%;ascent-override:92.5606%;descent-override:28.9252%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(Arial);size-adjust:113.952%;ascent-override:87.054%;descent-override:27.2044%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(Helvetica Neue);size-adjust:112.889%;ascent-override:87.874%;descent-override:27.4606%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(Segoe UI);size-adjust:114.58%;ascent-override:86.5773%;descent-override:27.0554%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(BlinkMacSystemFont);size-adjust:121.968%;ascent-override:81.333%;descent-override:25.4166%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(/_astro/dm-sans-latin-ext-wght-normal.BOFOeGcA.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:DM Sans Variable fallback;src:local(Noto Sans);size-adjust:98.3122%;ascent-override:100.903%;descent-override:31.5322%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(Arial);size-adjust:104.531%;ascent-override:94.9001%;descent-override:29.6563%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(Helvetica Neue);size-adjust:103.556%;ascent-override:95.794%;descent-override:29.9356%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(Segoe UI);size-adjust:105.107%;ascent-override:94.3804%;descent-override:29.4939%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable fallback;src:local(BlinkMacSystemFont);size-adjust:111.884%;ascent-override:88.6635%;descent-override:27.7073%;line-gap-override:0%;font-style:normal;font-weight:100 1000}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(/_astro/dm-sans-latin-wght-normal.Xz1IZZA0.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:JetBrains Mono fallback;src:local(Noto Sans Mono);size-adjust:100%;ascent-override:102%;descent-override:30%;line-gap-override:0%;font-style:normal;font-weight:400}@font-face{font-family:JetBrains Mono fallback;src:local(Roboto Mono);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:400}@font-face{font-family:JetBrains Mono fallback;src:local(Courier New);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:400}@font-face{font-family:JetBrains Mono fallback;src:local(Noto Sans Mono);size-adjust:100%;ascent-override:102%;descent-override:30%;line-gap-override:0%;font-style:normal;font-weight:400}@font-face{font-family:JetBrains Mono fallback;src:local(Roboto Mono);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:400}@font-face{font-family:JetBrains Mono fallback;src:local(Courier New);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:400}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff)format("woff")}@font-face{font-family:JetBrains Mono fallback;src:local(Noto Sans Mono);size-adjust:100%;ascent-override:102%;descent-override:30%;line-gap-override:0%;font-style:normal;font-weight:700}@font-face{font-family:JetBrains Mono fallback;src:local(Roboto Mono);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:700}@font-face{font-family:JetBrains Mono fallback;src:local(Courier New);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:700}@font-face{font-family:JetBrains Mono fallback;src:local(Noto Sans Mono);size-adjust:100%;ascent-override:102%;descent-override:30%;line-gap-override:0%;font-style:normal;font-weight:700}@font-face{font-family:JetBrains Mono fallback;src:local(Roboto Mono);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:700}@font-face{font-family:JetBrains Mono fallback;src:local(Courier New);size-adjust:99.9837%;ascent-override:102.017%;descent-override:30.0049%;line-gap-override:0%;font-style:normal;font-weight:700}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/jetbrains-mono-latin-700-normal.BYuf6tUa.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-700-normal.D3wTyLJW.woff)format("woff")}@font-face{font-family:Satisfy fallback;src:local(Noto Sans);size-adjust:80.1441%;ascent-override:116.611%;descent-override:61.0473%;line-gap-override:2.0715%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Arial);size-adjust:85.2136%;ascent-override:109.674%;descent-override:57.4155%;line-gap-override:1.9482%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Helvetica Neue);size-adjust:84.4184%;ascent-override:110.707%;descent-override:57.9563%;line-gap-override:1.9666%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Segoe UI);size-adjust:85.6828%;ascent-override:109.073%;descent-override:57.101%;line-gap-override:1.9376%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(BlinkMacSystemFont);size-adjust:91.2075%;ascent-override:102.466%;descent-override:53.6423%;line-gap-override:1.8202%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Noto Sans);size-adjust:80.1441%;ascent-override:116.611%;descent-override:61.0473%;line-gap-override:2.0715%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Arial);size-adjust:85.2136%;ascent-override:109.674%;descent-override:57.4155%;line-gap-override:1.9482%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Helvetica Neue);size-adjust:84.4184%;ascent-override:110.707%;descent-override:57.9563%;line-gap-override:1.9666%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(Segoe UI);size-adjust:85.6828%;ascent-override:109.073%;descent-override:57.101%;line-gap-override:1.9376%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy fallback;src:local(BlinkMacSystemFont);size-adjust:91.2075%;ascent-override:102.466%;descent-override:53.6423%;line-gap-override:1.8202%;font-style:normal;font-weight:400}@font-face{font-family:Satisfy;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/satisfy-latin-400-normal.CIU_tGU7.woff2)format("woff2"),url(/_astro/satisfy-latin-400-normal.ez4YC6jz.woff)format("woff");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}*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{-webkit-font-smoothing:antialiased;min-height:100vh;line-height:1.65}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul[role=list],ol[role=list]{padding:0;list-style:none}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}:root{color-scheme:light;--font-body:"Crimson Pro Variable", "Crimson Pro Variable fallback", Georgia, "Times New Roman", serif;--font-heading:"DM Sans Variable", "DM Sans Variable fallback", system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", "JetBrains Mono fallback", "Cascadia Code", "Fira Code", monospace;--font-display:"Satisfy", "Satisfy fallback", cursive;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:10px;--radius-full:999px;--duration-150:.15s;--duration-200:.2s;--duration-250:.25s;--duration-300:.3s;--duration-400:.4s;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--fs-xs:.75rem;--fs-sm:.875rem;--fs-base:clamp(1rem, .16vi + .95rem, 1.125rem);--fs-md:clamp(1.25rem, .26vi + 1.17rem, 1.438rem);--fs-lg:clamp(1.5rem, .42vi + 1.37rem, 1.688rem);--fs-xl:clamp(1.75rem, .63vi + 1.55rem, 2rem);--fs-2xl:clamp(2.125rem, .94vi + 1.83rem, 2.5rem);--fs-3xl:clamp(2.5rem, 1.46vi + 2.04rem, 3rem);--text-body:1.125rem;--text-prose:clamp(1.125rem, .2vi + 1.06rem, 1.25rem);--text-description:var(--text-body);--text-lead:var(--fs-md);--text-page-title:var(--fs-2xl);--text-section-title:var(--fs-xl);--text-heading:var(--fs-lg);--text-subheading:var(--fs-md);--text-title:var(--fs-md);--text-title-compact:var(--fs-base);--text-group:var(--fs-base);--text-eyebrow:var(--fs-sm);--text-nav:var(--fs-base);--text-control:var(--fs-sm);--text-filter-heading:1rem;--text-ui:var(--fs-sm);--text-field-phone:1rem;--text-field-lg:1.125rem;--text-meta:var(--fs-sm);--text-tag:var(--fs-xs);--text-label:var(--fs-xs);--leading-body:1.65;--leading-heading:1.2;--space-unit:calc(var(--fs-base) * var(--leading-body));--space-xs:calc(var(--space-unit) * .25);--space-sm:calc(var(--space-unit) * .5);--space-md:var(--space-unit);--space-lg:calc(var(--space-unit) * 1.5);--space-xl:calc(var(--space-unit) * 2);--space-2xl:calc(var(--space-unit) * 3);--content-width:96rem;--prose-width:48rem;--side-padding:clamp(1rem, 5vw, 4rem);--header-height:4rem;--color-bg:#faf9f5;--color-bg-alt:#f0efe9;--color-text:#2c2a25;--color-text-muted:#5e5950;--color-text-heading:#1f1e1a;--color-accent:#8b6040;--color-accent-hover:#6e4c32;--color-border:#d5d1c8;--color-code-bg:#eeedea;--color-blog:#a07520;--color-blog-hover:#855a15;--color-notes:#2e8045;--color-notes-hover:#25703b;--color-projects:#2a6298;--color-projects-hover:#225888;--color-tag:#a04868;--color-tag-hover:#843858;--color-tag-text:#faf9f5;--color-tag-dark-bg:#6b2d48;--color-series-teal:#0a6d6a;--color-series-teal-hover:#065755;--color-series-teal-surface:#15a09c;--color-series-violet:#6539a9;--color-series-violet-hover:#522292;--color-series-terracotta:#933610;--color-series-terracotta-hover:#75290b;--color-series-orchid:#892783;--color-series-orchid-hover:#71106c;--series-tint:12%;--series-tint-hover:18%;--series-edge:60%;--color-blog-strong:#855a15;--color-notes-strong:#25703b;--color-projects-strong:#2a6298;--color-status-active-bg:#e8f5e9;--color-status-active-text:#256029;--color-status-idea-bg:#fff3e0;--color-status-idea-text:#a04000;--color-text-on-accent:#fff;--shadow-card:0 1px 2px #0000000a, 0 4px 8px #0000000a, 0 8px 24px #00000008;--shadow-card-hover:0 2px 4px #0000000a, 0 8px 16px #0000000f, 0 16px 36px #0000000d;--shadow-panel:0 1px 2px #0000000f, 0 2px 4px #0000000a, 0 4px 12px #00000008;--shadow-panel-hover:0 4px 8px #00000014, 0 8px 24px #0000001a, 0 16px 48px #0000000f;--shadow-avatar:0 2px 8px #00000014}html.dark{color-scheme:dark;--color-bg:#0f0e0d;--color-bg-alt:#1a1816;--color-text:#e0ddd4;--color-text-muted:#a39d91;--color-text-heading:#f0ede5;--color-accent:#c49a78;--color-accent-hover:#d4b496;--color-border:#2e2923;--color-code-bg:#1a1816;--color-blog:#d4a84b;--color-blog-hover:#e0be70;--color-notes:#9ab899;--color-notes-hover:#b0ccaf;--color-projects:#7aacdb;--color-projects-hover:#9cc4e8;--color-tag:#c498a8;--color-tag-hover:#d8b4c0;--color-tag-text:#faf9f5;--color-tag-dark-bg:#6b2d48;--color-series-teal:#6cc2bd;--color-series-teal-hover:#93d4d0;--color-series-teal-surface:var(--color-series-teal);--color-series-violet:#b49ae0;--color-series-violet-hover:#cbb8ec;--color-series-terracotta:#e89b80;--color-series-terracotta-hover:#fbb49b;--color-series-orchid:#d59acf;--color-series-orchid-hover:#e9b2e3;--series-tint:6%;--series-tint-hover:12%;--series-edge:35%;--color-blog-strong:var(--color-blog);--color-notes-strong:var(--color-notes);--color-projects-strong:var(--color-projects);--color-status-active-bg:#1b3a1b;--color-status-active-text:#81c784;--color-status-idea-bg:#3e2723;--color-status-idea-text:#ffb74d;--shadow-card:0 1px 2px #00000026, 0 4px 8px #0000001f, 0 8px 24px #0000001a;--shadow-card-hover:0 2px 4px #0003, 0 8px 16px #0000002e, 0 16px 36px #00000026;--shadow-panel:0 1px 2px #0003, 0 2px 4px #00000026, 0 4px 12px #0000001a;--shadow-panel-hover:0 4px 8px #0000004d, 0 8px 24px #00000059, 0 16px 48px #00000040}@font-face{font-family:Crimson Pro Variable fallback;src:local(Noto Serif),local(Noto Serif Regular),local(NotoSerif-Regular);size-adjust:83.2413%;ascent-override:107.697%;descent-override:25.8098%;line-gap-override:0%;font-style:normal;font-weight:200 900}html{font-family:var(--font-body);line-height:var(--leading-body);color:var(--color-text);background-color:var(--color-bg);scroll-padding-top:calc(var(--header-height) + var(--space-md))}body{font-size:var(--text-body)}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);line-height:var(--leading-heading);color:var(--color-text-heading);margin-top:var(--space-lg);margin-bottom:var(--space-sm);text-wrap:balance}h1{font-size:var(--text-page-title)}h2{font-size:var(--text-section-title)}h3{font-size:var(--text-heading)}h4{font-size:var(--text-subheading)}h5{font-size:var(--fs-base);font-weight:600}h6{font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.05em;font-weight:600}p,ul,ol,blockquote,pre{margin-bottom:var(--space-md)}li>ul,li>ol{margin-bottom:0}blockquote{border-left:3px solid var(--color-border);padding-left:var(--space-md);color:var(--color-text-muted);font-style:italic}code,pre{font-family:var(--font-mono);font-size:.78em}code{background:var(--color-code-bg);border-radius:var(--radius-sm);padding:.15em .3em}pre{background:var(--color-code-bg);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);overflow-x:auto}pre code{background:0 0;border-radius:0;padding:0}table{border-collapse:collapse;width:100%;margin-bottom:var(--space-md);font-size:.9em}th,td{padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top}th:first-child,td:first-child{padding-left:0}th{font-family:var(--font-heading);font-size:var(--text-meta);color:var(--color-text-heading);font-weight:600}td+td code{overflow-wrap:anywhere}a{color:var(--color-accent);text-underline-offset:.15em;transition:color var(--duration-150) ease;text-decoration-thickness:1px}a:hover{color:var(--color-accent-hover)}.prose{max-width:var(--prose-width);padding:0 var(--side-padding);font-size:var(--text-prose);margin:0 auto}.prose h2{font-size:var(--text-heading)}.prose h3{font-size:var(--text-subheading)}.listing-container{max-width:var(--content-width);padding:0 var(--side-padding);margin:0 auto}html:not(.dark) .astro-code,html:not(.dark) .astro-code span{color:var(--shiki-light)!important;background-color:var(--shiki-light-bg)!important;font-style:var(--shiki-light-font-style)!important;font-weight:var(--shiki-light-font-weight)!important;text-decoration:var(--shiki-light-text-decoration)!important}html.dark .astro-code,html.dark .astro-code span{color:var(--shiki-dark)!important;background-color:var(--shiki-dark-bg)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}.astro-code{position:relative}.astro-code[data-language]:before{content:attr(data-language);font-family:var(--font-heading);font-size:var(--text-label);color:var(--color-text-muted);opacity:.6;text-transform:lowercase;padding:.15em .5em;position:absolute;top:0;right:0}.caps-label{font-family:var(--font-heading);font-size:var(--text-label);letter-spacing:.1em;text-transform:uppercase;font-weight:600}.page-layout{flex-direction:column;min-height:100vh;display:flex}.page-layout main{flex:1}.content-container{max-width:var(--content-width);padding-inline:var(--side-padding);margin-inline:auto}.site-header{z-index:100;background:color-mix(in srgb, var(--color-bg) 85%, transparent);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid color-mix(in srgb, var(--color-border) 60%, transparent);position:sticky;top:0}.header-inner{max-width:var(--content-width);padding:var(--space-sm) var(--side-padding);justify-content:space-between;align-items:center;margin:0 auto;display:flex}.site-name{font-family:var(--font-display);font-size:var(--fs-lg);color:var(--color-text-heading);transition:color var(--duration-150) ease;font-weight:400;text-decoration:none}.site-name:hover{color:var(--color-accent)}.header-right{align-items:center;gap:var(--space-sm);display:flex}.main-nav{gap:var(--space-md);display:flex}.main-nav a{font-family:var(--font-heading);font-size:var(--text-nav);color:var(--color-text-muted);transition:color var(--duration-150) ease;text-decoration:none;position:relative}.main-nav a:after{content:"";background:var(--color-accent);transform-origin:50%;height:2px;transition:transform var(--duration-250) var(--ease-out-expo);border-radius:1px;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.main-nav a:hover{color:var(--color-text)}.main-nav a:hover:after{transform:scaleX(1)}.main-nav a.active,.main-nav a[aria-current=page]{color:var(--color-text);font-weight:500}.main-nav a.active:after,.main-nav a[aria-current=page]:after{opacity:.5;transform:scaleX(1)}.main-nav a[href="/blog/"]:after{background:var(--color-blog)}.main-nav a[href="/notes/"]:after{background:var(--color-notes)}.main-nav a[href="/projects/"]:after{background:var(--color-projects)}.main-nav a[href="/blog/"].active,.main-nav a[href="/blog/"][aria-current=page]{color:var(--color-blog-strong)}.main-nav a[href="/notes/"].active,.main-nav a[href="/notes/"][aria-current=page]{color:var(--color-notes-strong)}.main-nav a[href="/projects/"].active,.main-nav a[href="/projects/"][aria-current=page]{color:var(--color-projects-strong)}.search-toggle{width:2rem;height:2rem;color:var(--color-text-muted);transition:color var(--duration-150) ease;justify-content:center;align-items:center;display:flex}.search-toggle:hover{color:var(--color-text)}.nav-toggle{cursor:pointer;padding:var(--space-xs);background:0 0;border:none;flex-direction:column;justify-content:center;gap:4px;width:2rem;height:2rem;display:none}.hamburger-line{background:var(--color-text);width:100%;height:2px;transition:transform var(--duration-200) ease, opacity var(--duration-200) ease;border-radius:1px;display:block}.nav-toggle[aria-expanded=true] .hamburger-line:first-child{transform:translateY(6px)rotate(45deg)}.nav-toggle[aria-expanded=true] .hamburger-line:nth-child(2){opacity:0}.nav-toggle[aria-expanded=true] .hamburger-line:nth-child(3){transform:translateY(-6px)rotate(-45deg)}@media (width<=767px){.nav-toggle{display:flex}.site-name{position:absolute;left:50%;transform:translate(-50%)}.main-nav{background:color-mix(in srgb, var(--color-bg) 95%, transparent);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--color-border);padding:var(--space-sm) var(--side-padding);gap:var(--space-xs);flex-direction:column;display:none;position:absolute;top:100%;left:0;right:0}.main-nav.is-open{display:flex}.main-nav a{padding:var(--space-xs) 0;font-size:var(--text-nav)}}.site-footer{padding:var(--space-xl) var(--side-padding) var(--space-md);text-align:center;color:var(--color-text-muted);font-size:var(--text-ui)}.footer-inner{max-width:var(--content-width);margin:0 auto}.accent-blog{--color-accent:var(--color-blog);--color-accent-hover:var(--color-blog-hover)}.accent-notes{--color-accent:var(--color-notes);--color-accent-hover:var(--color-notes-hover)}.accent-projects{--color-accent:var(--color-projects);--color-accent-hover:var(--color-projects-hover)}.page-header{margin-bottom:var(--space-xl)}.page-header h1{color:var(--color-accent);margin-top:0}.page-intro{color:var(--color-text-muted);margin-bottom:var(--space-md)}.entry-header{margin-bottom:var(--space-xl);padding-bottom:var(--space-md);border-bottom:1px solid var(--color-border)}.entry-header h1{margin-top:var(--space-xl);margin-bottom:0}.link-pill{font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);border:1px solid var(--color-border);border-radius:var(--radius-full);transition:color var(--duration-150) ease, border-color var(--duration-150) ease, background-color var(--duration-150) ease;align-items:center;gap:.3em;text-decoration:none;display:inline-flex}.link-pill:hover{color:var(--color-text-heading);border-color:var(--color-text-heading);background-color:color-mix(in srgb, var(--color-text-heading) 10%, var(--color-bg))}html:not(.dark) .link-pill svg{color:var(--color-text-heading)}.link-pill--md{padding:.25em .7em}.link-pill--sm{padding:.2em .65em}.listing-layout{max-width:var(--content-width);padding:0 var(--side-padding);gap:var(--space-xl);align-items:flex-start;margin:0 auto;display:flex}.listing-layout>.listing-container{flex:1;min-width:0;max-width:none;margin:0;padding-inline:0}.filter-panel{top:calc(var(--header-height) + var(--space-md));width:240px;padding-top:var(--space-xl);gap:var(--space-md);flex-direction:column;flex-shrink:0;display:flex;position:sticky}.filter-panel-body{gap:var(--space-md);flex-direction:column;display:flex}.filter-toggle{align-items:center;gap:var(--space-xs);padding:var(--space-xs) .9em;font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);white-space:nowrap;border:1px solid var(--color-border);border-radius:var(--radius-full);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color var(--duration-150) ease, border-color var(--duration-150) ease, background-color var(--duration-150) ease;background:0 0;display:none}.filter-toggle.is-active{color:var(--color-accent);border-color:color-mix(in srgb, var(--color-accent) 40%, var(--color-border));background-color:color-mix(in srgb, var(--color-accent) 8%, var(--color-bg))}.filter-toggle-chevron{transition:transform var(--duration-150) ease;flex-shrink:0}.filter-toggle[aria-expanded=true] .filter-toggle-chevron{transform:rotate(180deg)}.filter-panel-section{gap:var(--space-xs);flex-direction:column;display:flex}.filter-panel-label{font-family:var(--font-heading);font-size:var(--text-filter-heading);color:var(--color-text-heading);letter-spacing:.02em;font-weight:600}.filter-search{width:100%;padding:var(--space-xs) var(--space-sm);font-family:var(--font-heading);font-size:var(--text-control);color:var(--color-text);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);transition:border-color var(--duration-150) ease}.filter-search::placeholder{color:var(--color-text-muted)}.filter-search:focus{border-color:var(--color-accent)}.filter-tags{flex-wrap:wrap;gap:.35em;display:flex}.filter-panel-section[hidden],.filter-tags[hidden]{display:none}.filter-tag{font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);background:var(--color-bg-alt);border:1px solid var(--color-border);border-radius:var(--radius-full);cursor:pointer;transition:background var(--duration-150) ease, color var(--duration-150) ease, border-color var(--duration-150) ease;user-select:none;padding:.15em .55em;display:inline-block}.filter-tag:hover{color:var(--color-text);border-color:color-mix(in srgb, var(--color-tag) 50%, var(--color-border))}.filter-tag.is-active{background:var(--color-tag);color:var(--color-bg);border-color:var(--color-tag)}.filter-select{width:100%;padding:var(--space-xs) var(--space-sm);font-family:var(--font-heading);font-size:var(--text-control);color:var(--color-text);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--duration-150) ease}.filter-select:focus{border-color:var(--color-accent)}.filter-sort{gap:var(--space-xs);display:flex}.filter-sort .filter-select{flex:1;min-width:0}.filter-sort-direction{padding:0 var(--space-xs);color:var(--color-text);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--duration-150) ease;flex:none;justify-content:center;align-items:center;display:inline-flex}.filter-sort-direction:hover:not(:disabled){border-color:var(--color-text-muted)}.filter-sort-direction:disabled{color:var(--color-text-muted);cursor:default}.filter-sort-direction svg{display:block}.filter-radios{flex-direction:column;gap:.3em;display:flex}.filter-radio{font-family:var(--font-heading);font-size:var(--text-control);color:var(--color-text-muted);cursor:pointer;transition:color var(--duration-150) ease;align-items:center;gap:.4em;display:flex}.filter-radio:hover{color:var(--color-text)}.filter-radio input[type=radio]{accent-color:var(--color-accent)}.filter-clear{padding:var(--space-xs) var(--space-sm);font-family:var(--font-heading);font-size:var(--text-control);color:var(--color-text-muted);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:color var(--duration-150) ease, border-color var(--duration-150) ease;background:0 0}.filter-clear:hover{color:var(--color-text);border-color:var(--color-text-muted)}.pagination{padding-top:var(--space-xl);justify-content:center;align-items:center;gap:.3em;display:flex}.pagination-btn{min-width:2.2em;height:2.2em;font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;transition:background var(--duration-150) ease, color var(--duration-150) ease, border-color var(--duration-150) ease;background:0 0;justify-content:center;align-items:center;padding:0 .5em;text-decoration:none;display:inline-flex}.pagination-btn:hover{color:var(--color-text);border-color:color-mix(in srgb, var(--color-accent) 50%, var(--color-border))}.pagination-btn.is-active{background:var(--color-accent);color:var(--color-bg);border-color:var(--color-accent)}.pagination-btn:disabled{opacity:.4;cursor:default;pointer-events:none}.pagination-ellipsis{font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);padding:0 .2em}.filter-result-count{font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);padding-top:var(--space-xs)}@media (width<=767px){.listing-layout{padding-block:var(--space-xl) var(--space-2xl);flex-direction:column;align-items:stretch;gap:0}.listing-layout>.listing-container{display:contents}.listing-layout .page-header{margin-bottom:var(--space-lg);order:-1}.filter-panel{width:100%;margin-bottom:var(--space-lg);gap:0 var(--space-sm);grid-template-columns:1fr auto;padding-top:0;display:grid;position:static}.filter-panel-search .filter-panel-label{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.filter-search{border-radius:var(--radius-full);padding-inline:1em}.filter-search,.filter-select{font-size:var(--text-field-phone)}.filter-toggle{display:flex}.filter-panel-collapse{grid-column:1/-1;overflow:hidden}.filter-toggle[aria-expanded=false]+.filter-panel-collapse{visibility:hidden;height:0;transition:visibility var(--duration-300)}.filter-panel-body{gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-md);background:var(--color-bg-alt);border-radius:var(--radius-lg);grid-template-columns:1fr auto;grid-auto-flow:dense;display:grid}.filter-panel-body>*{grid-column:1/-1}.filter-panel-body>.filter-clear{grid-column:2}.filter-panel-body>.filter-result-count{grid-column:1;align-self:center;padding-top:0}.filter-radios{column-gap:var(--space-md);flex-flow:wrap}}.header-rule{align-items:center;gap:var(--space-xs);display:flex}.rule-line{background:linear-gradient(90deg, var(--color-border), transparent);flex:1;height:1px}.rule-line:last-child{background:linear-gradient(90deg, transparent, var(--color-border))}.rule-diamond{background:var(--color-border);flex-shrink:0;width:5px;height:5px;transform:rotate(45deg)}.header-rule--accent .rule-line{background:linear-gradient(90deg, color-mix(in srgb, var(--color-accent) 40%, var(--color-border)), transparent)}.header-rule--accent .rule-line:last-child{background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--color-accent) 40%, var(--color-border)))}.header-rule--accent .rule-diamond{background:var(--color-accent)}.empty-state{color:var(--color-text-muted);padding:var(--space-lg);border:1px dashed var(--color-border);border-radius:var(--radius-lg);text-align:center;flex-direction:column;align-items:center;gap:.3em;font-style:italic;display:flex}.empty-state p{margin:0}.empty-dash{font-size:var(--fs-xl);color:var(--color-border);font-style:normal;line-height:1}.post-list{margin:0;padding:0;list-style:none}.post-list-item{padding:var(--space-sm);border-radius:var(--radius-md);background-image:linear-gradient(90deg, transparent, var(--color-border) 15%, var(--color-border) 85%, transparent);transition:background-color var(--duration-200) ease;background-position:bottom;background-repeat:no-repeat;background-size:100% 1px}.post-list-item:first-child,.post-list-group+.post-list-item{background-image:linear-gradient(90deg, transparent, var(--color-border) 15%, var(--color-border) 85%, transparent), linear-gradient(90deg, transparent, var(--color-border) 15%, var(--color-border) 85%, transparent);background-position:top,bottom;background-size:100% 1px,100% 1px}.post-list-item:hover{background-color:color-mix(in srgb, var(--color-accent) 10%, var(--color-bg))}.post-list-group{padding-top:var(--space-lg)}.post-list-group:first-child{padding-top:0}.post-list-group h2{font-size:var(--text-group);margin-top:0;margin-bottom:var(--space-sm);color:var(--color-accent)}.post-link{justify-content:space-between;align-items:baseline;gap:var(--space-md);color:inherit;text-decoration:none;display:flex}.post-title{font-family:var(--font-heading);font-size:var(--text-title-compact);color:var(--color-text-heading);transition:color var(--duration-150) ease;font-weight:500}.post-link:hover .post-title,.post-list-item--stretched:hover .post-title{color:var(--color-accent)}.post-when{flex-direction:column;align-items:flex-end;display:flex}.post-date,.post-read-time,.post-when-separator{font-size:var(--text-meta);color:var(--color-text-muted);white-space:nowrap;font-family:var(--font-heading)}.post-when-separator{opacity:.4;display:none}.post-excerpt{color:var(--color-text-muted);font-size:var(--text-description);margin:var(--space-xs) 0 0;line-height:var(--leading-body)}.post-list-item--stretched{position:relative}.post-link--stretched:after{content:"";position:absolute;inset:0}.post-list-tags{margin-top:var(--space-sm);flex-wrap:wrap;gap:.4em;display:flex}.post-list-item--stretched .post-list-tags a{z-index:1;position:relative}.series-crumbs{font-size:var(--text-eyebrow);color:var(--color-text-muted);margin-bottom:.15em;display:inline-block}.series-crumbs a{z-index:1;color:var(--color-accent);padding-block:.4em;text-decoration:none;position:relative}.series-crumbs a:hover{text-decoration:underline}.series-crumbs-separator{margin-inline:.4em}.post-list--lg .post-list-item{padding:var(--space-md) var(--space-sm)}.post-list--lg .post-title{font-size:var(--text-title)}.post-list--lg .post-when:has(.post-read-time){height:calc(var(--fs-md) * var(--leading-body));justify-content:center;align-self:flex-start;line-height:1.25}.tag-section{margin-top:var(--space-lg);--color-accent:var(--color-notes)}.tag-section--blog{--color-accent:var(--color-blog)}.tag-section--notes{--color-accent:var(--color-notes)}.tag-section--projects{--color-accent:var(--color-projects)}.tag-section h2{font-size:var(--text-heading);margin-top:0;margin-bottom:var(--space-sm);color:var(--color-accent)}@media (width<=480px){.post-link{flex-direction:column;gap:.15em}.post-date{white-space:normal}.post-when{flex-flow:wrap;align-items:baseline;gap:.4em}.post-list--lg .post-when:has(.post-read-time){height:auto;line-height:inherit;justify-content:normal}.post-when-separator{display:inline}}@keyframes reveal{0%{opacity:0;translate:0 4px}to{opacity:1;translate:0}}.reveal{opacity:0;animation:reveal var(--duration-200) ease-out forwards;animation-delay:var(--delay,0s)}[data-reveal]{opacity:0;transition:opacity var(--duration-200) ease-out, transform var(--duration-200) ease-out;transition-delay:var(--delay,0s);transform:translateY(4px)}[data-reveal].is-visible{opacity:1;transform:translateY(0)}@keyframes slow-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;animation:none}[data-reveal]{opacity:1;transition:none;transform:none}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.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}.skip-link[data-astro-cid-pbhazpx6]{top:-100%;left:var(--space-sm);z-index:200;padding:var(--space-xs) var(--space-sm);background:var(--color-accent);color:var(--color-text-on-accent);font-family:var(--font-heading);font-size:var(--text-ui);border-radius:0 0 var(--radius-sm) var(--radius-sm);transition:top var(--duration-150) ease;font-weight:600;text-decoration:none;position:absolute}.skip-link[data-astro-cid-pbhazpx6]:focus{color:var(--color-text-on-accent);top:0}.theme-toggle[data-astro-cid-l6lhmie6]{cursor:pointer;color:var(--color-text);padding:var(--space-xs);border-radius:var(--radius-sm);transition:color var(--duration-150) ease, transform var(--duration-150) ease;background:0 0;border:none;justify-content:center;align-items:center;display:flex}.theme-toggle[data-astro-cid-l6lhmie6]:hover{color:var(--color-accent);transform:scale(1.1)}.theme-toggle[data-astro-cid-l6lhmie6] svg[data-astro-cid-l6lhmie6]{transition:transform var(--duration-400) var(--ease-out-expo)}.theme-toggle[data-astro-cid-l6lhmie6]:active svg[data-astro-cid-l6lhmie6]{transform:rotate(180deg)}.sun-icon[data-astro-cid-l6lhmie6],.moon-icon[data-astro-cid-l6lhmie6],.system-icon[data-astro-cid-l6lhmie6]{display:none}html[data-theme-mode=light] .moon-icon[data-astro-cid-l6lhmie6],html[data-theme-mode=dark] .sun-icon[data-astro-cid-l6lhmie6],html[data-theme-mode=system] .system-icon[data-astro-cid-l6lhmie6],html:not([data-theme-mode]).dark .sun-icon[data-astro-cid-l6lhmie6],html:not([data-theme-mode]):not(.dark) .moon-icon[data-astro-cid-l6lhmie6]{display:block}.divider[data-astro-cid-boktbqod]{align-items:center;gap:var(--space-sm);display:flex}.divider-line[data-astro-cid-boktbqod]{background:linear-gradient(90deg, transparent, var(--color-border) 20%, var(--color-border) 80%, transparent);flex:1;height:1px}.divider-diamond[data-astro-cid-boktbqod]{background:var(--color-border);flex-shrink:0;width:5px;height:5px;transform:rotate(45deg)}.divider-label[data-astro-cid-boktbqod]{color:var(--color-accent);flex-shrink:0}.footer-divider[data-astro-cid-jo6i4kqk]{margin-bottom:var(--space-md)}.footer-content[data-astro-cid-jo6i4kqk]{align-items:center;gap:var(--space-sm);flex-direction:column;display:flex}.footer-monogram[data-astro-cid-jo6i4kqk]{color:var(--color-text-heading)}a[data-astro-cid-jo6i4kqk].footer-monogram{transition:color var(--duration-150) ease;display:block}a[data-astro-cid-jo6i4kqk].footer-monogram:hover{color:var(--color-accent)}.footer-nav[data-astro-cid-jo6i4kqk]{gap:var(--space-md);flex-wrap:wrap;justify-content:center;display:flex}.footer-nav[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{font-family:var(--font-heading);font-size:var(--text-ui);color:var(--color-text-muted);transition:color var(--duration-150) ease;text-decoration:none}.footer-nav[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--color-accent)}.footer-copy[data-astro-cid-jo6i4kqk]{margin:var(--space-sm) 0 0}.care-swap[data-astro-cid-jo6i4kqk]{cursor:default;display:inline-block;position:relative}.care-word[data-astro-cid-jo6i4kqk],.ai-word[data-astro-cid-jo6i4kqk]{transition:opacity var(--duration-250) ease, transform var(--duration-250) ease}.ai-word[data-astro-cid-jo6i4kqk]{opacity:0;position:absolute;top:0;left:0;transform:translateY(4px)}.care-swap[data-astro-cid-jo6i4kqk].is-swapped .care-word[data-astro-cid-jo6i4kqk]{opacity:0;transform:translateY(-4px)}.care-swap[data-astro-cid-jo6i4kqk].is-swapped .ai-word[data-astro-cid-jo6i4kqk]{opacity:1;transform:translateY(0)}
