@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/space-grotesk-vietnamese-wght-normal.D0rl6rjA.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/space-grotesk-latin-ext-wght-normal.D9tNdqV9.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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 Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/space-grotesk-latin-wght-normal.BhU9QXUp.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:dark;--bg: #100b17;--bg-raised: #150f1e;--surface: #1a1325;--surface-2: #221a30;--surface-3: #2b223b;--border: rgba(255, 244, 225, .09);--border-strong: rgba(255, 244, 225, .18);--text: #f7f2e9;--text-2: #bdb3c8;--text-3: #9c91ab;--honey: #f7ad2c;--honey-hi: #fbbb3d;--honey-lo: #ed9914;--plum: #9a74c6;--sky: #8fd1f6;--accent: var(--honey);--accent-2: var(--honey-hi);--accent-text: #fbbb3d;--on-accent: #1b1124;--good: #5fd08a;--warn: #fbbb3d;--bad: #ff8a8a;--idle: #9c91ab;--glow: rgba(247, 173, 44, .22);--grid-line: rgba(255, 244, 225, .06);--radius: 18px;--radius-sm: 11px;--shadow-card: 0 30px 70px -30px rgba(0, 0, 0, .75), 0 1px 0 0 rgba(255, 244, 225, .05) inset;--shadow-pop: 0 44px 100px -34px rgba(0, 0, 0, .9), 0 0 0 1px rgba(255, 244, 225, .07);--font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--display: "Space Grotesk Variable", var(--font);--mono: ui-monospace, "Cascadia Code", "SF Mono", Consolas, monospace;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-spring: cubic-bezier(.34, 1.4, .64, 1);--header-h: 64px}@media(prefers-color-scheme:light){:root{color-scheme:light;--bg: #fbf7ef;--bg-raised: #fffdf8;--surface: #ffffff;--surface-2: #f6f0e4;--surface-3: #efe7d8;--border: rgba(48, 30, 66, .11);--border-strong: rgba(48, 30, 66, .22);--text: #1d1327;--text-2: #54475f;--text-3: #6c5f78;--accent-text: #8a5200;--plum: #6a4691;--sky: #1f6f9c;--good: #14804a;--warn: #8a5200;--bad: #c2362f;--idle: #6c5f78;--glow: rgba(247, 173, 44, .32);--grid-line: rgba(48, 30, 66, .07);--shadow-card: 0 26px 60px -30px rgba(74, 44, 20, .3), 0 1px 0 0 rgba(255, 255, 255, .9) inset;--shadow-pop: 0 40px 80px -34px rgba(74, 44, 20, .4), 0 0 0 1px rgba(48, 30, 66, .06)}}*,*:before,*:after{box-sizing:border-box;margin:0}html{-webkit-text-size-adjust:100%}html:focus-within{scroll-behavior:smooth}body{font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:clip}img,svg,canvas{max-width:100%;display:block}a{color:inherit}button{font:inherit;color:inherit;border:none;background:none;cursor:pointer}h1,h2,h3{font-family:var(--display);font-weight:620;line-height:1.08;letter-spacing:-.022em;text-wrap:balance}p{text-wrap:pretty}code,pre,kbd{font-family:var(--mono)}::selection{background:var(--honey);color:var(--on-accent)}:focus-visible{outline:2px solid var(--accent-text);outline-offset:3px;border-radius:6px}.skip-link{position:absolute;left:12px;top:-60px;z-index:200;padding:10px 18px;border-radius:0 0 10px 10px;background:var(--accent);color:var(--on-accent);font-weight:650;text-decoration:none;transition:top .18s ease}.skip-link:focus{top:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.container{max-width:1180px;margin-inline:auto;padding-inline:clamp(18px,4vw,32px)}.section{padding-block:clamp(72px,10vw,128px);position:relative}section[id],main[id],[data-anchor]{scroll-margin-top:calc(var(--header-h) + 20px)}.eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:var(--display);font-size:.8rem;font-weight:620;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-text)}.eyebrow:before{content:"";width:14px;aspect-ratio:1.1547;background:currentColor;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%)}.h2{margin-top:16px;font-size:clamp(2rem,4.6vw,3.3rem)}.lede{margin-top:18px;max-width:62ch;font-size:clamp(1.02rem,1.5vw,1.15rem);color:var(--text-2)}.honey{background:linear-gradient(100deg,var(--honey-lo),var(--honey-hi) 45%,#ffe2a8 60%,var(--honey) 80%);-webkit-background-clip:text;background-clip:text;color:transparent}@media(prefers-color-scheme:light){.honey{background-image:linear-gradient(100deg,#a55f00,#d48400 45%,#b56c00 60%,#8f5200 80%)}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:11px 20px;border-radius:12px;font-family:var(--display);font-weight:620;letter-spacing:-.005em;text-decoration:none;border:1px solid transparent;transition:background .18s ease,border-color .18s ease,transform .25s var(--ease-spring),box-shadow .25s ease}.btn:active{transform:translateY(1px) scale(.985)}.btn-primary{background:linear-gradient(180deg,var(--honey-hi),var(--honey-lo));color:var(--on-accent);box-shadow:0 10px 30px -10px var(--glow),0 1px #ffffff73 inset}.btn-primary:hover{transform:translateY(-2px);box-shadow:0 18px 40px -12px var(--glow),0 1px #ffffff8c inset}.btn-ghost{border-color:var(--border-strong);color:var(--text);background:color-mix(in srgb,var(--surface) 55%,transparent)}.btn-ghost:hover{background:var(--surface-2);border-color:var(--text-3)}.btn-lg{padding:15px 28px;font-size:1.05rem;border-radius:14px}.btn svg{flex:none}.card{position:relative;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-card)}.spot{--mx: 50%;--my: 0%;overflow:hidden}.spot:before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(380px circle at var(--mx) var(--my),var(--glow),transparent 62%);opacity:0;transition:opacity .35s ease}@media(hover:hover)and (pointer:fine){.spot:hover:before{opacity:1}}.demo-tag{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border:1px solid var(--border-strong);border-radius:999px;font:620 .68rem/1.5 var(--display);letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);background:color-mix(in srgb,var(--bg) 70%,transparent);white-space:nowrap}.tag{--h: 205;display:inline-flex;align-items:center;gap:6px;padding:2px 8px 2px 7px;border-radius:7px;border:1px solid hsl(var(--h) 62% 62% / .42);background:hsl(var(--h) 60% 52% / .16);color:hsl(var(--h) 85% 80%);font:650 .74rem/1.5 var(--display);letter-spacing:.01em;white-space:nowrap}.tag:before{content:"";width:7px;aspect-ratio:1.1547;background:currentColor;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%)}@media(prefers-color-scheme:light){.tag{border-color:hsl(var(--h) 55% 38% / .35);background:hsl(var(--h) 70% 50% / .11);color:hsl(var(--h) 72% 27%)}}.ctl{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-width:38px;height:38px;padding:0 11px;border:1px solid var(--border-strong);border-radius:10px;background:color-mix(in srgb,var(--surface) 70%,transparent);color:var(--text-2);font:600 .82rem/1 var(--display);transition:background .15s ease,color .15s ease,border-color .15s ease}.ctl:hover{background:var(--surface-2);color:var(--text);border-color:var(--text-3)}.ctl svg{width:15px;height:15px;fill:currentColor}.ctl svg[hidden]{display:none}.js .reveal{opacity:0;transform:translateY(22px);transition:opacity .8s var(--ease-out),transform .8s var(--ease-out)}.js .reveal.is-in{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.reveal{opacity:1!important;transform:none!important}}.app-ui{--a-page: #100b17;--a-surface: #1a1325;--a-raised: #251c33;--a-ink: #f7f2e9;--a-ink-2: #c8bed1;--a-muted: #a297ae;--a-grid: #2c2339;--a-baseline: #3b3149;--a-track: #483d58;--a-border: rgba(255, 244, 225, .1);--a-border-strong: rgba(255, 244, 225, .2);--a-accent: #a583d6;--a-accent-text: #c4a9ea;--a-accent-solid: #6f4a99;--a-accent-solid-hover: #7c57a8;--a-brand: #f7ad2c;--a-good: #0ca30c;--a-good-text: #35bd35;--a-warning-dot: #fab219;--a-critical: #d03b3b;--a-selected: rgba(165, 131, 214, .18);--a-hover: rgba(255, 244, 225, .05);--a-seg: rgba(255, 244, 225, .07);--tag-l: .82;--tag-c: .1;--tag-fill-a: .2;--tag-line-a: .42;--tag-fb-l: 76%;--a-ui: system-ui, -apple-system, "Segoe UI", sans-serif;color:var(--a-ink);font-family:var(--a-ui)}@media(prefers-color-scheme:light){.app-ui{--a-page: #f8f4ec;--a-surface: #fdfaf4;--a-raised: #ffffff;--a-ink: #1d1327;--a-ink-2: #4f4459;--a-muted: #665a71;--a-grid: #e7e0d3;--a-baseline: #cdc4b6;--a-track: #dbd3c5;--a-border: rgba(48, 30, 66, .11);--a-border-strong: rgba(48, 30, 66, .22);--a-accent: #7a52a8;--a-accent-text: #5e3b86;--a-accent-solid: #6a4691;--a-accent-solid-hover: #5a3a7d;--a-good-text: #006300;--a-warning-dot: #bf7600;--a-selected: rgba(122, 82, 168, .11);--a-hover: rgba(48, 30, 66, .05);--a-seg: rgba(48, 30, 66, .08);--tag-l: .43;--tag-c: .13;--tag-fill-a: .13;--tag-line-a: .34;--tag-fb-l: 26%}}.app-ui .ai{width:15px;height:15px;flex:none}.app-top{display:flex;align-items:center;gap:6px;min-height:52px;padding:6px 14px;border-bottom:1px solid var(--a-border);background:var(--a-surface)}.app-mark{display:inline-flex;align-items:center;gap:8px;margin-right:10px;font:700 1rem/1 var(--display);white-space:nowrap}.app-mark img{width:22px;height:22px;border-radius:5px}.app-nav{display:flex;gap:2px;min-width:0}.app-nav span{position:relative;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px;border-radius:8px;color:var(--a-ink-2);font-size:.82rem;white-space:nowrap}.app-nav span.on{background:var(--a-selected);color:var(--a-ink)}.app-nav span.on:after{content:"";position:absolute;left:10px;right:10px;bottom:2px;height:2px;border-radius:2px;background:var(--a-brand)}.app-chip{display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 11px;border:1px solid var(--a-border-strong);border-radius:999px;background:var(--a-raised);font-size:.8rem;font-weight:600;white-space:nowrap}.app-chip i{width:8px;height:8px;border-radius:50%;background:var(--a-good)}.app-updated{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;color:var(--a-ink-2);white-space:nowrap;font-variant-numeric:tabular-nums}.app-ui .app-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border:1px solid var(--a-border-strong);border-radius:8px;background:var(--a-raised);color:var(--a-ink);font:600 .8rem/1 var(--a-ui);cursor:pointer}.app-ui .app-btn:hover{background:var(--a-page)}.app-ui .app-btn.primary{border-color:transparent;background:var(--a-accent-solid);color:#fff}.app-ui .app-btn.primary:hover{background:var(--a-accent-solid-hover)}.app-ui .app-btn svg{width:14px;height:14px;fill:currentColor}@media(max-width:640px),(pointer:coarse){.app-ui .app-btn{height:44px}}.app-ui .app-btn svg[hidden]{display:none}.app-ui .app-btn:focus-visible{outline:2px solid var(--a-accent);outline-offset:2px}.app-ui .ctag{--hue: 215;display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 7px;border:1px solid;border-radius:6px;font-size:.72rem;font-weight:650;white-space:nowrap;color:hsl(var(--hue) 62% var(--tag-fb-l));background:hsl(var(--hue) 70% 50% / var(--tag-fill-a));border-color:hsl(var(--hue) 62% 50% / var(--tag-line-a))}@supports (color: oklch(from red l c h)){.app-ui .ctag{color:oklch(from hsl(var(--hue) 70% 50%) var(--tag-l) var(--tag-c) h);background:oklch(from hsl(var(--hue) 70% 50%) .62 .15 h / var(--tag-fill-a));border-color:oklch(from hsl(var(--hue) 70% 50%) .6 .14 h / var(--tag-line-a))}}.app-ui .ctag .ai{width:13px;height:13px}.app-ui .akind{display:inline-flex;align-items:center;gap:4px;min-width:0;overflow:hidden;font-size:.78rem;font-style:normal;color:var(--a-ink-2);white-space:nowrap;text-overflow:ellipsis}.app-ui .akind .ai{width:13px;height:13px;color:var(--a-muted)}.app-ui .astate{display:inline-flex;align-items:center;gap:7px;font-size:.8rem;font-weight:600;white-space:nowrap}.app-ui .astate i{width:7px;height:7px;border-radius:50%;background:var(--a-accent)}.app-ui .astate[data-state=waiting] i{background:var(--a-warning-dot)}.app-ui .astate[data-state=finished] i,.app-ui .astate[data-state=converged] i{background:var(--a-good)}.app-ui .astate[data-state=converged]{color:var(--a-good-text)}.app-ui .ameter{display:block;height:4px;border-radius:3px;background:var(--a-track);overflow:hidden}.app-ui .ameter i{display:block;height:100%;border-radius:inherit;background:var(--a-accent);transform-origin:left;transform:scaleX(var(--p, 0));transition:transform .9s var(--ease-out)}.app-tabs{display:flex;gap:2px;margin-top:8px;overflow:hidden}.app-tabs span{padding:9px 11px;border-bottom:2px solid transparent;font-size:.82rem;color:var(--a-ink-2);white-space:nowrap}.app-tabs span.on{border-bottom-color:var(--a-accent);color:var(--a-ink);font-weight:600}.app-ui .afigs{display:grid;gap:8px}.app-ui .afigs>div{min-width:0;padding:9px 11px;border:1px solid var(--a-border);border-radius:10px;background:var(--a-surface)}.app-ui .afigs dt{overflow:hidden;font-size:.72rem;color:var(--a-ink-2);white-space:nowrap;text-overflow:ellipsis}.app-ui .afigs dd{margin-top:3px;overflow:hidden;font:650 .88rem/1.3 var(--a-ui);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis}.app-ui .achart{position:relative;min-width:0;border:1px solid var(--a-border);border-radius:12px;background:var(--a-surface)}.app-ui .achart>figcaption{font:650 .78rem/1.2 var(--a-ui);color:var(--a-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-ui .achart>figcaption span{font-weight:400;color:var(--a-muted)}.app-ui .chart-line{fill:none;stroke:var(--a-accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.app-ui .chart-area{fill:var(--a-accent);fill-opacity:.08;stroke:none}.app-ui .chart-ghost{stroke:var(--a-grid)}.app-ui .chart-target{stroke:var(--a-muted);stroke-width:1;stroke-dasharray:4 4;vector-effect:non-scaling-stroke}.app-ui .chart-gridline{stroke:var(--a-grid);stroke-width:1;vector-effect:non-scaling-stroke}.app-ui .chart-dot{position:absolute;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border:2px solid var(--a-accent);border-radius:50%;background:var(--a-surface);transition:left .6s var(--ease-out),top .6s var(--ease-out)}.app-ui .chart-rule{position:absolute;top:0;bottom:0;width:1px;background:var(--a-border-strong);transition:left .3s var(--ease-out)}.app-ui .amol{position:relative;overflow:hidden;border:1px solid var(--a-border);border-radius:12px;background:var(--a-surface)}.app-ui .amol>img,.app-ui .amol>[data-viewer]{position:absolute;inset:0;width:100%;height:100%}.app-ui .amol>img{object-fit:contain}.app-ui .amol>[data-viewer]{touch-action:pan-y;cursor:grab}.app-ui .amol>[data-viewer]:active{cursor:grabbing}.app-ui .amol.is-3d>img{visibility:hidden}.app-legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:.78rem;color:var(--a-ink-2)}.app-legend span{display:inline-flex;align-items:center;gap:6px}.app-legend i{width:10px;height:10px;border-radius:50%;border:1px solid var(--a-border-strong)}.to-top[data-astro-cid-wlspcwf4]{position:fixed;right:clamp(14px,3vw,28px);bottom:clamp(14px,3vw,28px);z-index:90;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;border:1px solid var(--border-strong);background:var(--surface);color:var(--text-2);box-shadow:var(--shadow-card);text-decoration:none;transition:opacity .2s ease,transform .2s ease,background .15s ease,color .15s ease,border-color .15s ease}.to-top[data-astro-cid-wlspcwf4]:hover{background:var(--accent);border-color:var(--accent);color:#fff}.js .to-top[data-astro-cid-wlspcwf4]{opacity:0;visibility:hidden;transform:translateY(8px) scale(.94);pointer-events:none;transition:opacity .2s ease,transform .2s ease,visibility 0s linear .2s}.js .to-top[data-astro-cid-wlspcwf4].is-on{opacity:1;visibility:visible;transform:none;pointer-events:auto;transition:opacity .2s ease,transform .2s ease,visibility 0s linear 0s,background .15s ease,color .15s ease,border-color .15s ease}@media(prefers-reduced-motion:reduce){.to-top[data-astro-cid-wlspcwf4]{transition:opacity .2s ease}.js .to-top[data-astro-cid-wlspcwf4]{transform:none}}@media print{.to-top[data-astro-cid-wlspcwf4]{display:none}}
