/* ── Палитра ──────────────────────────────────────────────────────────────
   Один файл на оба экрана — читалку и библиотеку, иначе темы разъезжаются.

   Почему контраст не на максимуме. Слово в потоке меняется 5–15 раз в секунду
   ровно в центре экрана, и почти белый текст на почти чёрном фоне на такой
   частоте расплывается по краям. Apple прямо просит не показывать яркий
   мигающий объект на чисто чёрном фоне, Google для тёмных тем задаёт нижний
   слой #121212. Поэтому дефолтный тёмный фон — #121212, а текст #d6d3cd:
   12,5:1 вместо прежних 17,4:1. Обоснование и источники — docs/eye-comfort/.

   Контрасты фон/текст: Бумага 14,4:1 · Сумерки 12,5:1 · Ночь 8,8:1 ·
   Амбер 8,9:1 · Контраст 18,3:1. */

:root,
:root[data-theme="dusk"] {
  --bg: #121212;
  --bg-soft: #1a1a1c;
  --ink: #d6d3cd;
  --ink-dim: rgba(214, 211, 205, .42);
  --accent: #e0a35c;
  --ui: rgba(214, 211, 205, .62);
  --panel: rgba(26, 26, 28, .95);
  --hair: rgba(214, 211, 205, .1);
  --fx-a: 143, 182, 255;
  --fx-b: 224, 163, 92;
  --ctx-op: .40;
  --danger: #ff8a7a;
}

/* Дневная. Читается быстрее и точнее тёмных — преимущество светлой темы
   измерено и растёт тем сильнее, чем мельче кегль. */
:root[data-theme="paper"] {
  --bg: #f4ede1;
  --bg-soft: #ebe2d2;
  --ink: #221d17;
  --ink-dim: rgba(34, 29, 23, .42);
  --accent: #a9541c;
  --ui: rgba(34, 29, 23, .66);
  --panel: rgba(244, 237, 225, .97);
  --hair: rgba(34, 29, 23, .12);
  --fx-a: 169, 84, 28;
  --fx-b: 120, 96, 60;
  --ctx-op: .38;
  --danger: #a3251a;   /* на светлом фоне светло-красный не читается */
}

/* Для чтения в темноте: пиковая яркость ниже, чем у Сумерек. */
:root[data-theme="night"] {
  --bg: #0e0e10;
  --bg-soft: #131315;
  --ink: #b4afa6;
  --ink-dim: rgba(180, 175, 166, .46);
  --accent: #c98f52;
  --ui: rgba(180, 175, 166, .66);
  --panel: rgba(19, 19, 21, .95);
  --hair: rgba(180, 175, 166, .12);
  --fx-a: 120, 150, 220;
  --fx-b: 201, 143, 82;
  --ctx-op: .42;
}

/* Тёплая ночная. Оттенок — вопрос вкуса: доказательств, что тёплый свет
   снижает усталость глаз или спасает сон, нет. Отсюда и подпись в интерфейсе
   «мягче в темноте», без обещаний. */
:root[data-theme="amber"] {
  --bg: #14100c;
  --bg-soft: #1a1511;
  --ink: #c9ae86;
  --ink-dim: rgba(201, 174, 134, .46);
  --accent: #d99a52;
  --ui: rgba(201, 174, 134, .66);
  --panel: rgba(26, 21, 17, .95);
  --hair: rgba(201, 174, 134, .12);
  --fx-a: 217, 154, 82;
  --fx-b: 180, 130, 70;
  --ctx-op: .42;
}

/* Максимальный контраст: нужен при помутнении хрусталика и на ярком солнце.
   Это прежняя тема «Ночь» — ночной она быть перестала. */
:root[data-theme="contrast"] {
  --bg: #000;
  --bg-soft: #090909;
  --ink: #f4efe6;
  --ink-dim: rgba(244, 239, 230, .42);
  --accent: #ffb45c;
  --ui: rgba(244, 239, 230, .62);
  --panel: rgba(9, 9, 9, .95);
  --hair: rgba(244, 239, 230, .1);
  --fx-a: 143, 182, 255;
  --fx-b: 255, 180, 92;
  --ctx-op: .34;
}

/* ── Кегль слова ──────────────────────────────────────────────────────────
   Живёт здесь, а не в читалке: полка показывает образец слова в настройках
   вида, и мерить его надо той же линейкой. */
:root { --word-size: clamp(27px, 8.2vw, 40px); }
:root[data-size="s"] { --word-size: clamp(22px, 6.4vw, 31px); }
:root[data-size="l"] { --word-size: clamp(32px, 10vw, 50px); }

/* ── Яркость ──────────────────────────────────────────────────────────────
   Веб не достаёт до системной яркости, а в темноте её штатного минимума
   часто мало. Слой поверх всего уводит экран ниже этого минимума — другого
   способа в браузере нет.

   Фильтром это делать нельзя: filter на контейнере с текстом отключает
   субпиксельную отрисовку, и слово, которое живёт на экране 200 мс,
   становится мыльным. Слой ничего не размывает — он гасит.

   Слой не перехватывает касания и лежит выше всех шторок, чтобы результат
   регулировки был виден сразу, пока палец на ползунке. */
#fbdim {
  position: fixed; inset: 0; z-index: 2147483000;
  pointer-events: none;
  background: #000;
  opacity: 0;
  transition: opacity 120ms linear;
}
@media (prefers-reduced-motion: reduce) { #fbdim { transition: none; } }
