@font-face{font-family:Nunito;font-style:normal;font-weight:400;font-display:block;src:url(/fonts/nunito-09a4fc4d.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-weight:400;font-display:block;src:url(/fonts/nunito-fd8c59c3.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Nunito;font-style:normal;font-weight:400;font-display:block;src:url(/fonts/nunito-b8db197d.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-weight:600;font-display:block;src:url(/fonts/nunito-09a4fc4d.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-weight:600;font-display:block;src:url(/fonts/nunito-fd8c59c3.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Nunito;font-style:normal;font-weight:600;font-display:block;src:url(/fonts/nunito-b8db197d.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-weight:700;font-display:block;src:url(/fonts/nunito-09a4fc4d.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-weight:700;font-display:block;src:url(/fonts/nunito-fd8c59c3.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Nunito;font-style:normal;font-weight:700;font-display:block;src:url(/fonts/nunito-b8db197d.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--brand:#2f55d4;--brand-hover:#2443ad;--brand-text:#2f55d4;--brand-text-hover:#2443ad;--brand-soft:#2f55d414;--on-brand:#fff;--color-bg:#f8f9fa;--color-surface:#fff;--color-surface-muted:#f1f3f5;--color-text:#212529;--color-text-muted:#5a6577;--color-border:#e9ecef;--color-primary:var(--brand-text);--color-primary-hover:var(--brand-text-hover);--color-primary-soft:var(--brand-soft);--color-accent:var(--brand-text);--color-warning-bg:#fff6e0;--color-warning-border:#e0a82e;--color-warning-text:#6b4a00;--color-code-bg:#f6f8fa;--color-inline-code-bg:#eef1f4;--shadow-card:0 0 3px #3c485826;--shadow-card-hover:0 5px 13px #3c485833;--font-sans:"Nunito", "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Noto Sans JP", "Yu Gothic UI", "Yu Gothic", Meiryo, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-6:1.5rem;--space-8:2rem;--space-12:3rem;--content-width:1140px;--prose-width:760px;--header-height:72px}@media (width<=640px){:root{--header-height:100px}}:root[data-locale=ja]{--brand:#2f55d4;--brand-hover:#2443ad;--brand-text:#2f55d4;--brand-text-hover:#2443ad;--brand-soft:#2f55d414}:root[data-locale=vi]{--brand:#c2410c;--brand-hover:#9a3412;--brand-text:#c2410c;--brand-text-hover:#9a3412;--brand-soft:#c2410c14;--color-bg:#fdf7f3;--color-surface-muted:#faf0e8;--color-border:#f0e4da}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--color-bg:#12151c;--color-surface:#1a1e27;--color-surface-muted:#222836;--color-text:#e8ecf3;--color-text-muted:#9aa5b8;--color-border:#2a3040;--brand-text:#7ea0f0;--brand-text-hover:#a9c0f5;--brand-soft:#7ea0f024;--color-warning-bg:#2b2210;--color-warning-border:#8a6a1f;--color-warning-text:#f2d48a;--color-code-bg:#0d1117;--color-inline-code-bg:#262c36;--shadow-card:none;--shadow-card-hover:0 5px 13px #0000008c}:root:not([data-theme=light])[data-locale=vi]{--color-bg:#171310;--color-surface:#1f1915;--color-surface-muted:#2a221c;--color-border:#352b23;--brand-text:#f0a071;--brand-text-hover:#f5bf9c;--brand-soft:#f0a07124}}:root[data-theme=dark]{color-scheme:dark;--color-bg:#12151c;--color-surface:#1a1e27;--color-surface-muted:#222836;--color-text:#e8ecf3;--color-text-muted:#9aa5b8;--color-border:#2a3040;--brand-text:#7ea0f0;--brand-text-hover:#a9c0f5;--brand-soft:#7ea0f024;--color-warning-bg:#2b2210;--color-warning-border:#8a6a1f;--color-warning-text:#f2d48a;--color-code-bg:#0d1117;--color-inline-code-bg:#262c36;--shadow-card:none;--shadow-card-hover:0 5px 13px #0000008c}:root[data-theme=dark][data-locale=vi]{--color-bg:#171310;--color-surface:#1f1915;--color-surface-muted:#2a221c;--color-border:#352b23;--brand-text:#f0a071;--brand-text-hover:#f5bf9c;--brand-soft:#f0a07124}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:calc(var(--header-height) + var(--space-4))}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;overflow-wrap:break-word;margin:0;font-size:1rem;line-height:1.7}:lang(ja) body,body:lang(ja){letter-spacing:.01em;line-break:strict;line-height:1.8}a{color:var(--color-primary);text-underline-offset:.2em}a:hover{color:var(--color-primary-hover)}:focus-visible{outline:3px solid var(--color-primary);outline-offset:2px;border-radius:2px}img,svg{max-width:100%;height:auto}h1,h2,h3,h4{line-height:1.45}:lang(ja) :is(h1,h2,h3,h4){font-feature-settings:"palt";letter-spacing:.02em}code,kbd,pre{font-family:var(--font-mono)}.phrase,.prose :is(h2,h3,h4){text-wrap:balance}:lang(ja) .phrase,:lang(ja) .prose :is(h2,h3,h4){word-break:keep-all;overflow-wrap:anywhere}.prose p,.prose li{text-wrap:pretty}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.skip-link{left:var(--space-4);z-index:100;padding:var(--space-2) var(--space-4);background:var(--brand);color:var(--on-brand);border-radius:var(--radius-sm);position:absolute;top:-100px}.skip-link:focus{top:var(--space-2);color:var(--on-brand)}.container{width:100%;max-width:var(--content-width);padding-inline:var(--space-4);margin-inline:auto}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card)}.section-title{justify-content:space-between;align-items:baseline;gap:var(--space-4);margin:var(--space-12) 0 var(--space-4);font-size:1.25rem;display:flex}.section-title a{font-size:.875rem;font-weight:400}.page-header{padding:var(--space-8) 0 var(--space-4)}.page-header h1{margin:0 0 var(--space-2);font-size:clamp(1.5rem,1.2rem + 1.2vw,2rem)}.page-header p{color:var(--color-text-muted);margin:0}.post-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));margin:0;padding:0;list-style:none;display:grid}.draft-badge{border:1px solid var(--color-warning-border);border-radius:var(--radius-sm);background:var(--color-warning-bg);color:var(--color-warning-text);letter-spacing:.02em;white-space:nowrap;padding:0 .55em;font-size:.75rem;font-weight:700;line-height:1.7;display:inline-block}.button{border:1px solid var(--brand);border-radius:var(--radius-sm);background:var(--brand);color:var(--on-brand);padding:.5em 1.25em;font-weight:600;line-height:1.5;text-decoration:none;display:inline-block}.button:hover{border-color:var(--brand-hover);background:var(--brand-hover);color:var(--on-brand)}.button.secondary{color:var(--color-primary);border-color:var(--color-border);background:0 0}.button.secondary:hover{border-color:var(--color-primary);color:var(--color-primary)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.prose{font-size:1.0625rem;line-height:1.8}.prose:lang(ja){line-height:1.95}.prose>:first-child{margin-top:0}.prose h2{border-bottom:1px solid var(--color-border);margin:2.6em 0 .8em;padding-bottom:.35em;font-size:1.5rem}.prose h3{margin:2.2em 0 .6em;font-size:1.25rem}.prose h4{margin:1.8em 0 .5em;font-size:1.0625rem}.prose p,.prose ul,.prose ol,.prose blockquote,.prose table,.prose pre{margin:1.2em 0}.prose li+li{margin-top:.3em}.prose ul,.prose ol{padding-left:1.6em}.prose blockquote{border-left:4px solid var(--color-border);color:var(--color-text-muted);margin-inline:0;padding:.2em 1em}.prose hr{border:0;border-top:1px solid var(--color-border);margin:3em 0}.prose img{border-radius:var(--radius-md);border:1px solid var(--color-border);margin:1.5em auto;display:block}.prose table{border-collapse:collapse;width:max-content;max-width:100%;font-size:.9375rem;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--color-border);text-align:left;padding:.5em .9em}.prose th{background:var(--color-surface-muted)}.prose :not(pre)>code{background:var(--color-inline-code-bg);border-radius:4px;padding:.15em .4em;font-size:.875em}.prose kbd{border:1px solid var(--color-border);border-bottom-width:2px;border-radius:4px;padding:.1em .45em;font-size:.85em}.prose :is(h2,h3,h4){position:relative}.heading-anchor{color:var(--color-text-muted);opacity:0;margin-left:.4em;text-decoration:none;transition:opacity .15s}.heading-anchor:before{content:"#"}.prose :is(h2,h3,h4):hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}@media (hover:none){.heading-anchor{opacity:.5}}.prose pre{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-code-bg);tab-size:2;padding:1em 1.1em;font-size:.875rem;line-height:1.7;position:relative;overflow-x:auto}.astro-code,.astro-code span{color:var(--shiki-light);background-color:var(--shiki-light-bg)}.astro-code{background-color:var(--color-code-bg)!important}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .astro-code span{color:var(--shiki-dark);background-color:#0000}}:root[data-theme=dark] .astro-code span{color:var(--shiki-dark);background-color:#0000}.astro-code span{background-color:#0000}.code-block{position:relative}.code-block .copy-button{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text-muted);font:inherit;cursor:pointer;opacity:0;padding:.25em .6em;font-size:.75rem;line-height:1.6;transition:opacity .15s;position:absolute;top:.5em;right:.5em}.code-block:hover .copy-button,.code-block:focus-within .copy-button{opacity:1}@media (hover:none){.code-block .copy-button{opacity:1}}.code-block .copy-button[data-copied]{color:var(--color-accent)}.prose img[src$=\.svg]{border:0}@media (width<=640px){.prose p:has(>img[src$=\.svg]){-webkit-overflow-scrolling:touch;overflow-x:auto}.prose p>img[src$=\.svg]{width:640px;max-width:none}}.mermaid-diagram{border:1px solid var(--color-border);border-radius:var(--radius-md);background:#fff;justify-content:center;margin:1.5em 0;padding:1em;display:flex;overflow-x:auto}.site-footer[data-astro-cid-jo6i4kqk]{border-top:1px solid var(--color-border);background:var(--color-surface);font-size:.875rem}.inner[data-astro-cid-jo6i4kqk]{justify-content:space-between;align-items:center;gap:var(--space-4);padding-block:var(--space-6);flex-wrap:wrap;display:flex}ul[data-astro-cid-jo6i4kqk]{gap:var(--space-2) var(--space-6);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}a[data-astro-cid-jo6i4kqk]{color:var(--color-text-muted);text-decoration:none}a[data-astro-cid-jo6i4kqk]:hover{color:var(--color-primary);text-decoration:underline}.copyright[data-astro-cid-jo6i4kqk]{color:var(--color-text-muted);margin:0}.theme-toggle[data-astro-cid-l6lhmie6]{border-radius:var(--radius-sm);width:40px;height:40px;color:var(--color-text-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}.theme-toggle[data-astro-cid-l6lhmie6]:hover{background:var(--color-surface-muted);color:var(--color-text)}.moon[data-astro-cid-l6lhmie6]{display:none}@media (width<=640px){.theme-toggle[data-astro-cid-l6lhmie6]{width:36px}}:root[data-theme=dark] .sun[data-astro-cid-l6lhmie6]{display:none}:root[data-theme=dark] .moon[data-astro-cid-l6lhmie6]{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .sun[data-astro-cid-l6lhmie6]{display:none}:root:not([data-theme=light]) .moon[data-astro-cid-l6lhmie6]{display:block}}.site-header[data-astro-cid-nen7h5rs]{z-index:50;background:color-mix(in srgb, var(--color-surface) 90%, transparent);backdrop-filter:saturate(180%)blur(8px);border-bottom:1px solid var(--color-border);position:sticky;top:0}.inner[data-astro-cid-nen7h5rs]{align-items:center;gap:var(--space-4);height:var(--header-height);display:flex}.brand[data-astro-cid-nen7h5rs]{align-items:center;gap:var(--space-3);color:var(--color-text);white-space:nowrap;flex-shrink:0;text-decoration:none;display:flex}.logo[data-astro-cid-nen7h5rs]{width:auto;height:52px;display:block}.logo-on-dark[data-astro-cid-nen7h5rs],:root[data-theme=dark] .logo-on-light[data-astro-cid-nen7h5rs]{display:none}:root[data-theme=dark] .logo-on-dark[data-astro-cid-nen7h5rs]{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .logo-on-light[data-astro-cid-nen7h5rs]{display:none}:root:not([data-theme=light]) .logo-on-dark[data-astro-cid-nen7h5rs]{display:block}}.brand-divider[data-astro-cid-nen7h5rs]{background:var(--color-border);width:1px;height:22px}.brand-text[data-astro-cid-nen7h5rs]{color:var(--color-text-muted);letter-spacing:.04em;font-size:1rem;font-weight:700}nav[data-astro-cid-nen7h5rs]{min-width:0;margin-left:auto;overflow-x:auto}nav[data-astro-cid-nen7h5rs] ul[data-astro-cid-nen7h5rs]{gap:var(--space-1);margin:0;padding:0;list-style:none;display:flex}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);color:var(--color-text);white-space:nowrap;font-size:.9375rem;font-weight:600;text-decoration:none;display:block}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]:hover{background:var(--color-surface-muted);color:var(--color-primary)}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs][aria-current=page]{color:var(--color-primary)}.actions[data-astro-cid-nen7h5rs]{align-items:center;gap:var(--space-1);display:flex}.icon-button[data-astro-cid-nen7h5rs]{border-radius:var(--radius-sm);width:40px;height:40px;color:var(--color-text-muted);place-items:center;display:inline-grid}.icon-button[data-astro-cid-nen7h5rs]:hover{background:var(--color-surface-muted);color:var(--color-text)}.lang[data-astro-cid-nen7h5rs]{margin-inline:var(--space-1);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);white-space:nowrap;padding:.15em .75em;font-size:.8125rem;font-weight:700;line-height:1.8;text-decoration:none}.lang[data-astro-cid-nen7h5rs]:hover{border-color:var(--color-primary);color:var(--color-primary)}.lang-short[data-astro-cid-nen7h5rs]{display:none}@media (width<=760px){.brand-text[data-astro-cid-nen7h5rs],.brand-divider[data-astro-cid-nen7h5rs]{display:none}}@media (width<=640px){.inner[data-astro-cid-nen7h5rs]{gap:0 var(--space-2);height:var(--header-height);flex-wrap:wrap;align-content:center}.logo[data-astro-cid-nen7h5rs]{height:40px}.actions[data-astro-cid-nen7h5rs]{margin-left:auto}nav[data-astro-cid-nen7h5rs]{width:100%;margin-left:calc(-1 * var(--space-2));order:3}nav[data-astro-cid-nen7h5rs] a[data-astro-cid-nen7h5rs]{padding:var(--space-1) var(--space-2);font-size:.875rem}.icon-button[data-astro-cid-nen7h5rs]{width:36px}.lang[data-astro-cid-nen7h5rs]{margin-inline:0;padding-inline:.5em}.lang-long[data-astro-cid-nen7h5rs]{display:none}.lang-short[data-astro-cid-nen7h5rs]{display:inline}}body{flex-direction:column;min-height:100dvh;display:flex}main[data-astro-cid-z4jru4n3]{padding-bottom:var(--space-12);flex:1}main[data-astro-cid-z4jru4n3]:focus{outline:none}
