/* Источник: проект Claude Design, base/base.css. Срез 14 августа 2026.
   Элементы. Сброс, текстовые классы, фокус, принудительные цветовые режимы.
   Переменных не объявляет: они живут в tokens/. */
*{box-sizing:border-box}
/* Подсветки нажатия нет (владелец 04.10.2026: «вся платформа усеяна синими фокусами при
   клике на мобайле»): это синий прямоугольник Android Chrome на каждой ссылке и кнопке.
   Отклик на нажатие дают наши :hover/:active; кольцо с клавиатуры (:focus-visible) не тронуто. */
html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;
  /* Липкая шапка перекрывает элемент в фокусе при табуляции (2.4.11), приклеенное
     поле - снизу. Оба отступа выводятся из токенов, а не набираются. */
  scroll-padding-block-start:calc(var(--sc-header-h) + var(--sc-space-24));
  scroll-padding-block-end:var(--sc-field-reserve)}
/* У figure браузер держит поля по 40px с боков - в сетке карточек это ломает
   раскладку молча, ширина просто не сходится. Сбрасываем один раз здесь. */
figure{margin:0}
body{margin:0;font-family:var(--sc-font);font-size:var(--sc-text-body);font-weight:var(--sc-fw-text);
  line-height:var(--sc-lh-body);color:var(--sc-text);background:var(--sc-bg-page);
  text-align:start;text-wrap:pretty;-webkit-font-smoothing:antialiased}
img,svg,video{max-inline-size:100%;block-size:auto}
button,input,textarea,select{font:inherit;color:inherit}

/* Синтез веса запрещён. Prata существует только в весе 400: при font-weight выше
   браузер нарисовал бы поддельный жир алгоритмом, и рядом с латинским Fraunces это
   видно по форме засечек и по ритму. Пусть лучше вес честно не изменится. */
html{font-synthesis-weight:none}

/* ССЫЛКИ - УМОЛЧАНИЕ НУЛЕВОЙ СИЛЫ, И ЭТО ЕДИНСТВЕННОЕ ОТСТУПЛЕНИЕ ОТ СРЕЗА В ЭТОМ ФАЙЛЕ.

   Здесь стояли голые `a`, `a:hover`, `a:visited`. Первое безобидно (0-0-1), но два
   следующих - 0-1-1: ПСЕВДОКЛАСС ДОБАВЛЯЕТ РАЗРЯД, и они бьют любой компонентный класс,
   написанный одним именем. Наружу это вышло на клиентском сайте внутри холста редактора:
   кнопка первого экрана объявлена `.ls-hero__btn{color:var(--ls-acc-on)}` - 0-1-0, - и
   `a:visited` красил её подпись в `--sc-link-visited` (#16345f). На заливке акцента это
   контраст 1.13 у navy-law и провал AA на 22 палитрах из 24: тёмно-синие слова на
   тёмно-синей кнопке. У посетителя дефекта нет - этот файл на сайт не подключается.

   Кнопка ШАПКИ при этом оставалась белой, и владелец спросил почему. Потому что её цвет
   вычисляется и печатается ИНЛАЙНОМ, а инлайн не перебить ничем. То есть два одинаковых на
   вид органа красились двумя разными механизмами, и слабейший проигрывал чужому умолчанию.

   `:where()` даёт нулевую специфичность: умолчание по-прежнему красит все кабинетные
   ссылки, но проигрывает ЛЮБОМУ авторскому правилу, включая одноклассовое. Проверено, что
   ни одно кабинетное правило от этого не меняется: все девять, красящие ссылки, написаны
   двумя классами и выигрывали и раньше. В `settings.css` `a:visited` даже переобъявлен
   локально - с этой помехой уже боролись точечно, здесь она снимается в корне. */
:where(a){color:var(--sc-link);text-decoration-thickness:1px;text-underline-offset:3px}
:where(a:hover){color:var(--sc-link-hover);text-decoration-thickness:2px}
:where(a:visited){color:var(--sc-link-visited)}

:focus-visible{outline:var(--sc-focus-ring-w) solid var(--sc-focus-ring);outline-offset:var(--sc-focus-ring-offset)}

.sc-display,.sc-h1{font-family:var(--sc-font-heading);font-weight:var(--sc-fw-text);margin-block:0;
  padding-block:var(--sc-display-ink-pad)}
.sc-display{font-size:var(--sc-text-display);line-height:var(--sc-lh-display);letter-spacing:var(--sc-ls-display)}
.sc-h1{font-size:var(--sc-text-h1);line-height:var(--sc-lh-h1);letter-spacing:var(--sc-ls-h1)}
.sc-h2{font-family:var(--sc-font-heading);font-size:var(--sc-text-h2);font-weight:var(--sc-fw-text);
  line-height:var(--sc-lh-h2);letter-spacing:var(--sc-ls-h2);margin-block:0}
.sc-h3{font-family:var(--sc-font-heading);font-size:var(--sc-text-h3);font-weight:var(--sc-fw-medium);
  line-height:var(--sc-lh-h3);margin-block:0}
.sc-lead{font-size:var(--sc-text-lead);line-height:var(--sc-lh-lead);color:var(--sc-text-muted);
  max-inline-size:var(--sc-measure);margin-block:0}
.sc-body{font-size:var(--sc-text-body);line-height:var(--sc-lh-body);margin-block:0}
.sc-caption{font-size:var(--sc-text-caption);line-height:var(--sc-lh-caption);color:var(--sc-text-muted)}
.sc-muted{color:var(--sc-text-muted)}
.sc-num{font-variant-numeric:tabular-nums}

/* Дисплейная антиква. Только заголовки лендинга, и вес не выше 400 - см. fonts.css. */
.sc-serif{font-family:var(--sc-font-display);font-weight:var(--sc-fw-display)}

/* Письменность как ось. Числа живут токенами в :root (tokens/typography.css); здесь
   они применяются обычными свойствами, а не переопределением токенов внутри :lang() -
   иначе один и тот же кегль приходит из трёх разных мест. */
:lang(ru) .sc-display,:lang(ru) .sc-h1,:lang(ru) .sc-h2{line-height:var(--sc-lh-heading-ru)}
:lang(he) body,:lang(he) .sc-body,:lang(he) .sc-lead{line-height:var(--sc-lh-body-he)}
:lang(he) .sc-caption{font-size:var(--sc-text-caption-he);line-height:var(--sc-lh-caption-he)}
:lang(he) .sc-btn,:lang(he) .sc-chip{font-size:var(--sc-text-body-sm-he);line-height:var(--sc-lh-body-sm-he)}

/* Поле -1 обязательно: скрытый узел в конце документа ростом во всё окно (подсказка Tab,
   `ghost.js`, кладётся в `body`) выпирал на точку ниже окна, и у кабинета появлялась вторая
   полоса прокрутки рядом с полосой раздела. Замерено в Студии 29.09.2026: 901 при окне 900. */
.sc-visually-hidden{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;border:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* Значков со стороннего адреса на сервисном сайте нет: правило проекта - ноль
   сторонних origin. Всё, что нужно лендингу, нарисовано инлайновым SVG. */

/* Принудительные цветовые режимы Windows: заливки не воспроизводятся, и залитая
   кнопка стала бы невидимой областью. Границу возвращаем принудительно. */
@media (forced-colors:active){
  .sc-btn,.sc-chip,[aria-pressed="true"],[aria-selected="true"]{border:1px solid ButtonBorder;forced-color-adjust:none;background:ButtonFace;color:ButtonText}
  :focus-visible{outline-color:Highlight}
  /* Кольцо в принудительных режимах не воспроизводится вовсе - снимаем, чтобы на
     его месте не осталось пустой рамки другого цвета. */
  .sc-ring::before{display:none}
}

/* Цветовые режимы НАШЕГО виджета доступности. Это не forced-colors, ветка выше на
   них не срабатывает вовсе, а ломают они то же самое: классы atx-cm-* ставят
   border-color с !important на body *, и волосяная линия физически пропадает.

   Специфичность здесь не косметика, а условие срабатывания. Виджет красит
   селектором html.atx-cm-dark body *:not(...) - это (0,2,2). Правило меньшей
   специфичности проигрывает, то есть рамка превью и все разделители теряют
   границу во ВСЕХ цветовых режимах виджета. */
html[class*="atx-cm-"] html[class*="atx-cm-"] .sc-rule,
html[class*="atx-cm-"] html[class*="atx-cm-"] .sc-frame,
html[class*="atx-cm-"]:root .sc-rule,
html[class*="atx-cm-"]:root .sc-frame,
html[class*="atx-cm-"]:root .sc-ambient{
  border-color:currentColor !important;
}

/* ГЛУШЕНИЕ ДВИЖЕНИЯ. Три сигнала снаружи плюс собственная кнопка паузы.

   play-state:paused СУЖЕН до фонового слоя и кольца намеренно. Поставленный на
   `*`, он заморозил бы любой keyframe в начальном кадре по всей странице - то есть
   блок, который появляется анимацией, остался бы невидимым навсегда. Длительность
   1ms гасит движение сама; пауза нужна только там, где анимация бесконечна и её
   надо остановить, а не доиграть. */
@media (prefers-reduced-motion:reduce){
  :where(.sc-ambient,.sc-ring),:where(.sc-ambient,.sc-ring) *{
    animation-play-state:paused !important;
  }
}

html.atx-rm *,
html.atx-rm *::before,
html.atx-rm *::after,
[data-sc-motion="reduce"] *,
[data-sc-motion="reduce"] *::before,
[data-sc-motion="reduce"] *::after{
  transition-duration:1ms !important;
  animation-duration:1ms !important;
  animation-iteration-count:1 !important;
}

html.atx-rm :where(.sc-ambient,.sc-ring),
html.atx-rm :where(.sc-ambient,.sc-ring) *,
[data-sc-motion="reduce"] :where(.sc-ambient,.sc-ring),
[data-sc-motion="reduce"] :where(.sc-ambient,.sc-ring) *{
  animation-play-state:paused !important;
}

/* Контрол паузы на самой странице. Останавливает ТОЛЬКО фоновое движение:
   появления блоков и переходы состояний продолжают работать, иначе нажатие
   «пауза» ломало бы навигацию вместо того, чтобы успокоить страницу.
   Это и есть механизм, которого требует WCAG 2.2.2 - отдельно от тумблера виджета
   доступности и отдельно от системного prefers-reduced-motion. */
html.sc-paused .sc-ambient,
html.sc-paused .sc-ambient *{
  animation-play-state:paused !important;
}

/* ПРИЗНАК `hidden` ОБЯЗАН ГАСИТЬ ВСЁ, ВКЛЮЧАЯ ОРГАНЫ СО СВОИМ `display`. Записанная грабля
   проекта: `[hidden]` из таблицы браузера весит (0,0,0) и проигрывает ЛЮБОМУ классу, который
   объявляет `display` - `.ag-found{display:flex}` показывал спрятанное найденное как ни в чём
   не бывало. Правило одно на тему: иначе каждый такой орган чинят по отдельности и по одному
   же забывают. */
[hidden]{display:none !important}
