/* แล็บการเคลื่อนที่ — เวทีบน / แผงล่าง บนจอเล็ก, เวทีซ้าย / แผงขวา บนจอกว้าง
   ใช้ token ชุดเดียวกับ hub เพื่อให้ทุก app หน้าตาเป็นตระกูลเดียวกัน */

:root{
  --sans:'IBM Plex Sans Thai','Noto Sans Thai',system-ui,-apple-system,'Segoe UI',sans-serif;
  --ink:#191a24;
  --muted:#6b6c7e;
  --line:#e6e3dc;
  --surface:#fff;
  --bg:#f5f4ef;
  --brand:#2e7d88;
  --brand-ink:#1f5f68;
  --brand-soft:#dcecee;
  --ok:#129a72;
  --warn:#d68a17;
  --danger:#e2564a;
  --tension:#2f6fe0;      /* ถูกดึง */
  --compression:#e2564a;  /* ถูกอัด */
}

*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden}
body{
  font-family:var(--sans);color:var(--ink);background:var(--bg);
  display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;
}

/* ---------- เวที 3D ---------- */
#stage{position:relative;flex:1;min-height:0;background:#fff}
#webgl-canvas{width:100%;height:100%;display:block;touch-action:none;cursor:crosshair}

.status{
  /* right เว้นช่องไว้ให้ปุ่มสลับภาษา (pin-tr) มุมขวาบน ไม่ให้ทับกัน */
  position:absolute;left:14px;top:14px;right:96px;
  background:rgba(255,255,255,.94);border:1px solid var(--line);
  border-radius:12px;padding:9px 14px;font-size:.85rem;
  box-shadow:0 4px 14px rgba(25,26,36,.08);pointer-events:none;
  max-width:min(560px,calc(100% - 28px));line-height:1.55;
}
.status.ok{border-color:#bfe9da;color:#0a6b50;background:#f0fbf7}
.status.bad{border-color:#f6cdc9;color:#8f2018;background:#fdf3f2}
.status.warn{border-color:#f7e2bd;color:#7d5209;background:#fffaf0}
.status .eq{
  display:block;margin-top:5px;font-family:ui-monospace,monospace;
  font-size:.92em;color:var(--brand-ink);
}

.hud{
  position:absolute;right:14px;bottom:14px;
  background:var(--ink);color:#fff;border-radius:999px;
  padding:5px 14px;font-size:.78rem;font-weight:600;pointer-events:none;
}

.legend{
  position:absolute;left:14px;bottom:14px;display:flex;gap:12px;flex-wrap:wrap;
  background:rgba(255,255,255,.94);border:1px solid var(--line);
  border-radius:10px;padding:6px 12px;font-size:.74rem;pointer-events:none;
}
.legend[hidden]{display:none}
.lg{display:flex;align-items:center;gap:5px}
.sw{width:16px;height:6px;border-radius:3px;display:inline-block}
.sw-t{background:var(--tension)}
.sw-c{background:var(--compression)}
.sw-i{background:#c9c6bd}
.sw-b{background:#191a24}

/* ---------- แผงค่าที่วัดได้ ---------- */
.meter{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:9px 12px;text-align:center}
.meter-big{font-size:1.35rem;font-weight:700;font-family:ui-monospace,monospace}
.meter-sub{font-size:.74rem;color:var(--muted)}
.gates{display:flex;gap:8px}
.gates .meter{flex:1}
.knob{display:flex;align-items:center;gap:8px}
.knob label{font-size:.74rem;color:var(--muted);width:64px;flex:none}
.knob input[type=range]{flex:1;accent-color:var(--brand)}
.knob b{font-family:ui-monospace,monospace;font-size:.76rem;width:62px;text-align:right}
.calc{display:flex;flex-direction:column;gap:7px}
.num{padding:10px 12px;border:1px solid var(--line);border-radius:10px;
  font-family:ui-monospace,monospace;font-size:.95rem;width:100%}
.num:focus{outline:2px solid var(--brand-soft);border-color:var(--brand)}
.kv{display:flex;flex-direction:column;gap:4px}
.kv-row{display:flex;gap:8px;font-size:.76rem;line-height:1.5}
.kv-k{color:var(--muted);flex:none;min-width:96px}
.kv-v{font-weight:600;font-family:ui-monospace,monospace}
.choices{display:flex;flex-wrap:wrap;gap:6px}
.choice{padding:8px 13px;border:1px solid var(--line);border-radius:999px;background:var(--bg);
  font-family:inherit;font-size:.82rem;cursor:pointer;transition:all .15s;min-height:38px}
.choice:hover{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-ink)}
.choice.on{background:var(--brand);border-color:var(--brand);color:#fff}

/* ---------- เลือกสถานี ---------- */
.chooser{
  position:fixed;inset:0;z-index:20;display:grid;place-items:center;
  background:rgba(25,26,36,.5);backdrop-filter:blur(4px);padding:18px;overflow-y:auto;
}
.chooser[hidden]{display:none}
.chooser-box{
  background:var(--surface);border-radius:18px;padding:22px;width:100%;max-width:720px;
  box-shadow:0 30px 60px -25px rgba(25,26,36,.45);
}
.chooser-title{margin:0;font-size:1.15rem}
.chooser-sub{margin:4px 0 16px;font-size:.82rem;color:var(--muted)}
.chooser-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.lv-card{
  display:flex;flex-direction:column;gap:4px;text-align:left;
  padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--bg);
  font-family:inherit;cursor:pointer;transition:all .15s;
}
.lv-card:hover{border-color:var(--brand);background:var(--brand-soft)}
.lv-card.on{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.lv-name{font-weight:700;font-size:.95rem}
.lv-goal{font-size:.75rem;color:var(--muted);line-height:1.5}
.lv-meter{
  margin-top:4px;font-size:.7rem;font-weight:600;align-self:flex-start;
  color:var(--brand-ink);background:var(--brand-soft);padding:2px 9px;border-radius:999px;
}
.lv-card.done .lv-meter{color:#0a6b50;background:#e3f6ef}

/* ---------- แผงข้าง ---------- */
#panel{
  flex:none;background:var(--surface);border-top:1px solid var(--line);
  padding:12px 14px 14px;display:flex;flex-direction:column;gap:9px;max-height:46vh;
}
.panel-head{display:flex;align-items:baseline;gap:10px}
.panel-title{font-weight:700;font-size:.92rem}
.goal{font-size:.78rem;color:var(--muted);margin-left:auto;text-align:right}
.hint{margin:0;font-size:.76rem;color:var(--muted);line-height:1.55}
#panel-body{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:8px}
/* .btn ตั้ง flex:1 ไว้สำหรับแถวปุ่มด้านล่าง — ในแผงที่เรียงเป็นคอลัมน์ต้องไม่ยืดสูง */
#panel #panel-body .btn,#panel .btn-switch{flex:none}
.btn-switch{flex:none;padding:8px;font-size:.8rem}

.sec-head{font-size:.74rem;font-weight:700;color:var(--muted);margin-top:4px}

/* แถบงบไม้ — เห็นได้ทันทีว่าเหลือไม้อีกเท่าไร */
.budget{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:9px 12px}
.budget-big{font-size:1.3rem;font-weight:700;font-family:ui-monospace,monospace}
.budget-bar{height:6px;border-radius:999px;background:#e2dfd6;margin-top:6px;overflow:hidden}
.budget-fill{height:100%;background:var(--brand);transition:width .2s}
.budget-fill.over{background:var(--danger)}
.budget-sub{font-size:.74rem;color:var(--muted);margin-top:5px}

.result{border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:.8rem;line-height:1.6}
.result.pass{border-color:#bfe9da;background:#f0fbf7;color:#0a6b50}
.result.fail{border-color:#f6cdc9;background:#fdf3f2;color:#8f2018}
.result b{font-weight:700}

.task{display:flex;gap:7px;align-items:flex-start;font-size:.78rem;line-height:1.5}
.task-mark{color:var(--muted);flex:none;width:14px}
.task.done{color:var(--ok)}
.task.done .task-mark{color:var(--ok)}

.member-row{
  display:flex;justify-content:space-between;gap:8px;font-size:.74rem;
  padding:5px 9px;background:var(--bg);border-radius:8px;
}
.member-row.t{border-left:3px solid var(--tension)}
.member-row.c{border-left:3px solid var(--compression)}
.member-force{font-family:ui-monospace,monospace;font-weight:700}

/* ---------- ปุ่ม ---------- */
.actions{display:flex;gap:8px;flex:none}
.btn{
  flex:1;padding:11px;border-radius:999px;border:1px solid transparent;
  font-family:inherit;font-size:.88rem;font-weight:600;cursor:pointer;transition:filter .15s;
}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.45;pointer-events:none}
.btn-ghost{background:var(--surface);border-color:var(--line);color:var(--ink)}
.btn-ghost:hover{background:var(--bg)}
.btn-submit{background:var(--ok);color:#fff}
.btn-submit:hover{filter:brightness(1.06)}

/* ---------- จอกว้าง ---------- */
@media (min-width:820px){
  body{flex-direction:row}
  #panel{
    width:340px;max-height:none;height:100%;
    border-top:none;border-left:1px solid var(--line);padding:16px;
  }
}

.pickrow{display:flex;flex-direction:column;gap:6px}
