*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --primary:#1d4ed8;
  --primary-dark:#1e3a8a;
  --danger:#dc2626;
  --success:#16a34a;
  --gray-200:#e2e8f0;
  --gray-400:#94a3b8;
  --gray-500:#64748b;
  --gray-700:#334155;
  --gray-900:#0f172a;
  --font:"Plus Jakarta Sans",sans-serif;
}
html,body{height:100%;font-family:var(--font);background:#f8fafc}
.page{display:none;min-height:100vh;width:100%}
.page.show{display:flex}
.page.show.block{display:block}
#pgLogin{background:linear-gradient(135deg,#1e3a8a,#1d4ed8,#0ea5e9);flex-direction:column;align-items:center;justify-content:center;padding:1.5rem 1.25rem;box-sizing:border-box}
.login-wrap{width:100%;max-width:360px;margin:0 auto}
.logo{text-align:center;margin-bottom:1.25rem}
.logo-icon{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;background:rgba(255,255,255,.15);border-radius:14px;border:1px solid rgba(255,255,255,.25);margin-bottom:.6rem}
.logo-icon svg{width:26px;height:26px;fill:none;stroke:white;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.logo h1{color:white;font-size:1.4rem;font-weight:700}
.logo p{color:rgba(255,255,255,.65);font-size:.82rem}
.card{background:white;border-radius:16px;padding:1.5rem;box-shadow:0 20px 40px rgba(0,0,0,.2)}
.form-label{display:block;font-size:.78rem;font-weight:600;color:var(--gray-700);margin-bottom:.35rem}
.form-ctrl{width:100%;padding:.6rem .875rem;border:1.5px solid var(--gray-200);border-radius:10px;font-family:var(--font);font-size:.875rem;color:var(--gray-900);margin-bottom:.875rem}
.form-ctrl:focus{outline:none;border-color:var(--primary)}
.btn{width:100%;padding:.75rem;border:none;border-radius:10px;font-family:var(--font);font-size:.9rem;font-weight:700;cursor:pointer}
.btn-blue{background:var(--primary);color:white}
.btn-blue:hover{background:var(--primary-dark)}
.btn-blue:disabled{opacity:.6;cursor:not-allowed}
.btn-kiosk{background:var(--primary);color:white;display:flex;align-items:center;justify-content:center;gap:.5rem;margin-bottom:1rem;padding:.85rem;width:100%;border:none;border-radius:10px;font-family:var(--font);font-size:.95rem;font-weight:700;cursor:pointer}
.alert-err{padding:.6rem .875rem;border-radius:0 10px 10px 0;font-size:.8rem;font-weight:500;margin-bottom:.875rem;display:none;background:#fee2e2;color:#991b1b;border-left:3px solid var(--danger)}
#pgDaftar{background:linear-gradient(135deg,#1e3a8a,#1d4ed8,#0ea5e9);padding:1.5rem 1rem}
.daftar-wrap{max-width:480px;margin:0 auto;width:100%}
.topbar-s{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.2);backdrop-filter:blur(8px);border-radius:12px;padding:.875rem 1.25rem;margin-bottom:1.5rem;display:flex;align-items:center;justify-content:space-between}
.topbar-s .nama{font-weight:700;color:white;font-size:.95rem}
.topbar-s .kelas{font-size:.78rem;color:rgba(255,255,255,.65)}
.btn-keluar{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.3);color:white;padding:.35rem .875rem;border-radius:8px;font-family:var(--font);font-size:.82rem;font-weight:600;cursor:pointer}
.sec-label{font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.5);margin-bottom:.75rem}
.ujian-card{background:white;border-radius:14px;padding:1.25rem 1.5rem;margin-bottom:.75rem;cursor:pointer;transition:all .15s;display:flex;align-items:center;justify-content:space-between;box-shadow:0 4px 12px rgba(0,0,0,.15)}
.ujian-card:hover{transform:translateY(-1px);box-shadow:0 8px 20px rgba(0,0,0,.2)}
.ujian-card.selesai{cursor:default}
.ujian-card.selesai .ujian-nama,.ujian-card.selesai .ujian-info{opacity:.6}
.ujian-card.terkunci{border-left:3px solid var(--danger)}
.ujian-nama{font-weight:700;font-size:.95rem;color:var(--gray-900)}
.ujian-info{font-size:.8rem;color:var(--gray-500);margin-top:.2rem}
.badge{padding:.25rem .7rem;border-radius:20px;font-size:.72rem;font-weight:700}
.b-aktif{background:#dbeafe;color:#1d4ed8}
.b-selesai{background:#dcfce7;color:#16a34a}
.b-dikunci{background:#fee2e2;color:#dc2626}
.b-reset{background:#e0f2fe;color:#0369a1}
.b-jalan{background:#fef9c3;color:#854d0e}
.b-mulai{background:var(--primary);color:#fff;padding:.5rem 1.15rem;border-radius:20px;box-shadow:0 2px 8px rgba(29,78,216,.35);display:inline-flex;align-items:center;gap:.3rem}

.badge-aksi-selesai{display:flex;align-items:center;gap:.5rem;flex-shrink:0}
.btn-lihat-nilai{font-family:inherit;font-size:.75rem;font-weight:700;color:var(--primary);background:#eff6ff;border:1px solid #bfdbfe;border-radius:20px;padding:.4rem .85rem;cursor:pointer;white-space:nowrap;transition:all .15s}
.btn-lihat-nilai:hover{background:#dbeafe}
.notif-kunci{background:rgba(220,38,38,.2);border:1px solid rgba(252,165,165,.3);border-radius:12px;padding:.875rem;margin-bottom:1rem;font-size:.85rem;color:white;font-weight:600;display:none}
#pgToken{background:linear-gradient(135deg,#1e3a8a,#1d4ed8,#0ea5e9);align-items:center;justify-content:center;padding:1.5rem 1rem;min-height:100vh;box-sizing:border-box}
.token-wrap{width:100%;max-width:440px}
.token-card{background:white;border-radius:16px;padding:1.75rem;box-shadow:0 20px 40px rgba(0,0,0,.25)}
.token-judul{font-size:1.05rem;font-weight:700;color:var(--gray-900);margin-bottom:.25rem}
.token-info{font-size:.82rem;color:var(--gray-500);margin-bottom:1.25rem}
.token-inp{width:100%;padding:.875rem;border:2px solid var(--gray-200);border-radius:10px;font-size:1.6rem;font-weight:700;text-align:center;letter-spacing:.25em;text-transform:uppercase;font-family:monospace;margin:.75rem 0}
.token-inp:focus{outline:none;border-color:var(--primary)}
.btn-batal{background:none;border:1.5px solid var(--gray-200);color:var(--gray-700);margin-top:.5rem}
#pgMulai{background:linear-gradient(135deg,#0f172a,#1e3a8a,#1d4ed8);align-items:center;justify-content:center;padding:1.5rem}
.mulai-card{background:white;border-radius:20px;padding:2rem;width:100%;max-width:420px;box-shadow:0 24px 60px rgba(0,0,0,.3)}
.info-row{display:flex;justify-content:space-between;padding:.4rem 0;font-size:.875rem;border-bottom:1px solid var(--gray-200)}
.info-row:last-child{border:none}
.warn-box{background:#fefce8;border:1px solid #fde047;border-radius:10px;padding:.875rem;font-size:.82rem;color:#713f12;margin:1rem 0}
#pgTerkunci{background:linear-gradient(135deg,#1e3a8a,#1d4ed8,#0ea5e9);align-items:center;justify-content:center;padding:1rem}
.kunci-wrap{text-align:center;color:white;max-width:420px;width:100%}
.kunci-box{background:rgba(255,255,255,.15);border-radius:12px;padding:1rem;margin:1rem 0;font-size:.9rem;line-height:1.6}
.btn-lanjut{padding:.875rem 2rem;background:white;color:var(--primary);border:none;border-radius:12px;font-family:var(--font);font-size:1rem;font-weight:700;cursor:pointer;width:100%;max-width:280px;margin-top:.5rem}
#loading{position:fixed;inset:0;background:rgba(15,23,42,.85);z-index:9999;display:none;align-items:center;justify-content:center;flex-direction:column;gap:1rem;color:white}
.spinner{width:40px;height:40px;border:3px solid rgba(255,255,255,.3);border-top-color:white;border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* Mobile: naikkan form login agar tidak tertutup keyboard */
@media(max-width:768px){
  #pgLogin{
    justify-content:center;
    align-items:center;
    padding:5vh 1.25rem;
    min-height:100vh;
    height:auto;
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
  }
  #pgTerkunci{justify-content:flex-start;padding-top:5vh}
  #pgMulai{justify-content:flex-start;padding-top:5vh}
  .login-wrap{width:100%;max-width:340px;margin:0 auto;padding:0 1rem}
}
