:root{--bg-deep:#0d1117;--bg-base:#131920;--bg-panel:#161d27;--bg-card:#1c2530;--bg-hover:#212d3a;--border:#1f2d3d;--border-light:#2a3d52;--text-primary:#d4dce8;--text-muted:#6a7f96;--text-dim:#3d5166;--accent:#3b82c4;--accent-soft:#2a5f96;--accent-glow:#3b82c426;--accent-dim:#3b82c414;--success:#3d9970;--success-bg:#3d99701a;--error:#c0392b;--error-bg:#c0392b1a;--warning:#d4ac0d;--draw-point:#3b82c4;--draw-polygon:#8b5cf6;--draw-buffer:#3b82c41f;--draw-stroke:#3b82c4;--font-ui:"Syne", system-ui, sans-serif;--font-mono:"JetBrains Mono", monospace;--radius-sm:4px;--radius:7px;--radius-lg:10px;--panel-w:300px;--header-h:50px;--transition:.18s ease}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden}body{font-family:var(--font-ui);background:var(--bg-deep);color:var(--text-primary);flex-direction:column;display:flex}header{height:var(--header-h);background:var(--bg-panel);border-bottom:1px solid var(--border);z-index:10;flex-shrink:0;justify-content:space-between;align-items:center;padding:0 20px;display:flex;position:relative}.header-brand{align-items:center;gap:10px;display:flex}.header-icon{color:var(--accent);font-size:1.2rem;line-height:1}header h1{color:var(--text-primary);letter-spacing:.5px;font-size:.95rem;font-weight:700}.badge{background:var(--accent-dim);color:var(--accent);border:1px solid var(--accent-soft);letter-spacing:.8px;font-size:.65rem;font-family:var(--font-mono);text-transform:uppercase;border-radius:20px;padding:3px 8px;font-weight:500}.header-meta{font-size:.72rem;font-family:var(--font-mono);color:var(--text-muted)}.layout{flex:1;display:flex;overflow:hidden}.panel{width:var(--panel-w);background:var(--bg-panel);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.panel-section{border-bottom:1px solid var(--border);padding:14px 16px}.panel-section.hidden{display:none}.panel-section h2{text-transform:uppercase;letter-spacing:1.5px;color:var(--text-muted);font-size:.65rem;font-weight:600;font-family:var(--font-mono);margin-bottom:12px}.hint{color:var(--text-muted);margin-bottom:10px;font-size:.72rem;line-height:1.5}.draw-mode-grid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.mode-btn{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:all var(--transition);color:var(--text-muted);flex-direction:column;align-items:center;gap:3px;padding:10px 6px;display:flex}.mode-btn:hover{border-color:var(--border-light);background:var(--bg-hover);color:var(--text-primary)}.mode-btn.active{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}.mode-icon{font-size:1rem;line-height:1}.mode-label{letter-spacing:.3px;font-size:.72rem;font-weight:600}.mode-desc{color:var(--text-dim);font-size:.6rem;font-family:var(--font-mono)}.mode-btn.active .mode-desc{color:var(--accent-soft)}.control-group{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}.control-group label{color:var(--text-muted);font-size:.72rem;font-family:var(--font-mono)}select,input[type=number]{background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text-primary);font-size:.82rem;font-family:var(--font-mono);transition:border-color var(--transition);appearance:none;outline:none;padding:8px 10px}select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%236a7f96'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;padding-right:28px}select:focus,input[type=number]:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}.btn{border-radius:var(--radius-sm);font-size:.78rem;font-weight:600;font-family:var(--font-ui);cursor:pointer;transition:all var(--transition);letter-spacing:.3px;white-space:nowrap;border:none;padding:8px 14px}.btn-action{background:var(--accent);color:#fff;flex:1}.btn-action:hover:not(:disabled){background:#2d6eaa;transform:translateY(-1px)}.btn-action:disabled{opacity:.35;cursor:not-allowed;transform:none}.btn-ghost{color:var(--text-muted);border:1px solid var(--border);background:0 0}.btn-ghost:hover{background:var(--bg-card);color:var(--text-primary);border-color:var(--border-light)}.btn-row{align-items:center;gap:6px;display:flex}.selected-point,.polygon-status{font-size:.72rem;font-family:var(--font-mono);color:var(--text-muted);background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:7px;margin-bottom:10px;padding:6px 8px;display:flex}.dot-indicator{width:7px;height:7px;transition:all var(--transition);border-radius:50%;flex-shrink:0}.dot-indicator.inactive{background:var(--text-dim)}.dot-indicator.active{background:var(--accent);box-shadow:0 0 6px var(--accent)}.dot-indicator.active-polygon{background:#8b5cf6;box-shadow:0 0 6px #8b5cf6}.status{border-radius:var(--radius-sm);font-size:.75rem;font-family:var(--font-mono);margin:10px 16px;padding:8px 12px;line-height:1.4}.status.loading{background:var(--accent-dim);color:var(--accent);border:1px solid var(--accent-soft)}.status.success{background:var(--success-bg);color:var(--success);border:1px solid #3d99704d}.status.error{background:var(--error-bg);color:#eb5757;border:1px solid #c0392b4d}.status.hidden{display:none}.resultados{flex:1;padding:10px 12px;overflow-y:auto}.hint-center{text-align:center;color:var(--text-dim);font-size:.72rem;font-family:var(--font-mono);padding:20px 0}.contador{font-size:.65rem;font-family:var(--font-mono);color:var(--text-dim);text-align:center;letter-spacing:.5px;text-transform:uppercase;padding:4px 0 8px}.resultado-item{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition);margin-bottom:6px;padding:9px 11px}.resultado-item:hover{border-color:var(--accent);background:var(--bg-hover);transform:translate(2px)}.resultado-nombre{color:var(--text-primary);margin-bottom:2px;font-size:.82rem;font-weight:600}.resultado-tipo{font-size:.68rem;font-family:var(--font-mono);color:var(--text-muted);text-transform:capitalize}.resultado-dist{font-size:.68rem;font-family:var(--font-mono);color:var(--success);margin-top:3px}.resultados::-webkit-scrollbar{width:3px}.resultados::-webkit-scrollbar-track{background:0 0}.resultados::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.resultados::-webkit-scrollbar-thumb:hover{background:var(--border-light)}#map{background:var(--bg-deep);flex:1}.ol-control button{background:var(--bg-panel)!important;color:var(--text-primary)!important;border:1px solid var(--border)!important}.ol-control button:hover{background:var(--bg-hover)!important}.ol-attribution{color:var(--text-dim)!important;background:#0d1117bf!important;font-size:.65rem!important}.ol-attribution a{color:var(--accent)!important;text-shadow:none!important}.ol-attribution li{color:var(--text-primary)!important}.ol-scale-line{background:#0d1117bf!important}.ol-scale-line-inner{border-color:var(--text-primary)!important;color:var(--text-primary)!important}.popup{background:var(--bg-panel);border:1px solid var(--border-light);border-radius:var(--radius-lg);min-width:180px;max-width:240px;padding:14px 18px 12px;animation:.15s popupIn;position:relative;box-shadow:0 8px 30px #00000080}@keyframes popupIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.popup:after{content:"";background:var(--bg-panel);border-right:1px solid var(--border-light);border-bottom:1px solid var(--border-light);width:12px;height:12px;position:absolute;bottom:-7px;left:50%;transform:translate(-50%)rotate(45deg)}.popup h3{color:var(--text-primary);margin-bottom:5px;padding-right:18px;font-size:.88rem;font-weight:700}.popup p{font-size:.72rem;font-family:var(--font-mono);color:var(--text-muted);margin:2px 0;line-height:1.4}.popup-tipo-label{font-size:.65rem;font-family:var(--font-mono);background:var(--accent-dim);color:var(--accent);border:1px solid var(--accent-soft);border-radius:10px;margin-bottom:4px;padding:2px 7px;display:inline-block}.popup-close{color:var(--text-dim);cursor:pointer;transition:color var(--transition);background:0 0;border:none;font-size:1rem;line-height:1;position:absolute;top:8px;right:10px}.popup-close:hover{color:var(--text-primary)}#map.draw-point,#map.draw-polygon{cursor:crosshair}.panel-toggle{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;width:34px;height:34px;transition:background var(--transition), border-color var(--transition);flex-direction:column;flex-shrink:0;justify-content:center;gap:4px;padding:7px 6px;display:none}.panel-toggle:hover{background:var(--bg-hover);border-color:var(--border-light)}.panel-toggle.active{background:var(--accent-dim);border-color:var(--accent)}.toggle-bar{background:var(--text-muted);transform-origin:50%;border-radius:2px;width:100%;height:2px;transition:all .22s;display:block}.panel-toggle.active .toggle-bar:first-child{background:var(--accent);transform:translateY(6px)rotate(45deg)}.panel-toggle.active .toggle-bar:nth-child(2){opacity:0;transform:scaleX(0)}.panel-toggle.active .toggle-bar:nth-child(3){background:var(--accent);transform:translateY(-6px)rotate(-45deg)}.panel-backdrop{z-index:40;opacity:0;pointer-events:none;background:#0000008c;transition:opacity .25s;display:none;position:fixed;inset:0}.panel-backdrop.visible{opacity:1;pointer-events:all}@media (width<=900px){:root{--panel-w:260px}.badge{display:none}}@media (width<=640px){:root{--panel-w:290px;--header-h:48px}.panel-toggle{display:flex}.panel-backdrop{display:block}.panel{top:var(--header-h);width:var(--panel-w);z-index:50;transition:transform .28s cubic-bezier(.4,0,.2,1);position:fixed;bottom:0;left:0;transform:translate(-100%);box-shadow:4px 0 24px #00000080}.panel.open{transform:translate(0)}.layout{position:relative}#map{width:100%}header h1{font-size:.88rem}.header-icon{font-size:1rem}.header-meta{text-overflow:ellipsis;white-space:nowrap;max-width:100px;font-size:.65rem;overflow:hidden}.popup{min-width:150px;max-width:200px;padding:10px 14px}.btn{padding:10px 14px;font-size:.82rem}select,input[type=number]{padding:10px;font-size:.88rem}.mode-btn{padding:12px 6px}}@media (width<=380px){:root{--panel-w:100vw}.panel{border-right:none}}.toolbar{background:var(--bg-panel);border-bottom:1px solid var(--border);z-index:5;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:6px 16px;display:flex}.toolbar-label{font-size:.62rem;font-family:var(--font-mono);color:var(--text-dim);text-transform:uppercase;letter-spacing:1.2px;white-space:nowrap;margin-right:4px}.toolbar-sep{background:var(--border);flex-shrink:0;width:1px;height:22px;margin:0 3px}.tool-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card);color:var(--text-muted);font-size:.75rem;font-weight:600;font-family:var(--font-ui);cursor:pointer;transition:all var(--transition);white-space:nowrap;letter-spacing:.2px;padding:6px 12px}.tool-btn:hover{background:var(--bg-hover);border-color:var(--border-light);color:var(--text-primary)}.tool-btn.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.tool-btn.danger:hover{color:#eb5757;background:#c0392b1a;border-color:#c0392b66}.tool-btn.danger.active{color:#eb5757;background:#c0392b1f;border-color:#c0392b}.crud-form h2{color:var(--accent)!important}.required{color:#eb5757;font-size:.8em}textarea{background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text-primary);font-size:.82rem;font-family:var(--font-mono);transition:border-color var(--transition);resize:vertical;outline:none;min-height:64px;padding:8px 10px}textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}input{background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text-primary);font-size:.82rem;font-family:var(--font-mono);transition:border-color var(--transition);appearance:none;outline:none;padding:8px 10px}.coords-display{font-size:.7rem;font-family:var(--font-mono);color:var(--text-muted);background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:7px;margin-top:4px;padding:6px 8px;display:flex}.resultado-item .item-actions{border-top:1px solid var(--border);gap:5px;margin-top:7px;padding-top:7px;display:flex}.btn-item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-deep);font-size:.68rem;font-family:var(--font-mono);cursor:pointer;transition:all var(--transition);color:var(--text-muted);padding:4px 10px;font-weight:600}.btn-item:hover{background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-light)}.btn-item.edit:hover{border-color:var(--accent);color:var(--accent)}.btn-item.del:hover{color:#eb5757;background:#c0392b14;border-color:#c0392b}.item-id{font-size:.62rem;font-family:var(--font-mono);color:var(--text-dim);float:right}#map.draw-crosshair{cursor:crosshair}#map.draw-delete{cursor:not-allowed}:root,:host{--ol-background-color:white;--ol-accent-background-color:#f5f5f5;--ol-subtle-background-color:#80808040;--ol-partial-background-color:#ffffffbf;--ol-foreground-color:#333;--ol-subtle-foreground-color:#666;--ol-brand-color:#0af}.ol-box{box-sizing:border-box;border:1.5px solid var(--ol-background-color);background-color:var(--ol-partial-background-color);border-radius:2px}.ol-mouse-position{position:absolute;top:8px;right:8px}.ol-scale-line{background:var(--ol-partial-background-color);border-radius:4px;padding:2px;position:absolute;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid var(--ol-subtle-foreground-color);color:var(--ol-foreground-color);text-align:center;will-change:contents, width;border-top:none;margin:1px;font-size:10px;transition:all .25s}.ol-scale-bar{position:absolute;bottom:8px;left:8px}.ol-scale-bar-inner{display:flex}.ol-scale-step-marker{background-color:var(--ol-foreground-color);float:right;z-index:10;width:1px;height:15px}.ol-scale-step-text{z-index:11;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color);font-size:10px;position:absolute;bottom:-5px}.ol-scale-text{text-align:center;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color);font-size:12px;position:absolute;bottom:25px}.ol-scale-singlebar{z-index:9;box-sizing:border-box;border:1px solid var(--ol-foreground-color);height:10px;position:relative}.ol-scale-singlebar-even{background-color:var(--ol-subtle-foreground-color)}.ol-scale-singlebar-odd{background-color:var(--ol-background-color)}.ol-unsupported{display:none}.ol-viewport,.ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-viewport canvas{all:unset;overflow:hidden}.ol-viewport{touch-action:pan-x pan-y}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;user-select:text}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.ol-control{background-color:var(--ol-subtle-background-color);border-radius:4px;position:absolute}.ol-zoom{top:.5em;left:.5em}.ol-rotate{transition:opacity .25s linear,visibility linear;top:.5em;right:.5em}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{top:.5em;right:.5em}.ol-control button{color:var(--ol-subtle-foreground-color);font-weight:700;font-size:inherit;text-align:center;background-color:var(--ol-background-color);border:none;border-radius:2px;width:1.375em;height:1.375em;margin:1px;padding:0;line-height:.4em;text-decoration:none;display:block}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{will-change:transform;font-weight:400;display:block}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:hover,.ol-control button:focus{outline:1px solid var(--ol-subtle-foreground-color);color:var(--ol-foreground-color);text-decoration:none}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;flex-flow:row-reverse;align-items:center;max-width:calc(100% - 1.3em);display:flex;bottom:.5em;right:.5em}.ol-attribution a{color:var(--ol-subtle-foreground-color);text-decoration:none}.ol-attribution ul{color:var(--ol-foreground-color);text-shadow:0 0 2px var(--ol-background-color);margin:0;padding:1px .5em;font-size:12px}.ol-attribution li{list-style:none;display:inline}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button{flex-shrink:0}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution:not(.ol-collapsed){background:var(--ol-partial-background-color)}.ol-attribution.ol-uncollapsible{border-radius:4px 0 0;bottom:0;right:0}.ol-attribution.ol-uncollapsible img{max-height:1.6em;margin-top:-.2em}.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{height:200px;top:4.5em;left:.5em}.ol-zoomslider button{height:10px;position:relative}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{bottom:.5em;left:.5em}.ol-overviewmap.ol-uncollapsible{border-radius:0 4px 0 0;bottom:0;left:0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:block}.ol-overviewmap .ol-overviewmap-map{border:1px solid var(--ol-subtle-foreground-color);width:150px;height:150px}.ol-overviewmap:not(.ol-collapsed) button{position:absolute;bottom:0;left:0}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:var(--ol-subtle-background-color)}.ol-overviewmap-box{border:1.5px dotted var(--ol-subtle-foreground-color)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}.ol-overviewmap .ol-viewport:hover{cursor:pointer}
