/* ── Font ────────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: 'E Ukraine';
  src: url('../fonts/e-ukraine-regular.otf') format('opentype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* ── Reset ───────────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ── Design tokens ───────────────────────────────────────────────────────────── */
:root {
  /* Brand palette */
  --grey:        #888888;
  --brand:       #a9d965;   /* lime green — main accent */
  --brand-dark:  #080808;   /* near-black — text on bright accent buttons */
  --white:       #ffffff;
  --black:       #000000;
  --black-50:    #00000080;
  --white-20:    rgba(255,255,255,0.20);
  --brand-10:    rgba(255,255,255,0.04);   /* subtle input fill on dark bg */
  --white-10:    rgba(255,255,255,0.10);
  --white-80:    rgba(255,255,255,0.85);
  --gray-80:     rgba(148,148,148,0.80);
  --gray-50:     rgba(217,217,217,0.50);
  --overlay:     rgba(0,0,0,0.60);
  --opasity-50:  rgba(255,255,255,0.50);
  --opasity-20:  rgba(255,255,255,0.20);
  --black-5:     rgba(0,0,0,0.05);
  --gray-10:     rgba(200,200,200,0.06);

  /* App semantic tokens — deep-black base, lime accents */
  --bg-0:       #080808;   /* near-black body / page background */
  --bg-1:       #111213;   /* sidebar / modal surface */
  --bg-2:       #1a1c1e;   /* elevated: header, dropdowns, hover */
  --border:     rgba(169, 217, 101, 0.16);  /* very subtle lime border */
  --text:       #dde0d8;   /* off-white primary text */
  --text-muted: #78886a;   /* muted olive-grey */
  --accent:     var(--brand);
  --accent-dim: #7db52e;
  --danger:     #e05a50;
  --warning:    #c8a84b;
  --info:       #6ba3d6;
  --font:       'E Ukraine', 'Segoe UI', Arial, sans-serif;
  --font-mono:  'Courier New', Courier, monospace;
  --sidebar-w:  290px;
  --header-h:   44px;
}

/* ── Base ────────────────────────────────────────────────────────────────────── */
body {
  font-family: var(--font);
  font-size: 13px;
  background: var(--bg-0);
  color: var(--text);
  height: 100vh;
  overflow: hidden;
}

/* ── Utility ─────────────────────────────────────────────────────────────────── */
.hidden { display: none !important; }

/* ── Login overlay ───────────────────────────────────────────────────────────── */
#login-overlay {
  position: fixed;
  inset: 0;
  background: var(--bg-0);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}

.login-modal {
  background: var(--bg-1);
  border: 1px solid var(--border);
  border-top: 3px solid var(--accent);
  padding: 2.4rem 2.2rem;
  width: 380px;
  max-width: 92vw;
  box-shadow: 0 8px 48px rgba(0,0,0,0.7), 0 0 40px rgba(169,217,101,0.06);
}

.login-logo {
  display: flex;
  justify-content: center;
  margin-bottom: 1.2rem;
}
.login-logo img {
  max-height: 120px;
  max-width: 280px;
  object-fit: contain;
  background: transparent;
  padding: 8px 16px;
  border-radius: 4px;
  filter: invert(1);
}

.login-header { text-align: center; margin-bottom: 2rem; }
.login-header h1 {
  font-family: var(--font);
  font-size: 1.45rem;
  letter-spacing: 0.16em;
  color: var(--accent);
  text-shadow: 0 0 24px rgba(169,217,101,0.4);
}
.login-header p {
  color: var(--text-muted);
  font-size: 0.68rem;
  letter-spacing: 0.12em;
  margin-top: 0.35rem;
}

/* ── Forms ───────────────────────────────────────────────────────────────────── */
.form-group { margin-bottom: 1rem; }

.form-group > label,
label.field-label {
  display: block;
  font-size: 0.65rem;
  letter-spacing: 0.12em;
  color: var(--text-muted);
  margin-bottom: 0.35rem;
  text-transform: uppercase;
}

input[type="text"],
input[type="password"],
input[type="date"],
input[type="time"],
input[type="number"] {
  width: 100%;
  background: var(--brand-10);
  border: 1px solid var(--border);
  color: var(--text);
  padding: 0.5rem 0.75rem;
  font-family: var(--font);
  font-size: 0.85rem;
  outline: none;
  transition: border-color 0.18s, box-shadow 0.18s;
  border-radius: 2px;
}
input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 2px rgba(169,217,101,0.18);
}
/* Date inputs: text area is typeable; icon area opens picker */
input[type="date"] { cursor: text; }
input[type="date"]::-webkit-calendar-picker-indicator,
input[type="time"]::-webkit-calendar-picker-indicator {
  /* Recolour native icon to accent lime-green (#a9d965) */
  filter: invert(75%) sepia(25%) saturate(800%) hue-rotate(51deg) brightness(1.05);
  cursor: pointer;
  opacity: 1;
  /* Larger hit area so user can click easily without covering the text field */
  padding: 4px 2px 4px 6px;
}

/* ── Filter tree ─────────────────────────────────────────────────────────────── */
.ft-ctrl-row {
  display: flex;
  gap: 0.35rem;
  margin-bottom: 0.4rem;
}
.ft-ctrl-btn {
  font-family: var(--font);
  font-size: 0.65rem;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  padding: 0.22rem 0.55rem;
  background: transparent;
  border: 1px solid rgba(169,217,101,0.30);
  color: var(--text-muted);
  border-radius: 2px;
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
}
.ft-ctrl-btn:hover {
  color: var(--accent);
  border-color: var(--accent);
}
#filter-tree-container {
  max-height: 260px;
  overflow-y: auto;
  overflow-x: hidden;
  margin-top: 0.1rem;
  scrollbar-width: thin;
  scrollbar-color: var(--border) transparent;
}
.ft-loading {
  color: var(--text-muted);
  font-size: 0.75rem;
  font-style: italic;
}
.ft-node { line-height: 1; }
.ft-l2 { padding-left: 14px; }
.ft-l3 { padding-left: 28px; }
.ft-row {
  display: flex;
  align-items: center;
  gap: 0.3rem;
  padding: 0.18rem 0;
}
.ft-expand {
  flex-shrink: 0;
  width: 14px;
  height: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: none;
  border: none;
  color: var(--text-muted);
  font-size: 0.58rem;
  cursor: pointer;
  padding: 0;
  line-height: 1;
  border-radius: 2px;
  transition: color 0.12s;
}
.ft-expand:hover { color: var(--accent); }
.ft-spacer { cursor: default; pointer-events: none; }
.ft-cb {
  accent-color: var(--accent);
  width: 13px;
  height: 13px;
  flex-shrink: 0;
  cursor: pointer;
}
.ft-label {
  font-size: 0.80rem;
  color: var(--text);
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  letter-spacing: 0;
  transition: color 0.12s;
}
.ft-label:hover { color: var(--accent); }

/* Checkbox group (kept for compatibility) */
#obj-type-group {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  margin-top: 0.3rem;
}
#obj-type-group label {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.82rem;
  color: var(--text);
  cursor: pointer;
  letter-spacing: 0;
}
input[type="checkbox"] {
  accent-color: var(--accent);
  width: 14px;
  height: 14px;
  cursor: pointer;
  flex-shrink: 0;
}

/* ── Buttons ─────────────────────────────────────────────────────────────────── */
.btn-primary,
.btn-secondary {
  display: inline-block;
  padding: 0.52rem 1.1rem;
  font-family: var(--font);
  font-size: 0.76rem;
  letter-spacing: 0.07em;
  cursor: pointer;
  border: 1px solid transparent;
  border-radius: 2px;
  transition: all 0.15s;
  user-select: none;
  text-transform: uppercase;
}
.btn-primary {
  background: var(--accent-dim);
  border-color: var(--accent-dim);
  color: var(--brand-dark);
  font-weight: 600;
  width: 100%;
}
.btn-primary:hover {
  background: var(--accent);
  border-color: var(--accent);
  box-shadow: 0 0 12px rgba(169,217,101,0.35);
}
.btn-secondary {
  background: transparent;
  border-color: rgba(169,217,101,0.35);
  color: var(--text);
}
.btn-secondary:hover {
  border-color: var(--accent);
  color: var(--accent);
  background: rgba(169,217,101,0.06);
}
.btn-primary:disabled,
.btn-secondary:disabled {
  opacity: 0.35;
  cursor: not-allowed;
  pointer-events: none;
}

.btn-row {
  display: flex;
  gap: 0.5rem;
  margin-top: 0.6rem;
}
.btn-row .btn-primary,
.btn-row .btn-secondary { flex: 1; }

/* ── Inline error ────────────────────────────────────────────────────────────── */
.error-msg {
  color: var(--danger);
  font-size: 0.77rem;
  margin-top: 0.7rem;
  padding: 0.4rem 0.65rem;
  background: rgba(224,90,80,0.08);
  border-left: 2px solid var(--danger);
}

/* ── App layout ──────────────────────────────────────────────────────────────── */
#app {
  display: flex;
  flex-direction: column;
  width: 100vw;
  height: 100vh;
}

/* ── App header ──────────────────────────────────────────────────────────────── */
#app-header {
  height: var(--header-h);
  flex-shrink: 0;
  background: var(--bg-2);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  padding: 0 1rem;
  gap: 0.75rem;
  position: relative;
  z-index: 600;
}

.app-header-brand {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-shrink: 0;
}

.app-header-logo {
  height: 28px;
  width: auto;
  filter: invert(1);
}

.app-header-title {
  font-size: 1rem;
  letter-spacing: 0.18em;
  color: var(--accent);
  font-weight: 600;
  white-space: nowrap;
}

/* ── Product nav ─────────────────────────────────────────────────────────────── */
.product-nav {
  display: flex;
  align-items: center;
  gap: 2px;
  margin-left: 1.5rem;
  background: var(--bg-0);
  border: 1px solid var(--border);
  border-radius: 3px;
  padding: 2px;
}

a.product-nav-btn { text-decoration: none; }

.product-nav-btn {
  background: none;
  border: none;
  color: var(--text-muted);
  font-family: var(--font);
  font-size: 0.65rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.3rem 0.75rem;
  cursor: pointer;
  border-radius: 2px;
  transition: all 0.15s;
  white-space: nowrap;
}

.product-nav-btn:hover {
  color: var(--text);
  background: var(--bg-2);
}

.product-nav-btn.active {
  background: var(--accent);
  color: #000;
  font-weight: 600;
}

/* ── Product views ───────────────────────────────────────────────────────────── */
.product-view {
  flex: 1;
  display: flex;
  min-height: 0;
  overflow: hidden;
}

.product-placeholder {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  color: var(--text-muted);
}

.product-placeholder-title {
  font-size: 1.5rem;
  letter-spacing: 0.15em;
  color: var(--text);
  font-weight: 600;
}

.product-placeholder-sub {
  font-size: 0.75rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.app-header-email {
  color: var(--text-muted);
  font-size: 0.72rem;
  letter-spacing: 0.04em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-left: auto;
}

/* ── App body (sidebar + map area) ──────────────────────────────────────────── */
#app-body {
  flex: 1;
  display: flex;
  min-height: 0;
  overflow: hidden;
  position: relative;
}

/* ── Sidebar ─────────────────────────────────────────────────────────────────── */
#sidebar {
  width: var(--sidebar-w);
  flex-shrink: 0;
  background: var(--bg-1);
  border-right: 1px solid var(--border);
  display: flex;
  transition: width 0.22s ease;
  flex-direction: column;
  overflow-y: auto;
  z-index: 400;
}
#sidebar::-webkit-scrollbar { width: 4px; }
#sidebar::-webkit-scrollbar-track { background: var(--bg-0); }
#sidebar::-webkit-scrollbar-thumb { background: rgba(169,217,101,0.3); border-radius: 2px; }


#btn-logout {
  background: none;
  border: 1px solid var(--border);
  color: var(--text-muted);
  font-family: var(--font);
  font-size: 0.62rem;
  letter-spacing: 0.07em;
  padding: 0.28rem 0.55rem;
  cursor: pointer;
  border-radius: 2px;
  transition: all 0.15s;
  white-space: nowrap;
  flex-shrink: 0;
  text-transform: uppercase;
}
#btn-logout:hover { border-color: var(--danger); color: var(--danger); }

/* ── Panel ───────────────────────────────────────────────────────────────────── */
.panel { padding: 0.9rem 1rem; border-bottom: 1px solid var(--border); }
.panel h3 {
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  color: var(--accent);
  margin-bottom: 0.85rem;
  padding-bottom: 0.4rem;
  border-bottom: 1px solid var(--border);
  text-transform: uppercase;
}

/* ── Stats ───────────────────────────────────────────────────────────────────── */
.stat-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 0.22rem 0;
  font-size: 0.8rem;
}
.stat-row :first-child { color: var(--text-muted); }
.stat-row :last-child  { color: var(--accent); font-weight: bold; font-family: var(--font-mono); }

/* ── Legend ──────────────────────────────────────────────────────────────────── */
.legend-item {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.22rem 0;
  font-size: 0.8rem;
}
.legend-swatch {
  width: 14px;
  height: 14px;
  border-radius: 2px;
  flex-shrink: 0;
  border: 1px solid rgba(255,255,255,0.10);
}

/* ── Map ─────────────────────────────────────────────────────────────────────── */
#map { flex: 1; height: 100%; }

/* ── Loading overlay ─────────────────────────────────────────────────────────── */
#loading {
  position: fixed;
  left: calc(var(--sidebar-w) + 1rem);
  top: calc(var(--header-h) + 1rem);
  background: var(--bg-1);
  border: 1px solid var(--accent);
  padding: 0.6rem 1rem;
  display: flex;
  align-items: center;
  gap: 0.65rem;
  z-index: 1000;
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  color: var(--accent);
  box-shadow: 0 0 20px rgba(169,217,101,0.15);
}
.spinner {
  width: 16px;
  height: 16px;
  border: 2px solid var(--border);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: spin 0.65s linear infinite;
  flex-shrink: 0;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ── Notification toast ──────────────────────────────────────────────────────── */
.notification {
  position: fixed;
  bottom: 1.5rem;
  left: calc(var(--sidebar-w) + 1rem);
  padding: 0.6rem 1rem;
  font-size: 0.78rem;
  z-index: 1100;
  border: 1px solid var(--border);
  background: var(--bg-1);
  color: var(--text);
  max-width: 320px;
}
.notification.error { border-color: var(--danger); color: var(--danger); }
.notification.info  { border-color: var(--info);   color: var(--info);   }

/* ── Military symbol markers ─────────────────────────────────────────────────── */
.mil-icon-wrapper {
  background: none !important;
  border: none !important;
}
.mil-icon-wrapper {
  overflow: visible !important;
}
.mil-marker {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  transition: opacity 0.15s;
}
.mil-marker:hover { opacity: 0.82; }
.mil-marker svg {
  width: 100% !important;
  height: 100% !important;
  display: block;
  overflow: hidden;
}
.mil-marker svg text {
  font-weight: 700 !important;
}
/* Quantity overlay — floats above the icon, does not affect SVG dimensions */
.mil-qty {
  position: absolute;
  top: -1.2em;
  left: 50%;
  transform: translateX(-50%);
  font-size:   var(--label-size,   11px);
  font-weight: var(--label-weight, 700);
  color:       var(--label-color,  #fff);
  line-height: 1;
  white-space: nowrap;
  pointer-events: none;
  text-shadow: none;
}
/* Label style controls */
.label-style-row {
  display: flex;
  align-items: center;
  gap: .8rem;
  margin-top: .45rem;
}
.label-bold-toggle,
.label-color-wrap {
  display: flex;
  align-items: center;
  gap: .35rem;
  font-size: .78rem;
  color: var(--text);
  cursor: pointer;
}
.label-color-wrap input[type="color"] {
  width: 28px;
  height: 22px;
  border: 1px solid var(--border);
  border-radius: 4px;
  background: none;
  padding: 1px;
  cursor: pointer;
}


/* ── Leaflet popup (dark theme) ──────────────────────────────────────────────── */
.leaflet-popup-content-wrapper {
  background: var(--bg-1) !important;
  border: 1px solid var(--border) !important;
  border-radius: 2px !important;
  color: var(--text) !important;
  box-shadow: 0 4px 24px rgba(0,0,0,0.6) !important;
}
.leaflet-popup-tip { background: var(--bg-1) !important; }
.leaflet-popup-close-button { color: var(--text-muted) !important; }

.popup-content { font-family: var(--font); font-size: 0.8rem; min-width: 180px; }
.popup-title {
  font-size: 0.85rem;
  color: var(--accent);
  margin-bottom: 0.5rem;
  border-bottom: 1px solid var(--border);
  padding-bottom: 0.4rem;
}
.popup-title code { font-family: var(--font-mono); }
.popup-table { width: 100%; border-collapse: collapse; }
.popup-table td { padding: 0.18rem 0.4rem; color: var(--text); }
.popup-table td:first-child { color: var(--text-muted); }
.popup-table td:last-child  { text-align: right; }

/* ── Leaflet controls ────────────────────────────────────────────────────────── */
.leaflet-control-zoom a {
  background: var(--bg-1) !important;
  color: var(--accent) !important;
  border-color: var(--border) !important;
}
.leaflet-control-zoom a:hover { background: var(--bg-2) !important; }
.leaflet-control-attribution {
  background: rgba(0,0,0,0.85) !important;
  color: var(--text-muted) !important;
  font-size: 10px !important;
  line-height: 20px !important;
  padding: 0 6px !important;
  border-radius: 0 !important;
  height: 20px !important;
  border-top: 1px solid var(--border) !important;
  margin: 0 !important;
}
.leaflet-control-attribution a { color: var(--accent) !important; }
.leaflet-bottom { bottom: 20px !important; }

/* ── Range sliders ───────────────────────────────────────────────────────────── */
input[type="range"] {
  width: 100%;
  accent-color: var(--accent);
  cursor: pointer;
  background: transparent;
  outline: none;
  margin-top: 0.3rem;
  height: 18px;
}
.range-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}
.range-val {
  color: var(--accent);
  font-weight: bold;
  font-size: 0.78rem;
  min-width: 28px;
  text-align: right;
  font-family: var(--font-mono);
}

/* ── Map scale bar ───────────────────────────────────────────────────────────── */
.leaflet-control-scale-line {
  background: rgba(8,8,8,0.80) !important;
  border-color: var(--text) !important;
  color: var(--text) !important;
  font-family: var(--font-mono) !important;
  font-size: 10px !important;
  text-shadow: none;
}

/* ── Layer radio group ───────────────────────────────────────────────────────── */
.layer-radio-group {
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
}
.layer-radio-group label {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.82rem;
  color: var(--text);
  cursor: pointer;
  letter-spacing: 0;
}
input[type="radio"] {
  accent-color: var(--accent);
  width: 14px;
  height: 14px;
  cursor: pointer;
  flex-shrink: 0;
}

/* ── Grid mode controls ──────────────────────────────────────────────────────── */
.grid-mode-row {
  display: flex;
  gap: 1rem;
  margin-bottom: 0.35rem;
}
.grid-mode-row label {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.82rem;
  color: var(--text);
  cursor: pointer;
}
.grid-manual-inputs {
  display: flex;
  align-items: stretch;
  gap: 0.5rem;
  margin-top: 0.35rem;
}
#grid-size-val {
  flex: 1;
  padding: 0.4rem 0.6rem;
}
.unit-label {
  color: var(--text-muted);
  font-size: 0.85rem;
  flex-shrink: 0;
  display: flex;
  align-items: center;
}
/* Stacked +/− button group on the right of the input */
.grid-step-btns {
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  border: 1px solid var(--border);
  border-radius: 2px;
  overflow: hidden;
}
.grid-step-btn {
  flex: 1;
  width: 20px;
  padding: 0;
  background: var(--bg-2);
  border: none;
  border-bottom: 1px solid var(--border);
  color: var(--text-muted);
  font-size: 0.72rem;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s, color 0.15s;
  user-select: none;
}
.grid-step-btn:last-child { border-bottom: none; }
.grid-step-btn:hover { background: var(--bg-1); color: var(--accent); }
.grid-step-btn:active { background: rgba(169,217,101,0.12); }

/* hide spinner arrows on number inputs */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { opacity: 0.4; }

/* ── Info tooltip icon ───────────────────────────────────────────────────────── */
.info-tip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 13px;
  height: 13px;
  border-radius: 50%;
  border: 1px solid var(--text-muted);
  font-size: 8px;
  font-weight: 700;
  font-style: normal;
  line-height: 1;
  cursor: help;
  opacity: 0.65;
  vertical-align: middle;
  margin-left: 3px;
  color: var(--text-muted);
  text-transform: none;
  letter-spacing: 0;
  user-select: none;
  transition: all 0.15s;
}
.info-tip:hover { opacity: 1; border-color: var(--accent); color: var(--accent); }

/* ── Undo drag button ────────────────────────────────────────────────────────── */
.btn-undo {
  width: 100%;
  margin-top: 0.5rem;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
}
.kbd {
  font-family: var(--font-mono);
  font-size: 0.62rem;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 2px;
  padding: 0 4px;
  color: var(--text-muted);
  line-height: 1.6;
}

/* ── Top-right controls wrapper (centre btn + coord search) ─────────────────── */
#top-right-controls {
  position: fixed;
  top: calc(var(--header-h) + 1rem);
  right: 1rem;
  z-index: 900;
  display: flex;
  align-items: stretch;
  gap: 0.55rem;
  user-select: none;
}

/* Drag handle for repositionable panels */
.drag-handle {
  display: flex;
  align-items: center;
  padding: 0 0.4rem;
  color: var(--text-muted);
  font-size: 1rem;
  cursor: grab;
  background: var(--bg-1);
  border: 1px solid var(--border);
  border-radius: 4px;
  transition: color 0.15s;
  flex-shrink: 0;
}
.drag-handle:hover  { color: var(--accent); }
.drag-handle:active { cursor: grabbing; }

/* Centre-map button (standalone, left of search box) */
#btn-fit {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  background: var(--bg-1);
  border: 1px solid var(--border);
  color: var(--text-muted);
  font-family: var(--font);
  font-size: 0.72rem;
  letter-spacing: 0.07em;
  padding: 0 0.75rem;
  cursor: pointer;
  white-space: nowrap;
  text-transform: uppercase;
  box-shadow: 0 2px 16px rgba(0,0,0,0.5);
  transition: background 0.15s, color 0.15s, border-color 0.15s;
}
#btn-fit:hover { background: var(--bg-2); color: var(--accent); border-color: rgba(169,217,101,0.45); }

/* ── Coordinate search box ───────────────────────────────────────────────────── */
#coord-search {
  display: flex;
  align-items: stretch;
  background: var(--bg-1);
  border: 1px solid var(--border);
  box-shadow: 0 2px 16px rgba(0,0,0,0.5);
}
#coord-input {
  width: 230px;
  background: transparent;
  border: none;
  border-right: 1px solid var(--border);
  padding: 0.42rem 0.7rem;
  font-size: 0.78rem;
  font-family: var(--font-mono);
  color: var(--text);
  outline: none;
}
#coord-input::placeholder {
  font-family: var(--font);
  font-size: 0.72rem;
  color: var(--text-muted);
}
#coord-go {
  background: transparent;
  border: none;
  color: var(--accent);
  padding: 0 0.8rem;
  cursor: pointer;
  font-size: 1.1rem;
  line-height: 1;
  transition: background 0.15s;
}
#coord-go:hover { background: var(--bg-2); }

/* ── Coordinate format selector ─────────────────────────────────────────────── */
#coord-format {
  background: var(--bg-2);
  border: none;
  border-right: 1px solid var(--border);
  color: var(--text-muted);
  font-family: var(--font);
  font-size: 0.7rem;
  letter-spacing: 0.06em;
  padding: 0 0.55rem;
  cursor: pointer;
  outline: none;
  flex-shrink: 0;
}
#coord-format option { background: var(--bg-1); color: var(--text); }
#coord-format:hover  { color: var(--accent); }

/* ── Click-to-copy coordinate popup ─────────────────────────────────────────── */
.coord-click-row {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-top: 0.4rem;
}
.coord-click-val {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  color: var(--accent);
  flex: 1;
  word-break: break-all;
}
.btn-copy {
  background: none;
  border: 1px solid var(--border);
  color: var(--text-muted);
  cursor: pointer;
  padding: 1px 6px;
  border-radius: 2px;
  font-size: 0.88rem;
  line-height: 1.5;
  transition: all 0.15s;
  flex-shrink: 0;
}
.btn-copy:hover { border-color: var(--accent); color: var(--accent); }

/* ── Export to Delta ─────────────────────────────────────────────────────────── */
.export-wrap {
  position: relative;
}
.export-btn-row {
  display: flex;
  align-items: center;
  gap: 0.4rem;
}
.export-trigger {
  flex: 1;
  text-align: left;
}
.export-menu {
  position: absolute;
  bottom: calc(100% + 2px);
  left: 0;
  right: 1.6rem;
  background: var(--bg-2);
  border: 1px solid var(--border);
  z-index: 600;
  box-shadow: 0 4px 16px rgba(0,0,0,0.5);
}
.export-menu button {
  display: block;
  width: 100%;
  background: none;
  border: none;
  border-bottom: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font);
  font-size: 0.76rem;
  letter-spacing: 0.07em;
  padding: 0.45rem 0.8rem;
  text-align: left;
  cursor: pointer;
  text-transform: uppercase;
}
.export-menu button:last-child { border-bottom: none; }
.export-menu button:hover { background: var(--bg-1); color: var(--accent); }

/* Delta docs link — styled like .info-tip but navigable */
a.info-tip {
  text-decoration: none;
  pointer-events: all;
}
a.info-tip:hover { opacity: 1; border-color: var(--accent); color: var(--accent); }

/* ── Shift+Click move-mode ───────────────────────────────────────────────────── */
.move-mode,
.move-mode .leaflet-grab,
.move-mode .leaflet-marker-icon { cursor: crosshair !important; }

#move-mode-hint {
  position: absolute;
  bottom: 44px;
  left: 50%;
  transform: translateX(-50%);
  background: rgba(20, 24, 32, 0.93);
  color: #7ab8ff;
  border: 1px solid #3a5080;
  border-radius: 6px;
  padding: 5px 14px;
  font-size: 12px;
  z-index: 900;
  pointer-events: none;
  white-space: nowrap;
  letter-spacing: .02em;
}

.marker-move-selected {
  filter: drop-shadow(0 0 5px #00aaff) drop-shadow(0 0 12px #0066cc) !important;
  z-index: 1100 !important;
}

/* Move-mode Leaflet control button */
.leaflet-move-mode-btn {
  font-size: 16px !important;
  line-height: 26px !important;
  color: var(--text) !important;
}
.leaflet-move-mode-btn.active {
  background: var(--brand) !important;
  color: var(--brand-dark) !important;
}

/* ── Click cross marker ──────────────────────────────────────────────────────── */
.click-cross-icon {
  background: none !important;
  border: none !important;
  pointer-events: none !important;
}
.click-cross-icon svg {
  width: 28px;
  height: 28px;
  display: block;
  filter: drop-shadow(0 0 3px rgba(0,0,0,0.85));
  overflow: visible;
}

/* ── Map watermark ───────────────────────────────────────────────────────────── */
.map-watermark {
  pointer-events: none;
  user-select: none;
  line-height: 0;
  background: transparent !important;
}
.map-watermark img {
  height: 80px;        /* adjust to taste */
  width: auto;
  opacity: 0.4;
  display: block;
  background: transparent;
  padding: 20px 0px;
 /*  border-radius: 3px;
  box-shadow: 0 1px 6px rgba(0,0,0,0.3); */
}

/* ── Preset between block ─────────────────────────────────────────────────────── */
.preset-between-block { margin-top: .45rem; display: flex; flex-direction: column; gap: .35rem; }

.preset-between-row {
  display: flex;
  align-items: center;
  gap: .3rem;
  flex-wrap: wrap;
}
.preset-between-label {
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .05em;
  color: var(--text-muted);
  min-width: 1.8rem;
}
.preset-between-base { flex: 1 1 70px; min-width: 0; font-size: .72rem; padding: .28rem .3rem; }
.preset-offset-wrap  { display: flex; align-items: center; gap: .2rem; }
.preset-offset-input {
  width: 2.8rem;
  padding: .28rem .3rem;
  font-size: .78rem;
  background: var(--input-bg);
  border: 1px solid var(--border);
  border-radius: 4px;
  color: var(--text);
  text-align: center;
}
.preset-offset-label { font-size: .7rem; color: var(--text-muted); }
.preset-fixed-date   { flex: 1 1 90px; font-size: .72rem; padding: .28rem .3rem; min-width: 0; }
.preset-between-time {
  flex-basis: 100%;
  display: flex;
  align-items: stretch;
  margin-left: calc(1.8rem + .3rem);   /* indent past the ВІД/ДО label */
}
.preset-between-time .dt-time { flex: 1; font-size: .72rem; padding: .28rem .2rem; border-radius: 2px 0 0 2px; border-right: none; }
.preset-between-time .dt-spin-arrows { border-radius: 0 2px 2px 0; }

/* ── Date / time rows ────────────────────────────────────────────────────────── */
.date-range-row {
  display: flex;
  gap: 0.5rem;
}
.date-field {
  flex: 1;
  min-width: 0;
}
.date-field .field-label { margin-bottom: 0.25rem; }
.date-field input[type="date"] {
  padding: 0.38rem 0.4rem;
  font-size: 0.75rem;
}

/* ── Date / time section rows ────────────────────────────────────────────────── */
.dt-section {
  margin-bottom: 0.35rem;
}
.dt-section .field-label {
  margin-bottom: 0.2rem;
}
.dt-row {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}

/* Date spin */
.date-spin {
  display: flex;
  align-items: stretch;
}
.date-spin .dt-date {
  flex: 1;
  min-width: 0;
  border-radius: 2px 0 0 2px;
  border-right: none;
}

/* Time spin */
.time-spin {
  display: flex;
  align-items: stretch;
}
.time-spin .dt-time {
  flex: 1;
  min-width: 0;
  border-radius: 2px 0 0 2px;
  border-right: none;
}

/* Shared input sizes */
.dt-date,
.dt-time {
  padding: 0.35rem 0.3rem;
  font-size: 0.75rem;
  box-sizing: border-box;
}

/* Shared spin-arrow column (used by both date and time) */
.dt-spin-arrows {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--border, #343c4e);
  border-radius: 0 2px 2px 0;
  overflow: hidden;
  flex-shrink: 0;
}
.date-arr,
.time-arr {
  flex: 1;
  width: 18px;
  padding: 0;
  border: none;
  background: var(--bg-2, #1e2330);
  color: var(--text-muted, #7a8499);
  font-size: 7px;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.1s, color 0.1s;
}
.date-arr:first-child,
.time-arr:first-child {
  border-bottom: 1px solid var(--border, #343c4e);
}
.date-arr:hover,
.time-arr:hover {
  background: var(--accent-dim, #7db52e);
  color: var(--brand-dark, #080808);
}

.date-range-error {
  font-size: 0.68rem;
  color: var(--danger);
  margin-top: 0.3rem;
  padding: 0.2rem 0.5rem;
  background: rgba(224,90,80,0.10);
  border-left: 2px solid var(--danger);
}
input.input-error {
  border-color: var(--danger) !important;
  box-shadow: 0 0 0 2px rgba(224,90,80,0.18);
}

/* ── Sidebar collapse ────────────────────────────────────────────────────────── */
#app.sidebar-collapsed #sidebar {
  width: 0;
  min-width: 0;
  overflow: hidden;
  border-right: none;
}

/* ── Sidebar toggle button ───────────────────────────────────────────────────── */
#btn-sidebar-toggle {
  position: fixed;
  left: var(--sidebar-w);
  top: calc(50vh + var(--header-h) / 2);
  transform: translateY(-50%);
  z-index: 450;
  width: 16px;
  height: 48px;
  padding: 0;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-left: none;
  color: var(--accent);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 9px;
  border-radius: 0 3px 3px 0;
  transition: left 0.22s ease;
}
#btn-sidebar-toggle:hover { background: var(--bg-1); }
#app.sidebar-collapsed #btn-sidebar-toggle {
  left: 0;
  border-left: 1px solid var(--border);
  border-right: none;
  border-radius: 3px 0 0 3px;
}

/* ── Map status bar ──────────────────────────────────────────────────────────── */
#map-status {
  position: fixed;
  bottom: 0;
  left: var(--sidebar-w);
  right: 0;
  height: 20px;
  background: rgba(0,0,0,0.85);
  border-top: 1px solid var(--border);
  display: flex;
  align-items: stretch;
  justify-content: flex-start;
  z-index: 500;
  font-family: var(--font-mono);
  font-size: 0.73rem;
  color: var(--text);
  transition: left 0.22s ease;
  backdrop-filter: blur(4px);
  overflow: visible;
}
#status-format {
  background: transparent;
  border: none;
  border-right: 1px solid var(--border);
  color: var(--text-muted);
  font-family: var(--font);
  font-size: 0.68rem;
  letter-spacing: 0.06em;
  padding: 0 0.6rem;
  cursor: pointer;
  outline: none;
  flex-shrink: 0;
}
#status-format option { background: var(--bg-1); color: var(--text); }
#status-format:hover  { color: var(--accent); }
#status-coords {
  display: flex;
  align-items: center;
  padding: 0 0.75rem;
  color: var(--accent);
  font-weight: 600;
  letter-spacing: 0.03em;
  border-right: 1px solid var(--border);
  white-space: nowrap;
}
#status-zoom,
#status-grid-bar,
#status-objects {
  display: flex;
  align-items: center;
  padding: 0 0.65rem;
  color: var(--text);
  font-weight: 600;
  flex-shrink: 0;
  letter-spacing: 0.05em;
  border-right: 1px solid var(--border);
  white-space: nowrap;
}
#app.sidebar-collapsed #map-status { left: 0; }

/* ── Overlay toolbar (inside status bar, right-aligned) ─────────────────────── */
#ovl-toolbar {
  display: flex;
  align-items: stretch;
  margin-left: auto;
  border-left: 1px solid var(--border);
  overflow: visible;
}

.ovl-tb-item {
  position: relative;
  display: flex;
  align-items: stretch;
  border-right: 1px solid var(--border);
}

.ovl-tb-label {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0 0.45rem;
  cursor: pointer;
  font-family: var(--font);
  font-size: 0.68rem;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--text-muted);
  white-space: nowrap;
  transition: color 0.15s;
}
.ovl-tb-label input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  width: 11px;
  height: 11px;
  border: 1px solid var(--text-muted);
  border-radius: 2px;
  background: transparent;
  flex-shrink: 0;
  cursor: pointer;
  position: relative;
  transition: border-color 0.15s, background 0.15s;
}
.ovl-tb-label input[type="checkbox"]:checked {
  background: var(--accent);
  border-color: var(--accent);
}
.ovl-tb-label input[type="checkbox"]:checked::after {
  content: '';
  position: absolute;
  left: 2px;
  top: 0px;
  width: 4px;
  height: 7px;
  border: 1.5px solid #000;
  border-top: none;
  border-left: none;
  transform: rotate(45deg);
}
.ovl-tb-label:hover { color: var(--text); }
.ovl-tb-item:has(input[type="checkbox"]:checked) .ovl-tb-label { color: var(--accent); }

.ovl-tb-arrow {
  background: transparent;
  border: none;
  border-left: 1px solid var(--border);
  color: var(--text-muted);
  padding: 0 0.28rem;
  cursor: pointer;
  font-size: 0.65rem;
  line-height: 1;
  transition: color 0.15s;
}
.ovl-tb-arrow:hover { color: var(--accent); }

/* Settings dropdown — floats above the status bar */
.ovl-tb-panel {
  position: absolute;
  bottom: calc(100% + 4px);
  right: 0;
  min-width: 340px;
  background: var(--bg-1);
  border: 1px solid var(--border);
  border-radius: 4px;
  padding: 0.55rem 0.6rem;
  z-index: 1100;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.55);
}
.ovl-tb-panel .ovs-row { margin-top: 0.3rem; gap: 0.4rem 0.55rem; flex-wrap: wrap; }
.ovl-tb-panel .ovs-group-title { margin-top: 0.35rem; }
.ovs-offset-row {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  margin-top: 0.3rem;
  flex-wrap: nowrap;
}

/* ── Status bar export (right-aligned) ──────────────────────────────────────── */
.status-export {
  position: relative;
  display: flex;
  align-items: stretch;
  margin-left: auto;
  border-left: 1px solid var(--border);
}
.status-export .export-trigger {
  background: transparent;
  border: none;
  color: var(--text-muted);
  font-family: var(--font);
  font-size: 0.68rem;
  letter-spacing: 0.07em;
  padding: 0 0.8rem;
  cursor: pointer;
  text-transform: uppercase;
  transition: color 0.15s;
  white-space: nowrap;
}
.status-export .export-trigger:hover { color: var(--accent); }
.status-export .export-menu {
  position: absolute;
  bottom: calc(100% + 1px);
  right: 0;
  min-width: 100%;
  background: var(--bg-2);
  border: 1px solid var(--border);
  z-index: 600;
  box-shadow: 0 4px 16px rgba(0,0,0,0.5);
}

/* ── Presets panel ───────────────────────────────────────────────────────────── */
.preset-group-row {
  display: flex;
  align-items: center;
  gap: 0.28rem;
  margin-bottom: 0.6rem;
}
.preset-select {
  flex: 1;
  min-width: 0;
  background: var(--brand-10);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font);
  font-size: 0.78rem;
  padding: 0.28rem 0.45rem;
  outline: none;
  border-radius: 2px;
  cursor: pointer;
}
.preset-select option { background: var(--bg-1); color: var(--text); }
.preset-select:focus  { border-color: var(--accent); }

.preset-icon-btn {
  flex-shrink: 0;
  background: transparent;
  border: 1px solid var(--border);
  color: var(--text-muted);
  font-size: 0.8rem;
  line-height: 1;
  padding: 0.26rem 0.4rem;
  cursor: pointer;
  border-radius: 2px;
  transition: all 0.15s;
}
.preset-icon-btn:hover            { border-color: var(--accent); color: var(--accent); }
.preset-icon-btn--apply           { color: var(--accent); }
.preset-icon-btn--apply:hover     { background: rgba(169,217,101,0.08); }
.preset-icon-btn--danger:hover    { border-color: var(--danger); color: var(--danger); }

.preset-list {
  display: flex;
  flex-direction: column;
  gap: 0.22rem;
  margin-bottom: 0.4rem;
  max-height: 210px;
  overflow-y: auto;
}
.preset-list::-webkit-scrollbar       { width: 3px; }
.preset-list::-webkit-scrollbar-thumb { background: rgba(169,217,101,0.30); border-radius: 2px; }

.preset-empty {
  font-size: 0.74rem;
  color: var(--text-muted);
  text-align: center;
  padding: 0.55rem 0;
  font-style: italic;
}

.preset-item {
  display: flex;
  align-items: center;
  gap: 0.18rem;
  padding: 0.22rem 0.38rem;
  background: var(--brand-10);
  border: 1px solid var(--border);
  border-radius: 2px;
  transition: border-color 0.15s;
}
.preset-item--active {
  border-color: rgba(169,217,101,0.45);
  background: rgba(169,217,101,0.06);
}
.preset-name {
  flex: 1;
  min-width: 0;
  font-size: 0.78rem;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: default;
  user-select: none;
}
.preset-item--active .preset-name { color: var(--accent); }
.preset-rename-input {
  flex: 1;
  min-width: 0;
  background: var(--bg-2);
  border: 1px solid var(--accent);
  color: var(--text);
  font-family: var(--font);
  font-size: 0.78rem;
  padding: 0 0.3rem;
  height: 22px;
  outline: none;
  border-radius: 2px;
}

.preset-save-form {
  background: var(--brand-10);
  border: 1px solid var(--border);
  border-radius: 2px;
  padding: 0.55rem 0.6rem;
  margin-top: 0.3rem;
}
.preset-save-form input[type="text"] {
  margin-bottom: 0;
}
.preset-edit-title {
  font-size: 0.62rem;
  letter-spacing: 0.12em;
  color: var(--text-muted);
  margin-bottom: 0.4rem;
  text-transform: uppercase;
}

/* ── Collapsible panel ───────────────────────────────────────────────────────── */
.panel--collapsible > h3 {
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  user-select: none;
}
.panel--collapsible > h3::after {
  content: '\25BE';
  font-size: 0.75rem;
  color: var(--text-muted);
  transition: transform 0.18s ease;
  flex-shrink: 0;
  margin-left: 0.3rem;
}
.panel--collapsed > h3::after {
  transform: rotate(-90deg);
}
.panel--collapsed .panel-body {
  display: none;
}

/* ── Layer switcher custom Leaflet control ───────────────────────────────────── */
.layer-switcher-control {
  position: relative;
}
.layer-switcher-btn {
  width: 30px;
  height: 30px;
  background: var(--bg-1) !important;
  border: none;
  border-color: var(--border) !important;
  color: var(--accent);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: background 0.15s;
  border-radius: 2px;
}
.layer-switcher-btn:hover { background: var(--bg-2) !important; }
.layer-switcher-popup {
  position: absolute;
  top: 0;
  left: calc(100% + 6px);
  background: var(--bg-1);
  border: 1px solid var(--border);
  padding: 0.55rem 0.75rem;
  min-width: 150px;
  z-index: 1000;
  box-shadow: 0 4px 16px rgba(0,0,0,0.5);
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
}
.layer-switcher-popup label {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.82rem;
  color: var(--text);
  cursor: pointer;
  font-family: var(--font);
  white-space: nowrap;
}

/* ── Mapper / Exclusion full-screen modal editor ─────────────────────────────── */
.mapper-modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.7);
  z-index: 9000;
  display: flex;
  align-items: center;
  justify-content: center;
}
.mapper-modal {
  background: var(--bg-1);
  border: 1px solid var(--border);
  border-top: 3px solid var(--accent);
  width: 92vw;
  height: 88vh;
  max-width: 900px;
  display: flex;
  flex-direction: column;
  box-shadow: 0 8px 48px rgba(0,0,0,0.7);
  overflow: hidden;
}
.mapper-modal-header {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.7rem 1rem;
  background: var(--bg-2);
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.mapper-modal-title-input {
  flex: 1;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--border);
  color: var(--accent);
  font-family: var(--font);
  font-size: 0.9rem;
  letter-spacing: 0.1em;
  padding: 0.2rem 0.3rem;
  outline: none;
}
.mapper-modal-title-input:focus { border-bottom-color: var(--accent); }
.mapper-modal-close {
  background: none;
  border: 1px solid var(--border);
  color: var(--text-muted);
  font-size: 1rem;
  width: 26px;
  height: 26px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 2px;
  transition: all 0.15s;
  flex-shrink: 0;
}
.mapper-modal-close:hover { border-color: var(--danger); color: var(--danger); }
.mapper-modal-body {
  flex: 1;
  overflow-y: auto;
  padding: 0.6rem 1rem;
}
.mapper-modal-body::-webkit-scrollbar { width: 4px; }
.mapper-modal-body::-webkit-scrollbar-thumb { background: rgba(169,217,101,0.3); border-radius: 2px; }
.mapper-table {
  width: 100%;
  border-collapse: collapse;
}
.mapper-table th {
  font-size: 0.62rem;
  letter-spacing: 0.12em;
  color: var(--text-muted);
  text-transform: uppercase;
  padding: 0.3rem 0.4rem;
  text-align: left;
  border-bottom: 1px solid var(--border);
}
.mapper-table td {
  padding: 0.3rem 0.4rem;
  vertical-align: middle;
  border-bottom: 1px solid rgba(169,217,101,0.06);
}
/* Icon cell — sized to show a 36px milsymbol comfortably */
.mapper-sidc-icon {
  width: 48px;
  min-width: 48px;
  padding: 2px 4px !important;
  text-align: center;
  vertical-align: middle;
}
.mapper-sidc-icon svg { display: block; margin: 0 auto; }
/* Arrow cell between from/to columns */
.mapper-arrow-cell {
  text-align: center;
  padding: 0 0.25rem !important;
  color: var(--text-muted);
  white-space: nowrap;
  width: 1.4rem;
}
.mapper-sidc-input {
  background: var(--brand-10);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 0.8rem;
  padding: 0.38rem 0.5rem;
  outline: none;
  border-radius: 2px;
  width: 100%;
  min-width: 110px;
}
.mapper-sidc-input:focus { border-color: var(--accent); }
.mapper-row-del {
  background: none;
  border: 1px solid var(--border);
  color: var(--text-muted);
  cursor: pointer;
  padding: 0.2rem 0.45rem;
  border-radius: 2px;
  font-size: 0.82rem;
  transition: all 0.15s;
}
.mapper-row-del:hover { border-color: var(--danger); color: var(--danger); }
/* Ghost "add row" at the bottom of the table body */
.mapper-ghost-row { cursor: pointer; }
.mapper-ghost-cell {
  text-align: center;
  padding: 0.5rem !important;
  color: var(--text-muted);
  font-size: 0.74rem;
  letter-spacing: 0.08em;
  border-top: 1px dashed rgba(169,217,101,0.18) !important;
  border-bottom: none !important;
  opacity: 0.5;
  transition: opacity 0.15s, background 0.15s, color 0.15s;
  user-select: none;
}
.mapper-ghost-row:hover .mapper-ghost-cell {
  opacity: 1;
  background: rgba(169,217,101,0.04);
  color: var(--accent);
}
.mapper-modal-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.6rem 1rem;
  background: var(--bg-2);
  border-top: 1px solid var(--border);
  flex-shrink: 0;
  gap: 0.6rem;
}
.mapper-modal-footer .btn-primary  { width: auto; padding: .52rem 1.4rem; }
.mapper-modal-footer .btn-secondary { width: auto; padding: .52rem .9rem; }

/* ── Export / Import row (inside sidebar panels) ─────────────────────────── */
.io-btn-row {
  display: flex;
  gap: 0.35rem;
  margin-top: 0.35rem;
}
.io-btn-row .btn-secondary {
  flex: 1;
  font-size: 0.72rem;
  padding: 0.38rem 0.3rem;
  text-align: center;
}

/* ── Map export modal ────────────────────────────────────────────────────────── */
.export-modal { max-width: 1000px; }
.export-modal-body {
  display: flex;
  gap: 1rem;
  padding: .8rem 1rem;
  overflow: hidden;
}
.export-preview-col {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}
.export-preview-wrap {
  flex: 1;
  background: #000;
  border: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  min-height: 300px;
}
.export-preview-spinner {
  display: flex;
  align-items: center;
  gap: .65rem;
  color: var(--text-muted);
  font-size: .8rem;
}
.export-options-col {
  width: 210px;
  flex-shrink: 0;
  overflow-y: auto;
}
.export-fmt-row {
  display: flex;
  gap: 1.2rem;
}
.export-fmt-row label {
  display: flex;
  align-items: center;
  gap: .35rem;
  font-size: .82rem;
  color: var(--text);
  cursor: pointer;
}
.export-note {
  font-size: .72rem;
  color: var(--danger);
  margin-top: .3rem;
}
/* PNG / PDF sidebar buttons */
.export-map-btns {
  display: flex;
  gap: .4rem;
  margin-bottom: .2rem;
}
.export-map-btns .btn-secondary {
  flex: 1;
  text-align: center;
  padding: .4rem 0;
  font-size: .72rem;
}

/* ── Searchable select (source table picker) ─────────────────────────────────── */
.ss-wrap {
  position: relative;
  width: 100%;
}
.ss-trigger {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--brand-10);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font);
  font-size: 0.78rem;
  padding: 0.28rem 0.45rem;
  cursor: pointer;
  border-radius: 2px;
  text-align: left;
  transition: border-color 0.15s;
  gap: 0.3rem;
}
.ss-trigger:hover,
.ss-trigger:focus { border-color: var(--accent); outline: none; }
.ss-trigger.ss-open { border-color: var(--accent); }
.ss-label {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text);
}
.ss-label.ss-placeholder { color: var(--text-muted); }
.ss-arrow {
  font-size: 0.65rem;
  color: var(--text-muted);
  flex-shrink: 0;
  transition: transform 0.15s;
}
.ss-trigger.ss-open .ss-arrow { transform: rotate(180deg); }
.ss-dropdown {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  right: 0;
  background: var(--bg-2);
  border: 1px solid var(--accent);
  z-index: 700;
  box-shadow: 0 4px 16px rgba(0,0,0,0.55);
  border-radius: 2px;
}
.ss-search {
  width: 100%;
  background: var(--bg-1);
  border: none;
  border-bottom: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 0.76rem;
  padding: 0.38rem 0.55rem;
  outline: none;
}
.ss-search::placeholder { color: var(--text-muted); font-family: var(--font); }
.ss-list {
  list-style: none;
  max-height: 220px;
  overflow-y: auto;
  margin: 0;
  padding: 0.2rem 0;
}
.ss-list::-webkit-scrollbar { width: 3px; }
.ss-list::-webkit-scrollbar-thumb { background: rgba(169,217,101,0.3); border-radius: 2px; }
.ss-item {
  padding: 0.32rem 0.55rem;
  font-family: var(--font-mono);
  font-size: 0.74rem;
  color: var(--text);
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  transition: background 0.1s, color 0.1s;
}
.ss-item:hover,
.ss-item.ss-highlighted { background: rgba(169,217,101,0.1); color: var(--accent); }
.ss-item.ss-selected { color: var(--accent); font-weight: 600; }
.ss-empty {
  padding: 0.5rem 0.55rem;
  font-size: 0.74rem;
  color: var(--text-muted);
  font-style: italic;
}

/* ══════════════════════════════════════════════════════════════════════════════
   Delta Converter
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Layout ──────────────────────────────────────────────────────────────────── */
#product-delta-converter { flex-direction: row; overflow: hidden; }

#dc-sidebar {
  width: 200px;
  flex-shrink: 0;
  background: var(--bg-1);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

#dc-workspace {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--bg-0);
}

/* ── Profile sidebar ─────────────────────────────────────────────────────────── */
.dc-sidebar-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .6rem .75rem;
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.dc-sidebar-title { font-size: .6rem; letter-spacing: .16em; color: var(--text-muted); }

.dc-icon-btn {
  background: none;
  border: 1px solid var(--border);
  color: var(--text-muted);
  font-family: var(--font);
  font-size: .8rem;
  width: 20px; height: 20px;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; border-radius: 2px;
  transition: all .15s; padding: 0;
}
.dc-icon-btn:hover { border-color: var(--accent); color: var(--accent); }

.dc-profile-list { list-style: none; padding: 0; margin: 0; overflow-y: auto; flex: 1; }
.dc-profile-list::-webkit-scrollbar { width: 4px; }
.dc-profile-list::-webkit-scrollbar-thumb { background: rgba(169,217,101,0.25); border-radius: 2px; }

.dc-profile-item {
  padding: .45rem .75rem;
  font-size: .68rem; letter-spacing: .04em;
  cursor: pointer; border-bottom: 1px solid var(--border);
  color: var(--text-muted); transition: all .12s;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dc-profile-item:hover { color: var(--text); background: rgba(255,255,255,.04); }
.dc-profile-item.active { color: var(--accent); background: rgba(169,217,101,.07); }

/* ── Topbar ──────────────────────────────────────────────────────────────────── */
#dc-topbar {
  display: flex; align-items: center; gap: .5rem;
  padding: .5rem .9rem;
  border-bottom: 1px solid var(--border);
  background: var(--bg-1); flex-shrink: 0;
}

.dc-name-input {
  flex: 1;
  background: var(--bg-0); border: 1px solid var(--border);
  color: var(--text); font-family: var(--font); font-size: .75rem;
  padding: .28rem .5rem; border-radius: 2px; outline: none;
  transition: border-color .15s;
}
.dc-name-input:focus { border-color: var(--accent); }
.dc-name-input::placeholder { color: var(--text-muted); }

/* ── Buttons ─────────────────────────────────────────────────────────────────── */
.dc-btn {
  font-family: var(--font); font-size: .62rem; letter-spacing: .08em;
  text-transform: uppercase; border-radius: 2px; cursor: pointer;
  transition: all .15s; white-space: nowrap; padding: .3rem .65rem;
  border: 1px solid transparent;
}
.dc-btn--accent { background: var(--accent); color: #000; border-color: var(--accent); font-weight: 600; }
.dc-btn--accent:hover { opacity: .85; }
.dc-btn--ghost { background: none; border-color: var(--border); color: var(--text-muted); }
.dc-btn--ghost:hover { border-color: var(--accent); color: var(--accent); }
.dc-btn--danger { background: none; border-color: var(--border); color: var(--text-muted); }
.dc-btn--danger:hover { border-color: var(--danger); color: var(--danger); }
.dc-btn--xs { padding: .18rem .42rem; font-size: .58rem; }

/* ── Content ─────────────────────────────────────────────────────────────────── */
#dc-content {
  flex: 1; overflow-y: auto;
  padding: .9rem 1.1rem 2rem;
  display: flex; flex-direction: column; gap: 1rem;
}
#dc-content::-webkit-scrollbar { width: 4px; }
#dc-content::-webkit-scrollbar-thumb { background: rgba(169,217,101,.25); border-radius: 2px; }

/* ── Sections ────────────────────────────────────────────────────────────────── */
.dc-section {
  background: var(--bg-1); border: 1px solid var(--border);
  border-radius: 3px; padding: .85rem 1rem;
}
.dc-section-header {
  font-size: .6rem; letter-spacing: .2em;
  color: var(--accent); margin-bottom: .75rem; font-weight: 600;
}

/* ── Source toggle ───────────────────────────────────────────────────────────── */
.dc-source-toggle {
  display: flex; gap: 2px;
  background: var(--bg-0); border: 1px solid var(--border);
  border-radius: 3px; padding: 2px; width: fit-content; margin-bottom: .75rem;
}
.dc-mode-btn {
  background: none; border: none; color: var(--text-muted);
  font-family: var(--font); font-size: .62rem; letter-spacing: .08em;
  text-transform: uppercase; padding: .28rem .7rem;
  cursor: pointer; border-radius: 2px; transition: all .15s;
}
.dc-mode-btn.active { background: var(--accent); color: #000; font-weight: 600; }

/* ── Form helpers ────────────────────────────────────────────────────────────── */
.dc-form-row { display: flex; align-items: center; gap: .5rem; margin-bottom: .5rem; flex-wrap: wrap; }
.dc-label { font-size: .6rem; letter-spacing: .1em; color: var(--text-muted); white-space: nowrap; flex-shrink: 0; }
.dc-label--ml { margin-left: .25rem; }

.dc-input {
  background: var(--bg-0); border: 1px solid var(--border);
  color: var(--text); font-family: var(--font); font-size: .72rem;
  padding: .26rem .45rem; border-radius: 2px; outline: none; transition: border-color .15s;
}
.dc-input:focus { border-color: var(--accent); }
.dc-input::placeholder { color: var(--text-muted); }
.dc-input--wide { width: 260px; }
.dc-input--sm { width: 100px; }
.dc-input--sidc { width: 180px; font-family: monospace; font-size: .7rem; letter-spacing: .06em; }

.dc-select {
  background: var(--bg-0); border: 1px solid var(--border);
  color: var(--text); font-family: var(--font); font-size: .72rem;
  padding: .26rem .4rem; border-radius: 2px; outline: none; cursor: pointer;
}
.dc-select--sm { font-size: .66rem; }
.dc-select:focus { border-color: var(--accent); }

.dc-textarea {
  background: var(--bg-0); border: 1px solid var(--border);
  color: var(--text); font-family: monospace; font-size: .68rem;
  padding: .35rem .5rem; border-radius: 2px; outline: none;
  resize: vertical; width: 100%; box-sizing: border-box; margin-top: .35rem; line-height: 1.5;
}
.dc-textarea:focus { border-color: var(--accent); }

.dc-hint { font-size: .67rem; color: var(--text-muted); margin-bottom: .65rem; line-height: 1.5; }
.dc-hint--inline { margin-left: .5rem; font-size: .64rem; }
.dc-status-msg { font-size: .65rem; color: var(--text-muted); margin-left: .5rem; }
.dc-status--error { color: var(--danger) !important; }

/* ── Drop zone ───────────────────────────────────────────────────────────────── */
.dc-dropzone {
  border: 1px dashed var(--border); border-radius: 3px;
  padding: 1.5rem 1rem; text-align: center; cursor: pointer;
  color: var(--text-muted); font-size: .7rem; letter-spacing: .06em; transition: all .15s;
}
.dc-dropzone:hover, .dc-dropzone--over { border-color: var(--accent); color: var(--accent); }
.dc-dropzone--loaded { border-color: var(--accent); border-style: solid; color: var(--accent); }

/* ── Mapping table ───────────────────────────────────────────────────────────── */
.dc-mapping-table { width: 100%; border-collapse: collapse; font-size: .7rem; }
.dc-mapping-table th {
  text-align: left; font-size: .58rem; letter-spacing: .12em;
  color: var(--text-muted); padding: .3rem .45rem;
  border-bottom: 1px solid var(--border); font-weight: 400;
}
.dc-mapping-table td { padding: .28rem .45rem; border-bottom: 1px solid rgba(255,255,255,.04); vertical-align: middle; }
.dc-mapping-row:hover td { background: rgba(255,255,255,.02); }
.dc-col-src { color: var(--text); font-family: monospace; font-size: .68rem; max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-col-arrow { color: var(--text-muted); text-align: center; padding: 0 .25rem !important; }
.dc-config-row td { background: var(--bg-0) !important; padding: .5rem .75rem !important; }
.dc-config-cell { display: flex; align-items: flex-start; gap: .6rem; flex-wrap: wrap; }

/* ── SIDC rules ──────────────────────────────────────────────────────────────── */
.dc-rule-row { display: flex; align-items: center; gap: .4rem; margin-bottom: .4rem; flex-wrap: wrap; }
.dc-rule-label { font-size: .6rem; letter-spacing: .1em; color: var(--text-muted); flex-shrink: 0; }

/* ── Export / Preview ────────────────────────────────────────────────────────── */
.dc-export-actions { display: flex; gap: .5rem; flex-wrap: wrap; margin-bottom: .75rem; }
.dc-preview-meta { font-size: .65rem; color: var(--text-muted); margin-bottom: .5rem; letter-spacing: .04em; }
.dc-preview-scroll { overflow-x: auto; border: 1px solid var(--border); border-radius: 2px; }

.dc-preview-table { width: 100%; border-collapse: collapse; font-size: .67rem; }
.dc-preview-table th {
  background: var(--bg-2); padding: .3rem .5rem;
  text-align: left; font-size: .58rem; letter-spacing: .1em;
  color: var(--text-muted); white-space: nowrap;
  border-bottom: 1px solid var(--border); font-weight: 400;
}
.dc-preview-table td {
  padding: .25rem .5rem; border-bottom: 1px solid rgba(255,255,255,.04);
  white-space: nowrap; color: var(--text);
  max-width: 200px; overflow: hidden; text-overflow: ellipsis;
}
.dc-preview-table tr:hover td { background: rgba(255,255,255,.03); }
.dc-cell--sidc { font-family: monospace; color: var(--accent) !important; letter-spacing: .04em; }

/* ── Overlay layer panel ──────────────────────────────────────────────────────── */

/* Each overlay type block */
.ovl-item {
  margin-bottom: .5rem;
  border: 1px solid var(--border);
  border-radius: 4px;
  overflow: hidden;
}
.ovl-item:last-child { margin-bottom: 0; }

/* Header row: checkbox + name + gear button */
.ovl-item-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .38rem .5rem;
  background: var(--bg-2);
  gap: .4rem;
}

.ovl-toggle-label {
  display: flex;
  align-items: center;
  gap: .45rem;
  cursor: pointer;
  font-size: 11.5px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .04em;
  flex: 1;
}

.ovl-settings-btn {
  flex-shrink: 0;
  background: none;
  border: none;
  color: var(--text-muted);
  cursor: pointer;
  font-size: 13px;
  padding: 2px 5px;
  border-radius: 3px;
  line-height: 1;
  transition: color .15s, background .15s;
}
.ovl-settings-btn:hover { color: var(--accent); background: var(--white-10); }

/* Expanded settings body */
.ovl-settings {
  padding: .5rem .55rem;
  background: var(--bg-1);
  display: flex;
  flex-direction: column;
  gap: .38rem;
  border-top: 1px solid var(--border);
}

/* Section title inside settings */
.ovs-group-title {
  font-size: 10px;
  text-transform: uppercase;
  color: var(--text-muted);
  font-weight: 600;
  letter-spacing: .06em;
}

/* A single settings row */
.ovs-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .35rem .4rem;
}

.ovs-label {
  font-size: 11px;
  color: var(--text-muted);
  white-space: nowrap;
}

.ovs-check-label {
  display: flex;
  align-items: center;
  gap: .35rem;
  cursor: pointer;
}

/* Numeric input (width / size) */
.ovs-num-input {
  width: 46px;
  padding: .18rem .3rem;
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 3px;
  color: var(--text);
  font-size: 12px;
  text-align: center;
}
.ovs-num-input:focus { outline: none; border-color: var(--accent); }

/* Select (line type / font) */
.ovs-select {
  background: var(--bg-2);
  border: 1px solid var(--border);
  border-radius: 3px;
  color: var(--text);
  font-size: 11px;
  padding: .2rem .3rem;
}
.ovs-select:focus { outline: none; border-color: var(--accent); }

/* Color swatch input */
.ovs-color {
  width: 28px;
  height: 22px;
  padding: 1px 2px;
  border: 1px solid var(--border);
  border-radius: 3px;
  background: var(--bg-2);
  cursor: pointer;
  flex-shrink: 0;
}

/* Opacity range */
.ovs-range { flex: 1; min-width: 50px; }

.ovs-range-val {
  font-size: 11px;
  color: var(--text-muted);
  min-width: 30px;
  text-align: right;
}

/* Overlay map labels (rendered via L.divIcon) */
.ovl-label {
  display: inline-block;
  font-weight: 700;
  white-space: nowrap;
  pointer-events: none;
  /* Black text-outline for readability on any background */
  text-shadow:
    -1px -1px 0 #000,
     1px -1px 0 #000,
    -1px  1px 0 #000,
     1px  1px 0 #000;
}

/* Remove browser focus outline on clickable Leaflet SVG paths */
.leaflet-interactive:focus { outline: none; }

/* Hover tooltip for overlay layers */
.ovl-tooltip {
  background: rgba(20, 20, 20, .82);
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 4px;
  padding: 3px 7px;
  box-shadow: none;
  font-weight: 700;
  white-space: nowrap;
}
.ovl-tooltip::before { display: none; }
