:root{
  --pink:#b91c5c;--pink-dark:#7f123f;--pink-soft:#fff1f6;--ink:#26141d;--muted:#6b5a63;
  --line:#ead9e1;--white:#fff;--green:#166534;--red:#b42318;--gold:#b7791f;
  --shadow:0 16px 44px rgba(71,25,47,.10);--radius:18px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:Inter,Segoe UI,Arial,sans-serif;color:var(--ink);background:#fbf8fa;line-height:1.55}
a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.hidden{display:none!important}
.container{width:min(1120px,calc(100% - 30px));margin:auto}
.topbar{background:#241018;color:#fff;font-size:.9rem}.topbar .container{display:flex;justify-content:space-between;gap:15px;padding:7px 0}
.navbar{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50}.nav-inner{height:82px;display:flex;align-items:center;justify-content:space-between;gap:20px}
.brand{display:flex;align-items:center;gap:12px}.brand img{width:56px;height:64px;object-fit:contain}.brand strong{display:block;font-size:1.05rem}.brand span{font-size:.86rem;color:var(--muted)}
.nav-actions{display:flex;align-items:center;gap:10px}.link-admin{font-weight:800;color:var(--pink-dark)}
.hero{background:linear-gradient(135deg,#fff,#fff2f7);border-bottom:1px solid var(--line)}.hero .container{padding:48px 0 38px;text-align:center}.hero h1{font-size:clamp(2rem,4vw,3.4rem);line-height:1.08;margin:0 0 12px}.hero p{max-width:760px;margin:0 auto;color:var(--muted);font-size:1.05rem}
.main-space{padding:30px 0 48px}.grid{display:grid;gap:18px}.grid-2{grid-template-columns:1.08fr .92fr}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.panel{padding:22px}.section-title{margin:0 0 8px;font-size:1.45rem}.muted{color:var(--muted)}.center{text-align:center}.between{display:flex;align-items:center;justify-content:space-between;gap:12px}.stack{display:grid;gap:12px}
.badge{display:inline-flex;align-items:center;gap:7px;border-radius:999px;padding:7px 11px;font-size:.82rem;font-weight:900;background:var(--pink-soft);color:var(--pink-dark)}.badge-open{background:#ecfdf3;color:var(--green)}.badge-closed{background:#fff1f1;color:var(--red)}
.btn{border:0;border-radius:12px;padding:11px 16px;font-weight:900;cursor:pointer;transition:.18s;display:inline-flex;align-items:center;justify-content:center;gap:8px}.btn:hover{transform:translateY(-1px)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn-primary{background:var(--pink);color:#fff}.btn-dark{background:#26141d;color:#fff}.btn-outline{background:#fff;border:1px solid var(--line);color:var(--ink)}.btn-danger{background:#fff1f1;color:var(--red);border:1px solid #ffd1d1}.btn-warning{background:#fff8e7;color:#805600;border:1px solid #f2dfad}.btn-sm{padding:7px 10px;font-size:.83rem}
.form-control{width:100%;border:1px solid #d9c9d1;border-radius:12px;background:#fff;padding:11px 12px;outline:none}.form-control:focus{border-color:var(--pink);box-shadow:0 0 0 3px rgba(185,28,92,.10)}label{font-weight:800;font-size:.9rem;display:grid;gap:6px}textarea.form-control{min-height:90px;resize:vertical}
.status-box{padding:15px;border-radius:14px;background:var(--pink-soft);border:1px solid #f0cedd;margin-bottom:18px}.status-box h2{margin:8px 0 3px}.status-box p{margin:0;color:var(--muted)}
.scanner-frame{position:relative;overflow:hidden;min-height:330px;border:2px dashed #d7a4b9;border-radius:16px;background:#160c10;color:#fff;display:grid;place-items:center}.scanner-frame video{width:100%!important;height:330px!important;object-fit:cover!important}.scanner-help{font-size:.86rem;color:var(--muted);margin-top:10px}.scan-actions{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0}.manual-box{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}
.identity-card{padding:18px;background:#fff7fa;border:1px solid #efd3df;border-radius:14px}.identity-card strong{font-size:1.1rem}.step-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.candidate-choice{display:grid;grid-template-columns:64px 1fr auto;gap:14px;align-items:center;border:2px solid var(--line);border-radius:16px;padding:14px;cursor:pointer;margin-bottom:12px;transition:.15s}.candidate-choice:hover,.candidate-choice.selected{border-color:var(--pink);background:#fff6f9}.list-mark{width:58px;height:58px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--pink),#4a1329);color:#fff;font-weight:1000;font-size:1.2rem}.candidate-choice input{width:22px;height:22px;accent-color:var(--pink)}
.info-list{display:grid;gap:12px}.info-item{padding:14px;border-radius:14px;border:1px solid var(--line);background:#fff}.info-item h3{margin:0 0 4px;font-size:1rem}.info-item p{margin:0;color:var(--muted)}
.footer{background:#26141d;color:#fff}.footer .container{padding:18px 0;text-align:center;font-size:.9rem;color:#eedce5}
.toast{position:fixed;right:18px;bottom:18px;z-index:500;padding:13px 16px;border-radius:12px;background:#26141d;color:#fff;box-shadow:var(--shadow);max-width:min(430px,calc(100% - 36px))}.toast-error{background:#8d1b1b}.toast-success{background:#166534}
.login-page{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#fff0f6,#fff)}.login-card{width:min(450px,calc(100% - 28px));padding:28px}.login-card .brand{justify-content:center;margin-bottom:18px}.login-card h1{text-align:center;margin:8px 0}.login-card>p{text-align:center}.login-form{display:grid;gap:14px;margin-top:18px}.login-form .btn{width:100%}
.admin-body{background:#f7f4f6}.admin-shell{min-height:100vh;display:grid;grid-template-columns:270px 1fr}.sidebar{background:#26141d;color:#fff;padding:22px 18px;position:sticky;top:0;height:100vh;overflow:auto}.sidebar .brand img{width:48px;height:56px}.sidebar .brand span{color:#edd7e1}.sidebar nav{display:grid;gap:7px;margin-top:24px}.sidebar nav a{padding:11px 12px;border-radius:11px;color:#f5e7ed;font-weight:800}.sidebar nav a:hover,.sidebar nav a.active{background:#7f123f}.admin-main{padding:26px;min-width:0}.admin-header{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:20px}.admin-header h1{margin:0}.admin-header p{margin:3px 0 0}.stat-grid{grid-template-columns:repeat(5,1fr)}.stat-card{padding:16px}.stat-card strong{display:block;font-size:1.65rem;color:var(--pink-dark)}.stat-card span{color:var(--muted);font-size:.88rem}.admin-section{padding:21px;margin-top:20px;scroll-margin-top:20px}.admin-section>h2{margin-top:0}.admin-grid-form{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;align-items:end}.admin-grid-form .full{grid-column:1/-1}.toolbar{display:flex;gap:10px;justify-content:space-between;align-items:center;flex-wrap:wrap;margin:14px 0}.toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:14px}.table{width:100%;border-collapse:collapse;min-width:760px}.table th,.table td{padding:11px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.table th{background:#fff6f9;color:var(--pink-dark);font-size:.84rem}.table tr:last-child td{border-bottom:0}.status-dot{font-weight:900}.status-yes{color:var(--green)}.status-no{color:var(--gold)}.actions{display:flex;gap:6px;flex-wrap:wrap}.import-help{font-size:.88rem;color:var(--muted);margin-top:6px}
.result-item{padding:13px;border:1px solid var(--line);border-radius:13px;margin-bottom:10px}.result-line{display:flex;justify-content:space-between;gap:15px}.result-bar{height:15px;background:#f1e3e9;border-radius:999px;overflow:hidden;margin:8px 0}.result-fill{height:100%;background:var(--pink);border-radius:999px}.results-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:15px}.results-summary .mini{padding:14px;border:1px solid var(--line);border-radius:13px}.results-summary strong{display:block;font-size:1.35rem}
@media(max-width:1050px){.stat-grid{grid-template-columns:repeat(3,1fr)}.admin-grid-form{grid-template-columns:repeat(2,1fr)}.grid-2{grid-template-columns:1fr}.admin-shell{grid-template-columns:1fr}.sidebar{position:relative;height:auto}.sidebar nav{grid-template-columns:repeat(4,1fr)}.sidebar nav a{text-align:center}.admin-main{padding:18px}}
@media(max-width:700px){.topbar{display:none}.nav-inner{height:74px}.brand img{width:48px;height:56px}.brand span{display:none}.hero .container{padding:34px 0}.stat-grid,.grid-3,.grid-4,.results-summary{grid-template-columns:1fr 1fr}.admin-grid-form{grid-template-columns:1fr}.sidebar nav{grid-template-columns:1fr 1fr}.manual-box{grid-template-columns:1fr}.candidate-choice{grid-template-columns:54px 1fr}.candidate-choice input{grid-column:1/-1}.admin-header{align-items:flex-start;flex-direction:column}.nav-actions .link-admin{font-size:.88rem}}
@media(max-width:480px){.stat-grid,.grid-3,.grid-4,.results-summary{grid-template-columns:1fr}.sidebar nav{grid-template-columns:1fr}.brand strong{font-size:.94rem}}

/* Candidatos y administración */
.candidate-preview-list{display:grid;gap:12px;margin-top:16px}
.candidate-preview-card{display:grid;grid-template-columns:58px 1fr;gap:13px;align-items:start;padding:14px;border:1px solid var(--line);border-radius:15px;background:#fff}
.candidate-preview-card .list-mark{width:48px;height:48px;font-size:1rem}
.candidate-preview-card h3{margin:0 0 2px;color:var(--pink-dark)}
.candidate-preview-card strong{display:block;margin-bottom:2px}
.candidate-preview-card p{margin:0 0 6px;color:var(--muted);font-size:.86rem}
.candidate-preview-card small{display:block;color:var(--muted);line-height:1.45}
.list-admin-card{display:grid;grid-template-columns:64px 1fr auto;gap:14px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:14px;background:#fff}
.list-admin-card h3{margin:0 0 4px}.list-admin-card p{margin:0;color:var(--muted)}
.backup-actions{display:flex;gap:9px;flex-wrap:wrap}
@media(max-width:700px){.list-admin-card{grid-template-columns:54px 1fr}.list-admin-card .actions{grid-column:1/-1}}

/* Carga masiva por aula */
.section-head-wrap{flex-wrap:wrap}
.bulk-import-box{margin-top:18px;padding:18px;border:1px solid #e7cbd8;border-radius:16px;background:linear-gradient(135deg,#fffafd,#fff)}
.bulk-import-title{display:flex;justify-content:space-between;gap:14px;align-items:center;margin-bottom:15px}.bulk-import-title strong{display:block;font-size:1.08rem}.bulk-import-title span{display:block;color:var(--muted);font-size:.9rem;margin-top:2px}.step-pill{background:#f7e8ef!important;color:var(--pink-dark)!important;padding:6px 10px;border-radius:999px;font-weight:900;white-space:nowrap}
.class-import-grid{display:grid;grid-template-columns:1fr 1fr 1fr 2fr;gap:12px;align-items:end}.file-drop-label{min-width:0}
.import-preview{margin-top:14px;border:1px solid var(--line);border-radius:14px;background:#fff;overflow:hidden}.empty-preview{padding:18px;display:grid;gap:3px;color:var(--muted)}.empty-preview strong{color:var(--ink)}
.preview-summary{display:grid;grid-template-columns:2fr 1.3fr .7fr .7fr;border-bottom:1px solid var(--line);background:#fff7fa}.preview-summary>div{padding:11px 13px;border-right:1px solid var(--line)}.preview-summary>div:last-child{border-right:0}.preview-summary span{display:block;color:var(--muted);font-size:.78rem}.preview-summary strong{display:block;margin-top:2px;font-size:.92rem}
.mini-table-wrap{overflow:auto;max-height:310px}.mini-table{width:100%;border-collapse:collapse}.mini-table th,.mini-table td{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;font-size:.88rem}.mini-table th{background:#fff;color:var(--pink-dark)}.new-tag,.dup-tag{display:inline-block;border-radius:999px;padding:3px 8px;font-size:.76rem;font-weight:900}.new-tag{background:#ecfdf3;color:var(--green)}.dup-tag{background:#fff3e6;color:#9a5b00}
.import-toolbar{margin-bottom:0}
@media(max-width:1100px){.class-import-grid{grid-template-columns:1fr 1fr}.preview-summary{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.class-import-grid,.preview-summary{grid-template-columns:1fr}.bulk-import-title{align-items:flex-start;flex-direction:column}.preview-summary>div{border-right:0;border-bottom:1px solid var(--line)}}

/* Padrón por aulas, actualización desde Excel y QR por grupo/individual */
.voter-list-head{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:22px;flex-wrap:wrap}
.classroom-groups{display:grid;gap:12px;margin-top:12px}
.classroom-group{border:1px solid var(--line);border-radius:15px;background:#fff;overflow:hidden}
.classroom-group>summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:15px 17px;background:#fff8fb;user-select:none}
.classroom-group>summary::-webkit-details-marker{display:none}
.classroom-summary-main{display:flex;align-items:center;gap:11px;min-width:0}
.classroom-summary-main strong{display:block;font-size:1rem;color:var(--ink)}
.classroom-summary-main small{display:block;margin-top:2px;color:var(--muted);font-size:.84rem}
.classroom-icon{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#f3dfe8;color:var(--pink-dark);font-weight:1000;transition:transform .15s ease;flex:0 0 auto}
.classroom-group[open] .classroom-icon{transform:rotate(180deg)}
.classroom-summary-stats{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.classroom-summary-stats span{padding:5px 9px;border-radius:999px;background:#fff;border:1px solid var(--line);font-size:.79rem;font-weight:800;color:var(--muted);white-space:nowrap}
.classroom-content{padding:14px 15px 16px;border-top:1px solid var(--line)}
.classroom-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.classroom-toolbar>div{display:grid;gap:2px}
.classroom-toolbar span{font-size:.84rem;color:var(--muted);max-width:720px}.classroom-toolbar-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.classroom-table{min-width:720px}
.empty-classrooms{padding:22px;border:1px dashed #d7c4cd;border-radius:14px;background:#fff;display:grid;gap:4px;color:var(--muted)}
.empty-classrooms strong{color:var(--ink)}
@media(max-width:700px){
  .classroom-group>summary{align-items:flex-start;flex-direction:column}
  .classroom-summary-stats{justify-content:flex-start;padding-left:41px}
}


/* Navegación y pantalla de resultados en vivo */
.link-live{display:inline-flex;align-items:center;justify-content:center;padding:10px 14px;border:1px solid var(--line);border-radius:999px;background:#fff7fa;color:var(--pink-dark);font-weight:900}
.link-live:hover,.active-live-link{background:var(--pink-soft);border-color:#e7bfd0}
.hero-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:18px}
.live-page{background:#fbf8fa}
.live-hero .container{padding-bottom:30px}
.live-updated-label{display:block;margin-top:14px;color:var(--muted);font-size:.9rem}
.live-main{display:grid;gap:18px}
.live-stat-grid{grid-template-columns:repeat(3,1fr)}
.live-leader-wrap{display:grid}
.leader-card{padding:22px;border:1px solid var(--line);border-radius:18px;background:#fff;box-shadow:var(--shadow);display:grid;gap:8px}
.leader-card h2{margin:0;font-size:clamp(1.5rem,3vw,2.2rem)}
.leader-card p{margin:0;color:var(--ink)}
.leader-card small{color:var(--muted)}
.success-live{background:linear-gradient(135deg,#fff,#fff4f8)}
.warning-live{background:linear-gradient(135deg,#fffaf2,#fff)}
.neutral-live{background:linear-gradient(135deg,#fcfcfc,#fff)}
.empty-live{background:linear-gradient(135deg,#fcfcfc,#fff)}
.live-board-shell{padding:24px}
.live-board-header{align-items:flex-start}
.live-result-item{padding:16px}
.live-result-item.is-leading{border-color:#e6bfd0;box-shadow:0 10px 25px rgba(127,18,63,.08)}
.live-result-line{align-items:center}
.live-result-title{display:flex;align-items:center;gap:12px;min-width:0}
.live-result-title p{margin:3px 0 0;color:var(--muted)}
.live-result-meta{display:grid;justify-items:end;gap:3px;white-space:nowrap}
.live-result-meta span{color:var(--pink-dark);font-weight:900}
@media(max-width:900px){.live-stat-grid{grid-template-columns:1fr 1fr}.live-result-line{align-items:flex-start;flex-direction:column}.live-result-meta{justify-items:start}}
@media(max-width:700px){.nav-actions{justify-content:flex-end;flex-wrap:wrap}.link-live,.link-admin{font-size:.86rem}.hero-actions{justify-content:flex-start}.live-board-header{flex-direction:column}}
@media(max-width:480px){.live-stat-grid{grid-template-columns:1fr}}


/* Pantalla principal del proceso electoral */
.public-stage-main{display:grid;gap:22px}
.public-stage-card{padding:36px 28px;min-height:62vh;display:grid;align-content:center;justify-items:center;text-align:center;background:linear-gradient(135deg,#fff,#fff3f8)}
.stage-election-name{margin:16px 0 10px;color:var(--muted);font-size:1.1rem}
.stage-message{margin:0;max-width:980px;font-size:clamp(2.3rem,5vw,4.4rem);line-height:1.08;color:var(--ink)}
.stage-help{max-width:780px;margin:16px auto 0;color:var(--muted);font-size:1.04rem}
.public-shortcuts{display:flex;justify-content:center;gap:18px;flex-wrap:wrap}
.quick-access-card{width:min(220px,100%);padding:16px 18px;border:1px solid var(--line);border-radius:18px;background:#fff;box-shadow:var(--shadow);display:grid;justify-items:center;gap:6px;text-align:center;transition:.18s}
.quick-access-card:hover{transform:translateY(-2px)}
.quick-icon{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:var(--pink-soft);font-size:1.7rem}
.quick-access-card strong{font-size:1rem;color:var(--pink-dark)}
.quick-access-card small{color:var(--muted)}
.live-screen-wrap{display:grid;gap:18px}
.live-stage-hero{border:1px solid var(--line);border-radius:18px;overflow:hidden;background:linear-gradient(135deg,#fff,#fff3f8)}
.live-stage-hero .container{text-align:center;padding:34px 24px}
.public-summary-grid{grid-template-columns:repeat(3,1fr)}
.public-board-shell{padding:22px}
.public-board-header{align-items:flex-start}
.public-result-card{padding:16px}
.public-result-card.is-leading{border-color:#dfbdd0;box-shadow:0 10px 25px rgba(127,18,63,.08)}
.public-result-line{align-items:center}
.public-candidate-title{display:flex;align-items:center;gap:12px;min-width:0}
.public-candidate-title p{margin:4px 0 0;color:var(--muted)}
.public-candidate-stats{display:grid;justify-items:end;gap:3px;white-space:nowrap}
.public-candidate-stats span{font-weight:900;color:var(--pink-dark)}
.admin-config-note{padding:12px 14px;border:1px dashed #dfc4d0;border-radius:12px;background:#fff9fb;grid-column:1/-1}
@media(max-width:900px){.public-summary-grid{grid-template-columns:1fr 1fr}.public-result-line{align-items:flex-start;flex-direction:column}.public-candidate-stats{justify-items:start}}
@media(max-width:700px){.public-stage-card{min-height:56vh;padding:28px 18px}.public-board-header{flex-direction:column}.public-shortcuts{gap:12px}.quick-access-card{width:100%}}
@media(max-width:480px){.public-summary-grid{grid-template-columns:1fr}.stage-message{font-size:2rem}}


/* Control de tiempo y cierre seguro */
.live-heading-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:18px;align-items:stretch}
.voting-clock-card{padding:22px;display:grid;align-content:center;gap:12px;text-align:center;background:linear-gradient(135deg,#fff,#fff7fa)}
.voting-countdown{font-variant-numeric:tabular-nums;font-size:clamp(2.1rem,4vw,3.2rem);line-height:1;color:var(--pink-dark);letter-spacing:.03em}
.voting-clock-times{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.voting-clock-times span{padding:9px;border:1px solid var(--line);border-radius:12px;background:#fff;font-size:.82rem;color:var(--muted)}
.voting-clock-times b{display:block;margin-top:2px;color:var(--ink);font-size:.95rem}
.voting-clock-card p{margin:0;font-size:.9rem}
.public-candidate-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.public-result-card{margin-bottom:0;min-width:0}
@media(max-width:980px){.live-heading-grid{grid-template-columns:1fr}.voting-clock-card{grid-template-columns:auto 1fr;align-items:center;text-align:left}.voting-clock-times{grid-column:1/-1}.voting-clock-card p{grid-column:1/-1}}
@media(max-width:800px){.public-candidate-board{grid-template-columns:1fr}}
@media(max-width:560px){.voting-clock-card{grid-template-columns:1fr;text-align:center}.voting-clock-times,.voting-clock-card p{grid-column:auto}}

/* Duración definida por el administrador */
.admin-grid-form input[readonly]{background:#f8f4f6;color:var(--pink-dark);font-weight:900;cursor:default}
@media(max-width:560px){.voting-clock-times{grid-template-columns:1fr}}


/* =========================================================
   EXPERIENCIA VISUAL 2026 - UI moderna, educativa e interactiva
   Sin dependencias visuales externas: funciona incluso sin CDN.
   ========================================================= */
:root{
  --surface:#ffffff;--surface-soft:#fff8fb;--surface-muted:#f7f1f4;
  --brand:#a70f4d;--brand-2:#d32670;--brand-deep:#64102f;
  --success:#16835c;--warning:#b36b00;--info:#2a5d9f;
  --shadow-soft:0 10px 30px rgba(74,20,46,.08);
  --shadow-lift:0 20px 55px rgba(74,20,46,.14);
}
body{background:
  radial-gradient(circle at 10% 0%,rgba(211,38,112,.055),transparent 27rem),
  radial-gradient(circle at 95% 20%,rgba(167,15,77,.045),transparent 24rem),#fbf8fa}
.navbar{backdrop-filter:saturate(160%) blur(12px);background:rgba(255,255,255,.94);box-shadow:0 5px 24px rgba(56,16,35,.055)}
.brand img{filter:drop-shadow(0 5px 8px rgba(38,20,29,.12));transition:transform .25s ease}.brand:hover img{transform:scale(1.04) rotate(-1deg)}
.brand strong{letter-spacing:-.01em}.brand span{letter-spacing:.01em}
.card{box-shadow:var(--shadow-soft);transition:border-color .22s ease,box-shadow .22s ease,transform .22s ease}
.btn{position:relative;overflow:hidden;box-shadow:0 7px 16px rgba(95,16,49,.10)}
.btn:after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 25%,rgba(255,255,255,.28) 47%,transparent 70%);transform:translateX(-130%);transition:transform .55s ease}.btn:hover:after{transform:translateX(130%)}
.btn-primary{background:linear-gradient(135deg,var(--brand),var(--brand-2))}.btn-primary:hover{box-shadow:0 10px 24px rgba(167,15,77,.22)}
.btn-outline{background:rgba(255,255,255,.9)}
.form-control{border:1px solid #dfcdd5;border-radius:12px;background:#fff;transition:border-color .18s,box-shadow .18s,transform .18s}
.form-control:focus{outline:0;border-color:#c43370;box-shadow:0 0 0 4px rgba(196,51,112,.10);transform:translateY(-1px)}
.badge{box-shadow:inset 0 0 0 1px rgba(127,18,63,.05)}

/* Pantalla previa */
.public-stage-card{position:relative;overflow:hidden;border:1px solid rgba(183,86,127,.22);box-shadow:var(--shadow-lift);background:
  radial-gradient(circle at 50% 0%,rgba(255,255,255,.95),transparent 45%),
  linear-gradient(135deg,#fff 0%,#fff5f9 48%,#fdf7fb 100%)}
.public-stage-card:before,.public-stage-card:after{content:"";position:absolute;border-radius:50%;border:1px solid rgba(167,15,77,.10);pointer-events:none}
.public-stage-card:before{width:360px;height:360px;right:-170px;top:-160px;animation:softOrbit 12s linear infinite}.public-stage-card:after{width:260px;height:260px;left:-120px;bottom:-140px;animation:softOrbit 16s linear infinite reverse}
.stage-message{background:linear-gradient(100deg,#351522,var(--brand-deep),var(--brand));-webkit-background-clip:text;background-clip:text;color:transparent;text-wrap:balance;animation:titleArrival .7s ease both}
.stage-election-name{font-weight:800;letter-spacing:.04em;text-transform:uppercase}

/* Rotador educativo antes de comenzar */
.edu-rotator{position:relative;margin-top:28px;width:min(760px,100%);display:grid;grid-template-columns:74px 1fr;gap:16px;align-items:center;text-align:left;padding:17px 20px;border:1px solid rgba(167,15,77,.13);border-radius:20px;background:rgba(255,255,255,.76);backdrop-filter:blur(8px);box-shadow:0 12px 32px rgba(83,21,49,.08);overflow:hidden}
.edu-icon{width:62px;height:62px;border-radius:18px;display:grid;place-items:center;font-size:2rem;background:linear-gradient(145deg,#fff,#fde7f0);box-shadow:inset 0 0 0 1px rgba(167,15,77,.08)}
.edu-rotator strong{display:block;font-size:1.05rem;color:var(--brand-deep)}.edu-rotator p{margin:3px 0 0;color:var(--muted)}
.edu-pop{animation:eduPop .55s cubic-bezier(.2,.8,.2,1)}
.edu-orbit-dot{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--brand-2);opacity:.23}.dot-a{right:30px;top:15px;animation:floatDot 4s ease-in-out infinite}.dot-b{right:65px;bottom:13px;animation:floatDot 5s ease-in-out infinite reverse}

/* Encabezado en vivo */
.live-heading-grid{align-items:stretch}.live-stage-hero,.voting-clock-card{box-shadow:var(--shadow-lift)}
.live-stage-hero{position:relative;background:linear-gradient(130deg,#fff,#fff0f6 60%,#fff)}
.live-stage-hero:after{content:"🗳️";position:absolute;right:22px;bottom:8px;font-size:5rem;opacity:.055;transform:rotate(-8deg);pointer-events:none}
.voting-clock-card{border-color:#dfc9d4;background:linear-gradient(145deg,#fff,#fff8fb)}
.voting-countdown{text-shadow:0 3px 16px rgba(167,15,77,.11);animation:clockPulse 2s ease-in-out infinite}
.voting-clock-times span{box-shadow:0 5px 16px rgba(57,17,36,.045)}

/* Franja educativa durante resultados */
.edu-live-strip{position:relative;display:grid;grid-template-columns:58px minmax(0,1fr);gap:14px;align-items:center;padding:14px 18px;border-radius:17px;overflow:hidden;background:linear-gradient(90deg,#fff,#fff7fa);border:1px solid rgba(167,15,77,.12)}
.edu-live-symbol{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;font-size:1.7rem;background:#fff0f6}
.edu-live-copy{display:grid;gap:1px}.edu-live-copy strong{color:var(--brand-deep)}.edu-live-copy span{color:var(--muted);font-size:.92rem}
.edu-progress{position:absolute;left:0;right:0;bottom:0;height:3px;background:#f1dde6}.edu-progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--brand),var(--brand-2))}.edu-progress-run{animation:eduProgress 8s linear forwards}

/* Estadísticas vivas */
.public-summary-grid .stat-card{position:relative;overflow:hidden;border-color:rgba(167,15,77,.10);background:linear-gradient(145deg,#fff,#fffafd)}
.public-summary-grid .stat-card:after{content:"";position:absolute;width:68px;height:68px;border-radius:50%;right:-28px;top:-28px;background:rgba(211,38,112,.055)}
.public-summary-grid .stat-card strong{font-size:clamp(1.65rem,3vw,2.15rem);font-variant-numeric:tabular-nums}.public-summary-grid .stat-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift)}

/* Tablero de candidatos */
.public-board-shell{border-color:rgba(167,15,77,.12);background:rgba(255,255,255,.94);box-shadow:var(--shadow-lift)}
.public-candidate-board{gap:16px}
.public-result-card{position:relative;overflow:hidden;border:1px solid #ead9e1;background:linear-gradient(145deg,#fff,#fffbfd);box-shadow:0 8px 22px rgba(60,18,38,.055);transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}
.public-result-card:hover{transform:translateY(-3px);box-shadow:0 16px 36px rgba(60,18,38,.11)}
.public-result-card.is-leading{border-color:#dc90b1;box-shadow:0 13px 32px rgba(167,15,77,.13);animation:leaderGlow 2.8s ease-in-out infinite}
.public-result-card.is-final-winner{border:2px solid #d39a19;background:linear-gradient(145deg,#fffdf5,#fff8dc 55%,#fff);box-shadow:0 18px 48px rgba(181,126,20,.20);animation:winnerCardGlow 2s ease-in-out infinite}
.public-candidate-title .list-mark{box-shadow:0 8px 18px rgba(167,15,77,.16);transition:transform .3s}.public-result-card:hover .list-mark{transform:rotate(-5deg) scale(1.05)}
.public-candidate-title strong{font-size:1.08rem}.public-candidate-stats strong{font-size:1.18rem}.public-candidate-stats span{font-size:1.04rem}
.result-bar{height:13px;background:#f1e2e9;box-shadow:inset 0 1px 2px rgba(40,10,24,.05)}.result-fill{background:linear-gradient(90deg,var(--brand),#e44383);transition:width .72s cubic-bezier(.2,.8,.2,1);position:relative}.result-fill:after{content:"";position:absolute;top:0;bottom:0;width:80px;right:-80px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:barShine 2.2s linear infinite}
.leading-chip{display:inline-flex;align-items:center;gap:5px;margin-bottom:9px;padding:5px 9px;border-radius:999px;background:#fff0f6;color:var(--brand-deep);font-size:.76rem;font-weight:900;animation:chipFloat 2.2s ease-in-out infinite}.final-chip{background:#fff4ca;color:#765200}

/* Ganador final persistente */
.winner-banner{display:grid;grid-template-columns:70px minmax(0,1fr) auto;gap:17px;align-items:center;padding:20px 22px;border-radius:22px;border:1px solid #e0b336;background:linear-gradient(105deg,#fffef8,#fff6cf 55%,#fff);box-shadow:0 18px 48px rgba(137,92,0,.15);overflow:hidden;position:relative}
.winner-banner:after{content:"";position:absolute;inset:-70% -20%;background:linear-gradient(110deg,transparent 42%,rgba(255,255,255,.72) 50%,transparent 58%);animation:winnerSweep 4.5s linear infinite;pointer-events:none}
.winner-crown{width:62px;height:62px;border-radius:20px;display:grid;place-items:center;font-size:2.1rem;background:#fff3bc;box-shadow:0 8px 20px rgba(154,103,0,.12);animation:crownBounce 2.4s ease-in-out infinite;z-index:1}.winner-banner>div{z-index:1}
.winner-eyebrow{font-size:.75rem;font-weight:1000;letter-spacing:.12em;color:#8a5d00}.winner-banner h2{margin:2px 0;font-size:clamp(1.45rem,3vw,2.3rem);color:#5c3d00}.winner-banner p{margin:0;color:#6e5630}.winner-vote-pill{padding:11px 14px;border-radius:999px;background:#fff;color:#704d00;font-weight:1000;white-space:nowrap;box-shadow:0 6px 16px rgba(126,84,0,.10)}
.winner-banner.tie-mode{border-color:#d6b77a;background:linear-gradient(105deg,#fff,#fff9eb)}.winner-banner.tie-mode .winner-crown{background:#fff7df}.winner-banner.empty-mode{border-color:#ddd;background:#fff}.winner-banner.empty-mode:after{display:none}

/* Celebración modal no bloqueante permanentemente */
.winner-celebration{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:24px;background:rgba(34,11,22,.72);backdrop-filter:blur(8px);overflow:hidden}
.winner-celebration.hidden{display:none!important}.celebration-enter{animation:overlayIn .35s ease both}
.celebration-card{position:relative;z-index:2;width:min(650px,100%);padding:34px 30px 28px;border-radius:28px;text-align:center;background:radial-gradient(circle at 50% -10%,#fff8cc,#fff 38%,#fff8fb);border:1px solid rgba(255,220,102,.78);box-shadow:0 30px 90px rgba(0,0,0,.28);animation:celebrationCardIn .7s cubic-bezier(.18,.85,.22,1.15)}
.celebration-close{position:absolute;right:14px;top:12px;width:38px;height:38px;border:0;border-radius:50%;background:#f7edf1;color:#6b3149;font-size:1.55rem;cursor:pointer;display:grid;place-items:center}
.celebration-medal{font-size:5.4rem;line-height:1;animation:trophyPop 1.3s ease-in-out infinite alternate}.celebration-kicker{display:block;margin-top:8px;font-size:.76rem;font-weight:1000;letter-spacing:.16em;color:#8a6000}.celebration-card h2{margin:5px 0 3px;font-size:clamp(2.2rem,7vw,4rem);line-height:1;background:linear-gradient(100deg,#7a5100,#c98800,#8b5900);-webkit-background-clip:text;background-clip:text;color:transparent}.celebration-candidate{margin:14px 0 4px;font-size:clamp(1.2rem,3vw,1.65rem);font-weight:1000;color:var(--brand-deep)}.celebration-result{margin:0;color:var(--muted);font-size:1.03rem}.celebration-school-icons{display:flex;justify-content:center;gap:14px;margin-top:22px}.celebration-school-icons span{font-size:1.7rem;animation:iconWave 1.8s ease-in-out infinite}.celebration-school-icons span:nth-child(2){animation-delay:.15s}.celebration-school-icons span:nth-child(3){animation-delay:.3s}.celebration-school-icons span:nth-child(4){animation-delay:.45s}.celebration-school-icons span:nth-child(5){animation-delay:.6s}
.confetti-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden}.confetti-piece{position:absolute;left:var(--x);top:-10%;font-size:14px;color:hsl(var(--hue) 75% 55%);animation:confettiFall var(--dur) linear var(--delay) infinite;transform:rotate(var(--rot));text-shadow:0 1px 2px rgba(0,0,0,.12)}

/* Cabina de votación */
.cabina-page .hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#fff,#fff2f7 65%,#fff)}.cabina-page .hero:after{content:"✓";position:absolute;right:5%;top:5%;font-size:10rem;font-weight:1000;color:rgba(167,15,77,.035);pointer-events:none}
.student-values-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:22px}.student-values-strip>div{display:grid;grid-template-columns:45px 1fr;column-gap:10px;align-items:center;padding:13px 15px;border:1px solid var(--line);border-radius:15px;background:#fff;box-shadow:var(--shadow-soft)}.student-values-strip span{grid-row:1/3;width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:#fff0f6;font-size:1.25rem}.student-values-strip strong{font-size:.88rem;color:var(--brand-deep)}.student-values-strip small{color:var(--muted);line-height:1.35}
.cabina-page .panel{box-shadow:var(--shadow-lift)}.scanner-frame{border-radius:18px;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(167,15,77,.08)}
.candidate-preview-card{transition:transform .2s,box-shadow .2s,border-color .2s}.candidate-preview-card:hover{transform:translateY(-2px);box-shadow:0 10px 22px rgba(67,20,41,.09);border-color:#ddb7c8}

/* Login */
.login-page{position:relative;overflow:hidden;background:radial-gradient(circle at 20% 15%,#ffeaf3,transparent 32rem),linear-gradient(135deg,#fff7fa,#fff)}
.login-page:before,.login-page:after{content:"";position:absolute;border-radius:50%;border:1px solid rgba(167,15,77,.10)}.login-page:before{width:440px;height:440px;left:-180px;bottom:-190px;animation:softOrbit 14s linear infinite}.login-page:after{width:300px;height:300px;right:-100px;top:-120px;animation:softOrbit 10s linear infinite reverse}
.login-card-modern{position:relative;z-index:2;border:1px solid rgba(167,15,77,.12);box-shadow:0 28px 80px rgba(67,18,41,.15);background:rgba(255,255,255,.92);backdrop-filter:blur(12px)}.login-card-modern h1{font-size:1.8rem;color:var(--brand-deep)}

/* Administrador */
.sidebar{background:linear-gradient(180deg,#2c111d 0%,#421327 52%,#28101a 100%);box-shadow:8px 0 30px rgba(33,10,20,.10)}
.sidebar nav a{position:relative;transition:background .18s,transform .18s}.sidebar nav a:hover{transform:translateX(3px)}
.admin-main{background:radial-gradient(circle at 100% 0%,rgba(211,38,112,.035),transparent 30rem)}
.admin-header{padding:18px 20px;border:1px solid var(--line);border-radius:18px;background:#fff;box-shadow:var(--shadow-soft)}
.admin-user-badge{padding:9px 13px;background:#fff0f6}.stat-grid .stat-card{border-top:3px solid rgba(167,15,77,.65);background:linear-gradient(145deg,#fff,#fffafd)}.stat-grid .stat-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift)}
.admin-section{border-color:rgba(167,15,77,.10);box-shadow:var(--shadow-soft)}.admin-section-kicker{display:inline-block;margin-bottom:3px;font-size:.71rem;font-weight:1000;letter-spacing:.13em;color:var(--brand)}
.bulk-import-box{box-shadow:inset 0 0 0 1px rgba(255,255,255,.55)}.classroom-group{transition:box-shadow .2s,border-color .2s}.classroom-group[open]{border-color:#dab8c8;box-shadow:0 10px 24px rgba(66,19,40,.07)}
.table tbody tr{transition:background .15s}.table tbody tr:hover{background:#fff9fb}

/* Accesos inferiores */
.quick-access-card{position:relative;overflow:hidden;border-color:rgba(167,15,77,.12)}.quick-access-card:after{content:"";position:absolute;inset:auto -35% -80% -35%;height:120px;border-radius:50%;background:rgba(211,38,112,.04);transition:transform .25s}.quick-access-card:hover:after{transform:translateY(-10px)}.quick-icon{transition:transform .25s}.quick-access-card:hover .quick-icon{transform:scale(1.08) rotate(-3deg)}

/* Animaciones */
@keyframes titleArrival{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@keyframes softOrbit{to{transform:rotate(360deg)}}
@keyframes eduPop{0%{transform:scale(.75) rotate(-8deg);opacity:.2}65%{transform:scale(1.08) rotate(3deg)}100%{transform:scale(1);opacity:1}}
@keyframes floatDot{50%{transform:translateY(-10px) translateX(5px);opacity:.45}}
@keyframes eduProgress{from{width:0}to{width:100%}}
@keyframes clockPulse{50%{transform:scale(1.025);text-shadow:0 5px 22px rgba(167,15,77,.20)}}
@keyframes leaderGlow{50%{box-shadow:0 17px 40px rgba(167,15,77,.18)}}
@keyframes winnerCardGlow{50%{box-shadow:0 22px 58px rgba(181,126,20,.28)}}
@keyframes barShine{to{right:110%}}
@keyframes chipFloat{50%{transform:translateY(-2px)}}
@keyframes winnerSweep{to{transform:translateX(80%)}}
@keyframes crownBounce{50%{transform:translateY(-4px) rotate(3deg)}}
@keyframes overlayIn{from{opacity:0}to{opacity:1}}
@keyframes celebrationCardIn{from{opacity:0;transform:translateY(24px) scale(.88)}to{opacity:1;transform:none}}
@keyframes trophyPop{from{transform:translateY(1px) rotate(-2deg)}to{transform:translateY(-7px) rotate(2deg)}}
@keyframes iconWave{50%{transform:translateY(-8px) rotate(5deg)}}
@keyframes confettiFall{0%{transform:translateY(-10vh) rotate(var(--rot));opacity:0}10%{opacity:1}100%{transform:translateY(115vh) rotate(calc(var(--rot) + 720deg));opacity:.9}}

/* Responsive */
@media(max-width:900px){.winner-banner{grid-template-columns:58px 1fr}.winner-vote-pill{grid-column:2;justify-self:start}.student-values-strip{grid-template-columns:1fr}.edu-live-strip{grid-template-columns:50px 1fr}}
@media(max-width:600px){.edu-rotator{grid-template-columns:56px 1fr;padding:14px}.edu-icon{width:50px;height:50px;font-size:1.65rem}.winner-banner{grid-template-columns:1fr;text-align:center;justify-items:center}.winner-vote-pill{grid-column:auto;justify-self:center}.public-result-card{padding:14px}.celebration-card{padding:28px 18px 24px}.celebration-school-icons{gap:8px}.celebration-school-icons span{font-size:1.4rem}}

/* Respeta usuarios que prefieren menos movimiento */
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}


/* =========================================================
   V9 R2 · CONTROL MANUAL SIMPLE (sin horarios)
   ========================================================= */
.school-cover-screen{position:relative;min-height:67vh;padding:46px 28px;display:grid;align-content:center;justify-items:center;text-align:center;overflow:hidden;background:radial-gradient(circle at 50% 15%,#fff 0,#fff6fa 42%,#fff 78%);border:1px solid rgba(167,15,77,.14);box-shadow:var(--shadow-lift)}
.school-cover-glow{position:absolute;width:620px;height:620px;border-radius:50%;background:radial-gradient(circle,rgba(211,38,112,.11),transparent 68%);filter:blur(4px);animation:schoolGlow 5s ease-in-out infinite;pointer-events:none}
.school-cover-logo{position:relative;width:112px;height:126px;object-fit:contain;margin-bottom:16px;filter:drop-shadow(0 12px 18px rgba(71,25,47,.12));animation:schoolLogoFloat 3.4s ease-in-out infinite}
.school-cover-kicker{position:relative;margin:16px 0 7px;font-weight:900;letter-spacing:.16em;color:var(--pink-dark);font-size:.82rem}
.school-cover-screen h1{position:relative;margin:0;font-size:clamp(3.1rem,8vw,7.3rem);line-height:.92;letter-spacing:-.045em;color:var(--ink);text-shadow:0 8px 28px rgba(81,22,48,.08)}
.school-cover-subtitle{position:relative;margin:18px 0 0;color:var(--muted);font-size:clamp(1rem,2vw,1.28rem);font-weight:800;letter-spacing:.06em}
.manual-live-hero{overflow:hidden}.manual-live-hero .container{position:relative}.live-pulse-label{display:inline-flex;align-items:center;gap:8px;margin-top:13px;padding:7px 12px;border-radius:999px;background:#fff;color:var(--green);font-size:.78rem;font-weight:1000;letter-spacing:.12em;box-shadow:0 8px 20px rgba(22,101,52,.10)}.live-pulse-label span{width:9px;height:9px;border-radius:50%;background:#16a34a;box-shadow:0 0 0 0 rgba(22,163,74,.45);animation:livePulse 1.5s infinite}
.live-refresh-badge{white-space:nowrap}.public-candidate-board{display:grid;gap:14px}.public-result-card{transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.public-result-card.is-leading{border-color:#d68cac}.result-fill{transition:width .45s ease}
.voting-control-panel{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px 18px;align-items:center;padding:18px;border:1px solid #e5ccd8;border-radius:17px;background:linear-gradient(135deg,#fff9fc,#fff)}
.voting-control-panel h3{margin:2px 0 3px;font-size:1.25rem}.voting-control-panel p{margin:0}.voting-control-actions{grid-column:1/-1;display:flex;gap:10px;flex-wrap:wrap}.btn-enable-voting{background:#166534;color:#fff}.btn-enable-voting:hover{background:#14532d}.btn-enable-voting:disabled,.btn-danger:disabled{opacity:.45}
@keyframes schoolGlow{0%,100%{transform:scale(.95);opacity:.65}50%{transform:scale(1.06);opacity:1}}
@keyframes schoolLogoFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@keyframes livePulse{0%{box-shadow:0 0 0 0 rgba(22,163,74,.45)}70%{box-shadow:0 0 0 9px rgba(22,163,74,0)}100%{box-shadow:0 0 0 0 rgba(22,163,74,0)}}
@media(max-width:700px){.school-cover-screen{min-height:60vh}.school-cover-screen h1{font-size:clamp(2.7rem,14vw,4.7rem)}.voting-control-panel{grid-template-columns:1fr}.voting-control-panel .badge{justify-self:start}.voting-control-actions{grid-column:1}.voting-control-actions .btn{width:100%}}

/* Selección de elecciones: no modifica la elección pública al consultar. */
.election-context { margin-bottom: 22px; padding: 24px; }
.election-context > .form-control { margin: 10px 0; max-width: 720px; }
.election-context p { margin: 8px 0; }
.new-election-details { margin-top: 20px; border-top: 1px solid #dbe2ec; padding-top: 16px; }
.new-election-details summary { cursor: pointer; font-weight: 700; }
.election-create-form { display: grid; gap: 10px; max-width: 720px; padding-top: 15px; }
.selection-caption { border-top: 1px solid #dbe2ec; padding-top: 14px; margin-top: 20px !important; }

/* =========================================================
   V10 · CONTROL INDEPENDIENTE + PRESIDENTE / REGIDORES
   ========================================================= */
.btn-ghost{background:transparent;color:var(--muted);border:1px dashed var(--line)}
.btn-ghost:hover{background:#faf7f9;color:var(--pink-dark)}
.control-center{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.control-center .voting-control-panel{height:100%}
.winner-admin-panel{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,.8fr);gap:14px 18px;align-items:center;padding:18px;border:1px solid #e7d8ae;border-radius:17px;background:linear-gradient(135deg,#fffdf7,#fffaf0)}
.winner-admin-panel h3{margin:2px 0 4px}.winner-admin-panel p{margin:0}
.winner-admin-actions{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:center}
.winner-admin-status{grid-column:1/-1;padding-top:4px}.winner-admin-badge{background:#fff3c8;color:#765200;border:1px solid #efd98a}
.admin-result-winner{border-color:#dfb444!important;background:#fffdf5}.winner-published-note{display:block;margin-top:8px;color:#7b5900;font-weight:800}

.candidate-editor-form{align-items:start}.candidate-media-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.candidate-media-field{display:grid;grid-template-columns:100px minmax(0,1fr);grid-template-rows:auto auto auto;gap:8px 12px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:16px;background:#fff}
.candidate-media-field>div:first-child{grid-column:2}.candidate-media-field>div:first-child small{display:block;margin-top:3px;color:var(--muted)}
.candidate-media-preview{grid-row:1/4;width:92px;height:92px;border-radius:18px;border:1px dashed #d8c5cf;background:#faf7f9;display:grid;place-items:center;overflow:hidden;color:var(--muted);font-size:.78rem;text-align:center;padding:4px}
.candidate-media-preview.portrait{border-radius:50%}.candidate-media-preview.small{width:84px;height:84px}.candidate-media-preview img{width:100%;height:100%;object-fit:cover}.candidate-media-field .btn{justify-self:start}

.councilors-editor{padding:15px;border:1px solid var(--line);border-radius:17px;background:#fffdfd}.councilors-editor-list{display:grid;gap:12px;margin-top:12px}
.empty-councilors{padding:18px;border:1px dashed #d9c9d1;border-radius:14px;display:grid;gap:4px;color:var(--muted);background:#faf8f9}.empty-councilors strong{color:var(--ink)}
.councilor-editor-card{display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px;border:1px solid #eadde3;border-radius:15px;background:#fff}
.councilor-photo-editor{display:grid;justify-items:center;gap:7px}.councilor-fields{display:grid;grid-template-columns:2fr 1.2fr .7fr .7fr;gap:10px}.councilor-remove{align-self:end}

.candidate-admin-card{grid-template-columns:130px minmax(0,1fr) auto!important;align-items:start!important}.candidate-admin-card.published-winner{border-color:#dfb444;background:linear-gradient(145deg,#fffdf7,#fff)}
.admin-list-visuals{display:grid;grid-template-columns:58px 58px;gap:8px}.admin-list-logo,.admin-president-photo{width:58px;height:58px;border-radius:14px;display:grid;place-items:center;overflow:hidden;background:#faf5f8;border:1px solid var(--line)}
.admin-president-photo{border-radius:50%}.admin-list-logo img,.admin-president-photo img{width:100%;height:100%;object-fit:cover}.admin-list-logo .list-mark{width:58px;height:58px}
.candidate-admin-heading{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.candidate-admin-heading h3{margin:0}
.admin-councilor-strip{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.mini-councilor{display:grid;grid-template-columns:34px auto;gap:7px;align-items:center;padding:5px 8px 5px 5px;border:1px solid var(--line);border-radius:999px;background:#fff}.mini-councilor-photo{width:34px;height:34px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:#f8edf2}.mini-councilor-photo img{width:100%;height:100%;object-fit:cover}.mini-councilor strong{display:block;font-size:.76rem}.mini-councilor small{display:block;color:var(--muted);font-size:.68rem}

/* Cabina: lista completa con presidente, logo y regidores */
.candidate-preview-rich{grid-template-columns:62px 62px minmax(0,1fr)!important;align-items:center}.preview-list-logo,.preview-president-photo,.ballot-list-logo,.ballot-president-photo{width:56px;height:56px;display:grid;place-items:center;overflow:hidden;border:1px solid var(--line);background:#faf5f8}.preview-list-logo,.ballot-list-logo{border-radius:15px}.preview-president-photo,.ballot-president-photo{border-radius:50%}.preview-list-logo img,.preview-president-photo img,.ballot-list-logo img,.ballot-president-photo img{width:100%;height:100%;object-fit:cover}.preview-list-logo .list-mark,.ballot-list-logo .list-mark{width:56px;height:56px}
.preview-candidate-copy{min-width:0}.preview-roster{grid-column:1/-1;padding-top:8px;border-top:1px solid #f0e5ea}.preview-roster-title,.public-roster-title{display:block;margin-bottom:7px;font-size:.72rem;font-weight:1000;letter-spacing:.08em;color:var(--pink-dark);text-transform:uppercase}
.ballot-councilors{display:flex;flex-wrap:wrap;gap:7px}.ballot-councilor{display:grid;grid-template-columns:30px auto;gap:6px;align-items:center;padding:4px 8px 4px 4px;border:1px solid #eadce3;border-radius:999px;background:#fff}.ballot-councilor-photo{width:30px;height:30px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:#f9eef3;font-size:.8rem}.ballot-councilor-photo img{width:100%;height:100%;object-fit:cover}.ballot-councilor strong{display:block;font-size:.72rem}.ballot-councilor small{display:block;color:var(--muted);font-size:.64rem}
.candidate-choice-rich{grid-template-columns:58px 58px minmax(0,1fr) auto!important;align-items:start!important}.ballot-candidate-copy{min-width:0}

/* Pantalla pública de resultados */
.winner-host{margin:18px 0}.winner-visuals{display:flex;gap:8px;align-items:center;z-index:1}.winner-logo,.winner-president-photo{width:56px;height:56px;object-fit:cover;border:2px solid #fff;box-shadow:0 5px 14px rgba(87,58,0,.12)}.winner-logo{border-radius:14px}.winner-president-photo{border-radius:50%}
.public-candidate-profile{display:grid;grid-template-columns:58px 58px minmax(0,1fr) auto;gap:10px;align-items:center}.public-list-logo,.public-president-photo{width:56px;height:56px;display:grid;place-items:center;overflow:hidden;background:#faf5f8;border:1px solid var(--line)}.public-list-logo{border-radius:15px}.public-president-photo{border-radius:50%}.public-list-logo img,.public-president-photo img{width:100%;height:100%;object-fit:cover}.public-list-logo .list-mark{width:56px;height:56px}.public-candidate-copy{min-width:0}.public-candidate-copy strong{font-size:1.08rem}.public-candidate-copy p{margin:2px 0}.public-candidate-copy small{color:var(--muted)}.public-proposal{margin:10px 0 8px;color:var(--muted);line-height:1.45}
.public-councilor-row{display:flex;gap:7px;flex-wrap:wrap}.public-councilor-chip{display:grid;grid-template-columns:32px minmax(0,1fr);gap:6px;align-items:center;max-width:190px;padding:4px 9px 4px 4px;border:1px solid #eadce3;border-radius:999px;background:#fff}.public-councilor-photo{width:32px;height:32px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:#faeef3}.public-councilor-photo img{width:100%;height:100%;object-fit:cover}.public-councilor-chip>span{font-size:.72rem;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

@media(max-width:1050px){
  .control-center{grid-template-columns:1fr}.winner-admin-panel{grid-column:1;grid-template-columns:1fr}.winner-admin-actions{grid-template-columns:1fr auto auto}
  .candidate-admin-card{grid-template-columns:120px minmax(0,1fr)!important}.candidate-admin-card>.actions{grid-column:1/-1}
  .councilor-fields{grid-template-columns:1fr 1fr}
}
@media(max-width:760px){
  .candidate-media-grid{grid-template-columns:1fr}.candidate-media-field{grid-template-columns:88px 1fr}.candidate-media-preview{width:80px;height:80px}
  .councilor-editor-card{grid-template-columns:1fr}.councilor-photo-editor{justify-items:start}.councilor-fields{grid-template-columns:1fr 1fr}.councilor-remove{justify-self:start}
  .winner-admin-actions{grid-template-columns:1fr}.winner-admin-actions .btn{width:100%}
  .candidate-admin-card{grid-template-columns:1fr!important}.admin-list-visuals{grid-template-columns:58px 58px}
  .candidate-preview-rich{grid-template-columns:52px 52px minmax(0,1fr)!important}.preview-list-logo,.preview-president-photo{width:48px;height:48px}.preview-list-logo .list-mark{width:48px;height:48px}
  .candidate-choice-rich{grid-template-columns:52px 52px minmax(0,1fr)!important}.candidate-choice-rich input{grid-column:1/-1}.ballot-list-logo,.ballot-president-photo{width:48px;height:48px}.ballot-list-logo .list-mark{width:48px;height:48px}
  .public-candidate-profile{grid-template-columns:52px 52px minmax(0,1fr)}.public-candidate-stats{grid-column:3;justify-items:start}.public-list-logo,.public-president-photo{width:48px;height:48px}.public-list-logo .list-mark{width:48px;height:48px}
  .winner-banner{grid-template-columns:52px 1fr!important}.winner-visuals{grid-column:2}.winner-vote-pill{grid-column:2!important}
}
@media(max-width:520px){
  .councilor-fields{grid-template-columns:1fr}.candidate-preview-rich{grid-template-columns:48px 48px minmax(0,1fr)!important}.candidate-choice-rich{grid-template-columns:48px 48px minmax(0,1fr)!important}
  .public-candidate-profile{grid-template-columns:46px 46px minmax(0,1fr)}.public-list-logo,.public-president-photo{width:44px;height:44px}.public-list-logo .list-mark{width:44px;height:44px}
}
/* Ajuste del banner ganador para incluir logo + foto del presidente. */
.winner-banner{grid-template-columns:70px minmax(0,1fr) auto auto}
@media(max-width:900px){.winner-banner{grid-template-columns:58px 1fr}.winner-visuals{grid-column:2}.winner-vote-pill{grid-column:2}}

/* V11.2 · editor de listas completas */
.candidate-complete-note{display:grid;grid-template-columns:54px minmax(0,1fr);gap:14px;align-items:center;margin:12px 0 18px;padding:15px 17px;border:1px solid #ead9e1;border-radius:17px;background:linear-gradient(135deg,#fff,#fff8fb)}
.candidate-complete-icon{width:50px;height:50px;border-radius:16px;background:#f8edf2;display:grid;place-items:center;font-size:1.6rem}.candidate-complete-note p{margin:4px 0 0;color:var(--muted);line-height:1.45}
.candidate-form-section{padding:16px;border:1px solid var(--line);border-radius:18px;background:#fffdfd}.candidate-form-section+.candidate-form-section{margin-top:2px}
.candidate-form-section-title{display:flex;gap:10px;align-items:center;margin-bottom:13px}.candidate-form-section-title>span,.candidate-section-heading>span{flex:0 0 auto;width:30px;height:30px;border-radius:10px;background:#f3e4ea;color:#6f173b;display:grid;place-items:center;font-weight:1000}.candidate-form-section-title strong{display:block}.candidate-form-section-title small{display:block;color:var(--muted);margin-top:2px}
.candidate-identity-grid{display:grid;grid-template-columns:minmax(220px,.85fr) minmax(280px,1.15fr);gap:12px;align-items:start}.candidate-proposal-field textarea{min-height:122px}.candidate-logo-field{grid-column:1/-1}
.candidate-president-grid{display:grid;grid-template-columns:minmax(240px,1.2fr) .45fr .45fr;gap:12px;align-items:start}.candidate-president-field{grid-column:1/-1}
.candidate-section-heading{display:flex;gap:10px;align-items:center}.councilor-title-row{margin-bottom:0}.councilor-actions-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.candidate-save-row{display:flex;gap:10px;flex-wrap:wrap}.candidate-admin-list{display:grid;gap:12px}.admin-councilor-strip{max-width:100%}
@media(max-width:860px){.candidate-identity-grid,.candidate-president-grid{grid-template-columns:1fr}.candidate-logo-field,.candidate-president-field{grid-column:auto}.councilor-title-row{align-items:flex-start;gap:12px}.councilor-actions-head{justify-content:flex-start}}
@media(max-width:560px){.candidate-complete-note{grid-template-columns:1fr}.candidate-complete-icon{width:44px;height:44px}.candidate-form-section{padding:13px}.candidate-save-row .btn{width:100%}}

/* Seguridad electoral: auditoría y operaciones críticas */
.security-inline-notice{margin:10px 0 16px;padding:12px 14px;border:1px solid #e3c36a;border-radius:13px;background:#fff9e8;color:#664b00;font-weight:800;line-height:1.45}
.security-section{overflow:hidden}.security-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:18px 0}
.security-card{padding:15px;border:1px solid var(--line);border-radius:15px;background:#fff;display:grid;gap:5px}.security-card>span{font-size:.72rem;font-weight:1000;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.security-card>strong{font-size:.98rem}.security-card>small{color:var(--muted);line-height:1.35}
.integrity-hashes{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0 20px}.integrity-hashes>div{min-width:0;padding:12px 14px;border:1px dashed #d7c7cf;border-radius:13px;background:#faf8f9}.integrity-hashes span{display:block;font-size:.72rem;font-weight:900;color:var(--muted);margin-bottom:5px}.integrity-hashes code{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.72rem;color:#50162f}
.security-audit-table code{font-size:.7rem}.security-ok{font-weight:900;color:#19733b}.security-bad{font-weight:900;color:#a51f30}
.critical-dialog{width:min(620px,calc(100vw - 28px));border:0;padding:0;border-radius:19px;box-shadow:0 28px 90px rgba(20,8,14,.35)}.critical-dialog::backdrop{background:rgba(28,14,20,.58);backdrop-filter:blur(3px)}.critical-dialog-card{display:grid;gap:13px;padding:22px;background:#fff}.critical-dialog-head h2{margin:4px 0 5px}.critical-dialog-head p{margin:0}.critical-dialog-card textarea{min-height:95px}.critical-dialog-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:4px}.security-dialog-note{margin:0;padding:10px 12px;border-radius:11px;background:#fff7e7;color:#654800;font-size:.82rem;line-height:1.4}
@media(max-width:900px){.security-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.integrity-hashes{grid-template-columns:1fr}}
@media(max-width:580px){.security-grid{grid-template-columns:1fr}.critical-dialog-actions{flex-direction:column}.critical-dialog-actions .btn{width:100%}}
