/* ============================================================
   ComSec Midterm — v2 theme (light-first, high contrast, calm)
   ============================================================ */
:root{
  --bg:#f7f9fc; --bg2:#eef3fa; --paper:#ffffff; --paper2:#f4f7fc;
  --line:#dfe6f1; --line2:#c6d2e4;
  --tx:#152036; --tx2:#4a5876; --tx3:#77869f;
  --brand:#2563eb; --brand2:#4f46e5; --brand-soft:#e8efff;
  --teal:#0d9488; --teal-soft:#e2f5f1;
  --amber:#b45309; --amber-soft:#fdf3e3;
  --rose:#be123c; --rose-soft:#fdeaef;
  --violet:#6d28d9; --violet-soft:#f1eafd;
  --ok:#15803d; --ok-soft:#e7f6ec;
  --shadow-s:0 1px 2px rgba(21,32,54,.06),0 2px 6px rgba(21,32,54,.05);
  --shadow-m:0 4px 10px -4px rgba(21,32,54,.12),0 12px 28px -12px rgba(21,32,54,.16);
  --shadow-l:0 10px 20px -10px rgba(21,32,54,.18),0 24px 48px -20px rgba(21,32,54,.2);
  --r:16px; --rs:11px; --rx:8px;
  --mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --sans:"IBM Plex Sans Thai","Noto Sans Thai",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --ease:cubic-bezier(.22,.68,.32,1);
}
html[data-theme="dark"]{
  --bg:#0c1220; --bg2:#111a2e; --paper:#141d33; --paper2:#1a2440;
  --line:#25314d; --line2:#33425f;
  --tx:#eef2fc; --tx2:#c2cde3; --tx3:#94a2be;
  --brand:#60a5fa; --brand2:#a78bfa; --brand-soft:#1b2a4d;
  --teal:#2dd4bf; --teal-soft:#10312f;
  --amber:#fbbf24; --amber-soft:#332512;
  --rose:#fb7185; --rose-soft:#3a1522;
  --violet:#c4b5fd; --violet-soft:#2a1f4d;
  --ok:#4ade80; --ok-soft:#11301d;
  --shadow-s:0 1px 2px rgba(0,0,0,.4);
  --shadow-m:0 6px 16px -8px rgba(0,0,0,.6);
  --shadow-l:0 16px 40px -18px rgba(0,0,0,.75);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;scroll-padding-top:78px}
body{font-family:var(--sans);background:var(--bg);color:var(--tx);
  font-size:16px;line-height:1.85;overflow-x:hidden;-webkit-font-smoothing:antialiased}
::selection{background:var(--brand-soft);color:var(--tx)}
a{color:var(--brand);text-decoration:none}
b,strong{font-weight:700;color:var(--tx)}
code,.mono{font-family:var(--mono);font-size:.88em}
img{max-width:100%}

/* ---------- icons ---------- */
.ic{width:1.15em;height:1.15em;display:inline-block;vertical-align:-.2em;flex:none;
  stroke:currentColor;fill:none;overflow:visible}
.ic--sm{width:.95em;height:.95em}

/* ---------- progress ---------- */
.progress-bar{position:fixed;top:0;left:0;right:0;height:3px;z-index:1000;background:transparent}
.progress-bar__fill{height:100%;width:0;background:linear-gradient(90deg,var(--brand),var(--brand2));
  transition:width .1s linear}

/* ---------- topbar ---------- */
.topbar{position:sticky;top:0;z-index:900;background:color-mix(in srgb,var(--bg) 86%,transparent);
  backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.topbar__inner{max-width:1340px;margin:0 auto;padding:11px 18px;display:flex;align-items:center;gap:11px}
.brand{display:flex;align-items:center;gap:11px;color:var(--tx);flex:none}
.brand__logo{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;box-shadow:var(--shadow-s)}
.brand__logo .ic{width:21px;height:21px}
.brand__txt{display:flex;flex-direction:column;line-height:1.2}
.brand__txt b{font-size:16.5px;letter-spacing:-.2px}
.brand__sub{font-size:10.5px;color:var(--tx3);letter-spacing:1.4px;text-transform:uppercase;font-weight:600}
.tabs{display:flex;gap:3px;flex:1;justify-content:center;flex-wrap:wrap}
.tab{position:relative;background:none;border:0;color:var(--tx2);font-family:inherit;font-size:14px;
  font-weight:600;padding:9px 10px;border-radius:10px;cursor:pointer;display:flex;align-items:center;
  gap:6px;white-space:nowrap;transition:color .2s var(--ease),background .2s var(--ease)}
.tab .ic{width:16px;height:16px;vertical-align:-.22em;transition:transform .3s var(--ease)}
.tab:hover{color:var(--tx);background:var(--paper2)}
.tab:hover .ic{transform:translateY(-2px)}
.tab.is-active{color:var(--brand);background:var(--brand-soft)}
.topbar__actions{display:flex;gap:6px;flex:none}
.iconbtn{width:37px;height:37px;border-radius:10px;border:1px solid var(--line);background:var(--paper);
  color:var(--tx2);cursor:pointer;display:grid;place-items:center;transition:.2s var(--ease)}
.iconbtn .ic{width:17px;height:17px;vertical-align:0}
.iconbtn:hover{border-color:var(--brand);color:var(--brand);transform:translateY(-2px);box-shadow:var(--shadow-s)}

/* ---------- search ---------- */
.searchwrap{position:fixed;inset:0;z-index:950;background:color-mix(in srgb,var(--bg) 94%,transparent);
  backdrop-filter:blur(8px);display:none;padding:72px 20px}
.searchwrap.is-open{display:block;animation:fade .18s var(--ease)}
.searchbox{max-width:720px;margin:0 auto;display:flex;gap:10px}
.searchbox input{flex:1;padding:15px 19px;font-size:16.5px;font-family:inherit;border-radius:13px;
  border:1px solid var(--line2);background:var(--paper);color:var(--tx);outline:none;box-shadow:var(--shadow-m)}
.searchbox input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-soft)}
.searchresults{max-width:720px;margin:14px auto;max-height:66vh;overflow:auto}
.sr{display:block;width:100%;text-align:left;padding:12px 15px;border-radius:11px;border:1px solid var(--line);
  background:var(--paper);margin-bottom:7px;cursor:pointer;font-family:inherit;color:var(--tx);
  transition:.16s var(--ease)}
.sr:hover{border-color:var(--brand);transform:translateX(4px);box-shadow:var(--shadow-s)}
.sr__tag{font-size:11px;color:var(--brand);font-weight:700;letter-spacing:.4px}
.sr__t{font-size:14.5px;font-weight:600;line-height:1.5}
.sr__s{font-size:12.5px;color:var(--tx3)}

/* ---------- layout ---------- */
.page{display:none}
.page.is-active{display:block;animation:pageIn .4s var(--ease)}
.container{max-width:900px;margin:0 auto;padding:0 22px 90px}
.container--wide{max-width:1180px}
.pagehead{padding:40px 0 24px;text-align:center}
.pagehead__t{font-size:clamp(25px,4vw,36px);font-weight:800;letter-spacing:-.5px;line-height:1.3;
  display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}
.pagehead__t .ic{width:1em;height:1em;color:var(--brand);vertical-align:-.08em}
.pagehead__s{color:var(--tx2);margin-top:9px;font-size:15.5px;max-width:720px;margin-inline:auto}
.grad{background:linear-gradient(96deg,var(--brand),var(--brand2));-webkit-background-clip:text;
  background-clip:text;color:transparent}

/* ---------- hero ---------- */
.hero{position:relative;overflow:hidden;padding:66px 22px 34px;
  background:radial-gradient(760px 340px at 50% -12%,var(--brand-soft),transparent 68%)}
.hero__inner{position:relative;max-width:860px;margin:0 auto;text-align:center}
.hero__badge{display:inline-flex;align-items:center;gap:8px;padding:6px 15px;border-radius:999px;
  border:1px solid var(--line2);background:var(--paper);font-size:12.5px;font-weight:600;
  letter-spacing:.6px;color:var(--brand);box-shadow:var(--shadow-s)}
.hero__title{font-size:clamp(31px,6vw,55px);font-weight:800;line-height:1.2;margin:19px 0 13px;
  letter-spacing:-1.3px}
.hero__sub{color:var(--tx2);font-size:16.5px;max-width:660px;margin:0 auto}
.hero__cta{display:flex;gap:11px;justify-content:center;margin-top:26px;flex-wrap:wrap}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:11px;margin-top:38px}
.stat{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:17px 13px;
  transition:.25s var(--ease)}
.stat:hover{transform:translateY(-4px);border-color:var(--brand);box-shadow:var(--shadow-m)}
.stat__n{font-size:28px;font-weight:800;color:var(--brand);line-height:1.2;font-variant-numeric:tabular-nums}
.stat__l{font-size:12.5px;color:var(--tx3);margin-top:1px}

/* ---------- buttons ---------- */
.btn{font-family:inherit;font-size:15px;font-weight:600;padding:11px 22px;border-radius:12px;
  cursor:pointer;border:1px solid transparent;transition:.22s var(--ease);
  display:inline-flex;align-items:center;gap:8px}
.btn .ic{width:1em;height:1em}
.btn--primary{background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;
  box-shadow:0 6px 18px -8px var(--brand)}
.btn--primary:hover{transform:translateY(-2px);box-shadow:0 12px 26px -10px var(--brand)}
.btn--ghost{background:var(--paper);border-color:var(--line2);color:var(--tx)}
.btn--ghost:hover{border-color:var(--brand);color:var(--brand);transform:translateY(-2px)}
.btn--sm{padding:8px 15px;font-size:13.5px;background:var(--paper);border-color:var(--line2);color:var(--tx2)}
.btn--sm:hover{border-color:var(--brand);color:var(--brand)}

/* ---------- generic blocks ---------- */
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:24px 26px;
  margin-bottom:18px;box-shadow:var(--shadow-s)}
.card__t{font-size:19px;font-weight:800;margin-bottom:13px;display:flex;align-items:center;gap:10px}
.card__t .ic{color:var(--brand)}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(272px,1fr));gap:14px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(212px,1fr));gap:12px}
.mini{background:var(--paper2);border:1px solid var(--line);border-radius:var(--rs);padding:15px 17px;
  transition:.22s var(--ease);color:var(--tx);font-family:inherit}
.mini:hover{border-color:var(--line2);transform:translateY(-2px)}
.mini__t{font-weight:700;font-size:14.8px;margin-bottom:5px;display:flex;gap:8px;align-items:center;color:var(--tx)}
.mini__t .ic{color:var(--brand)}
.mini p{font-size:13.8px;color:var(--tx2)}
.mini p b,.mini p strong{color:var(--tx)}

.callout{border-radius:var(--rs);padding:14px 18px;margin:15px 0;font-size:14.6px;
  border:1px solid var(--line);border-left:4px solid var(--brand);background:var(--brand-soft)}
.callout .ic{vertical-align:-.2em}
.callout--warn{border-left-color:var(--amber);background:var(--amber-soft)}
.callout--danger{border-left-color:var(--rose);background:var(--rose-soft)}
.callout--ok{border-left-color:var(--ok);background:var(--ok-soft)}
.callout--tip{border-left-color:var(--violet);background:var(--violet-soft)}

.chips{display:flex;flex-wrap:wrap;gap:6px;margin:11px 0}
.chip{font-size:12.2px;font-weight:600;padding:4px 11px;border-radius:999px;border:1px solid var(--line2);
  background:var(--paper2);color:var(--tx2);display:inline-flex;align-items:center;gap:5px}
.chip .ic{width:.95em;height:.95em;vertical-align:-.16em}
.chip--c1{color:var(--brand);border-color:color-mix(in srgb,var(--brand) 40%,transparent);background:var(--brand-soft)}
.chip--c3{color:var(--teal);border-color:color-mix(in srgb,var(--teal) 40%,transparent);background:var(--teal-soft)}
.chip--c4{color:var(--amber);border-color:color-mix(in srgb,var(--amber) 40%,transparent);background:var(--amber-soft)}
.chip--c5{color:var(--rose);border-color:color-mix(in srgb,var(--rose) 40%,transparent);background:var(--rose-soft)}

/* ---------- lessons ---------- */
.lessonlayout{display:grid;grid-template-columns:255px 1fr;gap:26px;align-items:start}
.lessonnav{position:sticky;top:80px;background:var(--paper);border:1px solid var(--line);
  border-radius:var(--r);padding:12px;max-height:calc(100vh - 106px);overflow:auto;box-shadow:var(--shadow-s)}
.lnav{display:block;width:100%;text-align:left;background:none;border:0;color:var(--tx2);
  font-family:inherit;font-size:14px;font-weight:600;padding:9px 11px;border-radius:9px;cursor:pointer;
  transition:.16s var(--ease);line-height:1.5}
.lnav:hover{background:var(--paper2);color:var(--tx)}
.lnav.is-active{background:var(--brand-soft);color:var(--brand)}
.lnav__n{font-family:var(--mono);font-size:10.5px;color:var(--tx3);display:block;letter-spacing:.4px}
.lnav.is-active .lnav__n{color:var(--brand)}
.lnav__sub{display:block;width:100%;text-align:left;background:none;border:0;color:var(--tx3);
  font-family:inherit;font-size:12.5px;padding:5px 11px 5px 24px;border-radius:7px;cursor:pointer;line-height:1.45}
.lnav__sub:hover{color:var(--brand);background:var(--paper2)}
.lesson{display:none}
.lesson.is-active{display:block;animation:pageIn .35s var(--ease)}
.lesson__hero{border-radius:var(--r);padding:27px 26px;margin-bottom:20px;border:1px solid var(--line);
  background:linear-gradient(130deg,var(--brand-soft),var(--paper) 66%);box-shadow:var(--shadow-s)}
.lesson__k{font-family:var(--mono);font-size:11.5px;color:var(--brand);letter-spacing:1.4px;font-weight:600}
.lesson__t{font-size:clamp(22px,3.4vw,30px);font-weight:800;margin:5px 0 9px;line-height:1.3;letter-spacing:-.5px}
.lesson__d{color:var(--tx2);font-size:15.2px;max-width:760px}

.sec{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:24px 26px;
  margin-bottom:16px;box-shadow:var(--shadow-s)}
.sec__t{font-size:18.5px;font-weight:800;margin-bottom:13px;padding-bottom:10px;
  border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.sec__t .num{font-family:var(--mono);font-size:12px;color:#fff;
  background:linear-gradient(135deg,var(--brand),var(--brand2));padding:3px 9px;border-radius:7px;font-weight:700}
.sec h4{font-size:15.8px;font-weight:700;margin:17px 0 7px;display:flex;gap:8px;align-items:center}
.sec h4::before{content:"";width:4px;height:15px;border-radius:2px;
  background:linear-gradient(var(--brand),var(--brand2));flex:none}
.sec p{margin:8px 0;color:var(--tx2);font-size:15.2px}
.sec ul,.sec ol{margin:8px 0 8px 3px;padding-left:20px}
.sec li{margin:5px 0;color:var(--tx2);font-size:15.2px}
.sec li::marker{color:var(--brand)}
.kbd{font-family:var(--mono);font-size:12.6px;background:var(--paper2);border:1px solid var(--line2);
  border-radius:6px;padding:1px 6px;color:var(--brand);white-space:nowrap}
pre.code{font-family:var(--mono);font-size:12.9px;background:#0f172a;color:#cbd5e1;
  border-radius:var(--rs);padding:14px 16px;overflow-x:auto;margin:10px 0;line-height:1.72;
  border:1px solid #1e293b}
pre.code .c{color:#64748b}
pre.code .k{color:#fbbf24}

/* ---------- command explainer (คำสั่งแบบละเอียด) ---------- */
.cmd{border:1px solid var(--line);border-radius:var(--rs);margin:13px 0;overflow:hidden;background:var(--paper);box-shadow:var(--shadow-s)}
.cmd__line{font-family:var(--mono);font-size:13px;background:#0f172a;color:#e2e8f0;padding:11px 15px;overflow-x:auto;white-space:nowrap;line-height:1.5}
.cmd__line .p{color:#64748b;user-select:none}
.cmd__line .f{color:#fbbf24;font-weight:700}
.cmd__line .t{color:#93c5fd}
.cmd__b{padding:13px 16px}
.cmd__desc{font-size:14.6px;color:var(--tx);margin-bottom:10px;font-weight:600}
.cmd__desc .en{font-family:var(--mono);font-size:13px;color:var(--tx2);font-weight:400}
.cmd__flags{list-style:none;margin:0;padding:0}
.cmd__flags li{display:flex;gap:11px;padding:6px 0;border-top:1px dashed var(--line);font-size:14px;color:var(--tx2);align-items:baseline}
.cmd__flags li:first-child{border-top:0}
.cmd__flags li b{color:var(--tx)}
.cmd__flags code{font-family:var(--mono);font-size:12.3px;background:var(--paper2);border:1px solid var(--line2);
  border-radius:5px;padding:2px 7px;color:var(--brand);white-space:nowrap;flex:none;min-width:80px;text-align:center}
.cmd__out{margin-top:11px;font-size:13.9px;color:var(--tx2);border-left:3px solid var(--brand);
  padding:3px 0 3px 11px;background:var(--brand-soft);border-radius:0 6px 6px 0}
.cmd__out b{color:var(--tx)}
.cmdnote{font-size:13.6px;color:var(--tx3);margin:6px 2px 14px}

/* ---------- slide figures (รูปจากสไลด์) ---------- */
.figs{margin:15px 0}
.figs--grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.fig{margin:0;border:1px solid var(--line);border-radius:var(--rs);overflow:hidden;background:var(--paper);box-shadow:var(--shadow-s)}
.fig__img{display:block;width:100%;height:auto;aspect-ratio:1400/765;background:#fff;border-bottom:1px solid var(--line)}
.fig__cap{display:flex;gap:8px;align-items:flex-start;padding:10px 13px;font-size:13.2px;color:var(--tx2);line-height:1.55}
.fig__cap .ic{width:15px;height:15px;flex:none;margin-top:2px;stroke:var(--brand)}
.fig__cap b{color:var(--tx)}
.figs--grid .fig__cap{font-size:12.6px}

table.t{width:100%;border-collapse:collapse;margin:12px 0;font-size:14.1px;display:block;overflow-x:auto}
table.t th,table.t td{border:1px solid var(--line);padding:8px 11px;text-align:left;vertical-align:top}
table.t th{background:var(--paper2);font-weight:700;white-space:nowrap}
table.t td{color:var(--tx2)}
table.t tr:hover td{background:var(--paper2)}

/* ---------- exams ---------- */
.yearpills{display:flex;gap:9px;justify-content:center;flex-wrap:wrap;margin-bottom:16px}
.ypill{font-family:inherit;font-size:14.5px;font-weight:700;padding:10px 20px;border-radius:13px;
  cursor:pointer;border:1px solid var(--line2);background:var(--paper);color:var(--tx2);
  transition:.22s var(--ease);line-height:1.35;text-align:center}
.ypill:hover{transform:translateY(-2px);border-color:var(--brand);color:var(--brand);box-shadow:var(--shadow-s)}
.ypill.is-active{background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;
  border-color:transparent;box-shadow:0 6px 16px -8px var(--brand)}
.ypill small{display:block;font-size:11px;font-weight:600;opacity:.82}
.examtools{display:flex;gap:8px;justify-content:center;margin-bottom:20px}
.yearblock{display:none}
.yearblock.is-active{display:block;animation:pageIn .3s var(--ease)}
.yearinfo{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:19px 23px;
  margin-bottom:18px;box-shadow:var(--shadow-s)}
.yearinfo h3{font-size:18px;font-weight:800;margin-bottom:5px}
.yearinfo p{font-size:14.2px;color:var(--tx2)}

.q{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);margin-bottom:12px;
  overflow:hidden;transition:border-color .22s var(--ease),box-shadow .22s var(--ease)}
.q:hover{border-color:var(--line2)}
.q.is-open{border-color:color-mix(in srgb,var(--brand) 45%,transparent);box-shadow:var(--shadow-m)}
.q__head{display:flex;align-items:flex-start;gap:13px;padding:17px 21px;cursor:pointer;user-select:none}
.q__no{flex:none;width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-weight:800;
  font-family:var(--mono);font-size:14.5px;background:var(--brand-soft);color:var(--brand);
  transition:.25s var(--ease)}
.q.is-open .q__no{background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff}
.q__ttl{flex:1;min-width:0}
.q__en{font-size:15.2px;font-weight:600;line-height:1.6}
.q__th{font-size:14.2px;color:var(--tx2);margin-top:3px}
.q__meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.q__arrow{flex:none;color:var(--tx3);transition:transform .3s var(--ease),color .2s;margin-top:5px}
.q__arrow .ic{width:20px;height:20px}
.q.is-open .q__arrow{transform:rotate(180deg);color:var(--brand)}
.q__body{max-height:0;overflow:hidden;transition:max-height .55s var(--ease)}
.q__inner{padding:2px 23px 24px}

.shot{border-radius:var(--rs);border:1px solid var(--line2);background:#fff;padding:7px 9px;
  margin:5px 0 6px;cursor:zoom-in;transition:.22s var(--ease);overflow:hidden}
.shot:hover{border-color:var(--brand);transform:translateY(-2px);box-shadow:var(--shadow-s)}
.shot img{width:100%;display:block}
.shot__cap{font-size:11.5px;color:var(--tx3);margin-bottom:14px;font-family:var(--mono)}

/* answer blocks */
.short{background:var(--teal-soft);border:1px solid color-mix(in srgb,var(--teal) 32%,transparent);
  border-radius:var(--rs);padding:14px 17px;margin-bottom:14px}
.short b{color:var(--teal);font-size:12.4px;letter-spacing:.6px;display:block;margin-bottom:3px;
  display:flex;align-items:center;gap:6px}
.short p{font-size:14.8px;color:var(--tx);margin:0}

.fullans{border:1px solid var(--line2);border-radius:var(--rs);overflow:hidden;margin:16px 0}
.fullans__h{background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;padding:9px 16px;
  font-size:13.4px;font-weight:700;letter-spacing:.3px;display:flex;align-items:center;gap:8px}
.fullans__h .ic{width:16px;height:16px}
.fullans__b{padding:16px 19px;background:var(--paper)}
.fullans__b > p{font-size:15.3px;color:var(--tx);margin:10px 0;text-indent:0}
.fullans__b h6{font-size:15px;font-weight:700;margin:15px 0 6px;color:var(--brand);
  display:flex;align-items:center;gap:7px}
.fullans__b h6::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--brand);flex:none}
.fullans__b ul,.fullans__b ol{margin:7px 0 7px 3px;padding-left:21px}
.fullans__b li{font-size:15px;color:var(--tx2);margin:5px 0}
.fullans__b li::marker{color:var(--brand)}

.ansblock h5{font-size:15.6px;font-weight:800;margin:17px 0 7px;display:flex;gap:9px;align-items:center}
.ansblock h5 .ic{color:var(--brand);width:1em;height:1em}
.ansblock h5 .dot{width:8px;height:8px;border-radius:50%;
  background:linear-gradient(var(--brand),var(--brand2));flex:none}
.ansblock p{font-size:15px;color:var(--tx2);margin:7px 0}
.ansblock ul,.ansblock ol{margin:7px 0 7px 2px;padding-left:20px}
.ansblock li{font-size:14.9px;color:var(--tx2);margin:5px 0}
.ansblock li::marker{color:var(--brand)}
.kw{display:flex;flex-wrap:wrap;gap:6px;margin:9px 0}
.kw span{font-family:var(--mono);font-size:12px;padding:3px 9px;border-radius:6px;
  background:var(--amber-soft);color:var(--amber);border:1px solid color-mix(in srgb,var(--amber) 30%,transparent)}

/* ---------- twists ---------- */
.tw{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:20px 23px;
  margin-bottom:14px;box-shadow:var(--shadow-s)}
.tw__h{display:flex;gap:11px;align-items:flex-start;margin-bottom:5px}
.tw__no{flex:none;padding:4px 11px;border-radius:8px;font-family:var(--mono);font-weight:700;
  font-size:12.3px;background:var(--amber-soft);color:var(--amber);
  border:1px solid color-mix(in srgb,var(--amber) 32%,transparent)}
.tw__orig{font-size:14.5px;color:var(--tx2);font-style:italic}
.twi{border-left:3px solid var(--line2);padding:10px 0 10px 15px;margin:12px 0;transition:.2s var(--ease)}
.twi:hover{border-left-color:var(--brand);background:var(--paper2)}
.twi__en{font-size:14.8px;font-weight:600;line-height:1.6}
.twi__th{font-size:14.1px;color:var(--tx2);margin-top:2px}
.twi__how{font-size:14.1px;color:var(--tx2);margin-top:7px;background:var(--paper2);
  border-radius:9px;padding:9px 13px}
.twi__how b{color:var(--teal);font-size:12.3px;letter-spacing:.4px}

/* ---------- cheat ---------- */
.dl{display:grid;grid-template-columns:repeat(auto-fit,minmax(248px,1fr));gap:13px;margin:16px 0 24px}
.dlcard{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:21px;
  transition:.25s var(--ease);display:block;color:var(--tx);box-shadow:var(--shadow-s)}
.dlcard:hover{transform:translateY(-4px);border-color:var(--brand);box-shadow:var(--shadow-m)}
.dlcard__i .ic{width:29px;height:29px;color:var(--brand)}
.dlcard__t{font-weight:800;font-size:16px;margin-top:7px}
.dlcard__d{font-size:13.3px;color:var(--tx3);margin-top:3px}

/* ---------- lucky shirt ---------- */
.lucky{background:linear-gradient(135deg,var(--amber-soft),var(--paper) 62%);
  border-color:color-mix(in srgb,var(--amber) 30%,transparent)}
.lucky .card__t .ic{color:var(--amber)}
.lucky__date{font-size:14.2px;color:var(--tx2);margin:-5px 0 13px;display:flex;align-items:center;gap:7px}
.lucky__date .ic{color:var(--amber)}
.lucky__note{color:var(--tx3);font-size:13px}
.lucky__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(212px,1fr));gap:9px}
.lk{display:flex;align-items:center;gap:11px;background:var(--paper);border:1px solid var(--line);
  border-radius:var(--rs);padding:10px 13px;transition:.22s var(--ease)}
.lk:hover{transform:translateY(-3px);box-shadow:var(--shadow-s);
  border-color:color-mix(in srgb,var(--amber) 45%,transparent)}
.lk div{display:flex;flex-direction:column;line-height:1.45;min-width:0}
.lk b{font-size:13.8px;font-weight:700;display:flex;align-items:center;gap:5px}
.lk span:not(.lk__sw){font-size:12.6px;color:var(--tx3)}
.lk__sw{width:29px;height:29px;border-radius:50%;flex:none;background:var(--sw);
  border:2px solid var(--line2);box-shadow:var(--shadow-s)}
.lk__sw--duo{background:linear-gradient(135deg,var(--sw) 0 50%,var(--sw2) 50% 100%)}
.lk--bad{border-style:dashed;border-color:color-mix(in srgb,var(--rose) 42%,transparent)}
.lk--bad b .ic{color:var(--rose)}
.lucky__img{max-width:540px;margin-top:14px}

/* ---------- misc ---------- */
.totop{position:fixed;right:20px;bottom:20px;width:44px;height:44px;border-radius:50%;
  border:1px solid var(--line2);background:var(--paper);color:var(--tx2);cursor:pointer;opacity:0;
  pointer-events:none;transition:.28s var(--ease);z-index:800;display:grid;place-items:center;
  box-shadow:var(--shadow-m)}
.totop .ic{width:19px;height:19px}
.totop.show{opacity:1;pointer-events:auto}
.totop:hover{border-color:var(--brand);color:var(--brand);transform:translateY(-3px)}
.footer{border-top:1px solid var(--line);padding:32px 0;text-align:center;font-size:13.3px;color:var(--tx3)}
.footer__dim{opacity:.85;margin-top:5px;font-size:12.5px}
.lightbox{position:fixed;inset:0;z-index:1000;background:rgba(8,14,28,.9);display:none;place-items:center;
  padding:28px}
.lightbox.is-open{display:grid;animation:fade .18s var(--ease)}
.lightbox img{max-width:96vw;max-height:90vh;border-radius:9px;background:#fff}
.lightbox__close{position:absolute;top:16px;right:20px;width:40px;height:40px;border-radius:50%;border:0;
  background:rgba(255,255,255,.16);color:#fff;cursor:pointer;display:grid;place-items:center}
.lightbox__close .ic{width:18px;height:18px}

.reveal{opacity:0;transform:translateY(18px)}
.reveal.in{opacity:1;transform:none;
  transition:opacity .55s var(--ease),transform .55s var(--ease)}

@keyframes pageIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}to{opacity:1}}

@media (max-width:960px){
  .lessonlayout{grid-template-columns:1fr}
  .lessonnav{position:static;max-height:none}
}
@media (max-width:820px){
  .tab__t{display:none}
  .tab{padding:9px 11px}
  .tabs{justify-content:flex-end;gap:1px}
  .brand__sub{display:none}
  .sec,.card{padding:19px 17px}
  .q__inner{padding:2px 16px 20px}
  .hero{padding:42px 16px 28px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media print{.topbar,.totop,.examtools,.yearpills,.searchwrap,.footer{display:none!important}
  .q__body{max-height:none!important}.page{display:block!important}}

/* ---------- sequence animation (การส่งข้อมูลแบบเล่นได้) ---------- */
.seq{border:1px solid var(--line);border-radius:var(--r);background:var(--paper);margin:16px 0;
  overflow:hidden;box-shadow:var(--shadow-s)}
.seq__head{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;
  padding:13px 16px;border-bottom:1px solid var(--line);background:var(--paper2)}
.seq__title{font-weight:700;font-size:14.8px;color:var(--tx)}
.seq__ctl{display:flex;gap:7px;flex-wrap:wrap}
.seq__btn{font-family:inherit;font-size:13.2px;font-weight:600;padding:7px 14px;border-radius:9px;
  border:1px solid var(--line2);background:var(--paper);color:var(--tx2);cursor:pointer;
  transition:.18s var(--ease);white-space:nowrap}
.seq__btn:hover{border-color:var(--brand);color:var(--brand);transform:translateY(-1px)}
.seq__btn--go{background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;border-color:transparent}
.seq__btn--go:hover{color:#fff;filter:brightness(1.07)}

.seq__stage{padding:16px 16px 6px;overflow-x:auto}
.seq__lanes,.seq__vars{display:grid;grid-template-columns:repeat(var(--cols),minmax(112px,1fr));gap:10px}
.seq__actor{text-align:center;border:1px solid var(--line2);border-radius:10px;padding:9px 8px;
  background:var(--paper2);min-width:112px}
.seq__actor b{display:block;font-size:14px;color:var(--tx)}
.seq__actor span{display:block;font-size:11px;color:var(--tx3);margin-top:2px;line-height:1.35}

.seq__rows{margin-top:4px}
.seq__row{position:relative;display:grid;grid-template-columns:repeat(var(--cols),minmax(112px,1fr));
  gap:10px;align-items:center;min-height:60px}
.seq__lifelines{position:absolute;inset:0;display:grid;
  grid-template-columns:repeat(var(--cols),minmax(112px,1fr));gap:10px;pointer-events:none}
.seq__lifelines i{justify-self:center;width:0;height:100%;border-left:2px dashed var(--line)}

.seq__wire{position:relative;height:38px;align-self:center;
  width:calc(100% * (var(--span) - 1) / var(--span));
  margin-left:calc(100% / var(--span) / 2)}
.seq__lab{position:absolute;left:50%;top:-2px;transform:translateX(-50%);font-size:12.4px;
  font-weight:600;color:var(--tx3);white-space:nowrap;background:var(--paper);padding:0 7px;
  transition:color .2s var(--ease)}
.seq__line{position:absolute;left:0;right:0;top:24px;height:2px;background:var(--line2);
  transform:scaleX(0);transform-origin:left center}
.seq__wire.is-rev .seq__line{transform-origin:right center}
.seq__line::after{content:"";position:absolute;right:-1px;top:50%;width:0;height:0;
  border-left:8px solid var(--line2);border-top:5px solid transparent;border-bottom:5px solid transparent;
  transform:translateY(-50%)}
.seq__wire.is-rev .seq__line::after{right:auto;left:-1px;border-left:0;border-right:8px solid var(--line2)}
.seq__pk{position:absolute;left:0;top:24px;transform:translate(0,-50%);opacity:0;
  font-family:var(--mono);font-size:11.6px;font-weight:700;padding:3px 10px;border-radius:999px;
  background:linear-gradient(135deg,var(--brand),var(--brand2));color:#fff;white-space:nowrap;
  box-shadow:0 4px 12px -4px var(--brand)}
.seq__verify{justify-self:center;border:1.5px solid var(--line2);border-radius:9px;padding:7px 13px;
  font-family:var(--mono);font-size:12.4px;color:var(--tx3);background:var(--paper);white-space:nowrap;
  transition:.2s var(--ease)}

.seq__row.is-on .seq__line,.seq__row.is-done .seq__line{background:var(--brand);transform:scaleX(1)}
.seq__row.is-on .seq__line::after,.seq__row.is-done .seq__line::after{border-left-color:var(--brand)}
.seq__row.is-on.is-rev .seq__line::after{border-right-color:var(--brand)}
.seq__wire.is-rev .seq__line::after{border-right-color:var(--line2)}
.seq__row.is-on .seq__wire.is-rev .seq__line::after,
.seq__row.is-done .seq__wire.is-rev .seq__line::after{border-right-color:var(--brand)}
.seq__row.is-on .seq__lab,.seq__row.is-done .seq__lab{color:var(--brand)}
.seq__row.is-on .seq__verify,.seq__row.is-done .seq__verify{border-color:var(--ok);color:var(--ok);
  background:var(--ok-soft);font-weight:700}
.seq__row.is-done .seq__line{opacity:.5}
.seq__row.is-done .seq__lab{opacity:.7}

.seq__vars{padding:6px 16px 14px}
.seq__var{border:1px solid var(--line);border-radius:10px;padding:9px 11px;background:var(--paper2);min-width:112px}
.seq__varh{font-size:11.6px;font-weight:700;color:var(--tx3);text-transform:uppercase;letter-spacing:.5px;
  margin-bottom:5px}
.seq__var ul{list-style:none;margin:0;padding:0;min-height:20px}
.seq__var li{display:flex;gap:7px;align-items:baseline;font-size:12.4px;color:var(--tx2);margin:4px 0;
  opacity:0;transform:translateY(5px);transition:.3s var(--ease)}
.seq__var li.is-in{opacity:1;transform:none}
.seq__var li code{font-family:var(--mono);font-size:11.4px;font-weight:700;color:var(--brand);
  background:var(--brand-soft);border-radius:5px;padding:1px 6px;flex:none}

.seq__cap{padding:12px 16px;border-top:1px solid var(--line);background:var(--paper2);
  font-size:14px;color:var(--tx2);line-height:1.7}
.seq__cap b{color:var(--tx)}
.seq__capn{display:inline-block;font-size:11.5px;font-weight:700;color:#fff;background:var(--brand);
  border-radius:999px;padding:2px 10px;margin-right:7px;white-space:nowrap}
.seq__foot{padding:11px 16px;border-top:1px dashed var(--line);font-size:13.2px;color:var(--tx3);line-height:1.65}
.seq__foot b{color:var(--tx2)}
@media (max-width:640px){
  .seq__actor span{display:none}
  .seq__title{font-size:13.6px}
}

/* ---------- Midterm / Final mode ---------- */
.modeswitch{display:flex;gap:2px;flex:none;background:var(--paper2);border:1px solid var(--line);
  border-radius:11px;padding:3px}
.modeswitch__b{display:flex;align-items:center;gap:5px;font-family:inherit;font-size:12.5px;font-weight:700;
  color:var(--tx3);background:none;border:0;padding:6px 9px;border-radius:8px;cursor:pointer;
  white-space:nowrap;transition:.18s var(--ease)}
.modeswitch__b .ic{width:15px;height:15px}
.modeswitch__b:hover{color:var(--tx)}
.modeswitch__b.is-active{background:var(--paper);color:var(--brand);box-shadow:var(--shadow-s)}
html[data-coursemode="final"] .modeswitch__b.is-active{color:var(--amber)}
html[data-coursemode="mid"] .tab[data-mode="final"],
html[data-coursemode="final"] .tab[data-mode="mid"]{display:none}
html[data-coursemode="mid"] .m-final,
html[data-coursemode="final"] .m-mid{display:none}
@media (max-width:820px){ .modeswitch__b span{display:none} .modeswitch__b{padding:7px 9px} }

/* ---------- dictionary ---------- */
.dictsearch{max-width:560px;margin:0 auto 20px;display:flex;align-items:center;gap:12px}
.dictsearch input{flex:1;padding:13px 17px;font-size:15.5px;font-family:inherit;border-radius:13px;
  border:1px solid var(--line2);background:var(--paper);color:var(--tx);outline:none;box-shadow:var(--shadow-s)}
.dictsearch input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-soft)}
.dictsearch__n{font-size:12.5px;color:var(--tx3);font-weight:600;white-space:nowrap}
.dictcat{margin-bottom:22px}
.dictcat__h{font-size:16px;font-weight:800;margin-bottom:11px;display:flex;align-items:center;gap:9px;
  padding-bottom:8px;border-bottom:2px solid var(--line)}
.dictcat__h span{font-size:12px;font-weight:700;color:var(--brand);background:var(--brand-soft);
  border-radius:999px;padding:1px 9px}
.dictgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}
.dterm{background:var(--paper);border:1px solid var(--line);border-radius:var(--rs);padding:12px 15px;
  transition:.16s var(--ease)}
.dterm:hover{border-color:var(--line2);transform:translateY(-1px);box-shadow:var(--shadow-s)}
.dterm__t{font-weight:700;font-size:14.5px;color:var(--brand);margin-bottom:3px;font-family:var(--mono)}
.dterm__d{font-size:13.6px;color:var(--tx2);line-height:1.6}

/* ---------- final download cards (reuse .dl/.dlcard) ---------- */
.dlhead{font-size:16px;font-weight:800;margin:6px 0 4px;display:flex;align-items:center;gap:9px}
.dlhead .ic{color:var(--brand)}

/* ---------- lesson nav group headers + badges ---------- */
.lnav__group{font-size:11px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;
  color:var(--tx3);padding:12px 11px 5px;margin-top:6px;border-top:1px solid var(--line)}
.lnav:first-child + .lnav__group,.lnav__group:first-child{border-top:0;margin-top:0}
.lnav__badge{display:inline-block;font-size:10px;font-weight:700;color:var(--amber);
  background:var(--amber-soft);border:1px solid color-mix(in srgb,var(--amber) 32%,transparent);
  border-radius:6px;padding:1px 6px;margin-left:7px;vertical-align:middle;letter-spacing:.3px}
.lesson__hero--note{background:linear-gradient(130deg,var(--amber-soft),var(--paper) 66%);
  border-color:color-mix(in srgb,var(--amber) 30%,transparent)}
.lesson__hero--note .lesson__k{color:var(--amber)}
.lesson__flag{display:inline-block;font-size:11px;font-weight:700;color:var(--amber);
  background:var(--paper);border:1px solid color-mix(in srgb,var(--amber) 36%,transparent);
  border-radius:999px;padding:2px 10px;margin-left:8px;letter-spacing:.2px;vertical-align:middle}

/* ---------- buffer overflow widget ---------- */
.bof{border:1px solid var(--line);border-radius:var(--r);background:var(--paper);margin:16px 0;
  overflow:hidden;box-shadow:var(--shadow-s)}
.bof__stage{position:relative;padding:16px 16px 6px}
.bof__row{display:grid;grid-template-columns:132px 1fr 92px;gap:12px;align-items:center;margin:6px 0}
.bof__tag{font-family:var(--mono);font-size:12.3px;color:var(--tx2);text-align:right;line-height:1.3}
.bof__tag span{display:block;font-size:10.5px;color:var(--tx3)}
.bof__cell{height:40px;border:1.5px solid var(--line2);border-radius:9px;background:var(--paper2);
  display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:13px;
  font-weight:700;color:var(--tx3);transition:.3s var(--ease);position:relative}
.bof__row.is-buf .bof__cell{border-style:dashed}
.bof__cell.is-set{color:#fff}
.bof__cell.ok{background:var(--teal);border-color:var(--teal);color:#fff}
.bof__cell.shell{background:linear-gradient(135deg,var(--brand),var(--brand2));border-color:transparent;color:#fff}
.bof__cell.bad{background:var(--rose);border-color:var(--rose);color:#fff;animation:bofpop .35s var(--ease)}
.bof__addr{font-family:var(--mono);font-size:10.5px;color:var(--tx3);line-height:1.3}
@keyframes bofpop{0%{transform:scale(.9)}60%{transform:scale(1.06)}100%{transform:scale(1)}}
.bof--jump .bof__stage::after{content:"return → กระโดดเข้า buffer → รัน shellcode";
  position:absolute;top:9px;right:14px;font-size:11.5px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,var(--brand),var(--brand2));border-radius:999px;padding:4px 12px;
  box-shadow:var(--shadow-m);animation:bofpop .4s var(--ease)}
.bof--jump .bof__cell[data-id="eip"]{box-shadow:0 0 0 3px color-mix(in srgb,var(--rose) 40%,transparent)}
.bof--jump .bof__row.is-buf:last-of-type .bof__cell{box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 45%,transparent)}
@media (max-width:560px){ .bof--jump .bof__stage::after{position:static;display:inline-block;margin:0 0 8px 104px} }
@media (max-width:560px){
  .bof__row{grid-template-columns:104px 1fr 60px;gap:8px}
  .bof__tag{font-size:11px}.bof__addr{font-size:9.5px}
}

/* ---------- RSA mini widget ---------- */
.rsa{border:1px solid var(--line);border-radius:var(--r);background:var(--paper);margin:16px 0;
  padding:16px;box-shadow:var(--shadow-s)}
.rsa__in{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}
.rsa__in label{display:flex;flex-direction:column;gap:4px;font-size:12.5px;font-weight:600;color:var(--tx2)}
.rsa__in input{width:120px;padding:8px 11px;font-family:var(--mono);font-size:14px;border-radius:9px;
  border:1px solid var(--line2);background:var(--paper2);color:var(--tx);outline:none}
.rsa__in input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.rsa__go{align-self:flex-end}
.rsa__out{margin-top:14px}
.rsa__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:9px;margin-bottom:12px}
.rsa__grid > div{background:var(--paper2);border:1px solid var(--line);border-radius:var(--rs);padding:10px 13px}
.rsa__grid span{display:block;font-size:11.5px;color:var(--tx3)}
.rsa__grid b{font-family:var(--mono);font-size:16px;color:var(--brand)}
.rsa__keys b{font-size:13px;color:var(--tx)}
.rsa__flow{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.rsa__step{border:1px solid var(--line2);border-radius:var(--rs);padding:11px 14px;background:var(--brand-soft)}
.rsa__step span{display:block;font-size:11.5px;font-weight:700;color:var(--brand);margin-bottom:3px}
.rsa__step code{font-family:var(--mono);font-size:13.5px;color:var(--tx)}
.rsa__step code b{color:var(--brand);font-size:15px}
.rsa__ok{margin-top:11px;font-size:13.5px;color:var(--ok);font-weight:600;display:flex;align-items:center;gap:7px}
.rsa__ok .ic{color:var(--ok)}
.rsa__err{font-size:13.5px;color:var(--rose);font-weight:600;display:flex;align-items:center;gap:7px;
  background:var(--rose-soft);border:1px solid color-mix(in srgb,var(--rose) 30%,transparent);
  border-radius:var(--rs);padding:11px 14px}
.rsa__err .ic{color:var(--rose);flex:none}
