/* Thailand PWA - mobile-first. No webfonts (offline + cache budget). */
:root{
  --bg:#0b1020; --card:#151c30; --card2:#1b2340; --ink:#eef2ff; --dim:#9aa6c4;
  --accent:#2dd4bf; --accent2:#0f766e; --warn:#fbbf24; --bad:#f87171; --ok:#4ade80;
  --line:#26304d; --r:14px;
}
@media (prefers-color-scheme: light){
  :root{ --bg:#f6f7fb; --card:#fff; --card2:#eef1f8; --ink:#101426; --dim:#5a6480;
         --line:#dfe4f0; --accent:#0f766e; --accent2:#0f766e; }
}
*{box-sizing:border-box}
/* The UA rule [hidden]{display:none} is a bare attribute selector, so ANY class rule that sets
 * `display` silently beats it and the hidden attribute stops working. That bit the install
 * banner (.install-banner sets display:flex, so dismissing it could never hide it). Declared
 * once here so no future component can reintroduce it. */
[hidden]{display:none !important}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--ink); font:16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  padding-bottom:calc(66px + env(safe-area-inset-bottom));
  -webkit-text-size-adjust:100%;
}
/* While the install banner is up it is position:fixed over the bottom of the scroll area, so it
 * covers (and swallows taps on) whatever content sits there. Reserve the space instead. */
body.has-install-banner{padding-bottom:calc(150px + env(safe-area-inset-bottom))}
h1,h2,h3{margin:0 0 .3em;line-height:1.25}
h1{font-size:1.35rem}
h2{font-size:1.1rem}
h3{font-size:1rem}
p{margin:.4em 0}
a{color:var(--accent)}

.app-header{padding:calc(10px + env(safe-area-inset-top)) 16px 8px;border-bottom:1px solid var(--line)}
.app-header .sub{color:var(--dim);font-size:.85rem}

main{padding:12px 12px 8px;max-width:760px;margin:0 auto}
.view{animation:fade .15s ease}
@keyframes fade{from{opacity:.4}to{opacity:1}}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin:0 0 12px}
/* Accordion cards: the h3 is the toggle; body hides when collapsed. */
.acc > h3.acc-h{cursor:pointer;position:relative;padding-right:24px;margin-bottom:0;user-select:none}
.acc.open > h3.acc-h{margin-bottom:.3em}
.acc > h3.acc-h::after{content:'▸';position:absolute;right:2px;top:0;color:var(--dim);
  transition:transform .15s ease}
.acc.open > h3.acc-h::after{transform:rotate(90deg)}
.acc-body[hidden]{display:none}
.card.tight{padding:10px 12px}
.card h3{margin-top:0}
.card summary{cursor:pointer;font-weight:600}
.card > summary + *{margin-top:10px}

.hero{background:linear-gradient(135deg,var(--accent2),#155e5a);color:#fff;border:0}
.hero .big{font-size:2rem;font-weight:700;line-height:1.1}
.hero .lbl{opacity:.85;font-size:.85rem;text-transform:uppercase;letter-spacing:.06em}

.pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:.72rem;font-weight:600;
      background:var(--card2);color:var(--dim);margin-right:6px}
.pill.warn{background:#4a3609;color:var(--warn)}
.pill.bad{background:#4c1d1d;color:var(--bad)}
.pill.ok{background:#123524;color:var(--ok)}
.pill.derived{background:#2a2450;color:#c4b5fd}

.tabbar{
  position:fixed;left:0;right:0;bottom:0;display:flex;background:var(--card);
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:40
}
.tab{flex:1;background:none;border:0;color:var(--dim);font:inherit;font-size:.75rem;padding:11px 2px;cursor:pointer}
.tab.on{color:var(--accent);font-weight:700;box-shadow:inset 0 2px 0 var(--accent)}

.seg{display:flex;gap:6px;margin:0 0 12px;overflow-x:auto;position:sticky;
  top:0;z-index:20;background:var(--bg);padding:8px 0}
.seg-btn{background:var(--card);border:1px solid var(--line);color:var(--dim);border-radius:999px;
         padding:7px 14px;font:inherit;font-size:.85rem;cursor:pointer;white-space:nowrap}
.seg-btn.on{background:var(--accent2);color:#fff;border-color:var(--accent2)}

.day{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.day:last-child{border-bottom:0}
.day .dnum{min-width:52px;text-align:center}
.day .dnum b{display:block;font-size:1.05rem}
.day .dnum span{font-size:.7rem;color:var(--dim)}
.day.now{background:var(--card2);border-radius:10px;padding:10px;margin:4px -4px}

.kv{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;font-size:.92rem}
.kv b{color:var(--dim);font-weight:600}

ul.tight{margin:.3em 0;padding-left:1.15em}
ul.tight li{margin:.28em 0}

.form{display:flex;flex-direction:column;gap:9px}
.form label{display:flex;flex-direction:column;gap:4px;font-size:.82rem;color:var(--dim)}
.row{display:flex;gap:9px}
.row .grow{flex:1}
input,select{
  font:inherit;font-size:1rem;padding:10px;border-radius:10px;border:1px solid var(--line);
  background:var(--bg);color:var(--ink);width:100%;min-width:0
}
.btn{background:var(--accent2);color:#fff;border:0;border-radius:10px;padding:12px;font:inherit;
     font-weight:600;cursor:pointer;width:100%}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
.btn.sm{width:auto;padding:8px 14px;font-size:.85rem}

.exp{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;
     padding:9px 0;border-bottom:1px solid var(--line)}
.exp:last-child{border-bottom:0}
.exp .amt{font-weight:700;white-space:nowrap}
.exp .meta{font-size:.75rem;color:var(--dim)}
.exp button{background:none;border:0;color:var(--bad);font:inherit;font-size:.8rem;cursor:pointer;padding:2px 4px}

.settle{background:var(--card2);border-radius:10px;padding:11px;margin-top:10px;font-size:.92rem}

.offline-bar{background:var(--warn);color:#3a2a00;text-align:center;font-size:.8rem;font-weight:600;padding:5px}
.fine{font-size:.75rem;color:var(--dim)}
/* Booking-timeline windows. Overdue is deliberately loud: a missed window costs money. */
.win{border-left:4px solid var(--line)}
.win.bad{border-left-color:var(--bad);background:linear-gradient(90deg,rgba(248,113,113,.07),transparent)}
.win.warn{border-left-color:var(--warn)}
.win.ok{border-left-color:var(--line)}
.win-done{border-left-color:var(--ok);opacity:.72}
.win-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:2px}
.win-head strong{font-size:1.02rem}

.warnbox{border-left:3px solid var(--warn);padding-left:10px;margin:.5em 0}
.badbox{border-left:3px solid var(--bad);padding-left:10px;margin:.5em 0}

.install-banner{
  position:fixed;left:10px;right:10px;bottom:calc(72px + env(safe-area-inset-bottom));
  background:var(--accent2);color:#fff;border-radius:12px;padding:12px 14px;display:flex;
  gap:10px;align-items:center;justify-content:space-between;z-index:50;box-shadow:0 8px 24px rgba(0,0,0,.35)
}
.install-banner p{margin:.25em 0 0;font-size:.8rem;opacity:.95}
.install-banner .btn{border-color:rgba(255,255,255,.5);color:#fff}

/* Weather: current line, a horizontal 24h strip, a 7-day list. */
.wxnow{font-size:1.3rem;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wxnow b{font-size:1.5rem}
.wxrow{display:flex;gap:4px;overflow-x:auto;padding:6px 0}
.wxh{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;
     min-width:52px;padding:6px 4px;background:var(--card2);border-radius:9px;font-size:.72rem}
.wxh b{font-size:.95rem}
.wxd{display:grid;grid-template-columns:2.6em 1fr auto auto;gap:8px;align-items:center;
     padding:6px 0;border-bottom:1px solid var(--line);font-size:.85rem}
.wxd:last-child{border-bottom:0}

/* News items. Official alerts render distinct (left accent + tint). */
.ni{display:block;padding:8px 0;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink)}
.ni:last-child{border-bottom:0}
.ni strong{display:block;font-weight:600;font-size:.92rem}
.ni.alert{border-left:3px solid var(--bad);padding-left:9px;background:rgba(248,113,113,.06)}

.map{margin:0 0 14px}
.map img{width:100%;height:auto;border-radius:10px;border:1px solid var(--line);display:block}
.map figcaption{margin-top:5px}

/* Confirmation paste rows */
.conf{padding:8px 0;border-bottom:1px solid var(--line)}
.conf:last-child{border-bottom:0}
.conf input{margin-top:4px}
textarea{font:inherit;font-size:1rem;padding:10px;border-radius:10px;border:1px solid var(--line);
  background:var(--bg);color:var(--ink);width:100%;resize:vertical}

/* Budget progress bar */
.bar{height:10px;background:var(--card2);border-radius:6px;overflow:hidden;margin:8px 0}
.bar-fill{height:100%;background:var(--accent);border-radius:6px}
.bar-fill.over{background:var(--bad)}
.ok-t{color:var(--ok)}
/* Life budget rows: category label + spent/target, a bar, and the editable target input */
.lbrow{padding:8px 0;border-bottom:1px solid var(--line)}
.lbrow:last-child{border-bottom:0}
.lbtop{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}
.lbrow input{margin-top:4px}

.thai{font-size:1.25rem;line-height:1.6}
.tr{color:var(--dim);font-size:.85rem}
.phrase{padding:8px 0;border-bottom:1px solid var(--line)}
.phrase:last-child{border-bottom:0}

/* Per-person vaccine questions: prompt on top, one labelled select per traveler below. */
.vaxq{padding:9px 0;border-bottom:1px solid var(--line)}
.vaxq:last-of-type{border-bottom:0}
.vaxq-text{font-size:.92rem;margin-bottom:6px}
.vaxq-people{display:flex;gap:10px;flex-wrap:wrap}
.whoq{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--dim)}
.whoq span{font-weight:600;min-width:1.5em}
.whoq select{width:auto}

.num{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}
.num:last-child{border-bottom:0}
.num a{font-size:1.5rem;font-weight:700;text-decoration:none}
.check{display:flex;gap:9px;align-items:flex-start;padding:7px 0}
.check input{width:20px;height:20px;flex:0 0 auto;margin-top:2px}
.check.done span{opacity:.5;text-decoration:line-through}

/* Per-person checklist rows: task on the left, one small labelled box per traveler on the right.
 * Boxes are 22px+ with padded labels so they stay tappable on a phone. */
.check2{display:flex;gap:10px;align-items:flex-start;justify-content:space-between;
        padding:9px 0;border-bottom:1px solid var(--line)}
.check2:last-child{border-bottom:0}
.check2-task{flex:1;min-width:0}
.check2.done .check2-task > span:first-child{opacity:.5;text-decoration:line-through}
.check2-boxes{display:flex;gap:6px;flex:0 0 auto}
.who{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px 7px;
     border:1px solid var(--line);border-radius:9px;cursor:pointer;min-width:42px}
.who input{width:22px;height:22px;margin:0;flex:0 0 auto}
.who span{font-size:.68rem;color:var(--dim);font-weight:600;max-width:52px;overflow:hidden;
          text-overflow:ellipsis;white-space:nowrap}
.who.on{border-color:var(--accent);background:var(--card2)}
.who.on span{color:var(--accent)}
