:root{color-scheme:light dark}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}:root{--space-3xs:2px;--space-2xs:4px;--space-xs:8px;--space-sm:12px;--space-md:16px;--space-lg:24px;--space-xl:40px;--space-2xl:64px;--space-3xl:96px;--space-4xl:144px;--text-xs:0.8125rem;--text-sm:0.875rem;--text-body:0.9375rem;--text-md:1rem;--text-lead:1.0625rem;--text-title:1.125rem;--text-lg:1.25rem;--text-xl:1.5rem;--text-2xl:2rem;--weight-body:430;--weight-medium:520;--weight-strong:600;--ease-out:cubic-bezier(0.16, 1, 0.3, 1);--ease-in-out:cubic-bezier(0.65, 0, 0.35, 1);--dur-micro:120ms;--dur-short:220ms;--dur-long:520ms;--container:37rem;--gutter:24px;--radius-card:12px;--radius-small:6px;--radius-pill:999px;--rule-hair:1px;--font-display:"Geist", ui-sans-serif, system-ui, sans-serif;--font-body:"Geist", ui-sans-serif, system-ui, sans-serif;--font-mono:"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--color-paper:light-dark(#ffffff, #0a0a0a);--color-paper-2:light-dark(#fafafa, #141414);--color-paper-3:light-dark(#f5f5f5, #1c1c1c);--color-ink:light-dark(#171717, #f5f5f5);--color-ink-2:light-dark(#404040, #d4d4d4);--color-muted:light-dark(#737373, #a3a3a3);--color-rule:light-dark(#e5e5e5, #262626);--color-rule-strong:light-dark(#d4d4d4, #404040);--color-accent:var(--color-ink);--color-accent-ink:var(--color-paper);--color-focus:var(--color-ink);--color-error:light-dark(oklch(52% 0.19 27), oklch(72% 0.15 27));--color-success:light-dark(oklch(50% 0.12 150), oklch(78% 0.11 150));--duck-body:#ffd84d;--duck-wing:#f0b42e;--duck-beak:#f08a24;--duck-eye:#1d1a17;--rainbow-1:#e5484d;--rainbow-2:#f59e2c;--rainbow-3:#f7d64a;--rainbow-4:#46b866;--rainbow-5:#3d8fe0;--rainbow-6:#8a55d9;--syn-comment:light-dark(oklch(56% 0.01 60), oklch(64% 0.02 60));--syn-keyword:light-dark(oklch(48% 0.15 300), oklch(76% 0.12 300));--syn-string:light-dark(oklch(48% 0.11 150), oklch(78% 0.11 150));--syn-number:light-dark(oklch(52% 0.13 50), oklch(80% 0.11 60));--syn-func:light-dark(oklch(47% 0.13 255), oklch(77% 0.11 245));--syn-type:light-dark(oklch(50% 0.11 200), oklch(78% 0.09 200));--syn-del:light-dark(oklch(52% 0.19 27), oklch(72% 0.15 27));--syn-ins:light-dark(oklch(50% 0.12 150), oklch(78% 0.11 150))}*,*::before,*::after{box-sizing:border-box}html,body{overflow-x:clip}html{scrollbar-color:var(--color-muted)var(--color-paper);scroll-padding-top:var(--space-3xl)}body{margin:0;background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-md);line-height:1.55;-webkit-font-smoothing:antialiased;caret-color:var(--color-accent)}::selection{background:color-mix(in oklab,var(--color-accent) 22%,transparent);color:var(--color-ink)}:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.16em}h1,h2,h3{margin:0;font-family:var(--font-display);font-synthesis:none;overflow-wrap:break-word;min-width:0;text-wrap:balance}p{margin:0;text-wrap:pretty}p:not([class]){max-width:65ch}img,video{max-width:100%;height:auto;display:block}svg{display:block}[hidden]{display:none!important}button,input,select,textarea{font:inherit}.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter);box-sizing:border-box}.num,.figure,td.num{font-variant-numeric:tabular-nums}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}[data-slot]{position:relative;overflow:hidden;background:linear-gradient(160deg,var(--color-paper-2,var(--color-paper)),var(--color-paper-3,var(--color-paper)))}[data-slot]>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}[data-slot]:has(>img)>:not(img):not([data-keep]){display:none!important}@media(max-width:60rem){:root{--gutter:24px;--section-gap-s:80px;--section-gap:96px;--section-gap-l:120px}}@media(max-width:40rem){:root{--gutter:16px;--section-gap-s:56px;--section-gap:72px;--section-gap-l:96px;--gap-columns:16px}}@media(prefers-reduced-motion:reduce){*:not(.keep-motion),*:not(.keep-motion)::before,*:not(.keep-motion)::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}body{max-width:var(--container);margin-inline:auto;padding:var(--space-3xl)var(--gutter)var(--space-2xl);color:var(--color-ink-2);font-weight:var(--weight-body);line-height:1.65;font-feature-settings:"ss01" 0}strong,b{color:var(--color-ink);font-weight:var(--weight-strong)}a{transition:color var(--dur-micro)var(--ease-out),text-decoration-color var(--dur-micro)var(--ease-out)}a:active{opacity:.7}.masthead{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.identity{display:flex;align-items:center;gap:var(--space-sm);min-width:0;color:var(--color-ink);text-decoration:none}.identity img{width:44px;height:44px;border-radius:50%;flex-shrink:0}.identity-text{display:flex;flex-direction:column;min-width:0;line-height:1.35}.identity-name{color:var(--color-ink);font-size:var(--text-title);font-weight:var(--weight-medium)}.identity-handle{color:var(--color-muted);font-size:var(--text-sm)}.identity:hover .identity-name{text-decoration:underline;text-decoration-color:var(--color-rule-strong);text-underline-offset:4px}.theme-toggle{display:grid;place-items:center;flex-shrink:0;width:36px;height:36px;padding:0;border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper);color:var(--color-muted);cursor:pointer;transition:color var(--dur-micro)var(--ease-out),border-color var(--dur-micro)var(--ease-out),background-color var(--dur-micro)var(--ease-out)}.theme-toggle:hover{color:var(--color-ink);border-color:var(--color-rule-strong)}.theme-toggle:active{background:var(--color-paper-3)}.theme-toggle svg{width:16px;height:16px}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .icon-sun{display:block}:root:not([data-theme=light]) .theme-toggle .icon-moon{display:none}}header nav{display:flex;flex-wrap:wrap;gap:var(--space-2xs)var(--space-lg);margin:var(--space-md)0 var(--space-xl)}header nav a{color:var(--color-muted);font-size:var(--text-sm);text-decoration:none;white-space:nowrap}header nav a:hover{color:var(--color-ink)}header nav a.active{color:var(--color-ink);font-weight:var(--weight-medium)}.intro,.prose{font-size:var(--text-md)}.intro{color:var(--color-ink-2);font-size:var(--text-body);line-height:1.7}.intro .lead{margin-bottom:var(--space-lg);color:var(--color-ink);font-size:var(--text-title);line-height:1.6}.intro strong{font-weight:var(--weight-medium)}.intro>p:has(+.social){margin-bottom:var(--space-sm);color:var(--color-muted);font-size:var(--text-sm)}.social{display:flex;flex-wrap:wrap;gap:var(--space-2xs)var(--space-lg);font-size:var(--text-sm)}.intro .social a{color:var(--color-muted);text-decoration-color:var(--color-rule-strong)}.intro .social a:hover{color:var(--color-ink);text-decoration-color:var(--color-ink)}.chips{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin:calc(-1 * var(--space-2xs))0 var(--space-lg)}.intro .chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:32px;padding:0 var(--space-sm)0 var(--space-xs);border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper-2);color:var(--color-ink-2);font-size:var(--text-xs);font-weight:var(--weight-medium);line-height:1;text-decoration:none;white-space:nowrap;transition:background-color var(--dur-micro)var(--ease-out),border-color var(--dur-micro)var(--ease-out),color var(--dur-micro)var(--ease-out)}.intro .chip:hover{border-color:var(--color-rule-strong);background:var(--color-paper-3);color:var(--color-ink)}.intro .chip:active{background:var(--color-paper-3)}.chip img{width:16px;height:16px;border-radius:4px}.chip .icon-arrow{width:12px;height:12px;color:var(--color-muted)}.intro p,.prose p,.prose ul,.prose ol,.prose pre,.prose blockquote,.prose table,.prose figure{margin:0 0 var(--space-md)}.intro>:last-child,.prose>:last-child{margin-bottom:0}.intro a,.prose a,.post-end a{color:var(--color-ink);text-decoration:underline;text-decoration-color:var(--color-rule-strong);text-underline-offset:3px}.intro a:hover,.prose a:hover,.post-end a:hover{text-decoration-color:var(--color-ink)}.prose h2,.prose h3,.prose h4{color:var(--color-ink);font-family:var(--font-display);font-weight:var(--weight-strong);letter-spacing:-.01em}.prose h2{margin:var(--space-xl)0 var(--space-sm);font-size:var(--text-xl);line-height:1.25}.prose h3{margin:var(--space-xl)0 var(--space-xs);font-size:var(--text-lg);line-height:1.3}.prose h4{margin:var(--space-lg)0 var(--space-xs);font-size:var(--text-md);line-height:1.4}.prose ul,.prose ol{padding-left:var(--space-lg)}.prose li{margin-bottom:var(--space-2xs)}.prose li::marker{color:var(--color-muted)}.prose img{width:100%;border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-card)}.prose p:has(>img)>em{display:block;margin-top:var(--space-xs);color:var(--color-muted);font-size:var(--text-sm);font-style:normal;text-align:center}.prose blockquote{margin-left:0;padding-left:var(--space-md);border-left:2px solid var(--color-rule-strong);color:var(--color-ink)}.prose hr,main>hr{height:0;margin:var(--space-xl)0;border:0;border-top:var(--rule-hair)solid var(--color-rule)}code,pre{font-family:var(--font-mono)}.prose code{padding:.1em .35em;border-radius:var(--radius-small);background:var(--color-paper-3);color:var(--color-ink);font-size:.86em}.prose pre{overflow-x:auto;padding:var(--space-md);border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-2)!important;font-size:var(--text-sm);line-height:1.6}.prose pre code{padding:0;border-radius:0;background:0 0;font-size:inherit}.prose table{display:block;width:100%;overflow-x:auto;border-collapse:collapse;font-size:var(--text-sm);font-variant-numeric:tabular-nums}.prose th,.prose td{padding:var(--space-xs)var(--space-sm);border-bottom:var(--rule-hair)solid var(--color-rule);text-align:left;vertical-align:top}.prose th{color:var(--color-ink);font-weight:var(--weight-medium);border-bottom-color:var(--color-rule-strong)}.chroma{color:var(--color-ink);background:0 0}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--syn-comment);font-style:italic}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .ow{color:var(--syn-keyword)}.chroma .kt,.chroma .nc,.chroma .nn,.chroma .nd{color:var(--syn-type)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss{color:var(--syn-string)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--syn-number)}.chroma .nf,.chroma .fm,.chroma .nb,.chroma .bp{color:var(--syn-func)}.chroma .gd{color:var(--syn-del)}.chroma .gi{color:var(--syn-ins)}.chroma .gh,.chroma .gu{color:var(--color-ink);font-weight:var(--weight-strong)}.chroma .err{color:var(--syn-del)}.chroma .ln,.chroma .lnt{margin-right:var(--space-sm);color:var(--color-muted)}.chroma .hl{display:block;background:var(--color-paper-3)}.block{margin-top:var(--space-2xl)}.block-head{margin:0 0 var(--space-md);color:var(--color-ink);font-size:var(--text-md);font-weight:var(--weight-medium);line-height:1.4}.feature{padding:var(--space-lg);border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-2)}.feature-head{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.feature-head img{width:36px;height:36px;border-radius:9px}.feature-title{color:var(--color-ink);font-size:var(--text-lg);font-weight:var(--weight-strong);letter-spacing:-.01em}.feature p{margin:0 0 var(--space-sm);font-size:var(--text-sm);line-height:1.65}.button{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:40px;margin-top:var(--space-xs);padding:0 var(--space-md);border:var(--rule-hair)solid var(--color-ink);border-radius:var(--radius-pill);background:var(--color-ink);color:var(--color-paper);font-size:var(--text-sm);font-weight:var(--weight-medium);text-decoration:none;white-space:nowrap;transition:background-color var(--dur-micro)var(--ease-out),border-color var(--dur-micro)var(--ease-out),transform var(--dur-micro)var(--ease-out)}.button:hover{background:var(--color-ink-2);border-color:var(--color-ink-2)}.button:active{transform:scale(.97)}.icon-arrow{width:14px;height:14px;flex-shrink:0;transition:transform var(--dur-micro)var(--ease-out),color var(--dur-micro)var(--ease-out)}a:hover>.icon-arrow,a:hover .card-head .icon-arrow{transform:translate(1px,-1px)}.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.card{display:flex;flex-direction:column;gap:var(--space-2xs);padding:var(--space-md);border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-2);color:inherit;text-decoration:none;transition:background-color var(--dur-micro)var(--ease-out),border-color var(--dur-micro)var(--ease-out)}.card:hover{background:var(--color-paper-3);border-color:var(--color-rule-strong)}.card:active{background:var(--color-paper-3)}.card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xs)}.card-title{color:var(--color-ink);font-size:var(--text-md);font-weight:var(--weight-medium)}.card-head .icon-arrow{color:var(--color-muted)}.card:hover .card-head .icon-arrow{color:var(--color-ink)}.card-desc{color:var(--color-muted);font-size:var(--text-sm);line-height:1.5}.rows{display:flex;flex-direction:column}.row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);padding:var(--space-xs)0;color:inherit;text-decoration:none}.row-title{min-width:0;color:var(--color-ink);font-weight:var(--weight-medium)}.row:hover .row-title{text-decoration:underline;text-decoration-color:var(--color-rule-strong);text-underline-offset:3px}.row time,.row-meta{flex-shrink:0;color:var(--color-muted);font-size:var(--text-sm);font-variant-numeric:tabular-nums;white-space:nowrap}.row-sub{display:block;margin-top:var(--space-3xs);color:var(--color-muted);font-size:var(--text-sm);font-weight:var(--weight-body)}.more{display:inline-flex;margin-top:var(--space-sm);color:var(--color-muted);font-size:var(--text-sm);text-decoration:underline;text-decoration-color:var(--color-rule-strong);text-underline-offset:3px}.more:hover{color:var(--color-ink);text-decoration-color:var(--color-ink)}.entries{display:flex;flex-direction:column;gap:var(--space-lg)}.entry{display:block;color:inherit;text-decoration:none}.entry-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md)}.entry-title{color:var(--color-ink);font-size:var(--text-md);font-weight:var(--weight-medium)}.entry-links{display:flex;flex-shrink:0;gap:var(--space-md);color:var(--color-muted);font-size:var(--text-sm);white-space:nowrap}.entry-links a{display:inline-flex;align-items:center;gap:var(--space-3xs);color:inherit;text-decoration:none}.entry-links a:hover{color:var(--color-ink)}.entry-desc{display:block;margin-top:var(--space-2xs);color:var(--color-muted);font-size:var(--text-sm);line-height:1.6}a.entry:hover .entry-title{text-decoration:underline;text-decoration-color:var(--color-rule-strong);text-underline-offset:3px}.post-header{margin-bottom:var(--space-xl)}.post-header h1{color:var(--color-ink);font-size:var(--text-2xl);font-weight:var(--weight-strong);line-height:1.2;letter-spacing:-.02em}.post-header time{display:block;margin-top:var(--space-sm);color:var(--color-muted);font-size:var(--text-sm)}.post-end{margin-top:var(--space-2xl);padding-top:var(--space-lg);border-top:var(--rule-hair)solid var(--color-rule);font-size:var(--text-sm)}.post-end p{margin:0 0 var(--space-md)}.archive-year{margin:var(--space-xl)0 var(--space-xs);color:var(--color-ink);font-size:var(--text-md);font-weight:var(--weight-medium)}.archive-year:first-of-type{margin-top:var(--space-lg)}.tags{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.tag{display:inline-flex;align-items:center;min-height:28px;padding:0 var(--space-sm);border:var(--rule-hair)solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper-2);color:var(--color-ink-2);font-size:var(--text-xs);text-decoration:none;transition:background-color var(--dur-micro)var(--ease-out),border-color var(--dur-micro)var(--ease-out),color var(--dur-micro)var(--ease-out)}.tag:hover{border-color:var(--color-rule-strong);background:var(--color-paper-3);color:var(--color-ink)}.tag:active{background:var(--color-paper-3)}.comments{margin-top:var(--space-2xl)}.comments h2{margin-bottom:var(--space-md);color:var(--color-ink);font-size:var(--text-md);font-weight:var(--weight-medium)}body>footer{margin-top:var(--space-3xl);padding-top:var(--space-xl);border-top:var(--rule-hair)solid var(--color-rule);color:var(--color-muted);font-size:var(--text-sm)}.footer-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-xs)var(--space-md)}.sky{margin:0 0 var(--space-xl)}.duck-button{display:block;width:100%;height:112px;padding:0;margin:0;border:0;border-radius:var(--radius-small);background:0 0;color:inherit;cursor:pointer;touch-action:pan-y}.duck-button{position:relative}.duck-button canvas{display:block;width:100%;height:100%;image-rendering:pixelated}.duck-button .sprite{position:absolute;top:0;left:0;height:56px;width:auto;image-rendering:pixelated;pointer-events:none;visibility:hidden}.sky figcaption{margin-top:var(--space-xs);color:var(--color-muted);font-size:var(--text-sm)}.rss-link{display:inline-flex;align-items:center;gap:var(--space-2xs);color:inherit;text-decoration:none}.rss-link:hover{color:var(--color-ink)}.rss-link svg{width:14px;height:14px}@keyframes settle{from{opacity:0;transform:translateY(6px);filter:blur(4px)}}body>header,main>*,body>footer{animation:settle var(--dur-long)var(--ease-out)backwards}main>:nth-child(1){animation-delay:60ms}main>:nth-child(2){animation-delay:120ms}main>:nth-child(3){animation-delay:180ms}main>:nth-child(4){animation-delay:240ms}main>:nth-child(n+5),body>footer{animation-delay:300ms}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur-short);animation-timing-function:var(--ease-in-out)}@media(prefers-reduced-motion:reduce){body>header,main>*,body>footer{animation:none}::view-transition-old(root),::view-transition-new(root){animation:none}}@media(max-width:40rem){:root{--gutter:16px}body{padding-top:var(--space-xl)}header nav{column-gap:var(--space-md);margin-bottom:var(--space-xl)}.cards{grid-template-columns:minmax(0,1fr)}.entry-head{flex-wrap:wrap}}