@font-face{font-family:Inter;src:url(/assets/fonts/inter-latin-wght.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap;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:Inter;src:url(/assets/fonts/inter-latin-ext-wght.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,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:IBM Plex Sans Thai;src:url(/assets/fonts/ibm-plex-sans-thai-thai-400.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:IBM Plex Sans Thai;src:url(/assets/fonts/ibm-plex-sans-thai-thai-500.woff2)format("woff2");font-weight:500;font-display:swap;unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:IBM Plex Sans Thai;src:url(/assets/fonts/ibm-plex-sans-thai-thai-600.woff2)format("woff2");font-weight:600 700;font-display:swap;unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/ibm-plex-mono-latin-400.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/ibm-plex-mono-latin-500.woff2)format("woff2");font-weight:500 700;font-display:swap}:root{--space-navy:#101827;--orbit-blue:#283752;--moon-blue:#b8cced;--cloud-white:#f3f5f8;--spark-gold:#e9b86d;--spark-gold-deep:#b38530;--slate:#666f82;--link-blue:#2e5596;--bg:var(--cloud-white);--ink:var(--space-navy);--cat:var(--space-navy);--moon:var(--spark-gold-deep);--slogan:var(--orbit-blue);--link:var(--link-blue);--focus:var(--link-blue);--muted:var(--slate);--glow-a:#b8cced9e;--glow-b:#e9b86d14;--sans:"Inter", "IBM Plex Sans Thai", "Noto Sans Thai", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--ease-out:cubic-bezier(.16, .84, .24, 1);--ease-pop:cubic-bezier(.34, 1.56, .64, 1);color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:var(--space-navy);--ink:var(--cloud-white);--cat:var(--moon-blue);--moon:var(--spark-gold);--slogan:var(--moon-blue);--link:var(--moon-blue);--focus:var(--moon-blue);--muted:#9aa3b5;--glow-a:#283752f2;--glow-b:#e9b86d12;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:clip}body{background:var(--bg);min-height:100svh;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;isolation:isolate;grid-template-rows:1fr auto;margin:0;font-size:1rem;line-height:1.5;display:grid;position:relative;overflow-x:hidden}:lang(th){letter-spacing:0;line-height:1.7}p,h1{margin:0}.glow{z-index:-1;pointer-events:none;background:radial-gradient(closest-side at 50% 40%, var(--glow-a), transparent 72%), radial-gradient(closest-side at 58% 34%, var(--glow-b), transparent 60%);animation:1.6s ease-out both glow-in,28s ease-in-out 1.6s infinite alternate glow-drift;position:fixed;inset:-25%}.stage{text-align:center;padding:max(2rem, env(safe-area-inset-top)) max(1.25rem, env(safe-area-inset-right)) 1rem max(1.25rem, env(safe-area-inset-left));flex-direction:column;justify-content:center;align-items:center;display:flex}.brand{font-weight:inherit;font-size:inherit;color:inherit;flex-direction:column;align-items:center;text-decoration:none;display:flex}.mark-wrap{-webkit-tap-highlight-color:transparent;margin-bottom:clamp(1rem,3.2svh,2.5rem);display:block;position:relative}.brand-link .mark-wrap{margin-bottom:1.25rem}.mark{aspect-ratio:1;width:clamp(112px,min(36vw,25svh),440px);height:auto;display:block;overflow:visible}.mark-sm{width:clamp(88px,min(22vw,16svh),160px)}.moonlight{z-index:-1;aspect-ratio:1;pointer-events:none;opacity:0;contain:strict;width:260%;transition:opacity 1.4s ease-out;position:absolute;top:50%;left:50%;translate:-50% -50%}.moonlight.is-on{opacity:1}.moonlight canvas{width:100%;height:100%;display:block}.m-moon path{fill:var(--moon)}.m-cat path{fill:var(--cat)}.m-spark path{fill:var(--moon)}.wordmark{letter-spacing:-.015em;white-space:nowrap;color:var(--ink);font-size:clamp(1.75rem,min(10.5vw,9.2svh),11rem);font-weight:800;line-height:1.04;display:block}.w{display:inline-block}.slogan{font-family:var(--mono);letter-spacing:.04em;color:var(--slogan);margin-top:clamp(.75rem,2.2svh,1.75rem);font-size:clamp(.95rem,min(3.6vw,2.6svh),2.6rem);font-weight:400}.contact{margin-top:clamp(1.75rem,5.5svh,4.5rem);font-size:clamp(1.0625rem,min(4.4vw,2.2svh),2.2rem);font-weight:500}.contact a{color:var(--link);transition:background-size .35s var(--ease-out), color .2s;background:linear-gradient(currentColor,currentColor) 0 100%/100% 1px no-repeat;padding:.2em .1em;text-decoration:none}.contact a:hover{background-size:100% 2px}.contact a:focus-visible,.brand-link:focus-visible{outline:2px solid var(--focus);outline-offset:5px;border-radius:4px}.brand-link{color:inherit;text-decoration:none}.labs{letter-spacing:.01em;color:var(--muted);margin-top:clamp(.6rem,1.6svh,1.1rem);font-size:clamp(.8125rem,min(3.4vw,1.5svh),1.5rem);font-weight:500}.foot{padding:1rem 1.25rem max(1.25rem, env(safe-area-inset-bottom));text-align:center;color:var(--muted);font-size:clamp(.75rem,min(3vw,1.4svh),1.3rem)}.code{font-family:var(--mono);letter-spacing:.2em;color:var(--muted);font-size:.875rem}.nf-title{letter-spacing:-.02em;margin-top:.5rem;font-size:clamp(1.75rem,5vw,3.5rem);font-weight:800;line-height:1.1}.m-moon,.m-moon path{transform-box:view-box;transform-origin:50%}.m-spark,.m-spark g,.m-spark path{transform-box:fill-box;transform-origin:50%}.m-cat,.m-cat path{transform-box:fill-box;transform-origin:50% 100%}@media (prefers-reduced-motion:no-preference){.m-moon{animation:1.3s cubic-bezier(.33,1,.68,1) 50ms both moon-in}.m-cat{animation:cat-in .95s var(--ease-out) .25s both}.m-cat path{animation:5.2s ease-in-out 2.4s infinite breathe}.m-spark{animation:spark-in .6s var(--ease-pop) .95s both}.m-spark path{animation:8s ease-in-out 1.5s infinite twinkle}.w{animation:word-in .75s var(--ease-out) both}.w1{animation-delay:.85s}.w2{animation-delay:.95s}.w3{animation-delay:1.05s}.w4{animation-delay:1.2s}.slogan{animation:slogan-in 1s var(--ease-out) 1.35s both}.contact{animation:rise-in .6s var(--ease-out) 1.8s both}.labs,.foot{animation:rise-in .55s var(--ease-out) 1.95s both}.is-404 .code,.is-404 .nf-title{animation:rise-in .6s var(--ease-out) .6s both}.is-404 .contact{animation-delay:.9s}.m-moon path{transition:transform .7s var(--ease-pop)}}@media (prefers-reduced-motion:no-preference) and (hover:hover){.brand:hover .m-moon path{transform:rotate(-7deg)}.brand:hover .m-spark g{animation:spark-hover .8s var(--ease-pop)}}@media (prefers-reduced-motion:no-preference){.brand.is-delight .m-moon path{transform:rotate(-7deg)}.brand.is-delight .m-spark g{animation:spark-hover .8s var(--ease-pop)}}@keyframes glow-in{0%{opacity:0}to{opacity:1}}@keyframes glow-drift{0%{transform:translate(0,0)scale(1)}50%{transform:translate(2.5%,-1.5%)scale(1.06)}to{transform:translate(-2%,1.5%)scale(.97)}}@keyframes moon-in{0%{opacity:0;transform:rotate(-100deg)scale(.9)}35%{opacity:1}to{opacity:1;transform:none}}@keyframes cat-in{0%{opacity:0;transform:translateY(5%)scale(.93)}to{opacity:1;transform:none}}@keyframes breathe{0%,to{transform:none}45%{transform:scale(1.012,1.022)}}@keyframes spark-in{0%{opacity:0;transform:scale(0)rotate(-90deg)}to{opacity:1;transform:none}}@keyframes twinkle{0%,30%,to{opacity:1;transform:none}5%{opacity:.55;transform:scale(.55)rotate(20deg)}10%{opacity:1;transform:scale(1.22)}15%{transform:none}20%{opacity:.6;transform:scale(.6)rotate(-15deg)}25%{opacity:1;transform:scale(1.15)}}@keyframes spark-hover{0%{transform:none}40%{transform:scale(.5)rotate(90deg)}75%{transform:scale(1.3)rotate(180deg)}to{transform:rotate(180deg)}}@keyframes word-in{0%{opacity:0;filter:blur(6px);transform:translateY(.42em)}to{opacity:1;filter:none;transform:none}}@keyframes slogan-in{0%{opacity:0;letter-spacing:.32em}to{opacity:1;letter-spacing:.04em}}@keyframes rise-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}@media (forced-colors:active){.m-moon path,.m-cat path,.m-spark path{fill:canvastext}.glow,.moonlight{display:none}}
