/* =============================================================================
   DENTALNET · NOCTURNE
   Тъмно стъкло за целия апп — същата естетика като екрана за вход.

   Зарежда се ПОСЛЕДЕН, след chambers-theme.css и chambers-lock.css. Онези два
   слоя налагат светлата схема с !important, затова тук се ползват селектори
   със същата или по-висока специфичност (често с префикс `body `), а редът на
   зареждане решава равенствата.

   Две неща, които този слой НЕ пипа — носят клинична информация, а не стил:
     · зъбните схеми (.tooth, .pc-container, .quadrant-*) — цветовете кодират
       състояние на зъба;
     · 3D/рентген прегледа (.v3d, .xray-*), който вече е тъмен.

   Съдържание:
     01 · Токени
     02 · Основа и атмосфера
     03 · Типография и връзки
     04 · Панели и карти
     05 · Таблици
     06 · Форми
     07 · Бутони
     08 · Навигация и футър
     09 · Bootstrap компоненти
     10 · Утилити и наследени светли петна
     11 · Изгледи със собствени панели
     12 · Печат
   ========================================================================== */

/* ── 01 · Токени ─────────────────────────────────────────────────────────── */
:root {
    color-scheme: dark;

    /* Мастилена основа */
    --nk-ground: #070d1a;
    --nk-ground-2: #0b1425;
    --nk-glass: rgba(255, 255, 255, .048);
    --nk-glass-2: rgba(255, 255, 255, .075);
    --nk-glass-3: rgba(255, 255, 255, .1);
    --nk-solid: #101a2e;
    --nk-solid-2: #16233c;

    --surface: rgba(255, 255, 255, .048);
    --surface-muted: #070d1a;
    --surface-elevated: rgba(255, 255, 255, .075);
    --surface-sunken: rgba(0, 0, 0, .28);
    --panel: rgba(255, 255, 255, .06);
    --panel-line: rgba(238, 243, 251, .12);

    --text: #dbe3f0;
    --text-strong: #ffffff;
    --text-muted: #8fa0b8;

    --border: rgba(238, 243, 251, .12);
    --border-strong: rgba(238, 243, 251, .2);

    /* Сивите се обръщат: 50 е най-тъмното, 900 — най-светлото */
    --gray-50: rgba(255, 255, 255, .04);
    --gray-100: rgba(255, 255, 255, .07);
    --gray-200: rgba(255, 255, 255, .1);
    --gray-300: rgba(255, 255, 255, .16);
    --gray-400: #6f8099;
    --gray-500: #8fa0b8;
    --gray-600: #a5b4c8;
    --gray-700: #c2ccdb;
    --gray-800: #dbe3f0;
    --gray-900: #ffffff;

    --light: rgba(255, 255, 255, .07);
    --dark: #070d1a;
    --secondary: #8fa0b8;

    /* Ментовият сапфир остава акцентът — вече върху мастило свети истински */
    --brass: #1fbf92;
    --brass-light: #7de8c8;
    --brass-ink: #4fd6ae;
    --brass-rgb: 31, 191, 146;

    --success: #1fbf92;
    --success-dark: #4fd6ae;
    --info: #6aa3f0;
    --info-rgb: 106, 163, 240;
    --warning: #e0a458;
    --danger: #f0757a;
    --danger-rgb: 240, 117, 122;

    --shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);
    --shadow: 0 10px 28px rgba(0, 0, 0, .38), 0 2px 8px rgba(0, 0, 0, .24);
    --shadow-md: 0 16px 38px rgba(0, 0, 0, .44), 0 4px 12px rgba(0, 0, 0, .26);
    --shadow-lg: 0 28px 66px rgba(0, 0, 0, .5), 0 8px 20px rgba(0, 0, 0, .3);
    --shadow-xl: 0 36px 84px rgba(0, 0, 0, .56), 0 10px 26px rgba(0, 0, 0, .34);

    --glow: 0 0 0 1px rgba(var(--brass-rgb), .3);

    /* Bootstrap */
    --bs-body-bg: #070d1a;
    --bs-body-bg-rgb: 7, 13, 26;
    --bs-body-color: #dbe3f0;
    --bs-body-color-rgb: 219, 227, 240;
    --bs-emphasis-color: #ffffff;
    --bs-emphasis-color-rgb: 255, 255, 255;
    --bs-secondary-color: rgba(219, 227, 240, .7);
    --bs-secondary-bg: rgba(255, 255, 255, .07);
    --bs-tertiary-color: rgba(219, 227, 240, .5);
    --bs-tertiary-bg: rgba(255, 255, 255, .04);
    --bs-heading-color: #ffffff;
    --bs-border-color: rgba(238, 243, 251, .12);
    --bs-border-color-translucent: rgba(238, 243, 251, .1);
    --bs-link-color: #7de8c8;
    --bs-link-color-rgb: 125, 232, 200;
    --bs-link-hover-color: #ffffff;
    --bs-code-color: #7de8c8;
    --bs-highlight-bg: rgba(31, 191, 146, .24);
    --bs-light: rgba(255, 255, 255, .07);
    --bs-light-rgb: 255, 255, 255;
    --bs-dark: #070d1a;
    --bs-success: #1fbf92;
    --bs-info: #6aa3f0;
    --bs-warning: #e0a458;
    --bs-danger: #f0757a;

    /* Bootstrap 5.3 не рисува .text-success с --bs-success, а с отделни
       променливи: --bs-success-rgb и --bs-success-text-emphasis. Те останаха
       в заводските си стойности, замислени за бяла хартия (тъмнозелено
       #24503a), и върху мастилото падаха до 2.1:1. Тук се сменя целият набор,
       иначе всяка страница със сума или статус си остава нечетима. */
    --bs-primary-rgb: 125, 232, 200;
    --bs-success-rgb: 31, 191, 146;
    --bs-danger-rgb: 240, 117, 122;
    --bs-warning-rgb: 224, 164, 88;
    --bs-info-rgb: 106, 163, 240;
    --bs-secondary-rgb: 143, 160, 184;
    --bs-dark-rgb: 7, 13, 26;

    --bs-primary-text-emphasis: #7de8c8;
    --bs-success-text-emphasis: #8ce9c6;
    --bs-danger-text-emphasis: #f7b3b5;
    --bs-warning-text-emphasis: #f0cb9b;
    --bs-info-text-emphasis: #a9cdf9;
    --bs-secondary-text-emphasis: #b3c0d4;

    /* Подложките „subtle" са бледи тинтове за светла тема — стават стъкло */
    --bs-primary-bg-subtle: rgba(31, 191, 146, .12);
    --bs-success-bg-subtle: rgba(31, 191, 146, .12);
    --bs-danger-bg-subtle: rgba(240, 117, 122, .12);
    --bs-warning-bg-subtle: rgba(224, 164, 88, .12);
    --bs-info-bg-subtle: rgba(106, 163, 240, .12);
    --bs-secondary-bg-subtle: rgba(255, 255, 255, .07);
    --bs-light-bg-subtle: rgba(255, 255, 255, .05);

    --bs-primary-border-subtle: rgba(31, 191, 146, .4);
    --bs-success-border-subtle: rgba(31, 191, 146, .4);
    --bs-danger-border-subtle: rgba(240, 117, 122, .4);
    --bs-warning-border-subtle: rgba(224, 164, 88, .4);
    --bs-info-border-subtle: rgba(106, 163, 240, .4);
    --bs-secondary-border-subtle: rgba(255, 255, 255, .16);
}

/* ── 02 · Основа и атмосфера ─────────────────────────────────────────────── */
/* Мастилото стои на <html>, а <body> остава прозрачен.

   Важно и лесно за счупване: .app-atmos е z-index:-1. Ако <body> носи плътен
   фон, той се рисува ВЪРХУ отрицателния слой и цялата атмосфера изчезва —
   стъклото няма какво да пречупва и картите излизат плоски. Затова основата
   е на <html>, а <body> е прозрачен. */
html {
    background-color: var(--nk-ground);
    color-scheme: dark !important;
}

body {
    background-color: transparent !important;
    background-image: none !important;
    color: var(--text) !important;
    color-scheme: dark !important;
}

/* Амбиентният слой.

   Тук е ключът към стъклото: `backdrop-filter` размива това, което стои ЗАД
   елемента. Ако фонът е равен, размиването на равно дава пак равно — картите
   излизат просто тъмни правоъгълници. На екрана за вход зад картата има видео
   и точно затова матовият ефект се чете. За останалите страници ролята на
   видеото я поема този слой: широки, наситени цветни полета, които бавно се
   местят и дават на стъклото какво да пречупва. */
.app-atmos {
    background: linear-gradient(178deg, #0a1122 0%, #070d1a 52%, #050a15 100%) !important;
    overflow: hidden;
}

.app-atmos::before {
    content: "";
    position: absolute;
    /* Полето е по-голямо от прозореца, за да няма голи ъгли при движението */
    inset: -25%;
    background:
        radial-gradient(ellipse 34% 30% at 12% 10%, rgba(31, 191, 146, .5) 0%, transparent 60%),
        radial-gradient(ellipse 30% 28% at 86% 6%, rgba(45, 90, 160, .62) 0%, transparent 58%),
        radial-gradient(ellipse 26% 24% at 70% 76%, rgba(125, 232, 200, .34) 0%, transparent 56%),
        radial-gradient(ellipse 32% 26% at 24% 88%, rgba(22, 48, 79, .72) 0%, transparent 58%),
        radial-gradient(ellipse 22% 20% at 52% 42%, rgba(31, 191, 146, .2) 0%, transparent 56%);
    animation: nkDrift 46s ease-in-out infinite alternate;
    will-change: transform;
}

/* Фина мрежа. Тя е истинската причина стъклото да се чете: размиването има
   нужда от резки ръбове, които да размаже — плавният градиент, размазан, дава
   пак същия градиент. Линиите са едва видими голи, но през blur() създават
   характерното матово зърно. */
.app-atmos::after {
    background-image:
        linear-gradient(rgba(125, 232, 200, .055) 1px, transparent 1px),
        linear-gradient(90deg, rgba(125, 232, 200, .055) 1px, transparent 1px),
        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='4'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E") !important;
    background-size: 46px 46px, 46px 46px, 200px 200px !important;
    opacity: .55 !important;
    mix-blend-mode: normal !important;
}

body .tc2d .pc-tooth.selected,
body .tc2d .pc-tooth-wrapper.selected .pc-tooth:not(.milk) {
    filter: drop-shadow(0 0 6px rgba(125, 232, 200, .65));
}
body .tc2d .pc-tooth.selected .tg-crown,
body .tc2d .pc-tooth-wrapper.selected .pc-tooth:not(.milk) .tg-crown {
    stroke: #7de8c8 !important;
    stroke-width: 1.8 !important;
}

@keyframes nkDrift {
    0%   { transform: translate3d(0, 0, 0) scale(1); }
    50%  { transform: translate3d(2.5%, -2%, 0) scale(1.06); }
    100% { transform: translate3d(-2%, 2.5%, 0) scale(1.02); }
}

/* Смяната на страница не трябва да премигва: chambers-theme пуска appRise
   (opacity 0 → 1) на <main> и картите при всеки GET. Тук анимацията се гаси. */
body :is(main,
         .medical-dashboard > .container,
         .medical-dashboard > .container-fluid,
         .row > [class*="col-"] > .card,
         .row > [class*="col-"] > .app-card,
         .row > [class*="col-"] > .stat-card,
         .row > [class*="col-"] > .app-stat-card,
         .qf-hero, .qf-panel, .qf-hint, .qf-field, .qf-actions) {
    animation: none !important;
}

@media (prefers-reduced-motion: reduce) {
    .app-atmos::before { animation: none; }

    /* chambers-theme спира всяка анимация с `*, *::before, *::after
       { animation: none !important }` — сложено заради реален бъг: RDP
       сесиите включват reduced-motion системно, транслираният <main> ставаше
       containing block за fixed елементи и модалите оставаха под backdrop-а.
       Правилото остава, но заглавната страница и екранът за вход са витрината
       на клиниката: там движението е съдържание. Връща се точково, само за
       техните класове, така че поправката за модалите не се пипа. */
    body .nxl-marquee { animation: nxlSlide 34s linear infinite !important; }
    body .nxl-reveal { transition-duration: .8s !important; }
    body .nx-rise { animation: nxRise .85s cubic-bezier(.22, 1, .36, 1) forwards !important; }
    body .nx-card::before { animation: nxHair 1.5s cubic-bezier(.22, 1, .36, 1) .35s forwards !important; }
    body .nxl-btn, body .nxl-card, body .nx-submit { transition-duration: .28s !important; }
}

::selection { background: rgba(31, 191, 146, .32); color: #fff; }

* { scrollbar-color: rgba(238, 243, 251, .22) transparent; }
*::-webkit-scrollbar-thumb { background: rgba(238, 243, 251, .18); }
*::-webkit-scrollbar-thumb:hover { background: rgba(var(--brass-rgb), .55); }

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

/* ── 03 · Типография и връзки ────────────────────────────────────────────── */
body :is(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6):not(.pc-container *):not(.v3d *) {
    color: var(--text-strong);
}

body a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.navbar-brand):not(.nxl-btn) {
    color: var(--brass-light);
}
body a:not(.btn):not(.nav-link):not(.dropdown-item):not(.page-link):not(.navbar-brand):not(.nxl-btn):hover {
    color: #ffffff;
}

body :is(small, .small, .text-muted, .text-secondary):not(.pc-container *) {
    color: var(--text-muted) !important;
}

body label,
body .form-label { color: var(--text) !important; }

/* ── 04 · Панели и карти ─────────────────────────────────────────────────── */
/* Огледало на „твърдия слой" от chambers-theme (секция 14a). Същата
   специфичност, по-късен файл — затова печели. */
body :is(.card, .card-body, .card-header, .card-footer,
         .accordion, .accordion-item, .accordion-button, .accordion-body, .accordion-collapse,
         .list-group-item, .modal-content, .modal-header, .modal-body, .modal-footer,
         .tab-content, .tab-pane, .panel, .box, .section-card, .info-card, .detail-card):not(.pc-container *):not(.v3d *) {
    color: var(--text) !important;
    border-color: var(--border) !important;
}

/* Рецептата е същата като на .nx-card от екрана за вход — стойност по
   стойност, за да е един и същ материал: плитко стъкло, широк blur със
   засилена наситеност, вътрешен светъл ръб отгоре и дълбока сянка. */
body :is(.card, .section-card, .info-card):not(.pc-container *):not(.v3d *):not(.bg-gradient-primary):not(.bg-primary):not(.bg-success):not(.bg-info):not(.bg-warning):not(.bg-danger):not(.bg-dark) {
    position: relative;
    background-color: var(--nk-glass) !important;
    background-image: none !important;
    backdrop-filter: blur(26px) saturate(1.3);
    -webkit-backdrop-filter: blur(26px) saturate(1.3);
    border: 1px solid var(--border) !important;
    border-radius: 20px;
    box-shadow: 0 32px 80px rgba(0, 0, 0, .5), inset 0 1px 0 rgba(255, 255, 255, .07) !important;
    overflow: hidden;
}

/* Ментовият косъм по горния ръб — подписът на логин картата */
body :is(.card, .section-card, .info-card):not(.pc-container *):not(.v3d *):not(.bg-gradient-primary):not(.bg-primary):not(.bg-success):not(.bg-info):not(.bg-warning):not(.bg-danger):not(.bg-dark)::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(var(--brass-rgb), .8), transparent);
    pointer-events: none;
    z-index: 1;
}

/* Модалите плуват над съдържание — нужна им е по-плътна основа */
body .modal-content {
    background-color: rgba(16, 26, 46, .92) !important;
    background-image: none !important;
    backdrop-filter: blur(30px) saturate(1.3);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid var(--border-strong) !important;
    box-shadow: var(--shadow-xl) !important;
}

body :is(.card-body, .card-footer, .accordion-body, .accordion-collapse,
         .modal-body, .tab-content, .tab-pane):not(.pc-container *):not(.v3d *) {
    background-color: transparent !important;
    background-image: none !important;
}

body :is(.modal-header, .modal-footer) {
    background-color: transparent !important;
    background-image: none !important;
    border-color: var(--border) !important;
}

/* Неутралният card-header е стъклен ръб, не бяла лента */
body .card-header:not(.bg-primary):not(.bg-success):not(.bg-info):not(.bg-warning):not(.bg-danger):not(.bg-dark):not(.bg-gradient-primary) {
    background-color: rgba(255, 255, 255, .035) !important;
    background-image: none !important;
    border-bottom: 1px solid var(--border) !important;
}

/* Цветните ленти запазват смисъла си, но в нощни стойности с ментов кант */
body .card.bg-gradient-primary,
body .bg-gradient-primary,
body .card-header.bg-primary,
body .card-header.bg-gradient-primary,
body .card-header.bg-dark {
    background: linear-gradient(140deg, #16233c 0%, #0b1425 100%) !important;
    background-image: linear-gradient(140deg, #16233c 0%, #0b1425 100%) !important;
    background-color: #101a2e !important;
    color: #eef3fb !important;
    -webkit-text-fill-color: #eef3fb !important;
    border-bottom: 1px solid rgba(var(--brass-rgb), .35) !important;
}

body .card-header.bg-success {
    background: linear-gradient(140deg, #125f4c 0%, #0d4839 100%) !important;
    background-image: linear-gradient(140deg, #125f4c 0%, #0d4839 100%) !important;
    color: #e6fbf3 !important;
    -webkit-text-fill-color: #e6fbf3 !important;
}

body .card-header.bg-info {
    background: linear-gradient(140deg, #1d3f6e 0%, #16304f 100%) !important;
    background-image: linear-gradient(140deg, #1d3f6e 0%, #16304f 100%) !important;
    color: #e8f1fd !important;
    -webkit-text-fill-color: #e8f1fd !important;
}

body .card-header.bg-warning {
    background: linear-gradient(140deg, #6b4a1c 0%, #4d3514 100%) !important;
    background-image: linear-gradient(140deg, #6b4a1c 0%, #4d3514 100%) !important;
    color: #fdf1de !important;
    -webkit-text-fill-color: #fdf1de !important;
}

body .card-header.bg-danger {
    background: linear-gradient(140deg, #6d2b2e 0%, #4f1f21 100%) !important;
    background-image: linear-gradient(140deg, #6d2b2e 0%, #4f1f21 100%) !important;
    color: #fdeceb !important;
    -webkit-text-fill-color: #fdeceb !important;
}

/* Заглавните ленти на изгледите (пациент, профил, детайли) */
body :is(.pd-header, .dashboard-header, .profile-header, .detail-header, .access-denied-header, .register-header) {
    background: linear-gradient(140deg, #16233c 0%, #0b1425 100%) !important;
    background-image: linear-gradient(140deg, #16233c 0%, #0b1425 100%) !important;
    color: #eef3fb !important;
    border: 1px solid var(--border) !important;
}

body .list-group-item {
    background-color: transparent !important;
    border-color: var(--border) !important;
    color: var(--text) !important;
}
body .list-group-item:hover { background-color: rgba(255, 255, 255, .05) !important; }

body .accordion-button:not(.collapsed),
body .accordion-button:hover {
    background-color: rgba(var(--brass-rgb), .14) !important;
    color: var(--brass-light) !important;
}
body .accordion-button { background-color: transparent !important; color: var(--text) !important; }
body .accordion-button::after { filter: invert(1) brightness(1.6); }

/* ── 05 · Таблици ────────────────────────────────────────────────────────── */
body .table {
    --bs-table-bg: transparent;
    --bs-table-color: var(--text);
    --bs-table-border-color: var(--border);
    --bs-table-striped-bg: rgba(255, 255, 255, .028);
    --bs-table-striped-color: var(--text);
    --bs-table-hover-bg: rgba(var(--brass-rgb), .09);
    --bs-table-hover-color: #ffffff;
    --bs-table-accent-bg: transparent;
    color: var(--text) !important;
    border-color: var(--border) !important;
}

/* Главата на таблицата — тъмно стъкло с моноширинен, разреден надпис.
   Това е и мястото, което най-често се чупеше: изгледите рисуваха светло
   #f1f5f9 с тъмен текст, а на мастилена основа то биеше на кръпка. */
body .table > thead > tr > th,
body .table thead th,
body table thead th {
    background-color: rgba(255, 255, 255, .055) !important;
    background-image: none !important;
    color: var(--text-muted) !important;
    -webkit-text-fill-color: var(--text-muted) !important;
    border-bottom: 1px solid var(--border-strong) !important;
    font-family: var(--font-mono);
    font-size: .68rem;
    font-weight: 500;
    letter-spacing: .14em;
    text-transform: uppercase;
}

body .table > tbody > tr > td,
body .table tbody td,
body table tbody td {
    background-color: transparent !important;
    color: var(--text) !important;
    border-color: var(--border) !important;
}

body .table > tbody > tr:hover > td,
body .table tbody tr:hover td { background-color: rgba(var(--brass-rgb), .07) !important; }

body .table-responsive { background: transparent !important; }

body :is(.table-light, .table-striped > tbody > tr:nth-of-type(odd) > *) {
    background-color: rgba(255, 255, 255, .028) !important;
    color: var(--text) !important;
}

/* ── 06 · Форми ──────────────────────────────────────────────────────────── */
body :is(.form-control, .input-group-text, textarea, input[type="text"],
         input[type="email"], input[type="password"], input[type="number"], input[type="tel"],
         input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"],
         input[type="week"], input[type="search"], input[type="url"], input[type="file"],
         input[type="color"], .form-control-color):not(.nx-input input):not(.v3d-input) {
    color-scheme: dark !important;
    background-color: rgba(255, 255, 255, .055) !important;
    background-image: none !important;
    border: 1px solid var(--border) !important;
    color: var(--text-strong) !important;
    -webkit-text-fill-color: var(--text-strong) !important;
}

body .form-select {
    color-scheme: dark !important;
    appearance: none;
    background-color: rgba(255, 255, 255, .055) !important;
    border: 1px solid var(--border) !important;
    color: var(--text-strong) !important;
    -webkit-text-fill-color: var(--text-strong) !important;
    padding-right: 2.7rem !important;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%237de8c8' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.8' d='m3 6 5 5 5-5'/%3E%3C/svg%3E") !important;
    background-repeat: no-repeat !important;
    background-position: right .9rem center !important;
    background-size: 14px !important;
}

body :is(select, .form-select) option,
body :is(select, .form-select) optgroup {
    color: #eef3fb !important;
    background-color: #101a2e !important;
}

body :is(select, .form-select) option:checked {
    color: #06150f !important;
    background-color: #7de8c8 !important;
}

body :is(input[type="date"], input[type="time"], input[type="datetime-local"],
         input[type="month"], input[type="week"])::-webkit-calendar-picker-indicator {
    filter: invert(1) brightness(1.35);
    opacity: .82;
    cursor: pointer;
}

body input[type="file"]::file-selector-button {
    background: rgba(var(--brass-rgb), .14);
    border: 1px solid rgba(var(--brass-rgb), .35);
    color: var(--brass-light, #7de8c8);
    border-radius: 8px;
    padding: .35rem .75rem;
    margin-right: .75rem;
    cursor: pointer;
}

body .form-control-color {
    min-height: 2.75rem;
    padding: .25rem;
}

body .oc-create :is(.form-control, .form-select, .oc-mark) {
    background: rgba(255, 255, 255, .055) !important;
    color: var(--text-strong) !important;
    -webkit-text-fill-color: var(--text-strong) !important;
    border-color: var(--border) !important;
}
body .oc-create :is(.form-select, .oc-mark) option {
    background: #101a2e !important;
    color: #eef3fb !important;
}

body :is(.form-control, .form-select, textarea, select)::placeholder,
body input::placeholder { color: rgba(219, 227, 240, .35) !important; }

body :is(.form-control, .form-select, textarea, select, input):focus {
    background-color: rgba(255, 255, 255, .085) !important;
    border-color: rgba(125, 232, 200, .55) !important;
    box-shadow: 0 0 0 3px rgba(var(--brass-rgb), .16) !important;
    color: #ffffff !important;
}

/* Автоматичното попълване на Chrome рисува собствен светъл фон */
body input:-webkit-autofill,
body input:-webkit-autofill:hover,
body input:-webkit-autofill:focus {
    -webkit-text-fill-color: #ffffff !important;
    -webkit-box-shadow: 0 0 0 100px #101a2e inset !important;
    caret-color: #fff;
}

body :is(.form-control, .form-select):disabled,
body .form-control[readonly] {
    background-color: rgba(255, 255, 255, .025) !important;
    color: var(--text-muted) !important;
}

body .input-group-text {
    background-color: rgba(255, 255, 255, .04) !important;
    color: var(--text-muted) !important;
}

body .form-check-input {
    background-color: rgba(255, 255, 255, .08);
    border-color: var(--border-strong);
}
body .form-check-input:checked {
    background-color: var(--brass);
    border-color: var(--brass);
}

body .form-text, body .form-hint { color: var(--text-muted) !important; }

/* Датапикерът идва с чужд светъл скин */
body .datepicker,
body .datepicker-dropdown {
    background: rgba(16, 26, 46, .98) !important;
    border: 1px solid var(--border-strong) !important;
    color: var(--text) !important;
    box-shadow: 0 18px 48px rgba(0, 0, 0, .48) !important;
}
body .datepicker table tr td,
body .datepicker table tr th,
body .datepicker td,
body .datepicker th {
    color: var(--text) !important;
}
body .datepicker .datepicker-switch,
body .datepicker .prev,
body .datepicker .next { color: #fff !important; }
body .datepicker td.day:hover,
body .datepicker table tr td.day:hover {
    background: rgba(var(--brass-rgb), .18) !important;
    color: #fff !important;
}
body .datepicker td.active,
body .datepicker table tr td.active,
body .datepicker table tr td.active:hover {
    background: var(--brass) !important;
    color: #05130e !important;
}
body .datepicker table tr td.old,
body .datepicker table tr td.new { color: rgba(219, 227, 240, .38) !important; }
body .datepicker table tr td.today {
    background: rgba(125, 232, 200, .16) !important;
    color: #7de8c8 !important;
}

body .qf-mode-switch {
    background: rgba(255, 255, 255, .05) !important;
    border-color: rgba(238, 243, 251, .12) !important;
}
body .qf-mode-switch a { color: var(--text-muted) !important; }
body .qf-mode-switch a.is-active {
    background: linear-gradient(135deg, #7de8c8, #1fbf92) !important;
    color: #06150f !important;
}
body .qf-catalog-hint { color: var(--text-muted) !important; }
body .qf-catalog-hint a { color: var(--brass-light, #7de8c8) !important; }
body .patient-search-results .list-group {
    background: #101a2e !important;
    border-color: var(--border) !important;
    color: var(--text) !important;
}

/* ── 07 · Бутони ─────────────────────────────────────────────────────────── */
/* chambers-lock прави всички плътни бутони прозрачни с мастилен надпис —
   на нощна основа надписът изчезва. Тук всеки вариант получава своя тон. */
body :is(.btn-primary, .btn-save, .btn-hero) {
    background-color: rgba(var(--brass-rgb), .14) !important;
    background-image: none !important;
    border: 1px solid rgba(var(--brass-rgb), .45) !important;
    color: var(--brass-light) !important;
    -webkit-text-fill-color: var(--brass-light) !important;
}
body :is(.btn-primary, .btn-save, .btn-hero):hover {
    background-color: rgba(var(--brass-rgb), .24) !important;
    border-color: var(--brass) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}

body .btn-success {
    background-color: rgba(31, 191, 146, .14) !important;
    border: 1px solid rgba(31, 191, 146, .45) !important;
    color: #6ee0bb !important;
    -webkit-text-fill-color: #6ee0bb !important;
}
body .btn-info {
    background-color: rgba(106, 163, 240, .14) !important;
    border: 1px solid rgba(106, 163, 240, .45) !important;
    color: #9cc4f7 !important;
    -webkit-text-fill-color: #9cc4f7 !important;
}
body .btn-warning {
    background-color: rgba(224, 164, 88, .14) !important;
    border: 1px solid rgba(224, 164, 88, .45) !important;
    color: #eec089 !important;
    -webkit-text-fill-color: #eec089 !important;
}
body .btn-danger {
    background-color: rgba(240, 117, 122, .14) !important;
    border: 1px solid rgba(240, 117, 122, .45) !important;
    color: #f5a0a3 !important;
    -webkit-text-fill-color: #f5a0a3 !important;
}
body .btn-dark, body .btn-secondary {
    background-color: rgba(255, 255, 255, .07) !important;
    border: 1px solid var(--border-strong) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}
body :is(.btn-success, .btn-info, .btn-warning, .btn-danger, .btn-dark, .btn-secondary):hover {
    background-color: rgba(255, 255, 255, .14) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}

body .btn-light {
    background-color: rgba(255, 255, 255, .1) !important;
    border: 1px solid var(--border-strong) !important;
    color: var(--text-strong) !important;
    -webkit-text-fill-color: var(--text-strong) !important;
}

body :is(.btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-outline-light) {
    background-color: transparent !important;
    border-color: var(--border-strong) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}
body :is(.btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-outline-light):hover {
    background-color: rgba(255, 255, 255, .1) !important;
    border-color: var(--brass) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}
body .btn-outline-success { border-color: rgba(31,191,146,.5) !important; color: #6ee0bb !important; }
body .btn-outline-info    { border-color: rgba(106,163,240,.5) !important; color: #9cc4f7 !important; }
body .btn-outline-warning { border-color: rgba(224,164,88,.5) !important; color: #eec089 !important; }
body .btn-outline-danger  { border-color: rgba(240,117,122,.5) !important; color: #f5a0a3 !important; }

/* Основното действие на страницата остава плътно ментово — единственият
   плътен цвят в интерфейса, затова се чете като „главния бутон". */
body :is(.btn-gradient-primary, .btn.bg-gradient-primary, .btn-register) {
    background: linear-gradient(140deg, var(--brass-light) 0%, var(--brass) 100%) !important;
    background-image: linear-gradient(140deg, var(--brass-light) 0%, var(--brass) 100%) !important;
    border: none !important;
    color: #05130e !important;
    -webkit-text-fill-color: #05130e !important;
    box-shadow: 0 10px 26px rgba(31, 191, 146, .24) !important;
}

/* ── 08 · Навигация и футър ──────────────────────────────────────────────── */
.dental-navbar {
    background: rgba(10, 17, 34, .82) !important;
    background-image: none !important;
    backdrop-filter: blur(22px) saturate(1.4);
    -webkit-backdrop-filter: blur(22px) saturate(1.4);
    border-bottom: 1px solid var(--border) !important;
    box-shadow: 0 8px 30px rgba(0, 0, 0, .35) !important;
}

body .dental-navbar .dropdown-menu,
body .dropdown-menu,
body .card-header .dropdown-menu,
body .card-header .dropdown-menu.show {
    background: rgba(16, 26, 46, .96) !important;
    background-color: rgba(16, 26, 46, .96) !important;
    backdrop-filter: blur(24px);
    -webkit-backdrop-filter: blur(24px);
    border: 1px solid var(--border-strong) !important;
    box-shadow: var(--shadow-lg) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}

body .dropdown-menu :is(.dropdown-item, a, span),
body .card-header .dropdown-menu :is(.dropdown-item, a, span),
body .dropdown-menu .dropdown-item i,
body .card-header .dropdown-menu .dropdown-item i {
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}

body .dropdown-menu .dropdown-item:hover,
body .dropdown-menu .dropdown-item:focus,
body .card-header .dropdown-menu .dropdown-item:hover,
body .card-header .dropdown-menu .dropdown-item:focus {
    background: rgba(var(--brass-rgb), .16) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}

body .dropdown-menu .dropdown-item.text-danger,
body .card-header .dropdown-menu .dropdown-item.text-danger,
body .dropdown-menu .dropdown-item.text-danger i {
    color: #f5a0a3 !important;
    -webkit-text-fill-color: #f5a0a3 !important;
}

body .dropdown-header { color: var(--text-muted) !important; }
body .dropdown-divider { border-color: var(--border) !important; }

/* Навигационният drawer остава до xl: при по-ранно разгъване всички секции
   не се побират надеждно до логото и потребителското меню. */
@media (max-width: 1199.98px) {
    body.nav-open header::after {
        display: none;
    }
    body .dental-navbar { z-index: 1045; }
    body .dental-navbar .navbar-collapse {
        background:
            radial-gradient(circle at 100% 0%, rgba(var(--brass-rgb), .12), transparent 34%),
            rgba(10, 17, 34, .98) !important;
        border: 1px solid var(--border-strong) !important;
        color: var(--text) !important;
        backdrop-filter: blur(26px);
        -webkit-backdrop-filter: blur(26px);
        box-shadow: var(--shadow-lg) !important;
    }
    body .dental-navbar .navbar-collapse::before {
        color: var(--brass-light) !important;
        border-bottom: 1px solid var(--border);
        margin-bottom: .25rem;
    }
    body .dental-navbar .navbar-nav .nav-link {
        background: transparent !important;
        color: var(--text) !important;
        border-bottom-color: var(--border) !important;
        border-radius: 12px;
        margin: 2px 0;
    }
    body .dental-navbar .navbar-nav .nav-link i { color: var(--brass-light) !important; }
    body .dental-navbar .navbar-nav .nav-link:hover,
    body .dental-navbar .navbar-nav .nav-link:focus,
    body .dental-navbar .navbar-nav .dropdown.show > .nav-link {
        background: rgba(var(--brass-rgb), .16) !important;
        color: #ffffff !important;
    }
    body .dental-navbar .navbar-nav .nav-link:hover i,
    body .dental-navbar .navbar-nav .nav-link:focus i { color: #ffffff !important; }
    body .dental-navbar .navbar-nav .dropdown-menu,
    body .dental-navbar .navbar-nav .dropdown-menu.show {
        background: rgba(255, 255, 255, .035) !important;
        border: 1px solid var(--border) !important;
        box-shadow: none !important;
        margin-left: .5rem;
        border-radius: 14px !important;
    }
    body .dental-navbar .navbar-nav .dropdown-item {
        border-bottom-color: var(--border) !important;
        border-radius: 9px;
        margin: 1px .25rem;
        width: calc(100% - .5rem);
    }
    body .dental-navbar .navbar-collapse > .navbar-nav + .navbar-nav > .nav-item > .nav-link {
        background: linear-gradient(135deg, rgba(var(--brass-rgb), .26), rgba(var(--brass-rgb), .12)) !important;
        border: 1px solid rgba(var(--brass-rgb), .34) !important;
    }
    body .dental-navbar .nav-link.is-current,
    body .dental-navbar .dropdown-item.is-current {
        background: rgba(var(--brass-rgb), .18) !important;
        color: #fff !important;
        box-shadow: none;
    }
}

@media (min-width: 1200px) {
    body .dental-navbar .nav-link.is-current {
        background: rgba(var(--brass-rgb), .2) !important;
        color: #fff !important;
        box-shadow: inset 0 -2px 0 var(--brass-light);
    }
}

.dental-footer {
    background: rgba(7, 13, 26, .9) !important;
    background-image: none !important;
    border-top: 1px solid var(--border) !important;
    color: var(--text-muted) !important;
    padding: 1rem 0 !important;
}
.dental-footer a { color: var(--brass-light) !important; }

/* Долната лента: правни данни вляво, кредит на разработчика вдясно */
.dental-footer .footer-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
}
.dental-footer .footer-legal { font-size: .82rem; }

.dental-footer .footer-dev {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    padding: .38rem .7rem .38rem .45rem;
    border: 1px solid var(--border) !important;
    border-radius: 999px;
    background: rgba(255, 255, 255, .05);
    text-decoration: none !important;
    color: var(--text-muted) !important;
    transition: border-color .25s ease, background-color .25s ease, transform .25s cubic-bezier(.22, 1, .36, 1);
}
.dental-footer .footer-dev:hover {
    background: rgba(var(--brass-rgb), .12);
    border-color: rgba(var(--brass-rgb), .5) !important;
    transform: translateY(-1px);
}
.dental-footer .footer-dev img {
    width: 22px;
    height: 22px;
    border-radius: 6px;
    display: block;
    flex-shrink: 0;
}
.dental-footer .footer-dev-label {
    font-family: var(--font-mono);
    font-size: .62rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--text-muted) !important;
}
.dental-footer .footer-dev-name {
    font-size: .82rem;
    font-weight: 600;
    color: var(--brass-light) !important;
}
.dental-footer .footer-dev:hover .footer-dev-name { color: #ffffff !important; }

@media (max-width: 575.98px) {
    .dental-footer .footer-bar { flex-direction: column; text-align: center; gap: .75rem; }
}

body .breadcrumb { background: transparent !important; }
body .breadcrumb-item, body .breadcrumb-item.active { color: var(--text-muted) !important; }
body .breadcrumb-item a { color: var(--brass-light) !important; }

/* ── 09 · Bootstrap компоненти ───────────────────────────────────────────── */
body :is(.nav-tabs, .nav-pills) {
    --bs-nav-link-color: var(--text-muted);
    --bs-nav-link-hover-color: #ffffff;
    border-color: var(--border) !important;
}
body .nav-tabs .nav-link {
    color: var(--text-muted) !important;
    border-color: transparent !important;
}
body .nav-tabs .nav-link.active {
    background-color: rgba(255, 255, 255, .06) !important;
    border-color: var(--border) var(--border) transparent !important;
    color: #ffffff !important;
}
body .nav-pills .nav-link.active {
    background-color: rgba(var(--brass-rgb), .2) !important;
    color: #ffffff !important;
}

body .page-link {
    background-color: rgba(255, 255, 255, .05) !important;
    border-color: var(--border) !important;
    color: var(--text) !important;
}
body .page-item.active .page-link {
    background-color: rgba(var(--brass-rgb), .24) !important;
    border-color: rgba(var(--brass-rgb), .5) !important;
    color: #ffffff !important;
}
body .page-link:hover { background-color: rgba(255, 255, 255, .1) !important; color: #fff !important; }

/* Уведомленията — стъкло с цветен кант, не пастелни правоъгълници */
body .alert {
    background-color: rgba(255, 255, 255, .05) !important;
    background-image: none !important;
    border: 1px solid var(--border-strong) !important;
    color: var(--text) !important;
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
}
body .alert-success { border-color: rgba(31, 191, 146, .45) !important; color: #8ce9c6 !important; background-color: rgba(31, 191, 146, .1) !important; }
body .alert-info    { border-color: rgba(106, 163, 240, .45) !important; color: #a9cdf9 !important; background-color: rgba(106, 163, 240, .1) !important; }
body .alert-warning { border-color: rgba(224, 164, 88, .45) !important; color: #f0cb9b !important; background-color: rgba(224, 164, 88, .1) !important; }
body .alert-danger  { border-color: rgba(240, 117, 122, .45) !important; color: #f7b3b5 !important; background-color: rgba(240, 117, 122, .1) !important; }
body .alert .btn-close { filter: invert(1) brightness(1.8); }

body .modal-backdrop.show { opacity: .72; background-color: #03060d; }
body .btn-close { filter: invert(1) brightness(1.7); }

body :is(.toast, .toast-msg, .popover, .tooltip-inner) {
    background: rgba(16, 26, 46, .96) !important;
    border: 1px solid var(--border-strong) !important;
    color: var(--text) !important;
}
body .toast-header { background: rgba(255, 255, 255, .05) !important; color: var(--text-strong) !important; }
body .popover-header { background: rgba(255, 255, 255, .05) !important; color: var(--text-strong) !important; }

body .progress { background-color: rgba(255, 255, 255, .07) !important; }
body .progress-bar { background-color: var(--brass) !important; }

/* Значките. Bootstrap ги рисува плътни, а темата им сваля наситеността —
   на мастилена основа надписът им падаше до ~2:1. Тук стават стъклени
   чипове с цветен кант: цветът остава сигнал, но текстът е четим. */
body .badge {
    background-color: rgba(255, 255, 255, .1) !important;
    background-image: none !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
    border: 1px solid var(--border-strong) !important;
    font-weight: 600;
}
body :is(.badge.bg-success, .badge.bg-primary) {
    background-color: rgba(31, 191, 146, .16) !important;
    border-color: rgba(31, 191, 146, .45) !important;
    color: #8ce9c6 !important;
    -webkit-text-fill-color: #8ce9c6 !important;
}
body .badge.bg-info {
    background-color: rgba(106, 163, 240, .16) !important;
    border-color: rgba(106, 163, 240, .45) !important;
    color: #a9cdf9 !important;
    -webkit-text-fill-color: #a9cdf9 !important;
}
body .badge.bg-warning {
    background-color: rgba(224, 164, 88, .16) !important;
    border-color: rgba(224, 164, 88, .45) !important;
    color: #f0cb9b !important;
    -webkit-text-fill-color: #f0cb9b !important;
}
body .badge.bg-danger {
    background-color: rgba(240, 117, 122, .16) !important;
    border-color: rgba(240, 117, 122, .45) !important;
    color: #f7b3b5 !important;
    -webkit-text-fill-color: #f7b3b5 !important;
}
body :is(.badge.bg-light, .badge.bg-secondary, .badge.bg-dark) {
    background-color: rgba(255, 255, 255, .1) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}
body .badge i { color: inherit !important; -webkit-text-fill-color: inherit !important; }

/* Статусните чипове в изгледите са пастелни лепенки (светъл фон, тъмен
   надпис). Контрастът им е наред, но върху мастилото светят като стикери —
   тук минават на същия стъклен език като значките. */
body :is(.status-badge, .status-chip, .pd-meta-chip) {
    background: rgba(255, 255, 255, .1) !important;
    background-color: rgba(255, 255, 255, .1) !important;
    background-image: none !important;
    border: 1px solid var(--border-strong) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}
body :is(.status-badge.confirmed, .status-badge.completed) {
    background-color: rgba(31, 191, 146, .16) !important;
    border-color: rgba(31, 191, 146, .45) !important;
    color: #8ce9c6 !important;
    -webkit-text-fill-color: #8ce9c6 !important;
}
body .status-badge.pending {
    background-color: rgba(224, 164, 88, .16) !important;
    border-color: rgba(224, 164, 88, .45) !important;
    color: #f0cb9b !important;
    -webkit-text-fill-color: #f0cb9b !important;
}
body .status-badge.cancelled {
    background-color: rgba(240, 117, 122, .16) !important;
    border-color: rgba(240, 117, 122, .45) !important;
    color: #f7b3b5 !important;
    -webkit-text-fill-color: #f7b3b5 !important;
}
body :is(.status-badge, .status-chip) i { color: inherit !important; -webkit-text-fill-color: inherit !important; }

/* Значките в картона на пациента носят собствени тъмни мастила (#24503a,
   #7a5f27…), останали от светлата епоха — на мастилена основа падаха до 2:1. */
body :is(.pd-badge, .pd-badge--secondary) {
    background: rgba(255, 255, 255, .1) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
    border: 1px solid var(--border-strong) !important;
}
body :is(.pd-badge--success, .pd-badge--primary) {
    background: rgba(31, 191, 146, .16) !important;
    color: #8ce9c6 !important;
    -webkit-text-fill-color: #8ce9c6 !important;
    border-color: rgba(31, 191, 146, .45) !important;
}
body .pd-badge--info {
    background: rgba(106, 163, 240, .16) !important;
    color: #a9cdf9 !important;
    -webkit-text-fill-color: #a9cdf9 !important;
    border-color: rgba(106, 163, 240, .45) !important;
}
body .pd-badge--warning {
    background: rgba(224, 164, 88, .16) !important;
    color: #f0cb9b !important;
    -webkit-text-fill-color: #f0cb9b !important;
    border-color: rgba(224, 164, 88, .45) !important;
}
body .pd-badge--danger {
    background: rgba(240, 117, 122, .16) !important;
    color: #f7b3b5 !important;
    -webkit-text-fill-color: #f7b3b5 !important;
    border-color: rgba(240, 117, 122, .45) !important;
}
body :is(.pd-hub-meta, .pd-legend-item, .pd-photo-date, .pd-med-card-header, .pd-section-header) {
    color: var(--text-muted) !important;
    -webkit-text-fill-color: var(--text-muted) !important;
    background-color: transparent !important;
}
body :is(.pd-section-header h5, .pd-med-card-header) { color: var(--text) !important; -webkit-text-fill-color: var(--text) !important; }

/* Табовете рисуват активното си състояние с var(--primary) — навито мастило,
   което на нощна основа съвпада с фона. Акцентът минава на мента. */
body :is(.pd-tab, .pd-tab span) { color: var(--text-muted) !important; -webkit-text-fill-color: var(--text-muted) !important; }
body :is(.pd-tab.active, .pd-tab.active span, .pd-tab.active i) {
    color: var(--brass-light) !important;
    -webkit-text-fill-color: var(--brass-light) !important;
    border-bottom-color: var(--brass) !important;
    background: linear-gradient(180deg, rgba(var(--brass-rgb), .14) 0%, transparent 100%) !important;
}
body .pd-tabs-wrapper, body .pd-tabs { background: transparent !important; }

/* Календарът (FullCalendar) */
body .fc {
    --fc-border-color: var(--border);
    --fc-page-bg-color: transparent;
    --fc-neutral-bg-color: rgba(255, 255, 255, .04);
    --fc-today-bg-color: rgba(var(--brass-rgb), .12);
    --fc-list-event-hover-bg-color: rgba(var(--brass-rgb), .14);
    color: var(--text);
}
body .fc .fc-toolbar-title { color: var(--text-strong) !important; }
body .fc .fc-daygrid-day-number,
body .fc .fc-col-header-cell-cushion { color: var(--text-muted) !important; }
body .fc-theme-standard td, body .fc-theme-standard th { border-color: var(--border) !important; }

/* ── 10 · Утилити и наследени светли петна ───────────────────────────────── */
body :is(.bg-white, .bg-light, .bg-body, .bg-body-tertiary, .bg-body-secondary):not(.pc-container *):not(.v3d *) {
    background-color: rgba(255, 255, 255, .05) !important;
    color: var(--text) !important;
}

/* Плътните цветни карти (.card.bg-success и подобни) са наситени полета,
   замислени за бял фон. Тук стават стъкло с цветен кант — цветът остава
   сигнал, но текстът в тях се чете. */
body :is(.card, .alert, .list-group-item):is(.bg-success, .bg-primary, .bg-info, .bg-warning, .bg-danger, .bg-secondary) {
    background-image: none !important;
    backdrop-filter: blur(18px) saturate(1.2);
    -webkit-backdrop-filter: blur(18px) saturate(1.2);
}
body :is(.card, .list-group-item).bg-success { background-color: rgba(31, 191, 146, .14) !important; border-color: rgba(31, 191, 146, .4) !important; }
body :is(.card, .list-group-item).bg-primary { background-color: rgba(31, 191, 146, .14) !important; border-color: rgba(31, 191, 146, .4) !important; }
body :is(.card, .list-group-item).bg-info    { background-color: rgba(106, 163, 240, .14) !important; border-color: rgba(106, 163, 240, .4) !important; }
body :is(.card, .list-group-item).bg-warning { background-color: rgba(224, 164, 88, .14) !important; border-color: rgba(224, 164, 88, .4) !important; }
body :is(.card, .list-group-item).bg-danger  { background-color: rgba(240, 117, 122, .14) !important; border-color: rgba(240, 117, 122, .4) !important; }
body :is(.card, .list-group-item).bg-secondary { background-color: rgba(255, 255, 255, .08) !important; }

/* Съдържанието им идва с .text-white, разчитайки на наситения фон */
body :is(.card, .list-group-item):is(.bg-success, .bg-primary, .bg-info, .bg-warning, .bg-danger, .bg-secondary)
     :is(h1, h2, h3, h4, h5, h6, p, span, div, small, strong, i, .h4, .h5) {
    color: var(--text-strong) !important;
    -webkit-text-fill-color: var(--text-strong) !important;
}

/* chambers-theme зашива тези с литерални тъмни стойности (#24503a и подобни),
   не през токени — затова смяната на --bs-*-rgb не ги достига и трябва изричен
   override. Суми и статуси из целия апп минаваха на 2.1:1 заради тях. */
body .text-success { color: #8ce9c6 !important; -webkit-text-fill-color: #8ce9c6 !important; }
body .text-danger  { color: #f7b3b5 !important; -webkit-text-fill-color: #f7b3b5 !important; }
body .text-warning { color: #f0cb9b !important; -webkit-text-fill-color: #f0cb9b !important; }
body .text-info    { color: #a9cdf9 !important; -webkit-text-fill-color: #a9cdf9 !important; }
body .text-black   { color: var(--text) !important; }

body .bg-success-subtle   { background: rgba(31, 191, 146, .12) !important; color: #8ce9c6 !important; -webkit-text-fill-color: #8ce9c6 !important; }
body .bg-danger-subtle    { background: rgba(240, 117, 122, .12) !important; color: #f7b3b5 !important; -webkit-text-fill-color: #f7b3b5 !important; }
body .bg-warning-subtle   { background: rgba(224, 164, 88, .12) !important; color: #f0cb9b !important; -webkit-text-fill-color: #f0cb9b !important; }
body .bg-info-subtle      { background: rgba(106, 163, 240, .12) !important; color: #a9cdf9 !important; -webkit-text-fill-color: #a9cdf9 !important; }
body .bg-primary-subtle   { background: rgba(31, 191, 146, .12) !important; color: var(--brass-light) !important; -webkit-text-fill-color: var(--brass-light) !important; }
body .bg-secondary-subtle { background: rgba(255, 255, 255, .07) !important; color: var(--text) !important; -webkit-text-fill-color: var(--text) !important; }

body :is(.text-success-emphasis, .badge.bg-success-subtle) { color: #8ce9c6 !important; -webkit-text-fill-color: #8ce9c6 !important; }
body :is(.text-danger-emphasis, .badge.bg-danger-subtle) { color: #f7b3b5 !important; -webkit-text-fill-color: #f7b3b5 !important; }
body :is(.text-warning-emphasis, .badge.bg-warning-subtle) { color: #f0cb9b !important; -webkit-text-fill-color: #f0cb9b !important; }
body :is(.text-info-emphasis, .badge.bg-info-subtle) { color: #a9cdf9 !important; -webkit-text-fill-color: #a9cdf9 !important; }
body :is(.text-primary-emphasis, .badge.bg-primary-subtle) { color: var(--brass-light) !important; -webkit-text-fill-color: var(--brass-light) !important; }
body :is(.text-secondary-emphasis, .badge.bg-secondary-subtle) { color: var(--text) !important; -webkit-text-fill-color: var(--text) !important; }

body .alert-success { color: #8ce9c6 !important; }
body .alert-danger  { color: #f7b3b5 !important; }
body .alert-warning { color: #f0cb9b !important; }
body .alert-info    { color: #a9cdf9 !important; }

body .text-dark:not(.pc-container *) { color: var(--text) !important; }
body .text-white { color: #ffffff !important; }
body .text-primary { color: var(--brass-light) !important; }
body .text-body { color: var(--text) !important; }
body .border, body .border-top, body .border-bottom,
body .border-start, body .border-end { border-color: var(--border) !important; }

/* Изгледите пишат светли фонове право в style="" — CSS не може да ги
   пренапише по стойност, но може да ги хване по съдържание на атрибута. */
body [style*="background:#fff"]:not(.pc-container *):not(.v3d *),
body [style*="background: #fff"]:not(.pc-container *):not(.v3d *),
body [style*="background:#ffffff"]:not(.pc-container *):not(.v3d *),
body [style*="background: #ffffff"]:not(.pc-container *):not(.v3d *),
body [style*="background-color:#fff"]:not(.pc-container *):not(.v3d *),
body [style*="background-color: #fff"]:not(.pc-container *):not(.v3d *),
body [style*="background:#f8fafc"]:not(.pc-container *),
body [style*="background: #f8fafc"]:not(.pc-container *),
body [style*="background:#f1f5f9"]:not(.pc-container *),
body [style*="background: #f1f5f9"]:not(.pc-container *),
body [style*="background:#eff6ff"]:not(.pc-container *),
body [style*="background: #eff6ff"]:not(.pc-container *),
body [style*="background:#f0fdf4"]:not(.pc-container *),
body [style*="background: #f0fdf4"]:not(.pc-container *),
body [style*="background:#fefce8"]:not(.pc-container *),
body [style*="background: #fefce8"]:not(.pc-container *) {
    background-color: rgba(255, 255, 255, .06) !important;
    background-image: none !important;
    color: var(--text) !important;
}

/* ── 11 · Изгледи със собствени панели ───────────────────────────────────── */
/* Списъкът е взет от chambers-theme (секция 13) — там същите класове бяха
   обявени за „хартия". Тук стават стъкло. */
body :is(.calendar-filters, .calendar-cell, .calendar-header,
         .file-card, .file-preview, .file-preview-container, .file-preview-item, .file-item,
         .file-upload-area, .existing-file-item, .uploaded-file-item,
         .va-stat-card, .va-config-card, .va-chat-wrapper, .va-transcript-box, .va-response-box,
         .action-bar, .status-card, .doctor-section, .day-card,
         .clean-container, .dash-stat, .dash-card, .dash-list-item,
         .register-card, .register-footer, .success-card, .success-icon-wrapper,
         .access-denied-card, .profile-card, .profile-info-card,
         .selected-teeth-display, .intervention-details, .timeline-content, .total-section,
         .step-indicator, .wizard-card, .wizard-footer, .selection-card, .time-slot,
         .form-card, .patient-info, .patient-search-results, .patient-result,
         .search-result-item, .patient-result-item, .jaw-section,
         .patient-card-row, .mini-stat, .search-bar-container,
         .pd-stat-card, .pd-tab-content, .pd-tabs-wrapper, .pd-chart-legend, .pd-file-card,
         .summary-card, .info-box, .panel-box,
         .booking-card, .stat-card, .table-container, .conf-details,
         .quote-card, .intv-card, .report-card, .material-card, .qf-panel) {
    /* Същата рецепта като .nx-card на логина — иначе панелите на изгледите
       оставаха с по-плитко размиване и по-остър ъгъл от Bootstrap картите. */
    background: rgba(255, 255, 255, .048) !important;
    background-image: none !important;
    background-color: rgba(255, 255, 255, .048) !important;
    border: 1px solid var(--border) !important;
    border-radius: 20px;
    color: var(--text) !important;
    backdrop-filter: blur(26px) saturate(1.3);
    -webkit-backdrop-filter: blur(26px) saturate(1.3);
    box-shadow: 0 32px 80px rgba(0, 0, 0, .5), inset 0 1px 0 rgba(255, 255, 255, .07) !important;
}

body :is(.calendar-cell.disabled, .time-slot.disabled) {
    background: rgba(255, 255, 255, .02) !important;
    color: rgba(219, 227, 240, .3) !important;
}

body :is(.selection-card:hover, .time-slot:hover, .patient-result:hover, .search-result-item:hover, .dash-list-item:hover) {
    background: rgba(var(--brass-rgb), .12) !important;
    border-color: rgba(var(--brass-rgb), .4) !important;
}

/* Компоненти, писани със собствени светли фонове в отделните изгледи.
   Открити с обхождане на страниците: шаблоните за манипулации рисуват бели
   бутони и менюта, гласовият асистент — светли стъпки, календарът — бледи
   значки. Класовете са локални за тези изгледи, затова не ги хваща нищо
   от общите правила по-горе. */
/* Специфичността тук не е излишна: изгледът пише
   `.intervention-card .intv-menu-btn` (0,2,0) с !important, а
   `body :is(.intv-menu-btn)` тежи само 0,1,1 — :is() взима теглото на
   най-специфичния си аргумент, тоест един клас. Затова родителят е изписан. */
body .intervention-card :is(.intv-menu-btn, .intv-card-menu, .intv-footer-btn, .intv-card-head),
body :is(.intv-menu-btn, .intv-card-menu, .intv-footer-btn, .intv-card-head,
         .va-flow-step, .va-step-card, .va-panel,
         .calendar-day, .calendar-cell-inner, .appointment-badge, .booking-badge,
         .toast-notification, .color-swatch-row) {
    background: rgba(255, 255, 255, .06) !important;
    background-color: rgba(255, 255, 255, .06) !important;
    background-image: none !important;
    border-color: var(--border) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}
body .intervention-card :is(.intv-menu-btn, .intv-footer-btn):hover,
body :is(.intv-menu-btn, .intv-footer-btn, .va-flow-step, .calendar-day):hover {
    background: rgba(var(--brass-rgb), .16) !important;
    background-color: rgba(var(--brass-rgb), .16) !important;
    border-color: rgba(var(--brass-rgb), .45) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}
body :is(.intv-footer-btn, .intv-menu-btn, .va-flow-step) i { color: inherit !important; -webkit-text-fill-color: inherit !important; }

/* Клетката на текущия ден в календара. Числото в нея е почти бяло (#fffaf0,
   наложено с !important), а подложката оставаше светла — бяло върху бледо
   даваше 1.8:1. Подложката става мастилено-ментова, надписът остава светъл. */
body :is(.calendar-day.today, .calendar-cell.today) {
    background: rgba(var(--brass-rgb), .2) !important;
    background-color: rgba(var(--brass-rgb), .2) !important;
    background-image: none !important;
    border-color: rgba(var(--brass-rgb), .5) !important;
}
/* Върху ПЛЪТНА мента мастилото е тъмно, не светло.

   Тези два елемента се рисуват с плътен --brass фон (единият от изгледа,
   другият от chambers-theme). Светъл надпис върху него дава 1.6–2.4:1.
   Единият случай е мой: глобалното правило за връзки пребоядиса .pd-action-call,
   който изгледът нарочно бе направил с тъмно мастило върху мента. */
body :is(.calendar-cell.today .calendar-day,
         .calendar-cell.today .calendar-day-header,
         .pd-action-call,
         a.pd-action-call) {
    color: #05130e !important;
    -webkit-text-fill-color: #05130e !important;
}
body :is(.pd-action-call, a.pd-action-call) i { color: #05130e !important; -webkit-text-fill-color: #05130e !important; }

/* Заглавията на групите в каталога с манипулации носят мътно кафяво от
   светлата епоха (#5d5a51) — остатък, който токените не достигат. */
body :is(.catalog-group-head, .catalog-group-head span, .catalog-group-sub) {
    color: var(--text-muted) !important;
    -webkit-text-fill-color: var(--text-muted) !important;
}
body .catalog-group-head :is(h1, h2, h3, h4, h5, h6, strong) {
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}

/* Кръглите икони в картите бяха плътни цветни петна — стават стъклени
   ореоли, за да не блестят като копчета върху мастилото. */
body :is(.stat-icon, .dash-stat-icon, .feature-icon, .empty-icon, .avatar-circle) {
    background-color: rgba(var(--brass-rgb), .14) !important;
    background-image: none !important;
    border: 1px solid rgba(var(--brass-rgb), .3) !important;
    color: var(--brass-light) !important;
}

/* Числата в статистиките — ментови, моноширинни */
body :is(.stat-info h3, .stat-number, .card-value, .stat-value, .pc-stat-value, .counter, .mini-stat-value) {
    color: var(--text-strong) !important;
    -webkit-text-fill-color: var(--text-strong) !important;
}

/* GDPR лентата е и без това тъмна — само подравняваме кантовете */
#gdprBanner {
    background: rgba(10, 17, 34, .96) !important;
    background-image: none !important;
    border-top: 1px solid rgba(var(--brass-rgb), .35) !important;
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
}

/* ── Зареждащ екран ──────────────────────────────────────────────────────
   Беше невидим на тъмно по три отделни причини: пръстенът е светлосив
   (#e5e7eb) и светеше като халка, въртящият се сегмент е var(--primary) —
   навито мастило, тоест същият цвят като фона — а надписът също беше navy. */
#loading-overlay {
    background: rgba(7, 13, 26, .92) !important;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
}

#loading-overlay .loading-spinner {
    border: 3px solid rgba(238, 243, 251, .14) !important;
    border-top-color: var(--brass) !important;
    box-shadow: 0 0 22px rgba(var(--brass-rgb), .22);
}

#loading-overlay .loading-content { color: var(--text) !important; }
#loading-overlay .loading-text { color: var(--text) !important; }
#loading-overlay .loading-text i { color: var(--brass-light) !important; }

/* Индикаторът за зареждане е обратна връзка, не украса: спре ли да се движи,
   се чете като „заби". Затова се върти и при системно „намалено движение",
   където chambers-theme гаси всяка анимация. */
@media (prefers-reduced-motion: reduce) {
    #loading-overlay .loading-spinner { animation: spin .8s linear infinite !important; }
    #loading-overlay .loading-dots::after { animation: dots 1.5s infinite !important; }
}

/* Таблото рисува собствени бели полета с !important в своя <style> блок.
   Селекторите тук са с една степен по-висока специфичност (`body ` + :is),
   иначе белите петна оставаха върху мастилото. */
body :is(.dash-board-btn, .dash-admin-grid, .dash-manip-field, .dash-manip-panel,
         .dash-manip-body, .dash-manip-head, .dash-manip-list, .dash-manip-item,
         .dash-search-box, .dash-manip-input) {
    background: rgba(255, 255, 255, .055) !important;
    background-color: rgba(255, 255, 255, .055) !important;
    background-image: none !important;
    border-color: var(--border) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
}

body :is(.dash-board-btn, .dash-admin-grid, .dash-manip-item):hover {
    background: rgba(var(--brass-rgb), .14) !important;
    background-color: rgba(var(--brass-rgb), .14) !important;
    border-color: rgba(var(--brass-rgb), .42) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}

body :is(.dash-board-btn, .dash-admin-grid) i { color: var(--brass-light) !important; -webkit-text-fill-color: var(--brass-light) !important; }

/* Административните плочки. Класът .dash-admin-grid стои на реда, а стилът в
   изгледа е писан за `a.dash-admin-grid` — затова самите връзки оставаха
   голи: 18px висок текст без рамка, вместо плочка. */
body .dash-admin-grid > [class*="col-"] { display: flex; }
body .dash-admin-grid a {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    width: 100%;
    padding: .8rem .5rem;
    border: 1px solid var(--border) !important;
    border-radius: 12px;
    background: rgba(255, 255, 255, .05) !important;
    color: var(--text) !important;
    -webkit-text-fill-color: var(--text) !important;
    font-size: .78rem;
    font-weight: 500;
    text-align: center;
    text-decoration: none !important;
    transition: background-color .22s ease, border-color .22s ease, transform .22s cubic-bezier(.22, 1, .36, 1);
}
body .dash-admin-grid a:hover {
    background: rgba(var(--brass-rgb), .14) !important;
    border-color: rgba(var(--brass-rgb), .45) !important;
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
    transform: translateY(-2px);
}
/* Инлайн style="color:#10b981" по иконите идва от изгледа — вдига се с
   по-висока специфичност, за да останат в една палитра. */
body .dash-admin-grid a i[style] {
    font-size: 1.25rem;
    color: var(--brass-light) !important;
    -webkit-text-fill-color: var(--brass-light) !important;
}

/* Бързите действия вече са тъмни — само им даваме ментов кант вместо плосък ръб */
body .dash-quick a {
    border: 1px solid rgba(var(--brass-rgb), .28) !important;
    box-shadow: none !important;
}
body .dash-quick a:hover { border-color: rgba(var(--brass-rgb), .6) !important; }

/* ── 11a · Мобилно ───────────────────────────────────────────────────────── */
/* Измерено на 375px след въвеждането на Nocturne. chambers-theme вече вдига
   .btn и .form-control до 44px, но не покрива обикновените връзки, чекбоксите
   и чиповете, а част от надписите падаха до 9.5px — под прага за четене на
   ръка. Тук се вдига само това, което се пипа или се чете. */
@media (max-width: 767.98px) {

    /* Тъч цели. Прагът е 44px; padding-ът е по-добър от фиксирана височина,
       защото не чупи вътрешното подравняване на чиповете. */
    body :is(.dash-quick a, .dash-board-btn, .footer-dev, .action-btn, .pd-qlink) {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
    }
    body .dash-admin-grid a { min-height: 62px; }

    /* Чекбоксите и радиобутоните идват 15px — почти невъзможни за уцелване */
    body :is(input[type="checkbox"], input[type="radio"], .form-check-input) {
        width: 22px !important;
        height: 22px !important;
        margin-top: 0;
    }
    body :is(.form-check-label, .nx-row label, .login-options label) {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
        gap: .6rem;
    }

    /* Връзките във футъра стоят вътре в изречение — пълните 44px биха
       разкъсали реда, затова зоната се разширява с padding до ~38px, което
       е измеримо по-добре от 18px и не чупи типографията. */
    body .dental-footer a { display: inline-block; padding: .55rem .3rem; }

    /* Долен праг за четене. 11px е границата, под която текстът на телефон
       се чете с присвиване; моноширинните етикети с разредка минават малко
       по-ниско, защото главните букви ги държат четими. */
    body :is(p, td, li, span, div, label, small):not(.badge):not(.status-badge):not([class*="mono"]) {
        font-size: max(1em, 11.5px);
    }
    body :is(.badge, .status-badge, .pd-badge, .dash-tile-label, .nxl-stat-lbl, .nx-ledger-idx) {
        font-size: 11px !important;
    }
    body .dropdown-header { font-size: 11px !important; }
    body .table > thead > tr > th { font-size: 10.5px !important; letter-spacing: .1em; }

    /* Стъклото е скъпо на телефон: blur върху всяка карта дърпа кадрите при
       скрол. Радиусът и фонът остават, размиването се редуцира. */
    body :is(.card, .section-card, .info-card, .stat-card, .dash-card, .dash-stat,
             .booking-card, .pd-stat-card, .pd-tab-content) {
        backdrop-filter: blur(12px) saturate(1.2);
        -webkit-backdrop-filter: blur(12px) saturate(1.2);
        box-shadow: 0 14px 34px rgba(0, 0, 0, .42), inset 0 1px 0 rgba(255, 255, 255, .06) !important;
    }

    /* Заоблянето 20px изяжда ширина на тесен екран */
    body :is(.card, .section-card, .info-card, .stat-card, .booking-card) { border-radius: 16px; }
}

/* ── 11b · Полета: без бели острови ──────────────────────────────────────── */
/* Плащането, качването на файлове и всяко .form-control, което още носи
   кремав фон от по-стар слой. Специфичността е нарочно висока. */
html[data-bs-theme="dark"] body .payment-widget :is(
    .form-control, .form-select, textarea, select,
    input[type="text"], input[type="number"], input[type="email"],
    input[type="tel"], input[type="file"], input[type="date"],
    input[type="time"], input[type="password"], input[type="search"],
    input[type="url"]
) {
    color-scheme: dark !important;
    background-color: rgba(255, 255, 255, .07) !important;
    background-image: none !important;
    color: #eef3fb !important;
    -webkit-text-fill-color: #eef3fb !important;
    caret-color: #eef3fb !important;
    border-color: rgba(238, 243, 251, .2) !important;
}

html[data-bs-theme="dark"] body :is(input[type="file"], .form-control[type="file"]) {
    color-scheme: dark !important;
    background-color: rgba(255, 255, 255, .055) !important;
    color: #eef3fb !important;
}

html[data-bs-theme="dark"] body input[type="file"]::file-selector-button,
html[data-bs-theme="dark"] body .form-control[type="file"]::file-selector-button {
    background: rgba(31, 191, 146, .14);
    border: 1px solid rgba(31, 191, 146, .35);
    color: #7de8c8;
    border-radius: 8px;
    padding: .35rem .75rem;
    margin-right: .75rem;
    cursor: pointer;
}

html[data-bs-theme="dark"] body .payment-widget :is(label, .form-label, .form-text, small, p, td, th, .text-muted, .text-dark) {
    color: #dbe3f0 !important;
    -webkit-text-fill-color: #dbe3f0 !important;
}

html[data-bs-theme="dark"] body .payment-widget .text-muted,
html[data-bs-theme="dark"] body .payment-widget .form-text,
html[data-bs-theme="dark"] body .payment-widget small {
    color: #8fa0b8 !important;
    -webkit-text-fill-color: #8fa0b8 !important;
}

html[data-bs-theme="dark"] body .payment-widget .card-header,
html[data-bs-theme="dark"] body .payment-widget .card-header * {
    color: #e6fbf3 !important;
    -webkit-text-fill-color: #e6fbf3 !important;
}

html[data-bs-theme="dark"] body .qf-panel :is(.form-control, .form-select, textarea, select),
html[data-bs-theme="dark"] body .form-modern .form-control {
    color-scheme: dark !important;
    background-color: rgba(255, 255, 255, .07) !important;
    color: #eef3fb !important;
    -webkit-text-fill-color: #eef3fb !important;
}

/* ── 11c · Запис: идентификационна плочка, цена, QR мост ─────────────────── */
body .ap-ident {
    --ap-line: rgba(125, 232, 200, .42);
    position: relative;
    display: flex;
    align-items: center;
    gap: 1rem;
    min-height: 5.6rem;
    padding: 1rem 1.15rem 1rem 1rem;
    overflow: hidden;
    border-radius: 18px !important;
    border: 1px solid rgba(125, 232, 200, .28) !important;
    background:
        linear-gradient(135deg, rgba(31, 191, 146, .16) 0 4px, transparent 4px),
        linear-gradient(180deg, rgba(255, 255, 255, .07), rgba(7, 13, 26, .35)) !important;
    background-color: transparent !important;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08), 0 18px 40px rgba(0, 0, 0, .28) !important;
    backdrop-filter: none;
}

body .ap-ident::after {
    content: "";
    position: absolute;
    right: -18%;
    top: -40%;
    width: 46%;
    height: 160%;
    background: radial-gradient(circle, rgba(31, 191, 146, .18), transparent 68%);
    pointer-events: none;
}

body .ap-ident-mono {
    position: relative;
    z-index: 1;
    flex: 0 0 3.4rem;
    width: 3.4rem;
    height: 3.4rem;
    display: grid;
    place-items: center;
    border-radius: 12px;
    border: 1px solid rgba(125, 232, 200, .55);
    background: #0b1425;
    color: #7de8c8;
    font-family: "IBM Plex Mono", ui-monospace, monospace;
    font-size: 1.05rem;
    font-weight: 600;
    letter-spacing: .08em;
}

body .ap-ident-copy {
    position: relative;
    z-index: 1;
    min-width: 0;
}

body .ap-ident-copy strong {
    display: block;
    font-family: "Onest", "Golos Text", sans-serif;
    font-size: 1.22rem;
    font-weight: 650;
    letter-spacing: -.03em;
    line-height: 1.15;
    color: #f4f7fc !important;
    -webkit-text-fill-color: #f4f7fc !important;
}

body .ap-ident-copy p {
    margin: .28rem 0 0;
    color: var(--text-muted) !important;
    font-size: .82rem;
}

body .ap-ident-copy dl {
    display: flex;
    flex-wrap: wrap;
    gap: .35rem 1.15rem;
    margin: .45rem 0 0;
}

body .ap-ident-copy dl > div {
    display: flex;
    gap: .4rem;
    align-items: baseline;
}

body .ap-ident-copy dt {
    font-size: .62rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: #7de8c8 !important;
    font-weight: 600;
}

body .ap-ident-copy dd {
    margin: 0;
    font-family: "IBM Plex Mono", ui-monospace, monospace;
    font-size: .84rem;
    color: #dbe3f0 !important;
}

body .ap-ident--empty {
    border-style: dashed !important;
    border-color: rgba(143, 160, 184, .35) !important;
    background: rgba(255, 255, 255, .03) !important;
}

body .ap-ident--empty .ap-ident-mono {
    color: #8fa0b8;
    border-color: rgba(143, 160, 184, .35);
}

body .ap-ident--empty strong {
    color: #8fa0b8 !important;
    -webkit-text-fill-color: #8fa0b8 !important;
    font-size: 1rem;
}

body .ap-type-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin-bottom: .45rem;
}

body .ap-price {
    display: inline-flex;
    align-items: baseline;
    gap: .15rem;
    padding: .18rem .7rem .22rem;
    border-radius: 999px;
    background: rgba(31, 191, 146, .16);
    border: 1px solid rgba(31, 191, 146, .45);
    color: #7de8c8 !important;
    font-family: "IBM Plex Mono", ui-monospace, monospace;
    font-size: .92rem;
    font-weight: 650;
    letter-spacing: .02em;
}

body .ap-bridge {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 1.25rem;
    align-items: center;
    padding: 1.1rem 1.2rem;
    border-radius: 20px;
    border: 1px solid rgba(125, 232, 200, .22);
    background: linear-gradient(90deg, rgba(255, 255, 255, .07), rgba(7, 13, 26, .2));
}

body .ap-bridge-qr {
    display: grid;
    place-items: center;
}

body .ap-qr-paper {
    width: 168px;
    height: 168px;
    padding: 10px;
    border-radius: 14px;
    background: #fffefb !important;
    box-shadow: 0 12px 32px rgba(0, 0, 0, .35);
}

body .ap-qr-paper.is-empty {
    background:
        repeating-linear-gradient(-45deg, #fffefb, #fffefb 10px, #f3f1ea 10px, #f3f1ea 20px) !important;
}

body .ap-qr-paper img,
body .ap-qr-paper canvas,
body .ap-qr-paper table {
    display: block;
    margin: 0 auto;
}

body .ap-bridge-kicker {
    margin: 0 0 .2rem;
    font-size: .68rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: #7de8c8 !important;
}

body .ap-bridge-copy h5 {
    margin: 0 0 .4rem;
    font-family: "Onest", sans-serif;
    letter-spacing: -.03em;
    color: #fff !important;
}

body .ap-bridge-copy p {
    margin: 0 0 .65rem;
    color: var(--text-muted) !important;
    font-size: .92rem;
    max-width: 36rem;
}

body .ap-bridge-url {
    font-family: "IBM Plex Mono", ui-monospace, monospace;
    font-size: .72rem;
    word-break: break-all;
    color: #a5b4c8 !important;
}

@media (max-width: 720px) {
    body .ap-bridge {
        grid-template-columns: 1fr;
        justify-items: center;
        text-align: center;
    }
}

body .cap-desk {
    max-width: 34rem;
    margin: 0 auto 2.5rem;
    padding: 0 .4rem 2rem;
}

body .cap-kicker {
    margin: 0 0 .35rem;
    font-size: .68rem;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: #7de8c8 !important;
}

body .cap-head h1 {
    margin: 0 0 1rem;
    font-family: "Onest", sans-serif;
    font-size: clamp(1.8rem, 6vw, 2.6rem);
    letter-spacing: -.04em;
    color: #fff !important;
}

body .cap-head h1 em {
    font-style: italic;
    color: #7de8c8;
}

body .cap-shutters {
    display: grid;
    grid-template-columns: 1fr;
    gap: .75rem;
    margin: 1.4rem 0 1rem;
}

body .cap-shutter {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: .15rem;
    padding: 1.15rem 1.2rem;
    border-radius: 18px;
    border: 1px solid rgba(125, 232, 200, .28);
    background: rgba(255, 255, 255, .05);
    color: #eef3fb;
    text-align: left;
}

body .cap-shutter i { color: #7de8c8; font-size: 1.2rem; margin-bottom: .2rem; }
body .cap-shutter strong { font-size: 1.15rem; letter-spacing: -.02em; }
body .cap-shutter small { color: #8fa0b8; }

body .cap-shutter--lens {
    min-height: 7.2rem;
    background:
        radial-gradient(circle at 88% 20%, rgba(31, 191, 146, .28), transparent 42%),
        rgba(255, 255, 255, .05);
}

body .cap-shutter-ring {
    position: absolute;
    right: 1.1rem;
    top: 50%;
    width: 3.4rem;
    height: 3.4rem;
    margin-top: -1.7rem;
    border-radius: 50%;
    border: 3px solid #7de8c8;
    box-shadow: inset 0 0 0 6px #070d1a, 0 0 0 1px rgba(31, 191, 146, .4);
}

body .cap-status {
    min-height: 1.4rem;
    font-family: "IBM Plex Mono", ui-monospace, monospace;
    font-size: .85rem;
}

body .cap-status.is-ok { color: #7de8c8 !important; }
body .cap-status.is-err { color: #f0a8a8 !important; }

body .cap-strip h2 {
    font-size: .72rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: #8fa0b8 !important;
    margin: 1.4rem 0 .7rem;
}

body .cap-film {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(5.6rem, 1fr));
    gap: .55rem;
    list-style: none;
    padding: 0;
    margin: 0;
}

body .cap-frame {
    aspect-ratio: 1;
    overflow: hidden;
    border-radius: 12px;
    border: 1px solid var(--border);
    background: #0b1425;
}

body .cap-frame img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

body .cap-frame--document a {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .35rem;
    height: 100%;
    padding: .4rem;
    color: #7de8c8;
    font-size: .65rem;
    text-align: center;
    word-break: break-word;
}

body .cap-empty { color: var(--text-muted) !important; font-size: .9rem; }

@media (min-width: 520px) {
    body .cap-shutters { grid-template-columns: 1.3fr .9fr .9fr; }
    body .cap-shutter--lens { grid-column: 1 / -1; }
}

/* ── Каса · статусни цветове ─────────────────────────────────────────────── */
/* Платено = мента, за плащане = корал, капаро = кехлибар.
   НЗОК / обработка / отказ / възстановяване са отделни тонове.
   Чипът винаги носи етикет — цветът не е единственият код. */
.pay-chip {
    display: inline-flex;
    align-items: center;
    gap: .28rem;
    padding: .22rem .62rem;
    border-radius: 999px;
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: .01em;
    border: 1px solid transparent;
    line-height: 1.2;
    vertical-align: middle;
}
.pay-chip--paid   { background: rgba(31, 191, 146, .2);  color: #7de8c8; border-color: rgba(31, 191, 146, .42); }
.pay-chip--due    { background: rgba(232, 137, 106, .2); color: #f3b49a; border-color: rgba(232, 137, 106, .45); }
.pay-chip--partial{ background: rgba(224, 164, 88, .22);  color: #f0cb9b; border-color: rgba(224, 164, 88, .48); }
.pay-chip--wait   { background: rgba(106, 163, 240, .2); color: #a9cdf9; border-color: rgba(106, 163, 240, .42); }
.pay-chip--nzok   { background: rgba(78, 205, 196, .18);  color: #9eefe8; border-color: rgba(78, 205, 196, .4); }
.pay-chip--cancel { background: rgba(143, 160, 184, .16); color: #c2ccdb; border-color: rgba(143, 160, 184, .32); }
.pay-chip--fail   { background: rgba(240, 117, 122, .2); color: #f7b3b5; border-color: rgba(240, 117, 122, .45); }
.pay-chip--refund { background: rgba(183, 148, 244, .2); color: #d4bfff; border-color: rgba(183, 148, 244, .42); }
.pay-chip--advance{ background: rgba(125, 232, 200, .14); color: #b8f3e0; border-color: rgba(125, 232, 200, .38); }

.pay-row--paid    { background: rgba(31, 191, 146, .12) !important; }
.pay-row--due     { background: rgba(232, 137, 106, .12) !important; }
.pay-row--partial { background: rgba(224, 164, 88, .12) !important; }
.pay-row--wait    { background: rgba(106, 163, 240, .1) !important; }
.pay-row--nzok    { background: rgba(78, 205, 196, .1) !important; }
.pay-row--cancel  { background: rgba(143, 160, 184, .08) !important; }
.pay-row--fail    { background: rgba(240, 117, 122, .12) !important; }
.pay-row--refund  { background: rgba(183, 148, 244, .1) !important; }

.payment-widget--partial .card-header {
    background: rgba(224, 164, 88, .22);
}

/* ── Каса · опашка за плащане ────────────────────────────────────────────── */
.kasa-head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: .85rem 1.25rem;
    margin-bottom: 1.1rem;
}
.kasa-head h1 {
    margin: 0;
    font-size: 1.55rem;
    font-weight: 650;
    letter-spacing: -.02em;
    color: var(--text-strong, #eef3fb);
}
.kasa-sum {
    margin: .28rem 0 0;
    color: var(--text-muted);
    font-size: .95rem;
}
.kasa-head-actions {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    align-items: center;
}
.kasa-chips {
    display: flex;
    flex-wrap: wrap;
    gap: .4rem;
    margin-bottom: 1rem;
}
.kasa-chip {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding: 0 .95rem;
    border-radius: 999px;
    border: 1px solid var(--border);
    color: var(--text);
    text-decoration: none;
    font-weight: 650;
    font-size: .9rem;
    background: rgba(255, 255, 255, .04);
}
.kasa-chip:hover { color: #fff; background: rgba(255, 255, 255, .08); }
.kasa-chip.is-on.kasa-chip--unpaid {
    background: rgba(232, 137, 106, .22);
    color: #f3b49a;
    border-color: rgba(232, 137, 106, .5);
}
.kasa-chip.is-on.kasa-chip--partial {
    background: rgba(224, 164, 88, .22);
    color: #f0cb9b;
    border-color: rgba(224, 164, 88, .5);
}
.kasa-chip.is-on.kasa-chip--paid {
    background: rgba(31, 191, 146, .2);
    color: #7de8c8;
    border-color: rgba(31, 191, 146, .45);
}
.kasa-chip.is-on.kasa-chip--all {
    background: rgba(255, 255, 255, .1);
    color: #fff;
    border-color: var(--border-strong, #4a5a78);
}
.kasa-chip.is-on.kasa-chip--journal {
    background: rgba(106, 163, 240, .2);
    color: #a9cdf9;
    border-color: rgba(106, 163, 240, .45);
}
.kasa-kind {
    display: inline-block;
    margin-right: .4rem;
    color: var(--text-muted);
    font-size: .72rem;
    font-weight: 650;
    letter-spacing: .06em;
    text-transform: uppercase;
}
.kasa-filters {
    display: grid;
    grid-template-columns: 1fr;
    gap: .75rem;
    margin-bottom: 1.1rem;
    max-width: 52rem;
}
.kasa-search {
    display: grid;
    grid-template-columns: 1fr;
    gap: .75rem;
    margin-bottom: 1.15rem;
    max-width: 64rem;
}
@media (min-width: 768px) {
    .kasa-search { grid-template-columns: minmax(14rem, 2fr) 11rem 11rem auto; align-items: end; }
}
.kasa-search-actions {
    display: flex;
    flex-wrap: wrap;
    gap: .4rem;
    align-items: end;
}
.kasa-search-actions .btn,
.kasa-filters-clear .btn,
.kasa-pay-btn {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
}
.kasa-pager {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .75rem 1.25rem;
    margin-top: 1rem;
    padding-top: .35rem;
}
.kasa-pager-count {
    margin: 0;
    color: var(--text-muted);
    font-size: .9rem;
    font-variant-numeric: tabular-nums;
}
#kasa-results[aria-busy="true"] { opacity: .55; }
.kasa-meta {
    margin-top: .15rem;
    color: var(--text-muted);
    font-size: .8rem;
}
.kasa-amt {
    font-variant-numeric: tabular-nums;
    font-family: var(--font-mono, ui-monospace, monospace);
    white-space: nowrap;
}
.kasa-actions {
    display: flex;
    flex-wrap: wrap;
    gap: .35rem;
    align-items: center;
}
.kasa-more {
    min-width: 44px;
    min-height: 44px;
}
.kasa-pay-dock { padding: .35rem 0 .15rem; max-width: 52rem; }
.kasa-empty { text-align: left; padding: 1.5rem 0 2rem; max-width: 36rem; }
.kasa-empty h2 { font-size: 1.2rem; margin-bottom: .4rem; }
body .kasa-table tbody tr.kasa-open > td {
    border-bottom-color: transparent !important;
}
body .kasa-table tbody tr.kasa-pay-row > td {
    background: rgba(255, 255, 255, .03) !important;
    padding-top: 0;
}

/* ── 12 · Печат ──────────────────────────────────────────────────────────── */
/* Хартията си остава хартия: мастилото се връща тъмно, стъклото — бяло.
   Без този блок разпечатките излизаха светъл текст върху бяло. */
@media print {
    :root {
        --surface: #ffffff;
        --surface-muted: #ffffff;
        --text: #111827;
        --text-strong: #000000;
        --text-muted: #4b5563;
        --border: #999999;
        --border-strong: #666666;
        --bs-body-bg: #ffffff;
        --bs-body-color: #111827;
        color-scheme: light;
    }

    html, body {
        background: #ffffff !important;
        background-color: #ffffff !important;
        color: #111827 !important;
    }

    .app-atmos { display: none !important; }

    body :is(.card, .card-body, .card-header, .card-footer, .modal-content,
             .table, .table thead th, .table tbody td, .list-group-item,
             .stat-card, .booking-card, .dash-card, .dash-stat, .pd-stat-card) {
        background: #ffffff !important;
        background-color: #ffffff !important;
        background-image: none !important;
        color: #111827 !important;
        border-color: #999999 !important;
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
        box-shadow: none !important;
    }

    body :is(h1, h2, h3, h4, h5, h6) { color: #000000 !important; -webkit-text-fill-color: #000000 !important; }
    body .table thead th { color: #000000 !important; -webkit-text-fill-color: #000000 !important; }
    body :is(p, td, span, div, li, small) { color: #111827 !important; -webkit-text-fill-color: #111827 !important; }
}
