.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@font-face{font-family:Fraunces;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/6NUs8FyLNQOQZAnv9ZwNjucMHVn85Ni7emAe9lKqZTnbB-gzTK0K1ChJdt9hFwpX9W37ll9_mvIiQublWIIkfg.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/6NUs8FyLNQOQZAnv9ZwNjucMHVn85Ni7emAe9lKqZTnbB-gzTK0K1ChJdt9hFwpX9W37ll9_mvMiQublWIIkfg.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Fraunces;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/6NUs8FyLNQOQZAnv9ZwNjucMHVn85Ni7emAe9lKqZTnbB-gzTK0K1ChJdt9hFwpX9W37ll9_mv0iQublWII.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCBTeP2Xz5fU8w.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCFTeP2Xz5fU8w.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Fraunces;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxC9TeP2Xz5c.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCBTeP2Xz5fU8w.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCFTeP2Xz5fU8w.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Fraunces;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxC9TeP2Xz5c.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCBTeP2Xz5fU8w.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxCFTeP2Xz5fU8w.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Fraunces;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/6NU78FyLNQOQZAnv9bYEvDiIdE9Ea92uemAk_WBq8U_9v0c2Wa0KxC9TeP2Xz5c.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/-F6pfjptAgt5VM-kVkqdyU8n1ioa2HdgregdFOFh.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/-F6pfjptAgt5VM-kVkqdyU8n1ioa0XdgregdFOFh.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/-F6pfjptAgt5VM-kVkqdyU8n1ioa2ndgregdFOFh.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/-F6pfjptAgt5VM-kVkqdyU8n1ioa23dgregdFOFh.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/-F6pfjptAgt5VM-kVkqdyU8n1ioa1XdgregdFA.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/-F63fjptAgt5VM-kVkqdyU8n1iIq131nj-otFQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/-F63fjptAgt5VM-kVkqdyU8n1isq131nj-otFQ.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/-F63fjptAgt5VM-kVkqdyU8n1iAq131nj-otFQ.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/-F63fjptAgt5VM-kVkqdyU8n1iEq131nj-otFQ.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/-F63fjptAgt5VM-kVkqdyU8n1i8q131nj-o.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/-F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgsAXHNlYzg.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/-F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgsAXHNlYzg.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/-F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgsAXHNlYzg.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/-F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgsAXHNlYzg.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/-F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgsAXHNk.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/QGYvz_MVcBeNP4NJuktqUYLkn8BJ.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Outfit;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/QGYvz_MVcBeNP4NJtEtqUYLknw.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/QGYvz_MVcBeNP4NJuktqUYLkn8BJ.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Outfit;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/QGYvz_MVcBeNP4NJtEtqUYLknw.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/QGYvz_MVcBeNP4NJuktqUYLkn8BJ.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Outfit;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/QGYvz_MVcBeNP4NJtEtqUYLknw.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--font-display: "Fraunces", "Georgia", serif;--font-body: "Outfit", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--radius: 12px;--page-pad: clamp(1.25rem, 4vw, 2.5rem);--gap-below-topbar: clamp(1.25rem, 3.5vw, 2.25rem);--content-max: 44rem;--content-reading: 48rem;--content-wide: 52rem;--radius-tight: 6px;--radius-control: 8px;--radius-code: 5px;--radius-pill: 999px;color-scheme:dark;--color-ink: #f2efe8;--color-muted: #ada8a0;--color-muted-2: #858078;--color-surface: #2d2a26;--color-surface-2: #3a3630;--color-stroke: color-mix(in srgb, var(--color-ink) 12%, transparent);--color-accent: #c98c5a;--color-accent-2: #a67b4f;--color-on-accent: #2d2a26;--body-gradient: radial-gradient(ellipse 120% 80% at 50% -20%, #454038 0%, transparent 52%), linear-gradient(180deg, #242220 0%, #2d2a26 42%);--color-footer: color-mix(in srgb, #000 18%, var(--color-surface));--grain-opacity: .28;--shadow-soft: 0 1px 0 color-mix(in srgb, #fff 6%, transparent), 0 18px 40px -20px #0008;--shadow-lift: 0 2px 0 color-mix(in srgb, #fff 8%, transparent), 0 24px 48px -16px #0006;--hero-pattern-stroke-opacity: .5;--hero-pattern-footer-stroke-opacity: .58}@media(prefers-color-scheme:light){:root:not([data-theme]){color-scheme:light;--color-ink: #1c1916;--color-muted: #5e5a52;--color-muted-2: #7a756c;--color-surface: #f7f4ef;--color-surface-2: #efe9e0;--color-stroke: color-mix(in srgb, var(--color-ink) 9%, transparent);--color-accent: #8f4f18;--color-accent-2: #6d3b10;--color-on-accent: #faf6f0;--body-gradient: radial-gradient(ellipse 100% 70% at 50% 0%, #fff9f2 0%, transparent 55%), linear-gradient(180deg, #e8e2d8 0%, #f7f4ef 45%);--color-footer: color-mix(in srgb, #000 4%, var(--color-surface));--grain-opacity: .22;--shadow-soft: 0 1px 0 color-mix(in srgb, #000 4%, transparent), 0 16px 36px -18px #0001a;--shadow-lift: 0 2px 0 color-mix(in srgb, #000 6%, transparent), 0 22px 44px -14px #00012;--hero-pattern-stroke-opacity: .38;--hero-pattern-footer-stroke-opacity: .52}}:root[data-theme=light]{color-scheme:light;--color-ink: #1c1916;--color-muted: #5e5a52;--color-muted-2: #7a756c;--color-surface: #f7f4ef;--color-surface-2: #efe9e0;--color-stroke: color-mix(in srgb, var(--color-ink) 9%, transparent);--color-accent: #8f4f18;--color-accent-2: #6d3b10;--color-on-accent: #faf6f0;--body-gradient: radial-gradient(ellipse 100% 70% at 50% 0%, #fff9f2 0%, transparent 55%), linear-gradient(180deg, #e8e2d8 0%, #f7f4ef 45%);--color-footer: color-mix(in srgb, #000 4%, var(--color-surface));--grain-opacity: .22;--shadow-soft: 0 1px 0 color-mix(in srgb, #000 4%, transparent), 0 16px 36px -18px #0001a;--shadow-lift: 0 2px 0 color-mix(in srgb, #000 6%, transparent), 0 22px 44px -14px #00012;--hero-pattern-stroke-opacity: .38;--hero-pattern-footer-stroke-opacity: .52}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;overflow-x:clip}body{margin:0;min-height:100dvh;display:flex;flex-direction:column;font-family:var(--font-body);font-size:1.05rem;line-height:1.6;color:var(--color-ink);background-color:var(--color-surface);background-image:var(--body-gradient)}.site-content-shell{position:relative;z-index:1;flex:1;min-height:0;min-width:0;width:100%;display:flex;flex-direction:column}body:before{content:"";pointer-events:none;position:fixed;inset:0;opacity:var(--grain-opacity);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");mix-blend-mode:overlay;z-index:0}.landing,.blog-index,.post-layout{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;width:100%;min-width:0}.landing{padding-top:var(--gap-below-topbar)}.landing__pattern{position:absolute;pointer-events:none;z-index:0}.landing__pattern--hero{top:calc(-1*(4.05rem + env(safe-area-inset-top,0px)));left:0;right:0;width:auto}.landing__pattern--footer{bottom:0;left:0;right:0;width:auto;margin-inline:0}.landing__pattern-strokes{stroke-opacity:var(--hero-pattern-stroke-opacity)}.landing__pattern-strokes--footer{stroke-opacity:var(--hero-pattern-footer-stroke-opacity);stroke-width:2.25}.landing__pattern--footer .landing__pattern-img{max-height:min(50vw,15rem);transform:scale(-1);transform-origin:center}.landing__pattern-img{display:block;width:100%;height:auto}.landing__main{position:relative;z-index:1;flex:1;width:100%;max-width:calc(var(--content-max) + 2 * var(--page-pad));margin:0 auto;padding:var(--page-pad);padding-bottom:4rem}.hero{padding-top:clamp(2.5rem,8vh,5rem);padding-bottom:1rem}@media(prefers-reduced-motion:no-preference){.hero__eyebrow,.hero__name,.hero__sub,.hero__actions{animation:hero-in .85s ease backwards}.hero__eyebrow{animation-delay:.05s}.hero__name{animation-delay:.12s}.hero__sub{animation-delay:.2s}.hero__actions{animation-delay:.3s}.landing__prose{animation:hero-in .8s ease backwards;animation-delay:.36s}}@keyframes hero-in{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}.hero__eyebrow,.blog-index__eyebrow{font-family:var(--font-mono);font-size:.72rem;font-style:italic;letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent)}.hero__eyebrow{margin:0 0 1rem}.hero__name{font-family:var(--font-display);font-size:clamp(2.35rem,6.5vw,3.6rem);font-weight:600;font-variation-settings:"opsz" 72;letter-spacing:-.03em;line-height:1.08;margin:0 0 1rem;color:var(--color-ink);max-width:14ch}.hero__name em{font-style:italic;color:var(--color-accent-2)}.hero__sub{font-size:1.1rem;line-height:1.55;color:var(--color-muted);max-width:36ch;margin:0 0 1.75rem}.hero__actions{display:flex;flex-wrap:wrap;gap:.75rem 1rem;align-items:center}.hero__link{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.78rem;text-transform:uppercase;letter-spacing:.1em;text-decoration:none;color:var(--color-on-accent);background:var(--color-accent);padding:.7rem 1.15rem;border-radius:var(--radius-tight);border:none;box-shadow:0 1px color-mix(in srgb,#fff 20%,transparent);transition:background .2s ease,transform .2s ease}.hero__link:hover,.hero__link:focus-visible{background:color-mix(in srgb,var(--color-accent) 90%,#fff);transform:translateY(-1px)}.hero__link:focus-visible{outline:2px solid var(--color-ink);outline-offset:3px}.hero__link--ghost{background:transparent;color:var(--color-ink);box-shadow:none;border:1px solid var(--color-stroke);padding:.65rem 1.1rem}.hero__link--ghost:hover,.hero__link--ghost:focus-visible{background:color-mix(in srgb,var(--color-ink) 6%,transparent);border-color:var(--color-muted-2);transform:none}.hero__link svg{width:.9rem;height:.9rem;opacity:.9}.landing__rule{height:1px;background:linear-gradient(90deg,transparent,var(--color-stroke) 15%,var(--color-stroke) 85%,transparent);margin:2.5rem 0 0;border:none}.landing__footer{position:relative;z-index:1;flex-shrink:0;padding:2rem var(--page-pad) 2.25rem;border-top:1px solid var(--color-stroke);background:var(--color-footer);overflow:hidden}.landing__footer-inner{position:relative;z-index:1;max-width:calc(var(--content-max) + 2 * var(--page-pad));margin:0 auto;display:flex;flex-wrap:wrap;gap:.75rem 1.5rem;align-items:center;justify-content:space-between;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.04em;color:var(--color-muted-2)}.landing__footer a,.landing__footer .c-nav-link{color:var(--color-muted);text-decoration:none;border-bottom:1px solid transparent;transition:color .2s ease,border-color .2s ease}.landing__footer a:hover,.landing__footer a:focus-visible{color:var(--color-accent-2);border-bottom-color:var(--color-accent-2)}.landing__footer .c-nav-link--current{cursor:default}.landing__footer a[aria-disabled=true]{pointer-events:none;cursor:not-allowed;opacity:.5;border:none}.prose{--prose-pad: var(--page-pad);max-width:min(var(--content-reading),100%);width:100%;min-width:0;margin:0 auto;padding:2.5rem var(--prose-pad) 4rem;color:var(--color-ink);line-height:1.7}.prose h1,.prose h2,.prose h3{font-family:var(--font-display);font-weight:600;letter-spacing:-.02em;line-height:1.25;color:var(--color-ink)}.prose h1{font-size:clamp(1.85rem,4vw,2.5rem);margin:0 0 .5rem}.prose h2{font-size:1.4rem;margin:2rem 0 .75rem}.prose h3{font-size:1.15rem;margin:1.5rem 0 .5rem}.prose p{margin:0 0 1rem;color:color-mix(in srgb,var(--color-ink) 88%,var(--color-muted))}.prose a{color:var(--color-accent-2);text-decoration:underline;text-underline-offset:.2em}.prose a:hover{color:var(--color-accent)}.prose code{font-family:var(--font-mono);font-size:.9em;background:color-mix(in srgb,var(--color-ink) 8%,transparent);padding:.1em .35em;border-radius:var(--radius-code)}.prose pre{font-family:var(--font-mono);font-size:.85rem;line-height:1.5;padding:1rem 1.1rem;border-radius:var(--radius);overflow-x:auto;border:1px solid var(--color-stroke);background:var(--color-surface-2)}.prose pre code{background:none;padding:0}.prose ul,.prose ol{margin:0 0 1rem;padding-left:1.35rem}.prose li{margin:.35rem 0}.prose>*{min-width:0}.prose :is(img,video){display:block;max-width:100%;width:min(100%,max-content);height:auto;margin-inline:auto;border-radius:var(--radius-tight)}img.img-70p{width:70%;max-width:70%}.prose svg{max-width:100%;height:auto;display:block;margin-inline:auto}.prose iframe{display:block;width:100%!important;max-width:100%!important;min-width:0!important;height:auto;margin-inline:auto;border:1px solid var(--color-stroke);border-radius:var(--radius-control)}.site-top-nav{position:sticky;top:0;z-index:50;isolation:isolate;overflow:hidden;background:linear-gradient(180deg,color-mix(in srgb,var(--color-surface) 64%,transparent),color-mix(in srgb,var(--color-surface) 44%,transparent)),color-mix(in srgb,var(--color-surface-2) 20%,transparent);backdrop-filter:blur(2px) saturate(1.08);-webkit-backdrop-filter:blur(2px) saturate(1.08);box-shadow:inset 0 1px color-mix(in srgb,#fff 9%,transparent),0 10px 36px -8px color-mix(in srgb,#000 20%,transparent)}.site-top-nav__frost{position:absolute;inset:0;z-index:0;pointer-events:none;backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);-webkit-mask-image:linear-gradient(to bottom,#000 0%,color-mix(in srgb,#000 55%,transparent) 45%,transparent 100%);mask-image:linear-gradient(to bottom,#000 0%,color-mix(in srgb,#000 55%,transparent) 45%,transparent 100%);mask-size:100% 100%;-webkit-mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat}.site-top-nav:before{content:"";position:absolute;inset:-80% -15% 0;z-index:1;pointer-events:none;background:radial-gradient(ellipse 55% 70% at 20% 0%,color-mix(in srgb,var(--color-accent) 28%,transparent) 0%,transparent 60%),radial-gradient(ellipse 50% 65% at 90% 15%,color-mix(in srgb,#fff 6%,transparent) 0%,transparent 55%),radial-gradient(ellipse 45% 50% at 55% 80%,color-mix(in srgb,var(--color-muted) 8%,transparent) 0%,transparent 50%);mix-blend-mode:soft-light;opacity:.85;animation:site-top-nav-liquid 18s ease-in-out infinite}.site-top-nav:after{content:"";position:absolute;left:0;right:0;top:0;height:3px;z-index:1;pointer-events:none;background:linear-gradient(100deg,transparent 0%,color-mix(in srgb,#fff 14%,var(--color-accent) 8%) 42%,transparent 64%);background-size:220% 100%;background-position:0% 0;mix-blend-mode:overlay;opacity:.55;animation:site-top-nav-sheen 9s ease-in-out infinite}@keyframes site-top-nav-liquid{0%,to{transform:translate3d(-1%,0,0) scale(1.02) rotate(.25deg)}33%{transform:translate3d(3%,1%,0) scale(1.06) rotate(0)}66%{transform:translate3d(1.5%,-.5%,0) scale(1.04) rotate(-.2deg)}}@keyframes site-top-nav-sheen{0%,to{background-position:0% 50%;opacity:.4}50%{background-position:100% 50%;opacity:.7}}@supports not (backdrop-filter: blur(1px)){.site-top-nav{background:color-mix(in srgb,var(--color-surface) 88%,var(--color-surface-2))}.site-top-nav__frost{display:none}}@media(prefers-reduced-transparency:reduce){.site-top-nav{backdrop-filter:none;-webkit-backdrop-filter:none;background:color-mix(in srgb,var(--color-surface) 90%,var(--color-surface-2))}.site-top-nav__frost{display:none}.site-top-nav:before,.site-top-nav:after{animation:none;opacity:.3}}@media(prefers-reduced-motion:reduce){.site-top-nav:before,.site-top-nav:after{animation:none}}.site-top-nav__inner{position:relative;z-index:2;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem;max-width:calc(var(--content-wide) + 2 * var(--page-pad));margin:0 auto;min-height:2.75rem;padding:calc(.65rem + env(safe-area-inset-top,0px)) var(--page-pad) .65rem}.site-top-nav__start{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .9rem;min-width:0;flex:1}.site-top-nav__brand{font-family:var(--font-display);font-size:1.05rem;font-weight:600;letter-spacing:-.02em;text-decoration:none;color:var(--color-ink);flex-shrink:0;transition:color .15s ease}.site-top-nav__brand:hover,.site-top-nav__brand:focus-visible{color:var(--color-accent-2)}.site-top-nav__brand:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px;border-radius:2px}.site-top-nav__crumbs{min-width:0}.site-top-nav__crumb-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;align-items:baseline;row-gap:.2rem;column-gap:.5rem;font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--color-muted-2)}.site-top-nav__crumb-item{display:flex;align-items:baseline;gap:.5rem;min-width:0}.site-top-nav__crumb-sep{color:var(--color-muted-2);opacity:.55;user-select:none}.site-top-nav__crumb-link{color:var(--color-muted);text-decoration:none;border-bottom:1px solid transparent;transition:color .15s ease,border-color .15s ease}.site-top-nav__crumb-link:hover,.site-top-nav__crumb-link:focus-visible{color:var(--color-accent-2);border-bottom-color:var(--color-accent-2)}.site-top-nav__crumb-current,.site-top-nav__crumb-link.c-nav-link--current{color:var(--color-ink);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:min(50vw,20rem);border-bottom:none;cursor:default}.theme-control{display:flex;flex-shrink:0;align-items:center;justify-content:center}.theme-control__cycle{display:flex;align-items:center;justify-content:center;width:2.4rem;height:2.4rem;padding:0;border:none;border-radius:var(--radius-control);background:transparent;color:var(--color-ink);cursor:pointer;box-shadow:none;transition:color .15s ease,background .15s ease}.theme-control__cycle:hover,.theme-control__cycle:focus-visible{background:color-mix(in srgb,var(--color-ink) 6%,transparent)}.theme-control__cycle:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.theme-control__icon-wrap{position:relative;width:1.15rem;height:1.15rem;display:block}.theme-control__icon{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.theme-control__icon--hidden{display:none}.post-layout{padding-top:var(--gap-below-topbar)}.post-header{max-width:min(var(--content-reading),100%);width:100%;min-width:0;margin:0 auto;padding:.5rem var(--page-pad) 1.5rem;border-bottom:1px solid var(--color-stroke)}.post-header__title{font-family:var(--font-display);font-size:clamp(1.85rem,4vw,2.5rem);font-weight:600;letter-spacing:-.02em;line-height:1.2;margin:0;color:var(--color-ink)}.post-header__meta{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--color-muted-2);margin:0 0 .5rem}.post-hero{margin:1.35rem 0 0;animation:post-hero-in .55s ease}.post-hero__frame{position:relative;border-radius:var(--radius-tight);overflow:hidden;border:1px solid var(--color-stroke);background:var(--color-surface-2);box-shadow:var(--shadow-soft);aspect-ratio:16 / 9}.post-hero__img{display:block;width:100%;height:100%;object-fit:cover}@keyframes post-hero-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.post-hero{animation:none}}.prose-article{flex:1;min-width:0;width:100%}.blog-index{width:100%;max-width:calc(var(--content-wide) + 2 * var(--page-pad));margin:0 auto;padding:var(--gap-below-topbar) var(--page-pad) 2rem}.blog-index__header{padding:.5rem 0 2.5rem;border-bottom:1px solid var(--color-stroke)}.blog-index__eyebrow{margin:0 0 .75rem}.blog-index__title{font-family:var(--font-display);font-size:clamp(2rem,5vw,3rem);font-weight:600;font-variation-settings:"opsz" 72;letter-spacing:-.03em;line-height:1.1;margin:0 0 .75rem;color:var(--color-ink)}.blog-index__lede{font-size:1.05rem;line-height:1.55;color:var(--color-muted);max-width:40ch;margin:0}.blog-index__section{margin-top:2.75rem}.blog-index__section+.blog-index__section{margin-top:3.25rem;padding-top:2.5rem;border-top:1px solid var(--color-stroke)}.blog-index__section-title{font-family:var(--font-mono);font-size:.7rem;font-weight:500;text-transform:uppercase;letter-spacing:.16em;color:var(--color-muted-2);margin:0 0 1.25rem}.blog-index__section .featured__grid{margin-top:.25rem}.featured__card--accent-hover{position:relative}.featured__card--accent-hover:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:linear-gradient(180deg,var(--color-accent) 0%,var(--color-accent-2) 100%);border-radius:2px 0 0 2px;opacity:0;transition:opacity .2s ease;pointer-events:none;z-index:3}.featured__card--accent-hover:hover:before,.featured__card--accent-hover:focus-visible:before{opacity:1}.blog-index__empty{color:var(--color-muted);margin:0;font-size:1rem}.resume-frame{margin-top:.75rem;border-radius:var(--radius);overflow:hidden;border:1px solid var(--color-stroke);box-shadow:var(--shadow-soft)}.resume-frame__embed{display:block;width:100%;height:min(85vh,900px);border:0}.prose .tech-logo svg,.tech-logo .inline-icon{display:inline-block;height:1.3em;width:auto;max-width:none;margin-inline:0;vertical-align:-.28em}.tech-logo svg.icon-light{display:none}@media(prefers-color-scheme:light){:root:not([data-theme]) .tech-logo svg.icon-dark{display:none}:root:not([data-theme]) .tech-logo svg.icon-light{display:inline-block}}:root[data-theme=light] .tech-logo svg.icon-dark{display:none}:root[data-theme=light] .tech-logo svg.icon-light{display:inline-block}:root[data-theme=dark] .tech-logo svg.icon-dark{display:inline-block}:root[data-theme=dark] .tech-logo svg.icon-light{display:none}.tech-table{font-size:.92rem;margin-block:2rem}.tech-table table{width:100%;border-collapse:collapse;border:1px solid var(--color-stroke);border-radius:var(--radius-tight);overflow:hidden;background:var(--color-surface-2)}.tech-table th,.tech-table td{padding:.5rem .75rem;text-align:left;border-bottom:1px solid var(--color-stroke)}.tech-table tr:last-child th,.tech-table tr:last-child td{border-bottom:none}.tech-table th{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--color-muted-2);background:color-mix(in srgb,var(--color-ink) 5%,transparent)}.featured{margin-top:4.5rem}.featured__head{max-width:34ch;margin-bottom:2.25rem}.featured__title{font-family:var(--font-display);font-size:clamp(1.75rem,3vw,2.25rem);font-weight:600;letter-spacing:-.02em;line-height:1.2;margin:0 0 .5rem;color:var(--color-ink)}.featured__lede{font-size:1.05rem;line-height:1.5;color:var(--color-muted);margin:0}.featured__all{display:inline-flex;align-items:center;gap:.35em;margin-left:.35em;font-family:var(--font-mono);font-size:.82em;font-weight:500;letter-spacing:.06em;text-transform:uppercase;text-decoration:none;color:var(--color-accent);white-space:nowrap}.featured__all-icon{width:1.1em;height:1.1em;flex-shrink:0}.featured__all:hover .featured__all-label,.featured__all:focus-visible .featured__all-label{text-decoration:underline;text-underline-offset:.15em}.featured__all:focus-visible{outline:2px solid var(--color-ink);outline-offset:3px;border-radius:2px}.featured__footer{margin-top:2rem;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem}.featured__empty{color:var(--color-muted);font-size:.95rem}.featured__empty code{font-family:var(--font-mono);font-size:.9em;color:var(--color-accent-2)}.featured__grid{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.5rem}.featured__item{margin:0;padding:0}@media(prefers-reduced-motion:no-preference){.featured__item{animation:featured-in .7s ease backwards;animation-delay:calc(.12s * var(--stagger) + .25s)}}@keyframes featured-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.featured__card{display:block;text-decoration:none;color:inherit;border-radius:var(--radius);background:var(--color-surface-2);border:1px solid var(--color-stroke);box-shadow:var(--shadow-soft);transition:border-color .2s ease,box-shadow .25s ease,transform .25s ease}.featured__card:hover,.featured__card:focus-visible{border-color:var(--color-accent);box-shadow:var(--shadow-lift);transform:translateY(-2px)}.featured__card:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.featured__card-inner{display:grid;grid-template-columns:1fr;overflow:hidden;border-radius:inherit}@media(min-width:48rem){.featured__card-inner{grid-template-columns:minmax(0,1.15fr) minmax(0,1.4fr)}}.featured__media{position:relative;min-height:12rem;overflow:hidden;background:var(--color-surface);background-image:linear-gradient(145deg,var(--color-surface) 0%,var(--color-surface-2) 100%)}.featured__media--empty{min-height:6rem}@media(min-width:48rem){.featured__media--empty{min-height:100%}}.featured__img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;transition:transform .45s ease}.featured__card:hover .featured__img,.featured__card:focus-visible .featured__img{transform:scale(1.04)}.featured__body{padding:1.35rem 1.4rem 1.5rem;display:flex;flex-direction:column;gap:.75rem}.featured__name{font-family:var(--font-display);font-size:1.35rem;font-weight:600;letter-spacing:-.02em;margin:0;color:var(--color-ink)}.featured__desc{font-size:.98rem;line-height:1.55;color:var(--color-muted);margin:0;flex:1}.featured__tags{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem .75rem;align-items:center}.featured__tag{display:inline-block;padding:.2rem .6rem;border-radius:var(--radius-pill);font-family:var(--font-mono);font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-muted-2);background:color-mix(in srgb,var(--color-ink) 6%,transparent);border:1px solid var(--color-stroke)}.featured__cta{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.12em;color:var(--color-accent-2);margin-top:.25rem}.featured__card:hover .featured__cta,.featured__card:focus-visible .featured__cta{color:var(--color-accent)}::view-transition-group(site-top-nav){z-index:100}@media(prefers-reduced-motion:reduce){.hero__eyebrow,.hero__name,.hero__sub,.hero__actions,.landing__prose,.featured__item{animation:none!important}.featured__img{transition:none}.featured__card--accent-hover:before{transition:none}.featured__card:hover .featured__img,.featured__card:focus-visible .featured__img{transform:none}::view-transition-old(*),::view-transition-new(*){animation:none!important}}@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(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
