/* ================================================
   CampusVote – Main Stylesheet
   Font: Plus Jakarta Sans (body) + Sora (headings)
   Palette: Deep Navy #1a3c6e | Gold #e8a020 | White
   ================================================ */

:root {
  --navy:      #1a3c6e;
  --navy-dark: #112752;
  --navy-mid:  #264f8c;
  --gold:      #e8a020;
  --gold-light:#f5c55a;
  --white:     #ffffff;
  --gray-50:   #f8f9fb;
  --gray-100:  #eef0f4;
  --gray-300:  #c8cdd8;
  --gray-500:  #7a8299;
  --gray-700:  #3d4561;
  --success:   #2e9e6b;
  --danger:    #d94040;
  --radius:    12px;
  --shadow:    0 4px 24px rgba(26,60,110,.10);
  --shadow-md: 0 8px 40px rgba(26,60,110,.16);
}

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

body {
  font-family: 'Plus Jakarta Sans', sans-serif;
  background: var(--gray-50);
  color: var(--gray-700);
  margin: 0;
}

h1,h2,h3,h4,h5 { font-family: 'Sora', sans-serif; color: var(--navy-dark); font-weight: 700; }

/* ---- Navbar ---- */
.cv-navbar {
  background: var(--navy-dark);
  box-shadow: 0 2px 16px rgba(0,0,0,.2);
  padding: .75rem 0;
}
.cv-navbar .navbar-brand { font-family: 'Sora', sans-serif; font-size: 1.4rem; letter-spacing: -.5px; }

/* ---- Buttons ---- */
.cv-btn-accent {
  background: var(--gold);
  color: var(--navy-dark);
  border: none;
  font-weight: 600;
  border-radius: 8px;
  transition: background .2s, transform .1s;
}
.cv-btn-accent:hover { background: var(--gold-light); color: var(--navy-dark); transform: translateY(-1px); }

.cv-btn-outline-primary {
  border: 2px solid var(--navy);
  color: var(--navy);
  background: transparent;
  font-weight: 600;
  border-radius: 8px;
  transition: .2s;
}
.cv-btn-outline-primary:hover { background: var(--navy); color: #fff; }

/* ---- Hero ---- */
.cv-hero {
  position: relative;
  background: linear-gradient(135deg, var(--navy-dark) 0%, var(--navy-mid) 60%, #1e5799 100%);
  overflow: hidden;
  padding: 6rem 0 5rem;
  color: #fff;
}
.cv-hero-bg {
  position: absolute; inset: 0;
  background-image: radial-gradient(circle at 70% 40%, rgba(232,160,32,.12) 0%, transparent 60%),
    url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.03'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
.cv-hero-eyebrow { font-size:.9rem; letter-spacing:2px; text-transform:uppercase; color:var(--gold-light); margin-bottom:.75rem; }
.cv-hero-title { font-size: clamp(2rem,5vw,3.5rem); line-height:1.15; color:#fff; margin-bottom:1rem; font-family: 'Sora', sans-serif; }
.cv-text-accent { color: var(--gold); }
.cv-hero-sub { font-size:1.1rem; opacity:.85; max-width:520px; }
.min-vh-75 { min-height: 72vh; }

/* ballot graphic */
.cv-hero-graphic { perspective: 1000px; }
.cv-ballot-card {
  width: 220px; height: 280px;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 16px;
  backdrop-filter: blur(8px);
  padding: 28px;
  transform: rotateY(-10deg) rotateX(5deg);
  transition: transform .4s;
  display: flex; flex-direction: column; gap: 18px;
}
.cv-ballot-card:hover { transform: rotateY(0deg) rotateX(0deg); }
.cv-ballot-dot {
  width: 32px; height: 32px;
  border-radius: 50%;
  border: 3px solid rgba(255,255,255,.3);
  transition: .3s;
}
.cv-ballot-dot.active { background: var(--gold); border-color: var(--gold); box-shadow: 0 0 16px var(--gold); }
.cv-ballot-line { height:3px; background:rgba(255,255,255,.2); border-radius:2px; }
.cv-ballot-line.short { width:60%; }

/* ---- Stats bar ---- */
.cv-stats-bar { background: var(--navy); color:#fff; padding: 1.75rem 0; }
.cv-stat-item { padding: 1rem; border-right: 1px solid rgba(255,255,255,.12); }
.cv-stat-item:last-child { border-right: none; }
.cv-stat-number { font-family: 'Sora', sans-serif; font-size: 2rem; font-weight: 800; color: var(--gold); }
.cv-stat-label { font-size: .82rem; opacity: .7; text-transform: uppercase; letter-spacing: 1px; }

/* ---- Section headers ---- */
.cv-section-header { text-align:center; margin-bottom: 2.5rem; }
.cv-section-title { font-size: clamp(1.6rem,3vw,2.2rem); color: var(--navy-dark); margin-bottom:.4rem; }
.cv-section-sub { color: var(--gray-500); font-size: 1.05rem; }

/* ---- Election cards ---- */
.cv-election-card {
  background: #fff;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  border: 1px solid var(--gray-100);
  overflow: hidden;
  transition: box-shadow .2s, transform .2s;
  height: 100%;
  display: flex; flex-direction: column;
}
.cv-election-card:hover { box-shadow: var(--shadow-md); transform: translateY(-3px); }
.cv-election-card.active { border-top: 3px solid var(--success); }
.cv-election-card-header { padding: 1.25rem 1.25rem .75rem; }
.cv-election-title { font-size: 1.05rem; margin-bottom:0; }
.cv-election-card-body { padding: .75rem 1.25rem; flex:1; }
.cv-election-meta { display:flex; flex-wrap:wrap; gap:.6rem; font-size:.82rem; color:var(--gray-500); }
.cv-time-badge { display:inline-block; padding:.3rem .75rem; border-radius:20px; font-size:.8rem; font-weight:600; background:#e8f5e9; color:#2e7d32; }
.cv-time-badge.upcoming { background:#e3f2fd; color:#1565c0; }
.cv-election-card-footer { padding: .75rem 1.25rem 1.25rem; }

/* ---- Election hub cards ---- */
.cv-election-hub {
  background: #101821;
  color: #eef3f9;
}
.cv-section-header-dark .cv-section-title { color: #fff; }
.cv-section-header-dark .cv-section-sub,
.cv-election-empty { color: rgba(255,255,255,.68); }
.cv-hub-card {
  background: #1c2026;
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 8px;
  overflow: hidden;
  height: 100%;
  box-shadow: 0 20px 40px rgba(0,0,0,.25);
}
.cv-hub-art {
  position: relative;
  min-height: 280px;
  display: grid;
  place-items: center;
  background:
    linear-gradient(180deg, rgba(255,255,255,.93), rgba(218,224,229,.72)),
    radial-gradient(circle at center, #f2df0b 0 36%, #ffffff 37% 53%, transparent 54%);
}
.cv-hub-card.is-fefsa .cv-hub-art {
  background:
    linear-gradient(180deg, rgba(255,255,255,.93), rgba(218,224,229,.72)),
    radial-gradient(circle at center, #e7df00 0 35%, #ffffff 36% 52%, transparent 53%);
}
.cv-hub-emblem {
  width: 190px;
  height: 190px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  text-align: center;
  background: #e8df05;
  border: 8px solid #24306f;
  color: #24306f;
  font-family: 'Sora', sans-serif;
  font-weight: 800;
}
.cv-hub-emblem i { font-size: 4rem; color: #181b20; }
.cv-hub-emblem span { display: block; font-size: 1.25rem; margin-top: .25rem; }
.cv-hub-status {
  position: absolute;
  right: 1.25rem;
  top: 1.25rem;
  background: #d8ee4b;
  color: #fff;
  font-weight: 800;
  border-radius: 999px;
  padding: .35rem 1rem;
  font-size: .86rem;
}
.cv-hub-body { padding: 1.25rem; }
.cv-hub-body h3 {
  color: #fff;
  font-size: 1.45rem;
  margin: 0 0 1rem;
}
.cv-hub-body p {
  color: #d6f441;
  min-height: 2.8rem;
  font-weight: 800;
  line-height: 1.35;
}
.cv-hub-dates {
  border: 1px solid #3a414c;
  border-radius: 4px;
  overflow: hidden;
  margin: 1rem 0 1.25rem;
}
.cv-hub-dates div {
  background: #252b34;
  color: rgba(255,255,255,.78);
  text-align: center;
  padding: .55rem .75rem;
  font-weight: 700;
}
.cv-hub-dates div + div { border-top: 1px solid #3a414c; }
.cv-hub-button {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: .75rem;
  min-height: 50px;
  border-radius: 8px;
  background: #e8f58e;
  color: #111;
  text-decoration: none;
  font-weight: 800;
  transition: transform .15s, background .2s;
}
.cv-hub-button:hover {
  color: #111;
  background: #f0ffa1;
  transform: translateY(-1px);
}
.cv-hub-button i { font-size: 1.5rem; }
.cv-all-elections { background: #f5f7fb; }
.cv-all-election-card {
  display: flex;
  gap: 1rem;
  align-items: center;
  height: 100%;
  padding: 1rem;
  background: #fff;
  border: 1px solid var(--gray-100);
  border-radius: 8px;
  text-decoration: none;
  box-shadow: var(--shadow);
  transition: transform .15s, box-shadow .2s;
}
.cv-all-election-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.cv-all-election-logo {
  width: 58px;
  height: 58px;
  border-radius: 50%;
  flex: 0 0 58px;
  display: grid;
  place-items: center;
  background: linear-gradient(135deg, var(--navy), var(--gold));
  color: #fff;
  font-family: 'Sora', sans-serif;
  font-weight: 800;
}
.cv-all-election-card.is-fefsa .cv-all-election-logo {
  background: radial-gradient(circle, #e8df05 0 48%, #24306f 49% 100%);
  color: #24306f;
}
.cv-all-election-card h3 {
  margin: .35rem 0 .2rem;
  font-size: .98rem;
  line-height: 1.25;
}
.cv-all-election-card p {
  margin: 0;
  color: var(--gray-500);
  font-size: .78rem;
}
.cv-all-election-status {
  display: inline-block;
  font-size: .68rem;
  font-weight: 800;
  letter-spacing: .04em;
  color: #2e7d32;
}
.cv-all-election-status.status-upcoming { color: #1565c0; }
.cv-all-election-status.status-closed { color: var(--gray-500); }

/* ---- How it works ---- */
.cv-how-section { background: #fff; }
.cv-step-card { text-align:center; padding:2rem 1.5rem; border-radius:var(--radius); border:1px solid var(--gray-100); position:relative; transition:.2s; }
.cv-step-card:hover { box-shadow:var(--shadow); }
.cv-step-num { position:absolute; top:1rem; right:1.25rem; font-family:'Sora',sans-serif; font-size:3rem; font-weight:800; color:var(--gray-100); line-height:1; }
.cv-step-icon { width:64px; height:64px; border-radius:50%; background:linear-gradient(135deg,var(--navy),var(--navy-mid)); display:flex; align-items:center; justify-content:center; margin:0 auto 1rem; color:#fff; font-size:1.6rem; }
.cv-step-card h5 { color:var(--navy-dark); }

/* ---- Footer ---- */
.cv-footer { background: var(--navy-dark); color: rgba(255,255,255,.7); padding: 2rem 0; margin-top: 2rem; }

/* ---- Auth forms ---- */
.cv-auth-wrapper { min-height: calc(100vh - 70px); display:flex; align-items:center; padding:2rem 0; }
.cv-auth-card { background:#fff; border-radius:16px; box-shadow:var(--shadow-md); overflow:hidden; }
.cv-auth-side { background:linear-gradient(160deg,var(--navy-dark),var(--navy-mid)); color:#fff; padding:3rem 2rem; display:flex; flex-direction:column; justify-content:center; }
.cv-auth-side h2 { color:#fff; }
.cv-auth-form { padding:2.5rem; }
.cv-form-label { font-weight:600; font-size:.9rem; color:var(--gray-700); margin-bottom:.35rem; }
.cv-form-control {
  border:2px solid var(--gray-100); border-radius:8px; padding:.65rem 1rem;
  font-size:.95rem; transition:border-color .2s, box-shadow .2s;
  background: var(--gray-50);
}
.cv-form-control:focus { border-color:var(--navy); box-shadow:0 0 0 3px rgba(26,60,110,.1); background:#fff; outline:none; }

/* ---- Branded election login ---- */
.cv-election-login-shell {
  width: min(1600px, calc(100% - 2rem));
  margin: 3rem auto 4rem;
  padding: 2rem;
  min-height: 490px;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  align-items: center;
  gap: 3.5rem;
  background: #0d1824;
  border-radius: 8px;
}
.cv-election-login-shell.is-fefsa {
  background:
    radial-gradient(circle at 16% 24%, rgba(232,223,5,.18), transparent 28%),
    linear-gradient(135deg, #f7f9ef 0%, #e8f4d8 48%, #dcefd2 100%);
  border: 1px solid rgba(37, 90, 64, .14);
  box-shadow: 0 24px 70px rgba(20, 55, 39, .18);
}
.cv-election-login-brand {
  text-align: center;
  color: rgba(255,255,255,.72);
}
.cv-election-login-brand h2 {
  color: rgba(255,255,255,.72);
  font-size: 1.75rem;
  margin-bottom: 3.5rem;
}
.cv-election-login-shell.is-fefsa .cv-election-login-brand h2 {
  color: #183326;
}
.cv-election-login-logo {
  width: 200px;
  height: 200px;
  margin: 0 auto;
  display: grid;
  place-items: center;
  background: #e8df05;
  border: 8px solid #24306f;
  border-radius: 50%;
  color: #24306f;
  font-family: 'Sora', sans-serif;
  font-weight: 800;
}
.cv-election-login-logo i {
  color: #171b21;
  font-size: 4.5rem;
}
.cv-election-login-logo span {
  display: block;
  font-size: 1.3rem;
}
.cv-election-login-shell.is-fefsa .cv-election-login-logo {
  background: radial-gradient(circle, #f4ea00 0 58%, #d9d200 59% 100%);
  border-color: #234b38;
  color: #234b38;
  box-shadow: 0 18px 36px rgba(35,75,56,.2);
}
.cv-election-login-shell.is-fefsa .cv-election-login-logo i {
  color: #17281f;
}
.cv-election-login-card {
  background: #14202e;
  border: 1px solid rgba(255,255,255,.07);
  border-radius: 8px;
  padding: 2.5rem;
  box-shadow: 0 24px 48px rgba(0,0,0,.28);
}
.cv-election-login-shell.is-fefsa .cv-election-login-card {
  background: rgba(255,255,255,.86);
  border-color: rgba(35,75,56,.12);
  box-shadow: 0 24px 55px rgba(35,75,56,.14);
}
.cv-election-login-card h1,
.cv-election-login-info-card h3 {
  color: #fff;
  font-size: 1.45rem;
  font-style: italic;
  text-transform: uppercase;
}
.cv-election-login-shell.is-fefsa .cv-election-login-card h1,
.cv-election-login-shell.is-fefsa .cv-election-login-info-card h3 {
  color: #153424;
}
.cv-election-login-card p {
  color: rgba(255,255,255,.62);
  font-weight: 800;
  line-height: 1.45;
  margin-bottom: 2rem;
  padding-bottom: 2rem;
  border-bottom: 1px solid rgba(255,255,255,.08);
}
.cv-election-login-shell.is-fefsa .cv-election-login-card p {
  color: #486454;
  border-bottom-color: rgba(35,75,56,.12);
}
.cv-election-login-field {
  position: relative;
  margin-bottom: 1.25rem;
}
.cv-election-login-field i {
  position: absolute;
  left: 1rem;
  top: 50%;
  transform: translateY(-50%);
  color: rgba(255,255,255,.55);
  font-size: 1.15rem;
}
.cv-election-login-field input {
  width: 100%;
  min-height: 48px;
  padding: .75rem 1rem .75rem 3rem;
  background: #1a2836;
  color: #fff;
  border: 1px solid rgba(255,255,255,.06);
  border-radius: 8px;
  outline: none;
}
.cv-election-login-shell.is-fefsa .cv-election-login-field input {
  background: #f3f8ed;
  color: #153424;
  border-color: rgba(35,75,56,.13);
}
.cv-election-login-shell.is-fefsa .cv-election-login-field i {
  color: #5b7462;
}
.cv-election-login-field input:focus {
  border-color: #e8f58e;
  box-shadow: 0 0 0 3px rgba(232,245,142,.12);
}
.cv-election-login-button {
  width: 100%;
  min-height: 60px;
  border: 0;
  border-radius: 8px;
  background: #e8f58e;
  color: #111;
  font-weight: 900;
  font-size: 1.05rem;
  transition: transform .15s, background .2s;
}
.cv-election-login-shell.is-fefsa .cv-election-login-button {
  background: #d9f36f;
  color: #102019;
  box-shadow: 0 12px 26px rgba(93,133,38,.2);
}
.cv-election-login-button:hover {
  background: #f0ffa1;
  transform: translateY(-1px);
}
.cv-election-login-info {
  display: grid;
  gap: 1.25rem;
}
.cv-election-login-info-card {
  display: flex;
  align-items: center;
  gap: 1.25rem;
  background: #22262c;
  border-radius: 8px;
  padding: 1.5rem 2rem;
  color: #fff;
}
.cv-election-login-shell.is-fefsa .cv-election-login-info-card {
  background: #224933;
  box-shadow: 0 16px 30px rgba(35,75,56,.16);
}
.cv-election-login-info-card.status {
  background: #171936;
}
.cv-election-login-shell.is-fefsa .cv-election-login-info-card.status {
  background: #eef7d5;
  color: #153424;
}
.cv-election-login-shell.is-fefsa .cv-election-login-info-card.status p,
.cv-election-login-shell.is-fefsa .cv-election-login-info-card.status h3 {
  color: #153424;
}
.cv-election-login-info-card > i {
  color: #ff9800;
  font-size: 2.2rem;
  flex: 0 0 auto;
}
.cv-election-login-info-card.status > i {
  color: #d6f441;
}
.cv-election-login-info-card h3 {
  margin: 0 0 .35rem;
  text-transform: none;
}
.cv-election-login-info-card p {
  margin: 0;
  color: #fff;
}
.cv-election-login-shell.is-fefsa .cv-election-login-card h1::after {
  content: " - FEFSA";
}

/* ---- Dashboard ---- */
.cv-sidebar {
  background: var(--navy-dark);
  min-height: 100vh;
  width: 250px;
  position: fixed; left:0; top:0;
  padding: 0;
  display:flex; flex-direction:column;
  z-index:100;
}
.cv-sidebar-brand { padding:1.5rem 1.25rem; border-bottom:1px solid rgba(255,255,255,.1); }
.cv-sidebar-brand a { font-family:'Sora',sans-serif; color:#fff; text-decoration:none; font-size:1.3rem; }
.cv-sidebar-nav { padding:1rem 0; flex:1; }
.cv-sidebar-nav a {
  display:flex; align-items:center; gap:.75rem;
  padding:.75rem 1.5rem; color:rgba(255,255,255,.65);
  text-decoration:none; font-size:.95rem; transition:.2s;
}
.cv-sidebar-nav a:hover, .cv-sidebar-nav a.active { background:rgba(255,255,255,.08); color:#fff; }
.cv-sidebar-nav a .bi { font-size:1.15rem; }
.cv-sidebar-section { padding:.5rem 1.5rem .25rem; font-size:.7rem; text-transform:uppercase; letter-spacing:1.5px; color:rgba(255,255,255,.35); }
.cv-main-content { margin-left:250px; min-height:100vh; background:var(--gray-50); }
.cv-topbar { background:#fff; padding:1rem 2rem; border-bottom:1px solid var(--gray-100); display:flex; justify-content:space-between; align-items:center; box-shadow:0 1px 4px rgba(0,0,0,.05); }

/* ---- Candidate cards ---- */
.cv-candidate-card { background:#fff; border-radius:var(--radius); box-shadow:var(--shadow); border:2px solid transparent; transition:.2s; cursor:pointer; overflow:hidden; }
.cv-candidate-card:hover { border-color:#8fd65f; box-shadow:0 14px 34px rgba(46,158,107,.18); transform: translateY(-2px); }
.cv-candidate-card.selected { border-color:var(--success); background:#f0fdf4; box-shadow:0 18px 40px rgba(46,158,107,.2); }
.cv-candidate-card.just-selected { animation: cvSelectPop .42s ease; }
.cv-candidate-photo { width:80px; height:80px; border-radius:50%; object-fit:cover; border:3px solid var(--gray-100); }
.cv-vote-badge { position:absolute; top:10px; right:10px; width:26px; height:26px; border-radius:50%; background:var(--success); color:#fff; display:flex; align-items:center; justify-content:center; font-size:.85rem; opacity:0; transition:.2s; }
.cv-candidate-card.selected .cv-vote-badge { opacity:1; }
.cv-choice-box {
  position: absolute;
  top: 12px;
  right: 46px;
  width: 28px;
  height: 28px;
  border-radius: 6px;
  border: 2px solid #b7c0b5;
  background: #fff;
  color: #fff;
  display: grid;
  place-items: center;
  transition: border-color .2s, background .2s, transform .2s;
}
.cv-choice-box i { opacity: 0; transform: scale(.7); transition: opacity .2s, transform .2s; }
.cv-candidate-card:hover .cv-choice-box { border-color: var(--success); transform: scale(1.04); }
.cv-candidate-card.selected .cv-choice-box {
  background: var(--success);
  border-color: var(--success);
}
.cv-candidate-card.selected .cv-choice-box i {
  opacity: 1;
  transform: scale(1);
}
.cv-vote-radio:checked + .cv-candidate-card {
  border-color: var(--success);
  background: #f0fdf4;
  box-shadow: 0 18px 40px rgba(46,158,107,.2);
}
.cv-vote-radio:checked + .cv-candidate-card .cv-choice-box {
  background: var(--success);
  border-color: var(--success);
}
.cv-vote-radio:checked + .cv-candidate-card .cv-choice-box i,
.cv-vote-radio:checked + .cv-candidate-card .cv-vote-badge {
  opacity: 1;
  transform: scale(1);
}
@keyframes cvSelectPop {
  0% { transform: scale(.985); }
  45% { transform: scale(1.025); }
  100% { transform: scale(1); }
}

.cv-vote-page.is-fefsa .cv-card {
  border-radius: 10px;
  border: 1px solid rgba(35,75,56,.1);
}
.cv-vote-page.is-fefsa > .cv-card:first-of-type {
  background:
    radial-gradient(circle at top right, rgba(217,243,111,.38), transparent 30%),
    linear-gradient(135deg, #173828, #24553c);
  color: #fff;
  box-shadow: 0 22px 48px rgba(35,75,56,.18);
}
.cv-vote-page.is-fefsa > .cv-card:first-of-type h2,
.cv-vote-page.is-fefsa > .cv-card:first-of-type p,
.cv-vote-page.is-fefsa > .cv-card:first-of-type .text-muted {
  color: #fff !important;
}
.cv-vote-page.is-fefsa .cv-candidate-card {
  border-color: rgba(35,75,56,.08);
}
.cv-vote-page.is-fefsa .cv-candidate-card:hover,
.cv-vote-page.is-fefsa .cv-candidate-card.selected,
.cv-vote-page.is-fefsa .cv-vote-radio:checked + .cv-candidate-card {
  border-color: #2e9e6b;
  background: linear-gradient(180deg, #f7fff0, #ffffff);
}

/* ---- Results ---- */
.cv-result-bar { height:10px; background:var(--gray-100); border-radius:5px; overflow:hidden; margin-top:.4rem; }
.cv-result-fill { height:100%; background:linear-gradient(90deg,var(--navy),var(--navy-mid)); border-radius:5px; transition:width 1s ease; }
.cv-result-fill.winner { background:linear-gradient(90deg,var(--success),#52c48a); }

/* ---- Tables ---- */
.cv-table { width:100%; border-collapse:separate; border-spacing:0; }
.cv-table th { background:var(--navy-dark); color:#fff; padding:.75rem 1rem; font-weight:600; font-size:.85rem; text-transform:uppercase; letter-spacing:.5px; }
.cv-table td { padding:.85rem 1rem; border-bottom:1px solid var(--gray-100); vertical-align:middle; }
.cv-table tr:hover td { background:var(--gray-50); }

/* ---- Alerts ---- */
.alert { border:none; border-radius:10px; font-weight:500; }
.alert-success { background:#e8f5e9; color:#1b5e20; }
.alert-danger  { background:#ffebee; color:#b71c1c; }
.alert-info    { background:#e3f2fd; color:#0d47a1; }
.alert-warning { background:#fff8e1; color:#e65100; }

/* ---- Badges ---- */
.badge { font-weight:600; padding:.4em .75em; border-radius:6px; }

/* ---- Responsive ---- */
@media (max-width: 991px) {
  .cv-sidebar { position:static; width:100%; min-height:auto; flex-direction:row; }
  .cv-main-content { margin-left:0; }
  .cv-election-login-shell {
    grid-template-columns: 1fr;
    gap: 2rem;
    padding: 1.25rem;
    margin-top: 1.5rem;
  }
  .cv-election-login-brand h2 { margin-bottom: 1.5rem; }
  .cv-election-login-card { padding: 1.5rem; }
}

/* ---- Utilities ---- */
.cv-card { background:#fff; border-radius:var(--radius); box-shadow:var(--shadow); padding:1.5rem; }
.cv-empty-state { padding:3rem; }
.text-navy { color:var(--navy) !important; }
.text-gold { color:var(--gold) !important; }
.bg-navy { background:var(--navy) !important; }
