:root{
  --bg:#0b0f17;
  --panel:#121826;
  --muted:#9aa4b2;
  --text:#e5e7eb;
  --brand:#4f8cff;
  --ok:#10b981;
  --warn:#f59e0b;
  --danger:#ef4444;
  --stroke:#223047;
  --shadow:0 6px 24px rgba(0,0,0,.35);
  --radius:14px;
  --radius-sm:10px;
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--text);font:14px/1.4 system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
}

/* Topbar */
.topbar{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 14px;border-bottom:1px solid var(--stroke);background:#0d1422;position:sticky;top:0;z-index:50
}
.brand{font-weight:700;letter-spacing:.2px}
.tabs{display:flex;gap:6px}
.tab{background:transparent;color:var(--text);border:1px solid var(--stroke);padding:8px 12px;border-radius:10px;cursor:pointer}
.tab.active{background:var(--panel);border-color:#314160}
.actions-right{display:flex;gap:10px;align-items:center}

/* Layout */
.container{padding:14px}
.view{display:block}
.hidden{display:none !important}
.wrap{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between}
.row{display:flex;gap:10px;align-items:center}

/* Cards / form */
.card{
  background:var(--panel);border:1px solid var(--stroke);border-radius:var(--radius);
  padding:14px;box-shadow:var(--shadow)
}
.smallgap .actions{margin-top:8px}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:10px}
label{display:block;margin:8px 0}
input,select,textarea{
  width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--stroke);
  background:#0e1726;color:var(--text);outline:none
}
input::file-selector-button{
  border:0;background:#1a2540;color:var(--text);padding:8px 10px;border-radius:8px;margin-right:8px;cursor:pointer
}
button{
  padding:10px 14px;border-radius:10px;border:1px solid #375185;background:#1a2540;color:var(--text);
  cursor:pointer
}
button.ghost{background:transparent;border-color:var(--stroke)}
button.danger{border-color:#5d1a1a;color:#ffb4b4}
button:disabled{opacity:.6;cursor:not-allowed}
.inline{display:inline-flex;gap:8px;align-items:center}

/* Grid */
.grid{width:100%;border-collapse:collapse;background:var(--panel);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}
.grid th,.grid td{padding:10px;border-bottom:1px solid var(--stroke);text-align:left}
.grid thead th{background:#121a2e;font-weight:600}

/* Map */
#map{width:100%;height:calc(100vh - 170px);border-radius:var(--radius);border:1px solid var(--stroke);overflow:hidden}

/* Drawer */
.drawer{
  position:fixed;top:0;right:0;width:min(560px,100%);height:100vh;background:#0c1321;color:var(--text);
  border-left:1px solid var(--stroke);box-shadow:var(--shadow);display:flex;flex-direction:column;z-index:60
}
.drawer-header{display:flex;align-items:center;justify-content:space-between;padding:12px;border-bottom:1px solid var(--stroke)}
.drawer-body{padding:12px;overflow:auto;display:flex;flex-direction:column;gap:14px}
.icon{background:transparent;border:0;color:var(--muted);font-size:18px;cursor:pointer}

/* Modal */
.modal{
  position:fixed;inset:0;background:rgba(0,0,0,.5);display:none;align-items:center;justify-content:center;z-index:70;
  padding:14px
}
.modal.show{display:flex}

/* Misc */
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 10px;margin-bottom:8px}
.kv .k{color:var(--muted)}
.muted{color:var(--muted)}
.small{font-size:12px}
.pre{white-space:pre-wrap;background:#0e1726;border:1px solid var(--stroke);border-radius:10px;padding:10px}

.toast{
  position:fixed;left:50%;transform:translateX(-50%);bottom:18px;background:#111a2e;
  border:1px solid var(--stroke);padding:10px 14px;border-radius:10px;box-shadow:var(--shadow);z-index:80
}
.toast.hidden{display:none}

/* Dropzone */
.drop{
  position:relative;border:2px dashed #2b3a5c;border-radius:12px;background:#0f182a;padding:18px;display:flex;align-items:center;justify-content:center;min-height:92px
}
.drop.drag{border-color:var(--brand);background:#0f1d33}
.drop input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer}
.drop-hint{color:var(--muted)}
.upload-list{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.progress{
  height:8px;border-radius:8px;background:#0e1726;border:1px solid var(--stroke);overflow:hidden
}
.progress > i{display:block;height:100%;width:0;background:linear-gradient(90deg,#3b82f6,#10b981)}
