
*{box-sizing:border-box}
:root{--bg:#0b0f18;--panel:#0f172a;--muted:#94a3b8;--text:#e2e8f0;--accent:#22d3ee;--danger:#ef4444;--primary:#10b981}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.4 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;user-select:none}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:#0a1224;border-bottom:1px solid rgba(255,255,255,.08);position:sticky;top:0;z-index:10}
.brand{font-weight:700;letter-spacing:.2px}
.lang-switch .btn{margin-left:6px}
.layout{display:grid;grid-template-columns:360px 1fr;gap:12px;padding:12px;max-width:1400px;margin:0 auto}
.left .panel{background:var(--panel);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:12px}
.table-wrap{max-height:32svh;overflow:auto;border:1px solid rgba(255,255,255,.06);border-radius:10px}
.tbl{width:100%;border-collapse:collapse}
.tbl th,.tbl td{padding:8px;border-bottom:1px solid rgba(255,255,255,.06)}
.tbl th{position:sticky;top:0;background:#101a33;z-index:1}
.tbl input,.tbl select{width:100%;padding:6px 8px;background:#0b142a;border:1px solid rgba(255,255,255,.12);color:var(--text);border-radius:8px}
.tbl .row-actions{text-align:right}
.note{color:var(--muted);font-size:12px;margin-top:8px;min-height:18px}
.controls-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.controls-col .row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;align-items:center}
.label{color:var(--muted)}
.btn{padding:8px 10px;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:#0c1330;color:#e5e7eb;cursor:pointer}
.btn:hover{border-color:rgba(255,255,255,.25)}
.btn.primary{background:#0c1f18;border-color:#1f9d7a}
.btn.danger{background:#2a0e10;border-color:#b91c1c}
.btn.active{outline:2px solid var(--accent)}
.btn-ghost{background:transparent;border-color:rgba(255,255,255,.16)}
.select{padding:8px 10px;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:#0c1330;color:#e5e7eb}
.right .canvas-wrap{background:#07101f;border:1px solid rgba(255,255,255,.08);border-radius:14px;min-height:56svh;height:72svh;position:relative;overflow:hidden;touch-action:none}
#mapCanvas{display:block;width:100%;height:100%;touch-action:none}
.hint{color:var(--muted);font-size:12px;margin-top:8px}
.invalid input{border-color:#ef4444}
.dragging{cursor:grabbing !important}
@media (max-width:960px){ .layout{grid-template-columns:1fr} }
