/* NUESA OAUSTECH Election Management System — Public Styles */

.nuesa-el-wrap {
	--nuesa-primary: #56A957;
	--nuesa-secondary: #DA883F;
	--nuesa-ink: #14231c;
	--nuesa-muted: #5c6b64;
	--nuesa-bg: #f6f8f5;
	--nuesa-card: #ffffff;
	--nuesa-border: #e2e8e2;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	color: var(--nuesa-ink);
	max-width: 920px;
	margin: 0 auto;
	line-height: 1.55;
}

.nuesa-el-hero {
	background: linear-gradient(135deg, var(--nuesa-primary) 0%, #0d3f29 100%);
	color: #fff;
	border-radius: 18px;
	padding: 40px 32px;
	text-align: center;
	position: relative;
	overflow: hidden;
	margin-bottom: 24px;
}

.nuesa-el-hero::after {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(circle at 85% 15%, rgba(242,169,0,0.25), transparent 55%);
	pointer-events: none;
}

.nuesa-el-logo {
	max-height: 56px;
	margin-bottom: 12px;
}

.nuesa-el-eyebrow {
	display: inline-block;
	text-transform: uppercase;
	letter-spacing: 0.14em;
	font-size: 12px;
	font-weight: 700;
	color: #fff;
	margin-bottom: 8px;
}

.nuesa-el-title {
	color: #fff !important;
	font-size: clamp(24px, 4vw, 34px);
	font-weight: 800;
	margin: 0 0 8px;
	letter-spacing: -0.01em;
}

.nuesa-el-desc {
	color: #fff;
	max-width: 560px;
	margin: 0 auto 18px;
	font-size: 15px;
}

.nuesa-el-hero h1,
.nuesa-el-hero p,
.nuesa-el-hero span,
.nuesa-el-hero .nuesa-el-date-chip,
.nuesa-el-hero .nuesa-el-date-chip strong,
.nuesa-el-hero .nuesa-el-date-chip span {
	color: #fff;
}

.nuesa-el-status-pill {
	display: inline-block;
	background: rgba(255,255,255,0.14);
	border: 1px solid rgba(255,255,255,0.35);
	color: #fff;
	padding: 8px 18px;
	border-radius: 999px;
	font-weight: 700;
	font-size: 14px;
	letter-spacing: 0.01em;
}

.nuesa-phase-voting { background: rgba(242,169,0,0.22); border-color: var(--nuesa-secondary); }
.nuesa-phase-results_published { background: rgba(255,255,255,0.22); }

.nuesa-el-dates {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 12px;
	margin-top: 22px;
}

.nuesa-el-date-chip {
	color: #fff;
	background: rgba(255,255,255,0.10);
	border: 1px solid rgba(255,255,255,0.25);
	border-radius: 12px;
	padding: 10px 16px;
	font-size: 13px;
	text-align: left;
}

.nuesa-el-date-chip strong {
	display: block;
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: #fff;
	margin-bottom: 2px;
}

.nuesa-el-countdown {
	margin-top: 16px;
	font-size: 14px;
	font-weight: 600;
	color: #fff;
	min-height: 20px;
}

.nuesa-el-body { display: flex; flex-direction: column; gap: 20px; }

.nuesa-el-card {
	background: var(--nuesa-card);
	border: 1px solid var(--nuesa-border);
	border-radius: 16px;
	padding: 28px;
	box-shadow: 0 1px 2px rgba(20,35,28,0.04);
}

.nuesa-el-card h2 { margin-top: 0; font-size: 22px; }
.nuesa-el-card h3 { margin-top: 0; font-size: 18px; }

.nuesa-el-center { text-align: center; }
.nuesa-el-muted { color: var(--nuesa-muted); font-size: 14px; }

/* Forms */
.nuesa-el-form { display: flex; flex-direction: column; gap: 16px; }
.nuesa-el-grid-2 {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 16px;
}
@media (max-width: 600px) {
	.nuesa-el-grid-2 { grid-template-columns: 1fr; }
}
.nuesa-el-form label {
	display: flex;
	flex-direction: column;
	gap: 6px;
	font-size: 13px;
	font-weight: 600;
	color: var(--nuesa-ink);
}
.nuesa-el-form .req { color: #c0392b; }
.nuesa-el-form input[type="text"],
.nuesa-el-form input[type="email"],
.nuesa-el-form input[type="tel"],
.nuesa-el-form input[type="password"],
.nuesa-el-form input[type="file"],
.nuesa-el-form select,
.nuesa-el-form textarea {
	font-family: inherit;
	font-size: 14px;
	font-weight: 400;
	padding: 11px 13px;
	border-radius: 10px;
	border: 1.5px solid var(--nuesa-border);
	background: #fbfcfb;
	color: var(--nuesa-ink);
}
.nuesa-el-form input:focus,
.nuesa-el-form select:focus,
.nuesa-el-form textarea:focus {
	outline: none;
	border-color: var(--nuesa-primary);
	background: #fff;
}
.nuesa-el-form textarea { resize: vertical; }

/* The aspirant form wraps its post-position fields in a <fieldset> so
   the whole group can be locked until payment clears — browsers apply
   their own default border/padding/min-width to <fieldset>, which
   otherwise makes its submit button look different from an identical
   button sitting outside one (e.g. on the voter registration form). */
.nuesa-el-form fieldset {
	border: none;
	margin: 0;
	padding: 0;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.nuesa-el-btn {
	display: inline-block;
	border: none;
	border-radius: 10px;
	padding: 13px 22px;
	font-weight: 700;
	font-size: 14px;
	cursor: pointer;
	transition: transform 0.05s ease, opacity 0.15s ease;
}
.nuesa-el-btn:active { transform: scale(0.98); }
.nuesa-el-btn-primary {
	background: var(--nuesa-primary);
	color: #fff;
}
.nuesa-el-btn-primary:hover { opacity: 0.92; }
.nuesa-el-btn-secondary {
	background: #eef2ee;
	color: var(--nuesa-ink);
}
.nuesa-el-btn:disabled { opacity: 0.6; cursor: not-allowed; }

.nuesa-el-form-message {
	font-size: 13px;
	font-weight: 600;
	min-height: 18px;
}
.nuesa-el-form-message.is-error { color: #c0392b; }
.nuesa-el-form-message.is-success { color: var(--nuesa-primary); }

/* Candidates */
.nuesa-el-section-block { margin-bottom: 34px; }
.nuesa-el-section-title {
	font-size: 20px;
	font-weight: 800;
	color: var(--nuesa-primary);
	border-bottom: 2px solid var(--nuesa-secondary);
	padding-bottom: 8px;
	margin-bottom: 18px;
}
.nuesa-el-position-block { margin-bottom: 26px; }
.nuesa-el-position-title {
	border-left: 4px solid var(--nuesa-secondary);
	padding-left: 12px;
	margin-bottom: 14px;
}
.nuesa-el-candidate-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 16px;
}
.nuesa-el-candidate-card {
	background: #fbfcfb;
	border: 1px solid var(--nuesa-border);
	border-radius: 14px;
	padding: 18px;
	text-align: center;
}
.nuesa-el-candidate-photo {
	width: 84px;
	height: 84px;
	border-radius: 50%;
	object-fit: cover;
	margin: 0 auto 10px;
	border: 3px solid var(--nuesa-secondary);
}
.nuesa-el-photo-placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--nuesa-primary);
	color: #fff;
	font-weight: 800;
	font-size: 28px;
}
.nuesa-el-candidate-card h4 { margin: 4px 0; font-size: 15px; }
.nuesa-el-candidate-meta { font-size: 12px; color: var(--nuesa-muted); margin: 0 0 8px; }
.nuesa-el-candidate-bio { font-size: 13px; color: #33443a; }
.nuesa-el-candidate-select {
	margin-top: 10px;
	width: 100%;
}

/* Voting */
.nuesa-el-ballot-position { margin-bottom: 22px; }
.nuesa-el-ballot-candidates { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px,1fr)); gap: 12px; }
.nuesa-el-ballot-card {
	border: 2px solid var(--nuesa-border);
	border-radius: 14px;
	padding: 16px;
	text-align: center;
	cursor: pointer;
	transition: border-color 0.12s ease, background 0.12s ease;
}
.nuesa-el-ballot-card.is-selected {
	border-color: var(--nuesa-primary);
	background: rgba(11,93,59,0.06);
}
.nuesa-el-review-row {
	display: flex;
	justify-content: space-between;
	padding: 10px 0;
	border-bottom: 1px solid var(--nuesa-border);
	font-size: 14px;
}
.nuesa-el-confirm-box {
	background: #fff7e6;
	border: 1px solid var(--nuesa-secondary);
	border-radius: 12px;
	padding: 16px;
	font-size: 14px;
	margin: 16px 0;
}

/* Results / live bars */
.nuesa-el-result-row { margin-bottom: 14px; }
.nuesa-el-result-row-top {
	display: flex;
	justify-content: space-between;
	font-size: 14px;
	margin-bottom: 6px;
}
.nuesa-el-result-name { font-weight: 700; }
.nuesa-el-bar-track {
	background: #eef2ee;
	border-radius: 999px;
	height: 12px;
	overflow: hidden;
}
.nuesa-el-bar-fill {
	background: linear-gradient(90deg, var(--nuesa-primary), var(--nuesa-secondary));
	height: 100%;
	border-radius: 999px;
	transition: width 0.4s ease;
}
.nuesa-el-total-votes { margin-top: 10px; margin-bottom: 0; }

.nuesa-el-turnout-summary {
	display: flex;
	gap: 24px;
	justify-content: center;
	flex-wrap: wrap;
	margin-bottom: 18px;
}
.nuesa-el-turnout-stat { text-align: center; }
.nuesa-el-turnout-stat .num { font-size: 26px; font-weight: 800; color: var(--nuesa-primary); display: block; }
.nuesa-el-turnout-stat .label { font-size: 12px; color: var(--nuesa-muted); text-transform: uppercase; letter-spacing: 0.06em; }

.nuesa-el-footer {
	text-align: center;
	color: var(--nuesa-muted);
	font-size: 12px;
	padding: 24px 0 8px;
}

/* Voter profile dashboard */
.nuesa-voter-dashboard-card{display:flex;gap:24px;align-items:flex-start;padding:4px}
.nuesa-voter-profile-photo-wrap{flex:0 0 120px;text-align:center}
.nuesa-voter-profile-photo{width:120px;height:140px;object-fit:cover;border-radius:10px;border:1px solid rgba(0,0,0,.12);display:block}
.nuesa-voter-profile-details{flex:1}
.nuesa-voter-profile-details h3{margin-top:0}
.nuesa-voter-profile-details p{margin:.45rem 0}
.nuesa-voter-profile-details p span{font-weight:600}
@media(max-width:600px){.nuesa-voter-dashboard-card{flex-direction:column}.nuesa-voter-profile-photo-wrap{align-self:center}}


/* Private voter account dashboard */
.nuesa-voter-dashboard-heading{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:10px}
.nuesa-voter-dashboard-heading h3{margin:0 0 2px}
.nuesa-voter-status-pill{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;background:rgba(86,169,87,.12);color:var(--nuesa-primary);font-size:12px;font-weight:700;white-space:nowrap}
.nuesa-dashboard-password-form{margin-top:12px;padding:14px;border:1px solid var(--nuesa-border);border-radius:12px;background:#fafcf9}
.nuesa-dashboard-security{margin-top:14px}
.nuesa-dashboard-security summary{cursor:pointer;font-weight:700}
.nuesa-voter-voting-status{margin-top:18px;padding:14px;border-radius:12px;border:1px solid var(--nuesa-border);background:#f7faf7}
.nuesa-voter-voting-status.is-live{border-color:var(--nuesa-primary);background:rgba(86,169,87,.07)}
.nuesa-voted-state{margin-top:18px}
.nuesa-el-live-leader{display:inline-block;margin-left:8px;padding:3px 7px;border-radius:999px;font-size:10px;line-height:1;background:var(--nuesa-primary);color:#fff;vertical-align:middle;text-transform:uppercase;letter-spacing:.04em}
@media(max-width:600px){.nuesa-voter-dashboard-heading{flex-direction:column}.nuesa-voter-status-pill{align-self:flex-start}}


/* Prominent success/error modal notifications */
.nuesa-el-modal{display:none;position:fixed;inset:0;z-index:999999;align-items:center;justify-content:center;padding:20px}
.nuesa-el-modal.is-open{display:flex}
.nuesa-el-modal-backdrop{position:absolute;inset:0;background:rgba(15,23,42,.62);backdrop-filter:blur(3px)}
.nuesa-el-modal-dialog{position:relative;width:min(520px,100%);background:#fff;border-radius:20px;padding:32px 28px 26px;box-shadow:0 25px 70px rgba(0,0,0,.25);text-align:center;animation:nuesaModalIn .18s ease-out}
.nuesa-el-modal-close{position:absolute;right:12px;top:8px;border:0;background:transparent;font-size:30px;line-height:1;cursor:pointer;color:#667085}
.nuesa-el-modal-icon{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;background:rgba(86,169,87,.13);color:var(--nuesa-primary);font-size:30px;font-weight:800}
.nuesa-el-modal.is-error .nuesa-el-modal-icon{background:#fff0ef;color:#c0392b}
.nuesa-el-modal-dialog h3{margin:0 0 10px;font-size:24px}
.nuesa-el-modal-dialog #nuesa-el-modal-message{font-size:15px;line-height:1.65;color:#475467}
.nuesa-el-modal-dialog #nuesa-el-modal-message p{margin:8px 0}
.nuesa-el-modal-dialog #nuesa-el-modal-actions{margin-top:20px}
@keyframes nuesaModalIn{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}

/* Public live contestant cards */
.nuesa-el-live-candidate-main{display:flex;gap:12px;align-items:center;margin-bottom:10px}
.nuesa-el-live-candidate-photo{width:58px;height:68px;object-fit:cover;border-radius:10px;border:1px solid rgba(0,0,0,.1);flex:0 0 58px}
.nuesa-el-live-candidate-info{min-width:0;flex:1}
.nuesa-el-live-nickname{font-size:12px;color:var(--nuesa-muted);margin-top:2px}
.nuesa-el-live-candidate .nuesa-el-result-count{font-size:13px;margin-top:4px}

/* Contestant dashboard */
.nuesa-aspirant-dashboard{display:flex;gap:24px;align-items:flex-start}
.nuesa-aspirant-photo-wrap{flex:0 0 130px}
.nuesa-aspirant-photo{width:130px;height:150px;object-fit:cover;border-radius:12px;border:1px solid rgba(0,0,0,.1)}
.nuesa-aspirant-dashboard-content{flex:1;min-width:0}
.nuesa-aspirant-profile-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 22px;margin:18px 0}
.nuesa-aspirant-profile-grid p{margin:.45rem 0}
.nuesa-aspirant-update{padding:15px;border-radius:12px;margin:16px 0;line-height:1.55}
.nuesa-aspirant-update.is-pending{background:#fff7e6;border:1px solid var(--nuesa-secondary)}
.nuesa-aspirant-update.is-approved{background:#eefaf0;border:1px solid #8ac58b}
.nuesa-aspirant-update.is-rejected{background:#fff1f0;border:1px solid #e5a09b}
.nuesa-voter-status-pill.is-approved{background:#eefaf0;color:#2f7d32}
.nuesa-voter-status-pill.is-rejected{background:#fff1f0;color:#9c2b25}
.nuesa-voter-status-pill.is-pending{background:#fff7e6;color:#9a6500}
.nuesa-aspirant-application-details{border-top:1px solid var(--nuesa-border);padding-top:14px;margin-top:18px}
.nuesa-aspirant-application-details summary{cursor:pointer;font-weight:700}
.nuesa-aspirant-application-details h4{margin:16px 0 5px}
@media(max-width:600px){.nuesa-el-modal-dialog{padding:30px 18px 22px}.nuesa-aspirant-dashboard{flex-direction:column}.nuesa-aspirant-photo-wrap{align-self:center}.nuesa-aspirant-profile-grid{grid-template-columns:1fr}.nuesa-el-live-candidate-photo{width:50px;height:60px;flex-basis:50px}}

.nuesa-el-election-meta{margin:0 0 4px;font-size:13px;opacity:.85}.nuesa-dashboard-tour-trigger{margin-left:auto}.nuesa-dashboard-tour{position:fixed;inset:0;z-index:999999;background:rgba(0,0,0,.58);display:flex;align-items:center;justify-content:center;padding:18px}.nuesa-dashboard-tour-box{background:#fff;border-radius:18px;max-width:520px;width:100%;padding:28px;box-shadow:0 20px 60px rgba(0,0,0,.25);position:relative}.nuesa-tour-close{position:absolute;right:14px;top:10px;border:0;background:none;font-size:28px;cursor:pointer}.nuesa-tour-count{font-size:12px;font-weight:700;opacity:.65;margin-bottom:8px}.nuesa-dashboard-tour h3{margin:0 0 10px}.nuesa-dashboard-tour p{line-height:1.6}.nuesa-tour-actions{display:flex;align-items:center;gap:8px;margin-top:24px}.nuesa-tour-spacer{flex:1}@media(max-width:600px){.nuesa-dashboard-tour-box{padding:24px 18px}.nuesa-tour-actions{flex-wrap:wrap}.nuesa-dashboard-tour-trigger{margin-left:0}}
.nuesa-voter-login-header{text-align:center;margin-bottom:18px}.nuesa-voter-login-header h2{margin-bottom:6px}.nuesa-el-text-btn{display:block;border:0;background:none;padding:8px 0;margin:8px auto;color:inherit;text-decoration:underline;cursor:pointer}.nuesa-voter-login .nuesa-el-text-btn:focus{outline:2px solid currentColor;outline-offset:2px}


/* v1.3.2: dashboard-to-voting-dashboard flow */
.nuesa-vote-now-btn{margin-top:12px;display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
.nuesa-voting-dashboard-page .nuesa-el-card{max-width:980px;margin:0 auto}
.nuesa-voting-dashboard-heading{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;border-bottom:1px solid var(--nuesa-border);padding-bottom:18px;margin-bottom:20px}
.nuesa-voting-dashboard-heading h2{margin:2px 0 4px}
.nuesa-voting-voter-summary{display:flex;gap:16px;align-items:center;padding:14px;border:1px solid var(--nuesa-border);border-radius:14px;background:#f8fbf8;margin-bottom:22px}
.nuesa-voting-voter-summary strong{font-size:16px}
.nuesa-voting-voter-photo{width:64px;height:76px;object-fit:cover;border-radius:9px;border:1px solid var(--nuesa-border)}
.nuesa-voting-ballot-step{padding-top:4px}
.nuesa-ballot-nickname{font-size:12px;opacity:.75;margin-top:3px}
.nuesa-voting-dashboard-page .nuesa-el-ballot-card{min-height:130px}
@media(max-width:600px){.nuesa-voting-dashboard-heading{flex-direction:column}.nuesa-voting-voter-summary{align-items:flex-start}.nuesa-voting-voter-photo{width:56px;height:68px}}

/* v1.3.6: separate account entry points for voters and contestants */
.nuesa-account-access-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:24px}
.nuesa-account-access-card{border:1px solid var(--nuesa-border);border-radius:16px;background:#fff;padding:22px;box-shadow:0 8px 24px rgba(0,0,0,.04)}
.nuesa-account-access-header{text-align:center;margin-bottom:16px}
.nuesa-account-access-header h2{margin:8px 0 6px;font-size:20px}
.nuesa-account-access-icon{display:inline-flex;width:42px;height:42px;border-radius:50%;align-items:center;justify-content:center;background:rgba(86,169,87,.12);color:var(--nuesa-primary);font-weight:800}
.nuesa-account-access-card .nuesa-el-btn{width:100%}
.nuesa-account-access-card .nuesa-account-signup-link{margin-top:8px}
.nuesa-account-logout{margin-top:18px}
@media(max-width:700px){.nuesa-account-access-grid{grid-template-columns:1fr}.nuesa-account-access-card{padding:18px}}

.nuesa-auth-tabs{display:grid;grid-template-columns:1fr 1fr;gap:3px;padding:3px;background:#eef2f2;border-radius:10px;margin:0 0 18px}.nuesa-auth-tab{border:0;border-radius:8px;padding:11px 12px;background:transparent;color:#667085;font-weight:700;cursor:pointer}.nuesa-auth-tab.is-active{background:var(--nuesa-primary);color:#fff}.nuesa-auth-tab.nuesa-account-signup-link{width:auto;margin:0;text-decoration:none}

.nuesa-voting-standalone{max-width:1000px;margin:0 auto}.nuesa-voting-live-banner{margin-bottom:20px}.nuesa-voting-live-banner h1{margin:6px 0 8px}.nuesa-voting-login-shell .nuesa-voter-login{max-width:720px;margin:0 auto}.nuesa-voting-standalone .nuesa-auth-tabs{display:none}

/* v1.3.20: contestant form switches between the 100-Level and higher-level executive sections. */
.nuesa-contestant-level-form { margin-top: 18px; }
.nuesa-contestant-level-form .nuesa-el-section-heading { margin-bottom: 12px; }
