/* main.css – entry point. build.mjs inlines these imports into dist/css/styles.css (order = cascade order). */
/* tokens.css – design system: the single source of truth for all visual values.
   Breakpoints (CSS cannot use variables inside @media – keep these in sync with the component files):
   mobile menu <=760px | single-column contact <=860px | footer 2 cols <=900px | small phones <=480/420/380px
   large screens >=1800/2400/3200px | short landscape height <=560px */
:root{
  /* Color */
  --color-bg:#000;--color-fg:#fff;--color-fg-soft:rgba(255,255,255,.7);
  --color-surface:rgba(255,255,255,.07);--color-surface-strong:rgba(255,255,255,.1);
  --color-field:rgba(255,255,255,.12);--color-popover:#141414;--color-modal:#111;--color-scrim:rgba(0,0,0,.75);
  /* Typography */
  --font-sans:"Google Sans","Noto Sans","Noto Sans JP","Noto Sans KR","Noto Sans SC","Noto Sans TC","Noto Sans Arabic","Noto Sans Hebrew","Noto Sans Thai","Noto Sans Devanagari","Noto Sans Bengali","Noto Sans Khmer","Noto Sans Lao","Noto Sans Myanmar",system-ui,sans-serif;
  --text-xs:.85rem;--text-sm:.9rem;--text-md:.95rem;--text-base:1rem;--text-xl:1.6rem;
  --text-h1:clamp(2.8rem,8vw,6rem);--text-h2:clamp(1.8rem,4vw,2.8rem);--text-nav-mobile:clamp(1.375rem,5.5vw,1.625rem);
  /* Spacing scale (n x 4px) */
  --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:28px;--space-8:32px;--space-10:40px;--space-12:48px;--space-14:56px;--space-18:72px;--space-24:96px;
  /* Radius */
  --radius-xs:6px;--radius-sm:8px;--radius-md:10px;
  /* Shadow */
  --shadow-popover:0 20px 40px rgba(0,0,0,.6);--shadow-focus:0 0 0 1.5px var(--color-fg);
  /* Stacking */
  --z-header:20;--z-safe-area:30;--z-dropdown:40;--z-skip:50;
  /* Motion */
  --ease-out:cubic-bezier(.2,.8,.2,1);
  /* Layout */
  --container-max:1600px;--gutter:clamp(20px,4vw,56px);
  --px:max(var(--gutter),calc((100vw - var(--container-max))/2));
  --sl:env(safe-area-inset-left,0px);--sr:env(safe-area-inset-right,0px);
  --hh:68px; /* header height – updated at runtime by js/modules/layout.js */
  color-scheme:dark;
}
@media (min-width:1800px){:root{font-size:112.5%}}
@media (min-width:2400px){:root{font-size:125%;--container-max:2000px}}
@media (min-width:3200px){:root{font-size:150%;--container-max:2400px}}
@media (prefers-contrast:more){:root{--color-fg-soft:rgba(255,255,255,.92);--color-surface:rgba(255,255,255,.16);--color-surface-strong:rgba(255,255,255,.22)}}

/* base.css – Reset, document defaults, focus */
/* Safe areas: keeps content clear of notches on phones */
:root{
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
html{
  scroll-behavior:smooth;
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
}
*,*::before,*::after{
  box-sizing:border-box;
}
body{
  margin:0;
  background:var(--color-bg);
  color:var(--color-fg);
  font:400 1rem/1.7 var(--font-sans);
  overflow-x:clip;
  overflow-wrap:break-word;
  -webkit-tap-highlight-color:transparent;
  -webkit-font-smoothing:antialiased;
}
body::before{
  content:"";
  position:fixed;
  inset:0 0 auto;
  height:env(safe-area-inset-top,0px);
  background:var(--color-bg);
  z-index:var(--z-safe-area);
}
a{
  color:inherit;
}
:focus-visible{
  outline:2px solid var(--color-fg);
  outline-offset:3px;
}
a:focus:not(:focus-visible),button:focus:not(:focus-visible){
  outline:none;
}
main{
  padding:0;
}

/* typography.css – Headings, copy, complex-script (Thai/Khmer/Lao/Myanmar) rules */
h2{
  font-size:var(--text-h2);
  line-height:1.1;
  letter-spacing:-.03em;
  margin:0 0 14px;
  font-weight:700;
}
.contact h1{
  font-size:var(--text-h1);
  line-height:1;
  letter-spacing:-.04em;
  margin:0 0 var(--space-5);
  font-weight:700;
}
.text-muted{
  color:var(--color-fg-soft);
  margin:0 0 var(--space-7);
}
h1,h2{
  text-wrap:balance;
  overflow-wrap:anywhere;
}
p{
  text-wrap:pretty;
}
html:is(:lang(th),:lang(km),:lang(lo),:lang(my)) *{
  letter-spacing:0!important;
}
html:is(:lang(th),:lang(km),:lang(lo),:lang(my)) body{
  line-height:1.85;
}
html:is(:lang(th),:lang(km),:lang(lo),:lang(my)) .contact h1{
  line-height:1.35;
}

/* utilities.css – Skip link, visually hidden, honeypot */
.honeypot{
  position:absolute;
  left:-9999px;
}
.skip-link{
  position:absolute;
  left:-999px;
  top:0;
  z-index:var(--z-skip);
  background:var(--color-fg);
  color:var(--color-bg);
  padding:10px var(--space-4);
}
.skip-link:focus{
  left:8px;
  top:8px;
}
.visually-hidden{
  position:absolute;
  width:1px;
  height:1px;
  overflow:hidden;
  clip:rect(0 0 0 0);
  white-space:nowrap;
}

/* Purely decorative images/backgrounds: add .decor (+ aria-hidden="true"). They ignore clicks and cannot be dragged or selected. */
.decor{
  pointer-events:none;
  user-select:none;
  -webkit-user-drag:none;
}

/* layout.css – Contact section layout */
.contact{
  margin-top:0;
  display:grid;
  grid-template-columns:1fr 1.1fr;
  gap:clamp(var(--space-8),5vw,var(--space-18));
  padding:var(--space-24) calc(var(--px) + var(--sr)) var(--space-24) calc(var(--px) + var(--sl));
  scroll-margin-top:var(--hh);
  align-items:start;
  align-content:center;
  min-height:calc(100vh - var(--hh)); /* fallback */
  min-height:calc(100svh - var(--hh));
}
@media (max-width:860px){
  .contact{
    grid-template-columns:1fr;
    padding-top:var(--space-14);
    padding-bottom:var(--space-14);
  }
}
@media (max-height:560px){
  .contact{
    min-height:auto;
    padding-top:var(--space-10);
    padding-bottom:var(--space-10);
  }
}

/* reveal.css – Scroll reveal */
.js [data-reveal]{
  opacity:0;
  transform:translateY(28px);
  transition:opacity .9s var(--ease-out),transform .9s var(--ease-out);
}
.js [data-reveal].is-visible{
  opacity:1;
  transform:none;
}

/* header.css – Site header and brand */
header{
  position:sticky;
  top:env(safe-area-inset-top,0px);
  z-index:var(--z-header);
  background:var(--color-bg);
}
.header__bar{
  padding:14px calc(var(--px) + var(--sr)) 14px calc(var(--px) + var(--sl));
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:var(--space-3);
}
.brand{
  display:flex;
  align-items:center;
  gap:var(--space-3);
  text-decoration:none;
  font-weight:700;
  letter-spacing:.02em;
}
.brand img{
  height:28px;
  width:auto;
  display:block;
}

/* nav.css – Desktop navigation */
.site-nav{
  display:flex;
  align-items:center;
  gap:var(--space-8);
}
.nav-link{
  display:inline-flex;
  align-items:center;
  min-height:44px;
  padding:0 14px;
  color:var(--color-fg-soft);
  text-decoration:none;
  font-weight:500;
  font-size:var(--text-md);
  background:linear-gradient(currentColor,currentColor) 14px calc(100% - 8px)/0 1px no-repeat;
  transition:color .25s,background-size .35s var(--ease-out);
}
@media (hover:hover){
  .nav-link:hover{
    color:var(--color-fg);
    background-size:calc(100% - 28px) 1px;
  }
}

/* mobile-nav.css – Full-screen mobile navigation */
.nav-toggle{
  display:none;
  position:relative;
  width:44px;
  height:44px;
  background:none;
  border:0;
  color:var(--color-fg);
  cursor:pointer;
}
.nav-toggle span{
  position:absolute;
  left:11px;
  right:11px;
  height:2px;
  background:currentColor;
  border-radius:2px;
  transition:transform .35s var(--ease-out),top .35s var(--ease-out);
}
.nav-toggle span:first-child{
  top:17px;
}
.nav-toggle span:last-child{
  top:25px;
}
.nav-toggle[aria-expanded=true] span:first-child{
  top:21px;
  transform:rotate(45deg);
}
.nav-toggle[aria-expanded=true] span:last-child{
  top:21px;
  transform:rotate(-45deg);
}
html.is-menu-open{
  overflow:hidden;
}
@media (max-width:760px){
  .nav-toggle{
    display:block;
  }
  .brand,.nav-toggle{
    position:relative;
    z-index:2;
  }
  .site-nav{
    position:fixed;
    inset:0;
    z-index:1;
    display:flex;
    flex-direction:column;
    align-items:center;
    gap:var(--space-7);
    padding:calc(var(--hh) + env(safe-area-inset-top,0px)) calc(var(--space-6) + var(--sr)) calc(var(--space-6) + env(safe-area-inset-bottom,0px)) calc(var(--space-6) + var(--sl));
    background:var(--color-bg);
    height:100vh; /* fallback */
  height:100dvh;
    overflow:auto;
    overscroll-behavior:contain;
    visibility:hidden;
    opacity:0;
    clip-path:inset(0 0 100% 0);
    transition:clip-path .65s var(--ease-out),opacity .4s .15s,visibility 0s .65s;
  }
  .site-nav.is-open{
    visibility:visible;
    opacity:1;
    clip-path:inset(0);
    transition:clip-path .65s var(--ease-out),opacity .25s,visibility 0s;
  }
  .site-nav>:first-child{
    margin-top:auto;
  }
  .site-nav>:last-child{
    margin-bottom:auto;
  }
  .site-nav>.nav-link{
    --i:0;
  }
  .site-nav>.lang-switch{
    --i:1;
  }
  .site-nav>*{
    opacity:0;
    transform:translateY(28px);
    transition:opacity .25s,transform .35s;
  }
  .site-nav.is-open>*{
    opacity:1;
    transform:none;
    transition:opacity .6s var(--ease-out),transform .8s var(--ease-out);
    transition-delay:calc(.2s + var(--i,0)*.1s);
  }
  .site-nav .nav-link{
    padding:0;
    min-height:0;
    background:none;
    color:var(--color-fg);
    font-size:var(--text-nav-mobile);
    font-weight:600;
    letter-spacing:-.01em;
    line-height:1.3;
  }
  .site-nav .lang-switch{
    display:flex;
    flex-direction:column;
    align-items:center;
  }
  .site-nav .lang-switch__button{
    width:auto;
    font-size:var(--text-xs);
  }
  .site-nav .lang-switch__list{
    position:static;
    width:min(260px,80vw);
    min-width:0;
    max-height:min(44vh,330px);
    margin-top:10px;
    box-shadow:none;
    text-align:center;
  }
  .site-nav .lang-switch__list button{
    text-align:center;
    font-size:var(--text-sm);
  }
}

/* button.css – Buttons */
.btn{
  display:inline-block;
  padding:14px var(--space-8);
  border:0;
  border-radius:var(--radius-sm);
  background:var(--color-fg);
  color:var(--color-bg);
  font:500 1rem var(--font-sans);
  text-decoration:none;
  cursor:pointer;
  transition:background .3s,transform .3s var(--ease-out);
}
.btn:active{
  transform:scale(.98);
}
@media (hover:hover){
  .btn:hover{
    background:var(--color-fg-soft);
    transform:translateY(-2px);
  }
}

/* language-switcher.css – Language dropdown */
.lang-switch{
  position:relative;
}
.lang-switch__button{
  display:inline-flex;
  align-items:center;
  gap:var(--space-2);
  padding:10px 14px;
  border:0;
  border-radius:var(--radius-sm);
  background:var(--color-surface-strong);
  color:var(--color-fg);
  font:500 .9rem var(--font-sans);
  cursor:pointer;
  transition:background .3s,color .3s;
  min-height:44px;
}
.lang-switch__button svg{
  width:16px;
  height:16px;
}
.lang-switch__button .lang-switch__chevron{
  transition:transform .3s var(--ease-out);
}
.lang-switch__button[aria-expanded=true] .lang-switch__chevron{
  transform:rotate(180deg);
}
.lang-switch__list{
  display:block;
  position:absolute;
  right:0;
  top:calc(100% + 8px);
  z-index:var(--z-dropdown);
  min-width:210px;
  max-height:60vh;
  overflow:auto;
  margin:0;
  padding:6px;
  list-style:none;
  line-height:1.5;
  background:var(--color-popover);
  border-radius:var(--radius-md);
  box-shadow:var(--shadow-popover);
  overscroll-behavior:contain;
}
.lang-switch__list[hidden]{
  display:none;
}
.lang-switch--up .lang-switch__list{
  top:auto;
  bottom:calc(100% + 8px);
  left:0;
  right:auto;
}
.lang-switch__list button{
  display:block;
  width:100%;
  text-align:left;
  padding:10px var(--space-3);
  border:0;
  border-radius:var(--radius-xs);
  background:none;
  color:var(--color-fg-soft);
  font:inherit;
  opacity:1;
  cursor:pointer;
  min-height:44px;
  line-height:1.6;
}
.lang-switch__list button[aria-current=true]{
  background:var(--color-surface-strong);
  color:var(--color-fg);
}
.social-links a:active,.lang-switch__button:active{
  opacity:.7;
}
@media (hover:hover){
  .lang-switch__button:hover{
    background:var(--color-fg);
    color:var(--color-bg);
  }
  .lang-switch__list button:hover{
    background:var(--color-surface-strong);
    color:var(--color-fg);
  }
}

/* social-links.css – Social icon links */
.social-links{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
}
.social-links a{
  display:grid;
  place-items:center;
  width:48px;
  height:48px;
  color:var(--color-fg-soft);
  transition:color .3s,transform .4s var(--ease-out);
}
.social-links svg{
  width:26px;
  height:26px;
  fill:currentColor;
}
@media (max-width:380px){
  .social-links{
    gap:2px;
  }
  .social-links a{
    width:44px;
    height:44px;
  }
}
@media (hover:hover){
  .social-links a:hover{
    color:var(--color-fg);
    transform:translateY(-4px) scale(1.12);
  }
}

/* form.css – Contact form fields and states */
form{
  display:grid;
  gap:14px;
  align-content:start;
  padding:var(--space-8);
  border-radius:var(--radius-md);
  background:var(--color-surface);
}
form label{
  display:grid;
  gap:6px;
  font-weight:500;
  font-size:var(--text-sm);
}
input,textarea{
  width:100%;
  font:inherit;
  color:var(--color-fg);
  background:var(--color-field);
  border:0;
  border-radius:var(--radius-sm);
  padding:14px 18px;
  transition:box-shadow .25s;
}
input:focus,textarea:focus{
  outline:none;
  box-shadow:var(--shadow-focus);
}
[aria-invalid=true]{
  outline:2px dashed var(--color-fg);
  outline-offset:2px;
}
textarea{
  resize:vertical;
  min-height:130px;
}
.form-status{
  min-height:1.5em;
  margin:0;
  font-weight:500;
}
.form-status.is-error{
  text-decoration:underline wavy;
  text-underline-offset:4px;
}
form .btn{
  justify-self:start;
}
.form-note{
  margin:0;
  font-size:var(--text-xs);
  color:var(--color-fg-soft);
}
.text-link{
  color:var(--color-fg);
  text-decoration:underline;
  text-underline-offset:3px;
}
@media (max-width:480px){
  form{
    padding:var(--space-5);
  }
  form .btn{
    justify-self:stretch;
  }
}

/* footer.css – Footer layout and links */
footer{
  margin-top:0;
  background:var(--color-surface);
  padding:var(--space-18) 0 var(--space-8);
}
.footer__inner{padding:0 calc(var(--px) + var(--sr)) 0 calc(var(--px) + var(--sl));}
.footer__grid{
  display:grid;
  grid-template-columns:1.6fr 1.2fr 1fr;
  gap:var(--space-10);
}
footer h2{
  font-size:var(--text-sm);
  font-weight:500;
  line-height:1.4;
  letter-spacing:0;
  color:var(--color-fg-soft);
  margin:0 0 var(--space-4);
}
.footer__bottom{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:var(--space-4);
  flex-wrap:wrap;
  margin-top:64px;
  color:var(--color-fg-soft);
  font-size:var(--text-sm);
}
.footer__copy{margin:0;}
.footer__links{display:flex;align-items:center;gap:var(--space-6);flex-wrap:wrap;}
.footer__link,.back-to-top{display:inline-flex;align-items:center;min-height:44px;text-decoration:none;}
.footer__link{color:var(--color-fg-soft);transition:color .25s;}
.back-to-top{gap:var(--space-2);color:var(--color-fg);}
.back-to-top svg{width:16px;height:16px;transition:transform .3s var(--ease-out);}
@media (max-width:900px){
  .footer__grid{grid-template-columns:1fr 1fr;gap:var(--space-8);}
  .footer__brand,.footer__grid>div:nth-child(2){grid-column:1/-1;}
}
@media (max-width:480px){
  footer{padding-top:var(--space-14);}
  .footer__bottom{margin-top:var(--space-10);}
}
@media (max-width:420px){
  .footer__grid{grid-template-columns:1fr;}
}
@media (hover:hover){
  .footer__link:hover{color:var(--color-fg);}
  .back-to-top:hover svg{transform:translateY(-3px);}
}

/* policy.css – long-form legal page (privacy policy) */
.policy{padding:var(--space-12) calc(var(--px) + var(--sr)) var(--space-24) calc(var(--px) + var(--sl));}
.policy h1{font-size:clamp(2.2rem,6vw,4rem);line-height:1.1;letter-spacing:-.03em;margin:0 0 var(--space-4);font-weight:700;}
.policy__head,.policy-toc,.policy__body{max-width:50rem;}
.policy-note:empty{display:none;}
.policy-toc{margin:var(--space-8) 0 var(--space-10);padding:var(--space-6);background:var(--color-surface);}
.policy-toc h2{font-size:var(--text-sm);font-weight:500;letter-spacing:0;color:var(--color-fg-soft);margin:0 0 var(--space-3);}
.policy-toc ol{margin:0;padding-left:var(--space-6);columns:2;column-gap:var(--space-8);}
.policy-toc li{padding:2px 0;}
.policy__body section{scroll-margin-top:calc(var(--hh) + var(--space-4));}
.policy__body h2{font-size:clamp(1.25rem,2.4vw,1.5rem);line-height:1.3;letter-spacing:-.01em;margin:var(--space-12) 0 var(--space-3);}
.policy__body p,.policy__body li{color:var(--color-fg-soft);}
.policy__body strong{color:var(--color-fg);font-weight:500;}
.policy__body ul{margin:0 0 var(--space-4);padding-left:var(--space-6);}
.policy__body li{margin-bottom:var(--space-2);}
.policy a{color:var(--color-fg);text-decoration:underline;text-underline-offset:3px;}
@media (max-width:600px){.policy-toc ol{columns:1;}}

/* accessibility.css – Reduced motion, forced colors */
@media (prefers-reduced-motion:reduce){
  html{
    scroll-behavior:auto;
  }
  *,*::before,*::after{
    animation:none!important;
    transition:none!important;
  }
  .js [data-reveal]{
    opacity:1;
    transform:none;
  }
}
@media (forced-colors:active){
  .btn,.lang-switch__button,input,textarea,.lang-switch__list,form{
    border:1px solid CanvasText;
  }
}

