/* Nexus design tokens — the brand pair: white & red (canonical) and black & red (dark).
   Red is the SIGNAL color only — identity, primary action, live state; every surface and
   text tone stays neutral so the accent keeps its authority. System font stack (the CSP
   has no external origins to load from). */

:root {
  color-scheme: light dark;

  /* palette — light (canonical: white & red) */
  --bg: #ffffff;
  --surface: #fafafa;
  --raised: #ffffff;
  --hover: #f2f2f3;
  --border: rgba(18, 19, 22, 0.09);
  --border-strong: rgba(18, 19, 22, 0.18);
  --text: #121316;
  --muted: #585b63;
  --accent: #e02d26;
  --accent-ink: #ffffff;
  --accent-soft: rgba(224, 45, 38, 0.07);
  /* ОПАСНОЕ — ТЕМ ЖЕ КРАСНЫМ, ЧТО И ФИРМЕННЫЙ (08.08, замечено владельцем на приложении и
     исправлено на обеих поверхностях). Здесь стоял свой, более тёмный оттенок — и на светлой теме
     «Удалить» отличалось от акцента ровно настолько, чтобы это читалось как небрежность. На тёмной
     теме они и так совпадали, то есть расхождение было ещё и непоследовательным. Имя `--danger`
     остаётся: оно про СМЫСЛ, а не про цвет, и место, где смысл однажды снова разойдётся с
     оформлением, обязано быть одно. */
  --danger: #e02d26;
  --danger-soft: rgba(224, 45, 38, 0.08);
  /* ink — the NEUTRAL primary button (ChatGPT/Claude doctrine): filled controls carry weight in a
     near-black tone, so the red accent is spent only on identity and live signal, never on every
     button. `--line` is the hairline separator, resolved per-theme through --border. */
  --ink: #1c1d21;
  --ink-on: #ffffff;
  --line: var(--border);

  /* type */
  --font-sans: ui-sans-serif, -apple-system, "SF Pro Text", "Segoe UI", Roboto, Inter,
               "Helvetica Neue", Arial, sans-serif;
  --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
  --fs-xs: 0.75rem;
  --fs-s: 0.845rem;
  /* ОСНОВНОЙ КЕГЛЬ — 17px, КАК В ПРИЛОЖЕНИИ (08.08, равенство поверхностей). Здесь стояло
     0.9575rem (15,3px) против `Font.body` (17pt) в приложении: крайние ступени шкалы совпадали
     (12 и 22), а та единственная, которой набран весь читаемый текст, — нет. Человек, читавший
     один и тот же ответ с телефона и с ноутбука, видел его разным по размеру.
     Ступень `--fs-l` поднята следом, иначе она слилась бы с основной и шкала потеряла бы шаг. */
  --fs-base: 1.0625rem;
  --fs-l: 1.1875rem;
  --fs-xl: 1.375rem;
  --fs-hero: clamp(2rem, 5vw, 3rem);
  --lh: 1.55;

  /* geometry */
  --radius-s: 8px;
  --radius-m: 12px;
  --radius-l: 18px;
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 40px;
  --sidebar-w: 288px;
  --column-w: 46rem;

  /* depth & motion */
  --shadow-1: 0 1px 2px rgba(18, 19, 22, 0.06);
  --shadow-2: 0 8px 28px rgba(18, 19, 22, 0.1);
  --dur: 180ms;
  --ease: cubic-bezier(0.2, 0, 0, 1);
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0a0a0b;
    --surface: #131315;
    --raised: #1a1a1d;
    --hover: #202024;
    --border: rgba(242, 241, 239, 0.08);
    --border-strong: rgba(242, 241, 239, 0.17);
    --text: #f2f1ef;
    --muted: #aaacb3;
    --accent: #f04a42;
    --accent-ink: #ffffff;
    --accent-soft: rgba(240, 74, 66, 0.1);
    --danger: #f04a42;
    --danger-soft: rgba(240, 74, 66, 0.12);
    /* dark: the neutral primary inverts to a light key with dark text — the same restraint,
       legible on black (ChatGPT's dark primary). --line inherits --border via the base :root. */
    --ink: #f2f1ef;
    --ink-on: #16171a;
    --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.3);
    --shadow-2: 0 8px 28px rgba(0, 0, 0, 0.45);
  }
}

/* ── РУЧНАЯ ТЕМА ПОВЕРХ СИСТЕМНОЙ (решение владельца 15.08) ─────────────────────────────────────
   Продукт больше не заставляет менять тему всей системы: выбор в «Внешнем виде» ставит
   data-theme на корень (см. /appearance-boot.js), и он ПОБЕЖДАЕТ prefers-color-scheme в обе
   стороны — тёмный сайт при светлой системе и светлый при тёмной. Значения — те же токены,
   что выше, слово в слово: третьей палитры не существует. Пользовательский акцент приходит
   инлайн-свойством с корня и потому сильнее любого из этих блоков; --danger он не трогает. */
:root[data-theme="dark"] {
  color-scheme: dark;
    --bg: #0a0a0b;
    --surface: #131315;
    --raised: #1a1a1d;
    --hover: #202024;
    --border: rgba(242, 241, 239, 0.08);
    --border-strong: rgba(242, 241, 239, 0.17);
    --text: #f2f1ef;
    --muted: #aaacb3;
    --accent: #f04a42;
    --accent-ink: #ffffff;
    --accent-soft: rgba(240, 74, 66, 0.1);
    --danger: #f04a42;
    --danger-soft: rgba(240, 74, 66, 0.12);
    /* dark: the neutral primary inverts to a light key with dark text — the same restraint,
       legible on black (ChatGPT's dark primary). --line inherits --border via the base :root. */
    --ink: #f2f1ef;
    --ink-on: #16171a;
    --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.3);
    --shadow-2: 0 8px 28px rgba(0, 0, 0, 0.45);
  }

:root[data-theme="light"] {
    color-scheme: light;
    --bg: #ffffff;
    --surface: #fafafa;
    --raised: #ffffff;
    --hover: #f2f2f3;
    --border: rgba(18, 19, 22, 0.09);
    --border-strong: rgba(18, 19, 22, 0.18);
    --text: #121316;
    --muted: #585b63;
    --accent: #e02d26;
    --accent-ink: #ffffff;
    --accent-soft: rgba(224, 45, 38, 0.07);
    --danger: #e02d26;
    --danger-soft: rgba(224, 45, 38, 0.08);
    --ink: #1c1d21;
    --ink-on: #ffffff;
    --shadow-1: 0 1px 2px rgba(18, 19, 22, 0.06);
    --shadow-2: 0 8px 28px rgba(18, 19, 22, 0.1);
}

/* ЖУРНАЛ «СКАЗАНО ОТ ВАШЕГО ИМЕНИ» — карточками, а не строками через тонкую серую черту (21.08,
   просьба владельца). Разделяет ПОДЛОЖКА и отступ, а не линия: линия одинаково слаба и как
   разделитель, и как граница, и список из десяти ответов читался сплошняком. Красный сюда не
   зовём — он у нас означает «живое» и «опасное», а здесь просто запись. */
.said-card {
  background: var(--surface-2, rgba(127, 127, 127, .07));
  border-radius: 12px;
  padding: .75rem .9rem;
  margin: .55rem 0;
}
.said-head {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: .5rem; margin-bottom: .35rem;
}
.said-where { font-size: .9rem; font-weight: 600; }
.said-when { font-size: .78rem; color: var(--muted, #888); white-space: nowrap; }
/* Исходник — приглушённо и с полосой слева: это ЧУЖИЕ слова, а не наши. */
.said-quote {
  font-size: .85rem; color: var(--muted, #888);
  border-left: 2px solid var(--rule, rgba(127,127,127,.35));
  padding-left: .55rem; margin-bottom: .4rem;
}
.said-text { font-size: .92rem; white-space: pre-wrap; }
/* Вид — общий с прочими тихими действиями (app.css); здесь только отступ. */
.said-open { margin-top: .45rem; }
/* Удержанный щитом присутствия ответ: текст приглушён — он ПОДГОТОВЛЕН, а не сказан, и карточка
   обязана читаться иначе, чем ушедшее слово. Причина — обычным цветом: её читать обязательно. */
.said-withheld .said-text { color: var(--muted, #888); }
.said-hold { margin-top: .4rem; font-size: .85rem; color: var(--text); }

/* Подсказка, которую человек ОБЯЗАН прочесть: не серая, а обычного цвета текста. Так выглядит
   строка «автоответ выключится завтра в 10:00» — она ловит промах в сутки. */
.prefs-hint-loud {
  color: var(--text);
}
