/* Dark mode is the default palette (no [data-theme] attribute needed) so the
   app still looks right even if JS is disabled. assets/theme.js sets
   [data-theme="light"] on <html> to opt into the light override below. */
:root{
  --bg:#11151c; --card:#1a1f29; --ink:#e7eaf0; --muted:#8c94a6; --border:#2b3140;
  --accent:#5b8cff; --accent-dark:#7ea3ff; --green:#34c98a; --green-bg:rgba(52,201,138,.16);
  --amber:#e3ac4b; --amber-bg:rgba(227,172,75,.16); --red:#f2564f; --red-bg:rgba(242,86,79,.16);
  --purple:#a98bff; --purple-bg:rgba(169,139,255,.18);
  --gray-bg:#242b38; --input-bg:#1e2430; --radius:10px;
  --shadow:0 1px 3px rgba(0,0,0,.45), 0 1px 2px rgba(0,0,0,.35);
}
[data-theme="light"]{
  --bg:#f4f6f8; --card:#ffffff; --ink:#1e2430; --muted:#6b7583; --border:#e1e5ea;
  --accent:#2f6fed; --accent-dark:#1f52c4; --green:#1e9e6a; --green-bg:#e6f7ef;
  --amber:#b8860b; --amber-bg:#fff6e0; --red:#d1372f; --red-bg:#fdeceb;
  --purple:#8a5cf6; --purple-bg:#f1ebff;
  --gray-bg:#eef1f4; --input-bg:#ffffff;
  --shadow:0 1px 3px rgba(20,25,35,.08), 0 1px 2px rgba(20,25,35,.06);
}
*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink);transition:background-color .15s,color .15s;}

/* ---------- Top bar / nav ---------- */
.topbar{background:var(--card);border-bottom:1px solid var(--border);padding:10px 20px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;position:sticky;top:0;z-index:20;box-shadow:var(--shadow);}
.brand{display:flex;align-items:center;}
.brand-logo{height:28px;width:auto;display:none;}
.brand-logo-dark{display:inline;}
[data-theme="light"] .brand-logo-dark{display:none;}
[data-theme="light"] .brand-logo-light{display:inline;}
.tabs{display:flex;gap:4px;background:var(--gray-bg);padding:3px;border-radius:8px;}
.tab-btn{border:none;background:transparent;padding:7px 14px;border-radius:6px;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;}
.tab-btn.active{background:var(--card);color:var(--ink);box-shadow:var(--shadow);}
.user-menu{margin-left:auto;display:flex;align-items:center;gap:10px;}
.user-chip{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;}
.role-badge{font-size:10.5px;text-transform:uppercase;letter-spacing:.03em;padding:2px 7px;border-radius:20px;font-weight:700;}
.role-badge.role-admin{background:var(--purple-bg);color:var(--purple);}
.role-badge.role-staff{background:var(--gray-bg);color:var(--muted);}

main{max-width:1280px;margin:0 auto;padding:20px 20px 90px;}
.view{display:none;}
.view.active{display:block;}

/* ---------- Theme toggle button ---------- */
.theme-toggle{border:1px solid var(--border);background:var(--card);color:var(--ink);width:34px;height:34px;border-radius:8px;font-size:15px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;padding:0;}
.theme-toggle:hover{background:var(--gray-bg);}

/* ---------- Buttons ---------- */
.btn{border:1px solid var(--border);background:var(--card);color:var(--ink);padding:9px 14px;border-radius:8px;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.15s;}
.btn:hover{background:var(--gray-bg);}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;}
.btn-primary:hover{background:var(--accent-dark);}
.btn-danger{color:var(--red);}
.btn-danger:hover{background:var(--red-bg);}
.btn-sm{padding:5px 9px;font-size:12.5px;border-radius:6px;}
.btn-block{width:100%;justify-content:center;padding:11px;}
.btn:disabled{opacity:.5;cursor:not-allowed;}

/* ---------- Alerts / overview ---------- */
.alerts{display:flex;gap:12px;margin-bottom:18px;flex-wrap:wrap;}
.alert-card{flex:1;min-width:150px;background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 16px;cursor:pointer;border:1px solid var(--border);border-left:4px solid var(--border);}
.alert-card .num{font-size:24px;font-weight:800;line-height:1;}
.alert-card .lbl{font-size:12.5px;color:var(--muted);margin-top:4px;font-weight:600;}
.alert-card.total{border-left-color:var(--accent);} .alert-card.total .num{color:var(--accent);}
.alert-card.spent{border-left-color:var(--green);} .alert-card.spent .num{color:var(--green);}
.alert-card.saved{border-left-color:var(--purple);} .alert-card.saved .num{color:var(--purple);}
.alert-card.pending{border-left-color:var(--amber);} .alert-card.pending .num{color:var(--amber);}

/* ---------- Toolbar ---------- */
.toolbar{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 14px;margin-bottom:16px;display:flex;gap:10px;flex-wrap:wrap;align-items:center;border:1px solid var(--border);}
.toolbar input[type=text], .toolbar select{padding:8px 10px;border:1px solid var(--border);border-radius:7px;font-size:14px;background:var(--input-bg);color:var(--ink);}
.toolbar input[type=text]{flex:1;min-width:180px;}
.spacer{flex:1;}
.toolbar-actions{display:flex;gap:8px;flex-wrap:wrap;}

/* ---------- Table ---------- */
table{width:100%;border-collapse:collapse;background:var(--card);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);}
thead th{background:var(--gray-bg);text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);padding:11px 12px;border-bottom:1px solid var(--border);cursor:pointer;white-space:nowrap;user-select:none;}
thead th:hover{color:var(--ink);}
tbody td{padding:11px 12px;border-bottom:1px solid var(--border);font-size:13.5px;vertical-align:middle;}
tbody tr:last-child td{border-bottom:none;}
tbody tr:hover{background:var(--gray-bg);}
.muted{color:var(--muted);}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;}
.strike{text-decoration:line-through;color:var(--muted);font-size:12px;}
.badge{display:inline-block;padding:3px 9px;border-radius:20px;font-size:11.5px;font-weight:700;white-space:nowrap;}
.badge.arrived{background:var(--green-bg);color:var(--green);}
.badge.pending{background:var(--amber-bg);color:var(--amber);}
.badge.pct{background:var(--purple-bg);color:var(--purple);}
.row-actions{display:flex;gap:6px;flex-wrap:wrap;}
.empty-state{text-align:center;padding:60px 20px;color:var(--muted);}
.empty-state h3{color:var(--ink);margin-bottom:6px;}

/* ---------- Modals ---------- */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;z-index:100;padding:16px;}
.modal-overlay.open{display:flex;}
.modal{background:var(--card);border-radius:12px;width:100%;max-width:560px;max-height:92vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.5);}
.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;background:var(--card);z-index:2;}
.modal-header h2{margin:0;font-size:16px;}
.modal-close{cursor:pointer;background:none;border:none;font-size:22px;color:var(--muted);line-height:1;padding:4px;}
.modal-body{padding:18px 20px;}
.modal-footer{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;position:sticky;bottom:0;background:var(--card);}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.form-grid .full{grid-column:1/-1;}
label{display:block;font-size:12px;font-weight:700;color:var(--muted);margin-bottom:4px;text-transform:uppercase;letter-spacing:.02em;}
input,select,textarea{width:100%;padding:9px 10px;border:1px solid var(--border);border-radius:7px;font-size:16px;font-family:inherit;background:var(--input-bg);color:var(--ink);}
input:disabled,select:disabled,textarea:disabled{background:var(--gray-bg);color:var(--muted);cursor:not-allowed;}
textarea{resize:vertical;min-height:50px;}
.field{margin-bottom:2px;}
.hint{font-size:11.5px;color:var(--muted);margin-top:3px;}
.section-title{font-size:13px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin:18px 0 8px;}

/* ---------- Toasts ---------- */
.toast-wrap{position:fixed;bottom:20px;right:20px;z-index:200;display:flex;flex-direction:column;gap:8px;max-width:calc(100vw - 40px);}
.toast{background:#232a35;color:#fff;padding:10px 16px;border-radius:8px;font-size:13.5px;box-shadow:0 4px 14px rgba(0,0,0,.35);animation:fade .3s;}
.toast.success{background:var(--green);color:#0c2117;}
.toast.error{background:var(--red);color:#2a0d0b;}
@keyframes fade{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}

/* ---------- Footer ---------- */
.app-footer{text-align:center;color:var(--muted);font-size:12px;padding:22px 16px 26px;line-height:1.7;}

/* ---------- Auth pages ---------- */
.auth-body{display:flex;flex-direction:column;min-height:100vh;}
.auth-wrap{flex:1;display:flex;align-items:center;justify-content:center;padding:20px;position:relative;}
.auth-theme-toggle{position:absolute;top:20px;right:20px;}
.auth-card{background:var(--card);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);padding:30px 28px;width:100%;max-width:400px;}
.auth-logo{text-align:center;margin-bottom:6px;}
.auth-logo img{height:36px;width:auto;display:none;}
.auth-logo img.brand-logo-dark{display:inline;}
[data-theme="light"] .auth-logo img.brand-logo-dark{display:none;}
[data-theme="light"] .auth-logo img.brand-logo-light{display:inline;}
.auth-sub{color:var(--muted);font-size:13.5px;margin:0 0 20px;text-align:center;}
.auth-card form .field{margin-bottom:14px;}
.auth-error{background:var(--red-bg);color:var(--red);padding:10px 12px;border-radius:8px;font-size:13px;margin-bottom:16px;}
.auth-alt{text-align:center;font-size:13px;color:var(--muted);margin:18px 0 0;}
.auth-alt a{color:var(--accent);font-weight:600;text-decoration:none;}
.auth-alt a:hover{text-decoration:underline;}

/* ---------- Admin panel ---------- */
.admin-grid{display:grid;gap:14px;}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;}
.card-title{margin:0 0 12px;font-size:15px;}
.setting-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid var(--border);}
.setting-row:last-child{border-bottom:none;padding-bottom:0;}
.setting-row:first-child{padding-top:0;}
.setting-label{font-weight:600;font-size:13.5px;}
.setting-control{display:flex;align-items:center;gap:8px;}
.setting-control input[type=text]{width:90px;text-align:center;text-transform:uppercase;}

.switch{position:relative;display:inline-block;width:44px;height:26px;flex-shrink:0;cursor:pointer;}
.switch input{opacity:0;width:0;height:0;position:absolute;}
.switch-track{position:absolute;inset:0;background:var(--border);border-radius:20px;transition:.2s;}
.switch-thumb{position:absolute;top:3px;left:3px;width:20px;height:20px;background:#fff;border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.3);}
.switch input:checked + .switch-track{background:var(--accent);}
.switch input:checked + .switch-track .switch-thumb{transform:translateX(18px);}

.users-table select{width:auto;padding:5px 8px;font-size:13px;}
.perm-checkbox-list{display:flex;flex-direction:column;gap:10px;}
.perm-checkbox{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;font-weight:500;text-transform:none;letter-spacing:0;cursor:pointer;}
.perm-checkbox input{width:auto;margin-top:2px;}

/* ---------- Mobile ---------- */
@media (max-width:760px){
  .form-grid{grid-template-columns:1fr;}
  .alerts{flex-direction:row;flex-wrap:wrap;}
  .alert-card{min-width:calc(50% - 6px);}
  .desktop-only{display:none;}
  .topbar{padding:10px 14px;gap:10px;}
  .brand-logo{height:24px;}
  .user-chip span.username-text{display:none;}

  /* Responsive table -> stacked cards */
  table thead{display:none;}
  table, table tbody, table tr, table td{display:block;width:100%;}
  table{box-shadow:none;background:transparent;}
  table tbody tr{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:10px;padding:8px 4px;border:1px solid var(--border);}
  table td{border-bottom:none;padding:6px 12px;display:flex;justify-content:space-between;align-items:flex-start;gap:10px;text-align:right;}
  table td::before{content:attr(data-label);font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);font-weight:700;text-align:left;}
  table td.row-actions-cell{justify-content:flex-end;}
  table td.row-actions-cell::before{content:"";}
}
@media (max-width:420px){
  .alert-card{min-width:100%;}
}
