

        /* ----- Alpine.js x-cloak: скрывает элементы до инициализации Alpine ----- */

        [x-cloak] { display: none !important; }



        /* ================================================================

           ORIKAN.RU — DESIGN SYSTEM v2.0

           «Каждая истина — это ложь, ждущая пересборки»

           Тема: Некронский архив / Техно-готика

           Акцент: #00ff88 (некроновский зелёный)

           ================================================================ */



        /* ----- CSS ПЕРЕМЕННЫЕ ----- */

        :root {

            /* Фон */

            --ok-bg:         #0a0a0f;

            --ok-bg-deeper:  #06060a;

            --ok-surface:    #111118;

            --ok-surface-2:  #16161f;

            --ok-surface-3:  #1c1c28;

            --ok-surface-4:  #222230;



            /* Текст */

            --ok-text:       #c8d0d8;

            --ok-text-dim:   #7d8b9a;

            --ok-text-muted: #7d8c9b;



            /* Акцент — некроновский зелёный */

            --ok-accent:         #00ff88;

            --ok-accent-dim:     #00cc6a;

            --ok-accent-bg:      rgba(0, 255, 136, 0.06);

            --ok-accent-bg-2:    rgba(0, 255, 136, 0.10);

            --ok-accent-glow:    0 0 20px rgba(0, 255, 136, 0.15);

            --ok-accent-glow-lg: 0 0 40px rgba(0, 255, 136, 0.25);

            --ok-accent-text-shadow: 0 0 8px rgba(0, 255, 136, 0.4);



            /* Металл */

            --ok-metal:      #2a2a3a;

            --ok-metal-light:#3a3a4e;



            /* Границы */

            --ok-border:     #1e1e2e;

            --ok-border-light:#2e2e40;

            --ok-border-accent: rgba(0, 255, 136, 0.3);



            /* Статусы */

            --ok-success:    #00ff88;

            --ok-warning:    #f0a030;

            --ok-error:      #ff4444;

            --ok-info:       #58a6ff;



            /* Высота (elevation): глубина без изменения заливки —
               контраст текста на поверхности от неё не страдает */

            --ok-elev-1: 0 1px 2px rgba(0, 0, 0, 0.45),
                         inset 0 1px 0 rgba(255, 255, 255, 0.04);

            --ok-elev-2: 0 6px 18px rgba(0, 0, 0, 0.55),
                         inset 0 1px 0 rgba(255, 255, 255, 0.05);

            /* Радиусы */

            --ok-radius-sm: 4px;

            --ok-radius-md: 8px;

            --ok-radius-lg: 12px;



            /* Переходы */

            --ok-trans-fast: 0.15s ease;

            --ok-trans-base: 0.25s ease;

            --ok-trans-slow: 0.4s ease;



            /* Шрифты — CSS-переменные */

            --font-heading:  'Cinzel', 'Orbitron', serif;

            --font-body:     'Inter', system-ui, -apple-system, sans-serif;

            --font-mono:     'JetBrains Mono', 'Cascadia Code', 'Fira Code', monospace;

        }

        /* ===== ORI-55: мост Bootstrap 5.3 -> токены Orikan =====
           Bootstrap подключён раньше orikan.css и до сих пор работал в светлой
           теме: .form-control не имеет ни одного правила в этом файле и
           рендерился белым на #0a0a0f, а обычные ссылки шли дефолтным #0d6efd
           (контраст 4.39:1 на фоне страницы — ниже AA для обычного текста).
           data-bs-theme="dark" на <html> включает тёмную палитру Bootstrap,
           а этот блок подменяет её собственные серые на наши токены, чтобы
           бутстраповские компоненты не тянули за собой чужой оттенок. */
        [data-bs-theme="dark"] {

            --bs-body-bg:          var(--ok-bg);

            --bs-body-color:       var(--ok-text);

            --bs-secondary-color:  var(--ok-text-dim);

            --bs-secondary-bg:     var(--ok-surface-2);

            --bs-tertiary-bg:      var(--ok-surface-3);

            --bs-border-color:     var(--ok-border-light);

            --bs-emphasis-color:   #ffffff;

        }

        /* Checked-состояние чекбоксов и радио Bootstrap задаёт жёстким #0d6efd,
           не переменной, — тёмная тема его не меняет. Замер на живой странице
           /graph/: 13 контролов .form-check-input, невыбранные белые (#ffffff),
           выбранные синие. Невыбранные чинит мост выше (их фон — --bs-body-bg),
           выбранные приходится переопределять явно.
           Галочку перекрашиваем в тёмную: белая на акценте даёт 2.13:1, тёмная —
           9.26:1 при пороге 3:1 для графических объектов (WCAG 1.4.11). */
        .form-check-input:checked {

            background-color: var(--ok-accent-dim);

            border-color: var(--ok-accent-dim);

        }

        .form-check-input:checked[type="checkbox"] {

            --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%230a0a0f' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");

        }

        .form-check-input:checked[type="radio"] {

            --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%230a0a0f'/%3e%3c/svg%3e");

        }



        /* ----- СБРОС ----- */

        *, *::before, *::after { box-sizing: border-box; }

        img { max-width: 100%; height: auto; }



        /* ----- БАЗА ----- */

        body {

            background: var(--ok-bg);

            color: var(--ok-text);

            font-family: var(--font-body);

            line-height: 1.65;

            font-size: 0.95rem;

            -webkit-font-smoothing: antialiased;

            -moz-osx-font-smoothing: grayscale;

        }



        /* ----- СКРОЛЛБАР ----- */

        ::-webkit-scrollbar { width: 6px; height: 6px; }

        ::-webkit-scrollbar-track { background: var(--ok-bg-deeper); }

        ::-webkit-scrollbar-thumb { background: var(--ok-metal); border-radius: 3px; }

        ::-webkit-scrollbar-thumb:hover { background: var(--ok-metal-light); }

        /* Firefox scrollbar */

        html {

            scrollbar-width: thin;

            scrollbar-color: var(--ok-metal) var(--ok-bg-deeper);

        }



        /* ----- ФОКУС: accessibility ----- */

        :focus-visible {

            outline: 2px solid var(--ok-accent);

            outline-offset: 2px;

            border-radius: 2px;

        }

        .btn:focus-visible, a:focus-visible {

            outline: 2px solid var(--ok-accent);

            outline-offset: 2px;

        }

        .tag-chip:focus-visible {

            outline: 2px solid var(--ok-accent);

            outline-offset: 1px;

            background: var(--ok-accent-bg-2);

        }

        .entity-card:focus-visible, .card:focus-visible {

            outline: 2px solid var(--ok-accent);

            outline-offset: -2px;

            border-color: var(--ok-accent);

        }



        /* ================================================================

           ТИПОГРАФИКА

           ================================================================ */



        /* Заголовки — готический шрифт */

        h1, h2, h3, h4, h5, h6 {

            font-family: var(--font-heading);

            font-weight: 600;

            letter-spacing: 0.02em;

            color: var(--ok-text);

        }

        h1 {

            font-weight: 800;

            letter-spacing: 0.04em;

            text-transform: uppercase;

            color: var(--ok-accent);

            text-shadow: var(--ok-accent-text-shadow);

        }

        h2 {

            font-weight: 700;

            letter-spacing: 0.03em;

            color: var(--ok-accent-dim);

        }

        h3 {

            font-weight: 600;

            letter-spacing: 0.02em;

        }

        h4, h5, h6 {

            font-family: var(--font-body);

            letter-spacing: 0.01em;

            color: var(--ok-text-dim);

        }



        /* Параграфы */

        p { color: var(--ok-text); }

        .lead {

            font-weight: 300;

            color: var(--ok-text-dim);

            letter-spacing: 0.01em;

        }



        /* Моноширинный — для кода, данных, цифр */

        code, pre, .font-mono, .mono {

            font-family: var(--font-mono);

            font-size: 0.88em;

            color: var(--ok-accent);

        }

        code {

            background: var(--ok-surface-2);

            padding: 2px 6px;

            border-radius: var(--ok-radius-sm);

            border: 1px solid var(--ok-border);

        }

        pre {

            background: var(--ok-surface);

            border: 1px solid var(--ok-border);

            border-left: 3px solid var(--ok-accent);

            padding: 1rem;

            border-radius: var(--ok-radius-md);

            overflow-x: auto;

        }



        /* Цитаты — блок с зелёной полосой */

        blockquote, .blockquote {

            border-left: 3px solid var(--ok-accent);

            padding: 0.75rem 1.25rem;

            margin: 1rem 0;

            background: var(--ok-accent-bg);

            border-radius: 0 var(--ok-radius-md) var(--ok-radius-md) 0;

            font-style: italic;

            color: var(--ok-text-dim);

        }

        blockquote footer, .blockquote-footer {

            color: var(--ok-text-muted);

            font-size: 0.82rem;

            margin-top: 0.5rem;

            font-style: normal;

            font-family: var(--font-body);

        }
        /* Кликабельные цитаты: ссылки на спикера и источник */
        a.quote-link {
            color: inherit;
            cursor: pointer;
            border-radius: 6px;
            transition: background 0.15s ease;
        }
        a.quote-link:hover {
            color: inherit;
            background: rgba(0, 255, 136, 0.04);
        }
        a.quote-link:hover .bi-quote { color: var(--ok-accent); }
        a.quote-speaker-link, a.quote-source-link {
            color: rgba(0, 255, 136, 0.75);
            text-decoration: none;
            transition: color 0.15s ease;
        }
        a.quote-speaker-link:hover, a.quote-source-link:hover {
            color: var(--ok-accent);
            text-decoration: underline dotted;
            text-underline-offset: 3px;
        }



        /* Подписи, сноски */

        .text-xs  { font-size: 0.7rem; }

        .text-sm  { font-size: 0.82rem; }

        .text-dim { color: var(--ok-text-dim) !important; }

        .text-muted-override { color: var(--ok-text-muted) !important; }



        /* ================================================================

           УТИЛИТЫ

           ================================================================ */

        .min-w-0 { min-width: 0; }

        .text-accent { color: var(--ok-accent) !important; }

        .text-accent-dim { color: var(--ok-accent-dim) !important; }

        .border-ok { border-color: var(--ok-border) !important; }

        .bg-surface { background: var(--ok-surface) !important; }

        .bg-surface-2 { background: var(--ok-surface-2) !important; }



        /* Bootstrap text overrides */

        .text-muted { color: var(--ok-text-dim) !important; }

        .text-secondary { color: var(--ok-text-dim) !important; }

        .text-light { color: var(--ok-text) !important; }

        .text-warning { color: var(--ok-warning) !important; }



        /* ================================================================

           НАВБАР

           ================================================================ */

        .navbar {

            background: var(--ok-surface) !important;

            border-bottom: 2px solid var(--ok-accent);

            box-shadow: 0 1px 20px rgba(0, 255, 136, 0.06);

        }

        .navbar-brand {

            font-family: var(--font-heading);

            color: var(--ok-accent) !important;

            font-weight: 800;

            letter-spacing: 0.06em;

            text-transform: uppercase;

            font-size: 1.2rem;

            text-shadow: 0 0 12px rgba(0, 255, 136, 0.3);

            transition: text-shadow var(--ok-trans-base);

        }

        .navbar-brand:hover {

            text-shadow: 0 0 24px rgba(0, 255, 136, 0.6);

        }

        .navbar-toggler {

            border-color: var(--ok-border-light);

        }

        .navbar-toggler-icon {

            background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 255, 136, 0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");

        }

        .navbar-toggler:focus {

            box-shadow: 0 0 0 0.2rem rgba(0, 255, 136, 0.2);

        }

        .navbar .nav-link {

            color: var(--ok-text-dim) !important;

            font-family: var(--font-heading);

            font-size: 0.85rem;

            letter-spacing: 0.03em;

            text-transform: uppercase;

            transition: color var(--ok-trans-fast), text-shadow var(--ok-trans-fast);

        }

        .navbar .nav-link:hover {

            color: var(--ok-accent) !important;

            text-shadow: 0 0 8px rgba(0, 255, 136, 0.3);

        }



        /* ================================================================

           КНОПКИ — Некронский стиль

           ================================================================ */

        .btn {

            font-family: var(--font-body);

            font-weight: 500;

            letter-spacing: 0.01em;

            border-radius: var(--ok-radius-sm);

            transition: all var(--ok-trans-base);

        }

        .btn-primary {

            background: transparent;

            border: 1px solid var(--ok-accent);

            color: var(--ok-accent);

            font-weight: 600;

            text-transform: uppercase;

            letter-spacing: 0.04em;

            font-family: var(--font-heading);

            font-size: 0.85rem;

        }

        .btn-primary:hover {

            background: var(--ok-accent);

            color: var(--ok-bg);

            box-shadow: var(--ok-accent-glow);

            border-color: var(--ok-accent);

        }

        .btn-primary:active {

            background: var(--ok-accent-dim) !important;

            border-color: var(--ok-accent-dim) !important;

        }

        .btn-outline-secondary {

            border-color: var(--ok-border-light);

            color: var(--ok-text-dim);

        }

        .btn-outline-secondary:hover {

            border-color: var(--ok-accent);

            color: var(--ok-accent);

            background: var(--ok-accent-bg);

        }

        .btn-outline-warning {

            border-color: var(--ok-accent-dim);

            color: var(--ok-accent-dim);

        }

        .btn-outline-warning:hover {

            background: var(--ok-accent-bg-2);

            border-color: var(--ok-accent);

            color: var(--ok-accent);

            box-shadow: var(--ok-accent-glow);

        }

        .btn-outline-info {

            border-color: var(--ok-info);

            color: var(--ok-info);

        }

        .btn-outline-info:hover {

            background: rgba(88, 166, 255, 0.1);

            border-color: var(--ok-info);

            color: #fff;

        }

        .btn-sm {

            font-size: 0.78rem;

            padding: 0.3rem 0.7rem;

        }



        /* ================================================================

           КАРТОЧКИ — Эффект металлической поверхности

           ================================================================ */

        .card {

            background: var(--ok-surface);

            /* ORI-55: --ok-border давал 1.146:1 к собственной заливке карточки —
               рамка практически не читалась, и карточка сливалась с фоном.
               --ok-border-light (уже существующий токен) даёт 1.415:1. */

            border: 1px solid var(--ok-border-light);

            box-shadow: var(--ok-elev-1);

            color: var(--ok-text);

            border-radius: var(--ok-radius-md);

            /* Металлический градиент */

            background-image:

                linear-gradient(180deg,

                    rgba(255,255,255,0.015) 0%,

                    transparent 40%,

                    rgba(0,0,0,0.2) 100%);

            transition: all var(--ok-trans-base);

        }

        .card:hover {

            border-color: var(--ok-accent);

            box-shadow: var(--ok-accent-glow), var(--ok-elev-1);

        }

        .card .card-title {

            font-family: var(--font-heading);

            color: var(--ok-accent);

            font-weight: 600;

            letter-spacing: 0.02em;

        }

        .card .card-text {

            color: var(--ok-text-dim);

        }



        /* Карточка сущности */

        .entity-card {

            transition: all var(--ok-trans-base);

            border-radius: var(--ok-radius-md);

        }

        .entity-card:hover {

            transform: translateY(-2px);

            box-shadow: var(--ok-accent-glow);

            border-color: var(--ok-accent) !important;

        }



        /* Карточка книги */

        .book-card {

            transition: all var(--ok-trans-base);

            border-radius: var(--ok-radius-md);

        }

        .book-card:hover {

            border-color: var(--ok-accent) !important;

            box-shadow: var(--ok-accent-glow);

        }



        /* ================================================================

           ФОРМЫ / ПОИСК

           ================================================================ */

        .search-input {

            background: var(--ok-bg-deeper);

            border: 2px solid var(--ok-border);

            color: var(--ok-text);

            font-size: 1rem;

            padding: 12px 18px;

            border-radius: var(--ok-radius-md);

            font-family: var(--font-body);

            transition: all var(--ok-trans-base);

        }

        .search-input:focus {

            border-color: var(--ok-accent);

            box-shadow: 0 0 0 0.25rem rgba(0, 255, 136, 0.15);

            background: var(--ok-bg);

            color: var(--ok-text);

            outline: none;

        }

        .search-input::placeholder {

            color: var(--ok-text-muted);

            font-style: italic;

        }

        .form-select {

            background-color: var(--ok-surface);

            border-color: var(--ok-border);

            color: var(--ok-text);

        }

        .form-select:focus {

            border-color: var(--ok-accent);

            box-shadow: 0 0 0 0.2rem rgba(0, 255, 136, 0.15);

        }



        /* ================================================================

           БЕЙДЖИ

           ================================================================ */

        .stat-badge {

            background: var(--ok-surface-3);

            color: var(--ok-text-dim);

            font-size: 0.68rem;
            padding: 2px 7px;

            border-radius: 3px;

            border: 1px solid var(--ok-border);

            font-family: var(--font-mono);

        }

        .badge.bg-secondary {

            background: var(--ok-surface-3) !important;

            color: var(--ok-text-dim) !important;

            border: 1px solid var(--ok-border);

        }

        .badge.bg-dark {

            background: var(--ok-surface-2) !important;

            color: var(--ok-text-dim) !important;

            border: 1px solid var(--ok-border);

        }

        .badge.bg-info {

            background: rgba(88, 166, 255, 0.15) !important;

            color: var(--ok-info) !important;

            border: 1px solid rgba(88, 166, 255, 0.3);

        }

        .badge.bg-warning {

            background: rgba(240, 160, 48, 0.15) !important;

            color: var(--ok-warning) !important;

            border: 1px solid rgba(240, 160, 48, 0.3);

        }

        .badge-type {

            background: var(--ok-surface-3);

            color: var(--ok-text-dim);

            border: 1px solid var(--ok-border);

            font-weight: 500;

            font-size: 0.72rem;

        }



        /* ----- ТЕГ-ЧИПЫ ----- */

        .tag-chip {

            display: inline-flex;

            align-items: center;

            padding: 3px 10px;

            background: var(--ok-surface-2);

            color: var(--ok-text-dim);

            border: 1px solid var(--ok-border);

            border-radius: 20px;

            font-size: 0.75rem;

            transition: all var(--ok-trans-fast);

        }

        .tag-chip:hover {

            background: var(--ok-accent-bg);

            border-color: var(--ok-accent);

            color: var(--ok-accent);

        }



        /* ================================================================

           ТАБЫ

           ================================================================ */

        .tab-content { padding-top: 1rem; }

        .nav-tabs {

            border-bottom: 1px solid var(--ok-border);

        }

        .nav-tabs .nav-link {

            color: var(--ok-text-dim);

            border: none;

            white-space: nowrap;

            font-family: var(--font-heading);

            font-size: 0.82rem;

            letter-spacing: 0.03em;

            text-transform: uppercase;

            padding: 0.5rem 1rem;

            transition: all var(--ok-trans-fast);

        }

        .nav-tabs .nav-link:hover {

            color: var(--ok-accent);

        }

        .nav-tabs .nav-link.active {

            color: var(--ok-accent);

            background: transparent;

            border-bottom: 2px solid var(--ok-accent);

            text-shadow: 0 0 6px rgba(0, 255, 136, 0.3);

        }

        .nav-tabs-scroll {

            display: flex;

            flex-wrap: nowrap;

            overflow-x: auto;

            -webkit-overflow-scrolling: touch;

            scrollbar-width: none;

        }

        .nav-tabs-scroll::-webkit-scrollbar { display: none; }



        /* ================================================================

           ТАБЛИЦЫ

           ================================================================ */

        .table-dark {

            --bs-table-bg: var(--ok-surface);

            --bs-table-color: var(--ok-text);

            --bs-table-border-color: var(--ok-border);

        }

        .table-dark td, .table-dark th {

            color: var(--ok-text);

        }



        /* ================================================================

           ТАЙМЛАЙН

           ================================================================ */

        .timeline-item {

            border-left: 2px solid var(--ok-accent);

            padding-left: 1rem;

            margin-bottom: 0.5rem;

        }



        /* ================================================================

           СКОР-БАР

           ================================================================ */

        .score-bar {

            height: 4px;

            background: var(--ok-border);

            border-radius: 2px;

            overflow: hidden;

        }

        .score-fill {

            height: 100%;

            background: var(--ok-accent);

            transition: width 0.3s ease;

            box-shadow: 0 0 6px rgba(0, 255, 136, 0.3);

        }



        /* ================================================================

           ENTITY ICON

           ================================================================ */

        .entity-icon {

            width: 48px;

            height: 48px;

            border-radius: 4px;

            background: var(--ok-surface-2);

            border: 1px solid var(--ok-border);

            display: flex;

            align-items: center;

            justify-content: center;

            font-size: 1.4rem;

            color: var(--ok-accent);

        }



        /* ================================================================

           AI БЕЙДЖИ

           ================================================================ */

        .ai-processed {

            background: rgba(0, 255, 136, 0.1);

            color: var(--ok-success);

            border: 1px solid rgba(0, 255, 136, 0.3);

        }

        .ai-partial {

            background: rgba(240, 160, 48, 0.1);

            color: var(--ok-warning);

            border: 1px solid rgba(240, 160, 48, 0.3);

        }

        .ai-not-processed {

            background: var(--ok-surface-2);

            color: var(--ok-text-muted);

            border: 1px solid var(--ok-border);

        }

        .ai-needs-review {

            background: rgba(255, 68, 68, 0.1);

            color: var(--ok-error);

            border: 1px solid rgba(255, 68, 68, 0.3);

        }



        /* ================================================================

           МОДАЛЬНОЕ ОКНО ОБРАТНОЙ СВЯЗИ (custom, не Bootstrap)

           ================================================================ */

        .feedback-overlay {

            position: fixed;

            inset: 0;

            background: rgba(0,0,0,0.7);

            z-index: 1055;

            display: flex;

            align-items: center;

            justify-content: center;

            padding: 1rem;

        }

        .feedback-dialog {

            width: 100%;

            max-width: 500px;

        }

        .feedback-content {

            background: var(--ok-surface);

            border: 1px solid var(--ok-border);

            border-radius: var(--ok-radius-md);

            color: var(--ok-text);

            /* металлический градиент как у карточек */

            background-image:

                linear-gradient(180deg,

                    rgba(255,255,255,0.015) 0%,

                    transparent 40%,

                    rgba(0,0,0,0.2) 100%);

        }

        .feedback-header {

            display: flex;

            justify-content: space-between;

            align-items: center;

            padding: 1rem 1rem 0.75rem;

            border-bottom: 1px solid var(--ok-border);

        }

        .feedback-header h5 {

            margin: 0;

            color: var(--ok-accent);

            font-family: var(--font-heading);

            letter-spacing: 0.02em;

        }

        .feedback-body {

            padding: 1rem;

        }

        .feedback-footer {

            display: flex;

            justify-content: flex-end;

            gap: 0.5rem;

            padding: 0.75rem 1rem 1rem;

            border-top: 1px solid var(--ok-border);

        }



        /* ================================================================

           ТОСТ

           ================================================================ */

        .feedback-toast {

            position: fixed;

            bottom: 20px;

            right: 20px;

            z-index: 1055;

            background: var(--ok-surface);

            border: 1px solid var(--ok-accent);

            color: var(--ok-text);

            box-shadow: var(--ok-accent-glow);

            padding: 0.75rem 1rem;

            border-radius: var(--ok-radius-md);

            cursor: pointer;

            max-width: 400px;

        }



        /* ================================================================

           HTMX ИНДИКАТОР

           ================================================================ */

        .htmx-indicator { display: none; }

        .htmx-request .htmx-indicator { display: inline-block; }

        .htmx-request.htmx-indicator { display: inline-block; }



        /* ================================================================

           ГРАФ: ЛЕГЕНДА + ТУЛТИП + НОДЫ

           ================================================================ */

        .legend-item {

            display: inline-flex;

            align-items: center;

            font-size: clamp(10px, 1.5vw, 12px);

            cursor: pointer;

            padding: 2px 6px;

            border-radius: 3px;

            background: var(--ok-surface);

            border: 1px solid transparent;

            transition: all 0.15s;

            margin-right: 4px;

            margin-bottom: 4px;

        }

        .legend-item:hover { border-color: var(--ok-border-light); }

        .legend-item.hidden { opacity: 0.3; text-decoration: line-through; }

        .legend-color {

            width: 12px; height: 12px;

            border-radius: 50%;

            margin-right: 4px;

            display: inline-block;

        }

        .graph-tooltip {

            position: absolute;

            background: rgba(6, 6, 10, 0.95);

            color: var(--ok-accent);

            padding: 6px 12px;

            border-radius: 4px;

            font-size: 13px;

            pointer-events: none;

            opacity: 0;

            z-index: 1000;

            border: 1px solid var(--ok-accent);

            max-width: 320px;

            white-space: normal;

            font-family: var(--font-mono);

        }

        .node-label {

            font-family: var(--font-mono);

            pointer-events: none;

            text-shadow: 0 0 4px rgba(0, 0, 0, 0.9);

        }



        /* ================================================================

           ПАГИНАЦИЯ

           ================================================================ */

        .pagination-info { color: var(--ok-text-muted); }



        /* ================================================================

           ФУТЕР

           ================================================================ */

        .footer {

            margin-top: 4rem;

            padding: 2rem 0 1.5rem;

            border-top: 1px solid var(--ok-border);

            color: var(--ok-text-dim);

            font-size: 0.78rem;

            background: var(--ok-surface);

            /* Тонкий металлический градиент */

            background-image:

                linear-gradient(0deg,

                    rgba(0, 255, 136, 0.02) 0%,

                    transparent 100%);

        }

        .footer-brand {

            font-family: var(--font-heading);

            color: var(--ok-accent);

            font-weight: 700;

            letter-spacing: 0.06em;

            text-transform: uppercase;

        }

        .footer-devis {

            font-style: italic;

            color: var(--ok-accent-dim);

            font-size: 0.75rem;

            letter-spacing: 0.02em;

        }



        /* ================================================================

           ДЕКОРАТИВНЫЕ РАЗДЕЛИТЕЛИ (CSS + Unicode)

           ================================================================ */

        .divider-runes {

            text-align: center;

            color: var(--ok-text-muted);

            font-size: 1.2rem;

            letter-spacing: 0.5em;

            margin: 2rem 0;

            user-select: none;

            opacity: 0.4;

        }


        /* ================================================================

           CSS-АНИМАЦИИ

           ================================================================ */



        /* 1. Пульсирующее свечение */

        @keyframes pulse-glow {

            0%, 100% {

                box-shadow: 0 0 8px rgba(0, 255, 136, 0.2);

                text-shadow: 0 0 4px rgba(0, 255, 136, 0.3);

            }

            50% {

                box-shadow: 0 0 20px rgba(0, 255, 136, 0.4);

                text-shadow: 0 0 12px rgba(0, 255, 136, 0.6);

            }

        }

        .pulse-glow {

            animation: pulse-glow 3s ease-in-out infinite;

        }



        /* 2. Плавное появление (fadeInUp) */

        @keyframes fadeInUp {

            from { opacity: 0; transform: translateY(20px); }

            to { opacity: 1; transform: translateY(0); }

        }

        /* Staggered для сетки */

        #popular-grid > [class*="col-"] {

            animation: fadeInUp 0.4s ease forwards;

            opacity: 0;

        }

        #popular-grid > [class*="col-"]:nth-child(1) { animation-delay: 0.00s; }

        #popular-grid > [class*="col-"]:nth-child(2) { animation-delay: 0.03s; }

        #popular-grid > [class*="col-"]:nth-child(3) { animation-delay: 0.06s; }

        #popular-grid > [class*="col-"]:nth-child(4) { animation-delay: 0.09s; }

        #popular-grid > [class*="col-"]:nth-child(5) { animation-delay: 0.12s; }

        #popular-grid > [class*="col-"]:nth-child(6) { animation-delay: 0.15s; }

        #popular-grid > [class*="col-"]:nth-child(7) { animation-delay: 0.18s; }

        #popular-grid > [class*="col-"]:nth-child(8) { animation-delay: 0.21s; }

        #popular-grid > [class*="col-"]:nth-child(9) { animation-delay: 0.24s; }

        #popular-grid > [class*="col-"]:nth-child(10) { animation-delay: 0.27s; }

        #popular-grid > [class*="col-"]:nth-child(n+11) { animation-delay: 0.30s; }



        /* 3. Эффект голограммы для заголовков */

        @keyframes hologram-flicker {

            0%, 100% { opacity: 1; }

            3% { opacity: 0.85; }

            6% { opacity: 1; }

            47% { opacity: 1; }

            50% { opacity: 0.9; }

            53% { opacity: 1; }

        }

        .hologram-text {

            animation: hologram-flicker 8s infinite;

            text-shadow:

                0 0 4px rgba(0, 255, 136, 0.5),

                0 0 8px rgba(0, 255, 136, 0.3),

                0 0 16px rgba(0, 255, 136, 0.15);

        }



        /* 4. Загрузка — пульсирующая точка */

        /* 5. Мерцание границы */



        /* ================================================================
           ORI-55: prefers-reduced-motion — respect the OS-level setting.
           Near-zero duration (not animation:none) so forwards-fill
           animations (fadeInUp) still land on their end state and any
           JS listening for animationend/transitionend still fires.
           ================================================================ */
        @media (prefers-reduced-motion: reduce) {
            *,
            *::before,
            *::after {
                animation-duration: 0.01ms !important;
                animation-iteration-count: 1 !important;
                transition-duration: 0.01ms !important;
                scroll-behavior: auto !important;
            }
        }



        /* ================================================================

           HOVER-GLOW УТИЛИТА

           ================================================================ */

        .hover-glow {

            transition: all var(--ok-trans-base);

        }

        .hover-glow:hover {

            transform: translateY(-2px);

            box-shadow: var(--ok-accent-glow);

            border-color: var(--ok-accent) !important;

        }



        /* ================================================================

           ДЕВИЗ — ГЛАВНАЯ СТРАНИЦА

           ================================================================ */

        .hero-devis {

            font-family: var(--font-heading);

            font-size: 1.1rem;

            font-weight: 500;

            font-style: italic;

            color: var(--ok-accent-dim);

            letter-spacing: 0.04em;

            text-shadow: 0 0 8px rgba(0, 255, 136, 0.2);

            margin-bottom: 0.5rem;

        }

        .hero-slogan {

            font-family: var(--font-body);

            font-size: 0.9rem;

            font-weight: 300;

            color: var(--ok-text-dim);

            letter-spacing: 0.05em;

            text-transform: uppercase;

        }



        /* ================================================================

           ABOUT PAGE: МАНИФЕСТ

           ================================================================ */

        .manifesto-section h2 {

            font-family: var(--font-heading);

            color: var(--ok-accent);

            text-transform: uppercase;

            letter-spacing: 0.06em;

            font-size: 1.2rem;

            margin-top: 2rem;

            margin-bottom: 1rem;

            padding-bottom: 0.5rem;

            border-bottom: 1px solid var(--ok-border);

        }

        .manifesto-rule {

            font-family: var(--font-mono);

            color: var(--ok-accent);

            font-weight: 600;

        }



        /* ================================================================

           СТРАНИЦА ПОИСКА

           ================================================================ */

        .search-result-item {

            transition: all var(--ok-trans-base);

            border-radius: var(--ok-radius-md);

        }

        .search-result-item:hover {

            border-color: var(--ok-accent);

            box-shadow: var(--ok-accent-glow);

        }



        /* ================================================================

           АДАПТИВНОСТЬ

           ================================================================ */

        @media (max-width: 768px) {

            body { font-size: 0.9rem; }

            h1 { font-size: 1.6rem; }

            h2 { font-size: 1.3rem; }

            h3 { font-size: 1.1rem; }

            .navbar-brand { font-size: 1rem; letter-spacing: 0.03em; }

            .hero-devis { font-size: 0.9rem; }

            .footer { font-size: 0.7rem; }

            /* ORI-55: тач-цели >=44px на мобильных — раньше это правило было
               только локально в analyzer.html; переносим сюда, чтобы работало
               на всех страницах (аудит: "тач-цели >=44px только в analyzer"). */
            .btn, .form-select, .form-control {
                min-height: 44px;
                font-size: 1rem;
            }

            .btn {
                padding-top: 0.55rem;
                padding-bottom: 0.55rem;
            }

        }



        @media (max-width: 576px) {

            h1 { font-size: 1.35rem; }

            .search-input { font-size: 0.9rem; padding: 10px 14px; }

        }



        @media (max-width: 400px) {

            body { font-size: 0.85rem; }

            h1 { font-size: 1.15rem; letter-spacing: 0.02em; }

            h2 { font-size: 1.05rem; }

            h3 { font-size: 0.95rem; }

            .navbar-brand { font-size: 0.85rem; }

            .search-input { font-size: 0.82rem; padding: 8px 10px; }

            .nav-tabs .nav-link { font-size: 0.68rem; padding: 0.3rem 0.45rem; }

            .entity-icon { width: 36px; height: 36px; font-size: 1.1rem; }

            .stat-badge { font-size: 0.6rem; padding: 1px 5px; }

            .container { padding-left: 8px; padding-right: 8px; }

            .hero-devis { font-size: 0.75rem; }

        }

/* ================================================================
   HEADER BRAND TAGLINE + HOMEPAGE SEARCH (homepage UX task)
   ================================================================ */

/* Дескриптор-слоган: отдельный элемент между брендом и меню навигации.
   Курсив, мелкий шрифт, допускается перенос на 2 строки на узких экранах. */
.brand-tagline {
    font-family: var(--font-body);
    font-style: italic;
    font-size: 0.68rem;
    font-weight: 400;
    letter-spacing: 0.03em;
    line-height: 1.25;
    text-transform: none;
    color: var(--ok-text-muted);
    text-shadow: none;
    white-space: normal;
    max-width: 14rem;
    margin-left: 0.9rem;
    margin-right: 0.5rem;
    flex-shrink: 0;
}

@media (max-width: 991.98px) {
    .brand-tagline {
        font-size: 0.6rem;
        max-width: 11rem;
        margin-left: 0.6rem;
    }
}

@media (max-width: 575.98px) {
    .brand-tagline {
        font-size: 0.55rem;
        max-width: 9.5rem;
        letter-spacing: 0.01em;
    }
}

/* Ссылка на Telegram-группу в шапке (заменяет прежний текстовый слоган).
   Наследует позиционирование/отступы .brand-tagline, добавляет вид ссылки. */
.brand-tagline-tg {
    font-style: normal;
    display: inline-flex;
    align-items: center;
    white-space: nowrap;
    color: var(--ok-accent);
    text-decoration: none;
    transition: opacity 0.15s ease;
}

.brand-tagline-tg:hover,
.brand-tagline-tg:focus-visible {
    color: var(--ok-accent);
    text-decoration: underline;
    opacity: 0.8;
}

/* Поиск — главное действие первого экрана главной страницы */
.home-search .search-input {
    font-size: 1.15rem;
    padding: 14px 22px;
}

@media (max-width: 575.98px) {
    .home-search .search-input {
        font-size: 1rem;
        padding: 12px 16px;
    }
}
