@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{--bg:#fbfcfd;--surface:#fff;--surface-2:#f1f5f9;--text:#0f1b2d;--text-2:#475569;--text-3:#64748b;--border:#e2e8f0;--border-strong:#cbd5e1;--brand:#1769c2;--brand-strong:#0f4f99;--brand-soft:#e6f1fb;--brand-grad:linear-gradient(135deg, #22b3d6 0%, #1769c2 100%);--spark:#f08c12;--spark-soft:#fff3e3;--ok:#15803d;--ok-soft:#e7f6ec;--info:#0e7490;--info-soft:#e3f5f8;--warn:#b45309;--warn-soft:#fdf2e2;--radius-s:8px;--radius:14px;--radius-l:22px;--shadow-s:0 1px 2px #0f1b2d0f;--shadow:0 1px 2px #0f1b2d0d, 0 8px 24px -8px #0f1b2d1f;--shadow-l:0 2px 4px #0f1b2d0a, 0 24px 60px -20px #0f346359;--maxw:1160px;--prose:68ch;--font:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--font-display:"Bricolage Grotesque Variable", var(--font);--mono:ui-monospace, "JetBrains Mono", "Cascadia Code", "Fira Code", monospace;--on-brand:#fff;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#0b1220;--surface:#111a2b;--surface-2:#17223a;--text:#e8eef7;--text-2:#a9b6c9;--text-3:#8191a8;--border:#22304a;--border-strong:#2f4060;--brand:#5aaef0;--brand-strong:#8cc7f5;--brand-soft:#132b47;--spark:#ffa53d;--spark-soft:#3a2710;--ok:#4ade80;--ok-soft:#10301d;--info:#5ad1e6;--info-soft:#0d2c33;--warn:#fbbf24;--warn-soft:#33270b;--shadow-s:0 1px 2px #0006;--shadow:0 1px 2px #0000004d, 0 8px 24px -8px #00000080;--shadow-l:0 2px 4px #0000004d, 0 24px 60px -20px #000000b3;--on-brand:#0b1220;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;scroll-padding-top:5rem;font-size:100%;line-height:1.6}body{background:var(--bg);flex-direction:column;min-height:100vh;margin:0;display:flex}main{flex:1;padding-block:3rem 5rem}a{color:var(--brand);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{color:var(--brand-strong)}:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:4px}img,video{max-width:100%;height:auto}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.02em;color:var(--text);text-wrap:balance;font-weight:700;line-height:1.15}h1{margin:0 0 1rem;font-size:clamp(2.1rem,1.4rem + 3vw,3.4rem);font-weight:750}h2{margin:0 0 1rem;font-size:clamp(1.5rem,1.2rem + 1.2vw,2rem)}h3{margin:0 0 .5rem;font-size:1.2rem}p{text-wrap:pretty}.container{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:1.25rem}.kicker{letter-spacing:.08em;text-transform:uppercase;color:var(--brand);align-items:center;gap:.5rem;margin:0 0 1rem;font-size:.8rem;font-weight:600;display:inline-flex}.kicker:before{content:"";background:var(--spark);border-radius:50%;width:8px;height:8px}.lead{color:var(--text-2);max-width:60ch;margin:0;font-size:clamp(1.05rem,1rem + .35vw,1.25rem);line-height:1.6}.meta{color:var(--text-3);flex-wrap:wrap;align-items:center;gap:.4rem .75rem;margin:0;font-size:.875rem;display:flex}section+section{margin-top:5rem}.section-head{justify-content:space-between;align-items:end;gap:1rem;margin-bottom:1.75rem;display:flex}.section-head h2{margin:0}.link-arrow{white-space:nowrap;font-weight:600;text-decoration:none}.link-arrow:after{content:" →"}.site-header{z-index:20;background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:saturate(1.6)blur(12px);border-bottom:1px solid var(--border);position:sticky;top:0}.header-inner{justify-content:space-between;align-items:center;gap:1rem;height:4rem;display:flex}.brand{font-family:var(--font-display);letter-spacing:-.02em;color:var(--text);align-items:center;gap:.6rem;font-size:1.2rem;font-weight:700;text-decoration:none;display:inline-flex}.brand:hover{color:var(--text)}.site-nav{gap:.25rem;display:flex}.site-nav a{color:var(--text-2);border-radius:999px;padding:.45rem .8rem;font-size:.95rem;font-weight:500;text-decoration:none;transition:background .15s,color .15s}.site-nav a:hover{background:var(--surface-2);color:var(--text)}.site-nav a[aria-current=page]{background:var(--brand-soft);color:var(--brand-strong)}.site-footer{border-top:1px solid var(--border);background:var(--surface);color:var(--text-3);font-size:.9rem}.footer-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem 2rem;padding-block:2rem;display:flex}.footer-inner p{margin:0}.footer-brand{align-items:center;gap:.6rem;display:flex}.footer-inner nav{flex-wrap:wrap;gap:1.25rem;display:flex}.footer-inner nav a{color:var(--text-2);text-decoration:none}.footer-inner nav a:hover{color:var(--brand)}.actions{flex-wrap:wrap;gap:.75rem;margin-top:2rem;display:flex}.btn{background:var(--brand);min-height:2.875rem;color:var(--on-brand);text-align:center;box-shadow:var(--shadow-s);border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:.5rem;padding:.7rem 1.35rem;font-size:.975rem;font-weight:600;line-height:1.2;transition:transform .15s,background .15s,box-shadow .15s;display:inline-flex;text-decoration:none!important}.btn:hover{background:var(--brand-strong);color:var(--on-brand);box-shadow:var(--shadow);transform:translateY(-1px)}.btn-ghost{background:var(--surface);color:var(--text);border-color:var(--border-strong)}.btn-ghost:hover{background:var(--surface);color:var(--brand);border-color:var(--brand)}.btn-lg{min-height:3.25rem;padding-inline:1.75rem;font-size:1.05rem}.btn-block{width:100%}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:.35rem;padding:.2rem .6rem;font-size:.75rem;font-weight:600;line-height:1.4;display:inline-flex}.badge:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.badge-ok{color:var(--ok);background:var(--ok-soft)}.badge-info{color:var(--info);background:var(--info-soft)}.badge-warn{color:var(--warn);background:var(--warn-soft)}.chips{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.chip{background:var(--surface-2);border:1px solid var(--border);color:var(--text-2);border-radius:6px;padding:.15rem .6rem;font-size:.8rem;font-weight:500;display:inline-block}.tags{flex-wrap:wrap;gap:.25rem .75rem;margin:0;padding:0;font-size:.85rem;list-style:none;display:flex}.tags a{color:var(--text-3);text-decoration:none}.tags a:hover{color:var(--brand)}.frame{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-l);overflow:hidden}.frame-bar{background:var(--surface-2);border-bottom:1px solid var(--border);gap:6px;padding:10px 14px;display:flex}.frame-bar span{background:var(--border-strong);border-radius:50%;width:10px;height:10px}.frame img{width:100%;height:auto;display:block}.hero{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:center;gap:3.5rem;padding-block:1rem 2rem;display:grid;position:relative}.hero h1{font-size:clamp(2.3rem,1.5rem + 3.2vw,3.7rem)}.hero h1 em{background:var(--brand-grad);color:#0000;-webkit-background-clip:text;background-clip:text;font-style:normal}.hero-visual{isolation:isolate;position:relative}.hero-visual:before{content:"";z-index:-1;background:var(--brand-grad);opacity:.18;filter:blur(48px);border-radius:40% 60% 55% 45%;position:absolute;inset:-10% -6% -10% 6%}.feature-product{border-radius:var(--radius-l);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);display:grid;overflow:hidden}.feature-product-visual{background:var(--brand-grad)}.feature-product-visual img{object-fit:cover;width:100%;height:100%;display:block}.feature-product-body{flex-direction:column;gap:1rem;padding:clamp(1.5rem,1rem + 2vw,2.75rem);display:flex}.feature-product-body h3{margin:0;font-size:clamp(1.5rem,1.2rem + 1vw,2rem)}.feature-product-body p{color:var(--text-2);margin:0}.editions{gap:.6rem;margin:.5rem 0 0;padding:0;list-style:none;display:grid}.editions a{border-radius:var(--radius-s);border:1px solid var(--border);color:var(--text);justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 1rem;font-weight:600;text-decoration:none;transition:border-color .15s,background .15s;display:flex}.editions a:hover{border-color:var(--brand);background:var(--brand-soft)}.grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:1.5rem;display:grid}.card{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-s);flex-direction:column;transition:transform .2s,box-shadow .2s,border-color .2s;display:flex;position:relative;overflow:hidden}.card:hover{box-shadow:var(--shadow);border-color:var(--border-strong);transform:translateY(-3px)}.card-cover{aspect-ratio:16/9;background:var(--brand-grad);overflow:hidden}.card-cover img{object-fit:cover;width:100%;height:100%;transition:transform .4s;display:block}.card:hover .card-cover img{transform:scale(1.03)}.card-body{flex-direction:column;flex:1;gap:.6rem;padding:1.25rem 1.4rem 1.5rem;display:flex}.card h3{margin:0;font-size:1.2rem;line-height:1.25}.card h3 a{color:var(--text);text-decoration:none}.card h3 a:after{content:"";position:absolute;inset:0}.card p{color:var(--text-2);margin:0;font-size:.95rem}.card .tags,.card .chips{z-index:1;margin-top:auto;padding-top:.4rem;position:relative}.product-head{align-items:center;gap:.85rem;display:flex}.product-logo{box-shadow:var(--shadow-s);border-radius:22%;flex-shrink:0}.page-head{max-width:720px;margin-bottom:3rem}.empty{color:var(--text-3)}.product-hero{grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);align-items:center;gap:3.5rem;display:grid}.product-hero .product-head{margin-bottom:1.25rem}.product-hero h1{margin:0;font-size:clamp(2rem,1.4rem + 2.2vw,2.9rem)}.product-hero .lead{margin-bottom:1.25rem}.highlights{grid-template-columns:repeat(auto-fill,minmax(min(100%,250px),1fr));gap:1rem;margin:0;padding:0;list-style:none;display:grid}.highlights li{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);align-items:flex-start;gap:.75rem;padding:1rem 1.1rem;font-weight:500;line-height:1.45;display:flex}.highlights li:before{content:"";background:var(--brand-soft) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232f8fe0' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / .85rem no-repeat;border-radius:50%;flex-shrink:0;width:1.4rem;height:1.4rem}.product-layout{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:4rem;display:grid}.product-aside{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);flex-direction:column;gap:1.25rem;padding:1.5rem;display:flex;position:sticky;top:5.5rem}.product-aside .product-head strong{font-family:var(--font-display);font-size:1.1rem;line-height:1.25}.specs{gap:.85rem;margin:0;font-size:.9rem;display:grid}.specs div{gap:.1rem;display:grid}.specs dt{color:var(--text-3);font-size:.8rem}.specs dd{margin:0;font-weight:600}.aside-links{gap:.5rem;display:grid}.aside-note{color:var(--text-3);margin:0;font-size:.85rem}.post-header{text-align:center;max-width:820px;margin:0 auto 2.5rem}.post-header .meta,.post-header .tags{justify-content:center}.post-header .meta{margin-bottom:1.25rem}.post-header h1{font-size:clamp(2rem,1.4rem + 2.4vw,3rem)}.post-header .lead{margin:0 auto 1.25rem}.post-cover{border-radius:var(--radius-l);width:100%;max-width:980px;height:auto;box-shadow:var(--shadow-l);margin:0 auto 3.5rem;display:block}.prose{max-width:var(--prose);color:var(--text);margin-inline:auto;font-size:1.0625rem;line-height:1.75}.product-layout .prose{margin-inline:0}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol{margin:0 0 1.25rem}.prose h2{margin:3.25rem 0 1rem;font-size:clamp(1.45rem,1.2rem + .9vw,1.85rem)}.prose h3{margin:2.25rem 0 .75rem;font-size:1.25rem}.prose ul,.prose ol{padding-left:1.4rem}.prose li{margin-bottom:.4rem;padding-left:.2rem}.prose li::marker{color:var(--brand);font-weight:600}.prose strong{font-weight:650}.prose blockquote{border-left:3px solid var(--spark);color:var(--text-2);margin:2rem 0;padding:.25rem 0 .25rem 1.25rem}.prose :not(pre)>code{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);overflow-wrap:anywhere;border-radius:5px;padding:.15em .4em;font-size:.86em}.prose pre{border-radius:var(--radius);font-family:var(--mono);box-shadow:var(--shadow-s);margin:1.75rem 0;padding:1.1rem 1.3rem;font-size:.875rem;line-height:1.65;overflow-x:auto}.prose table{border-collapse:separate;border-spacing:0;border:1px solid var(--border);border-radius:var(--radius-s);width:100%;margin:1.75rem 0;font-size:.95rem;line-height:1.5;display:block;overflow-x:auto}.prose thead th{background:var(--surface-2);font-weight:600}.prose th,.prose td{text-align:left;vertical-align:top;border-bottom:1px solid var(--border);padding:.7rem 1rem}.prose tbody tr:last-child td{border-bottom:0}.prose thead:has(th:empty:first-child+th:empty:last-child){display:none}.prose .actions{margin-top:2.5rem}.callout{max-width:var(--prose);border-radius:var(--radius);background:var(--brand-soft);border:1px solid color-mix(in srgb, var(--brand) 25%, transparent);gap:.75rem;margin:4rem auto 0;padding:1.75rem;display:grid}.callout-head{align-items:center;gap:.85rem;display:flex}.callout-head strong{font-family:var(--font-display);font-size:1.2rem}.callout p{color:var(--text-2);margin:0}.callout .actions{margin-top:.5rem}.figure{margin:2.25rem 0}.figure a{border-radius:var(--radius);cursor:zoom-in;display:block}.figure img,.figure video{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-2);width:100%;height:auto;box-shadow:var(--shadow);display:block}.figure figcaption{color:var(--text-3);text-align:center;margin-top:.75rem;font-size:.875rem;line-height:1.5}.video video{aspect-ratio:16/9;background:#0b1220}.gallery{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:1.75rem 1.5rem;display:grid}.gallery .figure{margin:0}.gallery .figure img{aspect-ratio:4/3;object-fit:contain;background:var(--surface);box-shadow:var(--shadow-s);padding:.5rem;transition:transform .2s,box-shadow .2s}.gallery .figure a:hover img{box-shadow:var(--shadow);transform:translateY(-2px)}.gallery figcaption{text-align:left}.lightbox{color:#fff;background:#080e1af0;border:0;width:100vw;max-width:none;height:100vh;max-height:none;margin:0;padding:4rem 1rem 2rem}.lightbox[open]{flex-direction:column;justify-content:center;align-items:center;gap:1rem;display:flex}.lightbox::backdrop{background:0 0}.lightbox img{border-radius:var(--radius-s);background:#fff;width:auto;max-width:min(100%,1400px);height:auto;max-height:calc(100vh - 9rem);box-shadow:0 30px 80px #00000080}.lightbox p{text-align:center;color:#cbd5e1;max-width:70ch;margin:0;font-size:.95rem}.lightbox button{color:#fff;cursor:pointer;background:#ffffff1f;border:0;border-radius:50%;place-items:center;width:2.75rem;height:2.75rem;font-size:1.3rem;line-height:1;display:grid;position:absolute}.lightbox button:hover{background:#ffffff3d}.lightbox .lb-close{top:1rem;right:1rem}.lightbox .lb-prev,.lightbox .lb-next{top:50%;translate:0 -50%}.lightbox .lb-prev{left:1rem}.lightbox .lb-next{right:1rem}.lightbox .lb-prev[hidden],.lightbox .lb-next[hidden]{display:none}@media (width<=960px){.hero,.product-hero,.feature-product,.product-layout{grid-template-columns:minmax(0,1fr);gap:2.5rem}.product-aside{order:-1;position:static}.feature-product-visual{aspect-ratio:16/10}}@media (width<=640px){main{padding-block:2rem 4rem}.site-nav a{padding-inline:.6rem}.section-head{flex-direction:column;align-items:start}.post-header{text-align:left}.post-header .meta,.post-header .tags{justify-content:flex-start}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important}}.product-hero h1{margin-bottom:.75rem}.post-cover{object-fit:cover;object-position:center bottom;max-height:540px}@media (width<=480px){.brand span{display:none}.site-nav a{padding-inline:.55rem;font-size:.9rem}}
