@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}@font-face{font-family:Albert Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/albert-sans-latin-ext-wght-normal.BAo4qCk1.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:Albert Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/albert-sans-latin-wght-normal.BJ0ssN8N.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:dark;--color-bg:oklch(16% .03 298);--color-surface:oklch(20% .04 298);--color-surface-raised:oklch(24% .045 298);--color-border:oklch(33% .05 298);--color-text:oklch(95% .012 302);--color-text-muted:oklch(74% .035 300);--color-action:oklch(78% .15 300);--color-action-hover:oklch(84% .12 300);--color-on-action:oklch(18% .05 302);--color-highlight:oklch(78% .15 300);--color-code:oklch(82% .09 300);--color-feedback-success:oklch(82% .14 150);--font-display:"Bricolage Grotesque Variable", system-ui, sans-serif;--font-body:"Albert Sans Variable", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--radius-s:6px;--radius-m:10px;--radius-l:18px;--ease-out:cubic-bezier(.22, 1, .36, 1);--bg:var(--color-bg);--surface:var(--color-surface);--line:var(--color-border);--text:var(--color-text);--muted:var(--color-text-muted);--pink:var(--color-action);--soft:var(--color-code);--display:var(--font-display);--body:var(--font-body)}*{box-sizing:border-box;margin:0}html{scroll-behavior:smooth}body{background:var(--color-bg);color:var(--color-text);font:400 1.0625rem/1.6 var(--font-body);-webkit-font-smoothing:antialiased}a{color:inherit}:focus-visible{outline:2px solid var(--color-action);outline-offset:3px;border-radius:4px}.sr{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.wrap{width:min(100% - 2rem,68rem);margin-inline:auto}header.top{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding-block:1.5rem;display:flex}.logo{font:700 1.3rem var(--font-display);letter-spacing:-.02em;text-decoration:none}.logo span{color:var(--color-highlight)}nav a{color:var(--color-text-muted);margin-left:1.4rem;padding-block:.75rem;text-decoration:none;transition:color .15s;display:inline-block}nav a:hover{color:var(--color-text)}.hero{align-items:center;gap:2.5rem;padding-block:clamp(3rem,8vw,5.5rem) clamp(2.5rem,6vw,4rem);display:grid}@media (width>=62rem){.hero{grid-template-columns:1fr 24rem}}h1{font:800 clamp(2.3rem, 5vw, 3.6rem)/1.05 var(--font-display);letter-spacing:-.035em;text-wrap:balance}h1 .line{display:block}h1 em{color:var(--color-highlight);font-style:normal}.lede{color:var(--color-text-muted);max-width:36rem;margin-top:1.4rem;font-size:1.2rem}.hero-actions{flex-wrap:wrap;gap:.75rem;margin-top:2rem;display:flex}.proof{color:var(--color-text-muted);font:500 .85rem var(--font-mono);flex-wrap:wrap;gap:.5rem 1.25rem;margin-top:1.6rem;display:flex}.proof span:before{content:"— ";color:var(--color-border)}.stage{height:24rem;display:none;position:relative}@media (width>=62rem){.stage{display:block}}.orb{pointer-events:none;width:calc(100% + 8rem);height:100%;position:absolute;top:0;left:-4rem}.btn,.btn-ghost{cursor:pointer;font:700 1rem/1.5 var(--font-body);border-radius:var(--radius-m);transition:background-color .15s var(--ease-out), border-color .15s, color .15s, transform .1s;align-items:center;gap:.5rem;padding:.8rem 1.35rem;text-decoration:none;display:inline-flex}.btn{background:var(--color-action);color:var(--color-on-action);border:1px solid var(--color-action)}.btn:hover{background:var(--color-action-hover);border-color:var(--color-action-hover)}.btn-ghost{color:var(--color-text);border:1px solid var(--color-border);background:0 0}.btn-ghost:hover{border-color:var(--color-action);color:var(--color-action)}.btn:active,.btn-ghost:active{transform:translateY(1px)}.btn.done{background:var(--color-feedback-success);border-color:var(--color-feedback-success)}section{border-top:1px solid var(--color-border);padding-block:clamp(3rem,7vw,5rem)}h2{font:700 clamp(1.7rem, 3.6vw, 2.4rem)/1.1 var(--font-display);letter-spacing:-.03em}.sub{color:var(--color-text-muted);max-width:40rem;margin-top:.5rem}.more{color:var(--color-text-muted);margin-top:1.25rem}.services{margin-top:2rem;padding:0;list-style:none}.services li+li{border-top:1px solid var(--color-border)}.row{grid-template-columns:1fr auto;align-items:baseline;gap:.3rem 1.5rem;padding:1.4rem 0;text-decoration:none;display:grid}.row h3{font:700 clamp(1.3rem, 2.6vw, 1.7rem)/1.2 var(--font-display);letter-spacing:-.02em;transition:color .15s}.row p{color:var(--color-text-muted);grid-column:1;max-width:40rem}.row .price{font:600 .95rem var(--font-mono);color:var(--color-code);white-space:nowrap;grid-area:1/2;justify-self:end;align-items:center;gap:.4rem;display:inline-flex;position:relative}.row .price:after{content:"";opacity:.7;background:currentColor;width:.9em;height:.9em;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4M12 8h.01'/%3E%3C/svg%3E") 50%/contain no-repeat}.row .price:before{content:"Prices are in US dollars (USD)";z-index:1;white-space:nowrap;font:500 .8rem var(--font-body);color:var(--color-text);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-s);opacity:0;pointer-events:none;padding:.35rem .6rem;transition:opacity .15s;position:absolute;top:calc(100% + .4rem);right:0}.row .price:hover:before,.row:focus-visible .price:before{opacity:1}.row .arrow{color:var(--color-action);transition:transform .15s var(--ease-out);grid-area:2/2;justify-self:end}.row:hover h3,.row:focus-visible h3{color:var(--color-action)}.row:hover .arrow,.row:focus-visible .arrow{transform:translate(4px)}.about-grid{gap:2rem;margin-top:1.5rem;display:grid}@media (width>=62rem){.about-grid{grid-template-columns:1.5fr 1fr;align-items:start}}.about-text{gap:1rem;max-width:40rem;font-size:1.125rem;display:grid}.about-text p:first-child{color:var(--color-text)}.about-text p+p{color:var(--color-text-muted)}.about-points{border-left:2px solid var(--color-action);padding:0;gap:.7rem;margin:0;padding-left:1.2rem;list-style:none;display:grid}.work-list{gap:2.5rem;margin:2rem 0 0;padding:0;list-style:none;display:grid}.work-item{align-items:start;gap:1rem 2rem;display:grid}@media (width>=56rem){.work-item.feature{grid-template-columns:1.6fr 1fr}.work-item.feature.flip{grid-template-columns:1fr 1.6fr}.work-item.feature.flip figure{order:2}}.work-item figure{border:1px solid var(--color-border);border-radius:var(--radius-l);background:var(--color-surface);margin:0;overflow:hidden}.work-item figure img{width:100%;height:auto;display:block}.work-item figcaption{font:500 .8rem var(--font-mono);color:var(--color-text-muted);border-top:1px solid var(--color-border);padding:.6rem .9rem}.work-item h3{font:700 1.35rem/1.25 var(--font-display)}.work-item p{color:var(--color-text-muted);margin-top:.5rem}.work-item .tags{flex-wrap:wrap;gap:.35rem;margin-top:.9rem;display:flex}.work-item .tags span{font:600 .75rem/1 var(--font-mono);border-radius:var(--radius-s);background:var(--color-surface-raised);color:var(--color-code);padding:.35rem .5rem}.work-item.plain{border-top:1px dashed var(--color-border);padding-top:1.5rem}.contact{border:1px solid var(--color-border);border-radius:var(--radius-l);background:var(--color-surface);align-items:start;gap:2rem 3rem;padding:clamp(1.75rem,5vw,3.5rem);display:grid}@media (width>=52rem){.contact{grid-template-columns:1fr auto}}.contact h2{letter-spacing:-.035em;font-size:clamp(2rem,5vw,3.2rem);line-height:1.02}.contact h2 em{color:var(--color-highlight);font-style:normal}.contact .sub{max-width:30rem;margin-top:1rem;font-size:1.1rem}.include{flex-wrap:wrap;gap:.45rem;margin-top:1.4rem;padding:0;list-style:none;display:flex}.include li{border:1px solid var(--color-border);border-radius:var(--radius-s);color:var(--color-text-muted);padding:.3rem .7rem;font-size:.92rem}.reach{justify-items:start;gap:1.1rem;display:grid}@media (width>=52rem){.reach{text-align:right;justify-items:end}}.reach-label{color:var(--color-text-muted);font-size:.95rem;font-weight:600}a.mail,.contact .handle{font:700 clamp(1.6rem, 4vw, 2.5rem) var(--font-display);letter-spacing:-.03em;color:var(--color-action);text-decoration:none}.contact .handle{cursor:text;user-select:all}a.mail:hover{text-underline-offset:.2em;text-decoration:underline}.actions{flex-wrap:wrap;gap:.6rem;display:flex}.verify{width:100%;max-width:26rem;color:var(--color-text-muted);text-align:left;margin-top:.3rem;font-size:.92rem}.verify summary{cursor:pointer;color:var(--color-text);font-weight:600}.verify ol{gap:.45rem;margin:.7rem 0 0;padding-left:1.2rem;line-height:1.5;display:grid}.verify b{color:var(--color-text)}.verify>p{margin-top:.7rem}.verify>p a,.related-legal a{color:var(--color-action)}.related-legal{color:var(--color-text-muted);margin-top:2.5rem}.verify code{font:.88em var(--font-mono);color:var(--color-code);word-break:break-all}.verify a,.alt a{color:var(--color-action)}.alt{color:var(--color-text-muted);font-size:.92rem}footer{color:var(--color-text-muted);border-top:1px solid var(--color-border);padding-block:2.5rem 3rem;font-size:.95rem}footer a{color:inherit;text-underline-offset:.2em}footer a:hover{color:var(--color-action)}.verify-demo{gap:.8rem;max-width:26rem;margin-top:1.75rem;display:none}.contact:has(.verify[open]) .verify-demo{display:grid}.notes-list{gap:0;margin:2rem 0 0;padding:0;list-style:none;display:grid}.notes-list li+li{border-top:1px solid var(--color-border)}.notes-list a{padding:1.3rem 0;text-decoration:none;display:block}.notes-list a:hover h2{color:var(--color-action)}.notes-list h2{font-size:1.35rem;transition:color .15s}.notes-list p{color:var(--color-text-muted);margin-top:.4rem}.article{max-width:44rem;padding-block:clamp(3rem,8vw,5rem) 2rem}.article h1{font:800 clamp(2rem, 5vw, 3rem)/1.08 var(--font-display);letter-spacing:-.03em}.article .meta{color:var(--color-text-muted);margin-top:.8rem;font-size:.95rem}.article .prose{gap:1.1rem;margin-top:2rem;display:grid}.article .prose h2{margin-top:1rem;font-size:1.5rem}.article .prose p,.article .prose li{color:oklch(88% .025 302)}.article .prose ul,.article .prose ol{gap:.45rem;padding-left:1.3rem;display:grid}.article .prose code{font:.9em var(--font-mono);color:var(--color-code)}.article .prose pre{border-radius:var(--radius-m);border:1px solid var(--color-border);font:.85rem/1.6 var(--font-mono);color:var(--color-text-muted);background:oklch(13% .025 298);padding:1rem 1.2rem;overflow-x:auto}.article .prose a{color:var(--color-action)}.article .back{color:var(--color-action);margin-top:2.5rem;display:inline-block}.related{border-top:1px solid var(--color-border);margin-top:3rem;padding-top:1.5rem}.related h2{font-size:1.2rem}.related ul{gap:.5rem;margin-top:.8rem;padding-left:1.2rem;display:grid}.related a{color:var(--color-action)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}@media (width<=40rem){header.top{flex-wrap:wrap;row-gap:0}nav{width:100%}nav a{margin:0 1.1rem 0 0;padding-block:.4rem}.row{grid-template-columns:1fr}.row .price{grid-area:2/1;justify-self:start}.row p{grid-row:3}.row .arrow{display:none}.row .price:before{left:0;right:auto}}@media (width<=51.99rem){.contact{row-gap:1.1rem}.contact>div:first-child{display:contents}.contact .reach{order:1;margin-top:.9rem}.contact .verify-demo{order:2;margin-top:.4rem}}.review-list{gap:1rem;margin-top:1.75rem;padding:0;list-style:none;display:grid}@media (width>=48rem){.review-list{grid-template-columns:repeat(2,1fr)}}.review-list li{border:1px solid var(--color-border);border-radius:var(--radius-m);background:var(--color-surface);align-content:start;gap:.8rem;padding:1.4rem 1.5rem;display:grid}.review-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.stars{color:var(--color-highlight);letter-spacing:.12em;font-size:.95rem}.review-top .for{font:600 .75rem/1 var(--font-mono);border-radius:var(--radius-s);background:var(--color-surface-raised);color:var(--color-code);padding:.35rem .5rem}.review-list blockquote{white-space:pre-line;overflow-wrap:anywhere;font-size:1.05rem}.who{color:var(--color-text-muted);flex-wrap:wrap;gap:.25rem .6rem;font-size:.92rem;display:flex}.who strong{color:var(--color-text)}.review-form{gap:1.2rem;margin-top:2rem;display:grid}.review-form label,.review-form legend{gap:.4rem;font-size:.95rem;font-weight:600;display:grid}.review-form .opt{color:var(--color-text-muted);font-weight:400}.review-form input[type=text],.review-form textarea{font:inherit;color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-m);width:100%;padding:.75rem .9rem}.review-form input[type=text]:focus,.review-form textarea:focus{border-color:var(--color-action);outline:none}.review-form textarea{resize:vertical;min-height:9rem}.review-form fieldset{border:0;padding:0}.rating{gap:.4rem;margin-top:.4rem;display:flex}.rating label{cursor:pointer}.rating input{opacity:0;width:1px;height:1px;position:absolute}.rating span{border:1px solid var(--color-border);border-radius:var(--radius-m);place-items:center;min-width:3rem;padding:.55rem .7rem;font-weight:700;display:grid}.rating input:checked+span{border-color:var(--color-action);color:var(--color-action)}.rating input:focus-visible+span{outline:2px solid var(--color-action);outline-offset:2px}.form-status{color:var(--color-text-muted)}.form-status.bad{color:oklch(75% .16 25)}.review-form button[disabled]{opacity:.5;cursor:default}.service-page .lede{color:var(--color-text-muted);margin-top:1.2rem;font-size:1.2rem}.service-price{color:var(--color-text-muted);margin-top:1rem}.service-price b{color:var(--color-code);font-family:var(--font-mono)}.article .prose h3{margin-top:.4rem;font-size:1.1rem}
