*{box-sizing:border-box}html,body,#app{margin:0;width:100%;height:100%;font-family:Inter,Segoe UI,Arial,sans-serif;color:#243247;background:#eef3f8}button,select,input,textarea{font:inherit}.topbar{height:72px;background:#fff;border-bottom:1px solid #d7e0ea;display:flex;align-items:center;justify-content:space-between;padding:8px 18px;position:relative;z-index:1000}.brand{display:flex;align-items:center;gap:12px}.brand img{width:44px;height:52px;object-fit:contain}.brand h1{font-size:20px;margin:0}.brand small{color:#66758a}.top-actions{display:flex;align-items:center;gap:10px}.chip{font-size:12px;font-weight:800;padding:9px 12px;border-radius:18px}.chip.neutral{background:#e8edf2}.chip.active{background:#fee4e2;color:#a7251e}.danger{background:#b3261e;color:#fff;border:0;border-radius:9px;padding:10px 15px;font-weight:800}.workspace{height:calc(100% - 72px);display:flex}.side-tools{width:84px;background:#fff;border-right:1px solid #d5dfe9;display:flex;flex-direction:column;z-index:900}.navbtn{height:78px;border:0;border-bottom:1px solid #edf1f5;background:#fff;color:#47566b;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;cursor:pointer}.navbtn b{font-size:22px}.navbtn span{font-size:11px;font-weight:700}.navbtn.active,.navbtn:hover{background:#edf7f7;color:#006b68}.drawer{width:330px;background:#fff;border-right:1px solid #d5dfe9;overflow:auto;padding:0 15px 30px;z-index:850}.panel{display:none}.panel.active{display:block}.panel-head{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:#fff;padding:13px 0 8px;z-index:5}.panel-head h2{font-size:18px;margin:0}.closeDrawer{display:none;border:0;background:transparent;font-size:26px}label{display:block;font-size:12px;font-weight:700;color:#536174;margin:11px 0 5px}select,input,textarea{width:100%;border:1px solid #cbd6e2;border-radius:8px;padding:9px;background:#fff;color:#223047}.full{width:100%}.primary{background:#006d6a;color:#fff;border:0;border-radius:8px;padding:10px 12px;font-weight:800;cursor:pointer}.ghost{background:#fff;border:1px solid #cbd6e2;border-radius:8px;padding:9px}.inline{display:flex;gap:8px;margin-top:8px}.inline button{flex:1;border:1px solid #cbd6e2;border-radius:8px;padding:8px;background:#fff}.hint{font-size:12px;line-height:1.4;color:#69788c}.info{font-size:12px;line-height:1.4;background:#edf5f9;border:1px solid #d4e4ed;border-radius:8px;padding:9px;margin:10px 0}.quick-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.quick{min-height:70px;border:1px solid #cbd6e2;border-radius:10px;background:#fff;font-weight:700;display:flex;align-items:center;gap:9px;padding:8px;text-align:left;cursor:pointer}.quick:hover{border-color:#008984;background:#f0faf9}.quick img{width:34px;height:34px}.school-list{display:flex;flex-direction:column;gap:7px}.school-card{border:1px solid #d8e1ea;border-radius:9px;padding:8px}.school-card.closed{border-color:#d35c54;background:#fff2f1}.school-title{font-weight:800;font-size:12px}.school-meta{font-size:10px;color:#748194;margin-top:2px}.school-actions{display:flex;gap:6px;margin-top:6px}.school-actions button{border:1px solid #ccd6df;background:#fff;border-radius:7px;padding:5px 8px;font-size:11px}.school-actions .close-school{background:#b3261e;color:#fff;border-color:#b3261e}.school-actions .open-school{background:#1f7a4d;color:#fff;border-color:#1f7a4d}h3{font-size:13px;margin:17px 0 7px}.summary{font-size:12px;background:#f7f9fb;border-radius:8px;padding:9px;margin-bottom:8px;line-height:1.5}.layer-group{font-size:11px;font-weight:900;text-transform:uppercase;color:#58687b;border-bottom:1px solid #e4eaf0;padding:10px 0 5px}.layer-row{display:flex;align-items:flex-start;gap:8px;padding:7px 0;font-size:12px}.layer-row input{width:auto;margin-top:2px}.layer-row span{flex:1}.layer-row small{display:block;color:#7c8999;font-size:10px}.heavy-tag{display:inline-block;background:#f6e8cb;border-radius:4px;padding:1px 4px;font-size:9px;color:#805c17}.draw-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.draw-grid button{border:1px solid #cbd6e2;background:#fff;border-radius:8px;padding:10px;font-weight:700}.map-wrap{position:relative;flex:1;min-width:0}.map-wrap #map{position:absolute;inset:0;background:#dfe8ef}.map-top{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:700;display:flex;gap:6px;background:#fff;padding:5px;border-radius:10px;box-shadow:0 2px 12px #0002}.map-top button{border:0;background:#f1f4f7;border-radius:7px;padding:8px 12px;font-weight:800}.map-top .accent{background:#006d6a;color:#fff}.status{position:absolute;bottom:12px;left:12px;z-index:700;background:#fff;padding:8px 12px;border-radius:8px;box-shadow:0 2px 10px #0002;font-size:12px;max-width:60%}.plan-badge{position:absolute;top:12px;right:12px;z-index:700;background:#263746;color:#fff;border-radius:16px;padding:8px 12px;font-size:11px;font-weight:900}.op-icon{background:transparent;border:0}.op-icon img{width:34px;height:34px;filter:drop-shadow(0 1px 2px #0004)}.school-marker{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:900;border:2px solid #fff;box-shadow:0 1px 4px #0005}.school-marker.open{background:#1f7a4d}.school-marker.closed{background:#b3261e}.annotation-label{background:#fff;border:1px solid #333;border-radius:4px;padding:3px 5px;font-weight:800;font-size:11px;white-space:nowrap}.modal{position:fixed;inset:0;background:#17253699;z-index:2000;display:none;align-items:center;justify-content:center}.modal.show{display:flex}.modal-card{width:min(430px,92vw);background:#fff;border-radius:12px;padding:18px;box-shadow:0 16px 50px #0005}.modal-card h2{margin:0 0 12px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.modal-actions button{padding:9px 13px;border-radius:8px;border:1px solid #ccd6df}.grid-label{font-size:9px;font-weight:800;color:#3a4858;background:#fff8;border:0}.print-block{display:none}.loading-overlay{position:absolute;inset:0;z-index:999;background:#ffffffaa;display:none;align-items:center;justify-content:center;font-weight:800}.loading-overlay.active{display:flex}
@media(max-width:900px){.topbar{height:64px;padding:6px 10px}.brand h1{font-size:16px}.brand small{display:none}.brand img{width:36px;height:42px}.workspace{height:calc(100% - 64px)}.side-tools{width:64px}.navbtn{height:66px}.navbtn span{font-size:9px}.drawer{position:absolute;left:64px;top:0;bottom:0;width:min(340px,calc(100vw - 64px));z-index:950;box-shadow:5px 0 20px #0002}.closeDrawer{display:block}.map-top{left:12px;transform:none}.plan-badge{top:55px}.top-actions .chip{display:none}}
@page{size:A3 landscape;margin:7mm}@media print{html,body,#app{height:100%;background:#fff}.no-print,.topbar,.side-tools,.drawer{display:none!important}.workspace{height:100%;display:block}.map-wrap{position:fixed;left:7mm;top:7mm;right:7mm;bottom:45mm}.map-wrap #map{position:absolute;inset:0;border:1px solid #333}.plan-badge{display:none}.print-block{display:grid;grid-template-columns:1fr 55mm 52mm;position:fixed;left:7mm;right:7mm;bottom:7mm;height:36mm;border:1px solid #333;background:#fff}.print-left{padding:4mm}.print-left h2{font-size:13pt;margin:1mm 0}.print-left strong{font-size:10pt}.print-left small{font-size:7pt}.print-mid{border-left:1px solid #333;padding:4mm;display:flex;flex-direction:column;gap:2mm;text-align:center}.print-mid b{font-size:12pt}.print-mid small{font-size:7pt}.print-logos{border-left:1px solid #333;display:flex;align-items:center;justify-content:center;gap:5mm}.print-logos img{max-width:20mm;max-height:20mm;object-fit:contain}#printLegend{font-size:6.5pt;margin-top:1mm;max-height:12mm;overflow:hidden}.leaflet-control-container{display:none!important}}
/* v0.5 */
.primary{cursor:pointer}.danger-small{background:#b3261e!important;color:#fff!important;border-color:#b3261e!important}.success-small{background:#1f7a4d!important;color:#fff!important;border-color:#1f7a4d!important}.danger-outline{color:#a7251e!important;border-color:#d6a39f!important;background:#fff!important}.draw-grid button.selected{background:#e2f4f2;border-color:#008984;color:#006b68}.incident-fields{display:none}.incident-list{display:flex;flex-direction:column;gap:7px;margin-top:9px}.incident-card{border:1px solid #d6e0e9;border-radius:9px;padding:8px;background:#fff}.incident-title{display:flex;justify-content:space-between;gap:8px;font-size:12px}.incident-title span{color:#68778a;font-size:11px}.incident-text{font-size:12px;margin-top:4px;line-height:1.35}.incident-meta{font-size:10px;color:#718094;margin-top:4px}.incident-actions{display:flex;gap:5px;margin-top:7px}.incident-actions button{border:1px solid #ccd6df;background:#fff;border-radius:6px;padding:4px 7px;font-size:10px}.empty-line{font-size:11px;color:#7b8796;padding:7px 0}.radius-label{background:#fff;border:1px solid #b3261e;color:#8c1c16;font-weight:900;border-radius:12px;padding:2px 5px;box-shadow:none}.top-actions .primary{padding:9px 12px}.modal-card{max-height:92vh;overflow:auto}

/* v0.6 · operativa simplificada y colocación robusta */
.aseem-top{width:82px;height:30px;object-fit:contain}.ops-dashboard{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:7px 0 10px}.ops-dashboard>div{border:1px solid #d8e2ea;border-radius:9px;padding:8px;background:#f8fbfc;text-align:center}.ops-dashboard b{display:block;font-size:20px;color:#006d6a}.ops-dashboard span{font-size:10px;color:#66758a}.quick.major{border-width:2px}.map-action.incident{background:#b3261e;color:#fff}.map-action.cut{background:#e09b1c;color:#fff}.interaction-layer{position:absolute;inset:0;z-index:660;display:none;cursor:crosshair;background:transparent;touch-action:none}.interaction-layer.active{display:block}.placement-banner{position:absolute;z-index:680;top:64px;left:50%;transform:translateX(-50%);pointer-events:none;background:#172536e8;color:#fff;border-radius:11px;padding:10px 16px;box-shadow:0 5px 24px #0003;text-align:center;min-width:310px}.placement-banner b{display:block;font-size:14px}.placement-banner span{display:block;font-size:11px;margin-top:2px;color:#dbe9ef}.modal-card.large{width:min(680px,94vw);max-height:92vh;overflow:auto}.form-grid{display:grid;gap:10px}.form-grid.two{grid-template-columns:1fr 1fr}.form-grid.three{grid-template-columns:1fr 1fr 1fr}.checks{display:flex;flex-wrap:wrap;gap:12px;margin:8px 0}.checks label{display:flex;align-items:center;gap:6px;margin:0;font-weight:700}.checks input{width:auto}.incident-fields{padding:9px 10px;background:#f7fafc;border:1px solid #dce5ed;border-radius:9px;margin:9px 0}.incident-list{display:flex;flex-direction:column;gap:7px}.incident-row{border:1px solid #d7e0e8;border-radius:9px;padding:8px;background:#fff}.incident-row.overdue{border-color:#d59b2a;background:#fff9ec}.incident-row .head{display:flex;justify-content:space-between;gap:8px;font-size:12px}.incident-row .head b{font-size:12px}.incident-row .sub{font-size:11px;color:#68778a;margin-top:4px;line-height:1.35}.incident-row .actions{display:flex;gap:5px;margin-top:6px}.incident-row .actions button{font-size:10px;padding:5px 7px;border:1px solid #cdd7df;border-radius:6px;background:#fff}.badge-priority{display:inline-block;border-radius:9px;padding:2px 6px;font-size:9px;font-weight:900}.badge-priority.ALTA{background:#fee4e2;color:#a7251e}.badge-priority.MEDIA{background:#fff1cf;color:#815b11}.badge-priority.BAJA{background:#e5f4ea;color:#1e7046}.op-marker-wrap{position:relative;width:38px;height:38px}.op-marker-wrap img{width:34px;height:34px;filter:drop-shadow(0 1px 2px #0004)}.op-marker-wrap .p{position:absolute;right:-2px;bottom:-2px;width:12px;height:12px;border-radius:50%;border:2px solid #fff}.op-marker-wrap .p.high{background:#b3261e}.op-marker-wrap .p.medium{background:#e09b1c}.op-marker-wrap .p.low{background:#1f7a4d}.annotation-label.route{border-color:#138d4a;color:#126b3c}.annotation-label.zone{border-color:#b3261e;color:#8c1f19}.spaced{margin-top:8px}.mode-normal{background:#e8edf2;color:#38495d}.mode-follow{background:#fff1cf;color:#815b11}.mode-emergency{background:#fee4e2;color:#a7251e}.mode-recovery{background:#e5f4ea;color:#1e7046}.danger-outline{border:1px solid #c6534b!important;color:#a7251e!important;background:#fff!important}.drawer select#opFilter{width:100%}
@media(max-width:900px){.form-grid.two,.form-grid.three{grid-template-columns:1fr}.placement-banner{top:104px;min-width:240px;max-width:70vw}.map-top{flex-wrap:wrap;max-width:70vw}.map-action{font-size:11px}.aseem-top{display:none}}
.map-action.print{background:#263746;color:#fff}
.guidance{border-left:4px solid #006d6a;background:#f3f9f8}

.catalog-stats{margin:8px 0 12px;padding:9px 11px;border:1px solid #d8e0e7;border-radius:9px;background:#f7fafc;font-size:12px;color:#425466}.plan-info details{margin-top:7px}.plan-info summary{cursor:pointer;font-weight:700;color:#536779}.coverage{display:inline-block;padding:2px 6px;border-radius:999px;font-size:10px;font-weight:800;letter-spacing:.03em}.coverage.good{background:#e3f5ef;color:#176a54}.coverage.partial{background:#fff2d8;color:#8a5b00}

/* v0.8 · cartografía operativa */
.quick-map-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:8px 0 12px}
.quick-map-grid button{border:1px solid #bfcddb;background:#f7fafc;border-radius:9px;padding:9px 7px;font-weight:800;color:#314359;cursor:pointer}
.quick-map-grid button:hover{background:#e8f4f4;border-color:#55a7a4;color:#006d6a}
.search-inline{display:flex;gap:6px}.search-inline input{flex:1}.search-inline button{width:auto;border:1px solid #cbd6e2;border-radius:8px;background:#fff;padding:0 11px;font-weight:700}
.service-status{font-size:11px;padding:7px 9px;background:#f6f8fb;border:1px solid #d8e1ea;border-radius:8px;margin-bottom:8px;color:#5b6878}
.service-status.ok{background:#eaf7ef;border-color:#b6dfc5;color:#17673a}.service-status.warn{background:#fff6df;border-color:#f0d597;color:#7a5700}
.map-legend{position:absolute;right:12px;bottom:44px;z-index:700;background:rgba(255,255,255,.94);border:1px solid #cbd6e2;border-radius:9px;padding:8px 10px;max-width:310px;box-shadow:0 2px 10px rgba(30,45,60,.16);font-size:11px;line-height:1.35;display:none}
.map-legend.show{display:block}.map-legend b{display:block;margin-bottom:4px;font-size:12px}.legend-row{display:flex;align-items:center;gap:6px;margin:2px 0}.legend-swatch{width:17px;height:11px;border:1px solid #777;display:inline-block}
.road-label-icon{background:transparent!important;border:0!important}
.road-label-text{display:inline-block;background:rgba(255,255,255,.82);border:1px solid rgba(80,90,100,.22);padding:1px 4px;border-radius:3px;font:700 10px/1.15 Arial,sans-serif;color:#394553;white-space:nowrap;text-shadow:0 1px #fff}
.road-label-text.major{font-size:11px;color:#7a2f00;border-color:#e0b16e;background:rgba(255,249,225,.9)}
.map-op-marker{border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font:800 10px/1 Arial,sans-serif;border:2px solid #fff;box-shadow:0 1px 5px rgba(0,0,0,.42);width:32px;height:32px}
.op-incidencia{background:#e53935}.op-corte{background:#c62828}.op-control{background:#ef8f00}.op-pma{background:#6a1b9a}.op-policia{background:#1565c0}.op-gc{background:#2e7d32}.op-bomberos{background:#e65100}.op-sanitario{background:#00897b}.op-encuentro{background:#43a047}.op-recepcion{background:#546e7a}
.layer-symbol{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.38)}
.layer-symbol img{width:20px;height:20px;object-fit:contain;filter:none}.sym-hidrante{background:#1976d2}.sym-water{background:#00a6c8}.sym-cecopal{background:#006d6a}.sym-meeting{background:#43a047}.sym-heli{background:#7b1fa2}.sym-fire{background:#e65100}.sym-generic{background:#546e7a}.sym-kmz{background:#8e44ad;color:#fff;font-weight:900;font-size:9px}
.kmz-marker{background:#8e44ad;color:#fff;border:2px solid #fff;border-radius:50%;width:29px;height:29px;display:flex;align-items:center;justify-content:center;font:800 9px Arial;box-shadow:0 1px 5px rgba(0,0,0,.4)}
.sismo-tip{font-size:11px}.heavy-tag{color:#8a5300}
.weather-info a{color:#006d6a;font-weight:800;text-decoration:none}
@media(max-width:900px){.map-legend{max-width:240px;right:6px;bottom:42px}.road-label-text{font-size:9px}}
/* v0.8 · simbología operativa: pictogramas monocromos en blanco sobre código de color ASEEM */
.sym-hidrante img,.sym-water img,.sym-cecopal img,.sym-meeting img{filter:brightness(0) invert(1);opacity:.98}
.sym-hidrante{background:#1565c0}.sym-water{background:#008fb3}.sym-cecopal{background:#00695c}.sym-meeting{background:#2e7d32}
.sym-heli{background:#6a1b9a}.sym-heli img{filter:none;width:22px;height:22px}
.sym-fire{background:#d84315}.sym-fire img{filter:none;width:26px;height:26px}
.map-op-marker{font-size:10px;letter-spacing:.1px}

/* v0.9 · mejoras operativas */
.layer-presets{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:8px 0 10px}.layer-presets button{border:1px solid #c8d7df;border-radius:8px;padding:8px 6px;background:#f8fbfc;font-size:11px;font-weight:800;color:#284457}.layer-presets button:last-child{grid-column:1/-1}.sector-label{background:rgba(255,255,255,.88);border:1px solid #6c7a89;color:#253648;font-weight:900;font-size:10px;padding:2px 5px;border-radius:4px;box-shadow:none}.message-log{margin-top:8px;display:flex;flex-direction:column;gap:6px}.msg-row{border:1px solid #d9e3e9;border-radius:8px;padding:7px;background:#f9fbfc;font-size:10px;line-height:1.35}.msg-row b{display:block;color:#006d6a;margin-bottom:3px}.msg-row button{margin-top:4px;border:1px solid #d6dde3;background:#fff;border-radius:5px;font-size:9px;padding:3px 6px}#cecopalMsgText{font-size:11px;line-height:1.4;resize:vertical}
