:root{--paper:#eef2f5;--surface:#f8fafc;--ink:#14213d;--muted:#56647a;--rule:#c9d3de;--link:#1d4f91;--aws:#d4700a;--azure:#0a6ed1;--gcp:#1e8e3e;--grid:rgba(20, 33, 61, 0.06);--code-bg:#e3e9ef;--f-display:"Bricolage Grotesque", "Segoe UI", system-ui, sans-serif;--f-body:"Source Serif 4", Georgia, "Times New Roman", serif;--f-mono:"JetBrains Mono", ui-monospace, Consolas, monospace;color-scheme:light}:root[data-theme=dark]{--paper:#0f1726;--surface:#162033;--ink:#e4eaf2;--muted:#9aa8bc;--rule:#2a3850;--link:#8fb8f0;--aws:#ff9d3c;--azure:#4da3ff;--gcp:#4cc26b;--grid:rgba(228, 234, 242, 0.05);--code-bg:#1b2740;color-scheme:dark}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font:1.125rem/1.7 var(--f-body)}h1,h2,h3,h4{font-family:var(--f-display);font-weight:700;line-height:1.2;letter-spacing:-.01em}a{color:var(--link);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--azure);outline-offset:2px;border-radius:2px}img{max-width:100%;height:auto}.wrap{width:min(72rem,100% - 2.5rem);margin-inline:auto}.narrow{width:min(44rem,100% - 2.5rem)}.skip{position:absolute;left:-999px}.skip:focus{left:1rem;top:1rem;background:var(--surface);padding:.5rem 1rem;z-index:10}.site-header{border-bottom:1px solid var(--rule);background:var(--paper)}.header-row{display:flex;align-items:center;gap:1.5rem;padding-block:1rem;flex-wrap:wrap}.brand{font:700 1.2rem var(--f-display);color:var(--ink);text-decoration:none;margin-right:auto}.site-header nav ul{display:flex;gap:1.25rem;list-style:none;margin:0;padding:0;flex-wrap:wrap}.site-header nav a{font:500 .95rem var(--f-display);color:var(--muted);text-decoration:none}.site-header nav a:hover,.site-header nav a[aria-current]{color:var(--ink)}.header-tools{display:flex;align-items:center;gap:.75rem}.lang{font:600 .8rem var(--f-mono);color:var(--ink);text-decoration:none;border:1px solid var(--rule);padding:.15rem .45rem;border-radius:4px}.theme-toggle{background:0 0;border:1px solid var(--rule);color:var(--ink);border-radius:4px;padding:.3rem;cursor:pointer;display:grid;place-items:center}.hero{border-bottom:1px solid var(--rule);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:32px 32px;padding-block:clamp(3rem,8vw,6rem)0}.hero h1{font-size:clamp(2rem,5vw,3.6rem);max-width:20ch;margin:0 0 clamp(2rem,5vw,3.5rem);font-weight:500}.cloud-index{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr)}.ci a{display:flex;flex-direction:column;gap:.25rem;padding:1.25rem 1.25rem 1.5rem;text-decoration:none;color:var(--ink);border-top:6px solid var(--c);background:color-mix(in srgb,var(--c) 7%,transparent);transition:background .15s}.ci a:hover{background:color-mix(in srgb,var(--c) 16%,transparent)}.ci-aws{--c:var(--aws)}.ci-azure{--c:var(--azure)}.ci-gcp{--c:var(--gcp)}.ci-name{font:700 1.5rem var(--f-display)}.ci-count{font:.85rem var(--f-mono);color:var(--muted)}.section-title{font-size:1.1rem;color:var(--muted);font-weight:500;margin:3rem 0 .5rem}.post-row{padding-block:1.75rem;border-bottom:1px solid var(--rule)}.post-row h3{font-size:1.5rem;margin:.6rem 0 .25rem}.post-row h3 a{color:var(--ink);text-decoration:none}.post-row h3 a:hover{text-decoration:underline}.meta{font:.85rem var(--f-mono);color:var(--muted);margin:0}.summary{margin:.6rem 0 0}.list-page{padding-top:3rem}.list-head h1{font-size:clamp(2rem,4vw,2.8rem);margin:0 0 1rem}.term-aws h1{border-left:6px solid var(--aws);padding-left:1rem}.term-azure h1{border-left:6px solid var(--azure);padding-left:1rem}.term-gcp h1{border-left:6px solid var(--gcp);padding-left:1rem}.term-list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.5rem 1.25rem}.pager{display:flex;justify-content:space-between;padding-block:2rem;font-family:var(--f-mono);font-size:.9rem}.more{font-family:var(--f-display)}.cloud-strip{display:inline-flex;gap:2px}.seg{font:600 .72rem/1 var(--f-mono);color:#fff;text-decoration:none;padding:.35rem .6rem}.seg:first-child{border-radius:3px 0 0 3px}.seg:last-child{border-radius:0 3px 3px 0}.seg:only-child{border-radius:3px}.seg-aws{background:var(--aws)}.seg-azure{background:var(--azure)}.seg-gcp{background:var(--gcp)}:root[data-theme=dark] .seg{color:#0f1726}.post{padding-block:3rem 4rem}.post-head h1{font-size:clamp(2rem,4.5vw,3rem);margin:.9rem 0 .75rem}.translation{margin-left:.75rem}.toc{margin:2rem 0;padding:1rem 1.25rem;border:1px solid var(--rule);background:var(--surface);border-radius:4px;font-size:1rem}.toc summary{font:600 .95rem var(--f-display);cursor:pointer}.toc ul{padding-left:1.1rem;margin:.5rem 0 0}.prose h2{font-size:1.75rem;margin:2.75rem 0 .75rem}.prose h3{font-size:1.3rem;margin:2rem 0 .5rem}.anchor{opacity:0;text-decoration:none;color:var(--muted);font-weight:400}h2:hover .anchor,h3:hover .anchor,.anchor:focus{opacity:1}.prose p,.prose li{max-width:68ch}.prose blockquote{margin:1.5rem 0;padding:.25rem 1.25rem;border-left:3px solid var(--rule);color:var(--muted)}.prose table{width:100%;border-collapse:collapse;font-size:.95rem;display:block;overflow-x:auto}.prose th,.prose td{text-align:left;padding:.55rem .75rem;border-bottom:1px solid var(--rule);vertical-align:top}.prose th{font-family:var(--f-display);font-weight:600}code{font-family:var(--f-mono);font-size:.86em;background:var(--code-bg);padding:.1em .35em;border-radius:3px}pre{overflow-x:auto;padding:1rem 1.25rem;border-radius:4px;font-size:.88rem;line-height:1.55;border:1px solid var(--rule)}pre code{background:0 0;padding:0;font-size:inherit}pre.mermaid{background:var(--surface);text-align:center}.tags{margin-top:3rem;font-family:var(--f-mono);font-size:.85rem}.tags span{color:var(--muted)}.tags a{margin-right:.5rem}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-top:3rem;border-top:1px solid var(--rule);padding-top:1.5rem}.post-nav a{font-family:var(--f-display);text-decoration:none;color:var(--ink)}.post-nav small{display:block;font:.8rem var(--f-mono);color:var(--muted);margin-bottom:.2rem}.post-nav .next{text-align:right;grid-column:2}.site-footer{border-top:1px solid var(--rule);margin-top:4rem;font-size:.9rem;color:var(--muted)}.footer-row{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding-block:2rem}.footer-row p{margin:0;max-width:60ch}.footer-links a{margin-left:1rem}@media(max-width:640px){.cloud-index{grid-template-columns:1fr}.ci a{flex-direction:row;justify-content:space-between;align-items:baseline;padding-block:1rem}.post-nav{grid-template-columns:1fr}.post-nav .next{grid-column:1;text-align:left}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}.home-list>*{max-width:44rem}.footer-links a:first-child{margin-left:0}@media(max-width:760px){.header-row{gap:.75rem 1rem}.brand{order:1}.header-tools{order:2}.site-header nav{order:3;flex-basis:100%}.footer-links a{margin:0 1rem 0 0}}:root:not([data-theme=dark]) .bg{background-color:#f7f7f7}:root:not([data-theme=dark]) .chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}:root:not([data-theme=dark]) .chroma .err{color:#f6f8fa;background-color:#82071e}:root:not([data-theme=dark]) .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root:not([data-theme=dark]) .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root:not([data-theme=dark]) .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root:not([data-theme=dark]) .chroma .hl{background-color:#dedede}:root:not([data-theme=dark]) .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}:root:not([data-theme=dark]) .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}:root:not([data-theme=dark]) .chroma .line{display:flex}:root:not([data-theme=dark]) .chroma .k{color:#cf222e}:root:not([data-theme=dark]) .chroma .kc{color:#cf222e}:root:not([data-theme=dark]) .chroma .kd{color:#cf222e}:root:not([data-theme=dark]) .chroma .kn{color:#cf222e}:root:not([data-theme=dark]) .chroma .kp{color:#cf222e}:root:not([data-theme=dark]) .chroma .kr{color:#cf222e}:root:not([data-theme=dark]) .chroma .kt{color:#cf222e}:root:not([data-theme=dark]) .chroma .na{color:#1f2328}:root:not([data-theme=dark]) .chroma .nc{color:#1f2328}:root:not([data-theme=dark]) .chroma .no{color:#0550ae}:root:not([data-theme=dark]) .chroma .nd{color:#0550ae}:root:not([data-theme=dark]) .chroma .ni{color:#6639ba}:root:not([data-theme=dark]) .chroma .nl{color:#900;font-weight:700}:root:not([data-theme=dark]) .chroma .nn{color:#24292e}:root:not([data-theme=dark]) .chroma .nx{color:#1f2328}:root:not([data-theme=dark]) .chroma .nt{color:#0550ae}:root:not([data-theme=dark]) .chroma .nb{color:#6639ba}:root:not([data-theme=dark]) .chroma .bp{color:#6a737d}:root:not([data-theme=dark]) .chroma .nv{color:#953800}:root:not([data-theme=dark]) .chroma .vc{color:#953800}:root:not([data-theme=dark]) .chroma .vg{color:#953800}:root:not([data-theme=dark]) .chroma .vi{color:#953800}:root:not([data-theme=dark]) .chroma .vm{color:#953800}:root:not([data-theme=dark]) .chroma .nf{color:#6639ba}:root:not([data-theme=dark]) .chroma .fm{color:#6639ba}:root:not([data-theme=dark]) .chroma .s{color:#0a3069}:root:not([data-theme=dark]) .chroma .sa{color:#0a3069}:root:not([data-theme=dark]) .chroma .sb{color:#0a3069}:root:not([data-theme=dark]) .chroma .sc{color:#0a3069}:root:not([data-theme=dark]) .chroma .dl{color:#0a3069}:root:not([data-theme=dark]) .chroma .sd{color:#0a3069}:root:not([data-theme=dark]) .chroma .s2{color:#0a3069}:root:not([data-theme=dark]) .chroma .se{color:#0a3069}:root:not([data-theme=dark]) .chroma .sh{color:#0a3069}:root:not([data-theme=dark]) .chroma .si{color:#0a3069}:root:not([data-theme=dark]) .chroma .sx{color:#0a3069}:root:not([data-theme=dark]) .chroma .sr{color:#0a3069}:root:not([data-theme=dark]) .chroma .s1{color:#0a3069}:root:not([data-theme=dark]) .chroma .ss{color:#032f62}:root:not([data-theme=dark]) .chroma .m{color:#0550ae}:root:not([data-theme=dark]) .chroma .mb{color:#0550ae}:root:not([data-theme=dark]) .chroma .mf{color:#0550ae}:root:not([data-theme=dark]) .chroma .mh{color:#0550ae}:root:not([data-theme=dark]) .chroma .mi{color:#0550ae}:root:not([data-theme=dark]) .chroma .il{color:#0550ae}:root:not([data-theme=dark]) .chroma .mo{color:#0550ae}:root:not([data-theme=dark]) .chroma .o{color:#0550ae}:root:not([data-theme=dark]) .chroma .ow{color:#0550ae}:root:not([data-theme=dark]) .chroma .or{color:#0550ae}:root:not([data-theme=dark]) .chroma .p{color:#1f2328}:root:not([data-theme=dark]) .chroma .c{color:#57606a}:root:not([data-theme=dark]) .chroma .ch{color:#57606a}:root:not([data-theme=dark]) .chroma .cm{color:#57606a}:root:not([data-theme=dark]) .chroma .c1{color:#57606a}:root:not([data-theme=dark]) .chroma .cs{color:#57606a}:root:not([data-theme=dark]) .chroma .cp{color:#57606a}:root:not([data-theme=dark]) .chroma .cpf{color:#57606a}:root:not([data-theme=dark]) .chroma .gd{color:#82071e;background-color:#ffebe9}:root:not([data-theme=dark]) .chroma .ge{color:#1f2328}:root:not([data-theme=dark]) .chroma .gi{color:#116329;background-color:#dafbe1}:root:not([data-theme=dark]) .chroma .go{color:#1f2328}:root:not([data-theme=dark]) .chroma .gl{text-decoration:underline}:root:not([data-theme=dark]) .chroma .w{color:#fff}:root[data-theme=dark] .bg{color:#e6edf3;background-color:#0d1117}:root[data-theme=dark] .chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}:root[data-theme=dark] .chroma .err{color:#f85149}:root[data-theme=dark] .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root[data-theme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .hl{background-color:#6e7681}:root[data-theme=dark] .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root[data-theme=dark] .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root[data-theme=dark] .chroma .line{display:flex}:root[data-theme=dark] .chroma .k{color:#ff7b72}:root[data-theme=dark] .chroma .kc{color:#79c0ff}:root[data-theme=dark] .chroma .kd{color:#ff7b72}:root[data-theme=dark] .chroma .kn{color:#ff7b72}:root[data-theme=dark] .chroma .kp{color:#79c0ff}:root[data-theme=dark] .chroma .kr{color:#ff7b72}:root[data-theme=dark] .chroma .kt{color:#ff7b72}:root[data-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .ni{color:#ffa657}:root[data-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nn{color:#ff7b72}:root[data-theme=dark] .chroma .nx{color:#e6edf3}:root[data-theme=dark] .chroma .py{color:#79c0ff}:root[data-theme=dark] .chroma .nt{color:#7ee787}:root[data-theme=dark] .chroma .nv{color:#79c0ff}:root[data-theme=dark] .chroma .vc{color:#79c0ff}:root[data-theme=dark] .chroma .vg{color:#79c0ff}:root[data-theme=dark] .chroma .vi{color:#79c0ff}:root[data-theme=dark] .chroma .vm{color:#79c0ff}:root[data-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .fm{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .l{color:#a5d6ff}:root[data-theme=dark] .chroma .ld{color:#79c0ff}:root[data-theme=dark] .chroma .s{color:#a5d6ff}:root[data-theme=dark] .chroma .sa{color:#79c0ff}:root[data-theme=dark] .chroma .sb{color:#a5d6ff}:root[data-theme=dark] .chroma .sc{color:#a5d6ff}:root[data-theme=dark] .chroma .dl{color:#79c0ff}:root[data-theme=dark] .chroma .sd{color:#a5d6ff}:root[data-theme=dark] .chroma .s2{color:#a5d6ff}:root[data-theme=dark] .chroma .se{color:#79c0ff}:root[data-theme=dark] .chroma .sh{color:#79c0ff}:root[data-theme=dark] .chroma .si{color:#a5d6ff}:root[data-theme=dark] .chroma .sx{color:#a5d6ff}:root[data-theme=dark] .chroma .sr{color:#79c0ff}:root[data-theme=dark] .chroma .s1{color:#a5d6ff}:root[data-theme=dark] .chroma .ss{color:#a5d6ff}:root[data-theme=dark] .chroma .m{color:#a5d6ff}:root[data-theme=dark] .chroma .mb{color:#a5d6ff}:root[data-theme=dark] .chroma .mf{color:#a5d6ff}:root[data-theme=dark] .chroma .mh{color:#a5d6ff}:root[data-theme=dark] .chroma .mi{color:#a5d6ff}:root[data-theme=dark] .chroma .il{color:#a5d6ff}:root[data-theme=dark] .chroma .mo{color:#a5d6ff}:root[data-theme=dark] .chroma .o{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .or{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .c{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .ch{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cm{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .c1{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .gd{color:#ffa198;background-color:#490202}:root[data-theme=dark] .chroma .ge{font-style:italic}:root[data-theme=dark] .chroma .gr{color:#ffa198}:root[data-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .gi{color:#56d364;background-color:#0f5323}:root[data-theme=dark] .chroma .go{color:#8b949e}:root[data-theme=dark] .chroma .gp{color:#8b949e}:root[data-theme=dark] .chroma .gs{font-weight:700}:root[data-theme=dark] .chroma .gu{color:#79c0ff}:root[data-theme=dark] .chroma .gt{color:#ff7b72}:root[data-theme=dark] .chroma .gl{text-decoration:underline}:root[data-theme=dark] .chroma .w{color:#6e7681}