:root{--accent:#2563eb;--accent-dark:#1d4ed8;--black:15, 23, 42;--gray:100, 116, 139;--gray-light:241, 245, 249;--gray-dark:30, 41, 59;--gray-gradient:rgba(var(--gray-light), 50%), #fff;--box-shadow:0 4px 20px #00000014;--bg-body:#fff;--bg-header:#fff;--bg-card:#fff;--bg-secondary:#f1f5f9;--text-primary:#0f172a;--text-secondary:#334155;--text-muted:#64748b;--border-color:#e2e8f0;--header-shadow:0 2px 8px #0000000d;--card-shadow-hover:0 8px 24px #2563eb1f;--tag-bg:#eff6ff;--tag-text:#1d4ed8;--badge-bg:#e2e8f0;--badge-text:#334155;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "JetBrains Mono", "Fira Code", "Cascadia Code", "Liberation Mono", "Courier New", monospace;--code-bg:#0d1117;--code-fg:#e6edf3;--code-border:#30363d;--callout-bg:#f8fafc;--prose-max:68ch}:root.dark{--accent:#60a5fa;--accent-dark:#93c5fd;--black:248, 250, 252;--gray:148, 163, 184;--gray-light:30, 41, 59;--gray-dark:241, 245, 249;--gray-gradient:#1e293b80, #0f172a;--box-shadow:0 4px 20px #00000059;--bg-body:#0f172a;--bg-header:#1e293b;--bg-card:#1e293b;--bg-secondary:#334155;--text-primary:#f8fafc;--text-secondary:#cbd5e1;--text-muted:#94a3b8;--border-color:#334155;--header-shadow:0 2px 8px #0000004d;--card-shadow-hover:0 8px 24px #60a5fa2e;--tag-bg:#1e3a8a;--tag-text:#93c5fd;--badge-bg:#334155;--badge-text:#cbd5e1;--code-bg:#0d1117;--code-fg:#e6edf3;--code-border:#30363d;--callout-bg:#1e293b}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:5rem}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}::selection{background:var(--accent);color:#fff}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}body{font-family:var(--font-atkinson,"Atkinson"), -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;text-align:left;background:var(--bg-body);color:var(--text-secondary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0;padding:0;font-size:19px;line-height:1.7}main{width:720px;max-width:calc(100% - 2em);margin:auto;padding:3em 1em}h1,h2,h3,h4,h5,h6{color:var(--text-primary);overflow-wrap:break-word;word-wrap:break-word;margin:0 0 .5rem;line-height:1.25}h1{font-size:2.5em}h2{font-size:2em}h3{font-size:1.6em}h4{font-size:1.3em}h5{font-size:1.1em}strong,b{color:var(--text-primary);font-weight:700}a{color:var(--accent);transition:color .15s,opacity .15s}a:hover{color:var(--accent-dark)}p{overflow-wrap:break-word;margin-bottom:1em}.prose{letter-spacing:-.003em;font-size:1.075rem;line-height:1.8}.prose p{max-width:var(--prose-max);text-wrap:pretty;margin:0 0 1.6em}.prose li{margin-bottom:.5em;line-height:1.75}.prose ul,.prose ol{max-width:var(--prose-max);margin:0 0 1.6em;padding-left:1.5rem}.prose ul ul,.prose ol ol{margin-bottom:.4em}.prose li::marker{color:var(--accent)}.prose a{text-underline-offset:3px;text-decoration:underline 1.5px;text-decoration-color:color-mix(in srgb, var(--accent) 55%, transparent)}.prose a:hover{text-decoration-color:var(--accent)}.prose h2,.prose h3,.prose h4{text-wrap:balance;scroll-margin-top:5.5rem}.prose h2{border-top:1px solid var(--border-color);letter-spacing:-.02em;margin:2.6em 0 .9em;padding-top:.4em;font-size:1.65em}.prose h3{letter-spacing:-.01em;margin:2em 0 .7em;font-size:1.32em}.prose h4{margin:1.6em 0 .5em;font-size:1.1em}.prose h2:first-child,.prose h3:first-child{border-top:none;margin-top:0;padding-top:0}.heading-anchor{font-size:.75em;font-weight:400;font-family:var(--font-mono);color:var(--text-muted);opacity:0;margin-left:.5rem;text-decoration:none;transition:opacity .15s}.prose h2:hover .heading-anchor,.prose h3:hover .heading-anchor,.prose h2:focus-within .heading-anchor,.prose h3:focus-within .heading-anchor{opacity:1}@media (hover:none){.heading-anchor{opacity:1}}textarea,input{background-color:var(--bg-card);color:var(--text-primary);border:1px solid var(--border-color);box-sizing:border-box;border-radius:6px;width:100%;font-size:16px}.prose table{-webkit-overflow-scrolling:touch;border-collapse:collapse;border:1px solid var(--border-color);border-radius:8px;width:100%;margin:1.8em 0;font-size:.92em;line-height:1.6;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--border-color);text-align:left;white-space:nowrap;padding:.65em .9em}.prose th{background:var(--bg-secondary);color:var(--text-primary);text-transform:uppercase;letter-spacing:.04em;font-size:.85em;font-weight:700}.prose tr:last-child td{border-bottom:none}.prose tbody tr:hover td{background:color-mix(in srgb, var(--bg-secondary) 60%, transparent)}.prose td code,.prose th code{white-space:nowrap}img{border-radius:8px;max-width:100%;height:auto}.prose img{border:1px solid var(--border-color);box-shadow:var(--box-shadow);margin:2em auto .6em;display:block}.prose img+em,.prose figcaption{text-align:center;color:var(--text-muted);margin-bottom:2em;font-size:.85em;display:block}code{background-color:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border-color);font-family:var(--font-mono);overflow-wrap:break-word;word-break:break-word;border-radius:4px;padding:2px 6px;font-size:.84em}kbd{font-family:var(--font-mono);border:1px solid var(--border-color);background:var(--bg-card);color:var(--text-primary);white-space:nowrap;border-bottom-width:2px;border-radius:6px;padding:2px 7px;font-size:.82em}mark{background:color-mix(in srgb, var(--accent) 22%, transparent);color:inherit;border-radius:3px;padding:0 3px}pre,.astro-code{border:1px solid var(--code-border);-webkit-overflow-scrolling:touch;color:var(--code-fg);font-family:var(--font-mono);tab-size:4;border-radius:10px;padding:1.25em;font-size:.875rem;line-height:1.7;overflow-x:auto;background:var(--code-bg)!important}pre>code{all:unset;font-family:var(--font-mono);font-size:inherit;line-height:inherit;word-break:normal;overflow-wrap:normal;white-space:pre;color:inherit;border:none;padding:0;background:0 0!important}.astro-code,.astro-code span{color:var(--shiki-dark)!important;background-color:#0000!important}.code-block-wrapper{border-radius:10px;margin:1.8em 0;position:relative}.code-block-wrapper pre{margin:0;padding:2.9rem 1.25em 1.25em}.code-block-header{border-bottom:1px solid var(--code-border);pointer-events:none;background:#ffffff08;border-radius:10px 10px 0 0;align-items:center;gap:.5rem;padding:.6rem .9rem;display:flex;position:absolute;top:0;left:0;right:0}.code-dots{gap:6px;display:inline-flex}.code-dots i{border-radius:50%;width:10px;height:10px;display:block}.code-dots i:first-child{background:#ff5f56}.code-dots i:nth-child(2){background:#ffbd2e}.code-dots i:nth-child(3){background:#27c93f}.code-lang-label{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:#8b949e;margin-left:auto;font-size:.72rem;font-weight:600}.copy-code-button{font-size:.75rem;font-family:var(--font-mono);color:#c9d1d9;border:1px solid var(--code-border);cursor:pointer;opacity:.85;user-select:none;z-index:5;background-color:#ffffff0f;border-radius:6px;align-items:center;gap:.35rem;padding:.25rem .55rem;font-weight:500;line-height:1;transition:opacity .2s,background-color .2s,color .2s,border-color .2s;display:inline-flex;position:absolute;top:.5rem;right:.6rem}.code-block-wrapper:hover .copy-code-button,.copy-code-button:focus-visible,.copy-code-button.copied{opacity:1}.copy-code-button:hover{color:#fff;border-color:var(--accent)}.copy-code-button:active{background-color:#ffffff1f}.copy-code-button.copied{color:#3fb950;background-color:#3fb95026;border-color:#3fb950}.copy-code-button svg{flex-shrink:0}blockquote{max-width:var(--prose-max);color:var(--text-secondary);background:var(--callout-bg);border:1px solid var(--border-color);border-left:4px solid var(--accent);border-radius:0 8px 8px 0;margin:1.8em 0;padding:1rem 1.25rem;font-size:1rem;line-height:1.75}blockquote p:last-child{margin-bottom:0}.prose details{border:1px solid var(--border-color);background:var(--bg-card);max-width:var(--prose-max);border-radius:8px;margin:1.6em 0;padding:.9em 1.1em}.prose summary{cursor:pointer;color:var(--text-primary);font-weight:600}.prose summary::marker{color:var(--accent)}hr{border:none;border-top:1px solid var(--border-color);max-width:var(--prose-max);margin:2.5em auto}.prose .footnotes{border-top:1px solid var(--border-color);color:var(--text-muted);margin-top:2.5em;padding-top:1em;font-size:.9em}.prose .footnotes a{overflow-wrap:anywhere}.prose input[type=checkbox]{width:1em;height:1em;accent-color:var(--accent);margin-right:.5em}@media print{header,footer,.read-progress,.toc-sidebar,.back-to-top,.post-nav{display:none!important}.prose{max-width:100%;font-size:12pt;line-height:1.6}pre{white-space:pre-wrap;border:1px solid #999}}@media (width<=720px){body{font-size:17px;line-height:1.65}main{max-width:calc(100% - 1.5em);padding:1.5em .5em}h1{font-size:1.9em}h2{font-size:1.55em}h3{font-size:1.3em}.prose{font-size:1rem;line-height:1.75}.prose h2{font-size:1.4em}blockquote{border-left-width:3px;padding:.9rem 1rem;font-size:.98em}pre,.astro-code{border-radius:8px;padding:1em .75em;font-size:.82rem}.code-block-wrapper{border-radius:8px;margin:1.4em 0}.code-block-wrapper pre{padding-top:2.9rem;padding-right:.75em}.copy-code-button{padding:.2rem .45rem;font-size:.7rem;top:.5rem;right:.5rem}.code-lang-label{text-overflow:ellipsis;white-space:nowrap;max-width:38vw;overflow:hidden}}.sr-only{clip:rect(1px 1px 1px 1px);clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:0;padding:0;overflow:hidden;position:absolute!important}a[data-astro-cid-evkijfd6]{text-decoration:none;display:inline-block}a[data-astro-cid-evkijfd6].active{font-weight:bolder;text-decoration:underline}.theme-toggle[data-astro-cid-l6lhmie6]{cursor:pointer;color:var(--text-muted);background:0 0;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;padding:.45rem;transition:color .2s,background-color .2s,border-color .2s;display:inline-flex}.theme-toggle[data-astro-cid-l6lhmie6] svg[data-astro-cid-l6lhmie6]{transition:stroke .2s,color .2s}.theme-toggle[data-astro-cid-l6lhmie6]:hover{color:var(--text-primary);background-color:var(--bg-secondary);border-color:var(--border-color)}.theme-toggle[data-astro-cid-l6lhmie6]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sun-icon[data-astro-cid-l6lhmie6]{display:none}.moon-icon[data-astro-cid-l6lhmie6],.dark .sun-icon[data-astro-cid-l6lhmie6]{display:block}.dark .moon-icon[data-astro-cid-l6lhmie6]{display:none}header[data-astro-cid-nen7h5rs]{background:var(--bg-header);box-shadow:var(--header-shadow);border-bottom:1px solid var(--border-color);margin:0;padding:0 1em;transition:background-color .2s,border-color .2s}nav[data-astro-cid-nen7h5rs]{grid-template-columns:auto 1fr auto;align-items:center;gap:1rem;max-width:960px;margin:0 auto;display:grid}h2[data-astro-cid-nen7h5rs]{margin:0;font-size:1.1em;font-weight:700}.site-title-link[data-astro-cid-nen7h5rs]{color:var(--text-primary);white-space:nowrap;align-items:center;gap:.5rem;text-decoration:none;display:inline-flex}.site-logo[data-astro-cid-nen7h5rs]{object-fit:cover;background:var(--bg-secondary);border:1.5px solid var(--border-color);vertical-align:middle;border-radius:50%;flex-shrink:0;width:34px;height:34px;transition:border-color .2s,opacity .2s;box-shadow:0 1px 3px #00000014}.site-title-link[data-astro-cid-nen7h5rs]:hover .site-logo[data-astro-cid-nen7h5rs]{border-color:var(--accent)}.internal-links[data-astro-cid-nen7h5rs]{justify-content:center;gap:.25rem;display:flex}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{color:var(--text-muted);border-bottom:3px solid #0000;padding:1em .65rem;font-weight:500;text-decoration:none;transition:color .2s,border-color .2s}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover{color:var(--text-primary)}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs].active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.header-actions[data-astro-cid-nen7h5rs]{align-items:center;gap:.25rem;display:flex}.social-links[data-astro-cid-nen7h5rs]{align-items:center;gap:.15rem;display:flex}.social-links[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{color:var(--text-muted);border-bottom:none;border-radius:6px;justify-content:center;align-items:center;padding:.45rem;transition:color .2s,background-color .2s;display:inline-flex}.social-links[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover{color:var(--text-primary);background-color:var(--bg-secondary)}@media (width<=720px){nav[data-astro-cid-nen7h5rs]{grid-template-columns:1fr auto;grid-template-areas:"brand actions""links links";gap:.5rem;padding:.5rem 0 .35rem}h2[data-astro-cid-nen7h5rs]{grid-area:brand;align-self:center}.header-actions[data-astro-cid-nen7h5rs]{grid-area:actions;align-self:center;gap:.15rem}.internal-links[data-astro-cid-nen7h5rs]{border-top:1px solid var(--border-color);grid-area:links;justify-content:space-around;width:100%;padding-top:.35rem;display:flex}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{padding:.4rem .5rem;font-size:.95rem}.social-links[data-astro-cid-nen7h5rs]{gap:.1rem;display:flex}.social-links[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{padding:.35rem}}@media (width<=360px){.site-title-text[data-astro-cid-nen7h5rs]{font-size:.92rem}.site-logo[data-astro-cid-nen7h5rs]{width:28px;height:28px}.social-links[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{padding:.25rem}}footer[data-astro-cid-jo6i4kqk]{background:var(--bg-body) linear-gradient(var(--gray-gradient)) no-repeat;color:var(--text-muted);text-align:center;border-top:1px solid var(--border-color);padding:3em 1em 4em;font-size:.9em;transition:background-color .2s,border-color .2s}.social-links[data-astro-cid-jo6i4kqk]{justify-content:center;align-items:center;gap:.75em;margin-top:.75em;display:flex}.social-links[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]{color:var(--text-muted);text-decoration:none;transition:color .2s}.social-links[data-astro-cid-jo6i4kqk] a[data-astro-cid-jo6i4kqk]:hover{color:var(--text-primary)}.sep[data-astro-cid-jo6i4kqk]{color:var(--border-color)}
