/* ==========================================================================
   theme.css — брендовые токены Whalik в виде CSS custom properties.

   Палитра построена на Material Design 3 и дословно повторяет значения
   из файлов приложения Whalik (seed #677278 «Cyan2»):

     - светлая тема  — app/src/main/res/values/colors.xml        (material_*)
     - тёмная тема   — app/src/main/res/values-night/colors.xml  (material_*)

   Обе палитры по 34 токена. Синхронность с приложением проверяется
   тестами `test_theme_light_token_matches_app` и
   `test_theme_dark_token_matches_app` в site/tests/test_brand_assets.py.

   МОДЕЛЬ ВЫБОРА ТЕМЫ
   ------------------
   Сайт поддерживает ТРИ состояния:

     1. data-theme="light" на <html>   — пользователь вручную выбрал Light
                                         (через переключатель на сайте).
     2. data-theme="dark"  на <html>   — пользователь вручную выбрал Dark.
     3. атрибута data-theme НЕТ         — авто-режим: тема следует
                                         @media (prefers-color-scheme).

   Логика ниже устроена так, чтобы все три варианта работали и чтобы
   отсутствие JavaScript (пользователь отключил JS / скрипт не загрузился)
   всё равно давало корректный рендер:

     :root { ... светлая палитра ... color-scheme: light dark; }
     @media (prefers-color-scheme: dark) {
       :root:not([data-theme="light"]) { ... тёмная палитра ... }
     }
     :root[data-theme="dark"]  { ... тёмная палитра ... }
     :root[data-theme="light"] { ... светлая палитра ... }

   То есть:
   - без JS и светлой системной теме → светлая (fallback-путь :root).
   - без JS и тёмной системной теме  → тёмная (через @media).
   - с JS и выбором Light             → светлая всегда (атрибут перекрывает @media).
   - с JS и выбором Dark              → тёмная всегда.
   - с JS и Auto (нет атрибута)       → как без JS (по системе).

   ПОЧЕМУ НУЖЕН РУЧНОЙ ПЕРЕКЛЮЧАТЕЛЬ
   ---------------------------------
   На Chrome для Android медиа-запрос `prefers-color-scheme: dark`
   следует настройке *системы* Android, а НЕ UI-теме самого Chrome.
   Если пользователь установил Chrome → Settings → Theme → Light,
   но Android у него в night-mode, `prefers-color-scheme` всё равно
   вернёт `dark`. То есть пользователь явно просит светлую тему в
   Chrome, а медиа-запрос отвечает противоположное.

   Решение — скриптик `assets/js/theme-toggle.js`, который:
     а) при загрузке страницы читает localStorage('whalik-site-theme')
        и выставляет data-theme на <html> ДО рендера (inline <script>
        в <head>, чтобы не было FOUC-вспышки);
     б) показывает кнопку переключателя в шапке (Auto ↔ Light ↔ Dark);
     в) сохраняет выбор в localStorage.

   color-scheme и Chrome Force Dark
   --------------------------------
   На :root в дефолте стоит `color-scheme: light dark` — сигнал
   браузеру «мы сами поддерживаем обе темы». Внутри @media и
   data-theme-правил color-scheme переопределяется на конкретный
   (`light` или `dark`), чтобы Force Dark ничего не инвертировал
   поверх нашей уже-тёмной / уже-светлой палитры.
   ========================================================================== */

/* ---------- Светлая тема (по умолчанию) ---------- */

:root {
  color-scheme: light dark;

  /* Primary */
  --md-primary: #116682;
  --md-on-primary: #ffffff;
  --md-primary-container: #bde9ff;
  --md-on-primary-container: #004d64;

  /* Secondary */
  --md-secondary: #4d616c;
  --md-on-secondary: #ffffff;
  --md-secondary-container: #d0e6f2;
  --md-on-secondary-container: #354a53;

  /* Tertiary */
  --md-tertiary: #5d5b7d;
  --md-on-tertiary: #ffffff;
  --md-tertiary-container: #e3dfff;
  --md-on-tertiary-container: #454364;

  /* Error */
  --md-error: #ba1a1a;
  --md-on-error: #ffffff;
  --md-error-container: #ffdad6;
  --md-on-error-container: #93000a;

  /* Background / Surface */
  --md-background: #f6fafd;
  --md-on-background: #171c1f;
  --md-surface: #f6fafd;
  --md-on-surface: #171c1f;
  --md-surface-variant: #dce4e9;
  --md-on-surface-variant: #40484c;
  --md-surface-tint: #116682;

  /* Surface containers (elevation levels) */
  --md-surface-container-lowest: #ffffff;
  --md-surface-container-low: #f0f4f8;
  --md-surface-container: #eaeef2;
  --md-surface-container-high: #e4e9ec;
  --md-surface-container-highest: #dfe3e7;

  /* Inverse */
  --md-inverse-surface: #2c3134;
  --md-inverse-on-surface: #edf1f5;
  --md-inverse-primary: #8bd0ef;

  /* Outline */
  --md-outline: #70787d;
  --md-outline-variant: #c0c8cd;

  /* Scrim */
  --md-scrim: #000000;

  /* ---------- Семантические алиасы для base.css ---------- */

  --bg: var(--md-background);
  --surface: var(--md-surface);
  --surface-subtle: var(--md-surface-container-low);
  --surface-raised: var(--md-surface-container);
  --border: var(--md-outline-variant);
  --border-strong: var(--md-outline);

  --text: var(--md-on-surface);
  --text-strong: var(--md-on-background);
  --text-muted: var(--md-on-surface-variant);

  --code-bg: var(--md-surface-container);

  --accent: var(--md-primary);
  --accent-strong: var(--md-on-primary-container);
  --accent-soft: var(--md-primary-container);
  --accent-on: var(--md-on-primary);

  --success: #2a8c4e;
  --success-soft: #e3f4e9;
  --warning: var(--md-tertiary);
  --warning-soft: var(--md-tertiary-container);
  --danger: var(--md-error);
  --danger-soft: var(--md-error-container);
}

/* ---------- Тёмная тема (values-night/colors.xml) ----------
 * Применяется в двух случаях:
 *   (а) система в dark-mode И пользователь НЕ выбрал data-theme="light"
 *       явно (без JS это означает: атрибут отсутствует → применяется);
 *   (б) пользователь выбрал data-theme="dark" явно — перекрывает всё
 *       вне зависимости от системы.
 */

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;

    /* Primary */
    --md-primary: #8bd0ef;
    --md-on-primary: #003546;
    --md-primary-container: #004d64;
    --md-on-primary-container: #bde9ff;

    /* Secondary */
    --md-secondary: #b4cad6;
    --md-on-secondary: #1f333c;
    --md-secondary-container: #354a53;
    --md-on-secondary-container: #d0e6f2;

    /* Tertiary */
    --md-tertiary: #c6c2ea;
    --md-on-tertiary: #2e2d4d;
    --md-tertiary-container: #454364;
    --md-on-tertiary-container: #e3dfff;

    /* Error */
    --md-error: #ffb4ab;
    --md-on-error: #690005;
    --md-error-container: #93000a;
    --md-on-error-container: #ffdad6;

    /* Background / Surface */
    --md-background: #0f1417;
    --md-on-background: #dfe3e7;
    --md-surface: #0f1417;
    --md-on-surface: #dfe3e7;
    --md-surface-variant: #40484c;
    --md-on-surface-variant: #c0c8cd;
    --md-surface-tint: #8bd0ef;

    /* Surface containers (dark elevation) */
    --md-surface-container-lowest: #0a0f11;
    --md-surface-container-low: #171c1f;
    --md-surface-container: #1b2023;
    --md-surface-container-high: #262b2d;
    --md-surface-container-highest: #303538;

    /* Inverse */
    --md-inverse-surface: #dfe3e7;
    --md-inverse-on-surface: #2c3134;
    --md-inverse-primary: #116682;

    /* Outline */
    --md-outline: #8a9297;
    --md-outline-variant: #40484c;

    /* Scrim */
    --md-scrim: #000000;

    /* success/warning адаптированные для тёмного фона */
    --success: #8fd4a5;
    --success-soft: #184d2b;
    --warning: var(--md-tertiary);
    --warning-soft: var(--md-tertiary-container);
  }
}

/* ---------- Ручной выбор Dark через переключатель ---------- */

:root[data-theme="dark"] {
  /* `only dark` — см. комментарий в [data-theme="light"] ниже.
   * Сигнал Chrome Force Dark не лезть (страница и так тёмная). */
  color-scheme: only dark;

  --md-primary: #8bd0ef;
  --md-on-primary: #003546;
  --md-primary-container: #004d64;
  --md-on-primary-container: #bde9ff;

  --md-secondary: #b4cad6;
  --md-on-secondary: #1f333c;
  --md-secondary-container: #354a53;
  --md-on-secondary-container: #d0e6f2;

  --md-tertiary: #c6c2ea;
  --md-on-tertiary: #2e2d4d;
  --md-tertiary-container: #454364;
  --md-on-tertiary-container: #e3dfff;

  --md-error: #ffb4ab;
  --md-on-error: #690005;
  --md-error-container: #93000a;
  --md-on-error-container: #ffdad6;

  --md-background: #0f1417;
  --md-on-background: #dfe3e7;
  --md-surface: #0f1417;
  --md-on-surface: #dfe3e7;
  --md-surface-variant: #40484c;
  --md-on-surface-variant: #c0c8cd;
  --md-surface-tint: #8bd0ef;

  --md-surface-container-lowest: #0a0f11;
  --md-surface-container-low: #171c1f;
  --md-surface-container: #1b2023;
  --md-surface-container-high: #262b2d;
  --md-surface-container-highest: #303538;

  --md-inverse-surface: #dfe3e7;
  --md-inverse-on-surface: #2c3134;
  --md-inverse-primary: #116682;

  --md-outline: #8a9297;
  --md-outline-variant: #40484c;

  --md-scrim: #000000;

  --success: #8fd4a5;
  --success-soft: #184d2b;
  --warning: var(--md-tertiary);
  --warning-soft: var(--md-tertiary-container);
}

/* ---------- Ручной выбор Light через переключатель ----------
 * Повторяет дефолтную :root-палитру, но с большей специфичностью,
 * чтобы перекрыть @media (prefers-color-scheme: dark) на устройствах
 * с системным dark-mode, где пользователь хочет светлую тему сайта.
 */

:root[data-theme="light"] {
  /* `only light` — это spec-level opt-out-сигнал, говорящий
   * браузеру «не запускай Force Dark на этой странице». Нужен
   * здесь (а не просто `light`), потому что у части пользователей
   * включён chrome://flags/#enable-force-dark, который игнорирует
   * обычную декларацию `color-scheme: light` в дефолтном :root и
   * инвертирует страницу принудительно — тогда как `only light`
   * он уважает. См. RESPONSIVE_DESIGN.md §3.2a. */
  color-scheme: only light;

  --md-primary: #116682;
  --md-on-primary: #ffffff;
  --md-primary-container: #bde9ff;
  --md-on-primary-container: #004d64;

  --md-secondary: #4d616c;
  --md-on-secondary: #ffffff;
  --md-secondary-container: #d0e6f2;
  --md-on-secondary-container: #354a53;

  --md-tertiary: #5d5b7d;
  --md-on-tertiary: #ffffff;
  --md-tertiary-container: #e3dfff;
  --md-on-tertiary-container: #454364;

  --md-error: #ba1a1a;
  --md-on-error: #ffffff;
  --md-error-container: #ffdad6;
  --md-on-error-container: #93000a;

  --md-background: #f6fafd;
  --md-on-background: #171c1f;
  --md-surface: #f6fafd;
  --md-on-surface: #171c1f;
  --md-surface-variant: #dce4e9;
  --md-on-surface-variant: #40484c;
  --md-surface-tint: #116682;

  --md-surface-container-lowest: #ffffff;
  --md-surface-container-low: #f0f4f8;
  --md-surface-container: #eaeef2;
  --md-surface-container-high: #e4e9ec;
  --md-surface-container-highest: #dfe3e7;

  --md-inverse-surface: #2c3134;
  --md-inverse-on-surface: #edf1f5;
  --md-inverse-primary: #8bd0ef;

  --md-outline: #70787d;
  --md-outline-variant: #c0c8cd;

  --md-scrim: #000000;

  --success: #2a8c4e;
  --success-soft: #e3f4e9;
  --warning: var(--md-tertiary);
  --warning-soft: var(--md-tertiary-container);
}
