/* Layout: one-column field tool — flag board on top, training-hour timetable (06–18) below, bottom tab bar. */
:root{
  --bg:#ECEFE6; --surface:#FAFBF6; --ink:#1A1F15; --muted:#3F4738; --line:#C9D0BD; --accent:#3D5020; --accent-ink:#FFFFFF;
  --warn-bg:#FFF2CC; --warn-ink:#4D3A00; --info-bg:#E2E8D6; --flag-edge:#7D8770; --pole:#5B6450; --nodata:#D9DDD2;
  --f-white:#FFFFFF; --f-white-ink:#121212; --f-green:#1E8A3A; --f-green-ink:#FFFFFF;
  --f-yellow:#F2C200; --f-yellow-ink:#121212; --f-red:#D0261B; --f-red-ink:#FFFFFF;
  --f-black:#141414; --f-black-ink:#FFFFFF;
  --display:"Chakra Petch","IBM Plex Sans Thai","Leelawadee UI",Tahoma,sans-serif;
  --body:"IBM Plex Sans Thai","Leelawadee UI",Tahoma,sans-serif;
  --r:10px;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --bg:#10130D; --surface:#1A1F15; --ink:#E9EDE1; --muted:#BAC2AD; --line:#343C2C; --accent:#A9C46B; --accent-ink:#10130D;
  --warn-bg:#3B3112; --warn-ink:#F6E0A0; --info-bg:#232A1C; --flag-edge:#8A9479; --pole:#9AA38C; --nodata:#2C3325; color-scheme:dark;
}}
:root[data-theme="dark"]{
  --bg:#10130D; --surface:#1A1F15; --ink:#E9EDE1; --muted:#BAC2AD; --line:#343C2C; --accent:#A9C46B; --accent-ink:#10130D;
  --warn-bg:#3B3112; --warn-ink:#F6E0A0; --info-bg:#232A1C; --flag-edge:#8A9479; --pole:#9AA38C; --nodata:#2C3325; color-scheme:dark;
}
*{box-sizing:border-box}
html{padding-top:env(safe-area-inset-top,0px)}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.55;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:0 96px}
a{color:var(--accent)}
[hidden]{display:none!important}
.wrap{max-width:560px;margin:0 auto;display:flex;flex-direction:column;gap:14px;padding-top:12px}
h1,h2,h3{font-family:var(--display);margin:0;text-wrap:balance;line-height:1.25}
h1{font-size:1.3rem}
h2{font-size:1.05rem;font-weight:600;letter-spacing:.02em}
.offline{background:var(--warn-bg);color:var(--warn-ink);border-radius:8px;padding:8px 12px;font-size:.9rem}
.place{display:flex;align-items:center;gap:10px}
.place .txt{flex:1;min-width:0}
.place .nm{font-family:var(--display);font-weight:600;font-size:1.15rem;overflow-wrap:anywhere}
.place .sub{font-size:.85rem;color:var(--muted)}
.btn{font:inherit;font-size:.95rem;border:1.5px solid var(--accent);color:var(--accent);background:transparent;border-radius:8px;padding:6px 12px;cursor:pointer}
.btn.solid{background:var(--accent);color:var(--accent-ink)}
.btn[disabled]{opacity:.55;cursor:not-allowed}
.btn:focus-visible,.cell:focus-visible,.daychip:focus-visible,.tab:focus-visible,.seg button:focus-visible,.pitem:focus-visible,input:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.board{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px;display:grid;grid-template-columns:auto 1fr;gap:6px 16px;align-items:center}
.board .when{grid-column:1/-1;font-size:.9rem;color:var(--muted)}
.board .fname{font-family:var(--display);font-weight:700;font-size:2.2rem;line-height:1.1}
.board .hi{font-family:var(--display);font-size:1.05rem}
.board .hi b{font-size:1.6rem;font-variant-numeric:tabular-nums}
.board .rng{font-size:.85rem;color:var(--muted)}
.facts{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.fact{border-top:2px solid var(--line);padding-top:6px}
.fact .k{font-size:.8rem;color:var(--muted);letter-spacing:.03em}
.fact .v{font-family:var(--display);font-weight:600;font-size:1.25rem}
.near{grid-column:1/-1;font-size:.9rem;font-weight:600;padding:6px 10px;border-radius:8px}
.note{font-size:.88rem;color:var(--muted);border-left:3px solid var(--f-yellow);padding:4px 10px;margin:0}
.days{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px}
.daychip{flex:0 0 auto;font:inherit;font-size:.85rem;border:1.5px solid var(--line);background:var(--surface);color:var(--ink);border-radius:999px;padding:4px 10px 4px 6px;display:flex;align-items:center;gap:6px;cursor:pointer}
.daychip[aria-pressed="true"]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.dot{width:14px;height:14px;border-radius:50%;border:1px solid var(--flag-edge);flex:0 0 auto}
.strips{display:flex;flex-direction:column;gap:10px}
.strip{display:grid;grid-template-columns:repeat(12,1fr);gap:3px}
.hlab{font-size:.72rem;color:var(--muted);text-align:center;font-variant-numeric:tabular-nums}
.cell{font:inherit;font-family:var(--display);font-weight:600;font-size:.82rem;border:1px solid var(--flag-edge);border-radius:6px;min-height:40px;padding:0;cursor:pointer;font-variant-numeric:tabular-nums}
.cell[aria-pressed="true"]{outline:3px solid var(--ink);outline-offset:1px}
.cell.now{box-shadow:inset 0 -4px 0 rgba(0,0,0,.35)}
.detail{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px;display:flex;flex-direction:column;gap:8px}
.tblwrap{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:.9rem;font-variant-numeric:tabular-nums}
th,td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--line)}
th{font-weight:600;color:var(--muted);font-size:.8rem}
tr.max td{font-weight:700}
.tag{font-size:.75rem;font-weight:600;padding:1px 6px;border-radius:4px;background:var(--accent);color:var(--accent-ink);white-space:nowrap}
.week{display:flex;flex-direction:column;gap:8px}
.wrow{display:grid;grid-template-columns:62px 1fr;gap:8px;align-items:center}
.wrow .lab{font-family:var(--display);font-weight:600;font-size:.9rem;line-height:1.2}
.wrow .lab small{display:block;font-family:var(--body);font-weight:400;color:var(--muted);font-size:.75rem}
.mini{display:grid;grid-template-columns:repeat(24,1fr);gap:1px}
.mini span{height:18px;border-radius:2px;border:1px solid var(--flag-edge)}
.wsum{grid-column:2;font-size:.8rem;color:var(--muted);margin-top:-4px}
details{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
summary{cursor:pointer;font-family:var(--display);font-weight:600}
.sw{display:inline-block;width:16px;height:12px;border:1px solid var(--flag-edge);border-radius:2px;vertical-align:-1px;margin-right:6px}
.foot{font-size:.8rem;color:var(--muted);display:flex;flex-direction:column;gap:4px;border-top:1px solid var(--line);padding-top:10px}
.panel{display:flex;flex-direction:column;gap:14px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:12px}
.seg{display:flex;border:1.5px solid var(--accent);border-radius:8px;overflow:hidden}
.seg button{flex:1;font:inherit;font-size:.9rem;padding:8px 6px;border:0;background:transparent;color:var(--accent);cursor:pointer}
.seg button[aria-pressed="true"]{background:var(--accent);color:var(--accent-ink)}
.field{display:flex;flex-direction:column;gap:4px}
.field label{font-size:.9rem;font-weight:500}
.stepper{display:grid;grid-template-columns:52px 1fr 52px;gap:6px}
.stepper button{font:inherit;font-size:1.4rem;border:1.5px solid var(--line);background:var(--bg);color:var(--ink);border-radius:8px;cursor:pointer}
.stepper input,.textin{font-family:var(--display);font-size:1.6rem;font-weight:600;text-align:center;border:1.5px solid var(--line);background:var(--bg);color:var(--ink);border-radius:8px;padding:6px;min-width:0;width:100%;font-variant-numeric:tabular-nums}
.textin{font-family:var(--body);font-size:1rem;font-weight:400;text-align:left;padding:8px 10px}
.row{display:flex;gap:8px;flex-wrap:wrap}
.row .textin{flex:1 1 180px}
.result{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;align-items:center}
.result .fname{font-family:var(--display);font-weight:700;font-size:1.7rem}
.kv{display:flex;justify-content:space-between;gap:8px;border-bottom:1px solid var(--line);padding:4px 0;font-variant-numeric:tabular-nums}
.kv b{font-family:var(--display)}
.err{color:var(--f-red);font-weight:600;font-size:.9rem}
.plist{display:flex;flex-direction:column;gap:10px}
.pwrap{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:stretch}
.pitem{background:var(--surface);border:1.5px solid var(--line);border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:4px;cursor:pointer;text-align:left;font:inherit;color:var(--ink);min-width:0}
.pitem[aria-current="true"]{border-color:var(--accent)}
.pitem .nm{font-family:var(--display);font-weight:600;font-size:1.05rem;overflow-wrap:anywhere}
.pitem .sub{font-size:.85rem;color:var(--muted)}
.ok{color:var(--f-green);font-weight:600}
.stale{color:var(--warn-ink);background:var(--warn-bg);border-radius:4px;padding:0 6px;font-weight:600}
#map{height:320px;border-radius:12px;border:1px solid var(--line)}
.tabs{position:fixed;left:0;right:0;bottom:0;background:var(--surface);border-top:1px solid var(--line);display:flex;justify-content:center;z-index:1000;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-bottom:env(safe-area-inset-bottom,0px)}
.tabs .in{display:flex;max-width:560px;width:100%}
.tab{flex:1;font:inherit;font-size:.9rem;background:transparent;border:0;color:var(--muted);padding:10px 4px 12px;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer}
.tab svg{width:22px;height:22px}
.tab[aria-current="page"]{color:var(--accent);font-weight:600}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(76px + env(safe-area-inset-bottom,0px));background:var(--ink);color:var(--bg);padding:8px 14px;border-radius:8px;font-size:.9rem;max-width:calc(100% - 32px);z-index:1001}
/* "วิธีใช้" guided tour: a blocker over the app, a spotlight ring around the step's target, a bubble with bullets. */
.tour-block{position:fixed;inset:0;z-index:1100;background:transparent}
.tour-block.dim{background:rgba(0,0,0,.55)}
.tour-spot{position:fixed;z-index:1101;border-radius:12px;pointer-events:none;
  box-shadow:0 0 0 3px var(--accent),0 0 0 9999px rgba(0,0,0,.55)}
.tour-bubble{position:fixed;z-index:1102;width:min(360px,calc(100vw - 24px));background:var(--surface);color:var(--ink);
  border:1px solid var(--line);border-radius:14px;padding:12px 16px 14px;box-shadow:0 12px 32px rgba(0,0,0,.35);
  display:flex;flex-direction:column;gap:8px}
.tour-head{display:flex;justify-content:space-between;align-items:center}
.tour-count{font-family:var(--display);font-weight:600;color:var(--muted);font-size:.9rem;font-variant-numeric:tabular-nums}
.tour-x{font:inherit;font-size:1.1rem;background:transparent;border:0;color:var(--muted);cursor:pointer;padding:4px 8px;border-radius:6px}
.tour-bubble h3{font-size:1.15rem}
.tour-bubble ul{margin:0;padding-left:1.1em;display:flex;flex-direction:column;gap:4px;font-size:.98rem}
.tour-nav{display:flex;justify-content:space-between;gap:8px;margin-top:4px}
.tour-nav .btn{min-width:110px;min-height:42px}
.tour-x:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
/* Motion: transform/opacity only; strong ease-out for things that enter; nothing replays on every tap. */
:root{--ease-out:cubic-bezier(0.23,1,0.32,1)}
.tour-bubble[data-side="below"]{transform-origin:50% 0}
.tour-bubble[data-side="above"]{transform-origin:50% 100%}
@media (prefers-reduced-motion: no-preference){
  .btn,.tab,.daychip,.pitem,.seg button,.stepper button,.cell,.tour-x{transition:transform 160ms var(--ease-out)}
  .btn:active,.tab:active,.daychip:active,.pitem:active,.seg button:active,.stepper button:active,.cell:active,.tour-x:active{transform:scale(.97)}
  /* the board flag sways; red and black sway faster and further */
  .wave{transform-box:fill-box;transform-origin:0% 50%;animation:flag-wave 3.2s ease-in-out infinite}
  .wave.strong{animation:flag-wave-strong 1.7s ease-in-out infinite}
  /* hourly cells cascade from 00:00 when a day or place is chosen (fill backwards keeps press feedback afterwards) */
  .strips.enter .cell{animation:cell-in 200ms var(--ease-out) backwards;animation-delay:calc(var(--i) * 5ms)}
  .panel.enter{animation:panel-in 220ms var(--ease-out)}
  .tour-bubble.enter{animation:pop-in 180ms var(--ease-out)}
}
@media (prefers-reduced-motion: reduce){
  .panel.enter,.tour-bubble.enter{animation:fade-in 150ms ease}
}
@keyframes flag-wave{0%,100%{transform:skewY(0) scaleX(1)}50%{transform:skewY(-3deg) scaleX(.96)}}
@keyframes flag-wave-strong{0%,100%{transform:skewY(1deg) scaleX(1)}50%{transform:skewY(-6deg) scaleX(.92)}}
@keyframes cell-in{from{opacity:0;transform:translateY(6px) scale(.96)}}
@keyframes panel-in{from{opacity:0;transform:translateY(8px)}}
@keyframes pop-in{from{opacity:0;transform:scale(.96)}}
@keyframes fade-in{from{opacity:0}}
