/* ============ Navix VMS — Base Design System ============ */
:root{
  --primary:#0A0F1E; --surface:#111827;
  --glass:rgba(255,255,255,.06); --glass-strong:rgba(255,255,255,.09);
  --border:rgba(255,255,255,.10);
  --accent:#6C63FF; --accent-glow:rgba(108,99,255,.35); --accent-soft:rgba(108,99,255,.15);
  --gold:#F5C842; --success:#10B981; --danger:#EF4444; --warn:#F59E0B;
  --text-primary:#F9FAFB; --text-muted:#9CA3AF;
  --r-card:20px; --r-input:12px; --r-pill:50px;
  --shadow-float:0 0 40px rgba(108,99,255,.15);
  --ease:cubic-bezier(.22,1,.36,1);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:'Inter',system-ui,Segoe UI,sans-serif;
  background:var(--primary); color:var(--text-primary);
  min-height:100vh; min-height:100dvh; overflow-x:hidden;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
h1,h2,h3,.display{font-family:'Plus Jakarta Sans',sans-serif;letter-spacing:-.02em;font-weight:700}
.mono{font-family:'JetBrains Mono',monospace}
a{color:inherit}
button,input,select,textarea{font-family:inherit}
img{max-width:100%}

/* ---- Clean professional background (subtle, static) ---- */
.ambient{position:fixed;inset:0;z-index:-1;overflow:hidden;
  background:
    radial-gradient(1000px 520px at 50% -8%, var(--accent-soft), transparent 70%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface) 55%, var(--primary)) 0%, var(--primary) 60%);
}
/* faint dot grid for subtle texture */
.ambient::before{content:"";position:absolute;inset:0;opacity:.5;
  background-image:radial-gradient(rgba(255,255,255,.035) 1px, transparent 1px);
  background-size:26px 26px;
  -webkit-mask-image:radial-gradient(circle at 50% 0%, #000 0%, transparent 75%);
  mask-image:radial-gradient(circle at 50% 0%, #000 0%, transparent 75%);}
.ambient span{display:none}

/* ---- Glass cards ---- */
.glass{
  background:var(--glass); backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
  border:1px solid var(--border); border-radius:var(--r-card);
}
.card{padding:24px}

/* ---- Buttons + ripple ---- */
.btn{
  position:relative; overflow:hidden; display:inline-flex; align-items:center; justify-content:center;
  gap:8px; border:0; cursor:pointer; font-weight:600; font-size:16px;
  padding:14px 26px; border-radius:var(--r-pill); color:#fff;
  background:var(--accent); box-shadow:0 8px 30px var(--accent-glow);
  min-height:48px; transition:transform .15s var(--ease), box-shadow .2s, filter .2s;
  -webkit-tap-highlight-color:transparent; text-decoration:none;
}
.btn:hover{transform:translateY(-2px);filter:brightness(1.07)}
.btn:active{transform:translateY(0) scale(.98)}
.btn.secondary{background:var(--glass-strong);border:1px solid var(--border);box-shadow:none}
.btn.success{background:var(--success);box-shadow:0 8px 30px rgba(16,185,129,.4)}
.btn.danger{background:var(--danger);box-shadow:0 8px 30px rgba(239,68,68,.4)}
.btn.ghost{background:transparent;box-shadow:none;border:1px solid var(--border)}
.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}
.btn svg{width:18px;height:18px;flex:none}
.btn-block{width:100%}
.ripple{position:absolute;border-radius:50%;transform:scale(0);background:rgba(255,255,255,.45);
  animation:ripple .6s linear;pointer-events:none}
@keyframes ripple{to{transform:scale(3.2);opacity:0}}

/* ---- Inputs ---- */
.field{margin-bottom:16px}
.field label{display:block;font-size:13px;color:var(--text-muted);margin-bottom:7px;font-weight:500}
.input,select.input,textarea.input{
  width:100%;padding:14px 16px;border-radius:var(--r-input);
  background:rgba(0,0,0,.28);border:1px solid var(--border);color:var(--text-primary);
  font-size:16px;outline:none;transition:border-color .2s, box-shadow .2s;
}
.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
textarea.input{resize:vertical;min-height:84px}
.input::placeholder{color:#6B7280}

/* ---- Utilities ---- */
.muted{color:var(--text-muted)}
.center{text-align:center}
.row{display:flex;gap:12px}
.row.wrap{flex-wrap:wrap}
.grid{display:grid;gap:14px}
.hidden,[hidden]{display:none !important}
.pill{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:var(--r-pill);
  font-size:12px;font-weight:600;background:var(--glass-strong);border:1px solid var(--border)}
.pill.green{color:#6EE7B7;background:rgba(16,185,129,.14);border-color:rgba(16,185,129,.35)}
.pill.red{color:#FCA5A5;background:rgba(239,68,68,.14);border-color:rgba(239,68,68,.35)}
.pill.amber{color:#FCD34D;background:rgba(245,158,11,.14);border-color:rgba(245,158,11,.35)}
.pill.violet{color:#C4B5FD;background:var(--accent-soft);border-color:var(--border)}

/* ---- Page transition ---- */
.fade-up{animation:fadeUp .4s var(--ease) both}
@keyframes fadeUp{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.fade-in{animation:fadeIn .3s ease both}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}

/* ---- Toast ---- */
.toast-wrap{position:fixed;left:0;right:0;bottom:24px;display:flex;flex-direction:column;
  align-items:center;gap:10px;z-index:9999;pointer-events:none}
.toast{pointer-events:auto;background:var(--surface);border:1px solid var(--border);
  border-radius:14px;padding:13px 18px;font-size:14px;box-shadow:var(--shadow-float);
  animation:fadeUp .3s var(--ease) both;max-width:90vw}
.toast.ok{border-color:rgba(16,185,129,.5)}
.toast.err{border-color:rgba(239,68,68,.5)}

/* ---- Confirm / prompt modal ---- */
.modal-back{position:fixed;inset:0;background:rgba(15,23,42,.55);backdrop-filter:blur(3px);z-index:200;
  display:grid;place-items:center;padding:20px;opacity:0;pointer-events:none;transition:opacity .2s}
.modal-back.open{opacity:1;pointer-events:auto}
.modal-card{width:100%;max-width:400px;padding:24px;background:var(--surface);border:1px solid var(--border);
  border-radius:18px;box-shadow:0 24px 60px rgba(0,0,0,.4);transform:translateY(12px) scale(.98);
  transition:transform .2s var(--ease)}
.modal-back.open .modal-card{transform:none}
.modal-card .m-icon{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;margin-bottom:14px}
.modal-card .m-icon.danger{background:rgba(239,68,68,.14);color:var(--danger)}
.modal-card .m-icon.accent{background:var(--accent-soft);color:var(--accent)}
.modal-card h3{margin:0 0 6px;font-size:18px;font-family:'Plus Jakarta Sans'}
.modal-card p{margin:0 0 18px;font-size:14px;line-height:1.5;color:var(--text-muted)}
.modal-card .modal-input{margin-bottom:18px}
.modal-actions{display:flex;gap:10px;justify-content:flex-end}
.modal-actions .btn{padding:11px 20px}

/* ---- Spinner ---- */
.spinner{width:22px;height:22px;border:3px solid rgba(255,255,255,.25);
  border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001s !important;animation-iteration-count:1 !important}
}

/* ============ LIGHT / WHITE THEME ============ */
body.theme-light{
  --glass:rgba(255,255,255,.78);
  --glass-strong:#ffffff;
  --border:rgba(15,23,42,.12);
  --text-muted:#5B677A;
  --shadow-float:0 12px 34px rgba(15,23,42,.10);
  color:var(--text-primary);
}
body.theme-light .ambient{
  background:
    radial-gradient(900px 480px at 50% -12%, var(--accent-soft), transparent 70%),
    var(--primary);
}
body.theme-light .ambient::before{
  background-image:radial-gradient(rgba(15,23,42,.05) 1px, transparent 1px);
  opacity:.7;
}
/* cards get a soft shadow instead of relying on glow */
body.theme-light .glass{box-shadow:0 6px 22px rgba(15,23,42,.06)}
/* FIX: secondary/ghost buttons must use dark text on light surfaces (not white) */
body.theme-light .btn.secondary{background:#EEF1F6;color:var(--text-primary);border-color:var(--border)}
body.theme-light .btn.secondary:hover{background:#E2E7EF}
body.theme-light .btn.ghost{color:var(--text-primary);border-color:var(--border)}
body.theme-light .btn.ghost:hover{background:rgba(15,23,42,.04)}
/* coloured buttons keep white text (they have a coloured fill) */
body.theme-light .btn:not(.secondary):not(.ghost){color:#fff}
/* inputs */
body.theme-light .input,
body.theme-light .search-box input{background:#EEF1F6;border-color:var(--border);color:var(--text-primary)}
body.theme-light .input:focus{border-color:var(--accent);background:#fff}
body.theme-light .input::placeholder{color:#94A3B8}
/* toast */
body.theme-light .toast{background:#fff;box-shadow:0 10px 30px rgba(15,23,42,.14)}
/* dark-fill panels become light */
body.theme-light .badge,
body.theme-light .wait-info,
body.theme-light .status-badge,
body.theme-light .pc-note,
body.theme-light .camera-stage,
body.theme-light .qr-inline #qrCanvas{background:#EEF1F6}
body.theme-light .badge{border-color:var(--border)}
/* spinner on light buttons stays white (accent bg); on light surfaces darken */
body.theme-light .or-divider::before,
body.theme-light .or-divider::after{background:var(--border)}

/* ----- Admin / portal light overrides ----- */
body.theme-light .sidebar{background:rgba(255,255,255,.82)}
body.theme-light .nav-link:hover{background:rgba(15,23,42,.05)}
body.theme-light table.data td{border-bottom-color:rgba(15,23,42,.07)}
body.theme-light table.data th{border-bottom-color:var(--border)}
body.theme-light table.data tr:hover td{background:rgba(15,23,42,.035)}
body.theme-light .mini-table th{border-bottom-color:var(--border)}
body.theme-light .mini-table td,
body.theme-light .setting-row,
body.theme-light .recent-row,
body.theme-light .emp-row{border-bottom-color:rgba(15,23,42,.07)}
body.theme-light .tphoto,
body.theme-light .iconbtn,
body.theme-light .pager a,
body.theme-light .pager span,
body.theme-light .pill{background:rgba(15,23,42,.04)}
body.theme-light .switch .sl{background:rgba(15,23,42,.20)}
body.theme-light .drawer{background:#fff}
body.theme-light .tab.active,
body.theme-light .nav-link.active{background:var(--accent-soft)}
body.theme-light .color-field input[type=color]{background:#fff}
/* keep coloured pills readable on light */
body.theme-light .pill.green{background:rgba(16,185,129,.14)}
body.theme-light .pill.red{background:rgba(239,68,68,.12)}
body.theme-light .pill.amber{background:rgba(245,158,11,.16)}
body.theme-light .pill.violet{background:var(--accent-soft)}
