:root{
  --bg:#f4f7f9; --surface:#ffffff; --surface-2:#eef3f6; --line:#d8e2e8;
  --text:#12232c; --muted:#5b7280; --brand:#0d7a72; --brand-2:#0a5f59; --brand-soft:#e8f6f4;
  --on-brand:#ffffff; --on-bad:#ffffff;
  --ok:#1c7c4a; --ok-soft:#e3f5ea; --warn:#a15c00; --warn-soft:#fdf1dc;
  --bad:#b3261e; --bad-soft:#fbe6e5; --accent:#7b4bd6; --accent-soft:#efe8fb;
  --radius:14px; --shadow:0 1px 2px rgba(16,40,50,.06),0 6px 20px rgba(16,40,50,.06);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#0e1518; --surface:#152025; --surface-2:#1c2a30; --line:#27383f;
    --text:#e6eef1; --muted:#9db0b9; --brand:#3fbfb2; --brand-2:#5fd6c8; --brand-soft:#123832;
    --on-brand:#04231f; --on-bad:#3a0f0c;
    --ok:#5cd08c; --ok-soft:#123324; --warn:#e2a44a; --warn-soft:#3a2c14;
    --bad:#ff8a80; --bad-soft:#3a1c1a; --accent:#b79bf0; --accent-soft:#241a3a;
    --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
  }
}
:root[data-theme="dark"]{
  --bg:#0e1518; --surface:#152025; --surface-2:#1c2a30; --line:#27383f;
  --text:#e6eef1; --muted:#9db0b9; --brand:#3fbfb2; --brand-2:#5fd6c8; --brand-soft:#123832;
  --on-brand:#04231f; --on-bad:#3a0f0c;
  --ok:#5cd08c; --ok-soft:#123324; --warn:#e2a44a; --warn-soft:#3a2c14;
  --bad:#ff8a80; --bad-soft:#3a1c1a; --accent:#b79bf0; --accent-soft:#241a3a;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--text); line-height:1.7;
  font-family:"Noto Sans Thai","Sarabun","IBM Plex Sans Thai",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  font-size:16px; -webkit-text-size-adjust:100%;
}
img{max-width:100%}
button{font:inherit;color:inherit}
a{color:var(--brand);text-underline-offset:3px}

/* header */
.stickytop{position:sticky;top:0;z-index:50;background:var(--surface);border-bottom:1px solid var(--line)}
.topbar{background:var(--surface)}
.topbar-in{max-width:960px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:12px}
.logo{width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,var(--brand),var(--accent));
  display:grid;place-items:center;color:#fff;font-weight:800;font-size:14px;letter-spacing:.5px;flex:none}
.brand h1{margin:0;font-size:16px;font-weight:800;letter-spacing:.2px}
.brand p{margin:0;font-size:12px;color:var(--muted)}
@media(max-width:560px){.brand p{display:none}}
.spacer{flex:1}
.icon-btn{background:var(--surface-2);border:1px solid var(--line);border-radius:11px;width:44px;height:44px;
  cursor:pointer;display:grid;place-items:center;font-size:16px}
.icon-btn:hover{border-color:var(--brand)}

nav.tabs{background:var(--surface);border-top:1px solid var(--line)}
.tabs-in{max-width:960px;margin:0 auto;display:flex;gap:4px;overflow-x:auto;padding:0 10px;scrollbar-width:none}
.tabs-in::-webkit-scrollbar{display:none}
.tab{white-space:nowrap;padding:11px 13px;font-size:14px;font-weight:600;color:var(--muted);
  border:0;background:none;border-bottom:2.5px solid transparent;cursor:pointer}
.tab.active{color:var(--brand);border-bottom-color:var(--brand)}

main{max-width:960px;margin:0 auto;padding:18px 16px 80px}
.page-head{margin:0 0 14px}
.page-head h2{margin:0 0 4px;font-size:22px;font-weight:800;letter-spacing:-.2px}
.page-head p{margin:0;color:var(--muted);font-size:14px}

.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);margin-bottom:14px}
.card h3{margin:0 0 8px;font-size:17px;font-weight:700}
.grid{display:grid;gap:12px}
@media(min-width:640px){.grid.two{grid-template-columns:1fr 1fr}.grid.three{grid-template-columns:repeat(3,1fr)}}

.tile{display:block;width:100%;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:14px;cursor:pointer;box-shadow:var(--shadow);text-align:start;transition:.15s}
.tile:hover{border-color:var(--brand);transform:translateY(-1px)}
.tile .row{display:flex;gap:11px;align-items:flex-start}
.tile .em{font-size:22px;line-height:1.2}
.tile b{display:block;font-size:15px}
.tile small{color:var(--muted);font-size:13px;display:block;margin-top:2px}

.pill{display:inline-block;font-size:12px;font-weight:700;padding:2px 9px;border-radius:999px;
  background:var(--brand-soft);color:var(--brand);border:1px solid transparent}
.pill.gray{background:var(--surface-2);color:var(--muted)}
.pill.ok{background:var(--ok-soft);color:var(--ok)}
.pill.bad{background:var(--bad-soft);color:var(--bad)}
.pill.warn{background:var(--warn-soft);color:var(--warn)}

.btn{border:1px solid var(--line);background:var(--surface-2);border-radius:11px;padding:10px 15px;
  font-weight:700;font-size:14px;cursor:pointer;transition:.15s}
.btn:hover{border-color:var(--brand)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
.btn.primary:hover{background:var(--brand-2);border-color:var(--brand-2);color:var(--on-brand)}
.btn.ghost{background:transparent}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}

.bar{height:8px;border-radius:99px;background:var(--surface-2);overflow:hidden;border:1px solid var(--line)}
.bar > i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--accent))}
.stat{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px;font-size:13px}
.stat b{font-size:15px}

/* content blocks */
.body p{margin:0 0 10px}
.body ul,.body ol{margin:0 0 12px;padding-inline-start:22px}
.body li{margin-bottom:6px}
.h4{margin:18px 0 8px;font-size:15.5px;font-weight:800;color:var(--brand);
  border-inline-start:3px solid var(--brand);padding-inline-start:9px}
.note{border-radius:12px;padding:11px 13px;margin:0 0 12px;font-size:14.5px;border:1px solid transparent}
.note.warn{background:var(--warn-soft);border-color:var(--warn);color:var(--text)}
.note.tip{background:var(--accent-soft);border-color:var(--accent);color:var(--text)}
.note b{display:block;margin-bottom:2px}
.tablewrap{overflow-x:auto;margin:0 0 12px;border:1px solid var(--line);border-radius:12px}
table{border-collapse:collapse;width:100%;min-width:340px;font-size:14px}
th,td{padding:9px 11px;text-align:start;border-bottom:1px solid var(--line);vertical-align:top}
th{background:var(--surface-2);font-weight:700;white-space:nowrap}
tr:last-child td{border-bottom:0}
.kv{display:grid;gap:0;border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:12px}
.kv div{display:grid;grid-template-columns:minmax(120px,38%) 1fr;border-bottom:1px solid var(--line);font-size:14px}
.kv div:last-child{border-bottom:0}
.kv span{padding:9px 11px}
.kv span:first-child{background:var(--surface-2);font-weight:700}
.pearls{background:var(--brand-soft);border-radius:12px;padding:12px 14px;margin-top:14px}
.pearls b{display:block;margin-bottom:5px;font-size:14px}
.pearls ul{margin:0;padding-inline-start:20px;font-size:14.5px}

/* quiz */
.choice{display:block;width:100%;text-align:start;background:var(--surface);border:1.5px solid var(--line);
  border-radius:12px;padding:12px 14px;margin-bottom:9px;cursor:pointer;font-size:15px;transition:.12s}
.choice:hover:not(:disabled){border-color:var(--brand);background:var(--surface-2)}
.choice.correct{border-color:var(--ok);background:var(--ok-soft)}
.choice.wrong{border-color:var(--bad);background:var(--bad-soft)}
.choice.picked{border-color:var(--brand);background:var(--brand-soft)}
.choice:disabled{cursor:default}
.qmeta{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;font-size:13px;color:var(--muted)}
.why{border-radius:12px;padding:12px 14px;background:var(--surface-2);border:1px solid var(--line);font-size:14.5px;margin-top:10px}
.why b{color:var(--brand)}

/* checklist */
.ci{border-bottom:1px solid var(--line);padding:11px 0}
.ci:last-child{border-bottom:0}
.ci .t{font-size:14.8px;margin-bottom:7px}
.seg{display:flex;gap:6px;flex-wrap:wrap}
.seg button{border:1.5px solid var(--line);background:var(--surface);border-radius:9px;padding:5px 12px;
  font-size:13px;font-weight:700;cursor:pointer;color:var(--muted)}
.seg button.on{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
.seg button.on.z{background:var(--bad);border-color:var(--bad);color:var(--on-bad)}
.hintline{font-size:12.5px;color:var(--muted);margin-top:5px}

/* order game */
.slot{display:flex;gap:9px;align-items:center;background:var(--surface);border:1.5px solid var(--line);
  border-radius:11px;padding:10px 12px;margin-bottom:8px;font-size:14.5px}
.slot .n{width:26px;height:26px;flex:none;border-radius:8px;background:var(--brand-soft);color:var(--brand);
  display:grid;place-items:center;font-weight:800;font-size:13px}
.slot.correct{border-color:var(--ok);background:var(--ok-soft)}
.slot.wrong{border-color:var(--bad);background:var(--bad-soft)}
.pool button{display:block;width:100%;text-align:start;background:var(--surface);border:1.5px dashed var(--line);
  border-radius:11px;padding:10px 12px;margin-bottom:8px;font-size:14.5px;cursor:pointer}
.pool button:hover{border-color:var(--brand);border-style:solid}

/* flashcard */
.flash{min-height:190px;display:grid;place-items:center;text-align:center;padding:26px 18px;cursor:pointer;
  background:var(--surface);border:1.5px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.flash .q{font-size:19px;font-weight:800}
.flash .a{font-size:16.5px;margin-top:10px;color:var(--brand)}
.flash small{display:block;margin-top:12px;color:var(--muted);font-size:12.5px}

.empty{text-align:center;color:var(--muted);padding:30px 10px}
footer.disc{max-width:960px;margin:0 auto;padding:18px 16px 40px;color:var(--muted);font-size:12.5px;border-top:1px solid var(--line)}

@media print{
  /* บังคับให้หน้าพิมพ์เป็นขาว-ดำเสมอ แม้ผู้ใช้กำลังเปิดโหมดมืดอยู่ */
  :root,:root[data-theme="dark"],:root[data-theme="light"]{
    --bg:#fff;--surface:#fff;--surface-2:#fff;--line:#999;--text:#000;--muted:#333;
    --brand:#000;--brand-2:#000;--brand-soft:#f0f0f0;--accent:#000;--accent-soft:#f4f4f4;
    --ok:#000;--ok-soft:#f0f0f0;--warn:#000;--warn-soft:#f4f4f4;--bad:#000;--bad-soft:#f4f4f4;
    --on-brand:#fff;--on-bad:#fff;--shadow:none;
  }
  .stickytop,.topbar,nav.tabs,.btn-row,.no-print,footer.disc{display:none!important}
  body{background:#fff;color:#000;font-size:11.5pt}
  main{padding:0}
  .card{box-shadow:none;break-inside:avoid;border-color:#999;margin-bottom:10px;padding:12px}
  .ci{break-inside:avoid}
  .seg button{border-color:#999;color:#000}
  .seg button:not(.on){opacity:.35}
  .seg button.on{background:#000!important;color:#fff!important;
    -webkit-print-color-adjust:exact;print-color-adjust:exact}
  .pill{border:1px solid #666;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .bar{border-color:#999}
  .inp{border:0;border-bottom:1px solid #000;border-radius:0;padding-inline:0}
  th{background:#eee!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .note,.pearls{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ช่องกรอกหัวใบประเมิน */
.card.soft{background:var(--surface-2);box-shadow:none}
.topbar-in .icon-btn+.icon-btn{margin-inline-start:6px}
.metagrid{display:grid;gap:10px}
@media(min-width:640px){.metagrid{grid-template-columns:repeat(3,1fr)}}
.metagrid label{display:block}
.metagrid span{display:block;font-size:13px;font-weight:700;color:var(--muted);margin-bottom:4px}
.inp{width:100%;font:inherit;font-size:15px;padding:9px 11px;border:1.5px solid var(--line);
  border-radius:10px;background:var(--surface);color:var(--text)}
.inp:focus{outline:none;border-color:var(--brand)}

/* โฟกัสที่มองเห็นได้ชัดสำหรับการใช้คีย์บอร์ด */
button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid var(--brand);outline-offset:2px}

/* เป้าหมายการแตะบนมือถือ */
@media(pointer:coarse){
  .btn{padding:12px 16px}
  .seg button{padding:9px 14px}
  .choice{padding:14px}
  .tab{padding:13px 14px}
}
