:root{--ink:#10233f;--bg:#f3f6fa}body{background:var(--bg);color:#162033}.top{background:var(--ink);color:#fff;box-shadow:0 3px 12px #0002}.eyebrow{font-size:.7rem;letter-spacing:.14em;opacity:.75}.panel,.metric{border:0;border-radius:18px;box-shadow:0 7px 22px #19324d12;background:#fff}.metric{padding:14px;height:100%}.metric span{display:block;color:#6c757d;font-size:.72rem;text-transform:uppercase}.metric strong{display:block;font-size:1.05rem;margin-top:3px}.progress{height:10px}.candidate{padding:14px 0;border-bottom:1px solid #e8edf3}.candidate:last-child{border:0}.candidate .num{width:46px;height:46px;border-radius:12px;background:#edf2f8;display:grid;place-items:center;font-weight:800}.candidate .vote-share{min-width:90px}.status-row{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid #edf0f3}.status-row:last-child{border:0}@media(max-width:576px){.container{padding-left:14px;padding-right:14px}.panel,.metric{border-radius:15px}.candidate .vote-share{min-width:78px}}

.fav-btn{width:42px;height:42px;border:1px solid #d9e0e8;border-radius:12px;background:#fff;font-size:1.55rem;line-height:1;color:#6c757d;display:grid;place-items:center;flex:0 0 auto}.fav-btn:hover,.fav-btn:focus{background:#fff8df;border-color:#e7c75a}.fav-btn.active{background:#fff3cd;border-color:#e7c75a;color:#8a6500}.fav-card{border:0;border-radius:18px;box-shadow:0 7px 22px #19324d12}.fav-empty{padding:48px 20px;text-align:center;color:#6c757d}.fav-group-title{font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#6c757d}.fav-updated{font-size:.72rem;color:#6c757d}

/* V1.7 R2 - Compactacao visual global */
.developer-credit-app{font-size:.58rem;line-height:1.05;opacity:.66;letter-spacing:.035em;margin:.08rem 0 .12rem}.top .container{padding-top:.55rem!important;padding-bottom:.55rem!important}.top h1{line-height:1.05;font-size:1.18rem!important}.top .eyebrow{line-height:1.05}.container.py-3{padding-top:.65rem!important;padding-bottom:.65rem!important}main.pb-5{padding-bottom:.8rem!important}.panel .card-body{padding:.72rem}.metric{padding:8px 10px}.metric span{font-size:.65rem;line-height:1.1}.metric strong{font-size:.95rem;margin-top:1px;line-height:1.1}.candidate{padding:8px 0}.candidate .num{width:40px;height:40px}.status-row{padding:4px 0}.progress.my-3{margin-top:.5rem!important;margin-bottom:.5rem!important}.mb-3{margin-bottom:.65rem!important}.mt-3{margin-top:.65rem!important}.mb-2{margin-bottom:.35rem!important}.mt-4{margin-top:1rem!important}.row.g-3{--bs-gutter-y:.65rem}.fav-empty{padding:24px 14px}.fav-btn{width:36px;height:36px;font-size:1.3rem}.form-label{margin-bottom:.2rem;font-size:.82rem}.form-select,.form-control,.btn{min-height:36px;padding-top:.36rem;padding-bottom:.36rem}canvas#historico{max-height:110px}canvas#grafico{max-height:205px}
@media(min-width:992px) and (max-height:900px){body{font-size:.92rem}.top .container{padding-top:.38rem!important;padding-bottom:.38rem!important}.container.py-3{padding-top:.45rem!important;padding-bottom:.45rem!important}.panel .card-body{padding:.55rem}.metric{padding:6px 8px}.mb-3{margin-bottom:.45rem!important}.mt-3{margin-top:.45rem!important}.btn{font-size:.82rem;min-height:32px;padding-top:.25rem;padding-bottom:.25rem}.form-select,.form-control{min-height:32px;padding-top:.25rem;padding-bottom:.25rem}.candidate{padding:5px 0}.candidate .num{width:34px;height:34px}.status-row{padding:2px 0}.progress.my-3{margin-top:.3rem!important;margin-bottom:.3rem!important}canvas#grafico{max-height:155px}canvas#historico{max-height:72px}}

/* V1.8 Central Operacional */
.op-log{max-height:310px;overflow:auto}.op-log-item{padding:.4rem 0;border-bottom:1px solid #edf0f3}.op-log-item:last-child{border:0}.table-sm{font-size:.78rem}.table-sm td,.table-sm th{padding:.3rem .35rem;white-space:nowrap}@media(min-width:992px) and (max-height:900px){.op-log{max-height:210px}.table-sm{font-size:.72rem}.table-sm td,.table-sm th{padding:.2rem .28rem}}

/* V2.2 Pernambuco em Tempo Real */
.pe-search{max-width:310px}.candidate-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid #e8edf3}.candidate-row:last-child{border-bottom:0}.pe-candidate .num{width:42px;height:42px;border-radius:12px;background:#edf2f8;display:grid;place-items:center;font-weight:800;flex:0 0 auto}@media(max-width:576px){.pe-search{max-width:none;width:100%}.pe-candidate .num{width:38px;height:38px}.candidate-row{padding:7px 0}}
/* V2.3 Inteligência Territorial PE */
.section-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:8px}.section-chip{display:flex;flex-direction:column;text-decoration:none;border:1px solid #dce4ed;border-radius:12px;padding:9px 10px;background:#f8fafc;color:#10233f;font-weight:700}.section-chip:hover{background:#eef4fa;border-color:#9db6cf}.section-chip small{font-size:.65rem;font-weight:400;color:#6c757d}.fav-municipio{border-radius:12px!important}
/* V2.5 - Central de Monitoramento PE */
.monitor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.monitor-card{border:1px solid rgba(128,150,175,.25);border-radius:14px;padding:.8rem;background:rgba(9,29,49,.35)}@media(max-width:700px){.monitor-grid{grid-template-columns:1fr}}

/* V2.6 — Central Pública */
.public-shortcuts .btn{display:flex;flex-direction:column;justify-content:center;min-height:88px;line-height:1.15}.public-shortcuts small{font-size:.72rem;opacity:.82}.monitor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.monitor-card{border:1px solid rgba(15,35,63,.12);border-radius:.8rem;padding:.8rem;background:rgba(255,255,255,.78)}@media(max-width:700px){.monitor-grid{grid-template-columns:1fr}.public-shortcuts .btn{min-height:76px;padding:.7rem!important}}
.timeline-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.timeline-card{border:1px solid rgba(15,35,63,.12);border-radius:.8rem;padding:.75rem;background:rgba(255,255,255,.78)}.timeline-svg{width:100%;height:92px;display:block;margin:.25rem 0}.timeline-axis{stroke:#ccd5df;stroke-width:1}.timeline-line{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.timeline-dot{fill:currentColor}.timeline-empty{height:92px;display:grid;place-items:center;color:#6c757d;font-size:.8rem}.op-alert{border-radius:.65rem;padding:.55rem .65rem;margin-bottom:.45rem;border:1px solid transparent}.op-success{background:#eaf7ef;border-color:#b9e3c8}.op-warning{background:#fff6df;border-color:#f1d68c}.op-danger{background:#fdebec;border-color:#efb9be}@media(max-width:700px){.timeline-grid{grid-template-columns:1fr}}
/* V2.8 — Central de Municípios & Cobertura PE */
.municipal-list{max-height:58vh;overflow:auto}.municipal-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:.55rem 0;border-bottom:1px solid #e8edf3}.municipal-row:last-child{border-bottom:0}.municipal-actions{min-width:230px}.recent-item{display:flex;justify-content:space-between;gap:8px;padding:.35rem 0;border-bottom:1px solid #edf0f3}.recent-item span{color:#6c757d;text-align:right}.municipal-tv-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.65rem}.municipal-tv-card{border:1px solid #dce4ed;border-radius:14px;padding:.85rem;background:#f8fafc;display:flex;flex-direction:column}.municipal-tv-card strong{font-size:1rem}.municipal-tv-card span{font-size:1.45rem;font-weight:800}.municipal-tv-card small{color:#6c757d}@media(max-width:700px){.municipal-row{align-items:flex-start;flex-direction:column}.municipal-actions{min-width:0;width:100%;text-align:left!important}.municipal-tv-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.municipal-tv-card span{font-size:1.15rem}}
/* V3.0 — Mapa Eleitoral Interativo de Pernambuco */
.pe-map-wrap{position:relative;width:100%;min-height:430px;border:1px solid #dce4ed;border-radius:14px;background:#f8fafc;overflow:hidden}.pe-map{width:100%;height:clamp(430px,62vh,650px);display:block}.map-mun{stroke:#fff;stroke-width:.75;vector-effect:non-scaling-stroke;cursor:pointer;transition:opacity .12s,stroke-width .12s}.map-mun:hover,.map-mun:focus{stroke:#10233f;stroke-width:2;outline:none;opacity:.82}.map-mun.selected{stroke:#07101c;stroke-width:3}.map-c0{fill:#e6e9ed}.map-c1{fill:#dbeafe}.map-c2{fill:#93c5fd}.map-c3{fill:#60a5fa}.map-c4{fill:#2563eb}.map-c5{fill:#10233f}.map-tooltip{position:absolute;z-index:5;pointer-events:none;min-width:170px;max-width:210px;padding:.45rem .55rem;border-radius:9px;background:#081727;color:#fff;font-size:.72rem;box-shadow:0 6px 18px #0004}.map-legend{display:flex;flex-wrap:wrap;gap:.3rem .55rem;font-size:.66rem;color:#6c757d}.map-legend span{display:flex;align-items:center;gap:.22rem}.map-legend i{width:13px;height:13px;border-radius:3px;border:1px solid #cad1d9}.map-legend .l0{background:#e6e9ed}.map-legend .l1{background:#dbeafe}.map-legend .l2{background:#93c5fd}.map-legend .l3{background:#60a5fa}.map-legend .l4{background:#2563eb}.map-legend .l5{background:#10233f}.map-legend-vertical{flex-direction:column;gap:.5rem}.map-detail .display-6{font-size:2rem}.pe-map-tv{min-height:calc(100vh - 135px)}.pe-map-tv .pe-map{height:calc(100vh - 145px)}@media(max-width:700px){.pe-map-wrap{min-height:330px}.pe-map{height:390px}.map-legend{font-size:.58rem}.pe-map-tv,.pe-map-tv .pe-map{min-height:55vh;height:55vh}}

/* V4.1 R1 — Home Simplificada */
.home-hero{background:linear-gradient(135deg,#fff,#f7fbff);border:0;box-shadow:0 10px 30px rgba(16,35,63,.08)}
.home-action{display:block;height:100%;padding:1.15rem;border:1px solid #dbe5ef;border-radius:16px;text-decoration:none;color:#10233f;background:#fff;transition:.18s ease;box-shadow:0 6px 18px rgba(16,35,63,.05)}
.home-action:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(16,35,63,.10);border-color:#9ec5fe;color:#10233f}
.home-action .home-icon{font-size:1.6rem;line-height:1;margin-bottom:.65rem}
.home-action strong{display:block;font-size:1rem;margin-bottom:.3rem}.home-action span{display:block;font-size:.82rem;color:#6c757d}
.home-secondary a{font-size:.86rem}.advanced-menu .btn{white-space:normal;text-align:left}
@media(max-width:767.98px){.home-action{padding:1rem}.home-action .home-icon{font-size:1.35rem}}

/* V4.8 R3.1 — mapa municipal em largura total; cards abaixo */
.mapa-candidato-full{width:100%;}
.mapa-card-full{width:100%;overflow:hidden;}
.mapa-card-full>.card-body{padding:0;}
.pe-map-wrap.pe-map-edge{width:100%;min-height:clamp(500px,68vh,820px);border-left:0;border-right:0;border-radius:0;}
.pe-map-wrap.pe-map-edge .pe-map{width:100%;height:clamp(500px,68vh,820px);}
.mapa-cards-bottom{width:100%;margin-left:0;margin-right:0;}
@media (max-width:700px){.pe-map-wrap.pe-map-edge,.pe-map-wrap.pe-map-edge .pe-map{min-height:430px;height:58vh}.mapa-cards-bottom{--bs-gutter-x:.75rem}}
/* largura realmente de canto a canto do viewport */
.mapa-card-full{width:100vw;margin-left:calc(50% - 50vw);border-left:0;border-right:0;border-radius:0;}
