:root{
  /* Sidebar */
  --sidebar:#18263D;
  --sidebar-hover:#223555;
  --active-menu:#2E7D32;
  /* Logo colors */
  --logo-green:#2E7D32;
  --logo-gold:#C9A227;
  /* Legacy aliases (dipakai di tempat lain) */
  --navy-900:#18263D;
  --navy-800:#1B2C45;
  --navy-700:#18263D;
  --navy-500:#223555;
  --gold-500:#C9A227;
  --gold-300:#D9B84A;
  /* Background & surface */
  --paper-50:#F8F6F0;
  --paper-100:#EEE9DC;
  --white:#FFFFFF;
  --ink-900:#1A2230;
  --ink-600:#454F5F;
  --ink-400:#7C8696;
  --line:#E5E7EB;
  --line-soft:#E5E7EB;
  /* Status */
  --danger-600:#B3422C;
  --danger-100:#F7E2DA;
  --success-600:#2E7D32;
  --success-100:#E8F5E9;
  --warning-600:#A8741F;
  --warning-100:#F5E7CB;
  --radius:10px;
  --shadow-sm:0 1px 2px rgba(21,33,52,.06), 0 1px 1px rgba(21,33,52,.04);
  --shadow-md:0 8px 24px rgba(21,33,52,.10);
  --shadow-lg:0 20px 50px rgba(21,33,52,.22);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:'Inter',sans-serif;
  background:var(--paper-50);
  color:var(--ink-900);
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
}
h1,h2,h3,h4{font-family:'Lexend',sans-serif;margin:0;color:var(--ink-900);}
p{margin:0;}
.mono{font-family:'IBM Plex Mono',monospace;}
.hidden{display:none !important;}
button{font-family:inherit;cursor:pointer;}
input,select,textarea{font-family:inherit;}
a{color:inherit;text-decoration:none;}
::selection{background:var(--gold-300);color:var(--navy-900);}

::-webkit-scrollbar{width:9px;height:9px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:#D8D0BC;border-radius:8px;}

.frame{position:relative;}
.cf{position:absolute;width:20px;height:20px;pointer-events:none;}
.cf-gold.cf-tl{top:-2px;left:-2px;border-top:2px solid var(--gold-500);border-left:2px solid var(--gold-500);border-radius:3px 0 0 0;}
.cf-gold.cf-tr{top:-2px;right:-2px;border-top:2px solid var(--gold-500);border-right:2px solid var(--gold-500);border-radius:0 3px 0 0;}
.cf-gold.cf-bl{bottom:-2px;left:-2px;border-bottom:2px solid var(--gold-500);border-left:2px solid var(--gold-500);border-radius:0 0 0 3px;}
.cf-gold.cf-br{bottom:-2px;right:-2px;border-bottom:2px solid var(--gold-500);border-right:2px solid var(--gold-500);border-radius:0 0 3px 0;}
.scan-line{position:absolute;left:6%;right:6%;height:2px;background:linear-gradient(90deg,transparent,var(--gold-300),transparent);animation:scanmove 3.2s ease-in-out infinite;box-shadow:0 0 10px 1px rgba(224,182,92,.6);}
@keyframes scanmove{0%{top:8%;opacity:0;}10%{opacity:1;}50%{top:88%;opacity:1;}60%{opacity:0;}100%{top:8%;opacity:0;}}
.mini-cf{display:inline-flex;width:13px;height:13px;position:relative;flex:none;}
.mini-cf span{position:absolute;width:6px;height:6px;}
.mini-cf .a{top:0;left:0;border-top:1.6px solid currentColor;border-left:1.6px solid currentColor;}
.mini-cf .b{top:0;right:0;border-top:1.6px solid currentColor;border-right:1.6px solid currentColor;}
.mini-cf .c{bottom:0;left:0;border-bottom:1.6px solid currentColor;border-left:1.6px solid currentColor;}
.mini-cf .d{bottom:0;right:0;border-bottom:1.6px solid currentColor;border-right:1.6px solid currentColor;}

/* ================= LOGIN ================= */
#loginScreen{min-height:100vh;display:flex;}
.login-brand{
  flex:1.05;background:radial-gradient(circle at 30% 20%, var(--sidebar-hover) 0%, var(--sidebar) 60%);
  color:#fff;display:flex;flex-direction:column;justify-content:space-between;
  padding:48px 56px;position:relative;overflow:hidden;
}
.login-brand::after{content:"";position:absolute;inset:0;background-image:radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px);background-size:22px 22px;opacity:.5;pointer-events:none;}
.brand-mark{display:flex;align-items:center;gap:10px;font-family:'Lexend';font-weight:700;font-size:18px;position:relative;z-index:1;}
.brand-mark .dot{width:9px;height:9px;border-radius:50%;background:var(--gold-300);}
.login-hero{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:26px;margin:auto 0;}
.viewfinder-box{width:230px;height:230px;border-radius:18px;background:linear-gradient(160deg,#24395A,#16233A);position:relative;display:flex;align-items:center;justify-content:center;}
.viewfinder-box svg{width:96px;height:96px;color:rgba(255,255,255,.85);}
.hero-text{text-align:center;max-width:380px;}
.hero-text h2{color:#fff;font-size:22px;line-height:1.35;font-weight:600;}
.hero-text p{color:rgba(255,255,255,.62);font-size:14px;margin-top:10px;line-height:1.6;}
.login-foot{position:relative;z-index:1;color:rgba(255,255,255,.45);font-size:12.5px;}
.login-side{flex:1;display:flex;align-items:center;justify-content:center;padding:40px;background:var(--paper-50);}
.login-card{width:100%;max-width:400px;}
.login-card .eyebrow{font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--logo-gold);font-weight:600;}
.login-card h1{font-size:26px;margin-top:8px;}
.login-card .sub{color:var(--ink-400);font-size:14px;margin-top:8px;line-height:1.5;}
.field{margin-top:16px;}
.field label{display:block;font-size:12.5px;font-weight:600;color:var(--ink-600);margin-bottom:6px;}
.field input,.field select,.field textarea{width:100%;padding:11px 13px;border:1.5px solid var(--line);border-radius:8px;font-size:14px;background:#fff;color:var(--ink-900);outline:none;transition:.15s;}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--active-menu);box-shadow:0 0 0 3px rgba(46,125,50,.12);}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:11px 18px;border-radius:8px;border:none;font-size:14px;font-weight:600;transition:.15s;white-space:nowrap;}
.btn-primary{background:var(--sidebar);color:#fff;}
.btn-primary:hover{background:var(--sidebar-hover);}
.btn-gold{background:var(--logo-gold);color:#fff;}
.btn-gold:hover{opacity:.9;}
.btn-outline{background:#fff;color:var(--ink-600);border:1.5px solid var(--line);}
.btn-outline:hover{border-color:var(--sidebar);color:var(--sidebar);}
.btn-danger{background:var(--danger-600);color:#fff;}
.btn-danger:hover{opacity:.9;}
.btn-ghost{background:transparent;color:var(--ink-600);}
.btn-ghost:hover{background:var(--paper-100);}
.btn-block{width:100%;}
.btn-sm{padding:7px 11px;font-size:12.5px;border-radius:7px;}
.btn-icon{padding:8px;border-radius:7px;}
.login-card button[type=submit]{margin-top:22px;}
.demo-note{margin-top:14px;font-size:12px;color:var(--ink-400);background:var(--paper-100);padding:9px 12px;border-radius:7px;line-height:1.5;}
.error-text{color:var(--danger-600);font-size:12.5px;margin-top:6px;}

/* ================= APP SHELL ================= */
#appShell{display:flex;min-height:100vh;}
#sidebar{
  width:250px;flex:none;background:var(--sidebar);color:#fff;
  display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:40;
  transition:transform .25s ease;
}
.sb-logo{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px 20px 18px;border-bottom:1px solid rgba(255,255,255,.08);text-align:center;}
.sb-logo .mark{width:60px;height:60px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex:none;overflow:hidden;background:transparent;}
.sb-logo .mark svg{width:18px;height:18px;color:#1B2C45;}
.sb-logo .txt{line-height:1.35;}
.sb-logo .txt b{font-family:'Lexend';font-weight:700;font-size:15px;display:block;color:#fff;}
.sb-logo .txt span{font-size:10.5px;color:rgba(255,255,255,.5);display:block;}
.sb-role{margin:16px 20px 6px;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.38);font-weight:600;}
.sb-nav{flex:1;padding:4px 12px;overflow-y:auto;}
.sb-link{display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:8px;color:rgba(255,255,255,.68);font-size:13.6px;font-weight:500;margin-bottom:3px;border:none;background:transparent;width:100%;text-align:left;border-left:3px solid transparent;}
.sb-link svg{flex:none;}
.sb-link:hover{background:var(--sidebar-hover);color:#fff;}
.sb-link.active{background:rgba(46,125,50,.18);color:#fff;border-left:3px solid var(--active-menu);}
.sb-user{margin:10px 14px 18px;padding:13px;border-radius:10px;background:rgba(255,255,255,.05);display:flex;align-items:center;gap:10px;}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--sidebar-hover);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;flex:none;font-family:'Lexend';}
.sb-user .nm{font-size:12.8px;font-weight:600;color:#fff;line-height:1.3;}
.sb-user .rl{font-size:11px;color:rgba(255,255,255,.45);}
.sb-logout{display:flex;align-items:center;justify-content:center;gap:8px;margin:0 14px 18px;padding:9px;border-radius:8px;border:1px solid rgba(255,255,255,.12);background:transparent;color:rgba(255,255,255,.7);font-size:12.5px;font-weight:600;width:calc(100% - 28px);}
.sb-logout:hover{background:rgba(255,255,255,.07);color:#fff;}

.main{flex:1;margin-left:250px;display:flex;flex-direction:column;min-height:100vh;}
#topbar{height:64px;background:#FFFFFF;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:20;}
.tb-left{display:flex;align-items:center;gap:14px;}
.tb-left h3{font-size:16px;}
.hamburger{display:none;background:transparent;border:none;color:var(--ink-600);}
.tb-right{display:flex;align-items:center;gap:14px;}
.tb-pill{display:flex;align-items:center;gap:6px;background:var(--success-100);color:var(--success-600);font-size:11.5px;font-weight:700;padding:6px 11px;border-radius:99px;}
.tb-pill .dotping{width:6px;height:6px;border-radius:50%;background:var(--success-600);animation:pulse 1.6s infinite;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.35;}}

#content{padding:28px 32px 60px;max-width:1280px;width:100%;margin:0 auto;}
.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:22px;flex-wrap:wrap;}
.page-head .eyebrow{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--logo-gold);font-weight:700;margin-bottom:6px;}
.page-head h2{font-size:23px;}
.page-head p{color:var(--ink-400);font-size:13.5px;margin-top:5px;}

.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.card{background:#FFFFFF;border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow-sm);}
.stat-card{display:flex;flex-direction:column;gap:10px;}
.stat-card .ic{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;}
.stat-card .val{font-family:'Lexend';font-size:25px;font-weight:700;}
.stat-card .lbl{font-size:12.5px;color:var(--ink-400);font-weight:500;}
.tone-navy{background:#E7EDF5;color:var(--navy-700);}
.tone-gold{background:#FBF0DA;color:var(--gold-500);}
.tone-danger{background:var(--danger-100);color:var(--danger-600);}
.tone-success{background:var(--success-100);color:var(--success-600);}

.section-title{display:flex;align-items:center;justify-content:space-between;margin:30px 0 14px;}
.section-title h4{font-size:15px;}

.table-wrap{background:#FFFFFF;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);overflow-x:auto;}
table{width:100%;border-collapse:collapse;}
thead th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-400);background:var(--paper-100);padding:12px 16px;font-weight:700;border-bottom:1px solid var(--line-soft);white-space:nowrap;}
tbody td{padding:13px 16px;font-size:13.5px;border-bottom:1px solid var(--line-soft);color:var(--ink-900);vertical-align:middle;}
tbody tr:last-child td{border-bottom:none;}
tbody tr:hover{background:#FBFAF6;}
.cell-sub{font-size:11.5px;color:var(--ink-400);}
.row-actions{display:flex;gap:6px;}
.empty-row td{text-align:center;color:var(--ink-400);padding:34px;font-size:13.5px;}

.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:99px;font-size:11px;font-weight:700;}
.badge-success{background:var(--success-100);color:var(--success-600);}
.badge-danger{background:var(--danger-100);color:var(--danger-600);}
.badge-warning{background:var(--warning-100);color:var(--warning-600);}
.badge-navy{background:#E7EDF5;color:var(--navy-700);}
.badge-gray{background:var(--paper-100);color:var(--ink-600);}

.toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap;}
.toolbar select,.toolbar input{padding:9px 12px;border:1.5px solid var(--line);border-radius:8px;font-size:13px;background:#fff;}

#modalLayer{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;background:rgba(21,29,43,.55);backdrop-filter:blur(2px);padding:20px;}
.modal-box{background:#fff;border-radius:14px;width:100%;max-width:480px;box-shadow:var(--shadow-lg);max-height:88vh;display:flex;flex-direction:column;animation:modalIn .18s ease;}
@keyframes modalIn{from{opacity:0;transform:translateY(8px) scale(.98);}to{opacity:1;transform:none;}}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid var(--line-soft);}
.modal-head h3{font-size:16.5px;}
.modal-body{padding:20px 22px;overflow-y:auto;}
.modal-foot{padding:16px 22px;border-top:1px solid var(--line-soft);display:flex;justify-content:flex-end;gap:10px;}
.field-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}

#toastLayer{position:fixed;bottom:22px;right:22px;z-index:200;display:flex;flex-direction:column;gap:10px;}
.toast{background:var(--navy-900);color:#fff;padding:13px 18px;border-radius:9px;font-size:13.2px;font-weight:500;box-shadow:var(--shadow-lg);display:flex;align-items:center;gap:10px;min-width:230px;animation:toastIn .2s ease;}
.toast.success{background:var(--success-600);}
.toast.danger{background:var(--danger-600);}
@keyframes toastIn{from{opacity:0;transform:translateX(20px);}to{opacity:1;transform:none;}}

.precheck{display:grid;grid-template-columns:1fr 1.15fr;gap:26px;align-items:start;}
.cam-frame{width:100%;aspect-ratio:4/3;border-radius:14px;background:linear-gradient(160deg,#1B2C45,#0F1A2B);position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;}
.cam-frame svg{width:80px;height:80px;color:rgba(255,255,255,.5);}
.cam-status{position:absolute;bottom:12px;left:12px;right:12px;display:flex;justify-content:space-between;align-items:center;}
.checklist{display:flex;flex-direction:column;gap:10px;margin-top:16px;}
.check-item{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--ink-600);}
.check-item .dotcheck{width:20px;height:20px;border-radius:50%;background:var(--success-100);color:var(--success-600);display:flex;align-items:center;justify-content:center;flex:none;}

.exam-layout{display:grid;grid-template-columns:1fr 270px;gap:20px;align-items:start;}
.qnav-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:12px;}
.qnav-item{aspect-ratio:1;border-radius:7px;border:1.5px solid var(--line);background:#fff;font-size:12.5px;font-weight:700;color:var(--ink-600);display:flex;align-items:center;justify-content:center;}
.qnav-item.answered{background:var(--success-100);border-color:var(--success-600);color:var(--success-600);}
.qnav-item.current{outline:2px solid var(--navy-700);outline-offset:1px;}
.opt-item{display:flex;align-items:flex-start;gap:11px;padding:13px 14px;border:1.5px solid var(--line);border-radius:9px;margin-bottom:9px;cursor:pointer;transition:.12s;}
.opt-item:hover{border-color:var(--navy-500);}
.opt-item.sel{border-color:var(--navy-700);background:#EEF2F8;}
.opt-letter{width:24px;height:24px;border-radius:50%;border:1.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;flex:none;color:var(--ink-600);}
.opt-item.sel .opt-letter{background:var(--navy-700);border-color:var(--navy-700);color:#fff;}
.mini-cam{width:100%;aspect-ratio:4/3;border-radius:10px;background:linear-gradient(160deg,#1B2C45,#0F1A2B);position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;}
.mini-cam svg{width:42px;height:42px;color:rgba(255,255,255,.45);}
.timer-pill{display:flex;align-items:center;gap:8px;background:var(--navy-700);color:#fff;padding:10px 16px;border-radius:9px;font-family:'IBM Plex Mono';font-size:18px;font-weight:600;}

.result-hero{text-align:center;padding:34px 20px;}
.result-score{font-family:'Lexend';font-size:52px;font-weight:800;color:var(--navy-700);}

.sidebar-overlay{display:none;}
@media (max-width:980px){
  .grid4{grid-template-columns:repeat(2,1fr);}
  .grid3{grid-template-columns:1fr 1fr;}
  .precheck{grid-template-columns:1fr;}
  .exam-layout{grid-template-columns:1fr;}
}
@media (max-width:880px){
  #sidebar{transform:translateX(-100%);}
  #sidebar.open{transform:translateX(0);box-shadow:var(--shadow-lg);}
  .main{margin-left:0;}
  .hamburger{display:flex;}
  .sidebar-overlay.show{display:block;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:30;}
}
@media (max-width:680px){
  .login-brand{display:none;}
  .grid4,.grid3,.grid2,.field-row2{grid-template-columns:1fr;}
  #content{padding:20px 16px 50px;}
  .page-head{align-items:flex-start;}
}
/* Tombol Cetak */
.btn-success{
    background:#16a34a;
    color:#ffffff;
    border:1px solid #16a34a;
}

.btn-success:hover{
    background:#15803d;
    border-color:#15803d;
    color:#ffffff;
}
.submenu-siswa{
    display:none;
    margin-left:20px;
}

.submenu-link{
    font-size:14px;
    padding-left:15px !important;
}

.menu-dropdown{
    width:100%;
}

.submenu-link.active{
    background:rgba(46,125,50,.15);
    color:#fff;
    border-radius:10px;
}