/* v2/local-fonts.css */
/* Local Noto Sans Thai — OFL: ../fonts/noto-sans-thai/OFL.txt */
@font-face {
  font-family: "Noto Sans Thai";
  src: url("/assets/fonts/noto-sans-thai/NotoSansThai-Weight.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

/* Sarabun fallback weights if variable font fails */
@font-face {
  font-family: "Sarabun";
  src: url("/assets/fonts/sarabun/Sarabun-Regular.ttf") format("truetype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sarabun";
  src: url("/assets/fonts/sarabun/Sarabun-Medium.ttf") format("truetype");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sarabun";
  src: url("/assets/fonts/sarabun/Sarabun-SemiBold.ttf") format("truetype");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sarabun";
  src: url("/assets/fonts/sarabun/Sarabun-Bold.ttf") format("truetype");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

html,
body,
body.tpl-landing,
body.abouts-page,
body.tpl-list {
  font-family: "Noto Sans Thai", Tahoma, sans-serif;
}

/* css/skeleton.css */
.sk{position:relative;overflow:hidden;background:#E9EFF5;border-radius:8px}
.sk::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.65),transparent);animation:tsa-sk-shimmer 1.3s ease-in-out infinite}
@keyframes tsa-sk-shimmer{to{transform:translateX(100%)}}
.sk-line{display:block;height:12px;margin-top:10px}.sk-title{display:block;height:20px;margin-top:12px}.sk-chip{display:inline-block;width:110px;height:26px;border-radius:999px}.sk-btn{display:inline-block;width:120px;height:44px;border-radius:999px}.sk-img{display:block;border-radius:0}.sk-wrap{pointer-events:none}
.tsa-sk-layer{position:absolute;inset:0;z-index:4;overflow:hidden;background:var(--tsa-sk-paper,#fff);border-radius:inherit;pointer-events:none}
.tsa-sk-layer>.sk-wrap{height:100%;width:100%}.tsa-sk-shape{height:100%;min-height:100%;width:100%}
.tsa-sk-lines{display:grid;align-content:start;gap:12px;padding:20px}.tsa-sk-lines .sk{margin:0;min-height:12px}.tsa-sk-lines .sk:nth-child(3n){width:65%}
.tsa-sk-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:16px;height:100%}
.tsa-sk-card{overflow:hidden;border:1px solid #E3EAF1;border-radius:20px;min-width:0}.tsa-sk-card>.sk-img{height:150px}.tsa-sk-card>.tsa-sk-lines{padding:16px}
.tsa-sk-course-feature{display:grid;grid-template-columns:1fr 1.15fr;height:100%;min-height:320px;border-radius:24px;overflow:hidden}.tsa-sk-course-feature>.sk-img{height:100%}
.sk-slow,.sk-error{padding:12px 16px;border-radius:14px;background:#FFF8E6;color:#5C4200;font:400 14px/1.7 "Noto Sans Thai",sans-serif}
.sk-slow{position:absolute;bottom:12px;left:12px;right:12px;z-index:6;margin:0}.sk-error{background:#FDECEC;color:#7A1C1C}
.sk-slow button,.sk-error button{min-height:36px;margin-left:8px;padding:0 4px;border:0;background:none;color:#0F5FD6;font:500 14px/1.5 "Noto Sans Thai",sans-serif;cursor:pointer}
.sk-row td{padding:12px 14px}.sk-row .sk{display:block;height:12px}
.tsa-sk-table{position:absolute;z-index:5;pointer-events:none;background:var(--tsa-sk-paper,#fff);overflow:hidden}.tsa-sk-table-row{display:grid;align-items:center;border-bottom:1px solid #E3EAF1;padding:0 14px;gap:24px}.tsa-sk-table-row>.sk{height:12px}
.tsa-load-progress{position:fixed;inset:0 auto auto 0;height:3px;width:70%;z-index:2147483000;background:#0F5FD6;transform-origin:left;animation:tsa-load-progress 12s ease-out forwards;pointer-events:none}
@keyframes tsa-load-progress{from{transform:scaleX(.08)}to{transform:scaleX(1.35)}}
.tsa-sk-sr,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
img.tsa-image-ready{animation:tsa-image-in .2s ease-out}@keyframes tsa-image-in{from{opacity:0}to{opacity:1}}
.tsa-image-fallback{position:absolute;inset:0;display:grid;place-items:center;background:#E9EFF5;color:#7190b0;font-size:32px}
[data-theme=dark] .tsa-sk-layer,.dark .tsa-sk-layer{--tsa-sk-paper:#111e30}[data-theme=dark] .sk,.dark .sk{background:#1C2A3D}[data-theme=dark] .sk::after,.dark .sk::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.06),transparent)}
@media(max-width:760px){.tsa-sk-course-feature{grid-template-columns:1fr;grid-template-rows:180px 1fr}.tsa-sk-course-feature>.sk-img{height:180px}}
@media(prefers-reduced-motion:reduce){.sk::after,.tsa-load-progress,img.tsa-image-ready{animation:none}}
/* Spinner ในปุ่มที่กดแล้วต้องรอ (ส่งฟอร์ม / โหลดข้อมูล) — ใช้ผ่าน TSA.busy() */
.tsa-spin{display:inline-block;flex:none;width:1em;height:1em;margin-inline-end:.45em;vertical-align:-.15em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:tsa-spin .7s linear infinite}
.tsa-spin.tsa-action-spinner,.tsa-spin.tsa-dlg-spin{box-sizing:border-box;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;animation:tsa-spin .7s linear infinite}
@keyframes tsa-spin{to{transform:rotate(360deg)}}
[data-tsa-busy]{cursor:progress}a[data-tsa-busy]{pointer-events:none}
@media(prefers-reduced-motion:reduce){.tsa-spin,.tsa-spin.tsa-action-spinner,.tsa-spin.tsa-dlg-spin{animation:none;border-style:dotted}}
@media(prefers-reduced-motion:reduce){.tsa-ticker-active [data-ticker-copy]{display:none}}

/* v2/site-nav.css */
/* =========================================================
   Site Nav Shell — extracted from cinematic for all pages
   Use with site-foundation.css. Landing may still load cinematic
   for motion-hero / map-intro only.
   ========================================================= */

:root {
  --ink: #071b34;
  --blue: #126cf3;
  --paper: #f4f7fa;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
  --site-wrap: 1200px;
  --site-gutter: clamp(16px, 4vw, 40px);
  --nav-top: 16px;
  --nav-h: 64px;
  --nav-gap: 32px;
  --nav-offset: calc(var(--nav-top) + var(--nav-h) + var(--nav-gap));
}

*,
*::before,
*::after { box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--nav-top) + var(--nav-h) + 16px);
}

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: "Noto Sans Thai", sans-serif;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; }

.skip {
  position: fixed;
  left: 12px;
  top: -80px;
  z-index: 2100;
  background: #fff;
  padding: 10px 16px;
  border-radius: 8px;
}
.skip:focus { top: 12px; }

.noise {
  position: fixed;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.6'/%3E%3C/svg%3E");
}

/* ——— Loader ——— */
.loader {
  position: fixed;
  inset: 0;
  z-index: 2500;
  overflow: hidden;
  display: grid;
  place-items: center;
  align-content: center;
  color: #fff;
  background: radial-gradient(circle at 50% 48%, #0c2d59 0, #071f40 42%, #06182f 100%);
  transition: clip-path 1s var(--ease), visibility 1s;
  clip-path: inset(0);
}
.loader.done {
  clip-path: inset(0 0 100% 0);
  visibility: hidden;
}
.loader:before {
  content: "";
  position: absolute;
  inset: -25%;
  pointer-events: none;
  background: conic-gradient(from 180deg at 50% 50%, transparent, rgba(25, 135, 255, 0.09), transparent 28%, rgba(93, 203, 255, 0.07), transparent 62%);
  animation: loaderAtmosphere 8s linear infinite;
}
.loader-brand-stage {
  position: relative;
  width: 410px;
  height: 154px;
  display: grid;
  place-items: center;
  animation: loaderBrandIn 0.9s var(--ease) both;
}
.loader-logo-card {
  position: relative;
  z-index: 3;
  width: 340px;
  height: 102px;
  display: grid;
  place-items: center;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.72);
  border-radius: 30px;
  background: linear-gradient(120deg, rgba(255, 255, 255, 0.98), rgba(238, 247, 255, 0.86));
  box-shadow: 0 30px 90px rgba(0, 0, 0, 0.28), 0 0 58px rgba(29, 137, 255, 0.22), inset 0 1px 0 #fff;
  backdrop-filter: blur(18px);
  animation: loaderCardFloat 2.6s ease-in-out 0.8s infinite alternate;
}
.loader-logo-card:after {
  content: "";
  position: absolute;
  top: -45%;
  bottom: -45%;
  left: -38%;
  width: 24%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.95), rgba(109, 197, 255, 0.38), transparent);
  filter: blur(2px);
  transform: skewX(-18deg);
  animation: loaderLogoSweep 1.7s var(--ease) 0.35s infinite;
}
.loader-logo-card img {
  position: relative;
  z-index: 1;
  width: 270px;
  height: 76px;
  object-fit: contain;
  mix-blend-mode: multiply;
  animation: loaderLogoFocus 0.95s var(--ease) 0.12s both;
}
.loader-orbit {
  position: absolute;
  z-index: 1;
  inset: 2px;
  border: 1px solid rgba(90, 190, 255, 0.28);
  border-radius: 50%;
  animation: loaderOrbit 3.2s linear infinite;
}
.loader-orbit:before {
  content: "";
  position: absolute;
  left: 11%;
  top: 9%;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #43bfff;
  box-shadow: 0 0 18px #2a9fff, 0 0 36px rgba(42, 159, 255, 0.7);
}
.loader-orbit.orbit-b {
  inset: 17px -10px;
  opacity: 0.48;
  animation-direction: reverse;
  animation-duration: 4.6s;
}
.loader-orbit.orbit-b:before {
  left: auto;
  right: 15%;
  top: auto;
  bottom: 4%;
  width: 5px;
  height: 5px;
}
.loader-track {
  position: relative;
  width: 230px;
  height: 2px;
  margin-top: 24px;
  overflow: hidden;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.13);
}
.loader-track i {
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, #25a7ff 38%, #fff 52%, #25a7ff 66%, transparent);
  transform: translateX(-100%);
  animation: loaderTrack 1.05s var(--ease) infinite;
}
.loader > p {
  position: relative;
  margin: 15px 0 0;
  font-size: 10px;
  letter-spacing: 0.14em;
  color: #8da6c6;
  animation: loaderCaption 1.1s ease 0.35s both;
}
@keyframes loaderBrandIn {
  from { opacity: 0; transform: scale(0.88); filter: blur(12px); }
  to { opacity: 1; transform: none; filter: none; }
}
@keyframes loaderLogoFocus {
  from { opacity: 0; transform: scale(1.12); filter: blur(8px); }
  to { opacity: 1; transform: none; filter: none; }
}
@keyframes loaderCardFloat {
  to {
    transform: translateY(-5px);
    box-shadow: 0 38px 100px rgba(0, 0, 0, 0.3), 0 0 76px rgba(29, 137, 255, 0.3), inset 0 1px 0 #fff;
  }
}
@keyframes loaderLogoSweep {
  0%, 18% { left: -38%; opacity: 0; }
  32% { opacity: 1; }
  58%, 100% { left: 118%; opacity: 0; }
}
@keyframes loaderOrbit { to { transform: rotate(360deg); } }
@keyframes loaderTrack { to { transform: translateX(100%); } }
@keyframes loaderAtmosphere { to { transform: rotate(360deg); } }
@keyframes loaderCaption {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}
@media (max-width: 520px) {
  .loader-brand-stage { width: 330px; height: 130px; }
  .loader-logo-card { width: 286px; height: 88px; border-radius: 26px; }
  .loader-logo-card img { width: 228px; height: 64px; }
  .loader-track { width: 190px; margin-top: 18px; }
  .loader > p { font-size: 9px; }
}
@media (prefers-reduced-motion: reduce) {
  .loader { display: none; }
  .loader:before,
  .loader-brand-stage,
  .loader-logo-card,
  .loader-logo-card:after,
  .loader-logo-card img,
  .loader-orbit,
  .loader-track i,
  .loader > p { animation: none !important; }
}

/* ——— Capsule navigation ——— */
.nav-shell {
  position: fixed;
  z-index: 1500;
  top: var(--nav-top);
  left: 50%;
  right: auto;
  width: min(var(--site-wrap), calc(100% - var(--site-gutter) - var(--site-gutter)));
  height: var(--nav-h);
  padding: 5px 12px;
  display: flex;
  align-items: center;
  transform: translateX(-50%);
  border: 1px solid rgba(255, 255, 255, 0.46);
  border-radius: 19px;
  background: linear-gradient(115deg, rgba(255, 255, 255, 0.32), rgba(244, 250, 255, 0.1));
  box-shadow:
    0 18px 50px rgba(8, 35, 67, 0.09),
    inset 0 1px 0 rgba(255, 255, 255, 0.66),
    inset 0 -1px 0 rgba(123, 164, 203, 0.06);
  backdrop-filter: blur(22px) saturate(165%);
  -webkit-backdrop-filter: blur(22px) saturate(165%);
  transition: top 0.45s var(--ease), width 0.45s var(--ease), height 0.45s var(--ease), box-shadow 0.45s var(--ease), background 0.45s ease;
  animation: navEnter 0.8s var(--ease) 0.15s both;
  pointer-events: auto;
}
.nav-shell.is-scrolled {
  top: var(--nav-top);
  width: min(var(--site-wrap), calc(100% - var(--site-gutter) - var(--site-gutter)));
  height: var(--nav-h);
  background: rgba(255, 255, 255, 0.96);
  border-color: rgba(7, 27, 52, 0.08);
  box-shadow: 0 8px 24px rgba(7, 27, 52, 0.08);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
@keyframes navEnter {
  from { opacity: 0; transform: translate(-50%, -18px) scale(0.97); }
  to { opacity: 1; transform: translateX(-50%) scale(1); }
}

.brand { width: 170px; flex: 0 0 auto; }
.brand img {
  width: 100%;
  height: 40px;
  object-fit: contain;
  display: block;
  mix-blend-mode: normal;
  transition: height 0.45s var(--ease);
}
.nav-shell.is-scrolled .brand img { height: 40px; }

.desktop-nav {
  display: flex;
  gap: 2px;
  margin: auto;
  align-self: stretch;
  align-items: center;
  font-size: 12px;
  font-weight: 650;
  padding: 4px;
  border-radius: 15px;
}
.desktop-nav .nav-primary-link {
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--ink);
  font: 500 11.5px/1.45 "Noto Sans Thai", sans-serif;
  padding: 10px 9px;
  border-radius: 999px;
  white-space: nowrap;
  cursor: pointer;
  transition: color 0.3s ease, background 0.3s ease, transform 0.3s var(--ease);
}
.desktop-nav .nav-primary-link:hover,
.desktop-nav .nav-primary-link:focus-visible {
  color: var(--blue);
  background: rgba(255, 255, 255, 0.45);
  transform: translateY(-1px);
}
.desktop-nav .nav-primary-link.active {
  color: #fff;
  background: var(--blue);
  box-shadow: 0 8px 20px rgba(31, 130, 242, 0.22);
}
.nav-primary-link > span { display: none; }

.nav-group {
  position: relative;
  display: flex;
  align-items: center;
  height: 100%;
}
.nav-group.open .nav-dropdown-trigger {
  color: var(--blue);
  background: rgba(225, 240, 255, 0.58);
}
.nav-dropdown {
  position: absolute;
  z-index: 100;
  left: 50%;
  top: calc(100% + 7px);
  width: 250px;
  padding: 10px;
  border: 1px solid rgba(255, 255, 255, 0.76);
  border-radius: 22px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.94), rgba(239, 247, 255, 0.88));
  box-shadow: 0 24px 60px rgba(7, 24, 49, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.95);
  backdrop-filter: blur(28px) saturate(155%);
  -webkit-backdrop-filter: blur(28px) saturate(155%);
  opacity: 0;
  visibility: hidden;
  transform: translate(-50%, -9px) scale(0.97);
  transform-origin: top;
  transition: opacity 0.25s ease, visibility 0.25s ease, transform 0.35s var(--ease);
}
.nav-group.open > .nav-dropdown {
  opacity: 1;
  visibility: visible;
  transform: translate(-50%, 0) scale(1);
}
.desktop-nav .nav-dropdown a {
  display: block;
  padding: 10px 12px;
  border-radius: 12px;
  color: #203751;
  font-size: 10px;
  font-weight: 500;
  line-height: 1.45;
  transition: color 0.22s ease, background 0.22s ease, transform 0.22s var(--ease);
}
.desktop-nav .nav-dropdown a:hover,
.desktop-nav .nav-dropdown a:focus-visible {
  color: var(--blue);
  background: rgba(255, 255, 255, 0.72);
  transform: translateX(3px);
}
.nav-subgroup {
  padding: 6px 6px 7px;
  margin-bottom: 5px;
  border-radius: 14px;
  background: rgba(227, 240, 252, 0.52);
}
.nav-subgroup b {
  display: block;
  padding: 3px 6px 5px;
  font-size: 8px;
  letter-spacing: 0.08em;
  color: #70839a;
}
.desktop-nav .nav-subgroup a { padding-left: 16px; }
.compact-dropdown { width: 215px; }
.stats-dropdown { width: 240px; }

.nav-actions {
  display: flex;
  align-items: center;
  gap: 7px;
  flex-shrink: 0;
}
.language {
  border: 0;
  background: transparent;
  height: 38px;
  padding: 0 10px;
  border-radius: 12px;
  font-size: 11px;
  font-weight: 700;
  cursor: pointer;
}
.language span { color: #98a2b1; font-weight: 400; }
.login {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  min-width: 112px;
  min-height: 40px;
  padding: 0 17px;
  border-radius: 999px;
  background: var(--ink);
  color: #fff;
  font-size: 11.5px;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
  transition: transform 0.3s var(--ease), background 0.3s ease, box-shadow 0.3s ease;
}
.login:hover {
  background: var(--blue);
  transform: translateY(-1px);
  box-shadow: 0 9px 20px rgba(31, 130, 242, 0.23);
}
.login span { display: inline-block; line-height: 1; }
.menu-button { display: none; }
.mobile-menu { display: none; }

@media (min-width: 1101px) and (max-width: 1250px) {
  .desktop-nav .nav-primary-link { padding-inline: 7px; font-size: 10.35px; }
  .language { display: none; }
  .login { min-width: 100px; padding-inline: 17px; font-size: 10.35px; }
}

@media (max-width: 1100px) {
  .nav-shell,
  .nav-shell.is-scrolled {
    top: var(--nav-top);
    width: min(var(--site-wrap), calc(100% - var(--site-gutter) - var(--site-gutter)));
    height: var(--nav-h);
    padding: 4px 12px;
    border-radius: 18px;
  }
  .nav-shell {
    background: linear-gradient(115deg, rgba(255, 255, 255, 0.36), rgba(238, 248, 255, 0.14));
    border-color: rgba(255, 255, 255, 0.5);
  }
  .nav-shell .brand { width: 166px; }
  .nav-shell .brand img,
  .nav-shell.is-scrolled .brand img { height: 39px; }
  .desktop-nav,
  .language { display: none; }
  .nav-actions { margin-left: auto; }
  .nav-actions .login { display: none !important; }
  .menu-button {
    display: flex;
    width: 40px;
    height: 40px;
    border: 0;
    border-radius: 0;
    background: transparent;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    box-shadow: none;
  }
  .menu-button i {
    width: 20px;
    height: 1.5px;
    background: var(--ink);
    transition: transform 0.35s var(--ease), background 0.25s ease;
  }
  .menu-button:hover i,
  .menu-button[aria-expanded="true"] i { background: var(--blue); }
  .menu-button[aria-expanded="true"] i:first-child { transform: translateY(3.5px) rotate(45deg); }
  .menu-button[aria-expanded="true"] i:last-child { transform: translateY(-3.5px) rotate(-45deg); }

  .mobile-menu {
    display: flex;
    position: absolute;
    z-index: 1600;
    top: calc(100% + 8px);
    left: 0;
    right: 0;
    max-height: calc(100vh - 100px);
    overflow: auto;
    padding: 14px;
    flex-direction: column;
    gap: 3px;
    border: 1px solid rgba(7, 24, 49, 0.08);
    border-radius: 22px;
    background: rgba(255, 255, 255, 0.97);
    box-shadow: 0 24px 60px rgba(7, 24, 49, 0.18);
    backdrop-filter: blur(18px);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-12px) scale(0.98);
    transform-origin: top;
    transition: opacity 0.35s ease, visibility 0.35s ease, transform 0.45s var(--ease);
    pointer-events: auto;
  }
  .mobile-menu.open {
    opacity: 1;
    visibility: visible;
    transform: none;
  }
  body.nav-open { overflow: hidden; }
  .mobile-menu .mobile-direct,
  .mobile-accordion-trigger {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    min-height: 48px;
    padding: 13px 14px;
    border: 0;
    border-radius: 13px;
    background: transparent;
    color: var(--ink);
    font-size: 17px;
    font-weight: 500;
    text-align: left;
    cursor: pointer;
  }
  .mobile-menu .mobile-direct:hover,
  .mobile-accordion-trigger:hover {
    color: var(--blue);
    background: #eef6ff;
  }
  .mobile-accordion-trigger span {
    font-size: 19px;
    font-weight: 300;
    transition: transform 0.35s var(--ease);
  }
  .mobile-accordion.open .mobile-accordion-trigger span { transform: rotate(45deg); }
  .mobile-submenu {
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    padding: 0 9px;
    transition: max-height 0.45s var(--ease), opacity 0.3s ease;
  }
  .mobile-accordion.open .mobile-submenu {
    max-height: 720px;
    opacity: 1;
  }
  .mobile-submenu a,
  .mobile-submenu b {
    display: block;
    padding: 9px 15px;
    border-left: 1px solid #dce7f1;
    color: #5e728a;
    font-size: 13px;
    font-weight: 500;
  }
  .mobile-submenu b {
    padding-top: 12px;
    font-size: 9px;
    letter-spacing: 0.08em;
    color: #90a0b2;
  }
  .mobile-submenu a.nav-nested { padding-left: 24px; }
  .mobile-submenu a:hover {
    color: var(--blue);
    background: rgba(238, 246, 255, 0.7);
  }
  .mobile-menu .mobile-login {
    margin-top: 10px;
  }
}

@media (max-width: 760px) {
  :root {
    --nav-top: 8px;
    --nav-h: 56px;
    --nav-gap: 20px;
  }
}

@media (max-width: 430px) {
  .nav-shell .brand { width: 154px; }
  .nav-shell .brand img,
  .nav-shell.is-scrolled .brand img { height: 37px; }
}

@media (prefers-reduced-motion: reduce) {
  .nav-shell { animation: none; transition: none; }
  .desktop-nav a,
  .login,
  .menu-button,
  .mobile-menu { transition: none; }
}

/* ——— Footer ——— */
body > footer,
#footer {
  background: #06162e;
  color: #a9bad0;
  padding: 16px 4vw 10px;
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.85fr) minmax(0, 0.85fr) minmax(0, 1.15fr);
  gap: 10px 16px;
  position: relative;
  overflow-x: clip;
}
.footer-brand img {
  width: auto;
  max-width: min(168px, 100%);
  max-height: 46px;
  height: auto;
  object-fit: contain;
  box-sizing: border-box;
  background: #fff;
  padding: 4px 8px;
  border-radius: 12px;
}
#footer .footer-brand,
body > footer .footer-brand {
  display: flex;
  align-items: center;
  align-self: stretch;
}
.footer-brand ~ div h3,
body > footer address h3,
#footer address h3 {
  font-size: 11px;
  color: #fff;
  margin: 0 0 4px;
}
.footer-brand ~ div > a,
body > footer address a,
#footer address a {
  display: block;
  font-size: 12px;
  line-height: 1.35;
  margin: 2px 0;
}
.footer-brand ~ div > a:hover { color: #fff; }
body > footer address,
#footer address {
  font-style: normal;
  font-size: 10px;
  line-height: 1.7;
}
.footer-bottom {
  grid-column: 1 / -1;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  display: flex;
  justify-content: space-between;
  padding-top: 8px;
  margin-top: 2px;
  font: 600 7px "Noto Sans Thai";
  letter-spacing: 0.1em;
}
@media (max-width: 760px) {
  body > footer,
  #footer {
    grid-template-columns: 1fr 1fr;
    padding: 14px 16px 8px;
    gap: 10px 14px;
  }
  .footer-brand,
  body > footer address,
  #footer address { grid-column: 1 / -1; }
  .footer-brand img { width: auto; max-width: min(150px, 100%); }
}

/* v2/visitor-gateway.css */
:root{--gateway-blue:#126cf3;--gateway-navy:#071b34;--gateway-sky:#eaf4ff;--gateway-paper:#f4f7fa;--gateway-line:#d7e0e9;--gateway-text:#122b45;--gateway-muted:#64788d;--gateway-green:#20a779;--gateway-orange:#ff704d;--premium-ease:cubic-bezier(.2,.75,.2,1);--type-label:11px;--type-caption:12px;--type-ui:13px;--type-body-sm:14px}
html{scroll-behavior:smooth;scroll-padding-top:92px}body{background:var(--gateway-paper);font-size:var(--type-body-sm);text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}body.menu-open{overflow:hidden}::selection{background:#baff19;color:var(--gateway-navy)}a,button{cursor:pointer}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid #baff19;outline-offset:4px}*{scrollbar-width:thin;scrollbar-color:#83a4c7 transparent}main{position:relative;overflow-x:clip;overflow-y:visible}
.cinema-hero,.manifesto,.stat-scroll,.sports-network,.data-story,.finale,.map-intro{display:none!important}

.gateway-services,.public-insights{position:relative;background:#fff;color:var(--gateway-text)}
.gateway-services{padding:72px 6vw 110px}
.public-insights{position:relative;z-index:10;padding:0 6vw 52px;overflow:visible}
.sport-ribbon{position:relative;z-index:var(--z-ribbon,1200);height:72px;overflow:visible;width:100%;max-width:none;margin:28px 0 -28px;left:auto;color:var(--gateway-navy);pointer-events:none}
.sport-ribbon-band{pointer-events:auto;position:absolute;z-index:var(--z-ribbon,1200);left:-5%;top:50%;width:110%;padding:18px 0;background:#baff19;white-space:nowrap;transform:translateY(-50%) rotate(-4deg);transform-origin:center center;box-shadow:0 8px 28px rgba(7,27,52,.08)}
.sport-ribbon-track{display:inline-flex;align-items:center;gap:28px;padding-left:40px;animation:sportRibbonMarquee 28s linear infinite;font:650 15px/1 'Noto Sans Thai',sans-serif;letter-spacing:.04em}
.sport-ribbon-track span{display:inline-flex;align-items:center;gap:.45em;flex-shrink:0}
.sport-ribbon-track span:after{content:none}
.sport-ribbon-icon{width:1.15em;height:1.15em;flex:0 0 auto;display:block;color:var(--gateway-navy);opacity:.92}
.sport-ribbon:hover .sport-ribbon-track{animation-play-state:paused}
@keyframes sportRibbonMarquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media(min-width:761px){.motion-hero{height:min(68svh,620px);min-height:540px}}
.gateway-section-intro{position:relative;z-index:1;max-width:1320px;margin:0 auto 54px;display:flex;align-items:flex-end;justify-content:space-between;gap:40px}
.gateway-section-intro small{display:block;margin-bottom:13px;color:var(--gateway-blue);font:700 var(--type-label) 'Noto Sans Thai',sans-serif;letter-spacing:.16em;text-transform:uppercase}
.gateway-section-intro h2,.activity-editorial-lead h2,.nation-intro h2,.green-heart-intro h2{color:var(--gateway-navy);font-size:clamp(48px,4.7vw,72px);font-weight:500;line-height:1.02;letter-spacing:-.06em}
.gateway-section-intro h2 em,.activity-editorial-lead h2 em,.nation-intro h2 em,.green-heart-intro h2 em{color:var(--gateway-blue);font-style:normal;font-weight:inherit}
.gateway-section-intro h2{margin:0}
.gateway-section-intro>p{max-width:350px;margin:0 0 8px;color:var(--gateway-muted);font-size:var(--type-body-sm);line-height:1.75}

.service-launcher{max-width:1320px;margin:auto;display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--gateway-line);border-left:1px solid var(--gateway-line)}
.service-launcher>a{position:relative;min-height:164px;padding:28px 27px;border-right:1px solid var(--gateway-line);border-bottom:1px solid var(--gateway-line);display:grid;grid-template-columns:48px 1fr auto;align-items:start;gap:18px;background:#fff;transition:background .3s ease,color .3s ease,transform .35s var(--ease)}
.service-launcher>a:hover{z-index:2;background:var(--gateway-blue);color:#fff;transform:translateY(-5px);box-shadow:0 20px 50px rgba(18,108,243,.2)}
.service-icon{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;background:var(--gateway-sky);color:var(--gateway-blue);transition:.3s}.service-icon svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.service-launcher>a:hover .service-icon{background:#fff;color:var(--gateway-blue)}
.service-launcher b{display:block;margin-top:3px;font-size:17px;font-weight:650;line-height:1.35}.service-launcher small{display:block;margin-top:7px;color:var(--gateway-muted);font-size:var(--type-caption)}.service-launcher>a:hover small{color:rgba(255,255,255,.75)}.service-launcher>a>i{font-style:normal;font-size:17px}

/* Editorial activity calendar adapted from the supplied reference. */
.activity-editorial{max-width:1548px;margin:auto;display:grid;grid-template-columns:minmax(330px,.72fr) minmax(720px,1.28fr);gap:5vw}.activity-editorial-lead{align-self:stretch;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-bottom:2%}.activity-editorial-lead>small{display:block;color:var(--gateway-blue);font:700 9px 'Noto Sans Thai',sans-serif;letter-spacing:.2em}.activity-editorial-lead h2{margin:26px 0 42px}.activity-editorial-lead>a{display:inline-flex;gap:7px;padding-bottom:7px;border-bottom:1px solid var(--gateway-navy);color:var(--gateway-navy);font-size:12px;font-weight:700}.activity-editorial-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--gateway-navy)}.activity-editorial-list article{min-height:118px;padding:17px 12px 17px 0;display:grid;grid-template-columns:76px minmax(0,1fr);align-items:center;gap:16px;border-bottom:1px solid #c9d4df;color:var(--gateway-navy);cursor:pointer;transition:background .28s ease,transform .28s ease}.activity-editorial-list article:nth-child(even){padding-left:18px;border-left:1px solid #c9d4df}.activity-editorial-list article:hover{z-index:1;background:#f5f9ff;transform:translateY(-2px)}.activity-editorial-list time{align-self:center}.activity-editorial-list time strong{display:block;font:750 48px/.86 'Noto Sans Thai',sans-serif;letter-spacing:-.06em}.activity-editorial-list time small{display:block;margin-top:8px;color:var(--gateway-navy);font:750 17px/1.2 'Noto Sans Thai',sans-serif;letter-spacing:.01em}.activity-editorial-list h3{margin:0 0 8px;font-size:14px;font-weight:550;line-height:1.35;font-family:'Noto Sans Thai',sans-serif}.activity-editorial-list p{margin:0;color:#718399;font-size:11px;font-family:'Noto Sans Thai',sans-serif}.activity-editorial-list article>span{color:var(--gateway-blue);font-size:13px}.activity-editorial-list article{position:relative}.activity-editorial-list article>a.activity-editorial-link{position:absolute;inset:0;z-index:2;color:inherit;text-decoration:none}.activity-editorial-list article:focus-within{outline:2px solid var(--gateway-blue);outline-offset:3px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* Green Heart — light editorial rail aligned with gateway sections. */
.green-heart{position:relative;padding:88px 0 92px;background:#fff;color:var(--gateway-text);border-top:0}.green-heart-shell{max-width:1548px;margin:0 auto;padding:0 6vw}.green-heart-intro{max-width:760px;margin-bottom:34px}.green-heart-intro>small{display:block;color:var(--gateway-blue);font:700 var(--type-label) 'Noto Sans Thai',sans-serif;letter-spacing:.18em;text-transform:uppercase}.green-heart-intro h2{margin:0 0 24px;text-wrap:balance}.green-heart-intro>p{max-width:520px;margin:0;color:var(--gateway-muted);font-size:var(--type-body-sm);line-height:1.75}.green-heart-meta{margin-top:26px;display:flex;align-items:center;gap:22px;flex-wrap:wrap}.green-heart-count{color:var(--gateway-muted);font-size:var(--type-caption)}.green-heart-count strong{color:var(--gateway-navy);font:750 24px/1 'Noto Sans Thai',sans-serif;letter-spacing:-.04em;margin-right:4px}.green-heart-filters{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:0 0 10px}.green-heart-level-tabs{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.green-heart-tab{border:0;background:#eef2f6;padding:11px 18px;border-radius:999px;color:var(--gateway-muted);font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer;transition:background .28s ease,color .28s ease,box-shadow .28s ease,transform .28s var(--premium-ease)}.green-heart-tab:hover{color:var(--gateway-navy);background:#e6edf5;transform:translateY(-1px)}.green-heart-tab.active,.green-heart-tab[aria-selected=true]{background:#fff;color:var(--gateway-navy);box-shadow:0 8px 28px rgba(14,47,82,.08)}.green-heart-province-picker{position:relative;display:block;z-index:12}.green-heart-province-trigger{display:inline-flex;align-items:center;gap:10px;min-width:min(220px,70vw);padding:11px 16px;border:0;border-radius:999px;background:#eef2f6;color:var(--gateway-navy);font-size:12px;font-weight:600;cursor:pointer;transition:background .28s ease,box-shadow .28s ease,transform .28s var(--premium-ease)}.green-heart-province-trigger i{font-size:10px;color:var(--gateway-muted);transition:transform .28s ease}.green-heart-province-trigger:hover{background:#e6edf5;transform:translateY(-1px)}.green-heart-province-trigger.is-open,.green-heart-province-trigger[aria-expanded=true]{background:#fff;box-shadow:0 8px 28px rgba(14,47,82,.08)}.green-heart-province-trigger.is-open i,.green-heart-province-trigger[aria-expanded=true] i{transform:rotate(180deg)}.green-heart-province-menu{position:absolute;z-index:20;top:calc(100% + 10px);left:0;min-width:min(280px,calc(100vw - 44px));max-height:min(320px,50vh);overflow:auto;padding:8px;border:1px solid var(--gateway-line);border-radius:18px;background:#fff;box-shadow:0 24px 60px rgba(14,47,82,.12);scrollbar-width:thin;scrollbar-color:rgba(14,47,82,.18) transparent}.green-heart-province-menu::-webkit-scrollbar{width:6px}.green-heart-province-menu::-webkit-scrollbar-track{background:transparent;margin:6px 0}.green-heart-province-menu::-webkit-scrollbar-thumb{background:rgba(14,47,82,.16);border-radius:999px}.green-heart-province-menu[hidden]{display:none}.green-heart-province-option{width:100%;padding:11px 14px;border:0;border-radius:12px;background:transparent;color:var(--gateway-navy);font-size:12px;font-weight:600;text-align:left;cursor:pointer;transition:background .2s ease,color .2s ease}.green-heart-province-option:hover{background:#f5f9ff}.green-heart-province-option.is-selected{background:rgba(32,167,121,.1);color:var(--gateway-green)}.green-heart-province-option:focus-visible{outline:2px solid rgba(32,167,121,.35);outline-offset:1px}.green-heart-rail-wrap{position:relative;margin:0 -6vw;padding:0 6vw 0}.green-heart-controls{position:absolute;z-index:4;top:10px;right:6vw;display:flex;gap:8px}.green-heart-controls button{width:42px;height:42px;border-radius:999px;border:0;background:rgba(255,255,255,.94);color:var(--gateway-navy);font-size:15px;cursor:pointer;box-shadow:0 10px 30px rgba(14,47,82,.1);backdrop-filter:blur(8px);transition:background .25s ease,color .25s ease,transform .25s var(--premium-ease),box-shadow .25s ease}.green-heart-controls button:hover{background:var(--gateway-navy);color:#fff;transform:translateY(-2px);box-shadow:0 14px 34px rgba(14,47,82,.16)}.green-heart-rail-wrap:before,.green-heart-rail-wrap:after{content:"";position:absolute;z-index:2;top:0;bottom:12px;width:min(7vw,96px);pointer-events:none}.green-heart-rail-wrap:before{left:0;background:linear-gradient(90deg,#fff,rgba(255,255,255,0))}.green-heart-rail-wrap:after{right:0;background:linear-gradient(270deg,#fff,rgba(255,255,255,0))}.green-heart-empty{margin:0;padding:28px 0;color:var(--gateway-muted);font-size:12px}.green-heart-rail{display:flex;gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding:0 0 10px;-webkit-overflow-scrolling:touch}.green-heart-rail::-webkit-scrollbar{display:none}.green-heart-card{flex:0 0 clamp(260px,30vw,340px);scroll-snap-align:start;color:var(--gateway-navy);text-decoration:none;transition:transform .45s var(--premium-ease),opacity .45s ease}.green-heart-card.is-visible{animation:greenHeartCardIn .68s var(--premium-ease) both}.green-heart-card-media{position:relative;aspect-ratio:4/3;height:auto;margin:0;border-radius:16px;overflow:hidden;background:#e8eef4;border:1px solid var(--gateway-line);transition:transform .4s var(--premium-ease),box-shadow .4s ease,border-color .4s ease}.green-heart-card-media img{width:100%;height:100%;object-fit:cover;transition:transform .75s var(--premium-ease)}.green-heart-card-overlay{position:absolute;inset:auto 0 0 0;z-index:2;padding:18px 18px 20px;background:linear-gradient(0deg,rgba(7,27,52,.92) 0%,rgba(7,27,52,.58) 58%,transparent 100%);transform:translateY(calc(100% - 78px));transition:transform .5s var(--premium-ease)}.green-heart-card-overlay time{display:block;margin-bottom:8px;color:#b7ead3;font:700 8px 'Noto Sans Thai',sans-serif;letter-spacing:.12em}.green-heart-card-overlay h3{margin:0 0 8px;color:#fff;font-size:15px;font-weight:600;line-height:1.38;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.green-heart-card-overlay p{margin:0 0 10px;color:#c7d4e0;font-size:10px}.green-heart-level{display:inline-block;padding:4px 9px;border-radius:999px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);color:#dff5ea;font:700 7px 'Noto Sans Thai',sans-serif;letter-spacing:.1em}.green-heart-card:hover,.green-heart-card:focus-visible{z-index:3;outline:none}.green-heart-card:hover .green-heart-card-media,.green-heart-card:focus-visible .green-heart-card-media{transform:translateY(-6px);border-color:rgba(18,108,243,.22);box-shadow:0 22px 50px rgba(14,47,82,.12)}.green-heart-card:hover .green-heart-card-media img,.green-heart-card:focus-visible .green-heart-card-media img{transform:scale(1.06)}.green-heart-card:hover .green-heart-card-overlay,.green-heart-card:focus-visible .green-heart-card-overlay{transform:translateY(0)}.green-heart-rail.is-auto-scroll{scroll-snap-type:none;scroll-behavior:auto}.green-heart-rail.is-paused .green-heart-card-media{transition-duration:.35s}@keyframes greenHeartCardIn{from{opacity:.25;transform:translateY(16px)}to{opacity:1;transform:none}}
.training-courses{position:relative;z-index:2;border-top:0;padding:56px 0 36px;margin-top:0;overflow:visible;background:#fff}#green-heart-events{position:relative;z-index:1;padding-bottom:40px;margin-bottom:0;border:0;border-bottom:0;box-shadow:none}#green-heart-events + #nation{margin-top:0;border-top:0!important;box-shadow:none}#nation > .nation-shell:first-child{position:relative;z-index:2;isolation:auto;background:#fff;overflow:visible}#green-heart-events + .journey-connector,.nation > .journey-connector{display:block!important;visibility:visible}.nation .training-courses .green-heart-shell{max-width:none;margin:0;padding:0}.training-courses .green-heart-intro{margin-bottom:40px}.ribbon-lead{position:relative;z-index:11;display:flex;align-items:center;gap:14px;max-width:1548px;margin:-22px auto 0;padding:0 6vw;color:var(--gateway-blue);font:700 10px/1 'Noto Sans Thai',sans-serif;letter-spacing:.18em;text-transform:uppercase}.ribbon-lead:before{content:"";width:48px;height:1px;background:currentColor;flex:0 0 auto}.ribbon-lead:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,rgba(18,108,243,.35),transparent)}.journey-connector-ribbon{position:relative;z-index:1200;height:48px;margin:-12px 0 8px;overflow:visible}.training-course-grid-wrap{position:relative;margin:0;padding:0}.training-course-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(16px,2vw,22px);overflow:visible}.training-course-card{display:flex;flex-direction:column;color:var(--gateway-navy);background:#fff;border:1px solid var(--gateway-line);border-radius:16px;overflow:hidden;transition:transform .35s var(--premium-ease),box-shadow .35s ease,border-color .35s ease}.training-course-card.is-visible{animation:greenHeartCardIn .68s var(--premium-ease) both}.training-course-card:hover{transform:translateY(-4px);border-color:rgba(18,108,243,.22);box-shadow:0 18px 44px rgba(14,47,82,.1)}.training-course-card-media{position:relative;aspect-ratio:4/3;margin:0;overflow:hidden;background:#e8eef4}.training-course-card-media img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--premium-ease)}.training-course-card:hover .training-course-card-media img{transform:scale(1.04)}.training-course-card-body{display:flex;flex-direction:column;flex:1;gap:8px;padding:16px 16px 18px;font-family:'Noto Sans Thai',sans-serif}.training-course-card-body time{color:var(--gateway-blue);font:700 11px/1.45 'Noto Sans Thai',sans-serif;letter-spacing:.01em}.training-course-card-body h3{margin:0;color:var(--gateway-navy);font-size:14px;font-weight:600;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.training-course-card-body p{margin:0;color:var(--gateway-muted);font-size:11px;line-height:1.55}.training-course-tag{display:inline-flex;align-self:flex-start;padding:5px 10px;border-radius:999px;background:#eef5ff;color:var(--gateway-blue);font:650 11px/1.35 'Noto Sans Thai',sans-serif;letter-spacing:.01em}.training-course-detail-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;margin-top:auto;padding:11px 14px;border-radius:999px;background:var(--gateway-navy);color:#fff;text-decoration:none;font-size:12px;font-weight:700;transition:background .25s ease,transform .25s var(--premium-ease)}.training-course-detail-btn:hover{background:var(--gateway-blue);transform:translateY(-1px)}.training-courses+.journey-connector{margin-top:0}.journey-connector-ribbon{position:absolute;left:0;right:0;bottom:-8px;height:56px;margin:0;z-index:13;transform:rotate(-6deg);transform-origin:center top;opacity:.92}.journey-connector-ribbon .swoosh-main{stroke:var(--gateway-navy);stroke-width:1.75}.journey-connector-ribbon .swoosh-accent{stroke:var(--gateway-blue);stroke-width:1.5}#green-heart-events{padding-top:0;padding-bottom:56px;position:relative;z-index:2;overflow:visible}#green-heart-events.green-heart{padding-top:8px;padding-bottom:72px}#gateway-services + .journey-connector{margin-bottom:-72px}#green-heart-events .green-heart-intro{position:relative;z-index:3;margin-top:-78px}#green-heart-events .green-heart-intro h2{position:relative;z-index:3}

/* Swoosh connectors turn separate sections into one continuous journey. */
.journey-connector{position:relative;z-index:var(--z-connector,200);height:72px;margin:-36px 0;pointer-events:none;overflow:visible;background:transparent}.journey-connector svg{position:relative;z-index:1;width:100%;height:100%;overflow:visible;display:block}.journey-connector path{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.journey-connector .swoosh-main{stroke:var(--gateway-blue);stroke-width:2.5;stroke-dasharray:14 8;opacity:.95;animation:swooshFlow 11s linear infinite}.journey-connector .swoosh-accent{stroke:#baff19;stroke-width:1.75;stroke-dasharray:3 12;opacity:.9;animation:swooshFlow 14s linear infinite reverse}.journey-connector-1 .swoosh-main{stroke:#fff}.journey-connector-2 .swoosh-main,.journey-connector-3 .swoosh-main,.journey-connector-4 .swoosh-main{stroke:#58c9fb}.journey-connector-5 .swoosh-main,.journey-connector-6 .swoosh-main{stroke:#78d5fb}@keyframes swooshFlow{to{stroke-dashoffset:-220}}

/* Kinetic type and layered data reveal only when content enters the viewport. */
.kinetic-title{opacity:1;text-wrap:balance;word-break:keep-all}.kinetic-title.is-visible{animation:kineticTitleIn .9s var(--premium-ease) both}.kinetic-title em,.kinetic-title strong{display:inline-block;transition:transform .7s var(--premium-ease)}.kinetic-title:hover em,.kinetic-title:hover strong{transform:translateX(8px)}.activity-editorial-list article,.insight-layout article{opacity:1;transition:transform .65s var(--premium-ease),box-shadow .35s ease,border-color .35s ease}.activity-editorial-list article.is-visible,.insight-layout article.is-visible{animation:layerReveal .68s var(--premium-ease) both}.insight-layout article{position:relative;box-shadow:0 18px 55px rgba(14,47,82,.055)}.insight-layout article:hover{z-index:2;transform:translateY(-7px);border-color:rgba(18,108,243,.36);box-shadow:0 30px 80px rgba(14,47,82,.13)}.insight-layout article:before{content:"";position:absolute;inset:12px -7px -7px 12px;z-index:-1;border:1px solid rgba(18,108,243,.08);border-radius:inherit}@keyframes kineticTitleIn{from{opacity:.2;transform:translate3d(0,30px,0) skewY(1.2deg);clip-path:inset(0 0 92% 0)}to{opacity:1;transform:none;clip-path:inset(0)}}@keyframes layerReveal{from{opacity:.25;transform:translateY(18px)}to{opacity:1;transform:none}}

/* Premium micro-interactions and loading treatment. */
.nav-shell{transition:box-shadow .35s ease,background .35s ease,transform .35s var(--premium-ease)}.nav-primary-link,.login{transition:color .25s ease,background .25s ease,transform .25s var(--premium-ease)}.nav-primary-link:hover{transform:translateY(-1px)}.gateway-stat i,.activity-editorial-list article>span,.activity-editorial-lead>a span,.places-head>a{transition:transform .3s var(--premium-ease)}.gateway-stat:hover i,.activity-editorial-list article:hover>span,.activity-editorial-lead>a:hover span{transform:translate(4px,-4px)}.map-loading{background:linear-gradient(105deg,#091c38 28%,#102e55 42%,#091c38 58%);background-size:220% 100%;animation:loadingSheen 1.8s ease-in-out infinite}.map-loading.done{animation:none}@keyframes loadingSheen{to{background-position:-220% 0}}

/* Angled editorial data field — intentionally not another card grid. */
.gateway-stats-ribbon{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  padding:40px 5vw 18px;
  background:#fff;
  color:#fff;
  font-family:"Noto Sans Thai",sans-serif;
}
.gateway-stats-ribbon:before{
  content:"";
  position:absolute;
  z-index:-1;
  inset:0;
  background:linear-gradient(135deg,#0d4fd6 0%,#1761f6 48%,#1a73ff 100%);
  clip-path:polygon(0 22%,66% 22%,100% 0,100% 100%,0 100%);
}
.gateway-stats-ribbon:after{
  content:"";
  position:absolute;
  z-index:-1;
  inset:22% 0 auto;
  height:1px;
  background:linear-gradient(90deg,rgba(255,255,255,.08),rgba(255,255,255,.42),rgba(255,255,255,.08));
  pointer-events:none;
}
.gateway-stats-inner{
  max-width:1480px;
  min-height:108px;
  margin:auto;
  display:grid;
  grid-template-columns:112px repeat(3,minmax(0,1fr)) 120px;
  align-items:stretch;
  gap:0;
}
.gateway-stats-rail{
  display:flex;
  flex-direction:column;
  justify-content:center;
  align-items:flex-start;
  gap:4px;
  padding:12px 18px 12px 4px;
  border-right:1px solid rgba(255,255,255,.28);
}
.gateway-stats-rail-mark{
  width:28px;
  height:3px;
  border-radius:999px;
  background:#baff19;
  margin-bottom:6px;
}
.gateway-stats-rail b{
  font:800 1.05rem/1.15 "Noto Sans Thai",sans-serif;
  letter-spacing:-.02em;
  color:#fff;
}
.gateway-stats-rail small{
  font:600 .78rem/1.35 "Noto Sans Thai",sans-serif;
  color:rgba(255,255,255,.78);
}
.gateway-stat{
  position:relative;
  min-height:96px;
  padding:14px 28px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  color:#fff;
  text-decoration:none;
  border-right:1px solid rgba(255,255,255,.28);
  transition:transform .35s cubic-bezier(.22,1,.36,1),background .35s ease;
}
.gateway-stat:last-of-type{border-right:1px solid rgba(255,255,255,.28)}
.gateway-stat:hover,
.gateway-stat:focus-visible{
  transform:translateY(-3px);
  background:rgba(255,255,255,.08);
  outline:none;
}
.gateway-stat>span{display:flex;flex-direction:column;gap:6px;min-width:0}
.gateway-stat strong{
  font:800 clamp(2rem,3.4vw,3.15rem)/.95 "Noto Sans Thai",sans-serif;
  font-variant-numeric:tabular-nums;
  letter-spacing:-.04em;
  color:#fff;
}
.gateway-stat small{
  color:rgba(255,255,255,.9);
  font:600 .88rem/1.45 "Noto Sans Thai",sans-serif;
  letter-spacing:0;
}
.gateway-stat i{
  flex:none;
  font-style:normal;
  color:#baff19;
  font-size:1.15rem;
  font-weight:700;
  line-height:1;
  transition:transform .35s cubic-bezier(.22,1,.36,1);
}
.gateway-stat:hover i{transform:translate(3px,-3px)}
.gateway-stats-signoff{
  display:grid;
  align-content:center;
  justify-items:end;
  gap:2px;
  padding:12px 4px 12px 16px;
  text-align:right;
  color:rgb(186, 255, 25);
  font:800 1rem/1.1 "Noto Sans Thai",sans-serif;
  letter-spacing:.02em;
}
.gateway-stats-signoff strong,
.gateway-stats-signoff span{display:block;color:rgb(186, 255, 25)}

/* Upcoming events become a light, scannable calendar rail. */
.events{display:none!important;padding:96px 0 58px;background:var(--gateway-paper);color:var(--gateway-text)}
.events-title{width:calc(100% - 12vw);max-width:1320px;margin:auto;padding:0;position:relative}.events-title:before{content:"กิจกรรมที่กำลังจะเกิดขึ้น";display:block;margin-bottom:12px;color:var(--gateway-orange);font:700 9px 'Noto Sans Thai',sans-serif;letter-spacing:.15em}.events-title h2{margin:0;font-size:clamp(48px,5.6vw,82px);font-weight:650;line-height:.96;letter-spacing:-.06em}.events-title h2 em{color:var(--gateway-blue)}
.event-arrows{right:0;bottom:5px}.event-arrows button{border-color:#b8c6d4;color:var(--gateway-text)}.event-arrows button:hover{background:var(--gateway-blue);border-color:var(--gateway-blue);color:#fff}
.events-track{max-width:1440px;margin:0 auto;padding:52px 60px 12px;gap:0}.event-card{position:relative;flex-basis:340px;min-height:330px;padding:28px;border:0;border-top:1px solid #b9c7d5;border-right:1px solid var(--gateway-line);border-radius:0;background:#fff;color:var(--gateway-text)}.event-card:first-child{border-left:1px solid var(--gateway-line)}.event-card:before{content:"";position:absolute;left:27px;top:-5px;width:9px;height:9px;border-radius:50%;background:var(--gateway-orange)}.event-card:hover{z-index:2;background:var(--gateway-navy);color:#fff;transform:translateY(-7px)}.event-date{color:var(--gateway-blue);font-size:34px}.event-card h3{font-size:19px}.event-card p{color:var(--gateway-muted)}.event-card footer{background:transparent!important}.event-card:hover footer{color:#b9c9d8}

/* Nation map panel lives beside the canvas in the gateway layout. */

/* Public data visualizations */
.public-insights{background:#fff}
.public-kpis{max-width:1320px;margin:0 auto 40px;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--gateway-line);border-bottom:1px solid var(--gateway-line)}.public-kpis>div{padding:28px 24px;border-right:1px solid var(--gateway-line)}.public-kpis>div:last-child{border:0}.public-kpis strong{display:block;color:var(--gateway-blue);font:750 clamp(34px,4vw,62px)/1 'Noto Sans Thai',sans-serif;letter-spacing:-.06em}.public-kpis span{display:block;margin-top:8px;color:var(--gateway-muted);font-size:var(--type-caption)}
.insight-layout{max-width:1320px;margin:auto;display:grid;grid-template-columns:1.15fr .85fr;gap:22px}
#nation + .journey-connector{height:48px;margin:-28px 0 -36px}
.public-insights{margin-top:-12px}.insight-layout article{padding:34px;border:1px solid var(--gateway-line);border-radius:16px;background:#fff}.insight-layout article>header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:32px}.insight-layout header small{color:var(--gateway-blue);font:700 var(--type-label) 'Noto Sans Thai',sans-serif;letter-spacing:.14em}.insight-layout h3{margin:7px 0 0;font-size:23px;line-height:1.3}.insight-layout header>span,.insight-layout header>a{color:var(--gateway-muted);font-size:var(--type-caption)}
.sport-bars{grid-row:span 2}.sport-bars ol,.province-ranking ol{list-style:none;margin:0;padding:0}.sport-bars li{display:grid;grid-template-columns:145px 1fr 58px;align-items:center;gap:13px;margin:19px 0}.sport-bars li b{font-size:var(--type-caption);font-weight:550}.sport-bars li i{height:10px;background:#e8eef4}.sport-bars li i:after{content:"";display:block;width:var(--value);height:100%;background:linear-gradient(90deg,var(--gateway-blue),#54c7f5);transform-origin:left;animation:barGrow .9s var(--ease) both}.sport-bars li strong{text-align:right;font:650 var(--type-ui) 'Noto Sans Thai',sans-serif}@keyframes barGrow{from{transform:scaleX(0)}}
.activity-trend svg{width:100%;height:auto;overflow:visible}.trend-grid path{fill:none;stroke:#dfe7ee;stroke-width:1}.trend-area{fill:rgba(18,108,243,.09)}.trend-line{fill:none;stroke:var(--gateway-blue);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.trend-points circle{fill:#fff;stroke:var(--gateway-blue);stroke-width:4}.trend-labels text{fill:#718398;font:var(--type-caption) "Noto Sans Thai",sans-serif;text-anchor:middle}.activity-trend>p{margin:4px 0 0;color:var(--gateway-muted);font-size:var(--type-caption)}
.province-ranking{grid-column:2}.province-ranking li{display:grid;grid-template-columns:38px 1fr auto;align-items:center;padding:12px 0;border-top:1px solid var(--gateway-line)}.province-ranking li span{color:#9aa9b8;font:600 var(--type-label) 'Noto Sans Thai',sans-serif}.province-ranking li b{font-size:var(--type-ui)}.province-ranking li strong{font:650 var(--type-ui) 'Noto Sans Thai',sans-serif}

/* Featured content uses real venue imagery already in the project. */
.places{padding:118px 6vw 135px;background:var(--gateway-paper)}.places-head{max-width:1320px;margin:0 auto 55px}.places-head h2{font-size:clamp(48px,5.6vw,82px);font-weight:650}.places-head h2 em{color:var(--gateway-blue)}.place-gallery{max-width:1320px;margin:auto;grid-template-rows:500px 340px;gap:18px}.place-card{border-radius:16px}.place-card h3{font-size:clamp(24px,2.5vw,40px)}

@media(max-width:900px){
  .gateway-services{padding:90px 22px}.public-insights{padding:0 22px 44px;margin-top:-8px}.sport-ribbon{height:64px;margin:0 0 -32px}.sport-ribbon-band{transform:translateY(-50%) rotate(-4deg)}.sport-ribbon-track{gap:20px;padding-left:28px;font-size:13px}.sport-ribbon-track span{gap:.4em}#nation + .journey-connector{height:40px;margin:-22px 0 -28px}.gateway-section-intro{display:block}.gateway-section-intro>p{margin-top:24px}.service-launcher{grid-template-columns:1fr 1fr}.service-launcher>a{min-height:155px;padding:23px 20px;grid-template-columns:42px 1fr auto}.service-icon{width:42px;height:42px}
  .gateway-services{padding-bottom:102px}.activity-editorial{grid-template-columns:1fr;gap:40px}.activity-editorial-lead{display:block;padding-bottom:0}.activity-editorial-lead h2{margin:24px 0 30px}.activity-editorial-list article{grid-template-columns:72px minmax(0,1fr)}
  .green-heart{padding:72px 0 78px}.green-heart-shell{padding:0 22px}.green-heart-filters{gap:8px;margin-bottom:10px}.green-heart-province-trigger{width:100%;min-width:0;justify-content:space-between}.green-heart-province-menu{left:0;right:0;min-width:0}.green-heart-rail-wrap{margin:0 -22px;padding:0 22px 0}.green-heart-controls{right:22px;top:10px}.journey-connector{height:58px;margin:-29px 0}#green-heart-events{padding-top:0;padding-bottom:64px}#green-heart-events.green-heart{padding-top:4px;padding-bottom:64px}#gateway-services + .journey-connector{margin-bottom:-56px}#green-heart-events .green-heart-intro{margin-top:-58px}.training-courses{padding-top:64px}.training-course-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .gateway-stats-ribbon{padding:34px 22px 14px}.gateway-stats-inner{grid-template-columns:88px repeat(3,minmax(0,1fr)) 88px;min-height:96px}.gateway-stat{min-height:84px;padding:12px 16px}.gateway-stat strong{font-size:clamp(1.7rem,3vw,2.4rem)}.gateway-stat small{font-size:.8rem}.gateway-stats-signoff{font-size:.85rem}.gateway-stats-rail b{font-size:.95rem}
  .events-title{width:auto;margin:0;padding:0 22px}.event-arrows{right:22px}.events-track{padding:48px 22px 10px}.event-card{flex-basis:300px}
  .nation{padding:95px 18px}.map-app{grid-template-columns:250px 1fr}.insight-layout{grid-template-columns:1fr}.sport-bars{grid-row:auto}.province-ranking{grid-column:auto}.places{padding:95px 22px}
}

@media(max-width:760px){
  .gateway-services{padding:82px 18px}.public-insights{padding:0 18px 36px;margin-top:-6px}.sport-ribbon{height:56px;margin:0 0 -28px}.sport-ribbon-band{padding:14px 0;left:-8%;width:116%;transform:translateY(-50%) rotate(-4deg)}.ribbon-lead{margin:-18px auto 0;padding:0 18px}.journey-connector-ribbon{height:34px;margin:-14px 0 2px}#nation + .journey-connector{height:36px;margin:-18px 0 -24px}.gateway-section-intro{margin-bottom:38px}.gateway-section-intro h2,.activity-editorial-lead h2,.nation-intro h2,.green-heart-intro h2{font-size:44px}.gateway-section-intro>p br{display:none}.service-launcher{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;border-left:0;padding-bottom:8px}.service-launcher>a{flex:0 0 82vw;scroll-snap-align:start;border-left:1px solid var(--gateway-line)}
  .gateway-services{padding-top:62px;padding-bottom:94px}.activity-editorial{gap:34px}.activity-editorial-lead h2{font-size:44px;line-height:1.03;margin:20px 0 24px}.activity-editorial-lead>a{font-size:11px}.activity-editorial-list{grid-template-columns:1fr}.activity-editorial-list article{min-height:104px;padding:14px 3px 14px 0;grid-template-columns:68px minmax(0,1fr);gap:12px}.activity-editorial-list article:nth-child(even){padding-left:0;border-left:0}.activity-editorial-list time strong{font-size:44px}.activity-editorial-list time small{margin-top:6px;font-size:15px}.activity-editorial-list h3{margin:0 0 7px;font-size:14px}.activity-editorial-list p{font-size:10px}
  .green-heart{padding:64px 0 68px}.green-heart-shell{padding:0 18px}.green-heart-intro{margin-bottom:26px}.green-heart-intro h2{margin:16px 0 18px}.green-heart-intro>p{font-size:11px;line-height:1.8}.green-heart-count strong{font-size:22px}.green-heart-filters{margin-bottom:8px}.green-heart-tab{padding:10px 15px;font-size:11px}.green-heart-rail-wrap{margin:0 -18px;padding:0 18px 0}.green-heart-controls{right:18px;top:10px}.green-heart-card{flex-basis:82vw}.journey-connector{height:44px;margin:-22px 0}.journey-connector path{stroke-width:1.25}#green-heart-events{padding-top:0;padding-bottom:48px}#green-heart-events.green-heart{padding-top:0;padding-bottom:52px}#gateway-services + .journey-connector{margin-bottom:-44px}#green-heart-events .green-heart-intro{margin-top:-44px}.training-courses{padding-top:48px}.training-course-grid{grid-template-columns:1fr}.mobile-menu{max-height:calc(100dvh - 74px);overflow-y:auto;padding-bottom:calc(30px + env(safe-area-inset-bottom));overscroll-behavior:contain}.mobile-menu a,.mobile-accordion-trigger{min-height:44px;display:flex;align-items:center}.menu-button{touch-action:manipulation}
  .gateway-stats-ribbon{padding:22px 0 10px}.gateway-stats-ribbon:before{clip-path:polygon(0 10%,72% 10%,100% 0,100% 100%,0 100%)}.gateway-stats-ribbon:after{top:10%}.gateway-stats-inner{min-height:auto;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;padding:0 14px;gap:0}.gateway-stats-rail,.gateway-stats-signoff{display:none}.gateway-stat{flex:0 0 78vw;min-height:88px;padding:16px 20px;scroll-snap-align:start;border-right:1px solid rgba(255,255,255,.28);border-left:0}.gateway-stat strong{font-size:2.2rem}.gateway-stat small{font-size:.85rem}
  .events{padding:72px 0 52px}.events-title h2{font-size:50px}.event-arrows{position:static;margin-top:25px}.events-track{padding-top:38px}.event-card{flex-basis:82vw;min-height:310px}
  .nation{padding:72px 0 78px}.nearby-events-list{margin-top:0}
  .public-kpis{grid-template-columns:1fr 1fr}.public-kpis>div:nth-child(2){border-right:0}.public-kpis>div:nth-child(-n+2){border-bottom:1px solid var(--gateway-line)}.insight-layout article{padding:24px 18px}.sport-bars li{grid-template-columns:105px 1fr 46px;gap:8px}.sport-bars li b{font-size:9.5px}
  .places-head h2{font-size:50px}.place-gallery{max-width:none}.place-card{border-radius:14px}
}

@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.sport-bars li i:after,.journey-connector path,.map-loading,.kinetic-title,.green-heart-card,.training-course-card,.activity-editorial-list article,.insight-layout article,.sport-ribbon-track{animation:none}.service-launcher>a,.gateway-stat,.event-card,.kinetic-title,.green-heart-card,.training-course-card,.green-heart-card-media,.activity-editorial-list article,.insight-layout article{transition:none;transform:none;opacity:1;clip-path:none}}
a.green-heart-card{display:block;color:inherit;text-decoration:none}
.training-course-status{display:inline-flex;align-items:center;min-height:24px;margin:8px 0 0;padding:2px 10px;border-radius:999px;font:600 12px/1.4 'Noto Sans Thai',sans-serif}
.training-course-status.is-open{background:#dcfce7;color:#166534}
.training-course-status.is-full{background:#fef3c7;color:#92400e}
.training-course-status.is-closed{background:#e8eef5;color:#475569}
.training-course-status.is-upcoming{background:#dbeafe;color:#1e3a8a}

/* v2/design-language.css */
/* Premium sports design language — Version2 foundation */
:root {
  --dl-ink: #071b34;
  --dl-muted: #5d7188;
  --dl-blue: #126cf3;
  --dl-lime: #baff19;
  --dl-paper: #f3f6f9;
  --dl-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --dl-ease-soft: cubic-bezier(0.4, 0, 0.2, 1);
  --dl-space-1: 8px;
  --dl-space-2: 16px;
  --dl-space-3: 24px;
  --dl-space-4: 32px;
  --dl-space-5: 48px;
  --dl-space-6: 64px;
  --dl-shadow-soft: 0 8px 28px rgba(7, 27, 52, 0.08);
  --dl-shadow-lift: 0 14px 36px rgba(7, 27, 52, 0.12);
}

.venue-detail-page,
.venue-detail-page button,
.venue-detail-page input,
.venue-detail-page select,
.venue-detail-page a,
.venues-page,
.venues-page button,
.venues-page input,
.venues-page select,
.venues-page a,
.dashboard-page,
.dashboard-page button,
.dashboard-page a,
.abouts-page,
.abouts-page button,
.abouts-page a,
.province-page,
.province-page button,
.province-page input,
.province-page select,
.province-page a,
body.province-shell,
body.province-shell button,
body.province-shell input,
body.province-shell select,
body.province-shell a {
  font-family: "Noto Sans Thai", sans-serif;
}

.venue-detail-page,
.venues-page,
.dashboard-page,
.abouts-page,
.province-page {
  font-variant-numeric: tabular-nums;
}

.venue-detail-page .venue-prose,
.venue-detail-page .venue-lead,
.venue-detail-page .venue-meta-grid dd,
.venue-detail-page .venue-contacts,
.venue-detail-page .venue-hours,
.venues-page .venue-card-body p,
.venues-page .venues-lead,
.venues-page .venues-human-copy p {
  line-height: 1.7;
  word-break: normal;
  overflow-wrap: anywhere;
  line-break: strict;
}

/* Swoosh divider */
.venue-swoosh,
.venues-swoosh,
.dl-swoosh {
  display: block;
  position: relative;
  z-index: 1200;
  width: 100%;
  height: 48px;
  margin-top: -1px;
  color: var(--dl-paper, #eef3f8);
  pointer-events: none;
}

.venue-swoosh svg,
.venues-swoosh svg,
.dl-swoosh svg {
  display: block;
  width: 100%;
  height: 100%;
}

/* Kinetic / reveal */
.venue-reveal,
.venues-reveal,
.dl-reveal {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--dl-ease), transform 0.7s var(--dl-ease);
}

.venue-reveal.is-in,
.venues-reveal.is-in,
.dl-reveal.is-in {
  opacity: 1;
  transform: translateY(0);
}

.venue-hero-copy h1 {
  transition: letter-spacing 0.8s var(--dl-ease);
}

/* Organic gallery crossfade */
.venue-gallery-hero img {
  transition: opacity 0.55s var(--dl-ease-soft), transform 0.7s var(--dl-ease);
}

.venue-gallery-hero.is-switching img {
  opacity: 0.72;
  transform: scale(1.02);
}

/* Premium micro-interactions */
.venue-quick-actions a,
.venue-actions a,
.venue-links a,
.venue-sticky-btn,
.venue-card,
.venues-type-chip,
.venues-pagination button {
  transition:
    transform 0.35s var(--dl-ease),
    box-shadow 0.35s var(--dl-ease),
    background-color 0.35s var(--dl-ease-soft),
    border-color 0.35s var(--dl-ease-soft),
    color 0.35s var(--dl-ease-soft),
    filter 0.35s var(--dl-ease-soft);
}

.venue-quick-actions a:hover,
.venue-actions a:hover,
.venue-links a:hover,
.venue-sticky-btn:hover,
.venues-type-chip:hover,
.venues-pagination button:hover:not(:disabled) {
  transform: translateY(-2px);
  box-shadow: var(--dl-shadow-soft);
}

.venue-card:hover,
.venue-card:focus-visible {
  transform: translateY(-4px);
  box-shadow: var(--dl-shadow-lift);
}

.venue-gallery-thumbs button,
.venue-sub,
.venue-meta-grid > div,
.venue-facilities li {
  transition:
    transform 0.35s var(--dl-ease),
    box-shadow 0.35s var(--dl-ease),
    outline-color 0.35s var(--dl-ease-soft),
    opacity 0.35s var(--dl-ease-soft),
    background-color 0.35s var(--dl-ease-soft);
}

.venue-block {
  transition: box-shadow 0.45s var(--dl-ease), transform 0.45s var(--dl-ease);
}

.venue-detail-side .venue-block:hover {
  box-shadow: var(--dl-shadow-soft);
}

/* Skeleton */
.venue-skeleton,
.venues-skel {
  background: linear-gradient(90deg, #e4ebf3 0%, #f4f7fb 45%, #e4ebf3 90%);
  background-size: 200% 100%;
  animation: venue-shimmer 1.35s var(--dl-ease-soft) infinite;
  border-radius: 10px;
  color: transparent !important;
}

@keyframes venue-shimmer {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}

.venue-hero-copy.is-loading #venue-title,
.venue-hero-copy.is-loading #venue-summary {
  min-height: 1.2em;
}

@media (prefers-reduced-motion: reduce) {
  .venue-reveal,
  .venues-reveal,
  .dl-reveal,
  .venue-gallery-hero img,
  .venue-quick-actions a,
  .venue-actions a,
  .venue-links a,
  .venue-sticky-btn,
  .venue-gallery-thumbs button,
  .venue-sub,
  .venue-block,
  .venue-card,
  .venues-type-chip {
    transition: none !important;
    animation: none !important;
  }

  .venue-reveal,
  .venues-reveal,
  .dl-reveal {
    opacity: 1;
    transform: none;
  }
}

/* Shared human band */
.dl-human-band {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
  overflow: hidden;
  border-radius: 20px;
  min-height: 200px;
  background: #071b34;
  color: #fff;
  box-shadow: 0 18px 48px rgba(7, 27, 52, 0.16);
}

.dl-human-band img {
  width: 100%;
  height: 100%;
  min-height: 200px;
  object-fit: cover;
  display: block;
}

.dl-human-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
  padding: 28px 32px;
  background:
    radial-gradient(circle at 90% 10%, rgba(18, 108, 243, 0.35), transparent 45%),
    linear-gradient(135deg, #0a2344 0%, #071b34 60%);
}

.dl-human-copy .dl-kicker {
  margin: 0;
  color: var(--dl-lime);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.08em;
}

.dl-human-copy p:last-child {
  margin: 0;
  font-size: 1.05rem;
  font-weight: 600;
  line-height: 1.6;
  max-width: 28rem;
}

.dl-stat-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 16px;
}

.dl-stat-card {
  padding: 20px 18px;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.96);
  border: 1px solid rgba(7, 27, 52, 0.06);
  box-shadow: 0 8px 24px rgba(7, 27, 52, 0.05);
  transition: transform 0.35s var(--dl-ease), box-shadow 0.35s var(--dl-ease);
}

.dl-stat-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--dl-shadow-lift);
}

.dl-stat-card strong {
  display: block;
  font-size: clamp(1.4rem, 2.2vw, 1.85rem);
  font-weight: 800;
  color: var(--dl-blue);
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}

.dl-stat-card span {
  display: block;
  margin-top: 6px;
  font-size: 0.8rem;
  font-weight: 500;
  color: var(--dl-muted);
  line-height: 1.45;
}

@media (max-width: 900px) {
  .dl-human-band {
    grid-template-columns: 1fr;
  }

  .dl-stat-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 560px) {
  .dl-stat-grid {
    grid-template-columns: 1fr;
  }

  .dl-human-copy {
    padding: 22px 20px;
  }
}

/* v2/portal.css */
/* =========================================================
   Almanac Field Poster — independent portal design system
   Not venue-derived. Poster / kinetic / spatial.
   ========================================================= */

.portal-page {
  --ink: #061526;
  --ink-soft: #1a334d;
  --field: #0a2744;
  --blue: #126cf3;
  --lime: #baff19;
  --mist: #e8eef5;
  --paper: #fafbfd;
  --line: rgba(6, 21, 38, 0.1);
  --muted: #5a6f86;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  background: var(--paper);
  color: var(--ink);
  font-family: "Noto Sans Thai", sans-serif;
  font-variant-numeric: tabular-nums;
  min-height: 100vh;
  cursor: default;
}

.portal-page,
.portal-page button,
.portal-page input,
.portal-page select,
.portal-page a {
  font-family: "Noto Sans Thai", sans-serif;
}

/* ——— Masthead: full-bleed kinetic poster ——— */
.fp-mast {
  position: relative;
  isolation: isolate;
  min-height: clamp(320px, 52vh, 560px);
  display: grid;
  align-items: end;
  padding: 120px 0 48px;
  overflow: hidden;
  background: var(--field);
  color: #fff;
}

.fp-mast::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 80% 70% at 85% 20%, rgba(18, 108, 243, 0.45), transparent 55%),
    radial-gradient(ellipse 50% 50% at 10% 90%, rgba(186, 255, 25, 0.18), transparent 50%),
    linear-gradient(160deg, #061526 0%, #0a2744 55%, #0d3558 100%);
  z-index: 0;
}

.fp-mast-media {
  position: absolute;
  inset: 0;
  z-index: 1;
  opacity: 0.38;
  mix-blend-mode: luminosity;
}

.fp-mast-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.06);
  animation: fp-drift 18s var(--ease) infinite alternate;
}

@keyframes fp-drift {
  from { transform: scale(1.06) translate(0, 0); }
  to { transform: scale(1.12) translate(-1.5%, 1%); }
}

.fp-mast-watermark {
  position: absolute;
  left: -2%;
  bottom: -8%;
  z-index: 1;
  font-size: clamp(5rem, 18vw, 14rem);
  font-weight: 900;
  line-height: 0.8;
  letter-spacing: -0.06em;
  color: rgba(255, 255, 255, 0.06);
  pointer-events: none;
  user-select: none;
  white-space: nowrap;
}

.fp-mast-inner {
  position: relative;
  z-index: 2;
  width: min(1180px, calc(100% - 32px));
  margin: 0 auto;
  display: grid;
  gap: 16px;
}

.fp-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--lime);
}

.fp-eyebrow::before {
  content: "";
  width: 28px;
  height: 2px;
  background: var(--lime);
  border-radius: 2px;
}

.fp-mast h1 {
  margin: 0;
  max-width: 14ch;
  font-size: clamp(2.2rem, 5.5vw, 4rem);
  font-weight: 800;
  line-height: 1.15;
  letter-spacing: -0.03em;
}

.fp-mast h1 em {
  font-style: normal;
  color: var(--lime);
}

.fp-mast-lead {
  margin: 0;
  max-width: 34rem;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.75;
  color: rgba(255, 255, 255, 0.78);
}

.fp-mast-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 8px;
}

.fp-chip {
  display: inline-flex;
  align-items: center;
  min-height: 36px;
  padding: 6px 14px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.22);
  background: rgba(255, 255, 255, 0.08);
  backdrop-filter: blur(10px);
  font-size: 0.8rem;
  font-weight: 600;
  color: #fff;
}

/* Curved exit from mast — unique path per section feel */
.fp-swoosh {
  display: block;
  position: relative;
  z-index: 1200;
  width: 100%;
  height: 56px;
  margin-top: -1px;
  color: var(--paper);
  background: transparent;
  pointer-events: none;
}

.fp-swoosh svg {
  display: block;
  width: 100%;
  height: 100%;
}

/* ——— Stage / content ——— */
.fp-stage {
  width: 100%;
  max-width: none;
  margin: 0 auto;
  padding: 8px var(--page-gutter, 16px) 96px;
  box-sizing: border-box;
}

.fp-block {
  margin: 48px 0;
}

.fp-block-head {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  justify-content: space-between;
  gap: 12px 24px;
  margin-bottom: 20px;
}

.fp-block-head h2 {
  margin: 0;
  font-size: clamp(1.35rem, 2.4vw, 1.85rem);
  font-weight: 800;
  letter-spacing: -0.02em;
  line-height: 1.25;
}

.fp-block-head p {
  margin: 4px 0 0;
  font-size: 0.9rem;
  line-height: 1.65;
  color: var(--muted);
  max-width: 36rem;
}

/* ——— Featured: horizontal poster rail (not card grid) ——— */
.fp-rail {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(260px, 320px);
  gap: 16px;
  overflow-x: auto;
  padding: 8px 4px 24px;
  scroll-snap-type: x mandatory;
  scrollbar-width: thin;
  -webkit-overflow-scrolling: touch;
}

.fp-rail.is-auto-scroll {
  scroll-snap-type: none;
  scroll-behavior: auto;
  scrollbar-width: none;
}

.fp-rail.is-auto-scroll::-webkit-scrollbar {
  display: none;
}

.fp-rail.is-paused .fp-poster {
  transition-duration: 0.35s;
}

.fp-poster {
  position: relative;
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-height: 380px;
  padding: 20px;
  border-radius: 4px 28px 4px 28px;
  overflow: hidden;
  text-decoration: none;
  color: #fff;
  isolation: isolate;
  transform: translateZ(0);
  transition: transform 0.45s var(--ease), box-shadow 0.45s var(--ease);
  cursor: pointer;
  box-shadow: 0 20px 50px rgba(6, 21, 38, 0.18);
}

.fp-poster:hover,
.fp-poster:focus-visible {
  transform: translateY(-8px) rotate(-0.4deg);
  box-shadow: 0 28px 64px rgba(6, 21, 38, 0.28);
  outline: none;
}

.fp-poster-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
}

.fp-poster-bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.7s var(--ease);
}

.fp-poster:hover .fp-poster-bg img {
  transform: scale(1.08);
}

.fp-poster-bg::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 20%, rgba(6, 21, 38, 0.55) 55%, rgba(6, 21, 38, 0.92) 100%);
}

.fp-poster-body {
  position: relative;
  z-index: 1;
  display: grid;
  gap: 8px;
}

.fp-poster-body small {
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--lime);
}

.fp-poster-body strong {
  font-size: 1.05rem;
  font-weight: 800;
  line-height: 1.35;
}

.fp-poster-body span {
  font-size: 0.82rem;
  line-height: 1.55;
  color: rgba(255, 255, 255, 0.75);
}

/* ——— Human insert: diagonal split (not venue band) ——— */
.fp-insert {
  position: relative;
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  min-height: 280px;
  margin: 56px 0;
  border-radius: 32px 4px;
  overflow: hidden;
  background: var(--ink);
  color: #fff;
  box-shadow: 0 24px 60px rgba(6, 21, 38, 0.16);
}

.fp-insert-visual {
  position: relative;
  min-height: 240px;
}

.fp-insert-visual img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.fp-insert-copy {
  display: grid;
  align-content: center;
  gap: 12px;
  padding: 36px 40px;
  background:
    linear-gradient(135deg, rgba(18, 108, 243, 0.25), transparent 60%),
    var(--ink);
}

.fp-insert-copy h3 {
  margin: 0;
  font-size: clamp(1.3rem, 2.2vw, 1.7rem);
  font-weight: 800;
  line-height: 1.3;
}

.fp-insert-copy p {
  margin: 0;
  font-size: 0.95rem;
  line-height: 1.75;
  color: rgba(255, 255, 255, 0.78);
}

/* ——— Sticky filter rail ——— */
.fp-filters {
  position: sticky;
  top: 72px;
  z-index: 20;
  display: grid;
  grid-template-columns: 1.5fr repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin: 0 0 20px;
  padding: 14px;
  border-radius: 20px;
  background: rgba(250, 251, 253, 0.88);
  border: 1px solid var(--line);
  backdrop-filter: blur(14px);
  box-shadow: 0 12px 40px rgba(6, 21, 38, 0.06);
}

.fp-filters.is-2 {
  grid-template-columns: 1.6fr 1fr;
}

.fp-filters.is-1 {
  grid-template-columns: 1fr;
}

.fp-filters label {
  display: grid;
  gap: 6px;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--muted);
}

.fp-filters input,
.fp-filters select {
  min-height: 46px;
  width: 100%;
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 10px 14px;
  background: #fff;
  font: 500 0.92rem/1.4 "Noto Sans Thai", sans-serif;
  color: var(--ink);
  transition: border-color 0.35s var(--ease), box-shadow 0.35s var(--ease), transform 0.35s var(--ease);
}

.fp-filters input:hover,
.fp-filters select:hover {
  border-color: rgba(18, 108, 243, 0.35);
}

.fp-filters input:focus,
.fp-filters select:focus {
  outline: none;
  border-color: var(--blue);
  box-shadow: 0 0 0 4px rgba(18, 108, 243, 0.14);
  transform: translateY(-1px);
}

.fp-count {
  margin: 0 0 18px;
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--muted);
}

.fp-count b {
  color: var(--blue);
  font-weight: 800;
}

/* ——— Timeline list (events) ——— */
.fp-timeline {
  display: grid;
  gap: 0;
  border-left: 2px solid rgba(18, 108, 243, 0.18);
  margin-left: 18px;
}

.fp-time-item {
  position: relative;
  display: grid;
  grid-template-columns: 88px 1fr auto;
  gap: 16px;
  align-items: start;
  margin: 0 0 8px;
  padding: 14px 16px 14px 28px;
  text-decoration: none;
  color: inherit;
  border-radius: 0 18px 18px 0;
  transition: background 0.35s var(--ease), transform 0.35s var(--ease);
  cursor: pointer;
}

.fp-time-item::before {
  content: "";
  position: absolute;
  left: -7px;
  top: 26px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #fff;
  border: 3px solid var(--blue);
  box-shadow: 0 0 0 4px rgba(18, 108, 243, 0.12);
}

.fp-time-item:hover,
.fp-time-item:focus-visible {
  background: rgba(18, 108, 243, 0.05);
  transform: translateX(4px);
  outline: none;
}

.fp-time-day {
  display: grid;
  gap: 2px;
}

.fp-time-day strong {
  font-size: 1.55rem;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  color: var(--ink);
}

.fp-time-day small {
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--muted);
}

.fp-time-copy strong {
  display: block;
  font-size: 1rem;
  font-weight: 750;
  line-height: 1.4;
  margin-bottom: 4px;
}

.fp-time-copy span {
  font-size: 0.84rem;
  line-height: 1.55;
  color: var(--muted);
}

.fp-time-tag {
  align-self: center;
  padding: 6px 12px;
  border-radius: 999px;
  background: rgba(186, 255, 25, 0.35);
  color: #1f3a00;
  font-size: 0.72rem;
  font-weight: 700;
  white-space: nowrap;
}

/* ——— Calendar board ——— */
.fp-cal-wrap {
  padding: 20px;
  border-radius: 28px 8px;
  background:
    linear-gradient(145deg, rgba(18, 108, 243, 0.06), transparent 40%),
    #fff;
  border: 1px solid var(--line);
  box-shadow: 0 16px 48px rgba(6, 21, 38, 0.05);
}

.fp-cal-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 16px;
}

.fp-cal-nav h2 {
  margin: 0;
  font-size: 1.25rem;
  font-weight: 800;
  letter-spacing: -0.02em;
}

.fp-cal-nav button {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: #fff;
  font-size: 1.2rem;
  font-weight: 700;
  cursor: pointer;
  transition: transform 0.35s var(--ease), background 0.35s var(--ease), border-color 0.35s var(--ease);
}

.fp-cal-nav button:hover {
  transform: scale(1.06);
  background: var(--lime);
  border-color: transparent;
}

.fp-cal {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 6px;
}

.fp-cal .dow {
  text-align: center;
  padding: 8px 0;
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--muted);
}

.fp-cal-day {
  min-height: 72px;
  padding: 8px;
  border: 0;
  border-radius: 14px;
  background: var(--mist);
  font: inherit;
  color: inherit;
  text-align: left;
  width: 100%;
  transition: transform 0.35s var(--ease), background 0.35s var(--ease), box-shadow 0.35s var(--ease);
}

.fp-cal-day:disabled {
  opacity: 0.55;
  cursor: default;
}

.fp-cal-day.has-event {
  background: var(--field);
  color: #fff;
  cursor: pointer;
  box-shadow: 0 10px 28px rgba(10, 39, 68, 0.22);
}

.fp-cal-day.has-event:hover {
  transform: translateY(-3px) scale(1.02);
  background: var(--blue);
}

.fp-cal-day b {
  display: block;
  font-size: 0.95rem;
  font-weight: 800;
  margin-bottom: 4px;
}

.fp-cal-day span {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  font-size: 0.68rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--lime);
}

.fp-cal-day:disabled span {
  display: none;
}

/* ——— Roster (athletes) ——— */
.fp-stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 28px;
}

.fp-stat {
  position: relative;
  padding: 22px 20px;
  border-radius: 20px;
  background: #fff;
  border: 1px solid var(--line);
  overflow: hidden;
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
}

.fp-stat:hover {
  transform: translateY(-4px);
  box-shadow: 0 18px 40px rgba(6, 21, 38, 0.1);
}

.fp-stat::after {
  content: "";
  position: absolute;
  right: -20px;
  bottom: -24px;
  width: 90px;
  height: 90px;
  border-radius: 50%;
  background: rgba(186, 255, 25, 0.35);
}

.fp-stat strong {
  display: block;
  position: relative;
  z-index: 1;
  font-size: clamp(1.8rem, 3vw, 2.4rem);
  font-weight: 900;
  letter-spacing: -0.04em;
  line-height: 1;
  margin-bottom: 8px;
}

.fp-stat span {
  position: relative;
  z-index: 1;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--muted);
}

.fp-roster {
  display: grid;
  gap: 10px;
}

.fp-player {
  display: grid;
  grid-template-columns: 72px 1fr auto;
  gap: 16px;
  align-items: center;
  padding: 14px 18px;
  border-radius: 18px;
  background: #fff;
  border: 1px solid var(--line);
  transition: transform 0.35s var(--ease), box-shadow 0.35s var(--ease), border-color 0.35s var(--ease);
}

.fp-player:hover {
  transform: translateX(6px);
  border-color: rgba(18, 108, 243, 0.35);
  box-shadow: 0 14px 36px rgba(6, 21, 38, 0.08);
}

.fp-jersey {
  width: 64px;
  height: 64px;
  display: grid;
  place-items: center;
  border-radius: 16px;
  background: linear-gradient(145deg, var(--field), var(--blue));
  color: var(--lime);
  font-size: 1.5rem;
  font-weight: 900;
  letter-spacing: -0.04em;
}

.fp-player strong {
  display: block;
  font-size: 1rem;
  font-weight: 750;
  line-height: 1.35;
}

.fp-player span {
  font-size: 0.84rem;
  line-height: 1.55;
  color: var(--muted);
}

.fp-player em {
  font-style: normal;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--blue);
  padding: 6px 12px;
  border-radius: 999px;
  background: rgba(18, 108, 243, 0.08);
  white-space: nowrap;
}

/* ——— Results boards ——— */
.fp-board {
  margin-bottom: 14px;
  padding: 22px 24px;
  border-radius: 8px 28px;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 10px 32px rgba(6, 21, 38, 0.04);
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
}

.fp-board:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 44px rgba(6, 21, 38, 0.1);
}

.fp-board-top {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 8px 16px;
  margin-bottom: 10px;
}

.fp-board-top small {
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--blue);
}

.fp-board h3 {
  margin: 0 0 6px;
  font-size: 1.1rem;
  font-weight: 800;
  line-height: 1.35;
}

.fp-board > p {
  margin: 0 0 14px;
  font-size: 0.88rem;
  line-height: 1.6;
  color: var(--muted);
}

.fp-podium {
  display: grid;
  gap: 8px;
}

.fp-medal {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  padding: 10px 14px;
  border-radius: 12px;
  font-size: 0.85rem;
  font-weight: 650;
  line-height: 1.45;
}

.fp-medal.gold { background: linear-gradient(90deg, #fff6d6, #fff); color: #6b4e00; }
.fp-medal.silver { background: linear-gradient(90deg, #eef1f5, #fff); color: #3d4b5c; }
.fp-medal.bronze { background: linear-gradient(90deg, #f8e6d6, #fff); color: #6b3710; }

.fp-medal i {
  font-style: normal;
  font-size: 0.7rem;
  font-weight: 800;
  letter-spacing: 0.04em;
  opacity: 0.75;
}

/* ——— Overview layers ——— */
.fp-layers {
  display: grid;
  gap: 16px;
}

.fp-layer {
  display: grid;
  grid-template-columns: 0.9fr 1.1fr;
  gap: 0;
  border-radius: 28px;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--line);
  min-height: 220px;
}

.fp-layer:nth-child(even) {
  grid-template-columns: 1.1fr 0.9fr;
}

.fp-layer:nth-child(even) .fp-layer-visual {
  order: 2;
}

.fp-layer-visual {
  position: relative;
  background: var(--field);
  min-height: 200px;
}

.fp-layer-visual img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.85;
}

.fp-layer-body {
  padding: 28px 32px;
  display: grid;
  align-content: center;
  gap: 12px;
}

.fp-layer-body h2 {
  margin: 0;
  font-size: 1.2rem;
  font-weight: 800;
}

.fp-bar {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 4px 12px;
  margin-bottom: 10px;
}

.fp-bar span {
  font-size: 0.84rem;
  font-weight: 600;
}

.fp-bar strong {
  font-size: 0.84rem;
  font-weight: 800;
}

.fp-bar i {
  grid-column: 1 / -1;
  display: block;
  height: 7px;
  border-radius: 999px;
  background: var(--mist);
  overflow: hidden;
}

.fp-bar i::after {
  content: "";
  display: block;
  height: 100%;
  width: var(--w, 40%);
  border-radius: inherit;
  background: linear-gradient(90deg, var(--blue), var(--lime));
}

.fp-quality {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.fp-quality div {
  padding: 14px;
  border-radius: 14px;
  background: var(--mist);
}

.fp-quality dt {
  margin: 0 0 4px;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--muted);
}

.fp-quality dd {
  margin: 0;
  font-size: 1.05rem;
  font-weight: 800;
}

.fp-cta-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 28px;
}

.fp-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 0 22px;
  border-radius: 999px;
  background: var(--blue);
  color: #fff;
  font-weight: 700;
  font-size: 0.92rem;
  text-decoration: none;
  transition: transform 0.35s var(--ease), box-shadow 0.35s var(--ease), background 0.35s var(--ease);
  cursor: pointer;
  border: 0;
}

.fp-btn:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 28px rgba(18, 108, 243, 0.35);
}

.fp-btn-ghost {
  background: transparent;
  color: var(--ink);
  border: 1px solid var(--line);
}

.fp-btn-ghost:hover {
  background: var(--lime);
  border-color: transparent;
  box-shadow: none;
}

/* ——— Courses stacked editorial ——— */
.fp-course {
  display: grid;
  grid-template-columns: 220px 1fr auto;
  gap: 20px;
  align-items: center;
  margin-bottom: 14px;
  padding: 12px;
  border-radius: 22px;
  background: #fff;
  border: 1px solid var(--line);
  text-decoration: none;
  color: inherit;
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
  cursor: pointer;
  width: 100%;
  text-align: left;
  font: inherit;
  appearance: none;
  -webkit-appearance: none;
}

.fp-course:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 48px rgba(6, 21, 38, 0.1);
}

.fp-course-media {
  border-radius: 16px;
  overflow: hidden;
  aspect-ratio: 4 / 3;
  background: var(--mist);
}

.fp-course-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.55s var(--ease);
}

.fp-course:hover .fp-course-media img {
  transform: scale(1.06);
}

.fp-course small {
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--blue);
}

.fp-course strong {
  display: block;
  margin: 4px 0 6px;
  font-size: 1.02rem;
  font-weight: 800;
  line-height: 1.4;
}

.fp-course p {
  margin: 0;
  font-size: 0.86rem;
  line-height: 1.6;
  color: var(--muted);
}

.fp-course-go {
  font-size: 1.4rem;
  font-weight: 700;
  color: var(--blue);
  padding-right: 10px;
}

/* ——— Contact ——— */
.fp-contact {
  display: grid;
  grid-template-columns: 1.15fr 0.85fr;
  gap: 18px;
}

.fp-contact-panel {
  position: relative;
  padding: 36px 32px;
  border-radius: 28px 8px;
  overflow: hidden;
  background: var(--field);
  color: #fff;
  min-height: 320px;
}

.fp-contact-panel.alt {
  background: #fff;
  color: var(--ink);
  border: 1px solid var(--line);
  border-radius: 8px 28px;
}

.fp-contact-panel h2 {
  margin: 0 0 14px;
  font-size: 1.35rem;
  font-weight: 800;
  line-height: 1.3;
}

.fp-contact-panel p,
.fp-contact-panel a {
  font-size: 0.95rem;
  line-height: 1.75;
  color: inherit;
}

.fp-contact-panel a {
  color: var(--lime);
  font-weight: 700;
  text-decoration: none;
}

.fp-contact-panel.alt a {
  color: var(--blue);
}

.fp-contact-panel a:hover {
  text-decoration: underline;
}

/* ——— Detail page ——— */
.fp-detail-hero {
  position: relative;
  height: clamp(280px, 48vh, 520px);
  background: var(--field);
  overflow: hidden;
}

.fp-detail-hero img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.75;
}

.fp-detail-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 30%, rgba(6, 21, 38, 0.85));
}

.fp-detail-sheet {
  width: min(860px, calc(100% - 40px));
  margin: -100px auto 80px;
  position: relative;
  z-index: 2;
  padding: 36px 32px;
  border-radius: 28px 8px;
  background: rgba(250, 251, 253, 0.97);
  border: 1px solid var(--line);
  box-shadow: 0 28px 70px rgba(6, 21, 38, 0.18);
  backdrop-filter: blur(12px);
}

.fp-detail-sheet .fp-eyebrow {
  color: var(--blue);
}

.fp-detail-sheet .fp-eyebrow::before {
  background: var(--blue);
}

.fp-detail-sheet h1 {
  margin: 8px 0 12px;
  font-size: clamp(1.5rem, 3vw, 2.2rem);
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.02em;
}

.fp-detail-sheet .fp-lead {
  margin: 0 0 20px;
  font-size: 0.95rem;
  line-height: 1.7;
  color: var(--muted);
}

.fp-facts {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin: 0 0 22px;
}

.fp-facts div {
  padding: 14px 16px;
  border-radius: 14px;
  background: var(--mist);
}

.fp-facts dt {
  margin: 0 0 4px;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--muted);
}

.fp-facts dd {
  margin: 0;
  font-size: 0.92rem;
  font-weight: 700;
  line-height: 1.45;
}

.fp-detail-body {
  font-size: 0.95rem;
  line-height: 1.8;
  color: var(--ink-soft);
}

.fp-detail-body p {
  margin: 0 0 12px;
}

/* ——— Pagination / empty / skeleton ——— */
.fp-pages {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
  margin-top: 28px;
}

.fp-pages button {
  min-width: 44px;
  min-height: 44px;
  border-radius: 14px;
  border: 1px solid var(--line);
  background: #fff;
  font-weight: 700;
  cursor: pointer;
  transition: transform 0.3s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease);
}

.fp-pages button:hover {
  transform: translateY(-2px);
}

.fp-pages button[aria-current="page"] {
  background: var(--ink);
  border-color: var(--ink);
  color: #fff;
}

.fp-empty {
  padding: 48px 20px;
  text-align: center;
  color: var(--muted);
  font-size: 0.95rem;
  line-height: 1.7;
}

.fp-skel {
  height: 180px;
  border-radius: 20px;
  background: linear-gradient(90deg, #e4ebf2 20%, #f5f8fb 50%, #e4ebf2 80%);
  background-size: 200% 100%;
  animation: fp-shimmer 1.15s ease-in-out infinite;
  margin-bottom: 20px;
}

@keyframes fp-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* Reveal */
.fp-reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}

.fp-reveal.is-in {
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  .fp-mast-media img,
  .fp-skel,
  .fp-reveal {
    animation: none !important;
    transition: none !important;
    opacity: 1;
    transform: none;
  }
}

@media (max-width: 960px) {
  .fp-filters {
    grid-template-columns: 1fr 1fr;
    top: 64px;
  }

  .fp-stats {
    grid-template-columns: 1fr 1fr;
  }

  .fp-insert,
  .fp-layer,
  .fp-layer:nth-child(even),
  .fp-contact {
    grid-template-columns: 1fr;
  }

  .fp-layer:nth-child(even) .fp-layer-visual {
    order: 0;
  }

  .fp-course {
    grid-template-columns: 140px 1fr;
  }

  .fp-course-go {
    display: none;
  }
}

@media (max-width: 640px) {
  .fp-mast {
    padding: 104px 0 36px;
    min-height: 300px;
  }

  .fp-filters {
    grid-template-columns: 1fr;
    position: static;
  }

  .fp-time-item {
    grid-template-columns: 64px 1fr;
  }

  .fp-time-tag {
    grid-column: 2;
    justify-self: start;
  }

  .fp-player {
    grid-template-columns: 56px 1fr;
  }

  .fp-player em {
    grid-column: 2;
    justify-self: start;
  }

  .fp-cal-day {
    min-height: 52px;
    padding: 4px;
  }

  .fp-cal-day span {
    display: none;
  }

  .fp-facts,
  .fp-quality {
    grid-template-columns: 1fr;
  }

  .fp-detail-sheet {
    margin-top: -64px;
    padding: 24px 18px;
  }

  .fp-poster {
    min-height: 340px;
  }
}

/* v2/login-modal.css */
/* Login — compact split panel, fits one viewport */

.login-modal {
  border: 0;
  border-radius: 20px;
  padding: 0;
  width: min(760px, calc(100% - 24px));
  max-height: min(92dvh, 640px);
  height: auto;
  overflow: hidden;
  background: #fff;
  color: #071b34;
  box-shadow: 0 28px 80px rgba(0, 0, 0, 0.32);
  font-family: "Noto Sans Thai", sans-serif;
}

/* Native <dialog> must stay hidden when closed — never force display:block always */
.login-modal:not([open]) {
  display: none;
}

.login-modal[open] {
  display: block;
}

.login-modal::backdrop {
  background: rgba(3, 15, 36, 0.72);
  backdrop-filter: blur(5px);
}

/* Dialog top-layer + nav backdrop-filter hides the header logo in Chromium */
body:has(#login-modal[open]) .nav-shell,
body:has(#login-modal[open]) .nav-shell.is-scrolled {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  background: rgba(255, 255, 255, 0.96);
}

body:has(#login-modal[open]) .nav-shell .brand img {
  mix-blend-mode: normal;
}

.login-modal-shell {
  display: grid;
  grid-template-columns: minmax(200px, 0.78fr) minmax(280px, 1.22fr);
  max-height: inherit;
  height: min(620px, 90dvh);
}

.login-modal-brand {
  position: relative;
  display: grid;
  place-items: center;
  place-content: center;
  padding: 28px 22px;
  overflow: hidden;
  background: #fff;
  border-right: 1px solid #e6edf4;
}

.login-modal-brand-inner {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 100%;
  margin: 0 auto;
}

.login-modal-brand a {
  display: grid;
  place-items: center;
  width: 100%;
  text-decoration: none;
  pointer-events: auto;
}

.login-modal-brand img {
  display: block;
  width: min(220px, 78%);
  height: auto;
  margin: 0 auto;
  object-fit: contain;
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 0;
  box-shadow: none;
}

.login-modal-brand-eng,
.login-modal-brand-th,
.login-modal-brand-copy {
  display: none;
}

.login-modal-panel {
  position: relative;
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: #fff;
  overflow: hidden;
}

.login-modal-close {
  position: absolute;
  right: 12px;
  top: 12px;
  z-index: 40;
  border: 0;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: #eef3f8;
  color: #071b34;
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  display: grid;
  place-items: center;
  pointer-events: auto;
}

.login-modal-close:hover {
  background: #e2ebf4;
  color: #126cf3;
}

.login-modal-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
  padding: 28px 28px 22px;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
}

.login-modal-kicker {
  display: none;
}

.login-modal-body h2 {
  margin: 0 40px 14px 0;
  font: 750 24px/1.2 "Noto Sans Thai", sans-serif;
  letter-spacing: -0.03em;
  color: #071b34;
}

.login-modal-status {
  display: none;
  margin: 0 0 10px;
  padding: 8px 10px;
  border-radius: 10px;
  background: #eef7ff;
  color: #0b4ea2;
  font: 650 12px/1.4 "Noto Sans Thai", sans-serif;
}

.login-modal-status.is-visible { display: block; }
.login-modal-status.is-error { background: #fff1f0; color: #a12828; }

.login-modal-form {
  display: grid;
  gap: 10px;
}

.login-modal-form label {
  display: grid;
  gap: 5px;
  font: 650 12px/1.3 "Noto Sans Thai", sans-serif;
  color: #3a516a;
}

.login-modal-form input[type="email"],
.login-modal-form input[type="password"],
.login-modal-form input[type="text"] {
  width: 100%;
  min-height: 42px;
  border: 1px solid rgba(10, 18, 41, 0.12);
  border-radius: 11px;
  padding: 0 12px;
  background: #f7fafc;
  color: #071b34;
  font: 600 13px/1.3 "Noto Sans Thai", sans-serif;
  outline: 0;
  box-sizing: border-box;
}

.login-modal-form input:focus {
  border-color: #126cf3;
  box-shadow: 0 0 0 3px rgba(18, 108, 243, 0.14);
  background: #fff;
}

.login-modal-password {
  position: relative;
}

.login-modal-password input {
  padding-right: 42px;
}

.login-modal-toggle {
  position: absolute;
  right: 6px;
  bottom: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: #64788d;
  cursor: pointer;
  font-size: 15px;
  line-height: 1;
}

.login-modal-toggle:hover {
  color: #126cf3;
  background: rgba(18, 108, 243, 0.08);
}

.login-modal-toggle:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(18, 108, 243, 0.22);
}

.login-modal-toggle[aria-pressed="true"] {
  color: #126cf3;
}

.login-modal-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
}

.login-modal-check {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font: 600 12px/1.3 "Noto Sans Thai", sans-serif;
  color: #5a6f86;
  cursor: pointer;
}

.login-modal-check input {
  width: 18px;
  height: 18px;
  margin: 0;
  accent-color: #0264e5;
  flex: 0 0 auto;
}

.login-modal-check input:focus-visible {
  outline: 2px solid #0264e5;
  outline-offset: 2px;
}

.login-modal-check-note {
  font-weight: 500;
  color: #6d8298;
}

.login-modal-link {
  color: #126cf3;
  font: 700 12px/1.3 "Noto Sans Thai", sans-serif;
  text-decoration: none;
}

.login-modal-link:hover { text-decoration: underline; }

.login-modal-submit {
  width: 100%;
  min-height: 44px;
  margin-top: 2px;
  border: 0;
  border-radius: 999px;
  background: #0023b4;
  color: #fff;
  font: 750 14px/1 "Noto Sans Thai", sans-serif;
  cursor: pointer;
  transition: background 0.25s ease, transform 0.25s ease;
}

.login-modal-submit:hover {
  background: #126cf3;
  transform: translateY(-1px);
}

.login-modal-submit:disabled {
  opacity: 0.7;
  cursor: wait;
  transform: none;
}

.login-modal-register {
  margin: 2px 0 0;
  text-align: center;
  color: #5a6f86;
  font: 500 12px/1.4 "Noto Sans Thai", sans-serif;
}

.login-modal-register a {
  color: #0023b4;
  font-weight: 700;
  text-decoration: none;
}

.login-modal-register a:hover { text-decoration: underline; }

.login-modal-divider {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 10px;
  margin: 14px 0 12px;
  color: #8a9bb0;
  font: 600 11px/1 "Noto Sans Thai", sans-serif;
}

.login-modal-divider::before,
.login-modal-divider::after {
  content: "";
  height: 1px;
  background: rgba(10, 18, 41, 0.1);
}

.login-modal-lede {
  margin: 0 0 12px;
  color: #64788d;
  font: 500 12.5px/1.45 "Noto Sans Thai", sans-serif;
}

.login-modal-primary {
  margin: 0;
}

.login-modal-thaid {
  width: 100%;
  min-height: 48px;
  padding: 0 16px;
  border: 1px solid #d5dde7;
  border-radius: 999px;
  background: #fff;
  color: #122b45;
  font: 750 13.5px/1.2 "Noto Sans Thai", sans-serif;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  box-sizing: border-box;
  text-decoration: none !important;
  box-shadow: 0 1px 2px rgba(18, 43, 69, 0.06);
}

.login-modal-thaid:hover {
  border-color: #1b6bff;
  background: #f5f9ff;
  color: #0a3db5;
}

.login-modal-thaid-icon {
  width: 28px;
  height: 28px;
  flex: none;
  display: block;
  border-radius: 6px;
  object-fit: cover;
}

.login-modal-note {
  display: none;
}

@media (max-width: 700px) {
  .login-modal {
    width: min(400px, calc(100% - 18px));
    max-height: min(90dvh, 560px);
  }

  .login-modal-shell {
    grid-template-columns: 1fr;
    height: auto;
    max-height: min(90dvh, 560px);
  }

  .login-modal-brand {
    min-height: 110px;
    padding: 18px 16px;
    border-right: 0;
    border-bottom: 1px solid #e6edf4;
  }

  .login-modal-brand img {
    width: min(168px, 56%);
  }

  .login-modal-body {
    padding: 20px 18px 18px;
    justify-content: flex-start;
  }

  .login-modal-body h2 {
    font-size: 22px;
    margin-bottom: 12px;
  }
}

/* v2/site-foundation.css */
/* =========================================================
   Almanac Design System v3
   Source of truth = Homepage gateway + Field Poster patterns
   Load LAST on every page.
   Templates:
     body.tpl-landing     — index journey
     body.tpl-list        — list + filter (activities, athletes…)
     body.tpl-detail-map  — detail / map exploration
   ========================================================= */

:root {
  --gateway-blue: #126cf3;
  --gateway-navy: #071b34;
  --gateway-sky: #eaf4ff;
  --gateway-paper: #f4f7fa;
  --gateway-line: #d7e0e9;
  --gateway-text: #122b45;
  --gateway-muted: #64788d;
  --gateway-green: #20a779;
  --gateway-orange: #ff704d;
  --gateway-lime: #baff19;
  /* Accessible lime usage: never as small text on white */
  --gateway-lime-ink: #3d5c00;
  --gateway-lime-soft: #e8f7b8;
  --premium-ease: cubic-bezier(0.2, 0.75, 0.2, 1);
  --focus-ring: #126cf3;
  --focus-ring-offset: #baff19;

  --ink: var(--gateway-navy);
  --blue: var(--gateway-blue);
  --lime: var(--gateway-lime);
  --paper: var(--gateway-paper);
  --muted: var(--gateway-muted);
  --line: var(--gateway-line);
  --white: #fff;
  --field: var(--gateway-navy);
  --ink-soft: #1a334d;
  --mist: var(--gateway-sky);
  --ease: var(--premium-ease);

  --dl-ink: var(--gateway-navy);
  --dl-muted: var(--gateway-muted);
  --dl-blue: var(--gateway-blue);
  --dl-lime: var(--gateway-lime);
  --dl-paper: var(--gateway-paper);
  --dl-ease: var(--premium-ease);

  --z-base: 1;
  --z-section: 10;
  --z-ribbon: 1200;
  --z-connector: 1100;
  --z-nav: 1500;
  --z-modal: 2000;

  --page-gutter: var(--site-gutter);
  --shell-max: var(--site-wrap);
  --shell: min(var(--shell-max), calc(100% - var(--page-gutter) - var(--page-gutter)));
}

/* ——— Typography ——— */
html { font-family: "Noto Sans Thai", sans-serif; }

body,
body button,
body input,
body select,
body textarea,
body a,
.portal-page,
.portal-page button,
.portal-page input,
.portal-page select,
.portal-page a,
.venue-detail-page,
.venues-page,
.dashboard-page,
.abouts-page,
.province-page,
.province-shell {
  font-family: "Noto Sans Thai", sans-serif !important;
}

body {
  background: var(--gateway-paper);
  color: var(--gateway-text);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

::selection {
  background: var(--gateway-lime);
  color: var(--gateway-navy);
}

/* ——— Accessibility: focus ——— */
:focus { outline: none; }
:focus-visible:not(#hero-venue-search) {
  outline: 2px solid var(--focus-ring) !important;
  outline-offset: 3px !important;
  box-shadow: 0 0 0 4px rgba(186, 255, 25, 0.55) !important;
}

.skip:focus,
.skip:focus-visible {
  top: 12px !important;
  z-index: calc(var(--z-modal) + 1);
}

/* Lime never as tiny text on white */
.fp-poster-body small,
.fp-eyebrow,
.ab-kicker-on-dark {
  /* poster/dark contexts stay bright */
}
body:not(.tpl-landing) .fp-mast .fp-eyebrow,
.fp-mast .fp-chip,
.tpl-list .fp-eyebrow {
  color: var(--gateway-blue) !important;
}
.fp-mast .fp-eyebrow::before { background: var(--gateway-blue) !important; }

/* Soft lime surfaces instead of lime-on-white text */
.sport-ribbon-band {
  color: var(--gateway-navy);
}
.activity-editorial-list time strong {
  color: var(--gateway-navy);
}
.gateway-stats-ribbon,
.gateway-stats-ribbon .gateway-stat,
.gateway-stats-ribbon .gateway-stat strong,
.gateway-stats-ribbon .gateway-stats-rail b {
  color: #fff !important;
}
.gateway-stats-ribbon .gateway-stat small,
.gateway-stats-ribbon .gateway-stats-rail small {
  color: rgba(255, 255, 255, 0.9) !important;
}
.gateway-stats-ribbon .gateway-stat i,
.gateway-stats-ribbon .gateway-stats-signoff,
.gateway-stats-ribbon .gateway-stats-signoff strong,
.gateway-stats-ribbon .gateway-stats-signoff span {
  color: rgb(186, 255, 25) !important;
}

/* ——— Stacking contract ——— */
.nav-shell { z-index: var(--z-nav) !important; }
.journey-connector,
.nation > .journey-connector,
.journey-connector-ribbon,
.fp-swoosh,
.dl-swoosh,
.venue-swoosh,
.venues-swoosh,
.dash-swoosh {
  position: relative;
  z-index: var(--z-connector) !important;
  overflow: visible !important;
  pointer-events: none;
}
.sport-ribbon,
.sport-ribbon-band {
  position: relative;
  z-index: var(--z-ribbon) !important;
  overflow: visible !important;
}
.sport-ribbon-band {
  position: absolute !important;
}
.login-modal,
.activity-modal,
.venue-modal,
dialog.login-modal,
dialog.activity-modal {
  z-index: var(--z-modal);
}
.login-modal,
.activity-modal {
  max-height: min(92dvh, 640px);
  overflow: hidden;
}
.login-modal:not([open]),
.activity-modal:not([open]) {
  display: none !important;
}
.login-modal[open],
.activity-modal[open] {
  display: block;
}
.login-modal-body,
.activity-modal-body {
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}
.login-modal .login-modal-close {
  z-index: 30 !important;
  pointer-events: auto !important;
}

/* ——— Reduce motion ——— */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto !important; }
  .sport-ribbon-track,
  .journey-connector path,
  .fp-rail.is-auto-scroll,
  .green-heart-rail.is-auto-scroll,
  .kinetic-title,
  .fp-poster,
  .green-heart-card,
  .training-course-card {
    animation: none !important;
  }
  .fp-rail.is-auto-scroll,
  .green-heart-rail.is-auto-scroll {
    scroll-behavior: auto;
  }
  *,
  *::before,
  *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}

/* ——— Template shells ——— */
.tpl-shell {
  width: var(--shell);
  margin-inline: auto;
}

/* Full-bleed pages — no side gutters on main */
body.tpl-list main#main,
body.tpl-detail-map main#main {
  padding-inline: 0 !important;
  width: 100%;
  max-width: none;
  box-sizing: border-box;
}

.tpl-list .fp-stage,
.tpl-detail-map .fp-stage {
  background: #fff;
  width: 100%;
  max-width: none;
  margin-inline: 0;
  padding-inline: var(--page-gutter);
  box-sizing: border-box;
}

.tpl-list .fp-block,
.tpl-detail-map .fp-block {
  max-width: var(--shell-max);
  margin-inline: auto;
  padding-inline: 0;
}

.tpl-list .fp-mast-inner,
.tpl-detail-map .fp-mast-inner {
  width: var(--shell) !important;
  max-width: var(--shell-max);
  margin-inline: auto;
}

.tpl-detail-map .province-page-hero,
.tpl-detail-map .province-page-layout,
.tpl-detail-map .venue-archive,
.tpl-detail-map .province-report,
.tpl-detail-map .map-province-cta,
.tpl-list .venues-hero-inner,
.tpl-list .venues-toolbar,
.tpl-list .venues-type-row,
.tpl-list .venues-toolbar-inner,
.tpl-list .dash-hero-inner,
.tpl-list .dash-panel-inner,
.tpl-list .dash-band-wrap {
  width: 100%;
  max-width: var(--shell-max);
  margin-inline: auto;
  padding-inline: var(--page-gutter);
  box-sizing: border-box;
}

.tpl-detail-map .province-page-sidebar,
.tpl-detail-map .province-report-block,
.tpl-detail-map .province-panel {
  padding: clamp(20px, 2vw, 28px) !important;
}

.tpl-detail-map .province-map-head {
  padding: clamp(20px, 2vw, 28px) clamp(20px, 2vw, 28px) 0 !important;
}

.tpl-detail-map .province-map-key {
  padding-inline: clamp(20px, 2vw, 28px) !important;
}

.tpl-list .venues-hero,
.tpl-list .dash-hero,
.tpl-list .fp-mast,
.tpl-detail-map .venue-hero {
  padding-inline: 0 !important;
  width: 100%;
}

.tpl-list .venues-toolbar,
.tpl-list .dash-panel {
  padding-inline: 0 !important;
  width: 100%;
}

.noise {
  z-index: 2 !important;
  pointer-events: none !important;
}

.loader {
  z-index: 2500 !important;
}

.nav-shell,
.nav-shell .menu-button,
.nav-shell .mobile-menu {
  pointer-events: auto;
}

/* Shared mast (List + Detail) — homepage editorial light */
.portal-page {
  --ink: var(--gateway-navy);
  --blue: var(--gateway-blue);
  --lime: var(--gateway-lime);
  --mist: var(--gateway-sky);
  --paper: #fff;
  --line: rgba(7, 27, 52, 0.1);
  --muted: var(--gateway-muted);
  background: var(--gateway-paper);
  color: var(--gateway-text);
}

.fp-mast {
  min-height: clamp(260px, 38vh, 420px);
  background: #fff !important;
  color: var(--gateway-navy) !important;
  border-bottom: 1px solid var(--gateway-line);
}

.fp-mast::before {
  background:
    radial-gradient(ellipse 70% 60% at 88% 18%, rgba(18, 108, 243, 0.14), transparent 55%),
    radial-gradient(ellipse 45% 40% at 8% 90%, rgba(186, 255, 25, 0.16), transparent 50%),
    linear-gradient(180deg, #fff 0%, #f7fafc 100%) !important;
}

.fp-mast-media { opacity: 0.16; mix-blend-mode: luminosity; }
.fp-mast-watermark { color: rgba(7, 27, 52, 0.05) !important; }
.fp-mast h1 {
  color: var(--gateway-navy) !important;
  font-weight: 500 !important;
  letter-spacing: -0.06em;
}
.fp-mast h1 em { color: var(--gateway-blue) !important; }
.fp-mast-lead {
  color: var(--gateway-muted) !important;
  font-size: 14px;
  line-height: 1.75;
  max-width: 52ch;
}
.fp-chip {
  background: var(--gateway-sky) !important;
  color: var(--gateway-navy) !important;
  border: 1px solid rgba(18, 108, 243, 0.12) !important;
  backdrop-filter: none !important;
}
.fp-swoosh { color: #fff; }
.fp-stage { background: #fff; }
.fp-block-head h2,
.fp-cal-nav h2 {
  color: var(--gateway-navy);
  font-weight: 500;
  letter-spacing: -0.04em;
}
.fp-block-head p,
.fp-count { color: var(--gateway-muted); }

.fp-btn {
  background: var(--gateway-navy);
  color: #fff;
  border-radius: 999px;
  font-family: "Noto Sans Thai", sans-serif;
}
.fp-btn:hover { background: var(--gateway-blue); }
.fp-btn-ghost {
  background: transparent;
  color: var(--gateway-navy);
  border: 1px solid var(--gateway-line);
}
.fp-btn-ghost:hover {
  border-color: var(--gateway-blue);
  color: var(--gateway-blue);
  background: var(--gateway-sky);
}

.fp-filters input,
.fp-filters select {
  border: 1px solid var(--gateway-line);
  border-radius: 12px;
  background: #f7fafc;
  font-family: "Noto Sans Thai", sans-serif;
}
.fp-filters input:focus,
.fp-filters select:focus {
  border-color: var(--gateway-blue);
  box-shadow: 0 0 0 3px rgba(18, 108, 243, 0.14);
}

/* ——— Detail+Map template helpers ——— */
.tpl-detail-map .fp-detail-sheet,
.tpl-detail-map .province-page-main,
.tpl-detail-map .venue-detail-layout {
  background: #fff;
}
.fp-detail-sheet h1 {
  color: var(--gateway-navy);
  font-weight: 500;
}
.fp-detail-sheet .fp-eyebrow { color: var(--gateway-blue) !important; }
.fp-facts dt { color: var(--gateway-muted); }
.fp-facts dd { color: var(--gateway-navy); }

/* ——— Province / venues → same paper system ——— */
.province-page,
.venues-page,
.venue-detail-page {
  background: var(--gateway-paper) !important;
  color: var(--gateway-text) !important;
}
.province-page-hero,
.venues-hero,
.venue-hero {
  background: #fff;
  border-bottom: 1px solid var(--gateway-line);
}
.province-page-hero h1,
.venues-hero h1,
.abouts-page .ab-hero h1,
.dashboard-page .dash-hero h1 {
  color: var(--gateway-navy) !important;
  font-family: "Noto Sans Thai", sans-serif !important;
  font-weight: 500 !important;
  letter-spacing: -0.05em;
}
.province-page-hero h1 em,
.venues-hero h1 em,
.abouts-page .ab-hero h1 em {
  color: var(--gateway-blue) !important;
  font-style: normal;
}

.province-page-tools input,
.province-page-tools select,
.venue-archive-controls input,
.venue-archive-controls select {
  border-radius: 12px !important;
  border: 1px solid var(--gateway-line) !important;
  font-family: "Noto Sans Thai", sans-serif !important;
  background: #f7fafc !important;
}
.province-report-block,
.province-panel,
.venue-archive-card {
  border-radius: 18px;
  border: 1px solid var(--gateway-line);
  box-shadow: 0 14px 40px rgba(14, 47, 82, 0.05);
}

/* ——— Abouts / dashboard → gateway language ——— */
.abouts-page {
  background: var(--gateway-paper) !important;
  --navy: var(--gateway-navy);
  --blue: var(--gateway-blue);
  --lime: var(--gateway-lime);
  --paper: var(--gateway-paper);
  --line: var(--gateway-line);
  --muted: var(--gateway-muted);
}
.abouts-page .ab-hero {
  background: #fff !important;
  border-bottom: 1px solid var(--gateway-line);
}
.abouts-page .ab-kicker-on-dark {
  color: var(--gateway-lime);
}
.abouts-page .ab-story,
.abouts-page .ab-goals,
.abouts-page .ab-data,
.abouts-page .ab-people {
  background: #fff;
}
.dashboard-page {
  background: var(--gateway-paper) !important;
  --ink: var(--gateway-navy);
  --blue: var(--gateway-blue);
  --lime: var(--gateway-lime);
  --paper: var(--gateway-paper);
  --muted: var(--gateway-muted);
}
.dashboard-page .dash-hero {
  background: #fff;
  border-bottom: 1px solid var(--gateway-line);
  margin-bottom: 0;
}
.dashboard-page .dash-tabs a {
  border-radius: 999px;
  font-family: "Noto Sans Thai", sans-serif;
}
.dashboard-page .dash-panel {
  background: #fff;
  border: 1px solid var(--gateway-line);
  border-radius: 20px;
}

/* ——— Mobile login entry ——— */
.mobile-menu .mobile-login {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin-top: 8px;
  min-height: 48px;
  padding: 0 18px;
  border-radius: 999px;
  background: var(--gateway-navy);
  color: #fff !important;
  font-weight: 700;
  text-decoration: none;
}
.mobile-menu .mobile-login span { color: inherit; }

@media (max-width: 760px) {
  /* Keep desktop login hidden; use mobile-menu entry instead */
  .nav-actions .login { display: none !important; }
}

/* ——— Shared list interaction hover ——— */
.fp-time-item:hover,
.fp-course:hover,
.activity-editorial-list article:hover {
  background: #f5f9ff;
}

.gateway-section-intro small,
.activity-editorial-lead > small,
.green-heart-intro > small,
.ribbon-lead,
.fp-time-day strong,
.activity-editorial-list time strong {
  font-family: "Noto Sans Thai", sans-serif !important;
}

/* Keep public navigation independent of page typography and legacy chrome. */
header.nav-shell {
  font: 400 14px/normal "Noto Sans Thai", sans-serif;
  color: #122b45;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
}

header.nav-shell a {
  text-decoration: none;
}

header.nav-shell .menu-button {
  padding: 1px 6px;
}

html {
  scroll-padding-top: calc(var(--nav-top) + var(--nav-h) + 16px);
}

.nav-shell,
.nav-shell.is-scrolled {
  position: fixed;
  top: var(--nav-top);
  left: 50%;
  right: auto;
  width: min(var(--site-wrap), calc(100% - var(--site-gutter) - var(--site-gutter)));
  height: var(--nav-h);
  padding-inline: 12px;
  transform: translateX(-50%);
}

.nav-shell.is-scrolled {
  background: rgba(255, 255, 255, 0.96);
  border-color: rgba(7, 27, 52, 0.08);
  box-shadow: 0 8px 24px rgba(7, 27, 52, 0.08);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}

body:not(.tpl-landing) main > :first-child,
body:not(.tpl-landing) main > section:first-of-type {
  padding-block-start: calc(var(--nav-offset) + 8px);
}

.fp-mast,
.venues-hero,
.dash-hero,
.venue-hero {
  padding-block-start: calc(var(--nav-offset) + 8px);
}

.province-shell main > .province-page {
  padding-block-start: calc(var(--nav-offset) + 8px);
}

.tpl-landing .motion-hero .motion-copy {
  top: max(20%, calc(var(--nav-offset) + 46px));
}

/* The content box matches the capsule; gutters stay outside that width.
   content-box keeps max-width at --site-wrap while retaining shared padding. */
body.abouts-page main .tsa-about-wrap,
body main .hero > .hero-inner,
body main > .pub-list-shell,
body.tpl-list main > section.mx-auto,
body.tpl-detail-map main :is(.province-page-hero, .province-page-layout, .venue-archive, .province-report, .map-province-cta),
body.tpl-list main :is(.venues-hero-inner, .venues-toolbar-inner, .dash-hero-inner, .dash-panel-inner, .dash-band-wrap) {
  box-sizing: content-box;
  width: calc(100% - var(--site-gutter) - var(--site-gutter));
  max-width: var(--site-wrap);
  margin-inline: auto;
  padding-inline: var(--site-gutter);
}

/* Legacy heroes carried a second top inset inside the section. */
body:not(.tpl-landing) main > .hero {
  padding-inline: 0;
}
body:not(.tpl-landing) main > .hero > .hero-inner {
  padding-block-start: 0;
}

body.province-shell main .province-page-hero {
  margin-block-start: 0;
  padding-block-start: 0;
}

/* Keep navigation usable on first paint, without a delayed entrance. */
header.nav-shell,
header.nav-shell .desktop-nav a {
  animation: none;
}

/* v2/qa-responsive-fixes.css */
/**
 * QA responsive fixes (2026-09-11)
 * Round 4: mobile hero whitespace, swoosh under titles, hide footer on mobile
 */

:root {
  --qa-nav-clearance: calc(var(--nav-top) + var(--nav-h) + 16px + env(safe-area-inset-top, 0px));
  --qa-touch: 44px;
}

html {
  scroll-padding-top: var(--qa-nav-clearance);
}

#gateway-services,
#green-heart-events,
#nation,
#story,
#data-stats,
#sports-network,
#events,
#footer,
.gateway-services,
.green-heart,
.training-courses {
  scroll-margin-top: var(--qa-nav-clearance);
}

/* Decorative search glyph — not a separate control */
.hero-search-box > span {
  pointer-events: none;
  user-select: none;
}

/* Whole activity row is the hit target */
.activity-editorial-list article {
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.activity-editorial-list article > span {
  pointer-events: none;
}

/* ---------- ≤1100: tablet + mobile ---------- */
@media (max-width: 1100px) {
  :root {
    --qa-nav-clearance: calc(var(--nav-top) + var(--nav-h) + 16px + env(safe-area-inset-top, 0px));
  }

  .nav-shell,
  .nav-shell.is-scrolled {
    top: max(var(--nav-top), env(safe-area-inset-top, 0px));
  }

  .menu-button {
    width: var(--qa-touch);
    height: var(--qa-touch);
    min-width: var(--qa-touch);
    min-height: var(--qa-touch);
    touch-action: manipulation;
  }

  /* Logo home link — cinematic/site-nav shrinks img below 44px on narrow viewports */
  .nav-shell .brand,
  .brand {
    min-height: var(--qa-touch);
    display: inline-flex;
    align-items: center;
    box-sizing: border-box;
  }

  .nav-shell .brand img,
  .nav-shell.is-scrolled .brand img,
  .brand img {
    height: 44px !important;
    max-height: 44px;
    width: auto;
    max-width: 100%;
  }

  .mobile-menu {
    left: 0;
    right: 0;
    width: auto;
    max-height: min(78dvh, calc(100dvh - var(--qa-nav-clearance)));
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: 12px 12px calc(16px + env(safe-area-inset-bottom, 0px));
    border-radius: 20px;
    pointer-events: none;
  }

  .mobile-menu.open {
    pointer-events: auto;
  }

  .mobile-menu .mobile-direct,
  .mobile-accordion-trigger {
    min-height: 48px !important;
    padding: 14px 16px !important;
    box-sizing: border-box;
  }

  .mobile-submenu a,
  .mobile-submenu b {
    min-height: var(--qa-touch);
    display: flex;
    align-items: center;
    padding-top: 12px;
    padding-bottom: 12px;
    box-sizing: border-box;
  }

  .mobile-menu .mobile-login,
  .mobile-menu .mobile-login.login {
    min-height: var(--qa-touch) !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 100%;
    margin-top: 12px;
  }

  .activity-editorial-lead > a {
    min-height: var(--qa-touch);
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 12px 4px;
    box-sizing: border-box;
  }

  .activity-editorial-list article {
    min-height: 116px;
    padding-top: 16px;
    padding-bottom: 16px;
    align-items: center;
  }

  .green-heart-tab,
  .green-heart-province-trigger {
    min-height: var(--qa-touch);
    padding: 12px 18px;
    box-sizing: border-box;
  }

  .green-heart-controls button {
    width: var(--qa-touch);
    height: var(--qa-touch);
    min-width: var(--qa-touch);
    min-height: var(--qa-touch);
  }

  .training-course-detail-btn,
  .training-courses .green-heart-intro > a {
    min-height: var(--qa-touch);
    display: inline-flex;
    align-items: center;
    padding: 12px 16px;
    box-sizing: border-box;
  }

  .hero-search-box {
    min-height: 56px;
  }

  .hero-search-box input,
  .hero-search-box input[type="search"] {
    min-height: var(--qa-touch) !important;
    height: auto;
    align-self: stretch;
    box-sizing: border-box;
  }

  .hero-search-box button {
    height: var(--qa-touch) !important;
    min-height: var(--qa-touch) !important;
    min-width: 76px;
    padding: 0 18px !important;
  }

  .login,
  .circle-cta {
    min-height: var(--qa-touch);
  }

  /* Map + nation toolbar */
  .map-reset-btn,
  #map-reset,
  .nation-toolbar-inline button,
  .map-search button,
  .map-zoom button {
    min-height: var(--qa-touch) !important;
    min-width: var(--qa-touch);
    padding: 10px 14px !important;
    box-sizing: border-box;
  }

  .nation-toolbar-inline select,
  .nation-toolbar-inline input,
  .map-search input,
  #map-search,
  #province-select,
  #district-select {
    min-height: var(--qa-touch);
    box-sizing: border-box;
  }

  /* Footer links — real tap rows */
  body > footer a,
  #footer a {
    min-height: 0;
    display: flex !important;
    align-items: center;
    padding: 2px 0 !important;
    margin: 0 !important;
    box-sizing: border-box;
  }

  body > footer .footer-bottom a,
  #footer .footer-bottom a {
    min-height: auto;
    display: inline-flex !important;
    padding: 8px 0 !important;
  }
}

/* Tablet band: full-viewport hero + denser stats */
@media (min-width: 761px) and (max-width: 1100px) {
  .motion-hero {
    height: 100svh !important;
    min-height: 100svh !important;
    max-height: 100svh;
  }

  .motion-stage {
    height: 100% !important;
    min-height: 100% !important;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    justify-content: center;
    padding: calc(96px + env(safe-area-inset-top, 0px)) 0 48px;
    overflow: hidden;
    box-sizing: border-box;
  }

  .motion-copy {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    transform: none !important;
    width: min(640px, 86%);
    margin: 0 auto;
    z-index: 4;
  }

  .motion-copy h1 {
    font-size: clamp(42px, 6.2vw, 56px) !important;
    line-height: 1.08 !important;
  }

  .motion-sports {
    top: 46%;
    font-size: clamp(120px, 18vw, 200px);
    opacity: 0.38;
  }

  .motion-copy .hero-search {
    margin-top: clamp(28px, 4.5vh, 48px);
    width: min(520px, 100%);
    margin-inline: auto;
  }

  .gateway-stats-ribbon {
    padding: 22px 28px 14px;
  }

  .gateway-stats-ribbon:before {
    clip-path: polygon(0 14%, 100% 0, 100% 100%, 0 100%);
  }

  /* Don't stretch 3 stats across full iPad width — keep a compact cluster */
  .gateway-stats-inner {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    width: min(780px, 100%);
    max-width: 780px;
    margin: 0 auto;
    min-height: auto;
    gap: 0;
  }

  .gateway-stats-rail,
  .gateway-stats-signoff {
    display: none !important;
  }

  .gateway-stat {
    min-height: 88px;
    padding: 16px 14px;
    border-right: 1px solid rgba(255, 255, 255, 0.28);
  }

  .gateway-stat:last-of-type {
    border-right: 0;
  }

  .gateway-stat strong {
    font-size: clamp(1.7rem, 3.2vw, 2.15rem);
  }

  .gateway-stat small {
    font-size: 0.8rem;
    line-height: 1.35;
  }

  .activity-editorial {
    grid-template-columns: 1fr;
    gap: 36px;
  }

  .activity-editorial-list {
    grid-template-columns: 1fr 1fr;
  }

  .activity-editorial-list article:nth-child(even) {
    padding-left: 14px;
  }

  .mobile-menu {
    max-height: min(70dvh, calc(100dvh - 100px));
  }
}

/* Mobile extras */
@media (max-width: 760px) {
  :root {
    --qa-nav-clearance: calc(84px + env(safe-area-inset-top, 0px));
  }

  .activity-editorial-list {
    grid-template-columns: 1fr;
    padding-top: 4px;
  }

  .activity-editorial-list article:nth-child(even) {
    padding-left: 0;
    border-left: 0;
  }

  .hero-search-box input::placeholder {
    font-size: 11px;
  }

  .hero-search-box {
    min-height: 54px;
  }

  .green-heart-level-tabs {
    width: 100%;
    gap: 8px;
  }

  .green-heart-tab {
    flex: 1 1 auto;
    justify-content: center;
    text-align: center;
  }

  .event-arrows button {
    width: var(--qa-touch);
    height: var(--qa-touch);
  }
}

@media (min-width: 1101px) {
  .motion-hero {
    height: min(78svh, 720px);
    min-height: 600px;
  }
}

/* ---------- Layering: swoosh leads the eye; titles stay readable ----------
   Original CSS pulled intros up with negative margin so the dashed stroke cut
   through headings. Keep the curve between blocks (visible), keep copy clear. */
.journey-connector,
.nation > .journey-connector,
#green-heart-events + .journey-connector,
#gateway-services + .journey-connector,
.gateway-stats-ribbon + .journey-connector {
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
  pointer-events: none;
  overflow: visible !important;
}

/* Titles / stats labels above any residual curve overlap */
#gateway-services,
#green-heart-events,
#green-heart-events.green-heart,
.green-heart,
.gateway-services,
.training-courses,
.public-insights {
  z-index: auto !important;
  isolation: auto !important;
  overflow: visible !important;
}

.gateway-stats-ribbon {
  /* Keep isolation so :before clip fill stays inside the ribbon */
  isolation: isolate;
  overflow: hidden;
}

.gateway-stats-inner,
.gateway-stat {
  position: relative;
  z-index: 2;
}

/* Following swoosh must still read above the ribbon's bottom edge */
.gateway-stats-ribbon + .journey-connector {
  z-index: calc(var(--z-connector, 1100) + 1) !important;
}

/* Titles stay above residual curve overlap */
.gateway-section-intro,
.activity-editorial-lead,
.green-heart-intro,
#green-heart-events .green-heart-intro,
.nation-intro,
.training-courses .green-heart-intro,
.places-head,
.ribbon-lead {
  position: relative;
  z-index: calc(var(--z-connector, 1100) + 2) !important;
}
#green-heart-events .green-heart-intro,
#green-heart-events.green-heart .green-heart-intro {
  margin-top: 0 !important;
}

/* Connector rhythm handled by --connector-band in section rhythm block */
#gateway-services + .journey-connector,
.gateway-stats-ribbon + .journey-connector,
#green-heart-events + .journey-connector,
.nation > .journey-connector {
  /* keep visible; size set in rhythm tokens */
}

@media (max-width: 1100px) {
  #gateway-services + .journey-connector {
    margin-bottom: 0 !important;
  }
}

/* ---------- Mobile / tablet-shared: full-viewport hero ---------- */
@media (max-width: 760px) {
  .motion-hero {
    height: 100svh !important;
    min-height: 100svh !important;
    max-height: 100svh;
  }

  .motion-stage {
    height: 100% !important;
    min-height: 100% !important;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    justify-content: center;
    padding: calc(88px + env(safe-area-inset-top, 0px)) 0 calc(28px + env(safe-area-inset-bottom, 0px));
    overflow: hidden;
    box-sizing: border-box;
  }

  .motion-sports {
    top: 44%;
    font-size: clamp(88px, 26vw, 130px);
    opacity: 0.35;
    color: #fafbfc;
  }

  .motion-copy {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    transform: none !important;
    width: calc(100% - 40px);
    margin: 0 auto;
    z-index: 4;
  }

  /* Ticker stays out of hero (moved to footer by JS) */
  .association-ticker {
    position: relative !important;
    left: auto;
    right: auto;
    bottom: auto !important;
    margin-top: 0;
    z-index: 8;
  }

  body > footer,
  #footer {
    display: none !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .mobile-menu {
    transition: none;
  }
}

/* ---------- White canvas + section rhythm ---------- */
:root {
  --paper: #ffffff;
  --gateway-paper: #ffffff;
  /* Shared vertical rhythm — not pixel-identical gaps, one beat */
  --section-pad-y: 88px;
  --section-pad-x: 6vw;
  --section-pad-y-hero-next: 64px;
  --connector-band: 48px;
}

html,
body,
body.tpl-landing {
  background: #fff !important;
}

.motion-hero,
.motion-stage,
.gateway-services,
.gateway-stats-ribbon,
#gateway-services,
#green-heart-events,
.green-heart,
.public-insights,
.training-courses,
#nation,
.nation,
.places {
  background-color: #fff;
}

.motion-stage {
  background: #fff !important;
}

.gateway-services,
.public-insights,
#nation,
.nation,
.nation-shell,
.training-courses {
  background: #fff !important;
}

/* Search sits on top; soft shadow so hero doesn't look tinted vs section 2 */
.motion-copy .hero-search,
.hero-search {
  position: relative;
  z-index: 30;
  isolation: isolate;
}

.motion-copy .hero-search:before,
.hero-search:before {
  display: none !important;
  content: none !important;
  opacity: 0 !important;
}

.hero-search-box {
  position: relative;
  z-index: 31;
  background: #fff !important;
  box-shadow: 0 4px 14px rgba(7, 24, 49, 0.06) !important;
}

.hero-search-box:hover,
.hero-search-box:focus-within {
  box-shadow: 0 6px 18px rgba(7, 24, 49, 0.09) !important;
}

.hero-search-results {
  z-index: 40;
}

.motion-stage:before {
  opacity: 0.22;
}

.training-course-grid {
  gap: 12px !important;
}

.training-course-card {
  box-shadow: 0 4px 14px rgba(14, 47, 82, 0.06);
}

/* Content sections share one vertical beat */
#gateway-services.gateway-services,
.gateway-services {
  padding: var(--section-pad-y) var(--section-pad-x) !important;
}

#green-heart-events .green-heart-shell,
.green-heart-shell {
  padding-left: var(--section-pad-x);
  padding-right: var(--section-pad-x);
}

/* Courses live inside #nation which already has section-pad-x — avoid double inset */
#nation .training-courses .green-heart-shell,
.nation .training-courses .green-heart-shell {
  padding-left: 0 !important;
  padding-right: 0 !important;
  max-width: none;
}

/* Keep intentional <br> line breaks (2 lines) — balance was rewriting wraps */
#green-heart-title,
#training-courses-title,
.green-heart-intro h2.kinetic-title,
.training-courses .green-heart-intro h2 {
  text-wrap: unset !important;
  word-break: keep-all;
  overflow-wrap: normal;
  max-width: min(760px, 100%);
}

#green-heart-events .green-heart-intro,
.training-courses .green-heart-intro {
  max-width: min(760px, 100%);
  width: 100%;
}

/* Courses sit inside #nation — trim stacked top air before หลักสูตร */
.training-courses {
  padding-top: 28px !important;
  padding-bottom: calc(var(--section-pad-y) * 0.5) !important;
}

#nation.nation,
.nation {
  padding-top: calc(var(--section-pad-y) * 0.4) !important;
  padding-bottom: var(--section-pad-y) !important;
  /* horizontal inset lives on .nation-shell only (same as green-heart-shell) */
  padding-left: 0 !important;
  padding-right: 0 !important;
}

.nation-shell {
  padding-left: var(--site-gutter) !important;
  padding-right: var(--site-gutter) !important;
}

#green-heart-events.green-heart,
#green-heart-events,
.green-heart {
  padding-top: var(--section-pad-y) !important;
  padding-bottom: calc(var(--section-pad-y) * 0.55) !important;
}

.training-courses .green-heart-intro {
  margin-bottom: 20px !important;
}

.public-insights {
  padding-left: var(--section-pad-x) !important;
  padding-right: var(--section-pad-x) !important;
  padding-bottom: calc(var(--section-pad-y) * 0.65) !important;
}

/* Connectors live inside the beat — don't invent a second gap */
#gateway-services + .journey-connector,
#green-heart-events + .journey-connector,
.nation > .journey-connector {
  height: var(--connector-band) !important;
  margin: calc(var(--connector-band) / -2) 0 !important;
}

#green-heart-events .green-heart-intro,
#green-heart-events.green-heart .green-heart-intro {
  margin-top: 0 !important;
}

@media (min-width: 761px) and (max-width: 1100px) {
  :root {
    --section-pad-y: 72px;
    --section-pad-x: 22px;
    --section-pad-y-hero-next: 40px;
    --connector-band: 40px;
  }

  .gateway-stats-ribbon {
    padding-top: 18px;
    padding-bottom: 14px;
  }

  #gateway-services.gateway-services,
  .gateway-services {
    padding-top: var(--section-pad-y-hero-next) !important;
  }

  #nation.nation,
  .nation {
    padding-top: 4px !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  .training-courses {
    padding-top: 4px !important;
    padding-bottom: 40px !important;
  }

  #green-heart-events.green-heart,
  #green-heart-events,
  .green-heart {
    padding-bottom: 8px !important;
  }

  #green-heart-events + .journey-connector {
    height: 32px !important;
    margin: -6px 0 0 !important;
  }

  .training-courses .green-heart-intro {
    margin-bottom: 16px !important;
  }

  .green-heart-rail {
    padding-bottom: 0 !important;
  }

  .hero-search-box {
    border-radius: 999px !important;
  }

  .hero-search-box button {
    border-radius: 999px !important;
    height: 44px !important;
  }
}

@media (min-width: 1101px) {
  #nation.nation,
  .nation {
    padding-top: 6px !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  .training-courses {
    padding-top: 6px !important;
    padding-bottom: 48px !important;
  }

  #green-heart-events.green-heart,
  #green-heart-events,
  .green-heart {
    padding-bottom: 10px !important;
  }

  #green-heart-events + .journey-connector {
    height: 36px !important;
    margin: -8px 0 0 !important;
  }

  .training-courses .green-heart-intro {
    margin-bottom: 18px !important;
  }

  .green-heart-rail {
    padding-bottom: 0 !important;
  }

  .hero-search-box {
    border-radius: 999px !important;
  }

  .hero-search-box button {
    border-radius: 999px !important;
  }
}

@media (max-width: 760px) {
  :root {
    --section-pad-y: 52px;
    --section-pad-x: 18px;
    --section-pad-y-hero-next: 44px;
    --connector-band: 36px;
  }

  /* Hero: full viewport — center block, balanced gaps */
  .motion-stage {
    padding: calc(88px + env(safe-area-inset-top, 0px)) 0 calc(28px + env(safe-area-inset-bottom, 0px));
  }

  .motion-copy {
    width: calc(100% - 40px);
    margin: 0 auto;
  }

  .motion-copy h1 {
    font-size: clamp(34px, 9.2vw, 44px) !important;
    line-height: 1.12 !important;
    letter-spacing: -0.045em;
    margin-bottom: 0;
  }

  .motion-copy h1 em {
    font-size: 0.92em !important;
  }

  .motion-sports {
    top: 44%;
    font-size: clamp(72px, 22vw, 110px);
    opacity: 0.35;
    color: #fafbfc;
  }

  .motion-copy .hero-search {
    margin-top: clamp(24px, 5vh, 40px);
    width: 100%;
    margin-bottom: 0;
    z-index: 30;
  }

  .hero-search > label {
    margin-bottom: 10px;
  }

  /* Match pill search box + pill button (was 14px box vs 999px button) */
  .hero-search-box {
    min-height: 52px;
    height: 52px;
    padding: 0 5px 0 16px !important;
    border-radius: 999px !important;
    box-shadow: 0 2px 10px rgba(7, 24, 49, 0.05) !important;
    border-color: #d7e0e9;
  }

  .hero-search-box button {
    height: 42px !important;
    min-height: 42px !important;
    min-width: 78px;
    padding: 0 18px !important;
    font-size: 12px;
    border-radius: 999px !important;
  }

  .motion-stage:before {
    display: none !important;
  }

  .gateway-stats-ribbon,
  .gateway-stats-ribbon + .journey-connector {
    display: none !important;
  }

  #gateway-services.gateway-services,
  .gateway-services {
    padding: var(--section-pad-y-hero-next) var(--section-pad-x) var(--section-pad-y) !important;
    background: #fff !important;
  }

  #green-heart-events.green-heart,
  #green-heart-events,
  .green-heart {
    padding: var(--section-pad-y) 0 calc(var(--section-pad-y) * 0.5) !important;
  }

  #nation.nation,
  .nation {
    padding: 16px 0 var(--section-pad-y) !important;
  }

  .training-courses {
    padding-top: 16px !important;
    padding-bottom: 32px !important;
  }

  .training-courses .green-heart-intro {
    margin-bottom: 14px !important;
  }

  .training-course-grid {
    gap: 8px !important;
  }

  .training-course-card {
    box-shadow: 0 2px 8px rgba(14, 47, 82, 0.05);
  }

  .training-course-card-body {
    padding: 12px 12px 14px !important;
    gap: 6px !important;
  }

  .training-course-detail-btn {
    margin-top: 8px;
    padding: 10px 12px;
  }

  #gateway-services + .journey-connector,
  #green-heart-events + .journey-connector {
    height: var(--connector-band) !important;
    margin: calc(var(--connector-band) / -2) 0 !important;
  }

  .activity-editorial-lead > small {
    font-size: 10px;
    letter-spacing: 0.16em;
  }

  .activity-editorial-lead h2 {
    margin: 14px 0 18px !important;
    font-size: clamp(32px, 8.5vw, 40px) !important;
    line-height: 1.12 !important;
  }

  .activity-editorial-lead > a {
    font-size: 12px;
    margin-bottom: 8px;
  }

  .activity-editorial {
    gap: 22px !important;
  }

  .activity-editorial-list article {
    min-height: 88px !important;
    padding: 12px 0 !important;
    gap: 12px !important;
    grid-template-columns: 64px 1fr 18px !important;
  }

  .activity-editorial-list time strong {
    font-size: 36px !important;
  }

  .activity-editorial-list time small {
    font-size: 13px !important;
  }

  .activity-editorial-list h3 {
    font-size: 13px !important;
    line-height: 1.4 !important;
  }
}

/* css/app.css */
:root{--gateway-navy:#071b34;--gateway-blue:#126cf3;--gateway-lime:#baff19;--gateway-lime-ink:#3d5c00;--gateway-text:#122b45;--gateway-muted:#64788d;--gateway-line:#d7e0e9;--gateway-sky:#eaf4ff;--gateway-green:#20a779;--gateway-paper:#fff;--paper:#fff;--focus-ring:#126cf3;--focus-ring-offset:#baff19;--qa-touch:44px;--color-primary:#126cf3;--color-primary-soft:#eaf4ff;--color-ink:#071b34;--color-surface:#fff;--color-border:#d7e0e9;--color-success:#20a779;--color-warning:#b45309;--color-danger:#b91c1c;--color-muted:#64788d;--radius:0.625rem;--radius-sm:0.375rem;--shadow:0 1px 2px rgba(7,27,52,.06),0 1px 3px rgba(7,27,52,.04);--shadow-md:0 4px 14px rgba(7,27,52,.08);--sidebar-w:16.5rem;--topbar-h:3.5rem;--ease:180ms ease}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }html{scroll-behavior:smooth}body{font-family:Noto Sans Thai,Sarabun,ui-sans-serif,system-ui,sans-serif;--tw-text-opacity:1;color:rgb(7 27 52/var(--tw-text-opacity,1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#fff;line-height:1.5}a{color:#126cf3;text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit}table{border-collapse:collapse;width:100%}td,th{vertical-align:top}.breadcrumb,nav[aria-label=breadcrumb] ol,ol.list-none,ul.list-none{list-style:none!important;padding-left:0;margin:0}nav[aria-label=breadcrumb] li::marker{content:none}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border-radius:var(--radius);padding:.55rem 1rem;font-weight:600;text-decoration:none;border:1px solid var(--color-border);background:#fff;color:var(--color-ink);cursor:pointer;transition:background var(--ease),border-color var(--ease),color var(--ease)}.btn-ghost:hover{background:var(--color-surface);border-color:var(--color-primary);color:var(--color-primary);text-decoration:none}.btn-sm{padding:.35rem .7rem;font-size:.8rem}.form-stack{display:flex;flex-direction:column;gap:1rem}.badge-warning{background:#fff7ed;color:#c2410c;border-color:#ffedd5}.badge-danger{background:#fef2f2;color:#b91c1c;border-color:#fecaca}.alert-inline{border-radius:var(--radius);padding:.75rem 1rem;font-size:.9rem;border:1px solid transparent}.alert-inline.error{background:#fef2f2;border-color:#fecaca;color:#991b1b}.alert-inline.\!error{background:#fef2f2!important;border-color:#fecaca!important;color:#991b1b!important}.site-header{border-bottom:1px solid var(--color-border);background:#fff}.site-header .nav-inner{display:flex;max-width:64rem;margin:0 auto;align-items:center;justify-content:space-between;padding:1rem 1.25rem;gap:1rem;flex-wrap:wrap}.site-header .brand{font-size:1.25rem;font-weight:700;color:var(--color-ink);text-decoration:none;letter-spacing:-.02em}.site-header .brand:hover{color:var(--color-primary);text-decoration:none}.site-header ul{display:flex;flex-wrap:wrap;gap:.85rem 1.1rem;list-style:none;margin:0;padding:0}.site-header a{color:var(--color-ink);font-size:.95rem;font-weight:500;text-decoration:none}.site-header a:hover{color:var(--color-primary)}.hero{position:relative;overflow:hidden;background:#fff;border-bottom:1px solid var(--gateway-line)}.hero:after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:linear-gradient(90deg,var(--gateway-blue),var(--gateway-lime))}.hero-inner{position:relative;z-index:1;max-width:88rem;margin:0 auto;padding:clamp(3rem,8vw,5rem) 1.25rem 3.5rem}.hero h1{margin:0;font-size:clamp(2rem,4.4vw,3.25rem);font-weight:700;color:var(--color-ink);letter-spacing:-.03em;line-height:1.15;text-wrap:unset;word-break:keep-all}.hero h1 em{font-style:normal;color:var(--gateway-blue)}.hero p{margin:1rem 0 0;max-width:36rem;font-size:1.05rem;color:var(--color-muted)}.hero-cta{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:var(--qa-touch);padding:.55rem 1.15rem;border-radius:999px;border:1px solid var(--gateway-line);background:#fff;color:var(--color-ink);font-size:.9rem;font-weight:600;text-decoration:none}.hero-cta:hover{border-color:var(--gateway-blue);color:var(--gateway-blue);text-decoration:none}.hero-cta.is-primary{background:var(--gateway-navy);border-color:var(--gateway-navy);color:#fff}.hero-cta.is-primary:hover{background:var(--gateway-blue);border-color:var(--gateway-blue);color:#fff}.\!btn{display:inline-flex!important;align-items:center!important;justify-content:center!important;gap:.4rem!important;border-radius:var(--radius)!important;padding:.6rem 1.1rem!important;font-weight:600!important;text-decoration:none!important;border:1px solid transparent!important;cursor:pointer!important;transition:background var(--ease),border-color var(--ease),color var(--ease),opacity var(--ease),transform var(--ease)!important}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border-radius:var(--radius);padding:.6rem 1.1rem;font-weight:600;text-decoration:none;border:1px solid transparent;cursor:pointer;transition:background var(--ease),border-color var(--ease),color var(--ease),opacity var(--ease),transform var(--ease)}.\!btn:active{transform:translateY(1px)!important}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover{opacity:.92;text-decoration:none;color:#fff}.btn-icon{padding:.55rem 1rem;font-size:.88rem;gap:.35rem}.btn-icon svg{flex-shrink:0}.btn-danger{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius);padding:.45rem .85rem;font-weight:600;font-size:.85rem;border:1px solid #fecaca;background:#fef2f2;cursor:pointer;transition:background var(--ease),border-color var(--ease)}.btn-danger,.btn-danger:hover{text-decoration:none;color:var(--color-danger)}.btn-danger:hover{background:#fee2e2;border-color:#fca5a5}.crud-actions .\!btn{padding:.35rem .7rem!important;font-size:.8rem!important}.crud-actions .btn,.crud-actions .btn-danger{padding:.35rem .7rem;font-size:.8rem}form.inline-flex{display:inline-flex;margin:0}.site-footer{border-top:1px solid var(--color-border);background:#fff}.site-footer .footer-inner{max-width:64rem;margin:0 auto;padding:2rem 1.25rem;font-size:.875rem;color:var(--color-muted)}.page-section{max-width:64rem;margin:0 auto;padding:2rem 1.25rem 3rem}body.admin-body{background:var(--color-surface)}.admin-shell{display:flex;min-height:100vh;background:radial-gradient(1200px 400px at 100% -10%,rgba(20,138,234,.07),transparent 55%),var(--color-surface)}.admin-sidebar{position:fixed;inset:0 auto 0 0;z-index:40;display:flex;width:var(--sidebar-w);flex-direction:column;background:linear-gradient(180deg,#00103f 0,var(--color-ink) 55%,#00082a 100%);color:#e8eef7;transform:translateX(-105%);transition:transform var(--ease);box-shadow:var(--shadow-md)}.admin-shell.is-nav-open .admin-sidebar{transform:translateX(0)}.admin-sidebar .side-inner{display:flex;flex-direction:column;height:100%;padding:1.15rem .85rem 1.25rem;overflow-y:auto}.admin-sidebar .brand-block{display:flex;align-items:center;gap:.75rem;padding:.35rem .55rem 1.1rem;border-bottom:1px solid hsla(0,0%,100%,.08);margin-bottom:1rem;text-decoration:none;color:inherit}.admin-sidebar .brand-block:hover{text-decoration:none;color:#fff}.admin-sidebar .brand-mark{display:grid;place-items:center;width:2.25rem;height:2.25rem;border-radius:.55rem;background:var(--color-primary);color:#fff;font-weight:700;font-size:.85rem;letter-spacing:-.02em;flex-shrink:0}.admin-sidebar .brand-text strong{display:block;font-size:.95rem;font-weight:700;letter-spacing:-.02em;color:#fff}.admin-sidebar .brand-text span{display:block;font-size:.72rem;color:rgba(232,238,247,.62);margin-top:.1rem}.admin-sidebar .nav-group+.nav-group{margin-top:1.1rem}.admin-sidebar .nav-label{margin:0 0 .4rem;padding:0 .65rem;font-size:.68rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:rgba(232,238,247,.45)}.admin-sidebar ul{list-style:none;margin:0;padding:0}.admin-sidebar li+li{margin-top:.15rem}.admin-sidebar a.nav-link{display:flex;align-items:center;gap:.55rem;border-radius:var(--radius-sm);padding:.55rem .65rem;color:rgba(232,238,247,.82);font-size:.9rem;font-weight:500;text-decoration:none;transition:background var(--ease),color var(--ease)}.admin-sidebar a.nav-link:hover{background:hsla(0,0%,100%,.06);color:#fff;text-decoration:none}.admin-sidebar a.nav-link[aria-current=page]{background:rgba(20,138,234,.22);color:#fff;box-shadow:inset 3px 0 0 var(--color-primary)}.admin-sidebar .nav-ico{display:inline-flex;align-items:center;justify-content:center;text-align:center;opacity:.75;line-height:1;flex-shrink:0}.admin-sidebar .nav-ico,.admin-sidebar .nav-ico .fa-solid{width:1.15rem;font-size:.95rem}.admin-sidebar a.nav-link[aria-current=page] .nav-ico{opacity:1;color:#7ec8ff}.admin-backdrop{display:none;position:fixed;inset:0;z-index:30;background:rgba(0,11,53,.45);border:0;padding:0;cursor:pointer}.admin-shell.is-nav-open .admin-backdrop{display:block}.admin-main{display:flex;min-width:0;flex:1;flex-direction:column;width:100%}.admin-top .top-left{display:flex;align-items:center;gap:.75rem;min-width:0}.admin-top .menu-toggle{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:#fff;color:var(--color-ink);cursor:pointer}.admin-top .menu-toggle:hover{border-color:var(--color-primary);color:var(--color-primary)}.admin-top .title-stack{min-width:0}.admin-top .eyebrow{margin:0;font-size:.7rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--color-muted)}.admin-top .title{margin:0;font-size:.98rem;font-weight:700;color:var(--color-ink);letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-content{flex:1;padding:1.15rem 1rem 2rem}.admin-alert{display:flex;align-items:flex-start;gap:.65rem;margin-bottom:1rem;border-radius:var(--radius);padding:.85rem 1rem;font-size:.92rem;border:1px solid transparent}.admin-alert-success{background:#f0fdf4;border-color:#bbf7d0;color:#166534}.admin-alert-error{background:#fef2f2;border-color:#fecaca;color:#991b1b}.page-head{display:grid;gap:.85rem;margin-bottom:1.25rem}.page-head h1{margin:0;font-size:clamp(1.35rem,2vw,1.65rem);font-weight:700;letter-spacing:-.02em;color:var(--color-ink)}.page-head .lede{margin:.35rem 0 0;color:var(--color-muted);font-size:.95rem}.page-head-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;width:100%}.page-head-actions .btn{min-height:2.75rem;width:100%;justify-content:center}.page-head-actions .\!btn{min-height:2.75rem!important;width:100%!important;justify-content:center!important}.\!panel{background:#fff!important;border:1px solid var(--color-border)!important;border-radius:calc(var(--radius) + .1rem)!important;box-shadow:var(--shadow)!important;overflow:hidden!important}.panel{background:#fff;border:1px solid var(--color-border);border-radius:calc(var(--radius) + .1rem);box-shadow:var(--shadow);overflow:hidden}.toolbar{display:grid;gap:.65rem;margin:0 0 1rem}.toolbar .btn{min-height:2.75rem;width:100%;justify-content:center}.toolbar .\!btn{min-height:2.75rem!important;width:100%!important;justify-content:center!important}.toolbar .search-field{width:100%;min-width:0;border:1px solid var(--color-border);border-radius:var(--radius);padding:.55rem .8rem;background:#fff}.toolbar .search-field:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(20,138,234,.18)}.stat-card .\!label{margin:0!important;font-size:.8rem!important;font-weight:600!important;color:var(--color-muted)!important;letter-spacing:.01em!important}.stat-card .label{margin:0;font-size:.8rem;font-weight:600;color:var(--color-muted);letter-spacing:.01em}.stat-card .value{margin:.4rem 0 0;font-size:clamp(1.45rem,2.4vw,1.85rem);font-weight:700;color:var(--color-ink);letter-spacing:-.03em;line-height:1.1}.stat-card .hint{margin:.45rem 0 0;font-size:.75rem;color:var(--color-primary);font-weight:600}.admin-content table.min-w-full,.data-table{border-collapse:collapse;width:100%;font-size:.9rem}.admin-content table.min-w-full thead,.data-table thead{background:#f7f9fb}.admin-content table.min-w-full th,.data-table th{text-align:left;font-size:.75rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--color-muted);padding:.75rem 1rem;border-bottom:1px solid var(--color-border);white-space:nowrap}.admin-content table.min-w-full td,.data-table td{padding:.8rem 1rem;border-bottom:1px solid #edf1f5;color:var(--color-ink);vertical-align:middle}.admin-content table.min-w-full tbody tr:last-child td,.data-table tbody tr:last-child td{border-bottom:0}.admin-content table.min-w-full tbody tr:hover td,.data-table tbody tr:hover td{background:#fafcfe}.badge{display:inline-flex;align-items:center;gap:.25rem;border-radius:999px;padding:.15rem .55rem;font-size:.72rem;font-weight:700;letter-spacing:.01em;border:1px solid transparent;white-space:nowrap}.admin-content form.max-w-2xl,.admin-content form.mt-6.max-w-2xl,.admin-content form.mt-6.max-w-xl{background:#fff;border:1px solid var(--color-border);border-radius:calc(var(--radius) + .1rem);box-shadow:var(--shadow);padding:1.25rem}.admin-content label{color:#1e293b}.admin-content input:not([type]),.admin-content input[type=date],.admin-content input[type=email],.admin-content input[type=number],.admin-content input[type=password],.admin-content input[type=text],.admin-content select,.admin-content textarea{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:#fff;transition:border-color var(--ease),box-shadow var(--ease)}.admin-content input:focus,.admin-content select:focus,.admin-content textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(20,138,234,.16)}.breadcrumb{display:flex;flex-wrap:wrap;gap:.45rem;list-style:none!important;margin:0 0 .85rem;padding:0;font-size:.82rem;color:var(--color-muted)}.breadcrumb li{list-style:none}.breadcrumb a{color:var(--color-muted);font-weight:500}.breadcrumb a:hover{color:var(--color-primary)}.breadcrumb .current{color:var(--color-ink);font-weight:600}@media (min-width:640px){.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between}.page-head-actions,.page-head-actions .btn,.toolbar .btn{width:auto}.toolbar{display:flex;flex-wrap:wrap;align-items:center}.toolbar .search-field{flex:1 1 14rem;width:auto}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.page-head-actions .\!btn,.toolbar .\!btn{width:auto!important}}@media (min-width:768px){.admin-sidebar{position:sticky;top:0;height:100vh;transform:none;flex-shrink:0}.admin-backdrop{display:none!important}.admin-top .menu-toggle{display:none}.admin-top{padding:.65rem 1.5rem}.admin-top .user-chip{display:flex}.admin-content{padding:1.5rem 1.75rem 2.5rem}.stat-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.left-0{left:0}.right-0\.5{right:.125rem}.top-0{top:0}.top-1\/2{top:50%}.z-10{z-index:10}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[3\/5\]{aspect-ratio:3/5}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-8{height:2rem}.h-80{height:20rem}.h-auto{height:auto}.h-full{height:100%}.max-h-48{max-height:12rem}.max-h-80{max-height:20rem}.max-h-\[28rem\]{max-height:28rem}.max-h-\[560px\]{max-height:560px}.max-h-\[640px\]{max-height:640px}.min-h-11{min-height:2.75rem}.min-h-7{min-height:1.75rem}.min-h-8{min-height:2rem}.min-h-\[4\.5rem\]{min-height:4.5rem}.min-h-\[var\(--tsa-control-h\)\]{min-height:var(--tsa-control-h)}.min-h-dvh{min-height:100dvh}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-24{width:6rem}.w-28{width:7rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-11{min-width:2.75rem}.min-w-6{min-width:1.5rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[36rem\]{min-width:36rem}.min-w-\[40rem\]{min-width:40rem}.min-w-\[640px\]{min-width:640px}.min-w-\[960px\]{min-width:960px}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[160px\]{max-width:160px}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-\[\#d7e0e9\]>:not([hidden])~:not([hidden]),.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(215 224 233/var(--tw-divide-opacity,1))}.justify-self-start{justify-self:start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.625rem}.rounded-2xl{border-radius:1rem}.rounded-\[0\.2rem\]{border-radius:.2rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-t{border-top-left-radius:.625rem;border-top-right-radius:.625rem}.border{border-width:1px}.border-0{border-width:0}.border-b{border-bottom-width:1px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[\#126cf3\]{--tw-border-opacity:1;border-color:rgb(18 108 243/var(--tw-border-opacity,1))}.border-\[\#126cf3\]\/30{border-color:rgba(18,108,243,.3)}.border-\[\#20a779\]{--tw-border-opacity:1;border-color:rgb(32 167 121/var(--tw-border-opacity,1))}.border-\[\#20a779\]\/40{border-color:rgba(32,167,121,.4)}.border-\[\#86efac\]{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity,1))}.border-\[\#bbf7d0\]{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-\[\#d7e0e9\]{--tw-border-opacity:1;border-color:rgb(215 224 233/var(--tw-border-opacity,1))}.border-\[\#e8eef4\]{--tw-border-opacity:1;border-color:rgb(232 238 244/var(--tw-border-opacity,1))}.border-\[\#eef3f9\]{--tw-border-opacity:1;border-color:rgb(238 243 249/var(--tw-border-opacity,1))}.border-\[\#f1c4c8\]{--tw-border-opacity:1;border-color:rgb(241 196 200/var(--tw-border-opacity,1))}.border-\[\#f59e0b\]{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-\[\#fbbf24\]{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.border-\[\#fde68a\]{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-\[\#fecaca\]{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-border{--tw-border-opacity:1;border-color:rgb(215 224 233/var(--tw-border-opacity,1))}.border-danger{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-success{--tw-border-opacity:1;border-color:rgb(32 167 121/var(--tw-border-opacity,1))}.border-warning{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity,1))}.bg-\[\#071b34\]{--tw-bg-opacity:1;background-color:rgb(7 27 52/var(--tw-bg-opacity,1))}.bg-\[\#0f172a\]{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-\[\#126cf3\]{--tw-bg-opacity:1;background-color:rgb(18 108 243/var(--tw-bg-opacity,1))}.bg-\[\#1e5a8a\]{--tw-bg-opacity:1;background-color:rgb(30 90 138/var(--tw-bg-opacity,1))}.bg-\[\#2f7d4a\]{--tw-bg-opacity:1;background-color:rgb(47 125 74/var(--tw-bg-opacity,1))}.bg-\[\#c2410c\]{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.bg-\[\#dbeafe\]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-\[\#dcfce7\]{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-\[\#e8eef5\]{--tw-bg-opacity:1;background-color:rgb(232 238 245/var(--tw-bg-opacity,1))}.bg-\[\#e8f8f1\]{--tw-bg-opacity:1;background-color:rgb(232 248 241/var(--tw-bg-opacity,1))}.bg-\[\#eaf4ff\]{--tw-bg-opacity:1;background-color:rgb(234 244 255/var(--tw-bg-opacity,1))}.bg-\[\#ecfdf5\]{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-\[\#eef3f9\]{--tw-bg-opacity:1;background-color:rgb(238 243 249/var(--tw-bg-opacity,1))}.bg-\[\#f0fdf4\]{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-\[\#f1f6fd\]{--tw-bg-opacity:1;background-color:rgb(241 246 253/var(--tw-bg-opacity,1))}.bg-\[\#f4f7fb\]{--tw-bg-opacity:1;background-color:rgb(244 247 251/var(--tw-bg-opacity,1))}.bg-\[\#f4f8fb\]{--tw-bg-opacity:1;background-color:rgb(244 248 251/var(--tw-bg-opacity,1))}.bg-\[\#f7fafd\]{--tw-bg-opacity:1;background-color:rgb(247 250 253/var(--tw-bg-opacity,1))}.bg-\[\#f8fafc\]{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-\[\#fef2f2\]{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-\[\#fef3c7\]{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-\[\#fff5f6\]{--tw-bg-opacity:1;background-color:rgb(255 245 246/var(--tw-bg-opacity,1))}.bg-\[\#fffbeb\],.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-border{--tw-bg-opacity:1;background-color:rgb(215 224 233/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-ink{--tw-bg-opacity:1;background-color:rgb(7 27 52/var(--tw-bg-opacity,1))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(18 108 243/var(--tw-bg-opacity,1))}.bg-primary\/10{background-color:rgba(18,108,243,.1)}.bg-primary\/20{background-color:rgba(18,108,243,.2)}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-success{--tw-bg-opacity:1;background-color:rgb(32 167 121/var(--tw-bg-opacity,1))}.bg-success\/10{background-color:rgba(32,167,121,.1)}.bg-success\/20{background-color:rgba(32,167,121,.2)}.bg-surface{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-warning\/10{background-color:rgba(180,83,9,.1)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-5{padding-left:1.25rem}.pl-6{padding-left:1.5rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pt-1{padding-top:.25rem}.pt-12{padding-top:3rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Noto Sans Thai,Sarabun,ui-sans-serif,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[0\.95rem\]{font-size:.95rem}.text-\[clamp\(1\.65rem\2c 3vw\2c 2\.15rem\)\]{font-size:clamp(1.65rem,3vw,2.15rem)}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.text-\[\#047857\]{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-\[\#065f46\]{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity,1))}.text-\[\#071b34\]{--tw-text-opacity:1;color:rgb(7 27 52/var(--tw-text-opacity,1))}.text-\[\#122b45\]{--tw-text-opacity:1;color:rgb(18 43 69/var(--tw-text-opacity,1))}.text-\[\#126cf3\]{--tw-text-opacity:1;color:rgb(18 108 243/var(--tw-text-opacity,1))}.text-\[\#166534\]{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-\[\#1e3a8a\]{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-\[\#20a779\]{--tw-text-opacity:1;color:rgb(32 167 121/var(--tw-text-opacity,1))}.text-\[\#334155\]{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-\[\#44566c\]{--tw-text-opacity:1;color:rgb(68 86 108/var(--tw-text-opacity,1))}.text-\[\#475569\]{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-\[\#64788d\]{--tw-text-opacity:1;color:rgb(100 120 141/var(--tw-text-opacity,1))}.text-\[\#8ec8f6\]{--tw-text-opacity:1;color:rgb(142 200 246/var(--tw-text-opacity,1))}.text-\[\#92400e\]{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-\[\#9f1239\]{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity,1))}.text-\[\#b45309\]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-\[\#d5e4f2\]{--tw-text-opacity:1;color:rgb(213 228 242/var(--tw-text-opacity,1))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-danger{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-ink{--tw-text-opacity:1;color:rgb(7 27 52/var(--tw-text-opacity,1))}.text-muted{--tw-text-opacity:1;color:rgb(100 120 141/var(--tw-text-opacity,1))}.text-primary{--tw-text-opacity:1;color:rgb(18 108 243/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-success{--tw-text-opacity:1;color:rgb(32 167 121/var(--tw-text-opacity,1))}.text-warning{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/\[0\.06\]{color:hsla(0,0%,100%,.06)}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 2px rgba(15,23,42,.06),0 1px 3px rgba(15,23,42,.04);--tw-shadow-colored:0 1px 2px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}@media (min-width:1024px){.admin-content form.lg\:mt-6.max-w-2xl,.admin-content form.lg\:mt-6.max-w-xl{background:#fff;border:1px solid var(--color-border);border-radius:calc(var(--radius) + .1rem);box-shadow:var(--shadow);padding:1.25rem}}.hover\:border-\[\#126cf3\]:hover,.hover\:border-primary:hover{--tw-border-opacity:1;border-color:rgb(18 108 243/var(--tw-border-opacity,1))}.hover\:bg-\[\#0f6fc0\]:hover{--tw-bg-opacity:1;background-color:rgb(15 111 192/var(--tw-bg-opacity,1))}.hover\:bg-\[\#126cf3\]:hover{--tw-bg-opacity:1;background-color:rgb(18 108 243/var(--tw-bg-opacity,1))}.hover\:bg-\[\#f8fafc\]:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-surface:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:text-primary:hover{--tw-text-opacity:1;color:rgb(18 108 243/var(--tw-text-opacity,1))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:absolute:focus{position:absolute}.focus\:left-2:focus{left:.5rem}.focus\:left-3:focus{left:.75rem}.focus\:top-2:focus{top:.5rem}.focus\:top-3:focus{top:.75rem}.focus\:z-20:focus{z-index:20}.focus\:z-50:focus{z-index:50}.focus\:border-\[\#126cf3\]:focus{--tw-border-opacity:1;border-color:rgb(18 108 243/var(--tw-border-opacity,1))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.focus\:px-3:focus{padding-left:.75rem;padding-right:.75rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:font-semibold:focus{font-weight:600}.focus\:text-ink:focus{--tw-text-opacity:1;color:rgb(7 27 52/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-\[\#126cf3\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(18 108 243/var(--tw-ring-opacity,1))}.focus\:ring-\[\#126cf3\]\/40:focus{--tw-ring-color:rgba(18,108,243,.4)}.focus\:ring-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(18 108 243/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-\[\#126cf3\]:focus-visible{outline-color:#126cf3}.focus-visible\:outline-primary:focus-visible{outline-color:#126cf3}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}.has-\[\:focus-visible\]\:outline:has(:focus-visible){outline-style:solid}.has-\[\:focus-visible\]\:outline-2:has(:focus-visible){outline-width:2px}.has-\[\:focus-visible\]\:outline-\[\#126cf3\]:has(:focus-visible){outline-color:#126cf3}.aria-\[pressed\=true\]\:text-primary[aria-pressed=true]{--tw-text-opacity:1;color:rgb(18 108 243/var(--tw-text-opacity,1))}@media (prefers-reduced-motion:reduce){.motion-reduce\:top-1{top:.25rem}.motion-reduce\:translate-y-0{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:flex{display:flex}.sm\:h-36{height:9rem}.sm\:w-36{width:9rem}.sm\:w-auto{width:auto}.sm\:flex-1{flex:1 1 0%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[1fr_14rem_auto\]{grid-template-columns:1fr 14rem auto}.sm\:grid-cols-\[1fr_1fr_6rem_1fr_auto\]{grid-template-columns:1fr 1fr 6rem 1fr auto}.sm\:grid-cols-\[200px_minmax\(0\2c 1fr\)\]{grid-template-columns:200px minmax(0,1fr)}.sm\:grid-cols-\[minmax\(0\2c 14rem\)_minmax\(0\2c 1fr\)_auto\]{grid-template-columns:minmax(0,14rem) minmax(0,1fr) auto}.sm\:grid-cols-\[minmax\(0\2c 18rem\)_auto\]{grid-template-columns:minmax(0,18rem) auto}.sm\:grid-cols-\[minmax\(0\2c 1fr\)_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:p-6{padding:1.5rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:py-12{padding-top:3rem;padding-bottom:3rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:pb-0{padding-bottom:0}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width:768px){.md\:mb-6{margin-bottom:1.5rem}.md\:grid-cols-\[minmax\(0\2c 1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.md\:items-end{align-items:flex-end}}@media (min-width:1024px){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:mt-6{margin-top:1.5rem}.lg\:block{display:block}.lg\:h-9{height:2.25rem}.lg\:min-h-\[calc\(100dvh-5\.25rem\)\]{min-height:calc(100dvh - 5.25rem)}.lg\:max-w-md{max-width:28rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[240px_minmax\(0\2c 1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.lg\:grid-cols-\[minmax\(0\2c 2fr\)_minmax\(0\2c 3fr\)_auto\]{grid-template-columns:minmax(0,2fr) minmax(0,3fr) auto}.lg\:grid-cols-\[minmax\(0\2c 3fr\)_minmax\(0\2c 2fr\)\]{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}.lg\:grid-cols-\[minmax\(18rem\2c 42\%\)_1fr\]{grid-template-columns:minmax(18rem,42%) 1fr}.lg\:flex-row{flex-direction:row}.lg\:flex-col{flex-direction:column}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:items-stretch{align-items:stretch}.lg\:justify-between{justify-content:space-between}.lg\:whitespace-normal{white-space:normal}.lg\:bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lg\:p-12{padding:3rem}.lg\:px-9{padding-left:2.25rem;padding-right:2.25rem}.lg\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:items-end{align-items:flex-end}}
/* css/frontend-site.css */
/* Public site chrome — local assets only */
.site-header {
  position: sticky;
  top: 0;
  z-index: 40;
  background: rgba(255, 255, 255, 0.96);
  border-bottom: 1px solid #e8eef4;
  backdrop-filter: blur(10px);
}
.site-header .nav-inner {
  display: flex;
  max-width: 88rem;
  margin: 0 auto;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  padding: 0.7rem 1.25rem;
  flex-wrap: nowrap;
}
.site-header .brand {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  text-decoration: none;
}
.site-header .brand img {
  display: block;
  height: 2.15rem;
  width: auto;
}
.site-header .brand:hover { text-decoration: none; }
.site-header .desktop-nav {
  display: none;
  align-items: center;
  gap: 0.15rem;
}
.site-header .desktop-nav > a,
.nav-drop {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  border: 0;
  background: transparent;
  color: #071b34;
  font: 500 0.9rem/1.2 Sarabun, sans-serif;
  padding: 0.55rem 0.7rem;
  border-radius: 999px;
  cursor: pointer;
  text-decoration: none;
  min-height: 2.75rem;
}
.site-header .desktop-nav > a:hover,
.nav-drop:hover,
.site-header .desktop-nav > a[aria-current="page"] {
  color: #126cf3;
  text-decoration: none;
}
.nav-drop:focus-visible,
.site-header .desktop-nav > a:focus-visible,
.nav-login:focus-visible,
.menu-toggle:focus-visible {
  outline: 3px solid #126cf3;
  outline-offset: 2px;
  box-shadow: 0 0 0 5px rgba(186, 255, 25, 0.35);
}
.nav-drop .fa-solid { font-size: 0.65rem; }
.nav-group { position: relative; }
.nav-menu {
  display: none;
  position: absolute;
  top: calc(100% + 0.35rem);
  left: 0;
  min-width: 13rem;
  padding: 0.4rem;
  background: #fff;
  border: 1px solid #e8eef4;
  border-radius: 0.75rem;
  box-shadow: 0 12px 32px rgba(0, 11, 53, 0.1);
  z-index: 50;
}
.nav-group.is-open .nav-menu { display: grid; }
.nav-menu a {
  padding: 0.55rem 0.7rem;
  border-radius: 0.5rem;
  color: #000b35;
  font-size: 0.88rem;
  text-decoration: none;
}
.nav-menu a:hover { background: #f4f8fb; color: #148aea; text-decoration: none; }
.site-header .nav-actions {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  margin-left: auto;
}
.site-header .nav-login {
  color: #000b35;
  font-size: 0.88rem;
  font-weight: 600;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}
.site-header .nav-login:hover { color: #148aea; text-decoration: none; }
.menu-toggle {
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid #d8dee6;
  border-radius: 0.5rem;
  background: #fff;
  color: #000b35;
  cursor: pointer;
}
.mobile-nav {
  display: grid;
  gap: 0.15rem;
  padding: 0.5rem 1.25rem 1rem;
  border-top: 1px solid #e8eef4;
  background: #fff;
}
.mobile-nav[hidden] {
  display: none !important;
}
.mobile-nav a {
  padding: 0.7rem 0.2rem;
  color: #000b35;
  text-decoration: none;
  font-weight: 500;
}
.mobile-nav a:hover { color: #148aea; }
@media (min-width: 1080px) {
  .site-header .desktop-nav { display: flex; }
  .menu-toggle, .mobile-nav { display: none !important; }
}

.site-footer {
  background: #070b1c;
  color: #d5deea;
  padding: 3rem 1.25rem 1.25rem;
  border-top: 0;
}
.footer-grid {
  max-width: 88rem;
  margin: 0 auto;
  display: grid;
  gap: 2rem;
}
.site-footer .footer-brand img {
  height: 2.4rem;
  width: auto;
  filter: brightness(0) invert(1);
}
#footer .footer-brand img {
  height: auto;
  width: auto;
  max-width: min(168px, 100%);
  max-height: 46px;
  object-fit: contain;
  box-sizing: border-box;
  filter: none;
  background: #fff;
  padding: 4px 8px;
  border-radius: 12px;
}
.footer-tag {
  margin: 0.75rem 0 0;
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  color: #9fb0c4;
}
.site-footer h2 {
  margin: 0 0 0.75rem;
  font-size: 0.95rem;
  color: #fff;
}
.site-footer ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.45rem;
}
.site-footer a { color: #d5deea; text-decoration: none; }
.site-footer a:hover { color: #fff; }
.site-footer .footer-bottom {
  max-width: 88rem;
  margin: 2rem auto 0;
  padding-top: 1rem;
  border-top: 1px solid rgba(255, 255, 255, 0.08);
  font-size: 0.8rem;
  color: #8b9bb0;
}
@media (min-width: 800px) {
  .footer-grid { grid-template-columns: 1.4fr 1fr 1fr 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

/* Catalog pages (not the homepage): one panel radius, one control radius */
body.tpl-list main .rounded-lg,
body.tpl-list main .rounded-xl,
body.tpl-list main .rounded-2xl {
  border-radius: 1rem;
}

body.tpl-list main form[role="search"]:not(#tsa-events-filter) {
  flex-wrap: wrap;
  gap: 0.85rem;
  padding: 1rem 1rem 0.9rem;
  border: 1px solid #c9d5e2;
  border-radius: 1rem;
  background: #f7fafc;
}

body.tpl-list main form[role="search"]:not(#tsa-events-filter)::before {
  content: attr(aria-label);
  display: block;
  grid-column: 1 / -1;
  flex: 1 0 100%;
  width: 100%;
  margin: 0;
  padding: 0 0.15rem 0.75rem;
  border-bottom: 1px solid #d7e0e9;
  color: #071b34;
  font: 700 0.95rem/1.35 "Noto Sans Thai", sans-serif;
}

body.tpl-list main form[role="search"]:not(#tsa-events-filter) > div {
  min-width: 0;
}

body.tpl-list main form[role="search"]:not(#tsa-events-filter) > div:has(input[type="checkbox"]) {
  grid-column: 1 / -1;
  flex: 1 0 100%;
  width: 100%;
  margin-top: 0.15rem;
  padding-top: 0.75rem;
}

body.tpl-list main form[role="search"]:not(#tsa-events-filter) input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]),
body.tpl-list main form[role="search"]:not(#tsa-events-filter) .ss-input,
body.tpl-list main form[role="search"]:not(#tsa-events-filter) button,
body.tpl-list main form[role="search"]:not(#tsa-events-filter) > div > a {
  border-radius: 999px;
}

body.tpl-list main .ss-input {
  height: 2.75rem;
  min-height: 2.75rem;
  border-color: #c9d5e2;
  border-radius: 999px;
  background: #fff;
  color: #071b34;
  padding-left: 1rem;
}

body.tpl-list main .ss-menu {
  border-color: #d7e0e9;
  border-radius: 1rem;
}

body.tpl-list main form.venue-filter {
  display: grid;
  gap: 1rem;
  background: #fff;
  border-color: #e6edf3;
  padding: 1.15rem 1.2rem 1rem;
}

body.tpl-list main form.venue-filter::before {
  content: none;
  display: none;
}

body.tpl-list main form.venue-filter > h2 {
  margin: 0;
  color: #122b45;
  font-size: 1rem;
  font-weight: 700;
  line-height: 1.4;
}

body.tpl-list main form.venue-filter label {
  display: block;
  margin: 0 0 0.35rem;
  color: #334155;
  font-size: 0.875rem;
  font-weight: 600;
}

body.tpl-list main form.venue-filter .visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

body.tpl-list main form.venue-filter input:not([type="hidden"]),
body.tpl-list main form.venue-filter .ss-input {
  width: 100%;
  height: 2.75rem;
  min-height: 2.75rem;
  border: 1px solid #d7e0e9;
  border-radius: 0.5rem;
  background: #fff;
  color: #071b34;
  padding: 0 2.25rem 0 0.85rem;
}

body.tpl-list main form.venue-filter .venue-filter-search {
  position: relative;
}

body.tpl-list main form.venue-filter .venue-filter-search i {
  position: absolute;
  left: 0.85rem;
  top: 50%;
  transform: translateY(-50%);
  color: #94a3b8;
  pointer-events: none;
}

body.tpl-list main form.venue-filter .venue-filter-search input {
  padding-left: 2.35rem;
}

body.tpl-list main form.venue-filter .venue-filter-grid {
  display: grid;
  gap: 0.85rem 1rem;
}

body.tpl-list main form.venue-filter .venue-filter-actions {
  display: flex;
  justify-content: flex-end;
}

body.tpl-list main form.venue-filter .venue-filter-reset {
  display: inline-flex;
  min-height: 2.5rem;
  align-items: center;
  justify-content: center;
  padding: 0 1.15rem;
  border: 1px solid #e11d48;
  border-radius: 0.45rem;
  background: #fff;
  color: #e11d48;
  font-size: 0.9rem;
  font-weight: 600;
  text-decoration: none;
}

body.tpl-list main form.venue-filter .venue-filter-reset:hover {
  background: #fff1f2;
}

body.tpl-list main form.venue-filter .venue-filter-reset:focus-visible {
  outline: 2px solid #e11d48;
  outline-offset: 2px;
}

@media (min-width: 720px) {
  body.tpl-list main form.venue-filter .venue-filter-grid.is-2,
  body.tpl-list main form.venue-filter .venue-filter-grid.is-3 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  body.tpl-list main form.venue-filter .venue-filter-grid.is-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

.venue-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.85rem;
  margin: 1rem 0 0;
  padding: 0;
  list-style: none;
}

.venue-card {
  --title: #fff;
  --ink: #071b34;
  --muted: #5c6b7a;
  position: relative;
  display: flex;
  flex-direction: column;
  aspect-ratio: 2 / 3;
  overflow: clip;
  border-radius: 1.6rem;
  padding: 0.4rem;
  background: #fff;
  color: inherit;
  text-decoration: none;
  box-shadow: 0 10px 24px rgba(7, 27, 52, 0.08);
}

.venue-card:hover,
.venue-card:focus,
.venue-card:focus-visible,
.venue-card h3,
.venue-card p {
  text-decoration: none;
}

.venue-card-media {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  overflow: hidden;
  border-radius: 1.25rem;
  background: #d7e6f5;
  transition: flex-basis 0.25s ease;
}

.venue-card-photo {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 18%;
}

.venue-card-photo--empty {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #126cf3;
  font-size: 1.6rem;
}

.venue-card-media::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 48%;
  background: linear-gradient(transparent, rgba(7, 27, 52, 0.78));
  pointer-events: none;
  transition: opacity 0.25s ease;
}

.venue-card > section {
  position: absolute;
  z-index: 1;
  left: 0.75rem;
  right: 0.75rem;
  bottom: 0.7rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  margin: 0;
}

.venue-card h3 {
  margin: 0;
  color: var(--title);
  font-size: 0.95rem;
  font-weight: 700;
  line-height: 1.35;
  text-shadow: 0 1px 8px rgba(0, 0, 0, 0.35);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  transition: color 0.25s ease;
}

.venue-card-detail,
.venue-card-more {
  display: none;
  margin: 0;
}

.venue-card-detail {
  color: var(--muted);
  font-size: 0.78rem;
  line-height: 1.4;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.venue-card-tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.3rem;
  margin: 0;
}

.venue-card-tag,
.venue-card-amenity {
  display: inline-flex;
  align-items: center;
  gap: 0.28rem;
  max-width: 100%;
  border-radius: 999px;
  background: rgba(7, 27, 52, 0.55);
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.2;
}

.venue-card-tag {
  padding: 0.22rem 0.5rem;
}

.venue-card-amenity {
  justify-content: center;
  width: 1.45rem;
  height: 1.45rem;
  padding: 0;
}

.venue-card-amenity-label {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.venue-card-more {
  align-self: flex-end;
  border-radius: 999px;
  background: #071b34;
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1;
  padding: 0.45rem 0.7rem;
}

.venue-card:hover,
.venue-card:focus-visible {
  outline: none;
}

.venue-card:focus-visible {
  box-shadow: 0 0 0 2px #fff, 0 0 0 4px #126cf3;
}

.venue-card:hover .venue-card-media,
.venue-card:focus-visible .venue-card-media {
  flex: 0 0 46%;
}

.venue-card:hover .venue-card-media::after,
.venue-card:focus-visible .venue-card-media::after {
  opacity: 0;
}

.venue-card:hover > section,
.venue-card:focus-visible > section {
  position: static;
  margin: 0.7rem 0.45rem 0.2rem;
  gap: 0.45rem;
}

.venue-card:hover h3,
.venue-card:focus-visible h3 {
  color: var(--ink);
  text-shadow: none;
}

.venue-card:hover .venue-card-detail,
.venue-card:focus-visible .venue-card-detail {
  display: -webkit-box;
}

.venue-card:hover .venue-card-more,
.venue-card:focus-visible .venue-card-more {
  display: inline-flex;
  margin-top: 0.1rem;
}

.venue-card-tag.is-open {
  background: #0f7a45;
  color: #fff;
}

.venue-card-tag.is-closed {
  background: #b42318;
  color: #fff;
}

.venue-card:hover .venue-card-tag,
.venue-card:hover .venue-card-amenity,
.venue-card:focus-visible .venue-card-tag,
.venue-card:focus-visible .venue-card-amenity {
  background: #eef4fb;
  color: #122b45;
}

.venue-card:hover .venue-card-tag.is-open,
.venue-card:focus-visible .venue-card-tag.is-open {
  background: #e5f6ec;
  color: #0d6b3a;
}

.venue-card:hover .venue-card-tag.is-closed,
.venue-card:focus-visible .venue-card-tag.is-closed {
  background: #fde8e8;
  color: #9f1239;
}

@media (max-width: 640px) {
  .venue-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (hover: none) {
  .venue-card-media {
    flex: 0 0 46%;
  }

  .venue-card-media::after {
    opacity: 0;
  }

  .venue-card > section {
    position: static;
    margin: 0.7rem 0.45rem 0.2rem;
  }

  .venue-card h3 {
    color: var(--ink);
    text-shadow: none;
  }

  .venue-card-detail {
    display: -webkit-box;
  }

  .venue-card-more {
    display: inline-flex;
  }

  .venue-card-tag,
  .venue-card-amenity {
    background: #eef4fb;
    color: #122b45;
  }

  .venue-card-tag.is-open {
    background: #e5f6ec;
    color: #0d6b3a;
  }

  .venue-card-tag.is-closed {
    background: #fde8e8;
    color: #9f1239;
  }
}

@media (prefers-reduced-motion: reduce) {
  .venue-card-media,
  .venue-card-media::after,
  .venue-card h3 {
    transition: none;
  }
}

.venue-hero {
  position: relative;
  margin-top: 1.25rem;
  overflow: hidden;
  min-height: 16rem;
  border-radius: 1.6rem;
  background: #d7e6f5;
}

.venue-hero-photo {
  display: block;
  width: 100%;
  height: 22rem;
  object-fit: cover;
  object-position: 50% 28%;
}

.venue-hero-photo--empty {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #126cf3;
  font-size: 2rem;
}

.venue-intro {
  margin-top: 1rem;
}

.venue-intro-kicker {
  margin: 0;
  color: #126cf3;
  font-size: 0.8rem;
  font-weight: 700;
}

.venue-intro h1 {
  margin: 0.2rem 0 0;
  color: #071b34;
  font-size: clamp(1.45rem, 3vw, 2rem);
  line-height: 1.35;
}

.venue-intro-loc {
  margin: 0.45rem 0 0;
  color: #122b45;
  font-size: 0.95rem;
}

.venue-intro-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: 0.8rem;
}

.venue-intro-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  border-radius: 999px;
  background: #eef4fb;
  color: #122b45;
  font-size: 0.8rem;
  font-weight: 700;
  line-height: 1.2;
  padding: 0.32rem 0.65rem;
}

.venue-gallery {
  display: flex;
  gap: 0.6rem;
  margin: 0.85rem 0 0;
  padding: 0 0 0.2rem;
  list-style: none;
  overflow-x: auto;
}

.venue-gallery img {
  display: block;
  width: 8.5rem;
  height: 6rem;
  object-fit: cover;
  border-radius: 1rem;
}

.announcement-panel {
  border: 1px solid #d7e0e9;
  border-radius: 1rem;
  background: #fff;
  padding: 1rem 1.15rem 0.35rem;
}

.announcement-panel h2 {
  margin: 0;
  padding-bottom: 0.75rem;
  border-bottom: 1px solid #d7e0e9;
  color: #071b34;
  font-size: 0.95rem;
  font-weight: 700;
  line-height: 1.4;
}

.announcement-empty {
  margin: 0.9rem 0 0.85rem;
  color: #64788d;
  font-size: 0.9rem;
}

.announcement-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.announcement-list > li + li {
  border-top: 1px solid #d7e0e9;
}

.announcement-card {
  display: flex;
  gap: 1rem;
  padding: 0.95rem 0.15rem;
  color: inherit;
  text-decoration: none;
}

.announcement-card h3 {
  margin: 0;
}

.announcement-card p {
  margin-bottom: 0;
}

.announcement-card:hover,
.announcement-card:focus-visible {
  text-decoration: none;
}

.announcement-card:hover {
  background: #f7fafc;
}

.announcement-card:focus-visible {
  outline: 2px solid #126cf3;
  outline-offset: 2px;
  border-radius: 0.5rem;
}

/* css/design-tokens.css */
/**
 * DESIGN-TEMPLATE QA overlay — load after app.css / domain CSS.
 * Aligns runtime tokens and focus rings without CDN.
 */
:root {
  --gateway-navy: #071b34;
  --gateway-blue: #126cf3;
  --gateway-lime: #baff19;
  --gateway-lime-ink: #3d5c00;
  --gateway-text: #122b45;
  --gateway-muted: #64788d;
  --gateway-line: #d7e0e9;
  --gateway-sky: #eaf4ff;
  --gateway-green: #20a779;
  --gateway-paper: #ffffff;
  --paper: #ffffff;
  --focus-ring: #126cf3;
  --focus-ring-offset: #baff19;
  --qa-touch: 44px;
  --color-primary: #126cf3;
  --color-primary-soft: #eaf4ff;
  --color-ink: #071b34;
  --color-border: #d7e0e9;
  --color-muted: #64788d;
}

html,
body {
  background: #ffffff;
}

::selection {
  background: rgba(186, 255, 25, 0.35);
  color: var(--gateway-navy);
}

:focus-visible {
  outline: 3px solid var(--focus-ring);
  outline-offset: 2px;
}

body.admin-body {
  background: #eef2f5;
}

body.admin-body :focus-visible {
  outline: 3px solid var(--focus-ring);
  outline-offset: 2px;
  box-shadow: 0 0 0 5px rgba(186, 255, 25, 0.45);
}

@media (max-width: 1100px) {
  .btn,
  .btn-primary,
  .btn-ghost,
  .btn-danger,
  .hero-cta,
  .menu-toggle,
  .nav-login,
  .admin-top .logout-link,
  .admin-top .top-web {
    min-height: var(--qa-touch);
  }
}

/* css/form-actions.css */
/* Shared form actions from tsa-form-actions.html. */
.tsa-save-form { overflow: visible; }
.tsa-form-actions, .tsa-form-actions * { box-sizing: border-box; }
.tsa-form-actions.tsa-form-actions {
  position: sticky; bottom: 0; z-index: 10; display: flex; align-items: center;
  justify-content: space-between; gap: 1rem; min-height: 72px; padding: .8125rem 1rem;
  margin: 1.5rem 0 0; border: 0; border-top: 1px solid #d7e0e9;
  border-radius: 0; background: rgb(255 255 255 / .96);
  box-shadow: 0 -6px 16px rgb(7 27 52 / .06); backdrop-filter: blur(10px);
}
.tsa-form-action-buttons { display: flex; flex: 1 1 auto; align-items: center; justify-content: flex-end; gap: .75rem; flex-wrap: wrap; }
.tsa-form-actions .tsa-action-button.tsa-action-button {
  display: inline-flex; height: 44px; min-height: 44px; width: auto; min-width: 0;
  flex: 0 0 auto; align-items: center; justify-content: center; gap: .5rem;
  border: 1px solid transparent; border-radius: 999px; padding: 0 1.25rem;
  font: inherit; font-size: 15px; font-weight: 600; line-height: 1.25;
  white-space: nowrap; cursor: pointer; text-decoration: none;
  transition: background-color .15s, border-color .15s, color .15s;
}
.tsa-form-actions .tsa-action-button[hidden] { display: none !important; }
.tsa-form-actions .tsa-action-primary.tsa-action-primary { min-width: 128px; background: #0f5fd6; color: #fff; }
.tsa-form-actions .tsa-action-primary:hover { background: #071b34; }
.tsa-form-actions .tsa-action-secondary.tsa-action-secondary { border-color: #b8c6d4; background: #fff; color: #071b34; }
.tsa-form-actions .tsa-action-secondary:hover { border-color: #071b34; background: #eaf4ff; }
.tsa-form-actions .tsa-action-ghost.tsa-action-ghost { padding-inline: 1rem; background: transparent; color: #556a80; }
.tsa-form-actions .tsa-action-ghost:hover { background: #f5f8fb; color: #071b34; }
.tsa-form-actions .tsa-action-button:focus-visible { outline: 2px solid #126cf3; outline-offset: 2px; }
.tsa-form-actions .tsa-action-button:disabled { opacity: .6; cursor: not-allowed; }
.tsa-form-action-status { display: flex; flex: 0 1 auto; align-items: center; gap: .5rem; margin: 0; color: #556a80; font-size: .875rem; }
.tsa-action-dot { width: 8px; height: 8px; flex: 0 0 8px; border-radius: 50%; background: #b8c6d4; }
[data-state=dirty] .tsa-action-dot { background: #e8a317; }
[data-state=error] .tsa-action-dot { background: #b42318; }
[data-state=saved] .tsa-action-dot { background: #13795a; }
.tsa-action-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgb(255 255 255 / .35); border-top-color: currentColor; border-radius: 50%; animation: tsa-save-spin .8s linear infinite; }
@keyframes tsa-save-spin { to { transform: rotate(360deg); } }
#crud-modal .tsa-form-actions.tsa-form-actions { bottom: -1.25rem; margin: 1rem -1.25rem -1.25rem; padding-inline: 1.25rem; }
.tsa-form-actions-inline.tsa-form-actions-inline { position: static; min-height: 44px; padding: 0; margin: .5rem 0 0; border: 0; box-shadow: none; }
.tsa-form-actions-inline .tsa-form-action-status { display: none; }
@media (max-width: 639px) {
  .tsa-form-actions.tsa-form-actions { gap: .5rem; padding: .8125rem .5rem; padding-bottom: max(.8125rem, env(safe-area-inset-bottom)); }
  .tsa-form-action-status { display: none; }
  .tsa-form-action-buttons { width: 100%; gap: .5rem; }
  .tsa-form-actions .tsa-action-button.tsa-action-button { padding-inline: .75rem; font-size: 14px; }
  .tsa-form-actions .tsa-action-primary.tsa-action-primary { min-width: 0; }
}
@media (prefers-reduced-motion: reduce) { .tsa-action-spinner { animation: none; } .tsa-form-actions .tsa-action-button { transition: none; } }
