/* GENERATED BRAND START: site-src/scripts/gen-theme.mjs */
html:root {
  --samcs-brand-indigo: #10069F;
  --samcs-brand-orange: #FF7500;
  --samcs-brand-blue: #2B91FD;
  --samcs-brand-ink: #101828;
  --samcs-brand-ink-2: #292C34;
  --samcs-brand-text-2: #575D68;
  --samcs-brand-text-3: #868B95;
  --samcs-brand-line: #B8B9C0;
  --samcs-brand-field-line: #868B95;
  --samcs-brand-bg-1: #F3F3F4;
  --samcs-brand-bg-2: #E7E7E9;
  --samcs-brand-canvas: #FFFFFF;
  --samcs-brand-accent: #10069F;
  --samcs-brand-accent-fg: #FFFFFF;
  --samcs-brand-accent-soft: #F3F3FA;
  --samcs-brand-accent-line: #C1BEE6;
  --samcs-brand-danger: #C01048;
  --samcs-brand-danger-hover: #A11043;
  --samcs-brand-danger-soft: #FFF1F3;
  --samcs-brand-danger-line: #FECDD6;
  --samcs-brand-warn: #B54708;
  --samcs-brand-warn-hover: #93370D;
  --samcs-brand-warn-soft: #FFFAEB;
  --samcs-brand-warn-line: #FEDF89;
  --samcs-brand-ok: #027A48;
  --samcs-brand-ok-hover: #05603A;
  --samcs-brand-ok-soft: #ECFDF3;
  --samcs-brand-ok-line: #6CE9A6;
  --samcs-brand-info: #0B539E;
  --samcs-brand-info-hover: #08427E;
  --samcs-brand-info-soft: #E7F1FD;
  --samcs-brand-info-line: #C3DFFD;
  --samcs-brand-accent-dark: #9691D5;
  --samcs-brand-accent-dark-fg: #0B0C0F;
  --samcs-brand-font-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  --samcs-brand-indigo-50: #F3F3FA;
  --samcs-brand-indigo-100: #E2E1F3;
  --samcs-brand-indigo-200: #C1BEE6;
  --samcs-brand-indigo-300: #9691D5;
  --samcs-brand-indigo-400: #5851BC;
  --samcs-brand-indigo-500: #10069F;
  --samcs-brand-indigo-600: #0E058A;
  --samcs-brand-indigo-700: #0B046F;
  --samcs-brand-indigo-800: #080353;
  --samcs-brand-indigo-900: #060239;
  --samcs-brand-indigo-950: #040123;
  --samcs-brand-orange-50: #FFF8F2;
  --samcs-brand-orange-100: #FFEEE0;
  --samcs-brand-orange-200: #FFDBBD;
  --samcs-brand-orange-300: #FFC28F;
  --samcs-brand-orange-400: #FF9E4D;
  --samcs-brand-orange-500: #FF7500;
  --samcs-brand-orange-600: #DE6600;
  --samcs-brand-orange-700: #B35200;
  --samcs-brand-orange-800: #853D00;
  --samcs-brand-orange-900: #5C2A00;
  --samcs-brand-orange-950: #381A00;
  --samcs-brand-dark-50: #21202F;
  --samcs-brand-dark-100: #2D2C40;
  --samcs-brand-dark-200: #3C3A55;
  --samcs-brand-dark-300: #625E8A;
  --samcs-brand-dark-400: #807BB5;
  --samcs-brand-dark-500: #9691D5;
  --samcs-brand-dark-600: #A6A2DB;
  --samcs-brand-dark-700: #B6B2E2;
  --samcs-brand-dark-800: #CBC8EA;
  --samcs-brand-dark-900: #E0DEF2;
  --samcs-brand-dark-950: #F5F4FB;
  --samcs-brand-indigo-h: 243.92deg;
  --samcs-brand-indigo-s: 92.73%;
  --samcs-brand-indigo-l: 32.35%;
  --samcs-brand-dark-h: 244.41deg;
  --samcs-brand-dark-s: 44.74%;
  --samcs-brand-dark-l: 70.20%;
}
/* GENERATED BRAND END */
/*
 * White-label ФПМИ для Vikunja (tasks.samcs.ru).
 * Отдаётся порталом, вставляется тегом <link> через Caddy (см.
 * platform/networking/ingress/conf.d/tasks.samcs.ru.caddy). Образ Vikunja не патчится —
 * перекраска переживает bump тега.
 *
 * ПОЧЕМУ ТОКЕНЫ, А НЕ СЕЛЕКТОРЫ КОМПОНЕНТОВ
 * Vikunja собрана на Bulma 1.x: основной тон разложен на составляющие
 * (--primary-h / -s / -l), а сам --primary — hsla() поверх них. Производные
 * (--primary-dark для ховера, --primary-light, --link: var(--primary),
 * полупрозрачные hsla(var(--primary-hsl), .1)) считаются оттуда же. Переопределяя
 * ТРИ числа, попадаем в штатную точку расширения и получаем все производные
 * разом. Отвал файла деградирует к родному синему, вёрстка цела.
 *
 * ⚠️ Vue-хэши в селекторах ([data-v-f61edaac]) НЕ использовать: они меняются на
 * каждой сборке апстрима, и правило умрёт молча при первом же bump'е.
 *
 * ⚠️ Шрифт не трогаем. Vikunja везёт свой Open Sans; замена на брендовый Inter
 * означала бы ПЯТУЮ копию Inter в контуре (login/admin/account-темы Keycloak,
 * Nextcloud, edu-welcome уже возят свои) — против §15 конституции «один факт —
 * одно место». Видимая часть бренда (тон, логотип, favicon, имя вкладки)
 * доезжает и без этого.
 *
 * ⚠️ AGPL Vikunja: копирайт, ссылку на исходники и версию в «О Vikunja» не
 * трогаем — здесь только оформление и скрытие НАШИХ же пунктов настроек.
 *
 * Значения — точный перевод брендовых hex в HSL, не подбор на глаз:
 *   #10069F → hsl(243.9deg 92.7% 32.4%)   основной индиго (светлая тема)
 *   #9691D5 → hsl(244.4deg 44.7% 70.2%)   акцент тёмной темы, канон пульта
 */

/* ── Светлая тема ─────────────────────────────────────────────────────────
   Родное у Vikunja: h 217 / s 98% / l 53% — «электрик». Заменяем на #10069F.
   Белый текст на нём — 13.56:1 (норма 4.5), это штатный --button-text-color,
   трогать его в светлой теме не нужно.
   --primary-dark-l родное 29% — при нашем основном 32.4% ховер стал бы
   неотличим от покоя; опускаем до 22%, разница читается.
   --primary-light-l (96%) оставляем как есть: это фон бледных плашек. */
:root {
	--primary-h: var(--samcs-brand-indigo-h);
	--primary-s: var(--samcs-brand-indigo-s);
	--primary-l: var(--samcs-brand-indigo-l);
	--primary-dark-l: 22%;
}

/* ── Тёмная тема ──────────────────────────────────────────────────────────
   Селектор апстрима — :root.dark (класс вешает JS-схема Vikunja; отдельного
   prefers-color-scheme в его CSS НЕТ, «авто» резолвится тем же классом, поэтому
   одного правила достаточно — проверено grep'ом по index-*.css образа 2.5.0).

   ⚠️ Брендовый #10069F на тёмном фоне нечитаем (замер в теме Directus: 1.4:1).
   Осветлённый индиго #5B4FF0 владелец забраковал как «фиолетовый, не наш цвет»
   (2026-08-19, перекраска n8n) — не возвращать. Канон взят у самого пульта:
   тёмная тема work.samcs.ru держит --color-fpmi-accent #9691D5 с ТЁМНЫМ текстом
   поверх (--color-fpmi-accent-fg #0B0C0F). Здесь та же пара. */
:root.dark {
	--primary-h: var(--samcs-brand-dark-h);
	--primary-s: var(--samcs-brand-dark-s);
	--primary-l: var(--samcs-brand-dark-l);
	/* Ховер в тёмной теме — светлее покоя, а не темнее: на светлом акценте
	   затемнение читается как «выключено». */
	--primary-dark-l: 79%;
}

/* Текст основной кнопки в тёмной теме.
   Vikunja красит .button.is-primary в var(--button-text-color) = #fff, и
   --primary-invert (штатный «инверсный» токен Bulma) она не использует вовсе —
   переопределять его бесполезно. Белый на #9691D5 даёт 2.87:1, ниже нормы;
   тёмный #0B0C0F — 6.81:1.
   --button-text-color целиком не трогаем: он же красит is-danger/is-success,
   а тёмный текст на красном — уже своя ошибка.
   !important здесь обязателен: у правила апстрима есть Vue-хэш
   (.button.is-primary[data-v-…]), то есть специфичность выше нашей, а
   повторять хэш нельзя — он меняется каждой сборкой. */
:root.dark .button.is-primary {
	color: var(--samcs-brand-accent-dark-fg) !important;
}

/* ── Лишние пункты личных настроек ────────────────────────────────────────
   ⚠️ ЭТО КОСМЕТИКА, А НЕ ЗАЩИТА. Реальный запрет — 404 на API в
   tasks.samcs.ru.caddy; здесь лишь убран пункт меню, чтобы человек не жал на
   заведомо мёртвую ссылку. Порядок обратный (сначала периметр, потом стиль)
   специально: стиль может не доехать, периметр — нет.

   Чего в списке НЕТ и почему:
     общие / аватар / сеансы     — нужны, остаются;
     пароль / email / TOTP       — апстрим сам не рисует их SSO-учётке
                                   (condition: isLocalUser в Settings.vue);
     CalDAV / вебхуки            — сняты флагами в config.yml;
     удаление аккаунта           — снято флагом enableuserdeletion.

   Селектор по href, а не по позиции и не по подписи: подписи локализованы
   («Токены API» / «API Tokens»), а порядок пунктов апстрим меняет.
   Прячем И пункт меню, И любую другую ссылку на тот же роут — на ленты,
   например, ведёт ещё и выпадашка уведомлений (class="feed-link").
   Разметка меню на 2.5.0: nav.navigation > ul > li > a.navigation-link. */
.navigation li:has(> a[href^="/user/settings/data-export"]),
.navigation li:has(> a[href^="/user/settings/migrate"]),
.navigation li:has(> a[href^="/user/settings/feeds"]),
.navigation li:has(> a[href^="/user/settings/bots"]),
a[href^="/user/settings/data-export"],
a[href^="/user/settings/migrate"],
a[href^="/user/settings/feeds"],
a[href^="/user/settings/bots"] {
	display: none !important;
}

/* ── Вендорские следы на главных поверхностях (I2, обход 2026-08-26) ───────
   Лама в очках — бренд-маскот апстрима в пустом состоянии «Делать нечего»;
   «При поддержке Vikunja» — внешняя ссылка на вендора в сайдбаре.
   Кнопка «Импорт данных в Vikunja» на главной уже накрыта селектором
   a[href^="/user/settings/migrate"] выше (тот же роут); абзац-подпись
   «Импортировать проекты и задачи…» — предыдущий сиблинг этой кнопки
   (:has с соседним комбинатором; устойчивых классов у абзаца нет).
   Всё — косметика; роут migrate закрыт 404 на периметре (блок
   @disabled_settings в tasks.samcs.ru.caddy). */
svg.llama-cool,
a[href^="https://vikunja.io"],
a[href^="//vikunja.io"],
a[href="https://vikunja.io/"],
p:has(+ a[href^="/user/settings/migrate"]) {
	display: none !important;
}
