@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.woff2)format("woff2-variations");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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2)format("woff2-variations");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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-wght-normal.DLoelf7F.woff2)format("woff2-variations");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 dark;--deep:#006830;--accent:#00773a;--soft:#e3eee3;--cream:#e2bf9b;--cream-ink:#2a1d12;--paper:#f7f4ee;--paper-2:#efeae1;--ink:#17201a;--ink-2:#545c55;--rule:#ddd6ca;--link:var(--accent);--wrap:1160px;--radius:18px;--ease:cubic-bezier(.2, .7, .2, 1);--cjk:"PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Microsoft YaHei", sans-serif;--display:"Bricolage Grotesque Variable", system-ui, var(--cjk);--text:system-ui, -apple-system, "Segoe UI", var(--cjk);--mono:ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace}@media (prefers-color-scheme:dark){:root{--paper:#121512;--paper-2:#1a1e1a;--ink:#e9e6df;--ink-2:#a5aaa2;--rule:#2c312c}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:24px}body{background:var(--paper);color:var(--ink);font:16px/1.75 var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0}@media (prefers-color-scheme:dark){body{--link:color-mix(in srgb, var(--accent) 50%, #fff)}}a{color:var(--link);text-underline-offset:3px;text-decoration-thickness:1px}:focus-visible{outline:2px solid var(--cream);outline-offset:3px;border-radius:6px}.wrap{width:100%;max-width:var(--wrap);margin:0 auto;padding:0 32px}.glyph{flex:none}.eyebrow{color:var(--ink-2);margin:0;font-size:14px;font-weight:600}.band{background:var(--deep);color:#f6efe6;isolation:isolate;position:relative;overflow:hidden}.band:after{content:"";z-index:-1;background:radial-gradient(120% 90% at 85% 0,#ffffff14,#0000 60%);position:absolute;inset:0}.arc{z-index:-1;fill:var(--cream);pointer-events:none;position:absolute}.hero-arc{opacity:.13;width:112%;height:78%;bottom:-8%;left:-6%}.nav{align-items:center;gap:14px;height:76px;display:flex}.wordmark{color:var(--cream);font-family:var(--display);letter-spacing:-.01em;align-items:center;gap:10px;font-size:21px;font-weight:750;text-decoration:none;display:flex}.wordmark img{border-radius:8px;box-shadow:0 0 0 1px #ffffff2e}.nav-crumb{color:#f6efe6bf;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:15px;overflow:hidden}.nav-crumb span{color:#f6efe659;margin-right:8px}.nav-links{align-items:center;gap:4px;margin-left:auto;display:flex}.nav-links a{color:#f6efe6d1;white-space:nowrap;border-radius:999px;align-items:center;min-height:40px;padding:0 12px;font-size:15px;text-decoration:none;transition:background-color .2s,color .2s;display:inline-flex}.nav-links a:hover{color:#fff;background:#ffffff1a}.hero{padding-top:72px;padding-bottom:112px}.display{font-family:var(--display);letter-spacing:-.02em;text-wrap:balance;margin:0;font-weight:800;line-height:1.08}.home-hero .display{color:#fbf5ec;max-width:12em;font-size:clamp(36px,9.6vw,92px)}.hero-lead{color:#f6efe6cc;text-wrap:pretty;max-width:34em;margin:22px 0 0;font-size:clamp(17px,2vw,20px);line-height:1.7}.hero-actions{flex-wrap:wrap;align-items:center;gap:12px;margin-top:36px;display:flex}.button{white-space:nowrap;min-height:48px;transition:transform .2s var(--ease), background-color .2s, border-color .2s;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:10px;padding:0 22px;font-size:16px;font-weight:600;line-height:1.2;text-decoration:none;display:inline-flex}.button:active{transform:translateY(1px)}.button.on-band{background:var(--cream);color:var(--cream-ink)}.button.on-band:hover{background:#ecd0b3}.button.on-band .glyph:last-child{transition:transform .2s var(--ease)}.button.on-band:hover .glyph:last-child{transform:translate(3px)}.button.ghost{color:#f6efe6;border-color:#f6efe652;padding:0 18px}.button.ghost:hover{background:#ffffff0f;border-color:#f6efe6b3}.hero-links{flex-wrap:wrap;gap:4px 20px;margin-left:8px;display:inline-flex}.hero-links a{color:#f6efe6db;text-underline-offset:6px;align-items:center;gap:8px;min-height:44px;font-weight:600;text-decoration:underline #f6efe64d;transition:color .2s,text-decoration-color .2s;display:inline-flex}.hero-links a:hover{color:#fff;text-decoration-color:currentColor}.download{min-height:60px;padding:0 26px 0 22px}.download-text{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.download-label{font-size:17px}.download-detail{opacity:.72;font-size:13px;font-weight:500}.download .glyph{width:22px;height:22px}.tile{width:var(--size);height:var(--size);padding:calc(var(--size) * .08);border-radius:calc(var(--size) * .26);object-fit:contain;background:#fff;flex:none;box-shadow:0 0 0 1px #0000000f,0 6px 18px -6px #00000040}.tile-letter{background:var(--cream);color:var(--deep);font-family:var(--display);font-size:calc(var(--size) * .44);place-items:center;padding:0;font-weight:800;display:grid}.catalog{padding-top:72px;padding-bottom:96px}.feature-list,.index-list{margin:0;padding:0;list-style:none}.feature-list{margin-top:20px}.feature{border-top:1px solid var(--rule)}.feature-link{color:inherit;grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:center;gap:56px;padding:48px 0;text-decoration:none;display:grid}.entry-title{align-items:center;gap:16px;display:flex}.feature h3{font-family:var(--display);letter-spacing:-.015em;margin:0;font-size:clamp(28px,3.4vw,40px);font-weight:750;line-height:1.15;transition:color .2s}.summary{max-width:30em;color:var(--ink-2);text-wrap:pretty}.feature .summary{margin:18px 0 0;font-size:17px}.facts{color:var(--ink-2);flex-wrap:wrap;gap:4px 16px;margin:0;font-size:14px;display:flex}.feature .facts{margin-top:18px}.facts span:first-child{color:var(--link);font-weight:600}.more{background:var(--deep);color:#fbf5ec;transition:gap .25s var(--ease);border-radius:999px;align-items:center;gap:8px;margin-top:32px;padding:10px 18px;font-weight:600;display:inline-flex}.feature-link:hover .more{gap:14px}.feature-link:hover h3,.index-link:hover .index-name{color:var(--link)}.feature-visual{aspect-ratio:16/10;border-radius:var(--radius);background:var(--soft);justify-content:flex-end;align-items:flex-end;display:flex;position:relative;overflow:hidden}@media (prefers-color-scheme:dark){.feature-visual{background:color-mix(in srgb, var(--accent) 30%, var(--paper))}}.feature-visual:before{content:"";background:var(--deep);clip-path:ellipse(90% 60% at 30% 125%);opacity:.12;position:absolute;inset:0}.feature-visual img{object-fit:cover;object-position:left top;width:88%;height:86%;transition:transform .45s var(--ease);border-radius:12px 0 0;position:relative;box-shadow:0 24px 48px -16px #00000059}.feature-link:hover .feature-visual img{transform:translate(-8px,-8px)}.index-list{border-top:1px solid var(--rule);grid-template-columns:repeat(2,minmax(0,1fr));column-gap:56px;display:grid}.index-list li{border-bottom:1px solid var(--rule)}.index-link{height:100%;color:inherit;align-items:center;gap:20px;padding:28px 0;text-decoration:none;display:flex}.index-text{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.index-name{font-family:var(--display);letter-spacing:-.01em;font-size:24px;font-weight:750;line-height:1.2;transition:color .2s}.index-text .summary{font-size:15px;line-height:1.65}.index-text .facts{margin-top:4px;font-size:13px}.index-go{border:1px solid var(--rule);width:40px;height:40px;transition:background-color .25s, border-color .25s, color .25s, transform .25s var(--ease);border-radius:50%;flex:none;place-items:center;display:grid}.index-link:hover .index-go{border-color:var(--deep);background:var(--deep);color:#fbf5ec;transform:translate(4px)}.index-link .tile,.feature-link .tile{transition:transform .35s var(--ease)}.index-link:hover .tile{transform:rotate(-4deg)}.project-hero{gap:56px;padding-top:56px;padding-bottom:88px;display:grid}.project-hero.has-cover{grid-template-columns:minmax(0,6fr) minmax(0,7fr);align-items:center}.project-head .tile{margin-bottom:28px}.project-hero .display{color:#fbf5ec;font-size:clamp(40px,6.4vw,76px)}.cover{border-radius:calc(var(--radius) + 6px);background:#ffffff1a;margin:0;padding:10px;box-shadow:0 0 0 1px #ffffff1f}.cover img{object-fit:cover;object-position:top center;border-radius:var(--radius);background:#fff;width:100%;height:auto;max-height:560px;display:block;box-shadow:0 30px 60px -20px #00000080}.project-body{grid-template-columns:220px minmax(0,1fr);gap:72px;padding-top:64px;padding-bottom:104px;display:grid}.sidebar{align-content:start;gap:32px;font-size:14px;display:grid}.facts-list{gap:14px;margin:0;display:grid}.facts-list dt{color:var(--ink-2);font-size:13px}.facts-list dd{margin:0;font-weight:600}.side-links,.toc ul{margin:0;padding:0;list-style:none}.side-links{border-top:1px solid var(--rule);gap:4px;padding-top:24px;display:grid}.side-links a{padding:4px 0;font-weight:600;text-decoration:none;display:inline-block}.side-links .glyph{vertical-align:-1px;opacity:.6;width:14px;height:14px;margin-left:4px}.toc{border-top:1px solid var(--rule);padding-top:24px;position:sticky;top:24px}.toc ul{margin-top:10px}.toc a{border-left:2px solid var(--rule);color:var(--ink-2);padding:5px 0 5px 14px;text-decoration:none;transition:color .2s,border-color .2s;display:block}.toc a:hover{border-left-color:var(--accent);color:var(--ink)}.content{min-width:0}.downloads{border-bottom:1px solid var(--rule);margin-bottom:64px;padding-bottom:48px}.downloads-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px 24px;display:flex}.downloads h2{font-family:var(--display);letter-spacing:-.015em;margin:0;font-size:32px;font-weight:750}.downloads-head a{align-items:center;gap:6px;font-size:15px;font-weight:600;text-decoration:none;display:inline-flex}.downloads-head .glyph{width:14px;height:14px}.platforms{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:32px 40px;margin-top:28px;display:grid}.platform h3{font-family:var(--display);margin:0 0 6px;font-size:20px;font-weight:700}.platform ul{margin:0;padding:0;list-style:none}.file{min-height:64px;color:inherit;border-radius:12px;align-items:center;gap:14px;margin:0 -12px;padding:10px 12px;text-decoration:none;transition:background-color .2s;display:flex}.platform li+li .file{border-top-color:var(--rule)}.file:hover{background:var(--paper-2)}.file-text{flex-direction:column;flex:1;min-width:0;display:flex}.file-kind{flex-wrap:wrap;align-items:center;gap:8px;font-weight:600;display:flex}.file-name{color:var(--ink-2);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.file-size{color:var(--ink-2);font-variant-numeric:tabular-nums;flex:none;font-size:14px}.file .glyph{color:var(--link)}.badge{background:var(--deep);color:var(--cream);border-radius:999px;padding:1px 8px;font-size:12px;font-weight:600;line-height:1.6}.badge.muted{background:var(--paper-2);color:var(--ink-2)}.readme{overflow-wrap:break-word;max-width:760px;font-size:16.5px}.readme>:first-child{margin-top:0}.readme h1,.readme h2,.readme h3,.readme h4{font-family:var(--display);letter-spacing:-.01em;margin:2.2em 0 .7em;line-height:1.3}.readme h1{font-size:34px}.readme h2{font-size:30px;font-weight:750}.readme h2:before{content:"";background:var(--accent);border-radius:2px;width:40px;height:4px;margin-bottom:18px;display:block}.readme h3{font-size:21px;font-weight:700}.readme h4{font-size:17px}.readme p,.readme ul,.readme ol,.readme pre,.readme table,.readme blockquote,.readme details{margin:0 0 1.1em}.readme ul,.readme ol{padding-left:1.4em}.readme li+li{margin-top:.35em}.readme li::marker{color:var(--accent)}.readme strong{font-weight:650}.readme img{border-radius:12px;max-width:100%;height:auto}.readme p>img:only-child,.readme p>a:only-child>img{box-shadow:0 0 0 1px var(--rule), 0 18px 40px -20px #0000004d;margin:8px 0;display:block}.readme code{background:var(--paper-2);font:.86em var(--mono);border-radius:6px;padding:.12em .4em}.readme pre{border:1px solid var(--rule);border-radius:14px;padding:18px 20px;font-size:14px;line-height:1.65;overflow-x:auto;background:var(--paper-2)!important}.readme pre code{font-size:inherit;background:0 0;padding:0}.readme pre span{color:var(--shiki-light)}@media (prefers-color-scheme:dark){.readme pre span{color:var(--shiki-dark)}}.readme blockquote{border-left:4px solid var(--cream);background:var(--paper-2);color:var(--ink-2);border-radius:0 12px 12px 0;padding:14px 20px}.readme blockquote>:last-child{margin-bottom:0}.readme table{border-collapse:collapse;max-width:100%;font-size:15px;display:block;overflow-x:auto}.readme th,.readme td{border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;padding:10px 16px 10px 0}.readme th{border-bottom:2px solid var(--ink);font-weight:650}.readme details{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}.readme details+details{border-top:0;margin-top:-1.1em}.readme summary{cursor:pointer;align-items:center;gap:10px;padding:14px 0;font-weight:600;list-style:none;display:flex}.readme summary::-webkit-details-marker{display:none}.readme summary:before{content:"+";background:var(--soft);width:24px;height:24px;color:var(--deep);transition:transform .25s var(--ease);border-radius:50%;place-items:center;font-weight:700;line-height:1;display:grid}.readme details[open] summary:before{transform:rotate(45deg)}.readme details[open]{padding-bottom:8px}.readme hr{background:var(--rule);border:0;height:1px;margin:2.4em 0}.footer{background:var(--deep);color:#f6efe6b8;isolation:isolate;position:relative;overflow:hidden}.footer-arc{opacity:.1;width:70%;height:120%;top:-30%;right:-10%;transform:scaleX(-1)}.footer-inner{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:24px 48px;padding-top:64px;padding-bottom:56px;display:flex}.footer-mark{color:var(--cream);font-family:var(--display);letter-spacing:-.03em;font-size:clamp(40px,7vw,72px);font-weight:800;line-height:1;text-decoration:none}.footer-text{max-width:32em;font-size:14px}.footer-text p{margin:0 0 6px}.footer-text p:first-child{color:#f6efe6;font-weight:600}@media (width<=960px){.project-hero.has-cover{grid-template-columns:minmax(0,1fr);gap:48px}.project-body{grid-template-columns:minmax(0,1fr);gap:40px}.sidebar{gap:24px}.facts-list{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.toc{display:none}}@media (width<=760px){.wrap{padding:0 20px}.nav{height:64px}.nav-crumb,.nav-links a:not([aria-label]){display:none}.hero{padding-top:40px;padding-bottom:72px}.hero-actions .button{flex:auto}.hero-links{margin-left:0}.catalog{padding-top:48px}.feature-link{grid-template-columns:minmax(0,1fr);gap:28px;padding:32px 0}.feature-visual{order:-1}.index-list{grid-template-columns:minmax(0,1fr)}.index-go{display:none}.readme h2{font-size:26px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important}}
