/*
 * Mess Manager — Design System v5
 * Premium dark theme.
 */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ── Tokens ──────────────────────────────────────────────────────────────────── */
:root {
  --font: 'Inter', system-ui, -apple-system, sans-serif;

  --bg:       #08080f;
  --surface:  #0f0f1b;
  --surface2: #161622;
  --surface3: #1e1e2e;
  --surface4: #26263a;
  --border:   #232336;
  --border2:  #1a1a28;

  --accent:     #6366f1;
  --accent-h:   #818cf8;
  --accent-dk:  #4f46e5;
  --accent-dim: rgba(99,102,241,0.12);
  --accent-glow:rgba(99,102,241,0.08);

  --text:   #eeeef8;
  --text2:  #c0c0d8;
  --muted:  #686884;
  --muted2: #44445a;

  --success:      #10b981;
  --success-dim:  rgba(16,185,129,0.10);
  --warning:      #f59e0b;
  --warning-dim:  rgba(245,158,11,0.10);
  --danger:       #f43f5e;
  --danger-dim:   rgba(244,63,94,0.10);
  --info:         #3b82f6;
  --info-dim:     rgba(59,130,246,0.10);

  --r-xs: 4px; --r-sm: 6px; --r-md: 8px; --r-lg: 12px;
  --r-xl: 16px; --r-2xl: 20px; --r-3xl: 24px; --r-full: 9999px;

  --shadow-sm: 0 1px 4px rgba(0,0,0,0.5);
  --shadow-md: 0 4px 20px rgba(0,0,0,0.55);
  --shadow-lg: 0 8px 40px rgba(0,0,0,0.65);
  --shadow-xl: 0 20px 60px rgba(0,0,0,0.75);

  --t:      180ms cubic-bezier(.4,0,.2,1);
  --t-fast: 100ms ease;

  --sidebar-w: 264px;
  --topnav-h:  68px;
  --content-max: 1560px;
}

/* ── Base ─────────────────────────────────────────────────────────────────────── */
html, body {
  margin:0; padding:0; width:100%; height:100%;
}
body.mm-app-page {
  overflow:hidden;
  font-family:var(--font); background:var(--bg); color:var(--text);
  font-size:15px; line-height:1.5;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}

/* Pinned to the viewport. The JS boot moves this node to be a direct child of
   <body> so this fixed positioning is relative to the viewport, not a theme wrapper. */
#mm-app     { position:fixed; inset:0; overflow:hidden; display:flex; flex-direction:column; z-index:100000; background:var(--bg); }
.mm-root    { flex:1; display:flex; flex-direction:column; min-height:0; width:100%; }
.mm-root > div { flex:1; display:flex; flex-direction:column; min-height:0; width:100%; }
.mm-app     { display:flex; flex:1; min-height:0; width:100%; overflow:hidden; font-family:var(--font); background:var(--bg); color:var(--text); }

/* ── Boot ─────────────────────────────────────────────────────────────────────── */
.mm-boot-screen {
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  flex:1; background:var(--bg); gap:16px;
}
.mm-boot-screen p { font-size:13px; color:var(--muted); letter-spacing:0.3px; }

@keyframes spin  { to { transform:rotate(360deg); } }
@keyframes fadeIn{ from{opacity:0} to{opacity:1} }
@keyframes slideUp{ from{transform:translateY(14px);opacity:0} to{transform:translateY(0);opacity:1} }

/* ── Fluid view transitions (login ⇄ dashboard, etc.) ───────────────────────── */
.mm-view-enter-active { transition:opacity .42s cubic-bezier(.22,.61,.36,1), transform .42s cubic-bezier(.22,.61,.36,1); }
.mm-view-leave-active { transition:opacity .26s ease, transform .26s ease; }
.mm-view-enter-from   { opacity:0; transform:translateY(16px) scale(.985); }
.mm-view-leave-to     { opacity:0; transform:translateY(-10px) scale(.99); }
.mm-view-enter-to,
.mm-view-leave-from   { opacity:1; transform:translateY(0) scale(1); }
@media (prefers-reduced-motion: reduce) {
  .mm-view-enter-active, .mm-view-leave-active { transition:opacity .2s ease; }
  .mm-view-enter-from, .mm-view-leave-to { transform:none; }
}

.mm-spinner    { width:22px; height:22px; border:2px solid var(--surface4);    border-top-color:var(--accent); border-radius:50%; animation:spin .65s linear infinite; display:inline-block; }
.mm-spinner-sm { width:14px; height:14px; border:1.5px solid rgba(255,255,255,.15); border-top-color:currentColor; border-radius:50%; animation:spin .65s linear infinite; display:inline-block; }
.mm-spinner-lg { width:40px; height:40px; border:2.5px solid var(--surface4); border-top-color:var(--accent); border-radius:50%; animation:spin .7s linear infinite; display:inline-block; }
.mm-loading-screen { display:flex; align-items:center; justify-content:center; min-height:200px; width:100%; }

/* ── Login ────────────────────────────────────────────────────────────────────── */
.mm-login-page {
  display:flex; width:100%; min-height:100%; background:var(--bg); align-items:center; justify-content:center; padding:32px;
  background-image:
    radial-gradient(ellipse 80% 60% at 20% -10%, rgba(99,102,241,.14) 0%, transparent 60%),
    radial-gradient(ellipse 60% 50% at 80% 110%, rgba(99,102,241,.08) 0%, transparent 60%);
}
.mm-login-card {
  width:100%; max-width:440px;
  background:linear-gradient(165deg, var(--surface2), var(--surface));
  border:1px solid var(--border);
  border-radius:var(--r-3xl); padding:52px 46px;
  box-shadow:var(--shadow-xl), 0 0 0 1px rgba(255,255,255,.03) inset;
}
.mm-login-logo { text-align:center; margin-bottom:42px; }
.mm-logo-mark {
  width:64px; height:64px; border-radius:var(--r-2xl);
  background:linear-gradient(135deg, rgba(99,102,241,.28), rgba(99,102,241,.08));
  border:1px solid rgba(99,102,241,.35);
  box-shadow:0 0 24px rgba(99,102,241,.18);
  display:inline-flex; align-items:center; justify-content:center;
  font-size:28px; font-weight:800; color:var(--accent); margin-bottom:22px; letter-spacing:-1px;
}
.mm-login-logo h1 { font-size:26px; font-weight:700; color:var(--text); letter-spacing:-.7px; margin-bottom:7px; }
.mm-login-logo p  { font-size:14px; color:var(--muted); }
.mm-login-form   { display:flex; flex-direction:column; gap:20px; }
.mm-login-footer { text-align:center; margin-top:22px; }

.mm-field-row { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.mm-check-label { display:flex; align-items:center; gap:7px; font-size:13px; color:var(--muted); cursor:pointer; user-select:none; }
.mm-check-label input[type=checkbox] { accent-color:var(--accent); width:14px; height:14px; }

/* ── Forms ────────────────────────────────────────────────────────────────────── */
.mm-field { display:flex; flex-direction:column; gap:6px; }
.mm-label { font-size:12.5px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.5px; }
.mm-required { color:var(--danger); margin-left:2px; }

.mm-input {
  width:100%; padding:12px 15px; border-radius:var(--r-md);
  border:1px solid var(--border); background:var(--surface2);
  color:var(--text); font-size:15px; font-family:var(--font);
  transition:border-color var(--t), box-shadow var(--t), background var(--t);
  outline:none; -webkit-appearance:none; -moz-appearance:none;
  box-sizing:border-box;
}
.mm-input::placeholder { color:var(--muted2); }
.mm-input:hover:not(:focus) { border-color:var(--surface4); }
.mm-input:focus { border-color:var(--accent); background:var(--surface3); box-shadow:0 0 0 3px var(--accent-dim); }
.mm-input-sm { padding:10px 13px; font-size:14px; }

/* Minimal fallback for any stray native <select> (app uses <mm-select> instead) */
select { appearance:none; -webkit-appearance:none; -moz-appearance:none; width:100%; padding:12px 15px; border-radius:var(--r-md); border:1px solid var(--border); background-color:var(--surface2); color:var(--text); font-size:15px; font-family:var(--font); cursor:pointer; outline:none; box-sizing:border-box; }

/* ── MmSelect — fully themed dropdown (open popup styleable, unlike native select) ── */
.mm-select2 { position:relative; width:100%; font-family:var(--font); }
.mm-select2-trigger {
  width:100%; display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:12px 15px; border-radius:var(--r-md); border:1px solid var(--border);
  background:var(--surface2); color:var(--text); font-size:15px; font-family:var(--font);
  cursor:pointer; outline:none; box-sizing:border-box; text-align:left;
  transition:border-color var(--t), box-shadow var(--t), background var(--t);
}
.mm-select2-trigger:hover { border-color:var(--surface4); background:var(--surface3); }
.mm-select2.is-open .mm-select2-trigger { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-dim); background:var(--surface3); }
.mm-select2.is-disabled { opacity:.5; pointer-events:none; }
.mm-select2-value { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mm-select2-value.is-placeholder { color:var(--muted2); }
.mm-select2-chevron { color:var(--muted); font-size:12px; transition:transform var(--t); }
.mm-select2.is-open .mm-select2-chevron { transform:rotate(180deg); color:var(--accent-h); }

.mm-select2-sm .mm-select2-trigger { padding:10px 13px; font-size:14px; }

.mm-select2-panel {
  position:absolute; top:calc(100% + 6px); left:0; right:0; z-index:1200;
  background:var(--surface3); border:1px solid var(--border); border-radius:var(--r-md);
  box-shadow:0 12px 32px rgba(0,0,0,.45); overflow:hidden;
  animation:mm-select2-in .14s ease;
}
@keyframes mm-select2-in { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }

.mm-select2-search { padding:8px; border-bottom:1px solid var(--border); }
.mm-select2-search input {
  width:100%; padding:8px 11px; border-radius:var(--r-sm); border:1px solid var(--border);
  background:var(--surface2); color:var(--text); font-size:14px; font-family:var(--font); outline:none; box-sizing:border-box;
}
.mm-select2-search input:focus { border-color:var(--accent); }

.mm-select2-list { max-height:240px; overflow-y:auto; padding:5px; }
.mm-select2-list::-webkit-scrollbar { width:8px; }
.mm-select2-list::-webkit-scrollbar-thumb { background:var(--surface4); border-radius:4px; }
.mm-select2-empty { padding:14px; text-align:center; color:var(--muted2); font-size:13px; }
.mm-select2-option {
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  padding:10px 12px; border-radius:var(--r-sm); cursor:pointer; font-size:14.5px; color:var(--text2);
  transition:background var(--t), color var(--t);
}
.mm-select2-option.is-active { background:var(--surface4); color:var(--text); }
.mm-select2-option.is-selected { color:var(--accent-h); font-weight:600; }
.mm-select2-option.is-active.is-selected { background:var(--accent-dim); }
.mm-select2-option-label { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mm-select2-check { color:var(--accent-h); font-size:13px; }

/* ── Specialized inputs (date/time/email/number/tel/url) ──────────────── */
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="email"],
input[type="number"],
input[type="tel"],
input[type="url"],
textarea {
  -webkit-appearance:none !important;
  -moz-appearance:none !important;
  appearance:none !important;
}

/* Date/time calendar picker icon (inverted for dark theme) */
input[type="date"]::-webkit-calendar-picker-indicator,
input[type="time"]::-webkit-calendar-picker-indicator,
input[type="datetime-local"]::-webkit-calendar-picker-indicator {
  filter:invert(0.8) brightness(1.2);
  cursor:pointer;
  padding:4px;
}

/* Number input spinner (hide then style) */
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance:none !important;
  margin:0;
  display:none;
}

input[type="number"] { text-align:left; }

/* Textarea styling */
textarea {
  font-family:var(--font);
  padding:12px 15px;
  border:1px solid var(--border);
  background:var(--surface2);
  color:var(--text);
  border-radius:var(--r-md);
  resize:vertical;
  line-height:1.5;
  transition:border-color var(--t), box-shadow var(--t), background var(--t);
}
textarea:focus {
  border-color:var(--accent);
  background:var(--surface3);
  box-shadow:0 0 0 3px var(--accent-dim);
  outline:none;
}

/* Range slider styling */
input[type="range"] {
  width:100%;
  cursor:pointer;
  accent-color:var(--accent);
}

/* ── Select/Dropdown (fully themed, no browser defaults) ──────────────────── */
select,
.mm-select {
  /* Base styling */
  display:block;
  width:100% !important;
  padding:12px 15px !important;
  border-radius:var(--r-md) !important;
  border:1px solid var(--border) !important;
  background-color:var(--surface2) !important;
  color:var(--text) !important;
  font-size:15px !important;
  font-family:var(--font) !important;
  font-weight:400 !important;
  cursor:pointer !important;
  outline:none !important;

  /* Hide browser defaults completely */
  appearance:none !important;
  -webkit-appearance:none !important;
  -moz-appearance:none !important;
  -ms-appearance:none !important;

  /* Custom arrow */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23686884' d='M5 6L0 0h10z'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:right 14px center !important;
  background-size:10px 6px !important;
  background-attachment:scroll !important;
  padding-right:36px !important;

  /* Transitions */
  transition:border-color var(--t), box-shadow var(--t), background-color var(--t) !important;
  box-sizing:border-box !important;
  text-overflow:ellipsis !important;

  /* Remove default styling */
  border-collapse:collapse !important;
  vertical-align:baseline !important;
}

/* Absolutely hide browser dropdown arrows across all browsers */
select::-webkit-scrollbar { width:8px; }
select::-webkit-scrollbar-track { background:var(--surface2); }
select::-webkit-scrollbar-thumb { background:var(--surface4); border-radius:4px; }
select::-ms-expand { display:none !important; width:0 !important; height:0 !important; }
select::-moz-appearance { appearance:none !important; }

/* Focus/hover/active states */
select:focus,
.mm-select:focus {
  border-color:var(--accent) !important;
  box-shadow:0 0 0 3px var(--accent-dim) !important;
  outline:none !important;
  background-color:var(--surface3) !important;
}

select:hover:not(:focus),
.mm-select:hover:not(:focus) {
  border-color:var(--surface4) !important;
  background-color:var(--surface3) !important;
}

select:active,
.mm-select:active {
  border-color:var(--accent) !important;
}

/* Size variants */
.mm-select-sm {
  padding:10px 13px !important;
  font-size:14px !important;
  padding-right:32px !important;
}

/* Style option elements in dropdown */
select option,
.mm-select option {
  background:var(--surface2) !important;
  color:var(--text) !important;
  padding:8px 12px !important;
  margin:2px 0 !important;
  border:none !important;
  font-size:15px !important;
  line-height:1.4 !important;
}

select option:checked,
.mm-select option:checked {
  background:var(--accent) linear-gradient(var(--accent), var(--accent)) !important;
  color:#fff !important;
  font-weight:500 !important;
}

select option:hover,
.mm-select option:hover {
  background:var(--surface3) !important;
  color:var(--text) !important;
}

.mm-checklist { display:flex; flex-wrap:wrap; gap:8px 18px; padding:12px 14px; border:1px solid var(--border); border-radius:var(--r-md); background:var(--surface2); }

.mm-field-error { font-size:12.5px; color:var(--danger); }
.mm-form-note   { font-size:12.5px; color:var(--muted); line-height:1.5; }
.mm-form-grid   { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
.mm-col-full    { grid-column:1/-1; }
@media (max-width:640px) { .mm-form-grid { grid-template-columns:1fr; } }

/* ── Buttons ─────────────────────────────────────────────────────────────────── */
.mm-btn {
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  padding:11px 22px; border-radius:var(--r-md); font-size:14.5px; font-weight:600;
  font-family:var(--font); border:1px solid transparent; cursor:pointer;
  transition:all var(--t); white-space:nowrap; letter-spacing:-.1px;
}
.mm-btn:disabled, .mm-btn.loading { opacity:.45; cursor:not-allowed; }
.mm-btn-primary  { background:var(--accent); color:#fff; border-color:var(--accent); box-shadow:0 1px 4px rgba(99,102,241,.35); }
.mm-btn-primary:hover:not(:disabled)  { background:var(--accent-h); border-color:var(--accent-h); box-shadow:0 4px 14px rgba(99,102,241,.4); }
.mm-btn-ghost    { background:transparent; border-color:var(--border); color:var(--text2); }
.mm-btn-ghost:hover:not(:disabled)    { background:var(--surface2); border-color:var(--surface4); }
.mm-btn-success  { background:var(--success); color:#000; border-color:var(--success); }
.mm-btn-success:hover:not(:disabled)  { background:#0d9f6e; }
.mm-btn-danger   { background:var(--danger);  color:#fff; border-color:var(--danger); }
.mm-btn-danger:hover:not(:disabled)   { background:#e02b4f; }
.mm-btn-block { width:100%; }
.mm-btn-sm { padding:9px 16px; font-size:13.5px; }
.mm-btn-xs { padding:5px 12px; font-size:12.5px; border-radius:var(--r-sm); }
.mm-btn-lg { padding:14px 28px; font-size:15.5px; border-radius:var(--r-lg); }

.mm-link { background:none; border:none; cursor:pointer; font-size:13px; color:var(--accent); font-family:var(--font); padding:0; transition:color var(--t); }
.mm-link:hover { color:var(--accent-h); text-decoration:underline; }

/* ── Alerts ─────────────────────────────────────────────────────────────────── */
.mm-alert { padding:12px 15px; border-radius:var(--r-md); font-size:13px; line-height:1.5; border:1px solid; }
.mm-alert-error   { background:var(--danger-dim);  border-color:rgba(244,63,94,.25);   color:#fca5a5; }
.mm-alert-success { background:var(--success-dim); border-color:rgba(16,185,129,.25);  color:#6ee7b7; }
.mm-alert-info    { background:var(--info-dim);    border-color:rgba(59,130,246,.25);  color:#93c5fd; }

/* ── Toast ──────────────────────────────────────────────────────────────────── */
.mm-toast {
  position:fixed; bottom:24px; right:24px; z-index:9999;
  padding:12px 16px 12px 14px; border-radius:var(--r-lg); font-size:13px; font-weight:500;
  max-width:340px; box-shadow:var(--shadow-lg);
  display:flex; align-items:center; gap:10px;
}
.mm-toast-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; }
.mm-toast-success { background:#081e12; color:#6ee7b7; border:1px solid rgba(16,185,129,.25); }
.mm-toast-success .mm-toast-dot { background:var(--success); }
.mm-toast-error   { background:#1e0810; color:#fca5a5; border:1px solid rgba(244,63,94,.25); }
.mm-toast-error .mm-toast-dot   { background:var(--danger); }
.mm-toast-info    { background:#071228; color:#93c5fd; border:1px solid rgba(59,130,246,.25); }
.mm-toast-info .mm-toast-dot    { background:var(--info); }
.mm-toast-enter-active,.mm-toast-leave-active { transition:all .25s cubic-bezier(.4,0,.2,1); }
.mm-toast-enter-from,.mm-toast-leave-to { transform:translateY(8px) scale(.97); opacity:0; }

/* ── Badges ─────────────────────────────────────────────────────────────────── */
.mm-badge {
  display:inline-flex; align-items:center; gap:5px;
  padding:4px 11px; border-radius:var(--r-full);
  font-size:11.5px; font-weight:600; letter-spacing:.3px; text-transform:uppercase; white-space:nowrap;
}
.mm-badge::before { content:''; width:4px; height:4px; border-radius:50%; flex-shrink:0; }
.mm-badge-success { background:var(--success-dim); color:var(--success); }
.mm-badge-success::before { background:var(--success); }
.mm-badge-warning { background:var(--warning-dim); color:var(--warning); }
.mm-badge-warning::before { background:var(--warning); }
.mm-badge-danger  { background:var(--danger-dim);  color:var(--danger);  }
.mm-badge-danger::before  { background:var(--danger); }
.mm-badge-info    { background:var(--info-dim);    color:var(--info);    }
.mm-badge-info::before    { background:var(--info); }
.mm-badge-muted   { background:var(--surface3);    color:var(--muted);   }
.mm-badge-muted::before   { background:var(--muted2); }

/* ── Avatar ─────────────────────────────────────────────────────────────────── */
.mm-avatar {
  width:36px; height:36px; border-radius:var(--r-full);
  background:var(--accent-dim); border:1px solid rgba(99,102,241,.2);
  display:flex; align-items:center; justify-content:center;
  font-size:14px; font-weight:700; color:var(--accent); flex-shrink:0;
}
.mm-cell-user { display:flex; align-items:center; gap:12px; }
.mm-cell-user strong { color:var(--text); font-weight:600; }

/* ── Count chip ─────────────────────────────────────────────────────────────── */
.mm-count { display:inline-block; background:var(--surface3); border:1px solid var(--border); border-radius:var(--r-full); font-size:11px; font-weight:600; padding:1px 7px; color:var(--muted); margin-left:6px; vertical-align:middle; }

/* ── Cards ───────────────────────────────────────────────────────────────────── */
.mm-card { border-radius:var(--r-xl); border:1px solid var(--border); background:var(--surface); overflow:hidden; }
.mm-card-header { padding:18px 24px; border-bottom:1px solid var(--border); }
.mm-card-header h3 { font-size:12px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.6px; }
.mm-card-body { padding:24px; }

/* ── Modals ──────────────────────────────────────────────────────────────────── */
.mm-modal-backdrop {
  position:fixed; inset:0; background:rgba(0,0,0,.82);
  backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  z-index:1000; display:flex; align-items:center; justify-content:center; padding:24px;
  animation:fadeIn .15s ease;
}
.mm-modal {
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-3xl);
  box-shadow:var(--shadow-xl), 0 0 0 1px rgba(255,255,255,.04) inset;
  width:100%; max-height:92vh; overflow-y:auto;
  animation:slideUp .2s cubic-bezier(.4,0,.2,1);
}
.mm-modal-sm { max-width:460px; }
.mm-modal-md { max-width:580px; }
.mm-modal-lg { max-width:820px; }
.mm-modal-header {
  display:flex; align-items:center; justify-content:space-between;
  padding:24px 28px 20px; border-bottom:1px solid var(--border);
  position:sticky; top:0; background:var(--surface); z-index:1;
}
.mm-modal-header h3 { font-size:17px; font-weight:700; color:var(--text); letter-spacing:-.4px; }
.mm-modal-close { background:none; border:none; color:var(--muted); cursor:pointer; width:34px; height:34px; display:flex; align-items:center; justify-content:center; border-radius:var(--r-md); transition:all var(--t); font-size:18px; }
.mm-modal-close:hover { color:var(--text); background:var(--surface2); }
.mm-modal-body   { padding:28px; }
.mm-modal-footer { padding:18px 28px 28px; display:flex; gap:10px; justify-content:flex-end; border-top:1px solid var(--border); }

/* ── Tables ──────────────────────────────────────────────────────────────────── */
.mm-table-wrapper { overflow-x:auto; border-radius:var(--r-xl); border:1px solid var(--border); background:var(--surface); }
.mm-table { width:100%; border-collapse:collapse; font-size:14px; }
.mm-table thead tr { background:var(--surface2); }
.mm-table th { padding:14px 18px; text-align:left; font-size:11px; font-weight:600; letter-spacing:.6px; text-transform:uppercase; color:var(--muted); white-space:nowrap; border-bottom:1px solid var(--border); }
.mm-table td { padding:16px 18px; color:var(--text2); border-bottom:1px solid var(--border2); vertical-align:middle; }
.mm-table tr:hover td { background:rgba(255,255,255,.022); }
.mm-table tbody tr:last-child td { border-bottom:none; }
.mm-table-empty { text-align:center; color:var(--muted); padding:64px; font-size:14px; }
.mm-action-cell { display:flex; gap:8px; align-items:center; opacity:0; transition:opacity var(--t); }
.mm-table tr:hover .mm-action-cell { opacity:1; }
.nowrap { white-space:nowrap; }
code { font-size:12.5px; background:var(--surface3); padding:3px 9px; border-radius:var(--r-sm); color:var(--text2); font-family:'Courier New',monospace; border:1px solid var(--border2); }

/* ── Pagination ─────────────────────────────────────────────────────────────── */
.mm-pagination { display:flex; align-items:center; gap:8px; padding:10px 14px; font-size:12px; color:var(--muted); justify-content:flex-end; border-top:1px solid var(--border); }
.mm-pagination button { background:var(--surface2); border:1px solid var(--border); color:var(--text2); padding:5px 12px; border-radius:var(--r-md); font-size:12px; cursor:pointer; transition:all var(--t); font-family:var(--font); }
.mm-pagination button:hover:not(:disabled) { background:var(--surface3); border-color:var(--surface4); }
.mm-pagination button:disabled { opacity:.3; cursor:not-allowed; }

/* ── KPI Cards ───────────────────────────────────────────────────────────────── */
.kpi-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(240px,1fr)); gap:18px; margin-bottom:28px; }

.mm-stat-card {
  padding:26px 28px 28px; border-radius:var(--r-2xl); border:1px solid var(--border);
  background:linear-gradient(160deg, var(--surface2), var(--surface));
  position:relative; overflow:hidden;
  transition:border-color var(--t), transform var(--t), box-shadow var(--t);
}
.mm-stat-card:hover { border-color:var(--surface4); transform:translateY(-3px); box-shadow:var(--shadow-md); }
.mm-stat-card::before { content:''; position:absolute; top:0; left:0; right:0; height:3px; border-radius:var(--r-2xl) var(--r-2xl) 0 0; }
.mm-stat-primary::before { background:linear-gradient(90deg,var(--accent),var(--accent-h)); }
.mm-stat-success::before { background:linear-gradient(90deg,var(--success),#34d399); }
.mm-stat-warning::before { background:linear-gradient(90deg,var(--warning),#fbbf24); }
.mm-stat-danger::before  { background:linear-gradient(90deg,var(--danger), #fb7185); }
.mm-stat-info::before    { background:linear-gradient(90deg,var(--info),   #60a5fa); }

.mm-stat-value { font-size:clamp(34px,3vw,44px); font-weight:700; color:var(--text); letter-spacing:-2px; line-height:1.05; }
.mm-stat-label { font-size:12px; color:var(--muted); font-weight:600; text-transform:uppercase; letter-spacing:.6px; margin-top:14px; }
.mm-stat-sub   { font-size:12px; color:var(--muted2); margin-top:5px; }

/* ── Dashboard Metrics ─────────────────────────────────────────────────────── */
.dash-metrics { display:grid; grid-template-columns:repeat(auto-fit, minmax(320px,1fr)); gap:18px; }

.dash-metric-card {
  background:linear-gradient(160deg, var(--surface2), var(--surface));
  border:1px solid var(--border);
  border-radius:var(--r-2xl); padding:28px 30px; display:flex; flex-direction:column; gap:18px;
}
.dash-metric-header { display:flex; align-items:center; justify-content:space-between; }
.dash-metric-title  { font-size:12.5px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.5px; }
.dash-pct { font-size:clamp(30px,2.6vw,38px); font-weight:700; letter-spacing:-1.4px; line-height:1; }
.dash-pct-success { color:var(--success); }
.dash-pct-warning { color:var(--warning); }
.dash-pct-danger  { color:var(--danger); }
.dash-metric-sub  { font-size:13px; color:var(--muted2); margin-top:-6px; }

.progress-track { height:7px; background:var(--surface3); border-radius:var(--r-full); overflow:hidden; }
.progress-fill  { height:100%; border-radius:var(--r-full); transition:width .5s cubic-bezier(.4,0,.2,1); min-width:3px; }
.progress-success { background:linear-gradient(90deg,var(--success),#34d399); }
.progress-warning { background:linear-gradient(90deg,var(--warning),#fbbf24); }
.progress-danger  { background:linear-gradient(90deg,var(--danger), #fb7185); }
.progress-info    { background:linear-gradient(90deg,var(--info),   #60a5fa); }
.progress-primary { background:linear-gradient(90deg,var(--accent), var(--accent-h)); }

/* ── Empty states ────────────────────────────────────────────────────────────── */
.mm-empty-state,.mm-empty { text-align:center; padding:52px 24px; color:var(--muted); font-size:13px; }
.mm-empty-icon { font-size:36px; margin-bottom:12px; opacity:.4; display:block; }

/* ── Panel layout ────────────────────────────────────────────────────────────── */
.mm-main { flex:1; overflow-y:auto; padding:clamp(24px,2.6vw,44px) clamp(22px,3.4vw,56px); background:var(--bg); min-width:0; }
.mm-main > * { width:100%; max-width:var(--content-max); margin-inline:auto; }

.panel-header {
  display:flex; align-items:flex-start; justify-content:space-between;
  gap:18px; margin-bottom:28px;
}
.panel-header-left { display:flex; flex-direction:column; gap:4px; min-width:0; }
.panel-title { font-size:clamp(22px,2vw,28px); font-weight:700; color:var(--text); letter-spacing:-.8px; line-height:1.15; }
.panel-sub   { font-size:14px; color:var(--muted); }
.panel-header-actions { display:flex; gap:10px; align-items:center; flex-shrink:0; }
.panel-header .mm-select,.panel-header .mm-input { width:auto; min-width:170px; max-width:260px; }

.panel-filters {
  display:grid; grid-template-columns:repeat(auto-fit, minmax(220px,1fr)); gap:14px; margin-bottom:22px;
  padding:18px; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-xl);
}
.panel-filters .mm-input, .panel-filters .mm-select { width:100%; }
.panel-filters-search { grid-column:1/-1; }

/* ── Sidebar ─────────────────────────────────────────────────────────────────── */
.mm-sidebar-shell { flex-direction:row; }

.mm-sidebar {
  width:var(--sidebar-w); flex-shrink:0;
  background:var(--surface); border-right:1px solid var(--border);
  display:flex; flex-direction:column; align-self:stretch;
}

.mm-sidebar-brand {
  padding:0 22px; height:var(--topnav-h); display:flex; align-items:center; gap:13px;
  border-bottom:1px solid var(--border); flex-shrink:0;
}
.mm-brand-mark {
  width:40px; height:40px; border-radius:var(--r-lg);
  background:linear-gradient(135deg, rgba(99,102,241,.3), rgba(99,102,241,.08));
  border:1px solid rgba(99,102,241,.35);
  display:flex; align-items:center; justify-content:center;
  font-size:19px; font-weight:800; color:var(--accent); flex-shrink:0;
  box-shadow:0 0 14px rgba(99,102,241,.14);
}
.mm-brand-info { flex:1; min-width:0; }
.mm-brand-name { font-size:15.5px; font-weight:700; color:var(--text); letter-spacing:-.3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mm-brand-role { font-size:11px; color:var(--muted); text-transform:uppercase; letter-spacing:.5px; margin-top:2px; }

.mm-sidebar-nav { flex:1; padding:14px 12px; display:flex; flex-direction:column; gap:3px; overflow-y:auto; }

.mm-sidebar-item {
  display:flex; align-items:center; gap:12px; padding:11px 13px;
  background:none; border:none; font-size:14.5px; font-weight:500; color:var(--muted);
  cursor:pointer; border-radius:var(--r-md); transition:all var(--t);
  font-family:var(--font); text-align:left; width:100%; position:relative;
}
.mm-sidebar-item:hover  { color:var(--text2); background:var(--surface2); }
.mm-sidebar-item.active { color:var(--text);  background:var(--surface3); font-weight:600; }
.mm-sidebar-item.active::before {
  content:''; position:absolute; left:0; top:50%; transform:translateY(-50%);
  width:3px; height:62%; border-radius:0 var(--r-full) var(--r-full) 0;
  background:var(--accent); box-shadow:0 0 8px rgba(99,102,241,.5);
}
.nav-icon  { width:20px; height:20px; display:flex; align-items:center; justify-content:center; flex-shrink:0; opacity:.7; }
.nav-icon svg { width:20px; height:20px; display:block; }
.mm-sidebar-item.active .nav-icon { opacity:1; color:var(--accent); }
.nav-label { flex:1; }

.mm-sidebar-footer {
  padding:16px 16px; border-top:1px solid var(--border);
  display:flex; align-items:center; gap:11px; flex-shrink:0;
}
.mm-sidebar-user-info { display:flex; align-items:center; gap:11px; flex:1; min-width:0; }
.mm-sidebar-avatar {
  width:36px; height:36px; border-radius:var(--r-full);
  background:linear-gradient(135deg, var(--accent-dim), var(--surface3));
  border:1px solid rgba(99,102,241,.2);
  display:flex; align-items:center; justify-content:center;
  font-size:14px; font-weight:700; color:var(--accent); flex-shrink:0;
}
.mm-sidebar-username { font-size:13.5px; color:var(--text2); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:500; }

/* ── Mobile Blocked Screen ──────────────────────────────────────────────────── */
.mm-mobile-blocked {
  display:flex; align-items:center; justify-content:center;
  width:100%; height:100%; background:var(--bg); padding:24px;
}
.mm-mobile-blocked-card {
  max-width:360px; text-align:center; padding:40px 32px;
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-2xl); box-shadow:0 20px 60px rgba(0,0,0,0.75);
}
.mm-mobile-blocked-icon { font-size:64px; margin-bottom:24px; }
.mm-mobile-blocked-card h2 { font-size:24px; font-weight:700; color:var(--text); margin-bottom:12px; letter-spacing:-0.5px; }
.mm-mobile-blocked-card p { font-size:14px; color:var(--muted); line-height:1.6; margin-bottom:0; }

/* ── Mobile Header (hidden on all views) ──────────────────────────────────────────── */
.mm-mobile-hdr {
  display:none; align-items:center; gap:12px;
  position:fixed; top:0; left:0; right:0; z-index:90; height:56px;
  padding:0 16px;
  padding-left:max(16px, env(safe-area-inset-left));
  padding-right:max(16px, env(safe-area-inset-right));
  background:var(--surface);
  border-bottom:1px solid var(--border);
}
.mm-mhdr-logo {
  width:32px; height:32px; border-radius:var(--r-md); flex-shrink:0;
  background:var(--accent);
  display:flex; align-items:center; justify-content:center;
  font-size:16px; font-weight:800; color:#fff; letter-spacing:-0.5px;
}
.mm-mhdr-title {
  flex:1; font-size:17px; font-weight:700; color:var(--text); letter-spacing:-.4px;
  margin:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.mm-mhdr-avatar {
  width:36px; height:36px; border-radius:var(--r-full); flex-shrink:0;
  background:var(--accent-dim);
  border:1.5px solid rgba(99,102,241,.3);
  display:flex; align-items:center; justify-content:center;
  font-size:14px; font-weight:700; color:var(--accent);
  cursor:pointer; border:none; font-family:var(--font);
}

/* ── Bottom Tab Bar ───────────────────────────────────────────────────────────────── */
.mm-bnav {
  display:none; position:fixed; bottom:0; left:0; right:0; z-index:90;
  background:var(--surface); border-top:1px solid var(--border);
  box-shadow:0 -1px 0 var(--border), 0 -8px 24px rgba(0,0,0,.18);
  height:calc(58px + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);
  padding-left:max(0px, env(safe-area-inset-left));
  padding-right:max(0px, env(safe-area-inset-right));
  flex-direction:row; align-items:stretch;
}
.mm-bnav-item {
  flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:4px; padding:6px 4px 8px;
  background:none; border:none; font-family:var(--font); cursor:pointer;
  color:var(--muted); position:relative;
  -webkit-tap-highlight-color:transparent;
}
.mm-bnav-pip {
  position:absolute; top:4px; left:50%; transform:translateX(-50%) scaleX(0);
  width:20px; height:3px; border-radius:var(--r-full);
  background:var(--accent);
}
.mm-bnav-item.active .mm-bnav-pip { transform:translateX(-50%) scaleX(1); }
.mm-bnav-icon {
  width:24px; height:24px; display:flex; align-items:center; justify-content:center;
}
.mm-bnav-icon svg { width:24px; height:24px; display:block; }
.mm-bnav-label {
  font-size:10px; font-weight:500; letter-spacing:.2px; white-space:nowrap;
}
.mm-bnav-item.active { color:var(--accent); }

/* ── More Drawer ──────────────────────────────────────────────────────────────────── */
.mm-drawer-overlay {
  display:none; position:fixed; inset:0; z-index:110;
  background:rgba(0,0,0,.45);
}
.mm-drawer {
  display:none; position:fixed; left:0; right:0; bottom:0; z-index:120;
  background:var(--surface2);
  border-radius:20px 20px 0 0;
  border-top:1px solid var(--border);
  box-shadow:0 -8px 40px rgba(0,0,0,.35);
  padding-bottom:max(20px, env(safe-area-inset-bottom));
}
.mm-drawer-handle {
  width:36px; height:4px; border-radius:var(--r-full);
  background:var(--border); margin:10px auto 16px;
}
.mm-drawer-grid {
  display:grid; grid-template-columns:repeat(4,1fr); gap:4px;
  padding:0 12px 8px;
}
.mm-drawer-item {
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:7px; padding:16px 8px;
  background:none; border:none; font-family:var(--font); cursor:pointer;
  border-radius:var(--r-lg);
  color:var(--muted); -webkit-tap-highlight-color:transparent;
}
.mm-drawer-icon {
  width:28px; height:28px; display:flex; align-items:center; justify-content:center;
  border-radius:var(--r-md);
  background:var(--surface3);
}
.mm-drawer-icon svg { width:18px; height:18px; display:block; }
.mm-drawer-label { font-size:11px; font-weight:500; white-space:nowrap; }
.mm-drawer-item:active { background:var(--surface3); }
.mm-drawer-item.active { color:var(--accent); }
.mm-drawer-item.active .mm-drawer-icon { background:var(--accent-dim); color:var(--accent); }

/* ── Sidebar logout button ────────────────────────────────────────────────────────── */
.mm-sidebar-logout-btn {
  display:flex; align-items:center; justify-content:center;
  width:34px; height:34px; border-radius:var(--r-md);
  background:none; border:1px solid var(--border); color:var(--muted);
  cursor:pointer; flex-shrink:0;
}
.mm-sidebar-logout-btn svg { width:17px; height:17px; display:block; }
.mm-sidebar-logout-btn:hover { background:var(--surface3); color:var(--text); border-color:var(--border2); }

/* ── Mobile Layout Breakpoint ─────────────────────────────────────────────────────── */
@media (max-width:768px) {
  .mm-app.mm-sidebar-shell { flex-direction:column; }
  .mm-sidebar { display:none !important; }
  .mm-mobile-hdr { display:flex; }
  .mm-main {
    padding-top:calc(56px + max(0px, env(safe-area-inset-top))) !important;
    padding-bottom:calc(58px + env(safe-area-inset-bottom) + 8px) !important;
  }
  .mm-bnav { display:flex; }
  .mm-drawer-overlay { display:block; }
  .mm-drawer { display:block; }
}
/* ══════════════════════════════════════════════════════════════════════════════
   STUDENT PORTAL — Apple-style premium shell
   ══════════════════════════════════════════════════════════════════════════════ */

/* Shell */
.sp-shell {
  display:flex; flex-direction:column;
  flex:1; min-height:0; width:100%; overflow:hidden;
  background:var(--bg); font-family:var(--font);
}

/* Top header bar */
.sp-header {
  display:flex; align-items:center; justify-content:space-between;
  padding:0 20px; height:52px; flex-shrink:0;
  background:var(--surface); border-bottom:1px solid var(--border);
  position:sticky; top:0; z-index:10;
}
.sp-header-brand { font-size:17px; font-weight:700; letter-spacing:-.45px; color:var(--text); }
.sp-signout-btn {
  background:none; border:none; font-family:var(--font);
  font-size:14px; font-weight:500; color:var(--accent); cursor:pointer; padding:6px 2px;
}
.sp-signout-btn:active { opacity:.7; }

/* Scrollable content */
.sp-content {
  flex:1; overflow-y:auto; overflow-x:hidden; -webkit-overflow-scrolling:touch;
  padding-bottom:env(safe-area-inset-bottom);
}
/* No child of the student shell may exceed the viewport width. */
.sp-shell, .sp-shell * { max-width:100%; }

/* Main column wrapper — holds the mobile header + content + bottom tab bar.
   On mobile it stacks; on desktop it sits to the right of the sidebar. */
.sp-body { display:flex; flex-direction:column; flex:1; min-width:0; min-height:0; }

/* ── Desktop sidebar (hidden ≤767px, shown ≥768px via media query) ─────────── */
.sp-sidebar {
  display:none; flex-direction:column; flex-shrink:0;
  width:240px; background:var(--surface); border-right:1px solid var(--border);
}
.sp-sidebar-brand {
  display:flex; align-items:center; gap:11px; padding:20px 18px;
  border-bottom:1px solid var(--border);
}
.sp-sidebar-mark {
  width:34px; height:34px; border-radius:9px; flex-shrink:0;
  background:var(--accent-dim); color:var(--accent);
  display:flex; align-items:center; justify-content:center;
  font-size:17px; font-weight:700; border:1px solid rgba(99,102,241,.2);
}
.sp-sidebar-brand-name { font-size:16px; font-weight:700; letter-spacing:-.4px; color:var(--text); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sp-sidebar-nav { flex:1; padding:14px 12px; display:flex; flex-direction:column; gap:4px; overflow-y:auto; }
.sp-sidebar-item {
  display:flex; align-items:center; gap:12px; width:100%;
  padding:11px 13px; border:none; border-radius:10px; cursor:pointer;
  background:none; font-family:var(--font); font-size:14.5px; font-weight:500;
  color:var(--muted); text-align:left; transition:background .15s, color .15s;
}
.sp-sidebar-item:hover { background:var(--surface2); color:var(--text2); }
.sp-sidebar-item.active { background:var(--accent-dim); color:var(--accent); font-weight:600; }
.sp-sidebar-ico { display:flex; align-items:center; flex-shrink:0; }
.sp-sidebar-ico svg { width:20px; height:20px; stroke:currentColor; }
.sp-sidebar-footer {
  display:flex; align-items:center; gap:10px; padding:14px;
  border-top:1px solid var(--border);
}
.sp-sidebar-user { display:flex; align-items:center; gap:10px; flex:1; min-width:0; }
.sp-sidebar-avatar {
  width:34px; height:34px; border-radius:50%; flex-shrink:0;
  background:var(--accent-dim); color:var(--accent);
  display:flex; align-items:center; justify-content:center;
  font-size:14px; font-weight:700; border:1px solid rgba(99,102,241,.2);
}
.sp-sidebar-uname { font-size:13.5px; font-weight:600; color:var(--text); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.sp-sidebar-logout {
  width:34px; height:34px; border-radius:9px; flex-shrink:0; cursor:pointer;
  background:var(--surface2); border:1px solid var(--border); color:var(--muted);
  display:flex; align-items:center; justify-content:center; transition:color .15s, border-color .15s;
}
.sp-sidebar-logout:hover { color:var(--danger); border-color:rgba(244,63,94,.3); }

/* Tab-bar icon wrapper (mobile bottom nav) */
.sp-tab-ico { display:flex; align-items:center; justify-content:center; }

/* Dashboard column wrapper — invisible (sequential) on mobile, two columns on desktop */
.sp-home-cols, .sp-home-col { display:contents; }

/* iOS-style bottom tab bar */
.sp-tabbar {
  display:flex; align-items:stretch; height:calc(56px + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);
  background:var(--surface); border-top:1px solid var(--border);
  flex-shrink:0;
}
.sp-tab-btn {
  flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:3px; background:none; border:none; cursor:pointer; font-family:var(--font);
  color:var(--muted2); padding:0; transition:color .15s;
}
.sp-tab-btn span { font-size:10px; font-weight:500; letter-spacing:.1px; }
.sp-tab-btn svg  { stroke:currentColor; }
.sp-tab-btn.active { color:var(--accent); }
.sp-tab-btn:active { opacity:.7; }

/* Tab transition */
.sp-tab-enter-active { transition:opacity .22s ease, transform .22s ease; }
.sp-tab-leave-active { transition:opacity .14s ease; }
.sp-tab-enter-from   { opacity:0; transform:translateY(8px); }
.sp-tab-leave-to     { opacity:0; }
@media (prefers-reduced-motion:reduce) {
  .sp-tab-enter-active,.sp-tab-leave-active { transition:none; }
}

/* ── Loading ──────────────────────────────────────────────────────────────── */
.sp-loading {
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:80px 20px; gap:16px;
}
.sp-loading p { font-size:14px; color:var(--muted); }
.sp-spinner {
  width:30px; height:30px; border-radius:50%;
  border:2.5px solid var(--border); border-top-color:var(--accent);
  animation:sp-spin .7s linear infinite;
}
@keyframes sp-spin { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce) { .sp-spinner { animation:none; opacity:.5; } }

/* ── Common page layout ───────────────────────────────────────────────────── */
.sp-home, .sp-fees, .sp-nodues {
  padding:0 0 32px; max-width:600px; margin:0 auto; width:100%;
}

/* Section label (iOS grouped table style) */
.sp-section-label {
  font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:.55px;
  color:var(--muted); padding:20px 20px 8px;
}

/* Page title */
.sp-page-title {
  font-size:28px; font-weight:700; letter-spacing:-.7px;
  color:var(--text); padding:24px 20px 18px;
}

/* Grouped list card */
.sp-card {
  margin:0 16px; background:var(--surface);
  border:1px solid var(--border); border-radius:14px; overflow:hidden;
}
.sp-card-flush {
  margin:0 16px; background:var(--surface);
  border:1px solid var(--border); border-radius:14px; overflow:hidden;
}

.sp-row {
  display:flex; align-items:center; justify-content:space-between;
  padding:13px 16px; border-bottom:1px solid var(--border2);
  gap:12px; min-height:46px;
}
.sp-row-last { border-bottom:none; }
.sp-row-key { font-size:14px; color:var(--muted); flex-shrink:0; }
.sp-row-val { font-size:14px; color:var(--text); font-weight:500; text-align:right; }

/* Small status badges */
.sp-badge {
  display:inline-flex; align-items:center; padding:3px 9px;
  border-radius:var(--r-full); font-size:11.5px; font-weight:600; flex-shrink:0;
}
.sp-badge-ok   { background:var(--success-dim); color:var(--success); }
.sp-badge-warn { background:var(--warning-dim); color:var(--warning); }
.sp-badge-err  { background:var(--danger-dim);  color:var(--danger);  }

/* Text color helpers */
.sp-c-ok   { color:var(--success); }
.sp-c-warn { color:var(--warning); }

/* Empty state */
.sp-empty      { padding:24px 16px; font-size:14px; color:var(--muted); text-align:center; }
.sp-empty-full { padding:60px 20px; font-size:14px; color:var(--muted); text-align:center; }

/* ── Hero card ────────────────────────────────────────────────────────────── */
.sp-hero {
  position:relative; overflow:hidden;
  background:var(--surface); border-bottom:1px solid var(--border);
  padding:28px 20px 24px;
}
.sp-hero-bg {
  position:absolute; inset:0; opacity:.07;
  background:radial-gradient(ellipse 200px 120px at 90% 10%, var(--accent), transparent);
  pointer-events:none;
}
.sp-hero-inner { position:relative; display:flex; align-items:flex-start; gap:16px; }
.sp-avatar {
  width:68px; height:68px; border-radius:50%; flex-shrink:0;
  background:var(--accent-dim); color:var(--accent);
  display:flex; align-items:center; justify-content:center;
  font-size:28px; font-weight:700; letter-spacing:-.5px;
  border:2px solid rgba(99,102,241,.2);
}
.sp-hero-meta { flex:1; min-width:0; padding-top:4px; }
.sp-name {
  font-size:22px; font-weight:700; letter-spacing:-.55px;
  color:var(--text); margin:0 0 4px; line-height:1.1;
  padding-right:64px;  /* clear the absolute status pill in the hero corner */
}
.sp-sub { font-size:13.5px; color:var(--muted); margin:0 0 10px; padding-right:64px; }
.sp-tags { display:flex; flex-wrap:wrap; gap:6px; }
.sp-tag {
  background:var(--surface2); border:1px solid var(--border);
  border-radius:var(--r-full); padding:3px 10px;
  font-size:12px; font-weight:500; color:var(--text2);
}
.sp-status-pill {
  position:absolute; top:0; right:0;
  padding:4px 11px; border-radius:0 0 0 12px;
  font-size:11.5px; font-weight:600;
}
.sp-status-clear { background:var(--success-dim); color:var(--success); }
.sp-status-due   { background:var(--warning-dim); color:var(--warning); }

/* ── KPI strip ────────────────────────────────────────────────────────────── */
.sp-kpi-row {
  display:grid; grid-template-columns:repeat(4,1fr);
  background:var(--surface); border-bottom:1px solid var(--border);
  border-top:1px solid var(--border); margin-bottom:4px;
}
.sp-kpi {
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:16px 8px 14px; text-align:center; gap:2px;
  border-right:1px solid var(--border);
}
.sp-kpi:last-child { border-right:none; }
.sp-kpi-val    { font-size:22px; font-weight:700; letter-spacing:-.5px; color:var(--text); line-height:1.1; }
.sp-kpi-val-sm { font-size:16px; letter-spacing:-.4px; }
.sp-kpi-lbl    { font-size:10.5px; font-weight:500; color:var(--muted); text-transform:uppercase; letter-spacing:.35px; }
.sp-kpi-warn .sp-kpi-val { color:var(--warning); }
.sp-kpi-ok   .sp-kpi-val { color:var(--success); }
.sp-kpi-amt  .sp-kpi-val { color:var(--danger); }
.sp-kpi-dep  .sp-kpi-val { color:var(--text2); }

/* ── Fees page: summary strip ─────────────────────────────────────────────── */
.sp-summary-strip {
  display:flex; align-items:stretch; justify-content:space-around;
  background:var(--surface); border-bottom:1px solid var(--border);
  margin-bottom:4px; padding:20px 8px;
}
.sp-summary-item { display:flex; flex-direction:column; align-items:center; gap:5px; flex:1; }
.sp-summary-val  { font-size:22px; font-weight:700; letter-spacing:-.5px; color:var(--text); }
.sp-summary-lbl  { font-size:11px; font-weight:500; color:var(--muted); text-transform:uppercase; letter-spacing:.4px; }
.sp-summary-divider { width:1px; background:var(--border); margin:0 8px; flex-shrink:0; }

/* ── Fee list items ───────────────────────────────────────────────────────── */
.sp-fee-item {
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:14px 16px; border-bottom:1px solid var(--border2);
  background:var(--surface);
}
.sp-fee-item.sp-row-last { border-bottom:none; }
.sp-fee-left  { flex:1; min-width:0; }
.sp-fee-period    { font-size:15px; font-weight:600; color:var(--text); margin-bottom:3px; }
.sp-fee-breakdown { font-size:12px; color:var(--muted); }
.sp-fee-date      { font-size:11.5px; color:var(--muted2); margin-top:2px; }
.sp-fee-right { display:flex; flex-direction:column; align-items:flex-end; gap:5px; flex-shrink:0; }
.sp-fee-total { font-size:16px; font-weight:700; letter-spacing:-.35px; color:var(--text); }

/* ── No-dues page ─────────────────────────────────────────────────────────── */
.sp-nd-ok,.sp-nd-fail {
  display:flex; flex-direction:column; align-items:center; gap:12px;
  padding:48px 24px 36px; text-align:center;
}
.sp-nd-icon {
  width:72px; height:72px; border-radius:50%;
  display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.sp-nd-icon-ok   { background:var(--success-dim); color:var(--success); }
.sp-nd-icon-fail { background:var(--danger-dim);  color:var(--danger);  }
.sp-nd-title { font-size:22px; font-weight:700; letter-spacing:-.5px; color:var(--text); margin:0; }
.sp-nd-desc  { font-size:14.5px; color:var(--muted); line-height:1.55; max-width:320px; margin:0; }

/* No-dues certificate */
.sp-cert {
  margin:0 16px 16px; background:var(--surface); border:1px solid var(--border);
  border-radius:14px; overflow:hidden;
}
.sp-cert-header {
  padding:20px; background:var(--accent-dim);
  border-bottom:1px solid rgba(99,102,241,.2);
  display:flex; flex-direction:column; gap:4px;
}
.sp-cert-logo { font-size:16px; font-weight:700; color:var(--accent); letter-spacing:-.3px; }
.sp-cert-tag  { font-size:12px; font-weight:600; color:var(--accent); opacity:.7; text-transform:uppercase; letter-spacing:.5px; }
.sp-cert-body { padding:24px 20px; display:flex; flex-direction:column; gap:6px; }
.sp-cert-body p { font-size:14px; color:var(--muted); margin:0; }
.sp-cert-body h3 { font-size:20px; font-weight:700; letter-spacing:-.5px; color:var(--text); margin:4px 0; }
.sp-cert-body strong { color:var(--text2); }
.sp-cert-footer {
  padding:16px 20px; border-top:1px solid var(--border2);
  display:flex; justify-content:space-between; gap:12px;
}
.sp-cert-lbl { font-size:11px; text-transform:uppercase; letter-spacing:.4px; color:var(--muted); margin-bottom:4px; }
.sp-cert-val { font-size:14px; font-weight:600; color:var(--text); }
.sp-print-btn {
  display:block; margin:0 16px; padding:14px;
  background:var(--accent); color:#fff; border:none; border-radius:12px;
  font-family:var(--font); font-size:15px; font-weight:600; cursor:pointer; text-align:center;
  letter-spacing:-.2px; width:calc(100% - 32px);
}
.sp-print-btn:active { opacity:.85; }

/* ── Compatibility shims for old class names ──────────────────────────────── */
.text-success { color:var(--success) !important; }
.text-danger  { color:var(--danger)  !important; }

/* ── Room Matrix ─────────────────────────────────────────────────────────────── */
.room-legend {
  display:flex; align-items:center; gap:20px; margin-bottom:26px; flex-wrap:wrap;
  padding:16px 22px; background:var(--surface); border:1px solid var(--border);
  border-radius:var(--r-xl);
}
.room-legend-item { display:flex; align-items:center; gap:8px; font-size:13.5px; color:var(--text2); font-weight:500; }
.room-legend-dot  { width:11px; height:11px; border-radius:var(--r-full); flex-shrink:0; }
.room-legend-dot.vacant  { background:var(--success); box-shadow:0 0 6px rgba(16,185,129,.4); }
.room-legend-dot.partial { background:var(--warning); box-shadow:0 0 6px rgba(245,158,11,.4); }
.room-legend-dot.full    { background:var(--danger);  box-shadow:0 0 6px rgba(244,63,94,.4);  }
.room-legend-sep  { flex:1; }
.room-legend-hint { font-size:12.5px; color:var(--muted); }

.room-floor { margin-bottom:38px; }
.floor-header { display:flex; align-items:center; gap:14px; margin-bottom:18px; padding-bottom:12px; border-bottom:1px solid var(--border2); }
.floor-label  { font-size:13px; font-weight:700; color:var(--text2); text-transform:uppercase; letter-spacing:.8px; }
.floor-count  { background:var(--surface3); border:1px solid var(--border); border-radius:var(--r-full); padding:3px 11px; font-size:11.5px; color:var(--muted); font-weight:600; }

/* grid-template-columns is set inline per floor so every floor fills one row (shrink-to-fit). */
.room-grid { display:grid; gap:12px; }

/* ── Room Card ─────────────────────────────────────────────────────────────── */
.room-card {
  position:relative; display:flex; flex-direction:column; align-items:flex-start; gap:8px;
  padding:16px 15px 14px; min-height:108px; width:100%; min-width:0;
  border-radius:var(--r-lg); border:1px solid; cursor:pointer;
  transition:all var(--t); background:none; font-family:var(--font);
  text-align:left; overflow:hidden;
}
.room-card:hover { transform:translateY(-3px); }
.room-card:active{ transform:translateY(-1px); }

.room-card.vacant  { background:rgba(16,185,129,.05); border-color:rgba(16,185,129,.2); }
.room-card.partial { background:rgba(245,158,11,.05); border-color:rgba(245,158,11,.2); }
.room-card.full    { background:rgba(244,63,94,.05);  border-color:rgba(244,63,94,.2);  }
.room-card.vacant:hover  { border-color:rgba(16,185,129,.45); box-shadow:0 6px 20px rgba(16,185,129,.12); }
.room-card.partial:hover { border-color:rgba(245,158,11,.45); box-shadow:0 6px 20px rgba(245,158,11,.12); }
.room-card.full:hover    { border-color:rgba(244,63,94,.45);  box-shadow:0 6px 20px rgba(244,63,94,.12);  }

.rc-number { font-size:20px; font-weight:700; color:var(--text); letter-spacing:-.5px; line-height:1; }

.rc-beds { display:flex; gap:5px; align-items:center; }
.rc-dot  { width:10px; height:10px; border-radius:50%; transition:all var(--t-fast); }
.room-card.vacant  .rc-dot.filled { background:var(--success); box-shadow:0 0 5px rgba(16,185,129,.5); }
.room-card.partial .rc-dot.filled { background:var(--warning); box-shadow:0 0 5px rgba(245,158,11,.5); }
.room-card.full    .rc-dot.filled { background:var(--danger);  box-shadow:0 0 5px rgba(244,63,94,.5);  }
.room-card.vacant  .rc-dot.empty  { border:1.5px solid rgba(16,185,129,.3); }
.room-card.partial .rc-dot.empty  { border:1.5px solid rgba(245,158,11,.3); }
.room-card.full    .rc-dot.empty  { border:1.5px solid rgba(244,63,94,.3);  }

.rc-occupants { font-size:12.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; width:100%; margin-top:auto; line-height:1.35; }
.rc-name      { color:var(--text2); display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:500; }
.rc-more      { color:var(--muted2); font-size:11px; display:block; margin-top:1px; }
.rc-vacant-lbl{ color:var(--muted2); }

.rc-add-btn {
  position:absolute; top:12px; right:12px;
  width:26px; height:26px; border-radius:var(--r-full);
  background:var(--accent-dim); color:var(--accent);
  font-size:18px; font-weight:700; line-height:24px;
  display:flex; align-items:center; justify-content:center;
  opacity:0; transition:opacity var(--t); pointer-events:none;
}
.room-card:hover .rc-add-btn { opacity:1; }
.room-card.full  .rc-add-btn { display:none; }

/* ── Room Detail Modal v2 ────────────────────────────────────────────────────── */

/* Hero header */
.rd2-hero {
  display:flex; align-items:center; gap:14px;
  padding:20px 22px 18px;
  background:linear-gradient(145deg, var(--surface2) 0%, var(--surface) 100%);
  border-bottom:1px solid var(--border);
  border-radius:var(--r-2xl) var(--r-2xl) 0 0;
  position:relative; overflow:hidden;
}
.rd2-hero::after {
  content:''; position:absolute; bottom:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg, var(--accent), var(--accent-h), transparent 70%);
}
.rd2-hero-icon {
  width:52px; height:52px; border-radius:var(--r-xl); flex-shrink:0;
  background:linear-gradient(135deg, var(--accent) 0%, var(--accent-h) 100%);
  display:flex; align-items:center; justify-content:center;
  color:#fff; box-shadow:0 4px 18px rgba(99,102,241,.38);
}
.rd2-hero-icon svg { width:28px; height:28px; display:block; }
.rd2-hero-info { flex:1; min-width:0; }
.rd2-hero-num { font-size:21px; font-weight:800; color:var(--text); letter-spacing:-.6px; line-height:1.1; }
.rd2-hero-meta { font-size:12.5px; color:var(--muted); margin-top:3px; display:flex; align-items:center; gap:5px; }
.rd2-hero-dot { opacity:.4; }
.rd2-status-pill {
  font-size:11.5px; font-weight:700; letter-spacing:.3px;
  padding:4px 11px; border-radius:var(--r-full); border:1.5px solid; flex-shrink:0;
}
.rd2-status-pill.free   { color:var(--success); background:var(--success-dim); border-color:rgba(16,185,129,.25); }
.rd2-status-pill.full   { color:var(--danger);  background:var(--danger-dim);  border-color:rgba(239,68,68,.25); }
.rd2-close-btn {
  width:32px; height:32px; display:flex; align-items:center; justify-content:center;
  background:var(--surface3); border:1px solid var(--border); border-radius:var(--r-md);
  color:var(--muted); cursor:pointer; flex-shrink:0; transition:all var(--t-fast);
}
.rd2-close-btn svg { width:16px; height:16px; display:block; }
.rd2-close-btn:hover { color:var(--text); background:var(--surface2); border-color:var(--border2); }

/* Body */
.rd2 { display:flex; flex-direction:column; gap:22px; }

/* Bed capacity */
.rd2-capacity {
  padding:16px 18px; background:var(--surface2);
  border:1px solid var(--border); border-radius:var(--r-lg);
  display:flex; flex-direction:column; gap:10px;
}
.rd2-cap-row { display:flex; align-items:center; justify-content:space-between; }
.rd2-cap-label { font-size:11px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.6px; }
.rd2-cap-frac  { font-size:13px; font-weight:700; color:var(--text); }
.rd2-cap-track {
  height:6px; border-radius:var(--r-full); background:var(--surface3);
  overflow:hidden; position:relative;
}
.rd2-cap-fill {
  height:100%; border-radius:var(--r-full);
  background:linear-gradient(90deg, var(--accent), var(--accent-h));
  transition:width 500ms cubic-bezier(.4,0,.2,1);
}
.rd2-cap-fill.danger { background:linear-gradient(90deg, var(--danger), #f87171); }
.rd2-bed-pips { display:flex; gap:5px; flex-wrap:wrap; }
.rd2-pip {
  width:26px; height:10px; border-radius:3px;
  transition:background 300ms ease;
}
.rd2-pip.filled { background:linear-gradient(90deg, var(--accent), var(--accent-h)); }
.rd2-pip.empty  { background:var(--surface3); border:1.5px solid var(--border2); }

/* Section shared */
.rd2-section { display:flex; flex-direction:column; gap:10px; }
.rd2-sh {
  display:flex; align-items:center; gap:8px;
  padding-bottom:10px; border-bottom:1px solid var(--border2);
}
.rd2-sh-icon { width:16px; height:16px; display:flex; align-items:center; justify-content:center; color:var(--accent); flex-shrink:0; }
.rd2-sh-icon svg { width:16px; height:16px; display:block; }
.rd2-sh-label { font-size:12px; font-weight:700; color:var(--text2); text-transform:uppercase; letter-spacing:.5px; flex:1; }
.rd2-sh-badge {
  font-size:11px; font-weight:700; padding:2px 9px;
  border-radius:var(--r-full); background:var(--surface3);
  color:var(--muted); border:1px solid var(--border2);
}
.rd2-sh-badge.avail { background:var(--success-dim); color:var(--success); border-color:rgba(16,185,129,.2); }

/* Spinner / empty */
.rd2-spinner-wrap { text-align:center; padding:20px; }
.rd2-empty-state {
  display:flex; align-items:center; gap:9px;
  padding:16px; color:var(--muted); font-size:13px;
  background:var(--surface2); border-radius:var(--r-lg); border:1px dashed var(--border);
}
.rd2-empty-icon { width:18px; height:18px; flex-shrink:0; opacity:.5; }
.rd2-empty-icon svg { width:18px; height:18px; display:block; }

/* Occupant cards */
.rd2-occ-list { display:flex; flex-direction:column; gap:7px; }
.rd2-occ-card {
  display:flex; align-items:center; gap:12px;
  padding:12px 14px;
  background:var(--surface2); border:1px solid var(--border2);
  border-radius:var(--r-lg); transition:border-color var(--t-fast);
}
.rd2-occ-card:hover { border-color:var(--border); }
.rd2-occ-av {
  width:40px; height:40px; border-radius:var(--r-full); flex-shrink:0;
  background:linear-gradient(135deg, var(--accent-dim), var(--surface3));
  border:1.5px solid rgba(99,102,241,.25);
  display:flex; align-items:center; justify-content:center;
  font-size:15px; font-weight:800; color:var(--accent);
}
.rd2-occ-av.sm { width:32px; height:32px; font-size:12px; }
.rd2-occ-info { flex:1; min-width:0; }
.rd2-occ-name { font-size:13.5px; font-weight:600; color:var(--text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rd2-occ-id   { font-size:11.5px; color:var(--muted); margin-top:1px; }
.rd2-remove-btn {
  width:34px; height:34px; display:flex; align-items:center; justify-content:center;
  background:transparent; border:1px solid transparent;
  border-radius:var(--r-md); color:var(--muted);
  cursor:pointer; flex-shrink:0; transition:all var(--t-fast);
}
.rd2-remove-btn svg { width:17px; height:17px; display:block; }
.rd2-remove-btn:hover { background:var(--danger-dim); color:var(--danger); border-color:rgba(239,68,68,.2); }
.rd2-remove-btn:disabled { opacity:.4; pointer-events:none; }

/* Search */
.rd2-search-wrap {
  position:relative;
}
.rd2-search-ic {
  position:absolute; left:12px; top:50%; transform:translateY(-50%);
  width:16px; height:16px; display:flex; align-items:center; justify-content:center;
  color:var(--muted); pointer-events:none;
}
.rd2-search-ic svg { width:16px; height:16px; display:block; }
.rd2-search-inp { padding-left:40px !important; }

/* Search results */
.rd2-results {
  display:flex; flex-direction:column; gap:5px;
  max-height:200px; overflow-y:auto;
}
.rd2-res-row {
  display:flex; align-items:center; gap:10px;
  padding:10px 12px; background:var(--surface2);
  border:1px solid var(--border2); border-radius:var(--r-lg);
  transition:border-color var(--t-fast);
}
.rd2-res-row:hover { border-color:var(--border); }

/* Full-room banner */
.rd2-full-banner {
  display:flex; align-items:center; gap:14px;
  padding:18px 20px;
  background:linear-gradient(135deg, var(--surface2), var(--surface));
  border:1px solid var(--border); border-radius:var(--r-lg);
  color:var(--muted);
}
.rd2-full-icon { width:36px; height:36px; display:flex; align-items:center; justify-content:center; color:var(--success); flex-shrink:0; }
.rd2-full-icon svg { width:24px; height:24px; display:block; }
.rd2-full-title { font-size:14px; font-weight:600; color:var(--text2); }
.rd2-full-sub   { font-size:12px; color:var(--muted); margin-top:2px; }

/* Footer action buttons */
.rd2-footer-btn { display:inline-flex; align-items:center; gap:6px; }
.rd2-btn-icon { width:14px; height:14px; display:flex; align-items:center; justify-content:center; }
.rd2-btn-icon svg { width:14px; height:14px; display:block; }

/* ── No-dues panel ───────────────────────────────────────────────────────────── */
.nodues-search { display:flex; gap:8px; margin-bottom:24px; }
.nodues-result { border:1px solid var(--border); border-radius:var(--r-xl); padding:24px; background:var(--surface); display:flex; flex-direction:column; gap:18px; }
.nodues-student-card { display:flex; align-items:center; gap:14px; padding-bottom:18px; border-bottom:1px solid var(--border); }
.nodues-avatar { width:44px; height:44px; border-radius:var(--r-full); background:var(--accent-dim); border:1px solid rgba(99,102,241,.2); display:flex; align-items:center; justify-content:center; font-size:18px; font-weight:700; color:var(--accent); }
.nodues-student-card strong { font-size:15px; color:var(--text); font-weight:600; }
.nodues-student-card p { font-size:12px; color:var(--muted); margin-top:3px; }
.nodues-status-block { display:flex; flex-direction:column; gap:12px; }
.nodues-indicator { padding:12px 16px; border-radius:var(--r-lg); font-size:13px; font-weight:600; border:1px solid; display:flex; align-items:center; gap:8px; }
.nodues-indicator.eligible   { background:var(--success-dim); color:var(--success); border-color:rgba(16,185,129,.25); }
.nodues-indicator.ineligible { background:var(--danger-dim);  color:var(--danger);  border-color:rgba(244,63,94,.25);  }

/* ── Certificate ─────────────────────────────────────────────────────────────── */
.nodues-cert { border:1px solid var(--border); border-radius:var(--r-xl); padding:30px; background:var(--surface2); }
.cert-header { text-align:center; margin-bottom:22px; padding-bottom:22px; border-bottom:1px solid var(--border); }
.cert-header h2 { font-size:20px; font-weight:700; color:var(--text); letter-spacing:-.5px; }
.cert-header h3 { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:2px; margin-top:6px; color:var(--muted); }
.cert-body { text-align:center; }
.cert-body p { margin:8px 0; font-size:13px; color:var(--text2); line-height:1.6; }
.cert-meta { display:flex; justify-content:center; gap:40px; margin-top:20px; padding-top:20px; border-top:1px solid var(--border); }
.cert-meta span { font-size:12px; color:var(--muted); }
.cert-meta strong { color:var(--text); }
.cert-footer { margin-top:20px; display:flex; justify-content:center; }

/* ── Misc ─────────────────────────────────────────────────────────────────────── */
.mm-fee-info { font-size:14px; color:var(--text2); line-height:1.5; }

.settings-form { max-width:480px; display:flex; flex-direction:column; gap:20px; }
.settings-section { background:var(--surface); border:1px solid var(--border); border-radius:var(--r-xl); padding:24px; display:flex; flex-direction:column; gap:18px; }
.settings-section-title { font-size:11px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.6px; padding-bottom:12px; border-bottom:1px solid var(--border2); }

/* ── Print ─────────────────────────────────────────────────────────────────── */
@media print {
  .no-print,.mm-sidebar,.mm-topnav,.mm-toast,.panel-filters,.panel-header .mm-btn,
  .sp-header,.sp-tabbar,.sp-sidebar { display:none !important; }
  .mm-main,.sp-content { padding:0 !important; overflow:visible !important; }
  .sp-nodues { max-width:none !important; padding:0 !important; }
  body { background:white !important; color:#000 !important; }
  .sp-cert { border:1px solid #333 !important; background:white !important; margin:0 !important; }
  .sp-cert-header,.sp-cert-body,.sp-cert-footer,
  .sp-cert-logo,.sp-cert-tag,.sp-cert-body p,.sp-cert-body h3,.sp-cert-val { color:#000 !important; }
}

/* ── Responsive ────────────────────────────────────────────────────────────── */

/* Desktop/Large (1000px+) */
@media (max-width:1440px) {
  :root { --content-max: 1300px; }
}

/* Desktop (1000px - 1439px) */
@media (max-width:1000px) {
  :root { --sidebar-w: 232px; --content-max: 1100px; }
  .mm-main { padding:clamp(20px,2.2vw,36px) clamp(18px,2.8vw,44px); }
}

/* Tablet/Landscape (769px - 999px) */
@media (max-width:999px) {
  .kpi-grid, .dash-metrics { grid-template-columns:repeat(auto-fit, minmax(200px,1fr)); gap:16px; }
  .reports-grid, .export-grid { grid-template-columns:repeat(auto-fit, minmax(280px,1fr)); gap:16px; }
  .panel-header { flex-direction:column; align-items:stretch; gap:14px; }
  .panel-header-left { width:100%; }
  .panel-header-actions { flex-direction:column; width:100%; }
  .panel-header-actions .mm-btn, .panel-header-actions .mm-select { width:100%; max-width:none; }
  .mm-card { border-radius:var(--r-lg); }
  .mm-table { font-size:13.5px; }
  .mm-table thead th { padding:10px 12px; }
  .mm-table tbody td { padding:10px 12px; }
}

/* Tablet (481px - 768px) */
@media (max-width:768px) {
  :root { --sidebar-w: 0; }
  .mm-sidebar { display:none; }
  .mm-topnav { padding:0 14px; }
  .mm-topnav-brand { font-size:15px; }
  .mm-topnav-tabs { gap:2px; }
  .mm-topnav-tabs .mm-topnav-tab { padding:6px 10px; font-size:12.5px; }
  .mm-spinner, .mm-spinner-sm, .mm-spinner-lg { animation:none; opacity:0.6; }
  .mm-main { padding:clamp(16px,2vw,28px) clamp(14px,2.4vw,32px); }
  .mm-main > * { max-width:100%; }
  .student-hero { flex-wrap:wrap; gap:12px; }
  .panel-header { flex-direction:column; align-items:stretch; gap:12px; }
  .panel-header-left { width:100%; }
  .panel-header-actions { flex-direction:column; width:100%; }
  .panel-header-actions .mm-btn, .panel-header-actions .mm-select { width:100%; max-width:none; font-size:14px; }
  .panel-filters { flex-direction:column; gap:10px; }
  .panel-filters .mm-select { width:100%; }
  .kpi-grid { grid-template-columns:repeat(auto-fit, minmax(160px,1fr)); gap:12px; margin-bottom:20px; }
  .mm-stat-card { padding:18px 20px; }
  .mm-stat-value { font-size:clamp(26px,2.4vw,32px); }
  .mm-stat-label { font-size:11px; margin-top:10px; }
  .dash-metrics { grid-template-columns:1fr; gap:14px; }
  .dash-metric-card { padding:20px 24px; gap:14px; }
  .reports-grid { grid-template-columns:1fr; gap:14px; margin-top:18px; }
  .export-grid { grid-template-columns:repeat(auto-fit, minmax(240px,1fr)); gap:14px; margin-top:18px; }
  .export-card { padding:20px; }
  .payments-results { max-width:100%; }
  .mm-table { font-size:13px; }
  .mm-table thead { display:none; }
  .mm-table tbody tr { display:block; border:1px solid var(--border); margin-bottom:12px; border-radius:var(--r-md); background:var(--surface2); }
  .mm-table tbody td { display:block; padding:10px; border:none; position:relative; }
  .mm-table tbody td::before { content:attr(data-label); font-weight:600; color:var(--muted); font-size:11.5px; text-transform:uppercase; letter-spacing:.3px; display:block; margin-bottom:4px; }
  .mm-modal-content { max-width:calc(100vw - 32px); max-height:90vh; }
  .mm-form-grid { grid-template-columns:1fr !important; }
  .mm-btn { padding:clamp(9px,2.2vw,12px) clamp(14px,3vw,20px); font-size:14px; }
  .mm-btn-sm { padding:8px 12px; font-size:13px; }
}

/* ── Student portal responsive ───────────────────────────────────────────────── */
/* Phones (≤600px): unify the horizontal gutter at 14px so section labels, page
   titles, hero padding and cards all align to the same left edge. */
@media (max-width:600px) {
  .sp-home,.sp-fees,.sp-nodues { max-width:100%; }

  .sp-card, .sp-card-flush, .sp-cert { margin-left:14px; margin-right:14px; }
  .sp-print-btn { margin:0 14px; width:calc(100% - 28px); }
  .sp-section-label { padding:18px 14px 8px; }
  .sp-page-title { font-size:24px; padding:20px 14px 16px; }

  .sp-hero { padding:22px 14px 20px; }
  .sp-hero-inner { gap:14px; }
  .sp-avatar { width:56px; height:56px; font-size:22px; }
  .sp-name  { font-size:19px; }
  .sp-sub { font-size:12.5px; margin-bottom:8px; }

  .sp-kpi { padding:13px 4px 12px; }
  .sp-kpi-val { font-size:18px; }
  .sp-kpi-val-sm { font-size:14px; }
  .sp-kpi-lbl { font-size:9.5px; letter-spacing:.2px; }

  .sp-summary-strip { padding:16px 4px; }
  .sp-summary-val { font-size:18px; }
  .sp-summary-lbl { font-size:10px; }
  .sp-summary-divider { margin:0 4px; }

  .sp-row { padding:12px 14px; }
  .sp-fee-item { padding:13px 14px; }
}

/* Small phones (≤360px): the 4-up KPI row and 3-up summary strip get tight, so
   shrink type a touch more and reduce gutters. */
@media (max-width:360px) {
  .sp-card, .sp-card-flush, .sp-cert { margin-left:10px; margin-right:10px; }
  .sp-print-btn { margin:0 10px; width:calc(100% - 20px); }
  .sp-section-label { padding-left:12px; padding-right:12px; }
  .sp-page-title { padding-left:12px; padding-right:12px; font-size:22px; }
  .sp-hero { padding-left:12px; padding-right:12px; }
  .sp-kpi-val { font-size:16px; }
  .sp-kpi-val-sm { font-size:13px; }
  .sp-kpi-lbl { font-size:9px; }
  .sp-summary-val { font-size:16px; }
  .sp-row-key, .sp-row-val { font-size:13px; }
}

/* ── Student portal — DESKTOP layout (≥768px) ─────────────────────────────────
   Below 768px the portal keeps its iOS phone shell (top bar + bottom tab bar).
   At 768px+ it becomes a sidebar app like the admin/warden shell: a left nav,
   a full-width scrollable content area, and a two-column dashboard. */
@media (min-width:768px) {
  /* Shell becomes a horizontal split: sidebar | content */
  .sp-shell { flex-direction:row; }
  .sp-sidebar { display:flex; }

  /* The phone chrome (top bar + bottom tab bar) is replaced by the sidebar */
  .sp-header, .sp-tabbar { display:none; }

  /* Content area fills the remaining width (gutter handled by the page columns) */
  .sp-content { padding:0; }

  /* Wider, centered content column with a comfortable gutter */
  .sp-home, .sp-fees, .sp-nodues {
    max-width:1080px; margin:0 auto; padding:34px 36px 40px;
  }

  /* Section labels / titles align to the new gutter (cards no longer self-indent) */
  .sp-section-label { padding:22px 0 10px; }
  .sp-page-title { padding:0 0 22px; font-size:30px; }
  .sp-card, .sp-card-flush, .sp-cert, .sp-print-btn { margin-left:0; margin-right:0; }
  .sp-print-btn { width:auto; min-width:220px; align-self:flex-start; }

  /* Hero + KPI strip become standalone rounded cards (not edge-to-edge bands) */
  .sp-hero {
    border:1px solid var(--border); border-radius:16px;
    margin-bottom:18px; padding:26px 28px;
  }
  .sp-kpi-row {
    border:1px solid var(--border); border-radius:16px;
    margin-bottom:4px; overflow:hidden;
  }
  .sp-summary-strip {
    border:1px solid var(--border); border-radius:16px;
    margin-bottom:4px; padding:24px 12px;
  }

  /* Two-column dashboard: Details | Recent Fees */
  .sp-home-cols { display:grid; grid-template-columns:1fr 1fr; gap:8px 28px; align-items:start; }
  .sp-home-col  { display:block; }
  .sp-home-col .sp-section-label { padding-top:8px; }

  /* No-dues content reads better constrained and centered */
  .sp-nodues { max-width:680px; }
}

/* Large desktop: a touch more breathing room */
@media (min-width:1280px) {
  .sp-home, .sp-fees { max-width:1180px; }
}

/* ── Login page mobile ───────────────────────────────────────────────────────── */
@media (max-width:480px) {
  /* Login page on mobile */
  .mm-login-page { padding:16px; align-items:flex-start; padding-top:40px; }
  .mm-login-card { padding:30px 20px; border-radius:var(--r-2xl); }
  .mm-login-logo { margin-bottom:28px; }
  .mm-login-logo h1 { font-size:20px; }
  .mm-logo-mark { width:52px; height:52px; font-size:22px; margin-bottom:16px; }

  /* Modals on mobile (admin/warden) */
  .mm-modal-overlay { align-items:flex-end; padding:0; }
  .mm-modal-content { max-width:100%; width:100%; border-radius:var(--r-2xl) var(--r-2xl) 0 0; max-height:92vh; }
}

/* ── Payments ────────────────────────────────────────────────────────────────── */
.fee-summary-row { display:grid; grid-template-columns:repeat(auto-fit, minmax(200px,1fr)); gap:16px; margin-bottom:20px; }
.fee-summary-card { padding:20px 22px; background:var(--surface2); border:1px solid var(--border); border-radius:var(--r-xl); }
.fee-summary-card span   { font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:.5px; color:var(--muted); display:block; margin-bottom:8px; }
.fee-summary-card strong { font-size:26px; font-weight:700; color:var(--text); letter-spacing:-.7px; }
.payments-search { display:flex; flex-direction:column; gap:14px; }
.payments-results { display:flex; flex-direction:column; gap:8px; max-width:560px; }
.payments-result-row {
  display:flex; align-items:center; gap:14px; width:100%; text-align:left;
  padding:12px 14px; background:var(--surface2); border:1px solid var(--border);
  border-radius:var(--r-md); cursor:pointer; transition:border-color var(--t), background var(--t);
}
.payments-result-row:hover { border-color:var(--accent); background:var(--surface3); }
.payments-result-info { display:flex; flex-direction:column; gap:2px; flex:1; min-width:0; }
.payments-result-info strong { color:var(--text); font-size:14.5px; }
.payments-result-info span { color:var(--muted); font-size:12.5px; }
.payments-result-go { color:var(--muted2); font-size:22px; line-height:1; }
.payments-student-bar {
  display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap;
  padding:16px 18px; background:var(--surface2); border:1px solid var(--border); border-radius:var(--r-lg);
}

/* ── Reports ─────────────────────────────────────────────────────────────────── */
.reports-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(340px, 1fr)); gap:20px; margin-top:22px; }
.mm-table-flush { margin:0; }
.mm-bar { height:7px; background:var(--surface4); border-radius:var(--r-full); overflow:hidden; display:inline-block; width:80px; vertical-align:middle; }
.mm-bar-fill { height:100%; background:var(--accent); border-radius:var(--r-full); transition:width var(--t); }
.mm-bar-label { font-size:12px; color:var(--muted); margin-left:8px; }

/* ── Export ──────────────────────────────────────────────────────────────────── */
.exp-section-title { font-size:12px; font-weight:700; color:var(--muted); text-transform:uppercase; letter-spacing:.6px; margin-bottom:16px; }

/* Full Backup Card */
.exp-backup-card {
  display:flex; align-items:center; gap:18px;
  padding:24px; margin-bottom:24px;
  background:rgba(99,102,241,.08);
  border:2px solid var(--accent); border-radius:var(--r-lg);
}
.exp-backup-icon {
  width:56px; height:56px; border-radius:var(--r-lg); flex-shrink:0;
  background:var(--accent-dim); color:var(--accent);
  display:flex; align-items:center; justify-content:center;
  font-size:28px;
}
.exp-backup-info { flex:1; min-width:0; }
.exp-backup-info strong { color:var(--text); display:block; }
.exp-backup-info p { color:var(--muted); font-size:13px; line-height:1.5; margin:6px 0 0; }

/* Export Grid */
.export-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:16px; margin-top:16px; }
.export-card {
  display:flex; flex-direction:column; align-items:flex-start; gap:10px;
  padding:20px; background:var(--surface2); border:1px solid var(--border); border-radius:var(--r-lg);
}
.export-card:hover { border-color:var(--border2); }
.export-card-icon {
  width:40px; height:40px; border-radius:var(--r-md); background:var(--accent-dim); color:var(--accent);
  display:flex; align-items:center; justify-content:center; font-size:20px;
}
.export-card strong { color:var(--text); font-size:15px; }
.export-card p { color:var(--muted); font-size:12px; line-height:1.5; flex:1; margin:4px 0 8px; }
.exp-card-buttons { display:flex; gap:6px; width:100%; }
.exp-card-buttons .mm-btn { flex:1; }

/* Import card */
.exp-import-card {
  display:flex; align-items:flex-start; gap:18px;
  padding:24px; background:var(--surface2);
  border:2px dashed var(--accent); border-radius:var(--r-lg);
  margin-top:16px;
}
.exp-import-icon {
  width:48px; height:48px; border-radius:var(--r-lg); flex-shrink:0;
  background:var(--accent-dim); color:var(--accent);
  display:flex; align-items:center; justify-content:center;
  font-size:24px; font-weight:700;
}
.exp-import-card strong { color:var(--text); font-size:15px; }
.exp-import-card p { color:var(--muted); font-size:13px; line-height:1.5; margin:0; }
.exp-import-card .mm-btn { margin-top:12px; }
