/* ==========================================================================
   CHAT MODEL — design tokens + components
   ตั้งค่าตัวอักษรไทยตามหลัก: line-height 1.8, body 17px, ไม่ตัดคำกลางพยางค์
   ========================================================================== */

:root{
  color-scheme: light;
  /* --- spacing (4-based) --- */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px; --s7:48px; --s8:64px;
  /* --- surface & ink --- */
  --bg:#f4f3f0; --surface:#fcfcfb; --surface-2:#f0efec; --border:#e2e1dc;
  --ink:#0b0b0b; --ink-2:#52514e; --ink-3:#84837d;
  /* --- series (validated palette) --- */
  --c1:#2a78d6; --c2:#eb6834; --c3:#1baf7a; --c4:#eda100; --c5:#e87ba4;
  /* --- status --- */
  --good:#1baf7a; --warn:#eda100; --bad:#e34948; --serious:#c2410c;
  /* --- heat ramp --- */
  --h0:#eef4fb; --h1:#cde2fb; --h2:#9ec5f4; --h3:#6da7ec; --h4:#3987e5; --h5:#256abf; --h6:#184f95; --h7:#0d366b;
  --radius:14px; --radius-s:9px;
  --shadow:0 1px 2px rgba(0,0,0,.05), 0 8px 24px rgba(0,0,0,.05);
}
@media (prefers-color-scheme: dark){
  :root{
    color-scheme: dark;
    --bg:#141413; --surface:#1c1c1b; --surface-2:#262625; 
    --border:#383835; --ink:#fff; --ink-2:#c3c2b7; --ink-3:#8f8e86;
    --c1:#3987e5; --c2:#d95926; --c3:#199e70; --c4:#c98500; --c5:#d55181;
    --good:#199e70; --warn:#c98500; --bad:#e66767;
    --h0:#1f2937; --h1:#1e3a5f; --h2:#1c4a80; --h3:#1a5a9e; --h4:#2a6fbd; --h5:#4a8ad4; --h6:#77abe4; --h7:#a9caf0;
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.3);
  }
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:"IBM Plex Sans","IBM Plex Sans Thai",-apple-system,"Segoe UI",sans-serif;
  font-size:17px; line-height:1.8;
  /* ห้ามตัดคำกลางพยางค์ไทย */
  word-break:normal; overflow-wrap:normal; line-break:auto; hyphens:none;
}
h1,h2,h3{line-height:1.35; margin:0; text-wrap:balance}
h1{font-size:26px; font-weight:600; letter-spacing:-.2px}
h2{font-size:19px; font-weight:600; margin:var(--s6) 0 var(--s3)}
h3{font-size:16px; font-weight:600}
a{color:inherit}
small{font-size:14px; color:var(--ink-3); line-height:1.6}
.num{font-variant-numeric:tabular-nums}
.wrap{max-width:1240px; margin:0 auto; padding:0 var(--s4)}

/* ---------- top bar ---------- */
.top{background:var(--surface); border-bottom:1px solid var(--border); position:sticky; top:0; z-index:20}
.topin{display:flex; align-items:center; gap:var(--s5); height:56px}
.brand{font-weight:700; letter-spacing:.3px; text-decoration:none; font-size:15px}
.top nav{display:flex; gap:var(--s1); margin-right:auto; flex-wrap:wrap}
.top nav a{
  text-decoration:none; color:var(--ink-2); font-size:15.5px; font-weight:500;
  padding:6px var(--s3); border-radius:var(--radius-s); line-height:1.5;
}
.top nav a:hover{background:var(--surface-2); color:var(--ink)}
.top nav a.on{background:var(--c1); color:#fff}
.top nav a:focus-visible,.brand:focus-visible{outline:2px solid var(--c1); outline-offset:2px}
.who{font-size:13.5px; color:var(--ink-3); white-space:nowrap}
@media(max-width:700px){ .who{display:none} .topin{gap:var(--s3)} }

main{padding:var(--s5) 0 var(--s8)}

/* ---------- panels & stats ---------- */
.panel{background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:var(--s4) var(--s5); margin-bottom:var(--s4)}
.stats{display:grid; grid-template-columns:repeat(auto-fit,minmax(158px,1fr)); gap:var(--s3); margin:var(--s4) 0 var(--s5)}
.stat{background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:var(--s3) var(--s4)}
.stat b{display:block; font-size:30px; line-height:1.2; font-weight:600; letter-spacing:-.5px; font-variant-numeric:tabular-nums}
.stat span{color:var(--ink-2); font-size:14px; line-height:1.5; display:block}
.stat .delta{font-size:13px; font-weight:600}
.up{color:var(--bad)} .down{color:var(--good)} .flat{color:var(--ink-3)}

/* ---------- table ---------- */
table{width:100%; border-collapse:collapse}
th,td{text-align:left; padding:10px var(--s3); border-bottom:1px solid var(--border); line-height:1.5; vertical-align:middle}
th{font-size:14px; font-weight:600; color:var(--ink-2)}
td.r,th.r{text-align:right}
.dot{display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:7px; vertical-align:middle}
.bar{height:6px; background:var(--surface-2); border-radius:3px; overflow:hidden; margin:5px 0 3px}
.bar i{display:block; height:100%; border-radius:3px}

/* ---------- heatmap ---------- */
.hm{border-collapse:separate; border-spacing:2px; font-size:12px}
.hm th{border:0; padding:2px 4px; text-align:center; font-size:12px; color:var(--ink-2)}
.hm th:first-child{text-align:right; color:var(--ink-3)}
.hm td{border:0; padding:5px 2px; text-align:center; border-radius:5px; min-width:42px; font-weight:600; font-variant-numeric:tabular-nums}
.hm td.tot{background:transparent!important; color:var(--ink-2); font-weight:700}

/* ---------- trend chart ---------- */
.spark{width:100%; height:auto; max-height:240px; display:block}
.legend{display:flex; gap:var(--s4); flex-wrap:wrap; margin-top:var(--s3); font-size:14px; color:var(--ink-2)}
.legend i{display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:6px}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  font:inherit; font-size:16px; font-weight:600; line-height:1.4;
  min-height:44px; padding:0 var(--s4); border-radius:var(--radius-s);
  border:1px solid var(--border); background:var(--surface); color:var(--ink);
  cursor:pointer; text-decoration:none;
}
.btn:hover{background:var(--surface-2)}
.btn:focus-visible{outline:2px solid var(--c1); outline-offset:2px}
.btn:disabled{opacity:.5; cursor:not-allowed}
.btn.primary{background:var(--c1); border-color:var(--c1); color:#fff}
.btn.good{background:var(--good); border-color:var(--good); color:#fff}
.btn.warn{background:var(--warn); border-color:var(--warn); color:#1a1a19}
.btn.bad{background:var(--bad); border-color:var(--bad); color:#fff}
.btn kbd{
  font:inherit; font-size:12px; font-weight:700; opacity:.75;
  border:1px solid currentColor; border-radius:4px; padding:0 5px; line-height:1.5;
}

/* ---------- review layout ---------- */
.rev{display:grid; grid-template-columns:340px 1fr; gap:var(--s4); align-items:start}
@media(max-width:900px){ .rev{grid-template-columns:1fr} .rev .qlist{max-height:320px} }
.qhead{display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap; margin-bottom:var(--s3)}
.qlist{background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); overflow:auto; max-height:calc(100vh - 190px)}
.qitem{
  display:block; width:100%; text-align:left; font:inherit; background:none; border:0;
  border-bottom:1px solid var(--border); padding:10px var(--s3); cursor:pointer; line-height:1.5;
}
.qitem:hover{background:var(--surface-2)}
.qitem.on{background:var(--c1); color:#fff}
.qitem.on small,.qitem.on .qflag{color:rgba(255,255,255,.85)}
.qitem .qtop{display:flex; justify-content:space-between; gap:var(--s2); font-size:14px}
.qitem .qflag{font-size:14px; color:var(--ink-2); display:block}
.qitem.done{opacity:.5}
.sev{display:inline-block; min-width:22px; text-align:center; font-size:12px; font-weight:700; border-radius:4px; padding:0 5px; background:var(--surface-2); color:var(--ink-2)}
.qitem.on .sev{background:rgba(255,255,255,.25); color:#fff}

.case{background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:var(--s4) var(--s5)}
.case .meta{color:var(--ink-3); font-size:14px; line-height:1.7; margin:var(--s1) 0 var(--s4)}
.tags{display:flex; gap:6px; flex-wrap:wrap; margin:var(--s2) 0}
.tag{background:var(--surface-2); border:1px solid var(--border); color:var(--ink-2); font-size:13px; padding:2px 9px; border-radius:20px; line-height:1.6}

/* ---------- transcript ---------- */
.tr{background:var(--bg); border-radius:var(--radius-s); padding:var(--s3); max-height:44vh; overflow:auto}
.m{margin:0 0 8px; padding:8px 11px; border-radius:11px; max-width:82%; white-space:pre-wrap; font-size:16px; line-height:1.75}
.m .mt{display:block; font-size:12px; color:var(--ink-3); margin-bottom:2px; line-height:1.5}
.m.cu{background:var(--surface); border:1px solid var(--border)}
.m.ag{background:var(--c1); color:#fff; margin-left:auto}
.m.ag .mt{color:rgba(255,255,255,.8)}
.m.bo{background:transparent; border:1px dashed var(--border); color:var(--ink-2)}
.mk{text-align:center; color:var(--ink-3); font-size:12.5px; margin:6px 0}
.m a{color:inherit; word-break:break-all}   /* ตัดได้เฉพาะ URL */

/* ---------- verdict ---------- */
.verdict{display:flex; gap:var(--s2); flex-wrap:wrap; margin:var(--s4) 0 var(--s3)}
textarea,input[type=text],select{
  font:inherit; font-size:16px; line-height:1.7; width:100%;
  padding:10px var(--s3); border-radius:var(--radius-s);
  border:1px solid var(--border); background:var(--surface); color:var(--ink);
}
textarea{min-height:84px; resize:vertical}
textarea:focus,input:focus,select:focus{outline:2px solid var(--c1); outline-offset:1px}
label{display:block; font-size:14px; color:var(--ink-2); margin:var(--s3) 0 4px; font-weight:500}
.saverow{display:flex; gap:var(--s3); align-items:center; margin-top:var(--s4); flex-wrap:wrap}
.saved{color:var(--good); font-size:14px; font-weight:600}
.filters{display:flex; gap:var(--s2); flex-wrap:wrap; margin-bottom:var(--s3)}
.filters select{width:auto; min-width:150px; min-height:44px}
.progress{height:8px; background:var(--surface-2); border-radius:4px; overflow:hidden; margin-bottom:var(--s3)}
.progress i{display:block; height:100%; background:var(--good)}
.empty{text-align:center; color:var(--ink-3); padding:var(--s8) var(--s4)}

/* ---------- login ---------- */
.loginpage{display:grid; place-items:center; min-height:100vh; background:var(--bg)}
.loginbox{background:var(--surface); border:1px solid var(--border); border-radius:var(--radius);
  padding:var(--s7) var(--s6); text-align:center; box-shadow:var(--shadow); max-width:400px; margin:var(--s4)}
.lb-brand{font-weight:700; letter-spacing:.5px; font-size:19px}
.lb-sub{color:var(--ink-2); margin:var(--s1) 0 var(--s6); font-size:15px}
.lb-note{color:var(--ink-3); font-size:13.5px; margin-top:var(--s5); line-height:1.7}
.lb-err{background:rgba(227,73,72,.12); color:var(--bad); border-radius:var(--radius-s);
  padding:10px var(--s3); font-size:14.5px; margin-bottom:var(--s4); line-height:1.6}
#gbtn{display:flex; justify-content:center}

/* ---------- misc ---------- */
.note{color:var(--ink-2); font-size:14.5px; line-height:1.75; margin:var(--s3) 0 0}
.pill{font-size:13px; padding:2px 10px; border-radius:20px; font-weight:600; line-height:1.7; display:inline-block}
.pill.good{background:rgba(27,175,122,.15); color:var(--good)}
.pill.warn{background:rgba(237,161,0,.16); color:var(--warn)}
.pill.bad{background:rgba(227,73,72,.14); color:var(--bad)}
.pill.muted{background:var(--surface-2); color:var(--ink-3)}
.sr{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap}

/* ---------- mobile: หัวเว็บและตัวกรอง ---------- */
@media(max-width:700px){
  .topin{height:auto; flex-wrap:wrap; padding:var(--s2) 0; gap:var(--s2); align-items:flex-start}
  .brand{width:100%; font-size:14px}
  .top nav{width:100%; flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none}
  .top nav::-webkit-scrollbar{display:none}
  .top nav a{white-space:nowrap; min-height:40px; display:flex; align-items:center}
  .filters select{flex:1 1 44%; min-width:0}
  h1{font-size:23px}
  .case{padding:var(--s3) var(--s4)}
  .m{max-width:92%}
  .verdict .btn{flex:1 1 100%}
}

/* ---------- หน้ารายคน: การ์ดตัวอย่างเคส (อ่านได้บนมือถือ ไม่ใช่ตารางบีบ) ---------- */
.excase{border-top:1px solid var(--border); padding:var(--s3) 0}
.excase:first-of-type{border-top:0; padding-top:var(--s2)}
.exhead{display:flex; gap:var(--s3); align-items:baseline; justify-content:space-between; flex-wrap:wrap}
.exhead b{font-size:15.5px; line-height:1.6}
.exhead a{font-size:14px; white-space:nowrap}
.exmeta{color:var(--ink-3); font-size:13.5px; margin:2px 0 4px; font-variant-numeric:tabular-nums}
