@layer tokens,reset,base,components,utilities;@layer tokens{@font-face{font-family:"Cooper Hewitt";src:url("/assets/fonts/cooper-hewitt/cooper-hewitt-latin-400-normal.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Cooper Hewitt";src:url("/assets/fonts/cooper-hewitt/cooper-hewitt-latin-700-normal.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"Cooper Hewitt";src:url("/assets/fonts/cooper-hewitt/cooper-hewitt-latin-800-normal.woff2") format("woff2");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:"Iosevka";src:url("/assets/fonts/iosevka/iosevka-latin-400-normal.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Iosevka";src:url("/assets/fonts/iosevka/iosevka-latin-400-italic.woff2") format("woff2");font-weight:400;font-style:italic;font-display:optional}@font-face{font-family:"Iosevka";src:url("/assets/fonts/iosevka/iosevka-latin-700-normal.woff2") format("woff2");font-weight:700;font-style:normal;font-display:optional}@font-face{font-family:"Iosevka";src:url("/assets/fonts/iosevka/iosevka-latin-700-italic.woff2") format("woff2");font-weight:700;font-style:italic;font-display:optional}:root{color-scheme:light dark;--color-text:light-dark(oklch(0.23 0.02 260),oklch(0.88 0.02 260));--color-text-muted:light-dark(oklch(0.45 0.01 260),oklch(0.65 0.01 260));--color-bg:light-dark(oklch(0.98 0.005 90),oklch(0.14 0.01 260));--color-surface:light-dark(oklch(0.95 0.005 90),oklch(0.19 0.01 260));--color-border:light-dark(oklch(0.85 0.01 260),oklch(0.30 0.01 260));--color-accent:oklch(0.60 0.18 260);--color-accent-hover:oklch(0.55 0.20 260);--color-link:light-dark(oklch(0.50 0.16 260),oklch(0.70 0.16 260));--color-link-hover:light-dark(oklch(0.40 0.18 260),oklch(0.80 0.18 260));--font-heading:"Cooper Hewitt",system-ui,sans-serif;--font-body:"Iosevka",ui-monospace,"Cascadia Code","Source Code Pro",monospace;--font-mono:"Iosevka",ui-monospace,monospace;--text-xs:0.75rem;--text-sm:0.875rem;--text-base:1.125rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:2rem;--text-4xl:2.5rem;--leading-tight:1.2;--leading-normal:1.6;--leading-loose:1.8;--weight-normal:400;--weight-bold:700;--weight-extrabold:800;--space-3xs:0.125rem;--space-2xs:0.25rem;--space-xs:0.5rem;--space-sm:0.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4rem;--container-max:58.8rem;--container-pad:var(--space-md);--radius-sm:0.25rem;--radius-md:0.5rem;--radius-lg:0.75rem;--duration-fast:100ms;--duration-normal:200ms;--duration-slow:400ms;--ease-out:cubic-bezier(0.16,1,0.3,1);--ease-in-out:cubic-bezier(0.65,0,0.35,1)}@media (width >= 40rem){:root{--container-pad:var(--space-lg)}}}@layer reset{*,*::before,*::after{box-sizing:border-box}*{margin:0;padding:0}html{hanging-punctuation:first last;-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{min-block-size:100dvh;-webkit-font-smoothing:antialiased}img,picture,video,canvas,svg{display:block;max-inline-size:100%}input,button,textarea,select{font:inherit;color:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{text-wrap:balance}p{text-wrap:pretty}a{color:inherit;text-decoration-skip-ink:auto}ul,ol{list-style:none}button{background:none;border:none;cursor:pointer}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:0.01ms;animation-iteration-count:1;transition-duration:0.01ms;scroll-behavior:auto}html{scroll-behavior:auto}}}@layer base{body{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--color-text);background-color:var(--color-bg);font-kerning:normal;font-optical-sizing:auto}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);font-weight:var(--weight-bold);line-height:var(--leading-tight);color:var(--color-text);scroll-margin-block-start:var(--space-3xl)}h1{font-size:var(--text-3xl);font-weight:var(--weight-extrabold);letter-spacing:-0.02em;@media (width >= 40rem){font-size:var(--text-4xl)}}h2{font-size:var(--text-2xl);@media (width >= 40rem){font-size:var(--text-3xl)}}h3{font-size:var(--text-xl)}h4{font-size:var(--text-lg)}h5,h6{font-size:var(--text-base)}a{color:var(--color-link);text-decoration-color:color-mix(in oklch,var(--color-link) 40%,transparent);text-underline-offset:0.15em;transition:color var(--duration-fast) var(--ease-out),text-decoration-color var(--duration-fast) var(--ease-out);&:hover{color:var(--color-link-hover);text-decoration-color:var(--color-link-hover)}&:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-sm)}}strong,b{font-weight:var(--weight-bold)}em,i{font-style:italic}small{font-size:var(--text-sm)}code:not(.hljs){font-family:var(--font-mono);font-size:0.9em;background-color:var(--color-surface);padding-inline:var(--space-2xs);padding-block:var(--space-3xs);border-radius:var(--radius-sm)}pre:not(.code-block__pre){font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-normal);background-color:var(--color-surface);padding:var(--space-md);border-radius:var(--radius-md);overflow-x:auto;& code{background:none;padding:0;border-radius:0}}blockquote{border-inline-start:3px solid var(--color-accent);padding-inline-start:var(--space-md);color:var(--color-text-muted);font-style:italic}hr{border:none;border-block-start:1px solid var(--color-border);margin-block:var(--space-xl)}.container{max-inline-size:var(--container-max);padding-inline:var(--container-pad);margin-inline:auto}.page{display:grid;grid-template-rows:auto 1fr auto;min-block-size:100dvh}.page > main{padding-block:var(--space-2xl)}::selection{color:oklch(0 0 0);background-color:oklch(1 0 0)}}@layer components{.article{max-inline-size:50.4rem}.article__header{margin-block-end:var(--space-xl)}.article__title{margin-block-end:var(--space-xs)}.article__meta{display:flex;justify-content:space-between;align-items:baseline;font-size:var(--text-sm);color:var(--color-text-muted)}.article__author{display:block;font-size:var(--text-sm);color:var(--color-text-muted);margin-block-start:var(--space-xs)}.article__tag-group{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2xs);font-size:var(--text-sm);color:var(--color-text-muted);margin-block-start:var(--space-xs)}.article__tag-label{color:var(--color-text-muted)}.article__category,.article__tag{font-size:var(--text-xs);padding-inline:var(--space-xs);padding-block:var(--space-3xs);border-radius:var(--radius-sm);background-color:var(--color-surface);color:var(--color-text-muted)}.article__content a{color:var(--color-link);background-color:color-mix(in oklch,var(--color-link) 12%,var(--color-bg));text-decoration:none;padding-inline:var(--space-2xs);padding-block:var(--space-3xs);border-radius:var(--radius-sm);transition:background-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out);&:hover{color:var(--color-link-hover);background-color:color-mix(in oklch,var(--color-link-hover) 20%,var(--color-bg))}&:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}}.heading-anchor{margin-inline-start:var(--space-xs);color:var(--color-text-muted);text-decoration:none;opacity:0;transition:opacity var(--duration-fast) var(--ease-out);background:none;padding:0}:is(h1,h2,h3,h4,h5,h6):hover .heading-anchor{opacity:1}.heading-anchor:focus-visible{opacity:1;outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-sm)}.article__content .footnotes{margin-block-start:var(--space-2xl);padding-block-start:var(--space-lg);border-block-start:1px solid var(--color-border);font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--color-text-muted);content-visibility:auto}.article__content .footnotes ol{padding-inline-start:var(--space-lg)}.article__content .footnotes li + li{margin-block-start:var(--space-xs)}.article__content [data-footnote-ref]{font-size:var(--text-xs);vertical-align:super;line-height:0;padding-inline:var(--space-3xs)}.article__content [data-footnote-backref]{font-size:var(--text-xs);margin-inline-start:var(--space-2xs)}.article__content{line-height:var(--leading-loose)}.article__content > * + *{margin-block-start:var(--space-lg)}.article__content >:is(h2,h3,h4,h5,h6){margin-block-start:var(--space-2xl);line-height:var(--leading-tight)}.article__content >:is(h2,h3,h4,h5,h6) + *{margin-block-start:var(--space-sm)}.article__content ul{list-style:disc;padding-inline-start:var(--space-lg)}.article__content ol{list-style:decimal;padding-inline-start:var(--space-lg)}.article__content li + li{margin-block-start:var(--space-xs)}.article__content li > ul,.article__content li > ol{margin-block-start:var(--space-xs)}.article__content ul ul{list-style:circle}.article__content ul ul ul{list-style:square}.article__content table{inline-size:100%;border-collapse:collapse;font-size:var(--text-sm)}.article__content th{font-weight:var(--weight-bold);text-align:start;border-block-end:2px solid var(--color-border);padding:var(--space-xs) var(--space-sm)}.article__content td{border-block-end:1px solid var(--color-border);padding:var(--space-xs) var(--space-sm)}.article__content tr:last-child td{border-block-end:none}.article__content img{border-radius:var(--radius-md);margin-block:var(--space-lg)}.article__content ul:has(input[type="checkbox"]){list-style:none;padding-inline-start:0}.article__content input[type="checkbox"]{margin-inline-end:var(--space-xs);accent-color:var(--color-accent)}.article__content del{color:var(--color-text-muted)}.article__content blockquote > * + *{margin-block-start:var(--space-sm)}}@layer components{.code-block{position:relative;margin-block:var(--space-lg)}.code-block__pre{display:grid;grid-template-columns:auto 1fr;background-color:oklch(0.11 0.01 250);border-radius:var(--radius-lg);padding-block:var(--space-lg);padding-inline-end:var(--space-md);margin:0;overflow-x:auto;tab-size:4}.code-block__lines{display:flex;flex-direction:column;padding-inline:var(--space-md);border-inline-end:1px solid oklch(1 0 0 / 0.1);text-align:end;user-select:none;font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-normal);color:oklch(1 0 0 / 0.4)}.code-block__pre code{display:block;padding-inline-start:var(--space-md);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-normal);color:oklch(0.92 0.01 230);background:none;border-radius:0;white-space:pre}.code-block__copy{position:absolute;inset-block-start:var(--space-sm);inset-inline-end:var(--space-sm);display:grid;place-items:center;padding:var(--space-xs);background-color:oklch(1 0 0 / 0.1);border:1px solid oklch(1 0 0 / 0.2);border-radius:var(--radius-sm);color:oklch(1 0 0 / 0.7);cursor:pointer;opacity:0;transition:opacity var(--duration-fast) var(--ease-out),background-color var(--duration-fast) var(--ease-out);.code-block:hover &{opacity:1}&:hover{background-color:oklch(1 0 0 / 0.2)}&:focus-visible{opacity:1;outline:2px solid var(--color-accent);outline-offset:2px}}.code-block__copy[data-copied]{color:oklch(0.75 0.15 150)}.hljs-keyword,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-deletion{color:oklch(0.67 0 0)}.hljs-title,.hljs-title.function_,.hljs-title.class_{color:oklch(0.60 0 0)}.hljs-string,.hljs-addition{color:oklch(0.78 0.04 200)}.hljs-number,.hljs-literal{color:oklch(0.75 0.04 220)}.hljs-comment,.hljs-quote{color:oklch(0.50 0.01 230);font-style:italic}.hljs-doctag{color:oklch(0.65 0.03 200)}.hljs-built_in,.hljs-type{color:oklch(0.70 0.03 80)}.hljs-variable,.hljs-template-variable{color:oklch(0.80 0.03 50)}.hljs-attr,.hljs-attribute{color:oklch(0.75 0.04 220)}.hljs-regexp{color:oklch(0.72 0.06 30)}.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:oklch(0.67 0 0)}.hljs-symbol,.hljs-bullet{color:oklch(0.70 0.03 290)}.hljs-subst{color:oklch(0.92 0.01 230)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:var(--weight-bold)}}@layer components{.site-footer{border-block-start:1px solid var(--color-border)}.site-footer__inner{padding-block:var(--space-lg);font-size:var(--text-sm);color:var(--color-text-muted)}.site-footer__link{color:var(--color-text-muted);text-decoration-color:color-mix(in oklch,var(--color-text-muted) 40%,transparent);transition:color var(--duration-fast) var(--ease-out);&:hover{color:var(--color-text)}}}@layer components{.site-header{position:sticky;inset-block-start:0;z-index:10;background-color:var(--color-bg);border-block-end:1px solid var(--color-border)}.site-header__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding-block:var(--space-md);max-inline-size:calc(var(--container-max) * 1.2)}.site-header__title{font-family:var(--font-heading);font-size:var(--text-lg);font-weight:var(--weight-bold);letter-spacing:-0.01em;text-decoration:none;color:var(--color-text);transition:color var(--duration-fast) var(--ease-out);&:hover{color:var(--color-accent);text-decoration:none}@media (width >= 40rem){font-size:var(--text-xl)}}.site-header__nav{display:flex;align-items:center;gap:var(--space-xs);@media (width >= 40rem){gap:var(--space-md)}}.site-header__link{font-family:var(--font-body);font-size:var(--text-sm);color:var(--color-text-muted);text-decoration:none;padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius-sm);transition:color var(--duration-fast) var(--ease-out),background-color var(--duration-fast) var(--ease-out);&:hover{color:var(--color-text);background-color:var(--color-surface)}&[aria-current="page"]{color:var(--color-text);font-weight:var(--weight-bold)}}}@layer components{.post-list{list-style:none;padding:0;display:grid;gap:var(--space-xs);margin-block-start:var(--space-xl)}.post-list__link{display:block;text-decoration:none;color:inherit;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);transition:background-color var(--duration-fast) var(--ease-out);&:hover{background-color:var(--color-surface)}}.post-list__date{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2xs);font-size:var(--text-sm);color:var(--color-text-muted)}.post-list__category{font-size:var(--text-xs);padding-inline:var(--space-xs);padding-block:var(--space-3xs);border-radius:var(--radius-sm);background-color:var(--color-surface)}.post-list__title{font-size:var(--text-xl);margin-block-start:var(--space-2xs);@media (width >= 40rem){font-size:var(--text-2xl)}}.post-list__description{color:var(--color-text-muted);font-size:var(--text-sm);margin-block-start:var(--space-2xs)}}