*{box-sizing:border-box}:root{--bs-primary:var(--primary);--bs-primary-rgb:0,21,88}body{background:var(--page-bg);color:#172033;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;font-size:18px;min-height:100vh}a{color:var(--primary)}.public-shell{min-height:calc(100vh - 64px);display:flex;align-items:center;justify-content:center;padding:32px 16px}.public-shell.wide{display:block;max-width:1000px}.login-card{width:100%;max-width:570px;background:#fff;border-radius:24px;padding:clamp(24px,5vw,28px);box-shadow:0 20px 60px rgba(0,21,88,.12);border-top:7px solid var(--accent)}.brand{text-align:center;margin-bottom:30px}.brand-logo{max-width:210px;max-height:110px;margin-bottom:20px}.eyebrow{color:var(--primary);font-weight:800;letter-spacing:.08em;text-transform:uppercase;font-size:.82rem;margin-bottom:7px}h1{font-weight:800;color:var(--primary)}.form-label{font-weight:750}.form-control{min-height:58px;border:2px solid #aab1bf;border-radius:12px}.form-control:focus,.btn:focus-visible{box-shadow:0 0 0 4px rgba(254,177,53,.45);border-color:var(--primary)}.btn-primary{--bs-btn-bg:var(--primary);--bs-btn-border-color:var(--primary);--bs-btn-hover-bg:#10286e;--bs-btn-hover-border-color:#10286e;--bs-btn-active-bg:#0c2050;--bs-btn-active-border-color:#0c2050;--bs-btn-disabled-bg:var(--primary);--bs-btn-disabled-border-color:var(--primary)}.btn-outline-primary{--bs-btn-color:var(--primary);--bs-btn-border-color:var(--primary);--bs-btn-hover-bg:var(--primary);--bs-btn-hover-border-color:var(--primary);--bs-btn-active-bg:var(--primary);--bs-btn-active-border-color:var(--primary)}.btn-link{--bs-btn-color:var(--primary);--bs-btn-hover-color:var(--primary);--bs-btn-active-color:var(--primary)}.primary-action{min-height:62px;font-weight:800;letter-spacing:.04em}.privacy-note{text-align:center;color:#5f6878;font-size:.9rem;margin:24px 0 0}.public-footer{position:relative;text-align:center;min-height:64px;padding:20px;background:#fff;color:#4c5667;font-size:.9rem;border-top:1px solid #dfe2e8}.portal-header{display:flex;justify-content:space-between;gap:24px;align-items:center;padding:32px 0}.ballot-label{display:block;font-size:.35em;font-weight:700;color:#5f6878;text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px}.vote-header{padding:0}.section-title{font-size:1.5rem;margin:24px 0}.ballot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px}.ballot-card,.empty-state{background:#fff;border:1px solid #dce0e8;border-radius:18px;padding:24px}.ballot-card.is-open{border:3px solid var(--accent)}.status-badge,.voted-label{display:inline-block;font-weight:800;color:var(--primary);background:#edf1ff;padding:6px 10px;border-radius:8px;margin-bottom:14px}.voted-label{display:block;background:#e8f7ee;color:#146c3a}.skip-link{position:fixed;z-index:9999;background:#fff;padding:12px}
.admin-access-link{position:absolute;right:16px;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:26px;height:26px;color:#8b93a3;background:#fff;border:1px solid #dfe2e8;border-radius:50%;text-decoration:none;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.admin-access-link:hover{color:var(--primary);border-color:var(--primary)}
.ballot-description{background:#fff;border:1px solid #dce0e8;border-radius:16px;padding:20px 24px;margin-bottom:24px;font-size:1.05rem}
.ballot-selection-hint{color:var(--primary);font-weight:700;margin-top:16px;margin-bottom:0}
.confirm-option-list{list-style:none;padding:0;margin:8px 0 20px;font-weight:900;color:var(--primary);font-size:1.3rem}
.confirm-option-list li{padding:4px 0}
.option-grid{display:grid;gap:16px;margin:10px 0 24px}
.option-card{display:flex;align-items:center;gap:16px;background:#fff;border:2px solid #dce0e8;border-radius:16px;padding:20px 24px;font-size:1.15rem;font-weight:700;cursor:pointer;transition:background-color .15s,border-color .15s,box-shadow .15s}
.option-card input{width:26px;height:26px;accent-color:var(--primary);flex-shrink:0}
.option-card:has(input:checked){background:#e8f7ee;border-color:#2fa360;box-shadow:0 0 0 3px rgba(47,163,96,.18)}
.option-card:has(input:focus-visible){box-shadow:0 0 0 4px rgba(254,177,53,.5)}
.confirm-body{padding:12px 8px;text-align:center}
.confirm-option{color:var(--primary);font-weight:900;margin:8px 0 20px}
.confirm-explain{color:#3d4657}
.confirm-warning{margin:20px 0 4px}
.confirm-countdown{color:#5f6878;font-weight:700}
.confirm-actions{display:flex;gap:12px;margin-top:20px}
.confirm-actions .btn{flex:1;min-height:56px}
#confirm-status{min-height:1.4em;margin-top:14px;font-weight:600;color:var(--primary)}
.voted-label.is-error{background:#fdeceb;color:#b3261e}
.voted-label.is-warning{background:#fff4e5;color:#8a5a00}
.notice-icon{display:block;margin:0 auto 12px}
@media(max-width:600px){body{font-size:17px}.public-shell{padding:18px 12px}.login-card{border-radius:18px;padding:24px 18px}.portal-header{align-items:flex-start;flex-direction:column}.portal-header form,.portal-header button{width:100%}.confirm-actions{flex-direction:column}}

/* Toastr: notificaciones a plena opacidad apenas aparecen, no solo al pasar el mouse (spec) */
#toast-container>div{opacity:1}
#toast-container>div:hover{opacity:1}

/* Vista de texto completo de una notificación (views/public/notification.php). El HTML del mensaje
   largo ya viene saneado por HtmlSanitizer (solo negrita/itálica/subrayado/listas/tablas/tamaño de
   letra/enlaces), pero no trae bordes ni espaciados propios, así que las tablas/listas/enlaces se
   estilan acá para que se vean bien sin depender de estilos en línea arbitrarios. */
.notification-card{max-width:680px}
.notification-body{margin-top:16px;font-size:1.05rem;line-height:1.6;color:#28303f}
.notification-body p{margin:0 0 1em}
.notification-body ul,.notification-body ol{margin:0 0 1em;padding-left:1.4em}
.notification-body table{border-collapse:collapse;width:100%;margin:0 0 1em}
.notification-body a:not(.notif-btn){color:var(--primary);font-weight:700;text-decoration:underline}
.notification-body a.notif-btn{display:inline-block;background:var(--primary);color:#fff;font-weight:800;text-decoration:none;padding:12px 22px;border-radius:12px;margin:4px 0}
.notification-body a.notif-btn:hover{background:#10286e}
.notification-body th,.notification-body td{border:1px solid #dce0e8;padding:8px 10px;text-align:left}
.notification-body th{background:#f3f5f9;font-weight:700}
