@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-mono-vietnamese-400-normal.BNOj0Qhp.woff2)format("woff2"),url(/_astro/space-mono-vietnamese-400-normal.B0PMp_xB.woff)format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-mono-latin-ext-400-normal.DTLbW2xa.woff2)format("woff2"),url(/_astro/space-mono-latin-ext-400-normal.D4cJI_B-.woff)format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-mono-latin-400-normal.Rg4St2Dn.woff2)format("woff2"),url(/_astro/space-mono-latin-400-normal._3DlpgIW.woff)format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/space-mono-vietnamese-700-normal.DWQgDHuA.woff2)format("woff2"),url(/_astro/space-mono-vietnamese-700-normal.D-KrLuLr.woff)format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/space-mono-latin-ext-700-normal.B2s3bDs2.woff2)format("woff2"),url(/_astro/space-mono-latin-ext-700-normal.B_E7P90g.woff)format("woff");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:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/space-mono-latin-700-normal.mWgeinG7.woff2)format("woff2"),url(/_astro/space-mono-latin-700-normal.D7A851RN.woff)format("woff");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:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/chakra-petch-thai-700-normal.B7WL5pBr.woff2)format("woff2"),url(/_astro/chakra-petch-thai-700-normal.vZLZ_5L8.woff)format("woff");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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)format("woff2"),url(/_astro/chakra-petch-vietnamese-700-normal.gQuUA8Wu.woff)format("woff");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:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/chakra-petch-latin-ext-700-normal.DAkvJhej.woff2)format("woff2"),url(/_astro/chakra-petch-latin-ext-700-normal.BeviJPUl.woff)format("woff");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:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/chakra-petch-latin-700-normal.CnDBPjkL.woff2)format("woff2"),url(/_astro/chakra-petch-latin-700-normal.D1s_c2du.woff)format("woff");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{--ink-900:#0b1118;--ink-700:#223141;--ink-500:#5b6b7a;--ink-400:#7d8995;--ink-200:#d7dde3;--paper:#fff;--paper-50:#f7f8f9;--petrol-700:#0a5558;--petrol-600:#0c6b6f;--petrol-300:#5fbfc2;--petrol-100:#e3f1f1;--amber-700:#8a4e06;--amber-600:#a75f08;--amber-300:#e8a33d;--amber-100:#fbefdd;--alert-600:#b3261e;--text:var(--ink-900);--text-body:var(--ink-700);--text-muted:var(--ink-500);--surface:var(--paper);--surface-alt:var(--paper-50);--border:var(--ink-400);--rule:var(--ink-200);--action:var(--petrol-600);--action-hover:var(--petrol-700);--on-action:var(--paper);--display:"Chakra Petch", -apple-system, "Segoe UI", Roboto, sans-serif;--sans:"Space Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;--text-xs:.875rem;--text-sm:1rem;--text-md:clamp(1.125rem, 1.6vw, 1.375rem);--text-lg:clamp(1.5rem, 2.6vw, 2.125rem);--text-xl:clamp(2rem, 4.6vw, 3.5rem);--track-xl:-.03em;--track-lg:-.02em;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;--space-12:48px;--space-16:64px;--space-24:96px;--radius-sm:6px;--radius-md:8px;--radius-lg:14px;--radius-full:999px;--measure:58ch;--measure-lede:40ch;--page-max:1280px}@media (prefers-color-scheme:dark){:root{--text:#e8edf2;--text-body:#e8edf2;--text-muted:#9aa9b8;--surface:var(--ink-900);--surface-alt:#141c25;--border:#67737f;--rule:#273341;--action:var(--petrol-300);--action-hover:#86d0d2;--on-action:var(--ink-900);--petrol-100:#10272a;--amber-100:#2a1f10;--amber-600:var(--amber-300);--amber-700:var(--amber-300);--alert-600:#f2857a}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:5.5rem}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{font-family:var(--sans);font-size:var(--text-sm);color:var(--text-body);background:var(--surface);-webkit-font-smoothing:antialiased;margin:0;line-height:1.7}h1,h2,h3{color:var(--text);text-wrap:balance;margin:0}h1{font-family:var(--display);font-size:var(--text-xl);letter-spacing:var(--track-xl);font-weight:700;line-height:1.05}h2{font-size:var(--text-lg);letter-spacing:var(--track-lg);font-weight:700;line-height:1.2}h3{letter-spacing:-.01em;font-size:1.0625rem;font-weight:700;line-height:1.35}p{margin:0 0 var(--space-4);max-width:var(--measure);text-wrap:pretty}ul{max-width:var(--measure)}a{color:var(--action);text-underline-offset:2px;text-decoration-thickness:1px}a:hover{color:var(--action-hover)}:focus-visible{outline:3px solid var(--action);outline-offset:2px;border-radius:2px}.skip{z-index:100;background:var(--surface);color:var(--text);padding:var(--space-3) var(--space-4);border:2px solid var(--action);position:absolute;top:0;left:-9999px}.skip:focus{left:var(--space-4);top:var(--space-4)}.page{max-width:var(--page-max);padding:0 var(--space-6);margin:0 auto}.lede{font-size:var(--text-md);color:var(--text-body);max-width:var(--measure-lede);line-height:1.5}.muted{color:var(--text-muted);font-size:var(--text-xs)}.section{padding:var(--space-16) 0;border-top:1px solid var(--rule)}.section:first-of-type{padding-top:var(--space-8);border-top:0}.section>h2{margin-bottom:var(--space-4);max-width:24ch}.btn{font:inherit;padding:var(--space-3) var(--space-6);border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;font-weight:600;text-decoration:none;display:inline-block}.btn--primary{background:var(--action);color:var(--on-action)}.btn--primary:hover{background:var(--action-hover);color:var(--on-action)}.btn--ghost{color:var(--action);border-color:var(--border);background:0 0}.btn--ghost:hover{background:var(--surface-alt)}.btn-row{gap:var(--space-3);margin-top:var(--space-8);flex-wrap:wrap;display:flex}.grid{gap:var(--space-4);display:grid}.grid--3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.card{border:1px solid var(--rule);border-radius:var(--radius-lg);padding:var(--space-6)}.card h3{margin-bottom:var(--space-2)}.card p:last-child{margin-bottom:0}.card--cool{background:var(--petrol-100);border-color:#0000}.card--warm{background:var(--amber-100);border-color:#0000}.tag{letter-spacing:.04em;text-transform:uppercase;border-radius:var(--radius-full);margin-bottom:var(--space-3);padding:3px 10px;font-size:.75rem;font-weight:600;display:inline-block}.tag--cloud{background:var(--petrol-100);color:var(--petrol-700)}.tag--local{background:var(--amber-100);color:var(--amber-700)}.tag--both{background:var(--ink-900);color:var(--paper)}input,select,textarea{font:inherit;padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);width:100%;color:var(--text)}label{margin-bottom:var(--space-2);font-weight:600;display:block}.field{margin-bottom:var(--space-4);max-width:420px}.notice{border:1px dashed var(--border);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-8);background:var(--surface-alt);font-size:var(--text-xs)}.tree{font-family:ui-monospace,Cascadia Mono,Segoe UI Mono,Consolas,monospace;font-size:var(--text-xs);background:var(--surface-alt);border:1px solid var(--rule);border-radius:var(--radius-md);padding:var(--space-4) var(--space-6);margin:0 0 var(--space-6);max-width:var(--measure);line-height:1.7;overflow-x:auto}.tree code{background:0 0;padding:0}.video{max-width:760px;margin:var(--space-6) 0}.video__frame{aspect-ratio:16/9;justify-content:center;align-items:center;gap:var(--space-3);background:var(--surface-alt);border:1px dashed var(--border);border-radius:var(--radius-lg);flex-direction:column;display:flex;position:relative}.video__play{border-radius:var(--radius-full);background:var(--action);width:64px;height:64px;color:var(--on-action);justify-content:center;align-items:center;padding-left:4px;display:flex}.video__wait{font-size:var(--text-xs);color:var(--text-muted);margin:0}
