@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");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-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");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-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff) format("woff");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-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff) format("woff");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-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff) format("woff");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-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff) format("woff");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-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff) format("woff");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-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff) format("woff");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-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff) format("woff");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-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff) format("woff");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{--text-xs: .64rem;--text-sm: .8rem;--text-base: 1rem;--text-md: 1.25rem;--text-lg: 1.563rem;--text-xl: 1.953rem;--text-2xl: 2.441rem;--text-3xl: 3.052rem;--text-4xl: 3.815rem;--text-5xl: 4.768rem;--leading-display: 1.05;--leading-heading: 1.2;--leading-body: 1.55;--leading-ui: 1.4;--leading-mono: 1.45;--space-0: 0;--space-px: .0625rem;--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;--space-16: 4rem;--space-20: 5rem;--space-24: 6rem;--space-32: 8rem;--radius-pill: 9999px;--radius-full: 50%;--gutter: 2rem;--container-prose: 65ch;--container-default: min(1280px, 100% - 2 * var(--gutter));--container-wide: min(1440px, 100% - 2 * var(--gutter));--t-fast: .12s ease;--t-med: .28s ease;--t-slow: .6s cubic-bezier(.4, 0, .2, 1)}@media(prefers-reduced-motion:reduce){:root{--t-fast: 0ms;--t-med: 0ms;--t-slow: 0ms}}:where(:root),[data-theme=mono]{--bg: light-dark(#fafaf8, #0f0f0e);--surface-1: light-dark(#f1f0ec, #191918);--surface-2: light-dark(#e8e6e1, #232322);--text-primary: light-dark(#1b1b19, #dddcd6);--text-muted: light-dark(#66645d, #96938b);--border-default: color-mix(in srgb, var(--text-primary) 45%, transparent);--border-subtle: color-mix(in srgb, var(--text-primary) 16%, transparent);--primary: light-dark(#1b1b19, #dddcd6);--primary-hover: light-dark(#000000, #ffffff);--primary-foreground: light-dark(#fafaf8, #0f0f0e);--accent: light-dark(#55524b, #b3b0a8);--accent-foreground: light-dark(#fafaf8, #0f0f0e);--success: light-dark(#1f6b46, #86d3aa);--success-foreground: light-dark(#ffffff, #0f0f0e);--warning: light-dark(#8a5a12, #e8bf74);--warning-foreground: light-dark(#ffffff, #0f0f0e);--danger: light-dark(#a8431c, #f3a47d);--danger-foreground: light-dark(#ffffff, #0f0f0e);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #0f0f0e);--sans: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-headings: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--radius: 0;--radius-sm: 0}:where(:root),[data-theme=letter]{--bg: light-dark(#ffffff, #121212);--surface-1: light-dark(#f6f5f2, #1b1b1a);--surface-2: light-dark(#eeece8, #252524);--text-primary: light-dark(#111111, #e6e6e6);--text-muted: light-dark(#666666, #999999);--border-default: color-mix(in srgb, var(--text-primary) 45%, transparent);--border-subtle: color-mix(in srgb, var(--text-primary) 16%, transparent);--primary: light-dark(#0b3fd1, #9db8ff);--primary-hover: light-dark(#082e9c, #c2d3ff);--primary-foreground: light-dark(#ffffff, #121212);--accent: light-dark(#5b2aa0, #c6a8f5);--accent-foreground: light-dark(#ffffff, #121212);--success: light-dark(#1f6b46, #86d3aa);--success-foreground: light-dark(#ffffff, #121212);--warning: light-dark(#8a5a12, #e8bf74);--warning-foreground: light-dark(#ffffff, #121212);--danger: light-dark(#a8431c, #f3a47d);--danger-foreground: light-dark(#ffffff, #121212);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #121212);--sans: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-headings: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--radius: 0;--radius-sm: 0;--text-dim: light-dark(#767676, #7d7d7d)}:root[data-palette=evergreen]{--bg: light-dark(#e1edda, #0f241a);--surface-1: light-dark(#d5e4cc, #163226);--surface-2: light-dark(#c8dbbd, #1e4031);--text-primary: light-dark(#14271c, #dde8dc);--text-muted: light-dark(#43573f, #a7bfaa);--primary: light-dark(#175a36, #9bd8ab);--primary-hover: light-dark(#0e4228, #c5ecce);--primary-foreground: light-dark(#ffffff, #0f241a);--accent: light-dark(#7b4a1c, #deb98a);--accent-foreground: light-dark(#ffffff, #0f241a);--success: light-dark(#2c6b2a, #9ccf8a);--success-foreground: light-dark(#ffffff, #0f241a);--warning: light-dark(#7d5210, #e8bf74);--warning-foreground: light-dark(#ffffff, #0f241a);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #0f241a);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #0f241a)}:root[data-palette=clay]{--bg: light-dark(#e9d3c5, #2d1814);--surface-1: light-dark(#e0c8b8, #3a231d);--surface-2: light-dark(#d6bba9, #472d25);--text-primary: light-dark(#2a1b16, #f0ddd0);--text-muted: light-dark(#5a3d31, #c4a898);--primary: light-dark(#8f3413, #f2a283);--primary-hover: light-dark(#6b2409, #fac4ae);--primary-foreground: light-dark(#ffffff, #2d1814);--accent: light-dark(#55477c, #bcb0e6);--accent-foreground: light-dark(#ffffff, #2d1814);--success: light-dark(#2a6226, #9ccf8a);--success-foreground: light-dark(#ffffff, #2d1814);--warning: light-dark(#7d5210, #e8bf74);--warning-foreground: light-dark(#ffffff, #2d1814);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #2d1814);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #2d1814)}:root[data-palette=fog]{--bg: light-dark(#e4e9ee, #162433);--surface-1: light-dark(#d9dfe5, #202f40);--surface-2: light-dark(#cdd5dd, #2a3b50);--text-primary: light-dark(#1f262b, #dfe4e8);--text-muted: light-dark(#4f5b64, #a5b0b8);--primary: light-dark(#0b6464, #6fd2cd);--primary-hover: light-dark(#064646, #a8ebe6);--primary-foreground: light-dark(#ffffff, #162433);--accent: light-dark(#7a4668, #d9a6c6);--accent-foreground: light-dark(#ffffff, #162433);--success: light-dark(#2f6b2a, #9ccf8a);--success-foreground: light-dark(#ffffff, #162433);--warning: light-dark(#7d5210, #e8bf74);--warning-foreground: light-dark(#ffffff, #162433);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #162433);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #162433)}:root[data-palette=ink]{--bg: light-dark(#fdfcf8, #0b1024);--surface-1: light-dark(#f4f2ea, #151c30);--surface-2: light-dark(#eae7db, #1d2640);--text-primary: light-dark(#101c3a, #dfe4f2);--text-muted: light-dark(#4a5473, #a3aecb);--primary: light-dark(#b3261e, #ff9b8f);--primary-hover: light-dark(#7d1610, #ffc4bc);--primary-foreground: light-dark(#ffffff, #0b1024);--accent: light-dark(#2a4d8f, #9db4ee);--accent-foreground: light-dark(#ffffff, #0b1024);--success: light-dark(#2f6b2a, #9ccf8a);--success-foreground: light-dark(#ffffff, #0b1024);--warning: light-dark(#7d5210, #e8bf74);--warning-foreground: light-dark(#ffffff, #0b1024);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #0b1024);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #0b1024)}:root[data-palette=stone]{--bg: light-dark(#d5d3cd, #222426);--surface-1: light-dark(#cac8c1, #2b2d30);--surface-2: light-dark(#bebcb4, #36393c);--text-primary: light-dark(#1d1a15, #dad8d0);--text-muted: light-dark(#463f33, #a9a79f);--primary: light-dark(#8c1f4a, #8fbbe8);--primary-hover: light-dark(#5e0f2e, #c0daf5);--primary-foreground: light-dark(#ffffff, #222426);--accent: light-dark(#264d66, #d6b0e0);--accent-foreground: light-dark(#ffffff, #222426);--success: light-dark(#245a20, #9ccf8a);--success-foreground: light-dark(#ffffff, #222426);--warning: light-dark(#6e4609, #e8bf74);--warning-foreground: light-dark(#ffffff, #222426);--danger: light-dark(#8f3211, #f0a07a);--danger-foreground: light-dark(#ffffff, #222426);--info: light-dark(#1a4f82, #8fc3f0);--info-foreground: light-dark(#ffffff, #222426)}:root[data-palette=heather]{--bg: light-dark(#e0d0f2, #20123a);--surface-1: light-dark(#d5c2ec, #2b1a4a);--surface-2: light-dark(#c9b4e5, #372360);--text-primary: light-dark(#231338, #ebe3f7);--text-muted: light-dark(#4d3a6c, #b9a9d6);--primary: light-dark(#5322a0, #c7b0ff);--primary-hover: light-dark(#3b1578, #e0d3ff);--primary-foreground: light-dark(#ffffff, #20123a);--accent: light-dark(#8a2c52, #f0a8c6);--accent-foreground: light-dark(#ffffff, #20123a);--success: light-dark(#27632a, #9ccf8a);--success-foreground: light-dark(#ffffff, #20123a);--warning: light-dark(#7d5210, #e8bf74);--warning-foreground: light-dark(#ffffff, #20123a);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #20123a);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #20123a)}:root[data-palette=ochre]{--bg: light-dark(#f6e1ad, #33240a);--surface-1: light-dark(#eed59a, #412e10);--surface-2: light-dark(#e5c984, #503a17);--text-primary: light-dark(#2a1d06, #f7e8c4);--text-muted: light-dark(#5a4519, #cdb780);--primary: light-dark(#7a4300, #f4c25a);--primary-hover: light-dark(#582f00, #fadc94);--primary-foreground: light-dark(#ffffff, #33240a);--accent: light-dark(#26587a, #9fc8e8);--accent-foreground: light-dark(#ffffff, #33240a);--success: light-dark(#2a6226, #9ccf8a);--success-foreground: light-dark(#ffffff, #33240a);--warning: light-dark(#6e4609, #e8bf74);--warning-foreground: light-dark(#ffffff, #33240a);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #33240a);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #33240a)}:root[data-palette=leaf]{--bg: light-dark(#e9f1b8, #1b2406);--surface-1: light-dark(#dde8a2, #26320c);--surface-2: light-dark(#d0de8a, #324014);--text-primary: light-dark(#18200a, #e8f1c6);--text-muted: light-dark(#445418, #b6c880);--primary: light-dark(#2f5f00, #b6e24c);--primary-hover: light-dark(#1f4200, #d4f08c);--primary-foreground: light-dark(#ffffff, #1b2406);--accent: light-dark(#7a2f78, #e6b0e2);--accent-foreground: light-dark(#ffffff, #1b2406);--success: light-dark(#245a20, #a6d98f);--success-foreground: light-dark(#ffffff, #1b2406);--warning: light-dark(#6e4609, #e8bf74);--warning-foreground: light-dark(#ffffff, #1b2406);--danger: light-dark(#a03a16, #f0a07a);--danger-foreground: light-dark(#ffffff, #1b2406);--info: light-dark(#1f5c94, #8fc3f0);--info-foreground: light-dark(#ffffff, #1b2406)}:where(:root){color-scheme:light dark}[data-scheme=light]{color-scheme:light}[data-scheme=dark]{color-scheme:dark}:where([data-theme]){--warm: initial;--shadow-sm: initial;--shadow-md: initial;--shadow-lg: initial;--font-display-weight: initial}[data-scheme],[data-theme]{color:var(--text-primary)}:root{--text-body: 1.125rem;--measure: 32.5rem;--page-inset: 1.25rem;--flow: 1.1em;--list-indent: 1.2em;--list-gap: .3em;--link-rule: 1px;--link-offset: .16em;--card-width: 19rem}[data-theme=mono]{--text-body: .875rem;--measure: 76ch;--page-inset: clamp(1.25rem, 6vw, 5rem);--flow: var(--space-5);--list-indent: var(--space-6);--list-gap: var(--space-2);--link-rule: .0625em;--link-offset: .25em}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html{background:var(--bg);color:var(--text-primary);font-family:var(--sans);line-height:var(--leading-body);-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-block:calc(var(--bar-height, 5rem) + 1px)}body{font-size:var(--text-body);padding:var(--space-12) var(--page-inset) var(--space-24)}[data-theme=mono] body{line-height:1.65}body>*{max-width:var(--measure)}main{overflow-wrap:break-word}main a,main h1,main h2,main h3{overflow-wrap:anywhere}h1,h2,h3{font-family:var(--font-headings);line-height:var(--leading-heading);margin:var(--space-10) 0 var(--space-3);text-wrap:balance}h1{font-size:1.55em;margin-top:0}h2{font-size:1.2em}h3{font-size:1em}[data-theme=mono] :is(h1,h2,h3){font-size:1em;font-weight:500}[data-theme=mono] h1:before{content:"# ";color:var(--text-muted)}[data-theme=mono] h2:before{content:"## ";color:var(--text-muted)}p,ul,ol,dl,blockquote,figure{margin:var(--flow) 0}main>:first-child,.prose>:first-child{margin-top:0}ul,ol{padding-left:var(--list-indent)}li{margin:var(--list-gap) 0}blockquote{padding-left:var(--space-4);border-left:1px solid var(--border-default);color:var(--text-muted)}hr{border:0;border-top:1px solid var(--border-subtle);margin:var(--space-10) 0}img{max-width:100%;height:auto}code,kbd{font-family:var(--mono);font-size:.86em}[data-theme=mono] :is(code,kbd){font-size:1em}small,.small{font-size:.875em;color:var(--text-muted)}a{color:var(--primary);text-decoration-line:underline;text-decoration-thickness:var(--link-rule);text-underline-offset:var(--link-offset)}a:visited{color:var(--accent)}a:hover{color:var(--primary-hover)}[data-theme=mono] a{text-decoration-color:var(--border-default)}[data-theme=mono] a:hover{text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.skip{position:absolute;left:-999px}.skip:focus{left:var(--space-4);top:var(--space-2);z-index:20;background:var(--bg);padding:var(--space-1) var(--space-2)}button.as-link{all:unset;cursor:pointer;color:inherit;text-decoration-line:underline;text-decoration-thickness:var(--link-rule);text-underline-offset:var(--link-offset)}button.as-link[hidden]{display:none}button.as-link:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.site-nav{margin:0 0 var(--space-10);font-size:.875em;color:var(--text-muted)}.site-nav ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:0 var(--space-2)}.site-nav li{margin:0}.site-nav li+li:before{content:"/";margin-right:var(--space-2);color:var(--border-default)}.lede{color:var(--text-muted);font-size:1.05em;margin-top:0}.facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:var(--space-1) var(--space-5);margin:var(--space-6) 0 var(--space-8);padding:var(--space-3) 0;border-block:1px solid var(--border-subtle);font-family:var(--mono);font-size:.8125rem;line-height:var(--leading-mono)}.facts dt{color:var(--text-muted)}.facts dd{margin:0;overflow-wrap:anywhere}.facts dd a+a:before{content:" · ";color:var(--text-muted);display:inline-block;white-space:pre;text-decoration:none}.entries{list-style:none;padding:0;margin:var(--space-8) 0 0}.entries li{margin:0 0 var(--space-5)}.entries .entries{margin:var(--space-3) 0 0 1.25rem}.entries .years{font-family:var(--mono);font-size:.75rem;color:var(--text-muted);margin-left:var(--space-2);white-space:nowrap}.entries .role{font-family:var(--mono);font-size:.75rem;color:var(--text-muted);margin-left:var(--space-2)}.entries .line{display:block;font-size:.875em}body>.bar{position:sticky;top:0;bottom:0;z-index:5;max-width:none;margin:var(--page-inset) 0 0;padding:.75rem 0;background:var(--bg);border-block:1px solid color-mix(in srgb,var(--text-primary) 14%,transparent);font-size:1.05em;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:1.25rem;align-items:baseline}:root[data-bar-loose] body>.bar{position:static}:root[data-bar-loose]{scroll-padding-block:0}.bar>.name{grid-column:1 / span 3;font-weight:600}[data-theme=mono] .bar>.name{font-weight:500}.bar>.sections{grid-column:4 / span 6;display:flex;flex-wrap:wrap;gap:0 1.25rem}.bar>.langs{grid-column:10 / -1;display:flex;gap:.75rem;justify-content:flex-end}.bar a{color:inherit;text-decoration-line:underline;text-decoration-thickness:var(--link-rule);text-underline-offset:var(--link-offset);text-decoration-color:var(--primary)}.bar a:hover{color:inherit;text-decoration-color:var(--primary-hover)}[data-theme=mono] .bar a{text-decoration-color:var(--border-default)}[data-theme=mono] .bar a:hover{text-decoration-color:currentColor}.bar .langs>span{color:var(--text-primary)}.bar .langs>a{color:var(--dim)}:root{--dim: var(--text-dim, var(--text-muted))}:root[data-palette],[data-theme=mono]{--dim: var(--text-muted)}body>.site-footer{max-width:none}.site-footer .block{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:1.25rem;row-gap:4.5rem;margin-top:4.5rem}.site-footer .dim{color:var(--dim)}.site-footer .block a{color:inherit;text-decoration-line:underline;text-decoration-thickness:var(--link-rule);text-underline-offset:var(--link-offset);text-decoration-color:var(--primary);overflow-wrap:anywhere}.site-footer .block a:hover{color:inherit;text-decoration-color:var(--primary-hover)}[data-theme=mono] .site-footer .block a{text-decoration-color:var(--border-default)}[data-theme=mono] .site-footer .block a:hover{text-decoration-color:currentColor}.site-footer .block p,.site-footer .block ul{margin:0}.site-footer .block ul{list-style:none;padding:0}.site-footer .block li{margin:0}.site-footer .block h2{font:inherit;margin:0}.site-footer .block h2:before{content:none}.site-footer .row{grid-column:1 / -1;display:grid;grid-template-columns:subgrid}.site-footer .about{grid-column:4 / span 6}.site-footer .about p+p{margin-top:1em}.site-footer .row>.label{grid-column:1 / span 3}.site-footer .row>.list{grid-column:4 / -1}.site-footer .row>.detail{grid-column:4 / span 6}.site-footer .list,.site-footer .list ul{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));column-gap:1.25rem}.site-footer .list li,.site-footer .list ul{grid-column:1 / -1;display:grid;grid-template-columns:subgrid}.site-footer .list li{padding:.2rem 0}.site-footer .list li>ul{padding:.2rem 0 0}.site-footer .list li>ul li:last-child{padding-bottom:0}.site-footer .list li>.n{grid-column:1 / span 4}.site-footer .list li>.n>.y{font-size:.8125em;margin-left:.4em;white-space:nowrap}.site-footer .list li>.r{grid-column:5 / span 2;font-size:.875em}.site-footer .list li>.d{grid-column:7 / -1;font-size:.875em}.site-footer .list ul>li>.n{padding-left:1.25rem}.site-footer .face{margin:3em 0 0;font-size:.875em;color:var(--text-muted);display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-6)}.site-footer .face .as-link{color:inherit}@media(max-width:760px){.site-footer .block{grid-template-columns:minmax(0,1fr);row-gap:3rem;margin-top:3rem}.site-footer .block>*,.site-footer .row>*{grid-column:1 / -1}.site-footer .row{display:block}body>.bar{display:flex;flex-wrap:wrap;gap:.1rem 1.25rem;padding:min(.5rem,1.4vh) 0}.bar>.langs{margin-left:auto}.site-footer .row>.label{margin-bottom:.5rem}.site-footer .list,.site-footer .list ul,.site-footer .list li{grid-template-columns:minmax(0,1fr)}.site-footer .list li{padding:.35rem 0}.site-footer .list li>ul{padding:.35rem 0 0 1.25rem}.site-footer .list ul>li>.n{padding-left:0}.site-footer .list li>:is(.n,.r,.d){grid-column:1;text-align:left}}.site-footer .palettes{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3)}.site-footer .palettes[hidden]{display:none}.site-footer .palettes button[aria-pressed=true]{text-decoration-line:none;font-weight:700;color:var(--text-primary)}[data-theme=mono] .site-footer .palettes button[aria-pressed=true]{font-weight:500}.draft-banner{margin:0 0 var(--space-8);padding:var(--space-1) var(--space-3);background:var(--warning);color:var(--warning-foreground);font-family:var(--mono);font-size:.75rem;width:fit-content}.tone-green{--tone: var(--success)}.tone-rust{--tone: var(--danger)}.tone-blue{--tone: var(--info)}.tone-violet{--tone: var(--accent)}.tone-ochre{--tone: var(--warning)}.tone-leaf{--tone: color-mix(in srgb, var(--success) 55%, var(--warning))}.art{--art-ink: var(--tone, var(--text-muted));--art-ground: color-mix(in srgb, var(--art-ink) 8%, var(--bg));display:block;aspect-ratio:312 / 160;overflow:hidden;color:var(--art-ink);background:var(--art-ground)}figure.art{border:1px solid var(--border-subtle);margin:var(--space-6) 0;max-width:min(var(--measure),35rem)}.art svg{display:block;width:100%;height:100%}.art .node{fill:var(--art-ground)}.art .gap{stroke:var(--art-ground)}.art .draw{stroke-dasharray:1;stroke-dashoffset:1;animation:lf-draw .5s cubic-bezier(.3,.7,.2,1) forwards;animation-delay:calc(var(--i, 0) * 28ms)}@keyframes lf-draw{to{stroke-dashoffset:0}}.art .pop{transform-box:fill-box;transform-origin:center;scale:0;animation:lf-pop .34s cubic-bezier(.2,1.7,.4,1) forwards;animation-delay:calc(var(--i, 0) * 30ms + 90ms)}@keyframes lf-pop{to{scale:1}}.art .fade{opacity:0;animation:lf-fade .28s ease-out forwards;animation-delay:calc(var(--i, 0) * 22ms)}@keyframes lf-fade{to{opacity:var(--o, 1)}}.art .type{transform-box:fill-box;transform-origin:left center;scale:0 1;animation:lf-type .22s cubic-bezier(.2,.8,.2,1) forwards;animation-delay:calc(var(--i, 0) * 55ms)}@keyframes lf-type{to{scale:1 1}}.art .spin{transform-origin:156px 80px;animation:lf-spin 18s linear infinite}.art .spin.rev{animation-duration:26s;animation-direction:reverse}@keyframes lf-spin{to{rotate:360deg}}.art .breathe{transform-origin:156px 80px;animation:lf-breathe 4.5s ease-in-out infinite alternate}@keyframes lf-breathe{to{rotate:5deg;scale:1.06}}.art .blink{opacity:0;animation:lf-blink 1s steps(1) infinite;animation-delay:.6s}@keyframes lf-blink{0%,49%{opacity:1}50%,to{opacity:0}}@media(prefers-reduced-motion:reduce){.art :is(.draw,.pop,.fade,.type,.spin,.breathe,.blink){animation:none;stroke-dashoffset:0;scale:none;opacity:var(--o, 1)}.art .signal{display:none}}.card{position:fixed;left:0;top:0;transform-origin:20px 0;z-index:10;width:min(var(--card-width),100vw - 2 * var(--space-3));background:var(--bg);color:var(--text-primary);border:1px solid var(--text-primary);box-shadow:3px 3px 0 var(--border-subtle);font-size:.875rem;line-height:var(--leading-ui);pointer-events:auto}.card[hidden]{display:none}.card .art{border-bottom:1px solid var(--text-primary)}.card.portrait{width:min(11.5rem,100vw - 2 * var(--space-3))}.card .photo{display:block;border-bottom:1px solid var(--text-primary)}.card .photo img{display:block;width:100%;height:auto}.card-body{padding:var(--space-2) var(--space-3) var(--space-3)}.card-title{display:block;font-weight:700}.card-line{display:block}.card-foot{display:flex;justify-content:space-between;gap:var(--space-4);margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--border-subtle);font-family:var(--mono);font-size:.6875rem;color:var(--text-muted)}.card-foot :last-child{flex:none;white-space:nowrap}@media(hover:none){.card{display:none}}@media print{body>.bar{position:static}.site-footer .face,.skip,.card,.draft-banner{display:none}}.under-construction[data-astro-cid-5p35iig3]{margin:0;padding:.5em 0;color:var(--dim, var(--text-muted));font-size:.875em}.under-construction[data-astro-cid-5p35iig3]:before{content:"";display:block;width:3ch;margin-bottom:.4em;border-top:1px solid currentColor}
