:root {
  --bg: #f6f7f8; --panel: #fff; --line: #dfe3e6; --ink: #1c2226;
  --muted: #6b757c; --accent: #1f4e5f; --warn: #a3501e;
}
* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
body {
  background: var(--bg); color: var(--ink);
  font: 14px/1.45 -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  display: grid; grid-template-rows: auto 1fr; height: 100%;
}
header {
  background: var(--accent); color: #fff; padding: 10px 16px;
  display: flex; align-items: baseline; gap: 14px;
}
header h1 { font-size: 16px; margin: 0; font-weight: 600; }
header a { color: #cfe3ea; font-size: 13px; }
.layout { display: grid; grid-template-columns: 320px 1fr; min-height: 0; }
/* На телефоне панель ложится над картой и занимает не больше половины
   экрана: карте нужна ширина, а фильтрам — прокрутка. */
@media (max-width: 800px) {
  .layout { grid-template-columns: 1fr; grid-template-rows: minmax(0, 45vh) 1fr; }
  aside { border-right: 0; border-bottom: 1px solid var(--line); }
  #map { min-height: 50vh; }
}
aside {
  background: var(--panel); border-right: 1px solid var(--line);
  overflow: auto; padding: 14px; display: grid; gap: 14px; align-content: start;
}
#map { min-height: 0; }
h2 {
  font-size: 12px; margin: 0 0 8px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--muted); font-weight: 600;
}
label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 4px; }
input, select, button {
  font: inherit; padding: 6px 9px; border: 1px solid var(--line);
  border-radius: 6px; background: #fff; color: inherit; width: 100%;
}
button { background: var(--accent); color: #fff; border-color: var(--accent); cursor: pointer; }
button.ghost { background: #fff; color: var(--accent); }
button:disabled { opacity: .5; cursor: default; }
.buttons { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.counts { display: grid; gap: 4px; font-size: 13px; }
.counts b { font-variant-numeric: tabular-nums; }
.counts .hint { color: var(--muted); font-size: 12px; }
.chips { display: flex; flex-wrap: wrap; gap: 6px; }
/* Цвет текста задан прямо: правило button выше делает текст белым, и фишка,
   у которой переопределён только фон, оказалась белым по белому. */
.chip {
  border: 1px solid var(--line); border-radius: 999px; padding: 3px 9px;
  font-size: 12px; cursor: pointer; background: #fff; color: var(--ink);
  width: auto; display: inline-flex; align-items: center; gap: 6px;
}
.chip[aria-pressed="true"] { background: var(--accent); color: #fff; border-color: var(--accent); }
/* Ноль — это «выбирать нечего», а не «читать нечего»: значение гасится,
   но остаётся разборчивым. */
.chip.empty { color: var(--muted); }
.chip .dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.chip .n { font-variant-numeric: tabular-nums; opacity: .75; }
details summary { cursor: pointer; color: var(--muted); font-size: 12px;
  text-transform: uppercase; letter-spacing: .04em; font-weight: 600; }
details > div { padding-top: 10px; display: grid; gap: 10px; }
.note { font-size: 12px; color: var(--muted); }
.warn { color: var(--warn); }
.card { margin: 0; }
.card dt { font-size: 11px; color: var(--muted); }
.card dd { margin: 0 0 6px; overflow-wrap: anywhere; }
.card dt:first-child + dd { font-size: 15px; font-weight: 600; }
/* Полей в карточке три десятка; без предела по высоте всплывающее окно
   закрывает собой всю карту. */
.leaflet-popup-content { margin: 10px 12px; max-height: 300px; overflow-y: auto; }
.blocker {
  position: fixed; inset: 0; background: #fff; display: grid; place-items: center;
  padding: 40px; text-align: center; z-index: 2000; font-size: 15px;
}

.row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.days { margin-top: 10px; display: grid; gap: 4px; font-size: 12px; }
.day { display: flex; align-items: baseline; gap: 8px; }
.day .swatch { width: 10px; height: 10px; border-radius: 2px; flex: none; }
.day b { font-variant-numeric: tabular-nums; }
/* Пунктир на карте означает «расстояние не измерено». Тот же знак стоит у
   времени и в колонке выгрузки: один признак легко не заметить. */
.day .approx { color: var(--muted); }
