:root{
  --bg:#F1F4F0; --surface:#FFFFFF; --surface-2:#F7F9F6; --line:#DDE4DC; --line-soft:#EAF0E8;
  --ink:#18211B; --ink-2:#3D4A41; --muted:#6C7A6F;
  --accent:#2E6B4E; --accent-soft:#DCEBE1; --accent-ink:#1F4E38;
  --amber:#9A6B14; --amber-soft:#F6EBD4;
  --ok:#2F7D5C; --ok-soft:#DBEEE4; --warn:#A9741B; --warn-soft:#F7EBD6; --stop:#A8433B; --stop-soft:#F6DEDB;
  --shadow:0 1px 2px rgba(24,33,27,.06),0 8px 24px -12px rgba(24,33,27,.18);
  --r:10px; --r-sm:7px;
  --f-ui:"IBM Plex Sans Thai","Noto Sans Thai",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono","SF Mono",ui-monospace,Menlo,monospace;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#0F1411; --surface:#161D18; --surface-2:#1B231D; --line:#2A342C; --line-soft:#222B24;
    --ink:#E7EDE6; --ink-2:#C0CBC0; --muted:#8B9A8D;
    --accent:#6DB894; --accent-soft:#1E3128; --accent-ink:#9BD6B7;
    --amber:#D6A44F; --amber-soft:#2D2517;
    --ok:#5FB68C; --ok-soft:#1B2E24; --warn:#D0A054; --warn-soft:#2C2416; --stop:#D9756B; --stop-soft:#33201E;
    --shadow:0 1px 2px rgba(0,0,0,.4),0 10px 28px -14px rgba(0,0,0,.7);
  }
}
:root[data-theme="dark"]{
  --bg:#0F1411; --surface:#161D18; --surface-2:#1B231D; --line:#2A342C; --line-soft:#222B24;
  --ink:#E7EDE6; --ink-2:#C0CBC0; --muted:#8B9A8D;
  --accent:#6DB894; --accent-soft:#1E3128; --accent-ink:#9BD6B7;
  --amber:#D6A44F; --amber-soft:#2D2517;
  --ok:#5FB68C; --ok-soft:#1B2E24; --warn:#D0A054; --warn-soft:#2C2416; --stop:#D9756B; --stop-soft:#33201E;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 10px 28px -14px rgba(0,0,0,.7);
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--f-ui);font-size:14.5px;line-height:1.55;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4{margin:0;font-weight:600;text-wrap:balance;line-height:1.3}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--accent-ink)}
.num{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.eyebrow{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}

/* ---------- shell ---------- */
.app{display:grid;grid-template-columns:236px 1fr;min-height:100vh}
.rail{background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;gap:2px;padding:16px 12px;position:sticky;top:0;height:100vh;overflow:auto}
.brandmark{display:flex;gap:10px;align-items:center;padding:4px 8px 16px}
.brandmark .dot{width:30px;height:30px;border-radius:9px;background:var(--accent);color:#fff;display:grid;place-items:center;font-family:var(--f-mono);font-weight:600;font-size:12px;flex:none}
:root[data-theme="dark"] .brandmark .dot,:root:not([data-theme="light"]) .brandmark .dot{color:#0F1411}
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]) .brandmark .dot{color:#fff}}
.brandmark b{display:block;font-size:14px;font-weight:600}
.brandmark span{display:block;font-size:11px;color:var(--muted)}
.navlink{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:var(--r-sm);color:var(--ink-2);text-decoration:none;font-size:13.5px;border:1px solid transparent}
.navlink:hover{background:var(--surface-2)}
.navlink.on{background:var(--accent-soft);color:var(--accent-ink);border-color:var(--line-soft);font-weight:600}
.navlink .ic{width:17px;text-align:center;opacity:.85}
.nav-sep{margin:12px 10px 6px}
.rail-foot{margin-top:auto;padding:10px 6px 0;border-top:1px solid var(--line-soft);font-size:11.5px;color:var(--muted)}
main{min-width:0;padding:22px 26px 60px;max-width:1240px}
.page-head{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;justify-content:space-between;margin-bottom:18px}
.page-head h1{font-size:22px;letter-spacing:-.01em}
.page-head p{margin:3px 0 0;color:var(--muted);font-size:13px}
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}

/* ---------- primitives ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.card-h{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 15px;border-bottom:1px solid var(--line-soft)}
.card-h h3{font-size:14.5px}
.card-b{padding:14px 15px}
.grid{display:grid;gap:14px}
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;font-size:13px;font-weight:500}
.btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.btn:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,.navlink:focus-visible,.tab:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.btn.pri{background:var(--accent);border-color:var(--accent);color:#fff}
:root[data-theme="dark"] .btn.pri{color:#0F1411}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .btn.pri{color:#0F1411}}
.btn.pri:hover{filter:brightness(1.07);color:#fff}
:root[data-theme="dark"] .btn.pri:hover{color:#0F1411}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .btn.pri:hover{color:#0F1411}}
.btn.sm{padding:4px 9px;font-size:12px}
.btn.danger:hover{border-color:var(--stop);color:var(--stop)}
.btn[disabled]{opacity:.45;cursor:not-allowed}
input,select,textarea{width:100%;padding:7px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);font-size:13.5px}
textarea{resize:vertical;min-height:64px;font-family:var(--f-ui)}
label.fld{display:block;font-size:12px;color:var(--muted);margin-bottom:12px}
label.fld > span{display:block;margin-bottom:4px}
.hint{font-size:11.5px;line-height:1.5;color:var(--muted);margin-top:4px}
.hint b{color:var(--ink-2);font-weight:600}
.helpbox{background:var(--accent-soft);border:1px solid var(--line-soft);border-radius:var(--r-sm);padding:11px 13px;font-size:13px;color:var(--accent-ink)}
.helpbox b{font-weight:600}
.hsec{scroll-margin-top:14px}
.hsec h3{font-size:16px}
.ex{font-size:12.5px;color:var(--muted)}
.ex b{color:var(--ink-2);font-weight:500}
.row{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line-soft);white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.pill.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.pill.stop{background:var(--stop-soft);color:var(--stop);border-color:transparent}
.pill.acc{background:var(--accent-soft);color:var(--accent-ink);border-color:transparent}
table{width:100%;border-collapse:collapse;font-size:13.5px}
.tw{overflow-x:auto}
th{text-align:left;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:9px 10px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
tr.clk{cursor:pointer}
tr.clk:hover td{background:var(--surface-2)}
.r{text-align:right}
.muted{color:var(--muted)}
.empty{padding:26px;text-align:center;color:var(--muted);font-size:13px}
.stat{padding:13px 15px}
.stat .k{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-family:var(--f-mono)}
.stat .v{font-family:var(--f-mono);font-size:25px;font-weight:600;letter-spacing:-.02em;margin-top:3px}
.stat .s{font-size:12px;color:var(--muted)}
.bar{height:7px;border-radius:99px;background:var(--line-soft);overflow:hidden}
.bar>i{display:block;height:100%;background:var(--accent);border-radius:99px}
.bar>i.warn{background:var(--warn)} .bar>i.stop{background:var(--stop)}
hr{border:0;border-top:1px solid var(--line-soft);margin:14px 0}

/* ---------- gate rail ---------- */
.gates{display:flex;gap:0;overflow-x:auto;padding:2px}
.gate{flex:1 0 auto;min-width:112px;padding:9px 11px;border:1px solid var(--line);border-right:0;background:var(--surface)}
.gate:first-child{border-radius:var(--r) 0 0 var(--r)}
.gate:last-child{border-right:1px solid var(--line);border-radius:0 var(--r) var(--r) 0}
.gate .g{font-family:var(--f-mono);font-size:10.5px;color:var(--muted);letter-spacing:.1em}
.gate .t{font-size:12.5px;font-weight:600;margin-top:2px;color:var(--ink-2)}
.gate.done{background:var(--accent-soft)}
.gate.done .t,.gate.done .g{color:var(--accent-ink)}
.gate.now{background:var(--surface);box-shadow:inset 0 -3px 0 var(--accent)}
.gate.now .t{color:var(--ink)}
.tabs{display:flex;gap:3px;flex-wrap:wrap;margin:16px 0 14px;border-bottom:1px solid var(--line)}
.tab{padding:8px 12px;border:0;background:none;cursor:pointer;font-size:13.5px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--ink)}
.tab.on{color:var(--accent-ink);border-bottom-color:var(--accent);font-weight:600}
.check{display:flex;gap:8px;align-items:flex-start;font-size:13px;padding:5px 0}
.check .bx{width:16px;height:16px;border-radius:5px;flex:none;display:grid;place-items:center;font-size:10.5px;margin-top:2px;background:var(--line-soft);color:var(--muted)}
.check.y .bx{background:var(--ok-soft);color:var(--ok)}
.kv{display:grid;grid-template-columns:130px 1fr;gap:6px 12px;font-size:13.5px}
.kv dt{color:var(--muted);font-size:12.5px}
.kv dd{margin:0}
.scorebar{display:grid;grid-template-columns:110px 1fr 46px;gap:10px;align-items:center;padding:4px 0;font-size:13px}

/* ---------- modal ---------- */
.mask{position:fixed;inset:0;background:rgba(16,22,18,.5);display:grid;place-items:center;padding:20px;z-index:50;backdrop-filter:blur(2px)}
.modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);width:min(760px,100%);max-height:88vh;overflow:auto;box-shadow:0 24px 60px -20px rgba(0,0,0,.5)}
.modal .card-h{position:sticky;top:0;background:var(--surface);z-index:2}
.modal-f{display:flex;justify-content:flex-end;gap:8px;padding:12px 15px;border-top:1px solid var(--line-soft);position:sticky;bottom:0;background:var(--surface)}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:9px 16px;border-radius:99px;font-size:13px;z-index:80;box-shadow:var(--shadow)}
@media (prefers-reduced-motion:no-preference){.toast{animation:rise .22s ease}}
@keyframes rise{from{opacity:0;transform:translate(-50%,8px)}}

/* ---------- sop print ---------- */
.sop{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:26px 30px;max-width:820px}
.sop h2{font-size:19px} .sop h4{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:18px 0 7px}
.sop .head{display:flex;justify-content:space-between;gap:16px;border-bottom:2px solid var(--ink);padding-bottom:10px;flex-wrap:wrap}
@media print{
  .rail,.tabs,.toolbar,.no-print{display:none!important}
  .app{display:block} main{padding:0;max-width:none}
  .sop{border:0;box-shadow:none;padding:0}
  body{background:#fff;color:#000}
}
@media (max-width:860px){
  .app{grid-template-columns:1fr}
  .rail{position:static;height:auto;flex-direction:row;flex-wrap:wrap;border-right:0;border-bottom:1px solid var(--line)}
  .rail .brandmark{width:100%} .rail-foot{display:none} .nav-sep{display:none}
  main{padding:16px 14px 50px}
  main .grid{grid-template-columns:repeat(auto-fit,minmax(148px,1fr))!important}
  .kv{grid-template-columns:1fr;gap:2px 0}
  .kv dd{margin-bottom:6px}
  .page-head h1{font-size:19px}
}
