:root{
  --bs-primary:#0b3a63;
  --bs-primary-rgb:11,58,99;
  --brand:#0b3a63;
  --brand-2:#145a8d;
  --brand-soft:#eaf2f8;
  --accent:#d69b2d;
  --ink:#132238;
  --muted:#66758a;
  --surface:#ffffff;
  --line:#dfe6ee;
  --bg:#f4f7fa;
  --success:#198754;
  --danger:#b42318;
  --warning:#b7791f;
  --radius:1rem;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:"Noto Sans Thai","Leelawadee UI",Tahoma,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink);line-height:1.7;font-size:16px}
a{color:var(--brand);text-decoration:none}a:hover{color:var(--brand-2)}
.wrap{width:min(1200px,calc(100% - 32px));margin-inline:auto;padding:28px 0}

/* Public navigation */
.topbar{background:rgba(255,255,255,.96);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1030;backdrop-filter:blur(14px);box-shadow:0 2px 12px rgba(15,36,61,.04)}
.nav{display:flex;align-items:center;justify-content:space-between;gap:18px;padding-top:14px;padding-bottom:14px}
.brand{display:flex;align-items:center;gap:12px;font-weight:800;font-size:1.08rem;color:var(--brand);letter-spacing:.1px}
.brand::before{content:"⚡";width:40px;height:40px;display:grid;place-items:center;border-radius:12px;background:var(--brand);color:white;box-shadow:0 5px 16px rgba(11,58,99,.18)}
.navlinks{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* Hero */
.hero{position:relative;overflow:hidden;padding:82px 0;background:linear-gradient(125deg,#082f52 0%,#0b4777 54%,#116b9e 100%);color:#fff;border-bottom:5px solid rgba(214,155,45,.75)}
.hero::before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:42px 42px;mask-image:linear-gradient(to right,black,transparent 85%)}
.hero::after{content:"";position:absolute;width:450px;height:450px;border-radius:50%;right:-120px;top:-240px;background:rgba(255,255,255,.08);box-shadow:-80px 280px 0 30px rgba(255,255,255,.03)}
.hero .wrap{position:relative;z-index:1}.hero h1{font-size:clamp(2.25rem,5vw,4.5rem);font-weight:800;line-height:1.12;margin:.3rem 0 1rem;max-width:920px;letter-spacing:-.5px}.hero p{font-size:1.08rem;max-width:820px;color:#dfeaf5;margin:0}.hero .badge{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.24);color:#fff;text-transform:uppercase;letter-spacing:.12em;font-weight:700}

/* Cards / grids */
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:22px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:24px;box-shadow:0 8px 28px rgba(19,34,56,.055);transition:box-shadow .2s ease,transform .2s ease,border-color .2s ease}
.card:hover{box-shadow:0 14px 36px rgba(19,34,56,.09);border-color:#cad6e2}
.card h1,.card h2,.card h3{color:var(--ink);font-weight:750}.card h3{font-size:1.25rem;margin:.25rem 0 .8rem}
.course-card{height:100%;display:flex;flex-direction:column}.course-card .course-actions{margin-top:auto;padding-top:16px}
.muted{color:var(--muted)}

/* Buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.62rem 1rem;border-radius:.7rem;border:1px solid #cbd6e0;background:#fff;color:var(--ink);cursor:pointer;font-weight:700;line-height:1.35;transition:.18s ease;box-shadow:none}
.btn:hover{transform:translateY(-1px);border-color:#aebdcb;background:#f8fafc;color:var(--brand)}
.btn.primary,.btn-primary{background:var(--brand)!important;color:#fff!important;border-color:var(--brand)!important}.btn.primary:hover,.btn-primary:hover{background:#082f52!important;border-color:#082f52!important;color:#fff!important}
.btn.success{background:var(--success);color:#fff;border-color:var(--success)}.btn.danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn.small{padding:.42rem .7rem;font-size:.875rem}

/* Badges, alerts, progress */
.badge{display:inline-flex;align-items:center;padding:.38rem .62rem;border-radius:999px;font-size:.78rem;background:#edf3f8;color:#24425d;font-weight:700}.badge.ok{background:#e7f5ed;color:#146c43}.badge.warn{background:#fff4dc;color:#8b5e12}.badge.lock{background:#eef0f3;color:#6b7280}
.alert{padding:14px 16px;border-radius:.8rem;margin:14px 0;border:1px solid transparent}.alert.error{background:#fff0f0;color:#8a1f17;border-color:#ffd3d0}.alert.success{background:#eaf7ef;color:#146c43;border-color:#cbead8}.alert.info{background:#edf5fc;color:#174e7b;border-color:#d4e7f6}.alert.warn{background:#fff7e8;color:#805510;border-color:#f4dfb6}
.progress{height:10px;background:#e8edf2;border-radius:999px;overflow:hidden}.progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--brand),#2383bb);border-radius:inherit}.progress.big{height:14px}

/* Forms */
.stack{display:grid;gap:16px}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px}.span-2{grid-column:1/-1}
label{font-weight:700;display:grid;gap:7px;color:#26384e}
input,select,textarea{width:100%;padding:.7rem .85rem;border:1px solid #cbd6e1;border-radius:.65rem;font:inherit;background:#fff;color:var(--ink);outline:none;transition:.15s ease}
input:focus,select:focus,textarea:focus{border-color:#4f86ad;box-shadow:0 0 0 .22rem rgba(20,90,141,.12)}textarea{min-height:110px}

/* Auth */
.auth-bg{min-height:100vh;display:grid;place-items:center;padding:38px 18px;background:radial-gradient(circle at 82% 15%,#d9eaf6 0,transparent 34%),linear-gradient(135deg,#edf3f7,#f8fafc)}
.auth-card{width:min(540px,100%);background:#fff;padding:36px;border-radius:1.25rem;border:1px solid var(--line);box-shadow:0 22px 60px rgba(15,36,61,.12);position:relative;overflow:hidden}.auth-card::before{content:"";position:absolute;left:0;top:0;width:100%;height:6px;background:linear-gradient(90deg,var(--brand),var(--accent))}.auth-card h1{font-weight:800;color:var(--brand);margin-bottom:1.4rem}.auth-card .auth-mark{width:58px;height:58px;border-radius:16px;background:var(--brand);color:#fff;display:grid;place-items:center;font-size:1.45rem;margin-bottom:18px}

/* Tables */
.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 5px 20px rgba(19,34,56,.035)}table{width:100%;border-collapse:collapse;margin:0}th,td{padding:13px 14px;border-bottom:1px solid #e9edf2;text-align:left;vertical-align:middle}th{background:#f0f5f8;color:#29445d;font-size:.9rem;font-weight:800;white-space:nowrap}tbody tr:hover{background:#f9fbfc}

/* Course and unit */
.unit-list{display:grid;gap:13px}.unit{display:flex;gap:16px;align-items:center;background:#fff;padding:17px;border:1px solid var(--line);border-radius:.9rem;box-shadow:0 3px 12px rgba(19,34,56,.025)}.unit .num{flex:0 0 46px;width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand);font-weight:800}.unit-metrics{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}.unit-metrics span{font-size:.82rem;background:#f0f4f7;padding:4px 8px;border-radius:8px;color:#4b5d70}.announcement{border-left:5px solid var(--brand)}.announcement-meta{font-size:.85rem;color:var(--muted);margin-bottom:7px}

/* Video */
.video-box{background:#07121f;border-radius:1rem;padding:18px;color:#fff;box-shadow:0 18px 45px rgba(5,17,29,.18)}.video-box video{width:100%;max-height:68vh;background:#000;border-radius:.7rem}.video-controls{display:flex;align-items:center;gap:12px;margin-top:14px}.video-progress{height:8px;flex:1;background:#263a4e;border-radius:99px;overflow:hidden}.video-progress span{display:block;height:100%;background:#fff}

/* Admin */
.admin-shell{display:grid;grid-template-columns:270px minmax(0,1fr);min-height:100vh;background:#f3f6f9}.sidebar{background:linear-gradient(180deg,#092f51,#0d416d);color:#fff;padding:26px 18px;position:sticky;top:0;height:100vh;overflow-y:auto;box-shadow:5px 0 22px rgba(8,36,61,.08)}.sidebar h2{font-size:1.2rem;font-weight:800;padding:0 10px 12px;margin:0;border-bottom:1px solid rgba(255,255,255,.13)}.sidebar p{margin:12px 10px;color:#c9dbea;font-size:.9rem}.sidebar a{display:flex;align-items:center;gap:9px;padding:10px 12px;margin:3px 0;border-radius:.65rem;color:#eaf3fb;font-weight:600}.sidebar a:hover{background:rgba(255,255,255,.11);color:#fff}.sidebar .nav-separator{height:1px;background:rgba(255,255,255,.13);margin:10px 8px}.content{padding:32px;min-width:0}.content>h1{font-weight:800;color:#1b3550;margin:0 0 22px;font-size:1.8rem}.content>h1::after{content:"";display:block;width:55px;height:4px;background:var(--accent);border-radius:99px;margin-top:9px}
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:18px;margin-bottom:24px}.stat-card{background:#fff;border:1px solid var(--line);border-radius:1rem;padding:20px;box-shadow:0 7px 22px rgba(19,34,56,.04)}.stat-card .value{font-size:2rem;font-weight:800;color:var(--brand);line-height:1.2}.stat-card .label{color:var(--muted);font-size:.9rem;margin-top:4px}

/* Certificate */
.certificate{max-width:1100px;min-height:720px;margin:30px auto;background:#fff;border:10px double #173f67;padding:62px;text-align:center;box-shadow:0 10px 40px rgba(15,36,61,.08)}.certificate h1{font-size:3.25rem;margin:.2em;font-weight:800;color:#173f67}.certificate .name{font-size:2.25rem;font-weight:800;margin:26px;color:#1d2c3d}.footer-space{height:55px}

/* UI polish */
.section-title{font-weight:800;color:#1b3550;margin:34px 0 18px}.eyebrow{font-size:.78rem;text-transform:uppercase;letter-spacing:.12em;color:var(--brand);font-weight:800}.page-header{background:#fff;border:1px solid var(--line);border-radius:1rem;padding:22px;margin-bottom:22px}.empty-state{text-align:center;padding:40px 20px;color:var(--muted)}

@media(max-width:900px){.admin-shell{grid-template-columns:1fr}.sidebar{position:static;height:auto}.content{padding:20px}.hero{padding:58px 0}.nav{align-items:flex-start}.wrap{width:min(100% - 24px,1200px)}}
@media(max-width:580px){.auth-card{padding:26px 20px}.nav{flex-direction:column}.navlinks{width:100%}.navlinks .btn{flex:1}.hero h1{font-size:2.25rem}.card{padding:19px}.content{padding:16px}}
@media print{.no-print{display:none!important}body{background:#fff}.certificate{margin:0;border-width:8px;box-shadow:none;min-height:700px}}

/* V7 Ranking / security / anti-spam */
.ranking-hero{display:flex;align-items:center;justify-content:space-between;gap:24px;background:linear-gradient(120deg,#092f51,#145a8d);color:#fff;border-radius:1.2rem;padding:28px 30px;margin-bottom:26px;box-shadow:0 16px 42px rgba(8,36,61,.14)}
.ranking-hero h1{font-weight:800;margin:.25rem 0 .35rem}.ranking-hero p{margin:0;color:#d9e8f4}.ranking-hero>.bi{font-size:4.5rem;color:#f1c75b;opacity:.95}
.podium-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;align-items:end}.podium-card{background:#fff;border:1px solid var(--line);border-radius:1rem;padding:22px;text-align:center;box-shadow:0 8px 26px rgba(19,34,56,.06);position:relative}.podium-card.rank-1{padding-top:34px;border-top:5px solid #d6a72d}.podium-card.rank-2{border-top:5px solid #9aa8b7}.podium-card.rank-3{border-top:5px solid #b7784a}.podium-card.me{box-shadow:0 0 0 3px rgba(20,90,141,.18),0 12px 30px rgba(19,34,56,.08)}.rank-medal{font-size:2.1rem}.rank-number{font-weight:800;color:var(--brand);margin-top:4px}.rank-progress{font-size:2rem;font-weight:800;color:var(--brand);margin:10px 0 6px}
.security-list{margin:0;padding-left:1.2rem}.security-list li{margin:.45rem 0}
.hp-field{position:absolute!important;left:-9999px!important;top:-9999px!important;width:1px!important;height:1px!important;overflow:hidden!important}
code{color:#8a2d52}
@media(max-width:760px){.podium-grid{grid-template-columns:1fr}.ranking-hero{align-items:flex-start}.ranking-hero>.bi{font-size:3rem}}
