:root{color-scheme:dark;--bg: #000;--ink: #fff;--ink-2: rgba(255, 255, 255, .88);--ink-3: rgba(255, 255, 255, .5);--ink-4: rgba(255, 255, 255, .4);--hair: rgba(255, 255, 255, .12);--tint: rgba(255, 255, 255, .08);--sys: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", sans-serif;--display: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", sans-serif;--mono: ui-monospace, "SF Mono", Menlo, monospace;--code-plain: #d6d6dd;--code-punct: rgba(214, 214, 221, .6);--code-add: #83d6c5;--code-del: #f14c4c}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink)}body{font:19px/1.7 var(--sys);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--ink);text-decoration:underline;text-decoration-color:#ffffff59;text-underline-offset:4px;text-decoration-thickness:1px}a:hover{text-decoration-color:var(--ink)}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--ink);outline-offset:4px}.page{max-width:720px;margin:0 auto;padding-inline:24px;padding-block:72px 160px;display:flex;flex-direction:column;gap:72px}.quiet{align-self:flex-start;font-size:15px;color:var(--ink-3);text-decoration:none}.date{font-size:15px;color:var(--ink-4);white-space:nowrap;font-variant-numeric:tabular-nums}.home{padding-top:160px;gap:88px}.home h1{margin:0;font:600 48px/1.05 var(--display);letter-spacing:-.035em}.post-list{display:flex;flex-direction:column;gap:22px;margin:0;padding:0;list-style:none;font-size:17px}.post-list a{display:flex;justify-content:space-between;align-items:baseline;gap:24px;text-decoration:none}.post-list a:hover span:first-child,.project-list a:hover span:first-child{text-decoration:underline;text-underline-offset:4px}.home-section{display:flex;flex-direction:column;gap:28px}.home-section h2{margin:0;font-size:15px;font-weight:400;color:var(--ink-4)}.project-list{display:flex;flex-direction:column;gap:22px;margin:0;padding:0;list-style:none;font-size:17px}.project-list a{display:flex;flex-direction:column;gap:2px;text-decoration:none}.project-line{font-size:15px;color:var(--ink-4)}.page-article{display:flex;flex-direction:column;gap:56px}.post-head{display:flex;flex-direction:column;gap:16px}.post-head h1{margin:0;font:600 44px/1.1 var(--display);letter-spacing:-.03em;text-wrap:balance}.prose{display:flex;flex-direction:column;gap:28px;color:var(--ink-2)}.prose>*{margin:0}.prose h2{margin-top:24px;font:600 24px/1.3 var(--display);letter-spacing:-.02em;color:var(--ink)}.prose h3{margin-top:12px;font:600 20px/1.35 var(--display);color:var(--ink)}.prose strong{color:var(--ink);font-weight:600}.prose ul,.prose ol{padding-left:24px;display:flex;flex-direction:column;gap:10px}.prose blockquote{margin:16px 0;padding:0 0 0 24px;box-shadow:inset 1px 0 #ffffff4d;font-size:24px;line-height:1.45;letter-spacing:-.012em;color:var(--ink)}.prose blockquote p{margin:0}.prose hr{width:100%;height:1px;border:0;background:var(--hair)}.prose :not(pre)>code{font:.84em var(--mono);background:var(--tint);padding:2px 6px;border-radius:6px;color:var(--ink)}.code{border-radius:14px;box-shadow:inset 0 0 0 1px var(--hair);overflow:hidden}.code-head{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:6px 8px 6px 16px;box-shadow:inset 0 -1px #ffffff14}.code-title{margin-right:auto;font:13px var(--mono);color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy{flex:none;font:13px var(--sys);color:#fff9;background:none;border:0;border-radius:8px;padding:0 10px;min-height:32px;cursor:pointer}.copy:hover{color:var(--ink);background:var(--tint)}.code pre.astro-code{margin:0;padding:16px 0;overflow-x:auto;background:transparent!important;font:14px/1.7 var(--mono);tab-size:2}.code pre code{display:block;min-width:max-content}.code .line{display:inline-block;width:100%;padding:0 20px}.code pre.dimmed .line:not(.focus){opacity:.45}.code .line.focus{background:#ffffff0f;box-shadow:inset 2px 0 #fff9}.code pre.numbered code{counter-reset:line}.code pre.numbered .line:before{counter-increment:line;content:counter(line);display:inline-block;width:2.2em;margin-right:16px;text-align:right;color:#ffffff40;user-select:none}.code .line.add{background:#83d6c51a}.code .line.del{background:#f14c4c1a}.console-prompt{color:var(--code-punct)}.console-command{color:#fff}.console-output{color:var(--code-plain)}.console-ok{color:var(--code-add)}.console-fail{color:var(--code-del);font-weight:600}.diagram-figure{margin:8px 0;display:flex;flex-direction:column;border:1px solid var(--hair);border-radius:14px;overflow:hidden}.prompt{display:flex;gap:10px;align-items:baseline;padding:14px 20px;border-bottom:1px solid var(--hair);font-size:15px;line-height:1.5;color:var(--ink)}.prompt-mark{font:600 15px var(--mono);color:var(--ink-4)}.prompt-rest{color:transparent}.prompt-caret{display:inline-block;width:0;height:1.1em;margin-right:-2px;border-left:2px solid var(--ink);vertical-align:-.2em;animation:caret 1s steps(1) infinite}@keyframes caret{50%{opacity:0}}.diagram{overflow-x:auto;padding:32px 20px 24px;white-space:pre-wrap;font:14px/1.6 var(--mono);color:var(--ink-3)}.diagram.rendered{white-space:normal}.diagram svg{display:block;margin:0 auto;width:100%;height:auto}.diagram-figure figcaption{padding:0 20px 20px;font-size:15px;color:var(--ink-4)}.diagram-figure details{border-top:1px solid var(--hair)}.diagram-figure summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 20px;min-height:44px;font-size:15px;color:var(--ink-3)}.diagram-figure summary::-webkit-details-marker{display:none}.diagram-figure summary span:last-child{font:13px var(--mono)}.diagram-figure details[open] summary{box-shadow:inset 0 -1px #ffffff14}.diagram-markdown{margin:0;padding:16px 20px;overflow-x:auto;font:14px/1.7 var(--mono);color:#ffffffb3}.diagram-figure details .copy{display:block;margin:0 8px 8px auto}.diagram svg .node rect,.diagram svg .node polygon,.diagram svg .node circle,.diagram svg .node path,.diagram svg rect.actor,.diagram svg .flowchart-link,.diagram svg .transition{stroke-width:1px}.diagram svg .node rect,.diagram svg rect.actor{rx:10px;ry:10px}.diagram svg .edgeLabel,.diagram svg .edgeLabel rect,.diagram svg .labelBkg{background-color:#000;fill:#000}.diagram svg .edgeLabel p,.diagram svg .edgeLabel span{color:#fff9!important;font-size:13px}.diagram svg .key rect,.diagram svg .key polygon{fill:#fff!important;stroke:#fff!important}.diagram svg .key .nodeLabel,.diagram svg .key span,.diagram svg .key p{color:#000!important;fill:#000!important}.diagram.animate .dg-shape{opacity:0;filter:blur(4px)}.diagram.animate .dg-line{opacity:0;stroke-dasharray:var(--len) var(--len);stroke-dashoffset:var(--len)}.diagram.run .dg-shape{opacity:1;filter:none;transition:opacity .55s cubic-bezier(.2,.7,.2,1),filter .55s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d, 0ms)}.diagram.run .dg-line{opacity:1;stroke-dashoffset:0;transition:opacity .2s,stroke-dashoffset .6s cubic-bezier(.4,0,.2,1);transition-delay:var(--d, 0ms)}.diagram-error{font:14px var(--mono);color:var(--ink-3)}@media(prefers-reduced-motion:reduce){.diagram.animate .dg-shape,.diagram.animate .dg-line{opacity:1;filter:none;stroke-dashoffset:0}}
