:root{--navy:#07172d;--navy2:#0b2242;--navy3:#123461;--gold:#c18c25;--gold2:#d6a33b;--bg:#f6f8fb;--card:#fff;--text:#162033;--muted:#667085;--line:#e7eaf0;--success:#147a55;--danger:#b42318;--warn:#b76e00;--radius:16px;--shadow:0 8px 30px rgba(7,23,45,.07)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:"Be Vietnam Pro",Inter,system-ui,-apple-system,sans-serif;color:var(--text);background:var(--bg);line-height:1.55}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.brand{display:flex;align-items:center;gap:12px}.brand-mark{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--gold);color:#fff;font-weight:800}.brand b{display:block;letter-spacing:.05em}.brand small{display:block;color:#8a94a6;font-size:11px;letter-spacing:.18em}.public-header{height:76px;display:flex;align-items:center;gap:30px;padding:0 max(5vw,24px);background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.public-header nav{display:flex;gap:24px;margin-left:auto}.public-header nav a{font-size:14px;color:#344054}.header-actions{display:flex;align-items:center;gap:10px}.btn{border:0;border-radius:10px;padding:11px 16px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px}.btn.primary{background:var(--navy2);color:#fff}.btn.gold{background:var(--gold);color:#fff}.btn.ghost{background:#fff;border:1px solid var(--line)}.btn.danger{background:#fff1f0;color:var(--danger);border:1px solid #ffd7d2}.btn.sm{padding:7px 10px;font-size:13px}.hero{background:linear-gradient(135deg,var(--navy) 0%,var(--navy2) 70%,#153c6e 100%);color:#fff;padding:88px max(6vw,24px);display:grid;grid-template-columns:1.05fr .95fr;gap:60px;align-items:center}.hero h1{font-size:clamp(40px,5vw,72px);line-height:1.02;margin:12px 0 24px;letter-spacing:-.04em}.hero p{font-size:18px;color:#d7deea;max-width:680px}.eyebrow{font-size:12px;font-weight:800;letter-spacing:.16em;color:var(--gold2)}.hero-card{background:#fff;color:var(--text);border-radius:24px;padding:24px;box-shadow:0 35px 90px rgba(0,0,0,.28)}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.mini-kpi{padding:16px;border:1px solid var(--line);border-radius:14px}.mini-kpi b{font-size:24px;display:block}.section{padding:72px max(6vw,24px)}.section.alt{background:#eef3f8}.section-title{max-width:760px;margin-bottom:32px}.section-title h2{font-size:36px;line-height:1.18;margin:8px 0}.grid{display:grid;gap:20px}.grid.three{grid-template-columns:repeat(3,1fr)}.grid.two{grid-template-columns:repeat(2,1fr)}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:0 2px 10px rgba(7,23,45,.02)}.card.hover{transition:.2s}.card.hover:hover{transform:translateY(-3px);box-shadow:var(--shadow)}.course-icon{width:52px;height:52px;border-radius:14px;background:#edf3fa;color:var(--navy3);display:grid;place-items:center;font-weight:900;margin-bottom:18px}.muted{color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip,.badge{display:inline-flex;align-items:center;border-radius:999px;padding:5px 9px;font-size:12px;font-weight:700;background:#eef2f6;color:#475467}.badge.success{background:#e9f7f1;color:var(--success)}.badge.warn{background:#fff4df;color:var(--warn)}.badge.danger{background:#fff0ee;color:var(--danger)}.steps{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.step{padding:18px;border-left:3px solid var(--gold);background:#fff;border-radius:10px}.step b{display:block;margin-bottom:6px}.app-shell{background:var(--bg)}.sidebar{position:fixed;inset:0 auto 0 0;width:250px;background:var(--navy);color:#fff;padding:22px 14px;display:flex;flex-direction:column;z-index:40}.sidebar .brand{padding:0 10px 22px;border-bottom:1px solid rgba(255,255,255,.1)}.sidebar .brand small{color:#95a4ba}.sidebar nav{display:flex;flex-direction:column;gap:4px;margin-top:18px;overflow:auto}.sidebar nav a{padding:10px 12px;border-radius:9px;color:#c9d2df;font-size:14px}.sidebar nav a:hover,.sidebar nav a.active{background:rgba(255,255,255,.08);color:#fff}.sidebar-user{margin-top:auto;display:flex;align-items:center;gap:10px;padding:14px 8px 0;border-top:1px solid rgba(255,255,255,.1)}.sidebar-user small{display:block;color:#91a0b5}.grow{flex:1;min-width:0}.avatar{width:38px;height:38px;border-radius:50%;background:var(--gold);color:#fff;display:grid;place-items:center;font-weight:800}.icon-btn{border:1px solid var(--line);background:#fff;border-radius:9px;width:38px;height:38px;display:grid;place-items:center;cursor:pointer}.sidebar .icon-btn{background:transparent;border-color:rgba(255,255,255,.15);color:#fff}.main-content{margin-left:250px;padding:30px 34px 60px;min-height:100vh}.app-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.app-header h1{font-size:28px;margin:3px 0}.dashboard-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.kpi-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px}.kpi-card strong{font-size:28px;display:block;margin-top:4px}.split{display:grid;grid-template-columns:1.35fr .65fr;gap:20px;margin-top:20px}.stack{display:flex;flex-direction:column;gap:16px}.progress{height:9px;background:#e9edf2;border-radius:999px;overflow:hidden}.progress span{display:block;height:100%;background:var(--navy3);border-radius:inherit}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:14px}table{width:100%;border-collapse:collapse;min-width:720px}th,td{padding:13px 14px;text-align:left;border-bottom:1px solid var(--line);font-size:14px}th{background:#f8fafc;color:#475467;font-weight:700}.form-card{max-width:720px}.field{display:flex;flex-direction:column;gap:7px;margin-bottom:14px}.field label{font-size:13px;font-weight:700;color:#344054}.field input,.field select,.field textarea{border:1px solid #d8dee8;background:#fff;border-radius:10px;padding:10px 12px;outline:none}.field input:focus,.field select:focus,.field textarea:focus{border-color:#6c84a7;box-shadow:0 0 0 3px rgba(18,52,97,.08)}.field textarea{min-height:100px;resize:vertical}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.notice{padding:12px 14px;border-radius:10px;margin-bottom:16px}.notice.error{background:#fff0ee;color:var(--danger);border:1px solid #ffd3cf}.notice.success{background:#eaf8f2;color:var(--success);border:1px solid #c6ecdc}.empty{padding:36px;text-align:center;color:var(--muted)}.lesson-layout{display:grid;grid-template-columns:280px 1fr;gap:20px}.lesson-nav{position:sticky;top:20px;align-self:start}.lesson-nav a{display:block;padding:9px 10px;border-radius:8px;font-size:14px}.lesson-nav a:hover{background:#f1f4f8}.video-box{aspect-ratio:16/9;background:linear-gradient(135deg,#0a1c34,#173b67);border-radius:16px;color:#fff;display:grid;place-items:center;margin-bottom:20px}.question{padding:18px;border:1px solid var(--line);border-radius:12px;background:#fff;margin-bottom:14px}.options{display:grid;gap:8px;margin-top:12px}.option{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid var(--line);border-radius:9px}.exam-shell{display:grid;grid-template-columns:1fr 280px;gap:20px}.exam-side{position:sticky;top:20px;align-self:start}.timer{font-variant-numeric:tabular-nums;font-size:28px;font-weight:900;color:var(--navy2)}.palette{display:grid;grid-template-columns:repeat(6,1fr);gap:7px}.palette button{aspect-ratio:1;border:1px solid var(--line);background:#fff;border-radius:7px;cursor:pointer}.palette button.answered{background:#e8f5ef;border-color:#b9e1d0}.palette button.flagged{box-shadow:inset 0 0 0 2px var(--gold)}.bar-chart{display:grid;gap:12px}.bar-row{display:grid;grid-template-columns:130px 1fr 55px;align-items:center;gap:10px}.bar{height:10px;background:#e8edf3;border-radius:999px;overflow:hidden}.bar span{display:block;height:100%;background:var(--navy3)}.auth-page{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.auth-art{background:linear-gradient(145deg,var(--navy),var(--navy3));color:#fff;padding:70px;display:flex;flex-direction:column;justify-content:space-between}.auth-art h1{font-size:48px;line-height:1.1}.auth-form{display:grid;place-items:center;padding:40px}.auth-form .card{width:min(460px,100%);padding:34px}.mobile-topbar{display:none}.mobile-nav-toggle{display:none}.danger-zone{border-color:#ffd7d2}.footer{padding:36px max(6vw,24px);background:var(--navy);color:#c9d2df}.skeleton{background:linear-gradient(90deg,#edf0f4,#f7f8fa,#edf0f4);background-size:200% 100%;animation:sk 1.2s infinite}@keyframes sk{to{background-position:-200% 0}}@media(max-width:1050px){.dashboard-grid{grid-template-columns:repeat(2,1fr)}.grid.three{grid-template-columns:1fr 1fr}.steps{grid-template-columns:repeat(3,1fr)}.hero{grid-template-columns:1fr}.public-header nav{display:none}.mobile-nav-toggle{display:grid}.split,.lesson-layout,.exam-shell{grid-template-columns:1fr}.lesson-nav,.exam-side{position:static}}@media(max-width:760px){.sidebar{transform:translateX(-100%);transition:.2s}.sidebar.open{transform:translateX(0)}.mobile-topbar{display:flex;position:sticky;top:0;z-index:30;background:#fff;border-bottom:1px solid var(--line);height:60px;padding:0 16px;align-items:center;justify-content:space-between}.main-content{margin-left:0;padding:20px 16px 50px}.app-header{align-items:flex-start}.app-header h1{font-size:23px}.dashboard-grid,.grid.three,.grid.two,.form-grid{grid-template-columns:1fr}.steps{grid-template-columns:1fr 1fr}.public-header{padding:0 16px}.public-header .header-actions{display:none}.hero,.section{padding-left:18px;padding-right:18px}.hero{padding-top:58px}.hero h1{font-size:42px}.auth-page{grid-template-columns:1fr}.auth-art{display:none}.auth-form{padding:24px 16px}.kpi-grid{grid-template-columns:1fr 1fr}.bar-row{grid-template-columns:95px 1fr 45px}.palette{grid-template-columns:repeat(8,1fr)}}
.confirm-dialog{border:0;border-radius:18px;padding:0;width:min(460px,calc(100vw - 32px));box-shadow:0 28px 80px rgba(7,23,45,.24);background:#fff}.confirm-dialog::backdrop{background:rgba(7,23,45,.52);backdrop-filter:blur(3px)}.confirm-card{padding:24px;display:grid;grid-template-columns:44px 1fr;gap:16px}.confirm-card h3{margin:4px 0 7px}.confirm-card p{margin:0}.confirm-icon{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:#fff1f0;color:var(--danger);font-weight:900;font-size:20px}.confirm-actions{grid-column:1/-1;display:flex;justify-content:flex-end;gap:10px;margin-top:6px}@media(max-width:1050px){.public-header nav.open{display:flex;position:absolute;top:76px;left:16px;right:16px;flex-direction:column;gap:4px;padding:14px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 50px rgba(7,23,45,.12)}.public-header nav.open a{padding:10px 12px;border-radius:8px}.public-header nav.open a:hover{background:var(--bg)}}.notification-bell{position:relative}.notification-count{position:absolute;top:-5px;right:-5px;min-width:18px;height:18px;padding:0 4px;border-radius:999px;background:var(--danger);color:#fff;font-size:10px;line-height:18px;text-align:center;font-weight:800;border:2px solid #fff}
/* Learning calendar views */
.calendar-weekdays,.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}.calendar-weekdays{padding:0 6px 8px;text-align:center;color:var(--muted)}.calendar-day{min-height:120px;border:1px solid var(--line);border-radius:12px;padding:9px;background:var(--surface)}.calendar-day.muted-day{opacity:.45}.calendar-event{display:flex;flex-direction:column;gap:2px;margin-top:8px;padding:7px 8px;border-radius:9px;background:var(--navy-50,#f4f7fb);font-size:12px}.calendar-week{display:grid;grid-template-columns:repeat(7,minmax(170px,1fr));gap:10px;overflow-x:auto}.chip.active{background:var(--navy,#0b2242);color:#fff;border-color:var(--navy,#0b2242)}
@media(max-width:800px){.calendar-month{overflow-x:auto}.calendar-weekdays,.calendar-grid{min-width:760px}.calendar-day{min-height:100px}}

/* Universal data-table controls */
.table-tools{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 0 10px}.table-tools input[type="search"]{width:min(320px,100%);border:1px solid var(--line);border-radius:10px;padding:9px 12px;background:var(--surface);color:inherit}.table-pager{display:flex;align-items:center;gap:8px}.sortable{cursor:pointer;user-select:none}.sortable::after{content:" ↕";opacity:.3;font-size:11px}.sortable[data-sort="asc"]::after{content:" ↑";opacity:.8}.sortable[data-sort="desc"]::after{content:" ↓";opacity:.8}@media(max-width:640px){.table-tools{align-items:stretch;flex-direction:column}.table-tools input[type="search"]{width:100%}.table-pager{justify-content:flex-end}}
.server-pager{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px}.server-pager>div{display:flex;gap:8px}@media(max-width:600px){.server-pager{align-items:flex-start;flex-direction:column}}
.metric-big{font-size:42px;font-weight:800;letter-spacing:-.03em;margin:14px 0}

/* v1.0.3 polish and consistency fixes */
.btn.ghost{color:var(--text)}
.hero .btn.ghost{color:var(--text)}
.compact-empty{padding:20px 8px;display:flex;flex-direction:column;gap:5px}
.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:8px;color:var(--muted);font-size:13px;margin:-6px 0 16px}
.breadcrumb a{color:var(--navy3);font-weight:700}
.course-progress-head{display:flex;justify-content:space-between;align-items:center;gap:24px}.course-progress-head h2{margin:8px 0 3px}.course-progress-head p{margin:0}.course-progress-bar{min-width:240px;flex:1;max-width:520px}
.lesson-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}.lesson-row:last-child{border-bottom:0}.lesson-row:hover span:first-child{color:var(--navy3)}
.lesson-nav-link{display:block;padding:7px 10px!important;border-left:3px solid transparent}.lesson-nav-link.active{background:#eef3f8!important;border-left-color:var(--gold);color:var(--navy2);font-weight:800!important}
.lesson-meta{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px}.lesson-meta h2{margin:4px 0 0}.video-box.empty-video{aspect-ratio:auto;min-height:170px;padding:28px;margin-bottom:18px;background:linear-gradient(135deg,#0a1c34,#173b67)}.video-box.empty-video small{display:block;color:#c7d2df;margin-top:6px}.video-muted{color:#d0dae7}
.lesson-actions{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;margin-top:24px}.lesson-actions>a:last-child{justify-self:end}.btn.completed{background:#e9f7f1;color:var(--success);border:1px solid #c6ecdc;cursor:default}
.student-kpis{grid-template-columns:repeat(4,1fr)}
@media(max-width:1050px){.course-progress-head,.lesson-meta{align-items:flex-start;flex-direction:column}.course-progress-bar{width:100%;max-width:none}.student-kpis{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.lesson-actions{grid-template-columns:1fr}.lesson-actions>*{width:100%}.lesson-actions>a:last-child{justify-self:stretch}.student-kpis{grid-template-columns:1fr}}
