@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@500;600;700&display=swap');

:root{
  --navy:#17233F;
  --navy-light:#2C4570;
  --paper:#F5F6F8;
  --card:#FFFFFF;
  --gold:#B8873B;
  --gold-light:#EFE1C6;
  --ink:#1E273A;
  --muted:#606B82;
  --success:#2F7A57;
  --success-bg:#E7F3EC;
  --danger:#B0433F;
  --danger-bg:#FBEAE9;
  --border:#DEE2E9;
  --silver:#8C97A6;
  --bronze:#A05A2C;
}

*{ box-sizing:border-box; }
html,body{ margin:0; padding:0; }
body{ background:var(--paper); color:var(--ink); font-family:'IBM Plex Sans', sans-serif; line-height:1.5; }
a{ color:inherit; text-decoration:none; }
.f-display{ font-family:'Fraunces', serif; }
.f-mono{ font-family:'IBM Plex Mono', monospace; }
.container{ max-width:1080px; margin:0 auto; padding:0 20px; }
.muted{ color:var(--muted); }

/* ---------- Header ---------- */
.site-header{ position:sticky; top:0; z-index:40; background:var(--navy); color:#fff; }
.site-header .bar{ display:flex; align-items:center; justify-content:space-between; padding:14px 20px; max-width:1080px; margin:0 auto; }
.brand{ display:flex; align-items:center; gap:10px; font-size:1.3rem; }
.brand .mark{ width:32px; height:32px; border:2px solid var(--gold); border-radius:4px; display:flex; align-items:center; justify-content:center; font-family:'IBM Plex Mono',monospace; font-size:.7rem; font-weight:700; color:var(--gold); }
.nav-links{ display:flex; align-items:center; gap:20px; font-size:.9rem; }
.nav-links a:hover{ color:var(--gold-light); }
.roll-chip{ font-family:'IBM Plex Mono',monospace; font-size:.72rem; background:rgba(255,255,255,.1); padding:4px 8px; border-radius:4px; }
.nav-toggle{ display:none; background:none; border:none; color:#fff; font-size:1.4rem; cursor:pointer; }

/* ---------- Buttons ---------- */
.btn{ display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:10px 20px; border-radius:6px; font-weight:600; font-size:.92rem; border:1px solid transparent; cursor:pointer; text-align:center; }
.btn-primary{ background:var(--navy); color:#fff; }
.btn-primary:hover{ background:var(--navy-light); }
.btn-primary:disabled{ background:#A9AFBC; cursor:not-allowed; }
.btn-gold{ background:var(--gold); color:#fff; }
.btn-gold:hover{ filter:brightness(1.07); }
.btn-outline{ border-color:var(--border); background:#fff; color:var(--ink); }
.btn-danger{ border-color:var(--danger); color:var(--danger); background:#fff; }
.btn-danger:hover{ background:var(--danger-bg); }
.btn-block{ width:100%; }
.btn-sm{ padding:6px 14px; font-size:.8rem; }

/* ---------- Cards & tickets ---------- */
.card{ background:var(--card); border:1px solid var(--border); border-radius:8px; }
.ticket{ position:relative; background:var(--card); border:1px solid var(--border); border-radius:6px; }
.ticket-row{ display:flex; }
.ticket-divider{ position:relative; border-left:2px dashed var(--border); display:flex; flex-direction:column; align-items:center; justify-content:center; padding:20px; width:150px; gap:8px; flex-shrink:0; }
.ticket-divider::before, .ticket-divider::after{ content:''; position:absolute; left:-10px; width:20px; height:20px; border-radius:50%; background:var(--paper); border:1px solid var(--border); }
.ticket-divider::before{ top:-11px; }
.ticket-divider::after{ bottom:-11px; }

.stamp{ border:2px solid var(--gold); border-radius:9999px; color:var(--gold); display:flex; align-items:center; justify-content:center; text-align:center; transform:rotate(-8deg); position:relative; flex-shrink:0; }
.stamp::before{ content:''; position:absolute; inset:5px; border:1px dashed var(--gold); border-radius:9999px; }
.stamp span{ display:block; font-family:'IBM Plex Mono',monospace; line-height:1.2; }

/* ---------- Forms ---------- */
label{ display:block; font-size:.78rem; font-weight:600; color:var(--muted); margin-bottom:4px; }
input, select, textarea{ width:100%; border:1px solid var(--border); border-radius:6px; padding:10px 12px; font-family:inherit; font-size:.92rem; margin-bottom:16px; background:#fff; color:var(--ink); }
input:focus, select:focus, textarea:focus{ outline:2px solid var(--navy); outline-offset:1px; border-color:var(--navy); }
.error-box{ background:var(--danger-bg); color:var(--danger); border:1px solid var(--danger); border-radius:6px; padding:10px 14px; font-size:.85rem; margin-bottom:16px; }
.success-box{ background:var(--success-bg); color:var(--success); border:1px solid var(--success); border-radius:6px; padding:10px 14px; font-size:.85rem; margin-bottom:16px; }
.divider-text{ display:flex; align-items:center; gap:10px; color:var(--muted); font-size:.75rem; margin:16px 0; }
.divider-text::before, .divider-text::after{ content:''; flex:1; height:1px; background:var(--border); }

/* ---------- Hero ---------- */
.hero{ display:grid; grid-template-columns:1.3fr 1fr; gap:40px; align-items:center; padding:56px 0 40px; }
.hero h1{ font-size:2.6rem; line-height:1.1; color:var(--navy); margin:10px 0 16px; }
.hero .eyebrow{ font-family:'IBM Plex Mono',monospace; font-size:.75rem; color:var(--gold); }
.hero-stats{ display:flex; gap:32px; margin-top:28px; font-family:'IBM Plex Mono',monospace; }
.hero-stats .num{ font-size:1.5rem; font-weight:600; color:var(--navy); }
.hero-stats .lbl{ font-size:.72rem; color:var(--muted); }

/* ---------- Grids ---------- */
.grid-4{ display:grid; grid-template-columns:repeat(4,1fr); gap:16px; }
.grid-3{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
.grid-2{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; }
.cat-card{ padding:18px; text-align:left; display:block; }
.cat-card:hover{ border-color:var(--navy); }
.cat-card .name{ font-family:'Fraunces',serif; font-size:1.2rem; color:var(--navy); }
.cat-card .full{ font-size:.78rem; color:var(--muted); margin-top:4px; }
.cat-card .students{ font-family:'IBM Plex Mono',monospace; font-size:.68rem; color:var(--gold); margin-top:10px; display:block; }

.chip-row{ display:flex; gap:8px; overflow-x:auto; padding-bottom:8px; margin-bottom:26px; }
.chip{ padding:8px 16px; border-radius:9999px; font-size:.85rem; white-space:nowrap; border:1px solid var(--border); background:#fff; color:var(--muted); cursor:pointer; }
.chip.active{ background:var(--navy); border-color:var(--navy); color:#fff; }

/* ---------- OMR bubbles ---------- */
.bubble{ width:34px; height:34px; border-radius:9999px; border:1.5px solid var(--border); display:flex; align-items:center; justify-content:center; font-family:'IBM Plex Mono',monospace; font-weight:600; color:var(--muted); flex-shrink:0; background:#fff; }
.bubble.filled{ background:var(--navy); border-color:var(--navy); color:#fff; }
.bubble.correct{ background:var(--success); border-color:var(--success); color:#fff; }
.bubble.incorrect{ background:var(--danger); border-color:var(--danger); color:#fff; }
.option-row{ display:flex; align-items:center; gap:12px; width:100%; text-align:left; padding:12px; border-radius:6px; border:1px solid var(--border); background:#fff; cursor:pointer; margin-bottom:10px; }
.option-row:hover{ border-color:var(--navy); }

/* ---------- Question palette ---------- */
.palette-grid{ display:grid; grid-template-columns:repeat(5,1fr); gap:8px; margin-bottom:16px; }
.pal-btn{ width:100%; aspect-ratio:1; border-radius:5px; border:1.5px solid var(--border); background:#fff; font-family:'IBM Plex Mono',monospace; font-size:.75rem; font-weight:600; color:var(--muted); cursor:pointer; }
.pal-btn.answered{ background:var(--navy); border-color:var(--navy); color:#fff; }
.pal-btn.marked{ background:var(--gold-light); border-color:var(--gold); color:var(--gold); }
.pal-btn.current{ outline:2px solid var(--navy); outline-offset:2px; }
.legend-item{ display:flex; align-items:center; gap:8px; font-size:.72rem; color:var(--muted); margin-bottom:6px; }
.legend-swatch{ width:12px; height:12px; border-radius:3px; display:inline-block; }

.test-layout{ display:grid; grid-template-columns:1fr 240px; gap:24px; }
.timer-box{ font-family:'IBM Plex Mono',monospace; font-size:1.5rem; padding:8px 18px; border-radius:6px; border:1px solid var(--border); color:var(--navy); }
.timer-box.low{ color:var(--danger); border-color:var(--danger); }

/* ---------- Checkout modal ---------- */
.modal-overlay{ position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:50; display:flex; align-items:center; justify-content:center; padding:16px; }
.modal-box{ background:#fff; border-radius:8px; max-width:400px; width:100%; overflow:hidden; }
.modal-head{ background:var(--navy); color:#fff; padding:16px 20px; display:flex; align-items:center; justify-content:space-between; }
.modal-body{ padding:20px; }
.spinner{ width:36px; height:36px; border:3px solid var(--border); border-top-color:var(--navy); border-radius:50%; animation:spin .8s linear infinite; margin:0 auto; }
@keyframes spin{ to{ transform:rotate(360deg); } }

/* ---------- Footer ---------- */
.site-footer{ border-top:1px solid var(--border); background:var(--card); margin-top:60px; padding:36px 0; }
.site-footer .row{ display:flex; justify-content:space-between; gap:20px; flex-wrap:wrap; font-size:.85rem; color:var(--muted); }

/* ---------- Result review ---------- */
.review-item{ border:1px solid var(--border); border-radius:6px; padding:12px; margin-bottom:10px; }
.review-item .q-row{ display:flex; justify-content:space-between; gap:12px; }
.review-options{ display:flex; gap:8px; margin-top:8px; flex-wrap:wrap; }
.review-options .bubble{ width:26px; height:26px; font-size:.7rem; }

/* ---------- Rank badges / medals ---------- */
.rank-badge{ display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:50%; font-family:'IBM Plex Mono',monospace; font-weight:700; font-size:.8rem; color:#fff; }
.rank-1{ background:var(--gold); }
.rank-2{ background:var(--silver); }
.rank-3{ background:var(--bronze); }
.rank-other{ background:var(--border); color:var(--muted); }
table.leaderboard{ width:100%; border-collapse:collapse; }
table.leaderboard th, table.leaderboard td{ padding:10px 12px; border-bottom:1px solid var(--border); font-size:.88rem; text-align:left; }
table.leaderboard tr.me{ background:var(--gold-light); }

/* ---------- Certificate ---------- */
.certificate{ background:#fff; border:10px solid var(--navy); padding:50px; max-width:800px; margin:0 auto; position:relative; text-align:center; }
.certificate.premium{ border-color:var(--gold); }
.certificate .inner-border{ border:1px dashed var(--border); padding:36px; }
.certificate.premium .inner-border{ border-color:var(--gold-light); }
.certificate .cert-eyebrow{ font-family:'IBM Plex Mono',monospace; font-size:.75rem; letter-spacing:.1em; color:var(--gold); }
.certificate h1{ font-family:'Fraunces',serif; font-size:2.2rem; color:var(--navy); margin:10px 0; }
.certificate .cert-name{ font-family:'Fraunces',serif; font-size:1.8rem; color:var(--navy); border-bottom:1px solid var(--border); display:inline-block; padding:4px 30px 10px; margin:14px 0; }
.certificate .cert-meta{ font-size:.9rem; color:var(--muted); margin:6px 0; }
.certificate .medal-row{ display:flex; justify-content:center; gap:24px; margin:26px 0; }
.medal-icon, .trophy-icon{ width:70px; height:70px; }
.certificate .cert-footer{ display:flex; justify-content:space-between; margin-top:40px; font-size:.8rem; color:var(--muted); }
.cert-actions{ text-align:center; margin:24px 0; }
@media print{
  .no-print{ display:none !important; }
  body{ background:#fff; }
  .certificate{ border-width:8px; box-shadow:none; }
}

/* ---------- Admin panel ---------- */
.admin-shell{ display:grid; grid-template-columns:220px 1fr; min-height:100vh; }
.admin-sidebar{ background:var(--navy); color:#fff; padding:24px 0; }
.admin-sidebar .brand{ padding:0 20px 20px; }
.admin-sidebar a{ display:block; padding:10px 20px; font-size:.88rem; color:rgba(255,255,255,.8); }
.admin-sidebar a:hover, .admin-sidebar a.active{ background:rgba(255,255,255,.08); color:#fff; }
.admin-main{ padding:28px 32px; }
.admin-topbar{ display:flex; justify-content:space-between; align-items:center; margin-bottom:24px; }
table.admin-table{ width:100%; border-collapse:collapse; background:#fff; border:1px solid var(--border); border-radius:6px; overflow:hidden; }
table.admin-table th{ background:var(--paper); text-align:left; font-size:.75rem; text-transform:uppercase; letter-spacing:.03em; color:var(--muted); padding:10px 14px; }
table.admin-table td{ padding:10px 14px; border-top:1px solid var(--border); font-size:.88rem; vertical-align:middle; }
.stat-card{ background:#fff; border:1px solid var(--border); border-radius:8px; padding:18px; }
.stat-card .num{ font-family:'Fraunces',serif; font-size:1.8rem; color:var(--navy); }
.stat-card .lbl{ font-size:.78rem; color:var(--muted); }
.badge{ display:inline-block; padding:2px 8px; border-radius:9999px; font-size:.7rem; font-weight:600; }
.badge-paid{ background:var(--success-bg); color:var(--success); }
.badge-created{ background:var(--gold-light); color:var(--gold); }
.badge-failed{ background:var(--danger-bg); color:var(--danger); }

/* ---------- Responsive ---------- */
@media (max-width: 860px){
  .hero{ grid-template-columns:1fr; }
  .grid-4{ grid-template-columns:repeat(2,1fr); }
  .grid-3, .grid-2{ grid-template-columns:1fr; }
  .test-layout{ grid-template-columns:1fr; }
  .admin-shell{ grid-template-columns:1fr; }
  .nav-links{ display:none; position:absolute; top:100%; left:0; right:0; background:var(--navy); flex-direction:column; align-items:flex-start; padding:16px 20px; gap:14px; }
  .nav-links.open{ display:flex; }
  .nav-toggle{ display:block; }
}
