/*
 * GenDesign — global CSS design tokens (UI Brief May 17)
 * All CSS vars used across site-finder and analytics components.
 * Spacing scale: 4/8/12/16/24/32px only.
 * Tabular-nums applied globally for numeric readability.
 */

*,
*::before,
*::after {
  box-sizing: border-box;
}

:root {
  /* ── Surface ─────────────────────────────────────────────────────────── */
  --bg-app: #f6f7f9;
  --bg-card: #ffffff;
  --bg-card-alt: #fafbfc;
  --bg-headline: #0f172a; /* slate-900 — dark verdict bar */

  /* ── Borders ─────────────────────────────────────────────────────────── */
  --border-soft: #eef0f3;
  --border-card: #e6e8ec;
  --border-strong: #d1d5db;

  /* ── Text ────────────────────────────────────────────────────────────── */
  --fg-primary: #111111;
  --fg-secondary: #5b6066;
  --fg-tertiary: #73767e;
  --fg-on-dark: #e2e8f0; /* text on --bg-headline */
  --fg-on-dark-muted: #94a3b8; /* caveat text on dark */

  /* ── Brand / CTA ─────────────────────────────────────────────────────── */
  --accent: #1d4ed8; /* primary blue CTA */
  --accent-hover: #1e40af;
  --accent-soft: #dbeafe; /* badge bg, active tab bg */
  --accent-2: #f2994a; /* secondary orange CTA (Export, Share) */

  /* ── Semantic ────────────────────────────────────────────────────────── */
  --success: #0a7a3a;
  --success-soft: #dcfce7;
  --warn: #9a6700;
  --warn-soft: #fef3c7;
  --danger: #b3261e;
  --danger-soft: #fee2e2;

  /* ── Data-viz (use in order, no skip) ───────────────────────────────── */
  --viz-1: #1d4ed8;
  --viz-2: #0ea5e9;
  --viz-3: #14b8a6;
  --viz-4: #f59e0b;
  --viz-5: #8b5cf6;
  --prediction-line: #0ea5e9;
  --prediction-band: rgba(14, 165, 233, 0.18);
}

html,
body {
  margin: 0;
  padding: 0;
  background: var(--bg-app);
  color: var(--fg-primary);
  font-family:
    var(--font-inter),
    "Inter",
    -apple-system,
    "Segoe UI",
    system-ui,
    sans-serif;
  font-size: 14px;
  line-height: 1.5;
  /* Tabular nums globally for numeric legibility (Bloomberg lesson) */
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
  -webkit-font-smoothing: antialiased;
}

/* Focus-visible ring — accessible, not outline:none */
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* Remove default outline for mouse users */
:focus:not(:focus-visible) {
  outline: none;
}

a {
  color: inherit;
}

/*
 * ── Responsive (issue #66) ───────────────────────────────────────────────────
 * 3 контекста (НЕ Tailwind sm/md/lg): phone <768, tablet 768–1280, desktop >1280.
 * Утилиты ниже — единственный источник правды для брейкпоинтов. Компоненты
 * подключаются через className; инлайн-стили остаются desktop-видом по умолчанию.
 */

/* Никакого горизонтального скролла на узких экранах (acceptance #66).
 * overflow-x: CLIP, не hidden: `hidden` заставляет браузер вычислить
 * overflow-y: auto → body/html становятся scroll-контейнером и ЛОМАЮТ
 * `position: sticky` у сайдбара отчёта (панель уезжала вверх вместо залипания).
 * `clip` так же режет горизонтальный overflow, но НЕ создаёт scroll-контейнер
 * и оставляет overflow-y: visible → sticky-сайдбар работает. */
html,
body {
  max-width: 100%;
  overflow-x: clip;
}

/* Sidebar-grid (напр. "240px 1fr" / "minmax(300px,360px) 1fr"): на планшете
 * и ниже схлопывается в одну колонку, сайдбар уезжает над контентом. */
@media (max-width: 1024px) {
  .gd-grid-sidebar {
    grid-template-columns: 1fr !important;
  }
  /* sticky-сайдбар внутри схлопнутого грида не должен «прилипать». */
  .gd-grid-sidebar > .gd-sidebar {
    position: static !important;
    top: auto !important;
    height: auto !important;
  }
}

/* Карта/контент рядом с фиксированным сайдбаром: на планшете в колонку. */
@media (max-width: 1024px) {
  .gd-split {
    flex-direction: column !important;
    overflow: visible !important;
  }
  .gd-split > .gd-split-aside {
    width: 100% !important;
    flex-shrink: 1 !important;
    /* в desktop у сайдбара не было левого паддинга (он стоял справа от карты);
     * в колонке возвращаем симметрию. */
    padding-left: 16px !important;
    padding-top: 0 !important;
  }
}

/* Nav-tabs: на телефоне — горизонтальный скролл со снапом, НЕ hamburger. */
@media (max-width: 767px) {
  .gd-nav-scroll {
    overflow-x: auto;
    flex-wrap: nowrap;
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .gd-nav-scroll::-webkit-scrollbar {
    display: none;
  }
  .gd-nav-scroll > * {
    flex: 0 0 auto;
    scroll-snap-align: start;
  }
}

/* Таблицы с фиксированной шириной колонок — оборачивать в .gd-table-scroll. */
.gd-table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* KPI-grid: на телефоне одна колонка во всю ширину (ui-conventions). */
@media (max-width: 767px) {
  .gd-kpi-grid {
    grid-template-columns: 1fr !important;
  }
}

/* Карта Leaflet на узких экранах — гарантированная высота, чтобы не
 * схлопнулась в 0 когда flex-родитель встаёт в колонку. */
@media (max-width: 1024px) {
  .gd-map-shell {
    min-height: 420px;
  }
}

/* Section-nav сайдбара анализа: на планшете/телефоне (когда грид схлопнут)
 * вертикальный список превращается в горизонтальную скролл-полоску со снапом —
 * чтобы не съедать пол-экрана высоты над контентом (issue #66). */
@media (max-width: 1024px) {
  .gd-section-nav {
    flex-direction: row !important;
    overflow-x: auto;
    padding: 8px 4px !important;
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .gd-section-nav::-webkit-scrollbar {
    display: none;
  }
  .gd-section-nav > * {
    display: flex;
    flex: 0 0 auto;
    scroll-snap-align: start;
  }
  .gd-section-nav button {
    width: auto !important;
    white-space: nowrap;
    padding-left: 12px !important;
    padding-right: 12px !important;
  }
}
