/*
    Версия для слабовидящих по ГОСТ Р 52872-2019 — механика ядра.

    Вся палитра сведена к паре переменных --v-bg и --v-ink: новая цветовая
    схема добавляется объявлением одной пары, и контраст проверяется тоже
    по паре (тест ядра считает его, а не оценивает на глаз).

    Кегль задаётся на корне документа в процентах, дальше всё в rem: так
    раскладка пересчитывается целиком, а не растягивается по месту.

    Файл ядра подключается ЛЮБОЙ темой. Всё, что ниже, живёт под классом
    kms-vision на корне, поэтому в обычном виде страницы не значит ничего:
    сайт заказчика не меняется ни на пиксель.
*/

/* Вид кнопки входа и строки настроек — отдельным файлом: у него другой
   повод меняться. Импорт, а не второй <link>: тема подключает один файл. */
@import url("/assets/a11y/panel.css");

/* --- 1. Цветовые схемы: три пары, больше в файле цветов нет --- */

html.kms-vision {
    --v-bg: #ffffff;
    --v-ink: #000000;
}

html.kms-vision[data-vision-scheme="black"] {
    --v-bg: #000000;
    --v-ink: #ffffff;
}

html.kms-vision[data-vision-scheme="blue"] {
    --v-bg: #9dd1ff;
    --v-ink: #063462;
}

/* --- 2. Кегль: три ступени от шрифта браузера --- */
html.kms-vision { font-size: 125%; }
html.kms-vision[data-vision-size="2"] { font-size: 150%; }
html.kms-vision[data-vision-size="3"] { font-size: 175%; }

/* --- 3. Межбуквенный и междусловный интервал --- */
html.kms-vision[data-vision-spacing="2"] body {
    letter-spacing: 0.06em;
    word-spacing: 0.1em;
}

html.kms-vision[data-vision-spacing="3"] body {
    letter-spacing: 0.12em;
    word-spacing: 0.2em;
}

/* --- 4. Набор по умолчанию: цвет страницы для темы, ничего не объявившей.

   Тема может свести СВОИ токены к паре --v-bg/--v-ink точнее (файл
   /assets/a11y/themes/<тема>.css). Если не свела — работает этот сброс, и
   режим всё равно читается: гарантия продукта не должна зависеть от того,
   вспомнил ли автор темы про ГОСТ.

   background-color здесь на элементах, но не на псевдоэлементах: сплошная
   заливка декоративного слоя ::before накрыла бы текст под собой, а
   прозрачный слой безвреден. --- */

html.kms-vision,
html.kms-vision body {
    color: var(--v-ink);
    background-color: var(--v-bg);
}

html.kms-vision * {
    color: var(--v-ink) !important;
    background-color: var(--v-bg) !important;
    border-color: var(--v-ink) !important;
    outline-color: var(--v-ink) !important;
    background-image: none !important;
    box-shadow: none !important;
    text-shadow: none !important;
    filter: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    opacity: 1 !important;
    /* Маска-градиент растворяет край картинки или текста: в режиме растворять
       нечего, всё либо показано целиком, либо убрано. */
    -webkit-mask-image: none !important;
    mask-image: none !important;
    /* Переход цвета длиной в полсекунды на смене схемы — та же вспышка, от
       которой избавляет ранний скрипт, только в конце. */
    transition: none !important;
}

html.kms-vision *::before,
html.kms-vision *::after {
    color: var(--v-ink) !important;
    background-color: transparent !important;
    background-image: none !important;
    box-shadow: none !important;
    opacity: 1 !important;
}

/* Подсказка в пустом поле — отдельный псевдоэлемент со своим цветом:
   правило выше до неё не достаёт, а бледная подсказка в режиме нечитаема. */
html.kms-vision ::placeholder {
    color: var(--v-ink) !important;
    opacity: 1 !important;
}

/* Значки нарисованы линией или заливкой по currentColor — цвет уже задан
   выше. Значки с зашитым цветом приводим к схеме здесь. */
html.kms-vision svg [fill]:not([fill="none"]) { fill: currentColor !important; }
html.kms-vision svg [stroke]:not([stroke="none"]) { stroke: currentColor !important; }

/* Ссылка в режиме подчёркнута всегда: цвет её больше не отличает. */
html.kms-vision a { text-decoration: underline; text-underline-offset: 0.2em; }
html.kms-vision a.kms-vision-option,
html.kms-vision .kms-vision-bar a { text-decoration: none; }

html.kms-vision :focus-visible {
    outline: 3px solid var(--v-ink) !important;
    outline-offset: 2px;
}

/* --- 5. Изображения --- */

html.kms-vision[data-vision-images="off"] img,
html.kms-vision[data-vision-images="off"] picture,
html.kms-vision[data-vision-images="off"] video {
    display: none !important;
}

/* Описание вместо картинки: пустое место — потеря содержимого, а не помощь.
   Узел создаёт vision.js и только в режиме «без изображений». */
.kms-vision-alt { display: none; }

/* Гнездо картинки обычно скроено под неё: своя высота, обрезка по краю,
   соотношение сторон. Описание в таком гнезде оказалось бы подрезанным —
   на месте картинки посетитель прочитал бы половину слова. */
html.kms-vision[data-vision-images="off"] *:has(> .kms-vision-alt) {
    height: auto !important;
    min-height: 0 !important;
    max-height: none !important;
    overflow: visible !important;
    aspect-ratio: auto !important;
    clip-path: none !important;
}

html.kms-vision[data-vision-images="off"] .kms-vision-alt {
    display: block;
    padding: 0.5em 0.75em;
    border: 2px dashed var(--v-ink);
    font-style: italic;
}
