/* ============================================================
   ДИЗАЙН СИСТЕМА на сайта (по DESIGN_BRIEF.md)
   Структура на файла:
     1. Токени (цветове, типография, отстъпи, радиуси, сенки)
     2. Основа (reset, типография, връзки, фокус)
     3. Компоненти (бутони, картички, форми, хедър, футър…)
     4. Hero и банери на вътрешните страници
     5. Секции по страници
     6. Движение (fade-in при скрол) + prefers-reduced-motion
     7. Адаптивност
   Всяка нова страница ползва само класовете оттук —
   без отделни стилове в шаблоните.
   ============================================================ */

/* ============================================================
   АДАПТИВНОСТ: ТОЧКИТЕ НА ПРЕЧУПВАНЕ (подредено на 11.08.2026)

   ⚠️ ВСИЧКИ МЕДИЯ ЗАЯВКИ СА В `rem`, НЕ В `px`.
   Дотук файлът смесваше двете (640px и 40rem са едно и също при основа
   16px — и съвсем различно, ако човек си е вдигнал шрифта в браузъра). При
   вдигнат шрифт `rem` заявките се местят заедно с текста, а `px` остават на
   място: тогава едната половина от страницата минава в мобилен изглед, а
   другата не. Затова 20 заявки бяха преобразувани в `rem`.

   ⚠️ ГОРНАТА ГРАНИЦА Е ВИНАГИ С .01 ПО-МАЛКО.
   `max-width: 40rem` и `min-width: 40rem` съвпадат ТОЧНО на 40rem и двете
   важат едновременно — на екран, широк точно толкова, се прилагаха и
   мобилните, и настолните правила. Затова горните граници са 39.99rem.

   Стълбицата (основа 16px):
     30rem     480px   малък телефон
     35rem     560px   телефон
     37.5rem   600px   голям телефон
     40rem     640px   телефон в ширина / малък таблет
     45rem     720px   таблет
     47.5rem   760px   таблет
     48rem     768px   таблет в ширина
     53.75rem  860px   малък лаптоп
     56.25rem  900px   лаптоп
     60rem     960px   лаптоп
     64rem    1024px   голям лаптоп и нагоре

   ⚠️ ДЪЛГ: единайсет стойности са твърде много — различните компоненти
   се пречупват на различни места и на 800px част от страницата изглежда
   „таблет“, а част „лаптоп“. Свиването до четири (40 / 48 / 64 / 80rem)
   иска визуална проверка на всяка страница и затова НЕ е направено
   наведнъж. Ново правило се пише на стойност ОТ стълбицата, не на нова.
   ============================================================ */

/* ---------- 0. ШРИФТОВЕ (самохоствани, задължително — style-src/font-src 'self') ----------
   Source Serif 4 (400, 600) — заглавия, числа, цени.
   Golos Text (400, 500, 600, 700) — тяло, етикети, бутони.
   И двата са variable fonts в Google Fonts: латиница и кирилица идват в ОТДЕЛНИ
   файлове (2 на семейство = 4 общо), но всеки файл покрива целия набор тежести
   по-горе — затова тежестите се декларират многократно към един и същ файл
   (стандартният начин, по който Google Fonts обслужва variable fonts).
   Няма подскачане чрез size-adjust/ascent-override: точните стойности изискват
   измерване на метриките на всеки резервен шрифт (system-ui е различен на
   Windows/Mac/Linux), а познаване на приблизителна стойност е точно видът
   „уверено грешно“, което проектът избягва (виж CLAUDE.md). Приема се съзнателно
   лек reflow при първо зареждане с font-display: swap; при следващо посещение
   шрифтът е кеширан и подскачането не се усеща. */
@font-face {
    font-family: "Source Serif 4";
    font-style: normal;
    font-weight: 400 600;
    font-display: swap;
    src: url("../fonts/source-serif-4-latin.197cc326af6d.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: "Source Serif 4";
    font-style: normal;
    font-weight: 400 600;
    font-display: swap;
    src: url("../fonts/source-serif-4-cyrillic.510c90fa5758.woff2") format("woff2");
    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
    font-family: "Golos Text";
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src: url("../fonts/golos-text-latin.f57df9832ab8.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: "Golos Text";
    font-style: normal;
    font-weight: 400 700;
    font-display: swap;
    src: url("../fonts/golos-text-cyrillic.2b8fbbb33a14.woff2") format("woff2");
    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* ---------- 1. ТОКЕНИ ---------- */
/* Индиго + виолетово, заоблени карти, плаващ pill хедър —
   върху реалните снимки на текущия сайт (hero/банери остават същите). */
:root {
    /* Цветове: индиго = доверие/действие, виолетово = вторичен акцент.
       ЗЕЛЕНОТО ОТПАДНА. Тюркоазът (teal 600/700) не се връзваше с навы +
       индиго — две различни температури в един екран. Виолетово-индиговата
       гама е съседна на основния цвят и лентите се четат като едно семейство.
       Контраст: бял текст върху #7c3aed е 5.9:1 (AA), а върху най-светлата
       точка на градиента #a855f7 — 4.6:1 (пак AA). Затова върху градиента
       НЕ се слага сив текст, само бял. */
    --color-navy: #1e1b3a;
    --color-primary: #4f46e5;
    --color-primary-dark: #4338ca;
    --color-accent: #7c3aed;
    --color-accent-dark: #5b21b6;
    --color-accent-soft: #a78bfa;
    --gradient-accent: linear-gradient(135deg, #4f46e5 0%, #7c3aed 55%, #a855f7 100%);
    --color-accent-bg: #efedfd;
    --color-on-navy: #cecbf6;        /* текст върху навы лентите, вече ползван в "Услуги" */
    --color-on-navy-muted: #afa9ec;  /* приглушен текст върху навы */

    /* Неутрални: текстът е тъмен върху светло за контраст ≥ 7:1 */
    --color-text: #1f2937;
    --color-muted: #6b6b87;      /* контраст ≥ 7:1 върху бяло */
    --color-bg: #f6f5fd;
    --color-card: #ffffff;
    --color-border: #eceafb;

    /* Състояния */
    --color-danger: #dc2626;
    --color-success: #065f46;
    --color-success-bg: #ecfdf5;
    --color-warning: #92400e;
    --color-warning-bg: #fffbeb;
    --color-danger-bg: #fef2f2;

    /* Затъмняващ слой върху hero/банер снимките */
    --overlay-dark: rgba(15, 20, 45, 0.74);
    --overlay-light: rgba(30, 27, 58, 0.58);

    /* Типография: самохоствани уеб шрифтове с пълна кирилица; тяло ≥ 18px.
       Системната редица остава като резервна при бавна мрежа/блокирани шрифтове. */
    --font-display: "Source Serif 4", Georgia, serif;
    --font-body: "Golos Text", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    --text-sm: 0.875rem;
    --text-base: 1.125rem;   /* 18px — тялото */
    --text-md: 1.25rem;
    --text-lg: 1.5rem;
    --text-xl: clamp(1.6rem, 3vw, 2.2rem);
    --text-hero: clamp(2.1rem, 4.5vw, 3.6rem);
    --leading: 1.6;

    /* Едно място, откъдето всяко „героично“ число взима вида си. Досега
       същото число беше 4.75rem в лентата с числа, 4rem в резултата на
       калкулатора, 2.4rem на „Вашият пакет“ и 2rem в кутията за покупка —
       четири размера за едно нещо. Три стъпки, не четири:
       lg = лента на цяла ширина, md = кутия/панел, sm = ред в списък. */
    --figure-lg: clamp(2.5rem, 2rem + 2.5vw, 4.5rem);
    --figure-md: clamp(2rem, 1.6rem + 1.6vw, 3rem);
    --figure-sm: clamp(1.5rem, 1.3rem + 0.8vw, 1.875rem);

    /* Отстъпи (кратни на 0.25rem) */
    --space-1: 0.25rem;
    --space-2: 0.5rem;
    --space-3: 0.75rem;
    --space-4: 1rem;
    --space-5: 1.5rem;
    --space-6: 2rem;
    --space-7: 2.5rem;
    --space-8: 3.5rem;

    /* Радиуси и сенки: по-заоблени карти в стила на визия 2б */
    --radius-sm: 10px;
    --radius: 14px;
    --radius-md: 18px;
    --radius-lg: 28px;
    --radius-pill: 999px;
    --shadow: 0 2px 8px rgba(30, 27, 58, 0.05);
    --shadow-hover: 0 10px 26px rgba(30, 27, 58, 0.1);
    --shadow-lift: 0 18px 46px rgba(79, 70, 229, 0.16);

    /* Движение и достъпност */
    --transition: 0.18s ease;
    --tap-target: 2.75rem;   /* ~44px минимална цел за докосване */
    --focus-ring: 3px solid var(--color-primary);
}

/* ---------- 2. ОСНОВА ---------- */
* { box-sizing: border-box; }

body {
    margin: 0;
    font-family: var(--font-body);
    font-size: var(--text-base);
    line-height: var(--leading);
    color: var(--color-text);
    background: var(--color-bg);
}

img { max-width: 100%; display: block; }

/* Йерархия на заглавията — забележимо по-големи от тялото */
h1 { font-size: var(--text-xl); line-height: 1.2; letter-spacing: -0.02em; margin: 0 0 var(--space-4); color: var(--color-navy); }
h2 { font-size: var(--text-lg); line-height: 1.25; margin: 0 0 var(--space-3); color: var(--color-navy); }
h3 { font-size: var(--text-md); line-height: 1.3; margin: 0 0 var(--space-2); }
h4 { font-size: var(--text-base); line-height: 1.35; margin: 0 0 var(--space-2); }

a { color: var(--color-primary); text-decoration: none; }
a:hover { text-decoration: underline; }

/* Видим фокус за работа с клавиатура — навсякъде, еднакъв */
:focus-visible {
    outline: var(--focus-ring);
    outline-offset: 2px;
    border-radius: 4px;
}
/* Индиговата рамка се губи върху тъмните ленти (индиго на индиго) —
   там фокусът е светъл, не по-тъмен вариант на същия цвят */
.band-navy :focus-visible,
.band-accent :focus-visible { outline-color: #fff; }

/* Връзка „Към съдържанието“ — видима само при фокус с клавиатура */
.skip-link {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 100;
    background: var(--color-navy);
    color: #fff;
    padding: var(--space-3) var(--space-5);
    border-radius: 0 0 var(--radius) 0;
    font-weight: 600;
}
.skip-link:focus-visible { left: 0; text-decoration: none; }

.container {
    max-width: 1140px;
    margin: 0 auto;
    padding: 0 var(--space-4);
}

main.container { padding-top: var(--space-6); padding-bottom: var(--space-8); }
/* Страница, чието съдържание е изцяло в ленти (начална, за нас, казуси),
   оставя `main` празен. Без това правило неговите отстъпи рисуват ивица
   празно между последната лента и футъра. Работи само защото в base.html
   отварящият и затварящият таг са на един ред — виж бележката там. */
main.container:empty { padding: 0; }

/* ---------- 3. КОМПОНЕНТИ ---------- */

/* --- Бутони: една основа + разновидности; цел за докосване ≥ 44px --- */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    min-height: var(--tap-target);
    padding: 0.7rem 1.5rem;
    border: 0;
    border-radius: var(--radius-pill);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
    transition: background var(--transition), box-shadow var(--transition), transform var(--transition);
}
.btn:hover { text-decoration: none; }

.btn-primary { background: var(--color-primary); color: #fff; box-shadow: 0 8px 20px rgba(79, 70, 229, 0.22); }
.btn-primary:hover { background: var(--color-primary-dark); }

.btn-secondary {
    background: var(--color-accent-bg);
    color: var(--color-primary-dark);
    border: 0;
}
.btn-secondary:hover { background: #e4e1fb; }

/* Единствен основен призив — едър, индиговa бутон с мека сянка */
.btn-cta {
    background: var(--color-primary);
    color: #fff;
    font-size: 1.1rem;
    padding: 0.85rem 2.1rem;
    box-shadow: 0 10px 24px rgba(79, 70, 229, 0.28);
}
.btn-cta:hover {
    background: var(--color-primary-dark);
    transform: translateY(-2px);
    box-shadow: 0 12px 28px rgba(79, 70, 229, 0.34);
}

/* --- Картичка: обща основа, наследена от конкретните картички --- */
/* `.product-card` НЕ е тук: картата на услугата има собствен вид с цветна
   лента отляво (виж „Раздел Услуги“ по-долу), а не рамка от всички страни.
   `.cart-row`/`.cart-summary`/`.payment-method`/`.bank-instructions`
   излязоха оттук при партида Б; `.case-card` — при партида В. При визия 3
   `.about-card`, `.contact-info`, `.contact-form-panel` и
   `.checkout-form-panel` отпаднаха изцяло: белите панели вече са един клас
   (`.formpanel`), а картите — редове (виж
   съответните раздели по-долу). `.category-card` беше тук, махната е при
   уборката на партида Г (мъртва — виж бележката в раздел „5. Секции по
   страници“). `.auth-card`/`.payment-sim-card` бяха оставени непипнати като
   „извън обхвата на визия „1c““, но формата за вход е ПЪРВОТО, което вижда
   човек, минал през публичния сайт — сянка точно там прави прехода видим.
   Затова и те минаха на плоско, заедно с `.doc-card` и
   `.portal-module-card`. */
.auth-card,
.payment-sim-card {
    background: var(--color-card);
    border: 1px solid var(--color-border);
}

/* --- Форми и полета --- */
.form-field { margin-bottom: 1.1rem; }
.form-field label { display: block; font-weight: 600; margin-bottom: 0.35rem; }
.form-field input,
.form-field textarea,
.form-field select {
    width: 100%;
    min-height: var(--tap-target);
    font: inherit;
    padding: 0.65rem 0.8rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    background: var(--color-bg);
    color: var(--color-text);
}
.form-field textarea { min-height: 7rem; }
.form-field input:focus-visible,
.form-field textarea:focus-visible,
.form-field select:focus-visible {
    outline: var(--focus-ring);
    outline-offset: 0;
    border-color: var(--color-primary);
}
.field-error { color: var(--color-danger); font-size: 0.9rem; margin: 0.3rem 0 0; }

.form-success {
    background: var(--color-success-bg);
    border: 1px solid #10b981;
    border-radius: var(--radius);
    color: var(--color-success);
    padding: var(--space-3) var(--space-4);
    margin: 0 0 1.25rem;
}

/* --- Заглавна лента: плаваща заоблена лента (визия 2б) --- */
.site-header {
    position: sticky;
    top: 0;
    z-index: 20;
    background: rgba(246, 245, 253, 0.85);
    backdrop-filter: blur(10px);
    padding: 0.9rem 0;
}

/* Единствен ред: [бранд | табове | език + кошница + портал] в заоблена карта */
.header-inner {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.5rem 0.75rem;
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-pill);
    box-shadow: var(--shadow);
    padding: 0.55rem 0.7rem 0.55rem 1.1rem;
}

.brand {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    color: var(--color-navy);
}
.brand:hover { text-decoration: none; }
/* Иконна значка на бранда — заменя се лесно с реално лого (<img class="brand-logo">) */
.brand-mark {
    flex: none;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 14px;
    background: linear-gradient(135deg, var(--color-primary), #7c3aed);
    color: #fff;
    display: grid;
    place-items: center;
    font-weight: 800;
    font-size: 0.95rem;
}
.brand-name {
    font-size: 1.05rem;
    font-weight: 800;
    letter-spacing: -0.01em;
    line-height: 1.1;
    white-space: nowrap;
}
.brand-tagline {
    display: block;
    font-size: 0.72rem;
    font-weight: 600;
    color: var(--color-muted);
    white-space: nowrap;
}
/* При замяна на текста с лого: <img class="brand-logo"> в base.html */
.brand-logo { max-height: 2.5rem; width: auto; }

.main-nav { display: flex; gap: 0.15rem; margin-left: 0.5rem; }
.main-nav a {
    display: inline-flex;
    align-items: center;
    min-height: var(--tap-target);
    padding: 0 0.9rem;
    border-radius: var(--radius-pill);
    color: var(--color-text);
    font-weight: 600;
    white-space: nowrap;
    transition: color var(--transition), background var(--transition);
}
.main-nav a:hover { color: var(--color-primary-dark); background: var(--color-accent-bg); text-decoration: none; }

/* Дясна група: език + кошница + бутон „Клиентски портал“ */
.header-actions {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-left: auto;
}

.lang-switch {
    display: inline-flex;
    align-items: center;
    background: var(--color-bg);
    border-radius: var(--radius-pill);
    padding: 2px;
}
.lang-switch form { display: contents; }
.lang-btn {
    border: 0;
    background: none;
    font: inherit;
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--color-muted);
    cursor: pointer;
    min-height: 2.2rem;
    padding: 0 0.6rem;
    border-radius: var(--radius-pill);
    transition: color var(--transition), background var(--transition);
}
.lang-btn:hover { color: var(--color-primary-dark); }
.lang-btn.active { background: var(--color-card); color: var(--color-primary-dark); box-shadow: var(--shadow); }

/* Кошница с брояч */
.cart-link {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    min-height: var(--tap-target);
    padding: 0 0.9rem;
    border-radius: var(--radius-pill);
    color: var(--color-text);
    font-weight: 600;
    transition: color var(--transition), background var(--transition);
}
.cart-link:hover { color: var(--color-primary-dark); background: var(--color-accent-bg); text-decoration: none; }
.cart-icon { width: 1.25rem; height: 1.25rem; flex: none; }
.cart-count {
    min-width: 1.35rem;
    height: 1.35rem;
    padding: 0 0.3rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--color-primary);
    color: #fff;
    border-radius: var(--radius-pill);
    font-size: 0.8rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

/* Главно действие за съществуващи клиенти: плътен индигов бутон */
.nav-portal {
    display: inline-flex;
    align-items: center;
    min-height: var(--tap-target);
    border-radius: var(--radius-pill);
    background: var(--color-primary);
    color: #fff;
    font-weight: 700;
    padding: 0 1.3rem;
    white-space: nowrap;
    box-shadow: 0 8px 20px rgba(79, 70, 229, 0.28);
    transition: background var(--transition), box-shadow var(--transition);
}
.nav-portal:hover {
    background: var(--color-primary-dark);
    box-shadow: 0 10px 24px rgba(79, 70, 229, 0.34);
    text-decoration: none;
}
/* Значката „чакащи преглед“ до „Документи“ в хедъра — вторичен бутон, за
   да не спори с главното действие „Клиентски портал“ */
.nav-portal.nav-badge {
    background: var(--color-card);
    color: var(--color-text);
    border: 1px solid var(--color-border);
    box-shadow: none;
    gap: 0.5rem;
}
.nav-portal.nav-badge:hover { background: var(--color-accent-bg); }

/* Бутон „Меню“ (сгъване на телефон): checkbox — работи без JavaScript.
   На широк екран е скрит; табовете се показват в реда на pill-а. */
.nav-toggle-input { position: absolute; opacity: 0; }
.nav-toggle {
    display: none;
    align-items: center;
    gap: 0.55rem;
    min-height: var(--tap-target);
    padding: 0 0.8rem;
    font-weight: 600;
    color: var(--color-text);
    cursor: pointer;
    border-radius: var(--radius-pill);
}
.nav-toggle-icon {
    position: relative;
    width: 1.2rem;
    height: 2px;
    background: currentColor;
    flex: none;
}
.nav-toggle-icon::before,
.nav-toggle-icon::after {
    content: "";
    position: absolute;
    left: 0;
    width: 100%;
    height: 2px;
    background: currentColor;
}
.nav-toggle-icon::before { top: -6px; }
.nav-toggle-icon::after { top: 6px; }
/* Видим фокус за клавиатура: checkbox-ът е фокусиран, рисуваме върху етикета */
.nav-toggle-input:focus-visible ~ .nav-toggle { outline: var(--focus-ring); outline-offset: 2px; }

/* --- Съобщения (messages) под хедъра --- */
.flash-messages { padding-top: var(--space-4); }
.flash {
    border: 1px solid;
    border-radius: var(--radius);
    padding: var(--space-3) var(--space-4);
    margin: 0 0 var(--space-2);
}
.flash-success { background: var(--color-success-bg); border-color: #10b981; color: var(--color-success); }
.flash-error { background: #fef2f2; border-color: var(--color-danger); color: #991b1b; }
.flash-info { background: var(--color-accent-bg); border-color: var(--color-primary); color: var(--color-navy); }

/* --- Превключвател на езици (BG | EN) — дискретни текстови връзки,
   за да не крадат вниманието от бутона „Клиентски портал“ --- */
.lang-switch {
    display: inline-flex;
    align-items: center;
}
.lang-switch form { display: contents; }
/* Разделител „|“ между езиците (формите са display: contents,
   но техните псевдоелементи пак се рисуват) */
.lang-switch form + form::before {
    content: "|";
    color: var(--color-border);
    padding: 0 0.15rem;
}
.lang-btn {
    border: 0;
    background: transparent;
    font: inherit;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--color-muted);
    min-height: 2.25rem;
    padding: 0.2rem 0.45rem;
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: color var(--transition);
}
.lang-btn:hover { color: var(--color-primary); text-decoration: underline; }
.lang-btn.active {
    color: var(--color-navy);
    font-weight: 800;
    text-decoration: underline;
    text-underline-offset: 4px;
}

/* --- Трохи (breadcrumbs) --- */
.breadcrumbs {
    background: var(--color-card);
    border-bottom: 1px solid var(--color-border);
    font-size: var(--text-sm);
}
.breadcrumbs ol {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-1);
    margin: 0;
    padding: var(--space-2) 0;
}
.breadcrumbs li + li::before {
    content: "›";
    margin: 0 0.4rem;
    color: var(--color-muted);
}
.breadcrumbs span { color: var(--color-muted); }

/* --- Етикет над заглавие (eyebrow) --- */
.eyebrow {
    display: inline-block;
    font-size: 0.8rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--color-primary-dark);
    background: var(--color-accent-bg);
    border-radius: var(--radius-pill);
    padding: 0.35rem 0.95rem;
    margin: 0 0 1.25rem;
}

/* --- Долен колонтитул --- */
.site-footer {
    background: var(--color-card);
    border-top: 1px solid var(--color-border);
    color: var(--color-muted);
    font-size: var(--text-sm);
    padding: 1.25rem 0;
}
.site-footer p { margin: 0; }

/* Правни връзки (GDPR) до копирайта; на телефон минават на нов ред */
.footer-inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem 1.5rem;
}
.footer-legal {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem 1.25rem;
}
.footer-legal a { color: var(--color-muted); text-decoration: underline; }
.footer-legal a:hover { color: var(--color-primary-dark); }
/* Бутонът „Настройки на бисквитките“ изглежда като връзка (отваря банера) */
.footer-legal-btn {
    background: none;
    border: 0;
    padding: 0;
    font: inherit;
    color: var(--color-muted);
    text-decoration: underline;
    cursor: pointer;
    min-height: var(--tap-target);
}
.footer-legal-btn:hover { color: var(--color-primary-dark); }

/* --- Банер за съгласие за бисквитки (GDPR) --- */
/* V3 (11.09.2026) — ПРОМЕНЕНО Е САМО ПРЕДСТАВЯНЕТО.
   Логиката (consent.js), срокът на бисквитката, гейтването на аналитиката и
   текстът НЕ са пипани.

   ЗАЩО. Банерът беше лилава стена на цялата ширина — на телефон заемаше
   близо една трета от първия екран и беше първото, което човек вижда. Сега
   е компактна тъмна карта, центрирана, с отстъп от ръбовете (и от „носа“
   на iPhone — `safe-area-inset-bottom`).

   ⚠️ ДВАТА БУТОНА СА ЕДНАКВИ — по размер, цвят и тежест. „Отказвам“ е точно
   толкова видим и лесен, колкото „Приемам“. Никакъв визуален натиск към
   единия избор. Белите бутони върху тъмна карта освен това не се бъркат с
   индиговите призиви на самата страница.

   ⚠️ `display` НЕ СЕ ЗАДАВА НА `.cookie-banner`. Скриването е с атрибута
   `hidden` (consent.js); `display: flex` тук би го надвил и банерът нямаше
   да изчезва след избор. Подредбата е на вътрешния елемент. */
.cookie-banner {
    position: fixed;
    left: 50%;
    bottom: max(1rem, env(safe-area-inset-bottom));
    z-index: 100;
    width: min(52rem, calc(100% - 2rem));
    translate: -50% 0;
    padding: 1rem 1rem 1rem 1.4rem;
    border: 1px solid rgba(196, 181, 253, 0.22);
    border-radius: 20px;
    background: var(--color-navy);
    background-clip: padding-box;
    color: #fff;
    box-shadow: 0 1px 2px rgba(15, 12, 40, 0.2), 0 22px 48px -18px rgba(15, 12, 40, 0.55);
}
.cookie-banner[hidden] { display: none; }
.cookie-banner-inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem 1.5rem;
    max-width: none;
    padding: 0;
}
.cookie-banner-text {
    flex: 1 1 22rem;
    margin: 0;
    font-size: 0.9375rem;
    line-height: 1.5;
    color: rgba(255, 255, 255, 0.88);
}
.cookie-banner-text a { color: #fff; text-decoration: underline; text-underline-offset: 2px; }
.cookie-banner-actions { display: flex; flex: none; gap: 0.6rem; }
.cookie-btn {
    min-width: 8.5rem;
    padding: 0.6rem 1.4rem;
    font-weight: 700;
    font-size: 0.9375rem;
    background: #fff;
    color: var(--color-navy);
    border: 1px solid #fff;
}
.cookie-btn:hover { background: var(--color-accent-bg); border-color: var(--color-accent-bg); }
.cookie-btn:focus-visible { outline: 3px solid var(--color-accent-soft); outline-offset: 2px; }
/* Телефон: долна карта, два равни бутона един до друг на цялата ширина. */
@media (max-width: 40rem) {
    .cookie-banner {
        bottom: max(0.625rem, env(safe-area-inset-bottom));
        width: calc(100% - 1.25rem);
        padding: 0.9rem 0.9rem 0.9rem 1rem;
        border-radius: 18px;
    }
    .cookie-banner-inner { gap: 0.7rem; }
    .cookie-banner-text { flex-basis: 100%; font-size: 0.875rem; line-height: 1.45; }
    .cookie-banner-actions { display: grid; grid-template-columns: 1fr 1fr; width: 100%; }
    .cookie-btn { min-width: 0; padding: 0.55rem 0.75rem; }
}

/* --- Правни страници (политики) — визия „1c“, партида Г ---
   Двуколонна на широк екран: лепкаво оглавление (.toc) вляво, текстът
   вдясно, ограничен до 68ch — по-широка колона се чете по-трудно. */
.legal-layout {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-6);
    align-items: start;
    /* Отстъпът отдолу вече е на лентата (.band), не на самата решетка —
       .legal-layout е .container ВЪТРЕ в .band-light. */
    margin-bottom: 0;
}
@media (min-width: 64rem) {
    .legal-layout { grid-template-columns: 16rem minmax(0, 1fr); gap: var(--space-8); }
}
/* min-width:0 е задължителен тук: .legal-page е елемент на грид (.legal-layout)
   и по подразбиране грид елементите имат min-width:auto — таблицата в
   „Бисквитки“ (.cookie-table) не се свива под собствената си минимална
   ширина и раздува цялата колона извън екрана на 375px, въпреки че
   .table-wrap отдолу си има overflow-x:auto (то не помага без това). */
.legal-page { max-width: 68ch; min-width: 0; }
.legal-page h2 {
    margin-top: var(--space-7);
    padding-bottom: var(--space-3);
    border-bottom: 1px solid var(--color-border);
    font-family: var(--font-display);
    font-weight: 600;
}
.legal-page section:first-of-type h2 { margin-top: 0; }
.legal-page h2 { color: var(--color-navy); }
.legal-page h3 {
    font-family: var(--font-display);
    font-weight: 600;
    color: var(--color-navy);
    margin-top: var(--space-5);
}
.legal-page p, .legal-page li { line-height: 1.65; }
.legal-page ul { padding-left: 1.15rem; }
.legal-page li { margin-bottom: var(--space-2); }
/* Дълъг адрес/имейл в <strong> не бута колоната навън на 375 px */
.legal-page strong { overflow-wrap: anywhere; }

/* Оглавлението — .toc е готов от визия „1c“ (началото); тук само
   показва/скрива според ширината. На телефон е <details>, лепкаво отгоре,
   под заглавието — не встрани, там няма място за него. */
.toc { display: none; min-width: 0; }
@media (min-width: 64rem) { .toc { display: block; } }
/* Оглавлението на телефон/таблет: бяло върху бялата лента, с косъм
   отдолу — досега стоеше върху лилаво и не се различаваше от текста. */
.toc-mobile {
    display: block;
    min-width: 0;
    position: sticky;
    top: 0;
    z-index: 20;
    background: var(--color-card);
    box-shadow: 0 1px 0 var(--color-border);
}
.toc-mobile summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    min-height: var(--tap-target);
    padding: var(--space-3) 0;
    font-weight: 700;
    cursor: pointer;
    list-style: none;
}
.toc-mobile summary::-webkit-details-marker { display: none; }
.toc-mobile summary::after { content: "▾"; color: var(--color-muted); }
.toc-mobile[open] summary::after { content: "▴"; }
.toc-mobile nav { padding-bottom: var(--space-3); }
.toc-mobile nav a { display: block; padding: 0.5rem 0; color: var(--color-muted); }
.toc-mobile nav a.is-active { color: var(--color-navy); font-weight: 600; }
@media (min-width: 64rem) { .toc-mobile { display: none; } }
/* Широката таблица скролира в собствен контейнер на тесен екран */
.table-wrap { overflow-x: auto; }
.cookie-table { width: 100%; border-collapse: collapse; margin: var(--space-3) 0; }
.cookie-table th, .cookie-table td {
    text-align: left;
    padding: 0.6rem 0.9rem;
    border-bottom: 1px solid var(--color-border);
    vertical-align: top;
}
/* Главичката говори същия език като .factlist: тих етикет с уверттюр,
   косъм отдолу, нула фон — иначе таблицата изглежда като изрезка от
   друг документ. */
.cookie-table th {
    font-size: 0.6875rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.14em;
    color: var(--color-muted);
    border-bottom: 1px solid var(--color-border);
}
.cookie-table td code {
    font-size: 0.9375rem;
    background: var(--color-bg);
    padding: 0.1rem 0.4rem;
}
.cookie-table td:first-child { white-space: nowrap; }

/* --- Ленти и общи класове (визия „1c · Отговорът първи“) ---
   Десет класа, преизползвани на всичките девет страници на публичния сайт:
   .band(-light/-lilac/-navy/-teal), .band-head, .eyebrow-quiet,
   .stat/.stat-value/.stat-label, .rowlist/.rowlist-item, .pricerow,
   .profile-choice, .decision-bar, .toc, .empty-note.
   Плоско навсякъде — без box-shadow и transform при посочване. */

.band { padding: var(--space-8) 0; }
.band-light { background: var(--color-card); }
.band-lilac { background: var(--color-bg); }
.band-navy { background: var(--color-navy); color: #fff; }
/* Акцентната лента. Беше `.band-accent` с плътен тюркоаз; сега носи
   градиента и се казва по РОЛЯТА си, а не по цвета — следващата смяна на
   гамата няма да иска преименуване в шест шаблона. */
.band-accent { background-image: var(--gradient-accent); color: #fff; }

.band-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--space-3) var(--space-4);
    border-bottom: 1px solid var(--color-border);
    padding-bottom: var(--space-3);
    margin-bottom: var(--space-5);
}
.band-head h2 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.5rem, 1.15rem + 1.5vw, 2.125rem);
    letter-spacing: -0.01em;
    color: inherit;
}
/* Заглавие в регистър на ЕТИКЕТ — за раздели, чието съдържание само е
   едро (шестте ситуации на началната страница). Тялото говори, заглавието
   само посочва. Без това двете са в един и същи серифен глас и разделът
   започва с два еднакво силни реда един под друг. */
.band-head-quiet h2 {
    font-family: var(--font-body);
    font-weight: 800;
    font-size: 0.8125rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.band-head a { font-size: 1rem; color: var(--color-muted); white-space: nowrap; }
/* Връзката „всички 18 услуги“ е ДЕЙСТВИЕ — единственият изход от раздела
   към каталога. Като сив ред на 1rem до заглавие от 2rem тя се четеше
   като подпис, не като нещо, което се щрака. Затова е бутон с рамка. */
.band-head-link {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.45rem 1rem;
    border: 1px solid var(--color-primary);
    border-radius: 999px;
    color: var(--color-primary-dark);
    font-size: 0.9375rem;
    font-weight: 700;
    white-space: nowrap;
    transition: background var(--transition), color var(--transition), transform var(--transition);
}
.band-head a.band-head-link { color: var(--color-primary-dark); }
.band-head-link:hover {
    background: var(--color-primary);
    color: #fff;
    text-decoration: none;
    transform: translateX(2px);
}
.band-head-link span { transition: transform var(--transition); }
.band-head-link:hover span { transform: translateX(3px); }
.band-navy .band-head,
.band-accent .band-head { border-bottom-color: rgba(255, 255, 255, 0.16); }
.band-navy .band-head a,
.band-accent .band-head a { color: inherit; }
@media (prefers-reduced-motion: reduce) {
    .band-head-link, .band-head-link span { transition: none; }
    .band-head-link:hover, .band-head-link:hover span { transform: none; }
}

/* Призив вътре в лента: текст отляво, бутон отдясно — краят на „За нас“ и
   „Казуси“ (визия „1c“, партида В). Не е от първите десет класа, но се
   появява на две страници по еднакъв начин, а нито един от десетте не му
   пасва (.band-head е заглавие+бройка/връзка, не заглавие+текст+бутон). */
.band-cta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-5);
}
.band-cta h2 {
    margin: 0 0 var(--space-2);
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.5rem, 1.15rem + 1.5vw, 2.125rem);
    color: inherit;
}
.band-cta p { margin: 0; max-width: 44ch; }
.band-accent .band-cta p { color: #fff; }
.band-navy .band-cta p { color: var(--color-on-navy); }
.band-cta .btn { flex: none; }

.eyebrow-quiet {
    display: block;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--color-muted);
    margin-bottom: var(--space-3);
}
.band-navy .eyebrow-quiet { color: var(--color-on-navy-muted); }
/* Върху градиента текстът е БЯЛ, не приглушен: най-светлата точка (#a855f7)
   дава 4.6:1 с бяло и всяко посивяване пада под прага. */
.band-accent .eyebrow-quiet { color: #fff; }

/* .stat е обвивката на едно число + ред под него; .stat-value никога не се
   рендира без .stat-label — виж шаблоните. Триколонната подредба на
   тюркоазената лента (2.3) е локална за нея, не част от .stat самия. */
/* Редица от 2–4 едри числа/твърдения в една лента. Досега тази подредба
   стоеше на `.band-accent .container` и хващаше ВСЯКА container в тюркоазена
   лента — включително призива `.band-cta` в края на „За нас“ и „Казуси“,
   който заради по-високата специфичност се рендираше като решетка с празна
   трета колона. Затова е собствен клас: слага се изрично там, където е
   искан, и никъде другаде.
   `auto-fit` вместо `repeat(3, …)`: лентата трябва да работи и с две колони. */
.band-stats {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-6);
}
@media (min-width: 48rem) {
    .band-stats {
        grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
        gap: var(--space-7);
    }
}
/* ТРИТЕ ЧИСЛА — свити и подравнени (11.08.2026)

   Проблемът: `--figure-lg` е 72 px и е мярка за ЧИСЛО („25+“). Тук два от
   трите реда са ДУМИ („1 работен ден“, „Без жаргон“) и на 72 px се
   пренасяха на три реда. Лентата ставаше 515 px висока — цял екран за три
   изречения — а понеже редовете бяха различно дълги, поясненията под тях
   увисваха на три различни височини и лентата се четеше като разсипана.

   Три поправки, всяка за отделна част от проблема:
   1. по-малък размер, който расте с екрана, но не стига до 72 px;
   2. `align-content: start` върху клетката — поясненията тръгват от една
      линия, независимо на колко реда се е пренесла стойността над тях;
   3. `min-height` на стойността — три реда текст и един ред текст заемат
      еднакво място, тоест поясненията са на една височина. */
.band-stats { align-items: stretch; }
.band-stats .stat {
    display: grid;
    align-content: start;
}
.band-stats .stat-value {
    text-wrap: balance;
    font-size: clamp(2rem, 1.4rem + 2.2vw, 3rem);
    display: flex;
    align-items: flex-end;
    /* Място за два реда — важи САМО докато колоната е тясна и стойността
       наистина може да се пренесе. На широк екран таванът се маха
       (виж медия заявката по-долу): там всичко е на един ред и празното
       поле над числата само раздува лентата. */
    min-height: 2.4em;
}
.band-stats .stat-label { max-width: 30ch; margin-top: var(--space-2); }
@media (min-width: 48rem) {
    .band-stats .stat-value { min-height: 0; }
}
.stat-value {
    display: block;
    font-family: var(--font-display);
    font-size: var(--figure-lg);
    font-weight: 600;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--color-navy);
}
.band-navy .stat-value,
.band-accent .stat-value { color: #fff; }
.stat-label {
    display: block;
    margin-top: var(--space-3);
    font-size: 1.0625rem;
    line-height: 1.5;
    color: var(--color-muted);
}
.band-navy .stat-label { color: var(--color-on-navy); }
.band-accent .stat-label { color: #fff; }

.rowlist-item {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--space-2) var(--space-5);
    padding: var(--space-5) 0;
    border-bottom: 1px solid var(--color-border);
    color: inherit;
}
.rowlist-item:last-child { border-bottom: none; }
a.rowlist-item:hover { text-decoration: none; }
a.rowlist-item:hover > span:first-child,
a.rowlist-item:hover > h3 { text-decoration: underline; }
.band-navy .rowlist-item,
.band-accent .rowlist-item { border-bottom-color: rgba(255, 255, 255, 0.14); }
.rowlist-item > span:first-child { font-size: 1.3125rem; font-weight: 600; }
/* Дясната страна варира по съдържание — цена (.price, вече стилизиран в
   продуктовите карти) или кратък приглушен етикет; тук само подравняване */
.rowlist-item > span:last-child { white-space: nowrap; }
.band-navy .rowlist-item > span:last-child { font-size: 0.9375rem; color: var(--color-on-navy-muted); }
.band-accent .rowlist-item > span:last-child { font-size: 0.9375rem; color: #fff; }
/* Тих етикет на мястото на бутона: услуга, която е перо от абонамента, не
   се поръчва сама. Умишлено НЕ прилича на бутон — нищо тук не се натиска. */
.rowlist-tag {
    font-size: 0.8125rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-muted);
    white-space: nowrap;
}
/* Едрото име на ситуация (2.2 на началната) — заглавие, не span, защото
   всеки ред описва самостоятелна ситуация, не просто етикет до цена */
.rowlist-item h3 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.5rem, 1rem + 2.5vw, 2.5rem);
    line-height: 1.1;
    letter-spacing: -0.02em;
    color: inherit;
}
/* Точкувана водеща линия между име и цена — само там, където шаблонът
   слага празен <span> между двете (виж 2.2 на началната страница) */
.rowlist-item > span:empty,
.rowlist-leader {
    flex: 1 1 3rem;
    align-self: flex-end;
    margin: 0 var(--space-3) 0.4em;
    border-bottom: 1px dotted var(--color-border);
}
.band-navy .rowlist-item > span:empty,
.band-navy .rowlist-leader,
.band-accent .rowlist-item > span:empty,
.band-accent .rowlist-leader { border-bottom-color: rgba(255, 255, 255, 0.3); }

.pricerow {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--space-4);
    padding: var(--space-4) 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.14);
}
.pricerow:last-child { border-bottom: none; }
.pricerow > span:first-child { font-size: 1.125rem; font-weight: 700; }
.pricerow > span:first-child small {
    display: block;
    margin-top: 0.15rem;
    font-size: 0.875rem;
    font-weight: 400;
    color: var(--color-on-navy-muted);
}
.pricerow > span:last-child {
    white-space: nowrap;
    font-family: var(--font-display);
    font-size: 1.5rem;
    font-weight: 600;
}

/* СТЪПКА 0: за кого е обслужването.
   Три едри карти, преди всякакви полета. Стоят на три различни ленти —
   бяла („Вашият пакет“), навы (началната) и градиентна (каталогът) —
   затова картата е БЯЛА и носи собствените си цветове: наследеният от
   лентата бял текст иначе изчезва върху бялата карта.
   Плоска, без сянка и без вдигане при посочване — както всичко останало
   във визията. Тук стоеше калкулаторът на началната (.calc-hero); той
   отпадна заедно с въпроса за ДДС и класовете му се махат, вместо да
   висят неизползвани. */
.profile-choice {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-4);
}
@media (min-width: 48rem) {
    .profile-choice { grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); }
}
.profile-card {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    min-height: var(--tap-target);
    padding: var(--space-5) var(--space-5) var(--space-6);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-left: 3px solid var(--color-accent);
    color: var(--color-text);
    transition: background var(--transition);
}
.profile-card:hover { background: var(--color-accent-bg); text-decoration: none; }
.profile-card h3 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.375rem;
    line-height: 1.2;
    color: var(--color-navy);
}
.profile-card-tagline { margin: 0; font-size: 1rem; color: var(--color-muted); }
.profile-card-price { margin: auto 0 0; padding-top: var(--space-3); }
.profile-card-price .price {
    font-family: var(--font-display);
    font-size: var(--figure-sm);
    font-weight: 600;
    color: var(--color-navy);
}

/* Лепкавата лента на телефон с текущата цена + бутон — виж static/js/decision-bar.js.
   Скрита по подразбиране: JS я показва само когато основният бутон излезе
   от екрана, за да не се дублира сама. */
.decision-bar {
    display: none;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 40;
    align-items: center;
    /* flex-wrap: на много тесен екран бутонът пада на свой ред, вместо да
       се смачква текстът му (голи текстови възли в inline-flex бутон не
       пренасят на ред както обикновен текст — по-надежден е целият ред) */
    flex-wrap: wrap;
    gap: var(--space-2) var(--space-3);
    background: var(--color-card);
    border-top: 1px solid var(--color-border);
    box-shadow: 0 -6px 18px rgba(30, 27, 58, 0.08);
    padding: var(--space-3) var(--space-4);
    padding-bottom: calc(var(--space-3) + env(safe-area-inset-bottom, 0px));
}
.decision-bar.is-visible { display: flex; }
.decision-bar-info { flex: 1 1 auto; min-width: 9rem; }
.decision-bar-info p { margin: 0; }
.decision-bar-label { font-size: 0.8125rem; color: var(--color-muted); }
.decision-bar-price { font-size: 1.1875rem; font-weight: 700; color: var(--color-navy); }
.decision-bar-price small { font-size: 0.8125rem; font-weight: 500; color: var(--color-muted); }
.decision-bar .btn { flex: none; }
/* Запас отдолу, равен горе-долу на височината на лентата — за да не покрива
   последния елемент на страницата (напр. футъра). Само под 64rem: JS слага
   класа на body при всяко скролиране извън/в екрана, независимо от ширината;
   без границата тук padding-ът щеше да остане и на десктоп, където лентата
   изобщо не се показва. */
@media (max-width: 63.99rem) {
    body.has-decision-bar { padding-bottom: 4.75rem; }
}
@media (min-width: 64rem) { .decision-bar { display: none !important; } }

/* Оглавлението на правните страници — лепкаво на широк екран, <details> на телефон */
.toc { font-size: 1rem; }
.toc-heading {
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--color-muted);
    border-bottom: 1px solid var(--color-border);
    padding-bottom: var(--space-3);
    margin: 0 0 0.4rem;
}
.toc a {
    display: block;
    padding: 0.55rem 0 0.55rem 0.9rem;
    color: var(--color-muted);
    box-shadow: inset 3px 0 0 transparent;
}
.toc a:hover { text-decoration: none; color: var(--color-navy); }
.toc a.is-active {
    color: var(--color-navy);
    font-weight: 600;
    box-shadow: inset 3px 0 0 var(--color-primary);
}
@media (min-width: 64rem) { .toc { position: sticky; top: var(--space-5); } }

/* Редът при непопълнено съдържание — само на страницата на услуга, само
   веднъж; НЕ се показва на картите в каталога (виж CLAUDE.md/промпта). */
.empty-note {
    margin-top: var(--space-3);
    padding: var(--space-3) var(--space-4);
    background: var(--color-bg);
    border-left: 2px solid var(--color-border);
    font-size: 0.875rem;
    line-height: 1.5;
    color: var(--color-muted);
}

/* --- Визия 3: повърхности и мярка ---------------------------------- */

/* --color-card (#ffffff) и --color-bg (#f6f5fd) се различават с 4%.
   Долепени без линия, двете ленти се четат като една повърхност и
   ритъмът на страницата изчезва. Косъмът не рисува рамка — само казва
   „нов раздел“. */
.band-light + .band-lilac,
.band-lilac + .band-light { border-top: 1px solid var(--color-border); }

/* Разделът се обявява в тясна колона вляво и не се повтаря вътре в
   съдържанието. Това е подредбата, която прави дълъг списък (девет
   казуса, осемнайсет услуги, шест раздела политика) да изглежда
   проектиран, а не изсипан.
   .band-head НЕ върши тази работа — той е ред „заглавие + бройка/връзка“
   НАД съдържанието и точно затова линията му свършва другаде. */
/* ЗАГЛАВИЕТО НА РАЗДЕЛА СТОИ НАД СЪДЪРЖАНИЕТО И Е ЦЕНТРИРАНО.

   Първоначално беше тясна колона вляво, а съдържанието вдясно. На хартия
   е добре; на екрана заглавието увисва в празно поле и изглежда като
   надпис, залепен встрани от текста — а не като начало на раздел. Плюс
   това тясната колона стесняваше и съдържанието до себе си.

   Сега разделът се обявява като раздел: приглушен надред, едро серифно
   заглавие в центъра, къса черта под него и чак тогава съдържанието.
   Чертата е това, което кара окото да приеме заглавието за заглавие —
   без нея центрираният текст изглежда просто като още един абзац. */
.band-split {
    display: block;
}
.band-split-head {
    min-width: 0;
    max-width: 46rem;
    margin: 0 auto var(--space-7);
    text-align: center;
}
.band-split-head .eyebrow-quiet { margin-bottom: var(--space-2); }
.band-split-head h2 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;              /* Source Serif 4 е свалена само 400–600 */
    font-size: clamp(1.75rem, 1.2rem + 2.2vw, 2.75rem);
    line-height: 1.1;
    letter-spacing: -0.02em;
    color: inherit;
    text-wrap: balance;            /* без „сираци“ по един дума на реда */
}
/* Двете къси черти около заглавието — ГОРНАТА вляво, ДОЛНАТА вдясно.
   Асиметрията е нарочна: две еднакво центрирани черти четат като украса,
   а изместените в противоположни посоки — като дизайн. `::before`/`::after`
   на самия head, а не отделни елементи: шаблоните не носят декорация.
   Дебелината е 4px със заоблени краища и лека сянка — при 2px чертата се
   губеше на плътни екрани и приличаше на артефакт, а не на решение. */
.band-split-head::before {
    content: "";
    display: block;
    width: 5rem;
    height: 6px;
    border-radius: 999px;
    margin: 0 auto var(--space-4) 0;   /* избутана ВЛЯВО */
    background-image: var(--gradient-accent);
    /* Две сенки: близка и тъмна за ръба, по-широка и цветна за обема.
       Само с една чертата изглежда плоска, залепена за фона. */
    box-shadow: 0 2px 4px rgba(15, 23, 42, 0.25), 0 4px 12px rgba(124, 58, 237, 0.28);
}
.band-split-head::after {
    content: "";
    display: block;
    width: 5rem;
    height: 6px;
    border-radius: 999px;
    margin: var(--space-4) 0 0 auto;   /* избутана ВДЯСНО */
    background-image: var(--gradient-accent);
    box-shadow: 0 2px 4px rgba(15, 23, 42, 0.25), 0 4px 12px rgba(124, 58, 237, 0.28);
}
.band-split-head p {
    margin: var(--space-4) auto 0;
    max-width: 56ch;
    font-size: 1.0625rem;
    line-height: 1.6;
    color: var(--color-muted);
}
/* Връзката („не намирате вашия?“) е ПОД чертата, за да не се чете като
   част от заглавието. Затова и `order` не върши работа — тя е след
   ::after по документен ред. */
.band-split-head a {
    display: inline-block;
    margin-top: var(--space-3);
    font-size: 1rem;
    color: var(--color-muted);
}
/* Върху тъмна лента градиентът се губи — там чертите са светли. */
.band-navy .band-split-head::before,
.band-navy .band-split-head::after,
.band-accent .band-split-head::before,
.band-accent .band-split-head::after {
    background-image: none;
    background-color: rgba(255, 255, 255, 0.55);
    /* Върху тъмно тъмната сянка не се вижда — там дълбочината идва от
       тънък тъмен ръб под чертата. */
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}
.band-navy .band-split-head p,
.band-navy .band-split-head a { color: var(--color-on-navy-muted); }
.band-accent .band-split-head p,
.band-accent .band-split-head a { color: #fff; }
/* Съдържанието под заглавието. Ограничено по ширина и центрирано: без
   това редът на 1440 px става ~140 знака и разделът пак изглежда като
   насипан текст, независимо колко е добре заглавието. Списъци и таблици
   вътре сами си взимат нужното — затова `max-width`, а не фиксирана. */
.band-split-body {
    min-width: 0;
    max-width: 62rem;
    margin: 0 auto;
}
/* Водещият абзац — центриран ИЗРИЧНО, не по наследство.
   Центрирането на цялото тяло правеше списъците и таблиците вътре
   нечитаеми (окото няма къде да се върне в началото на реда). Затова е
   клас върху самия абзац: центрира се това, което е едно изречение, а
   всичко останало си остава ляво подравнено. */
.band-lead {
    max-width: 56ch;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}

/* Ред от ~68 знака се чете на един поглед; нередактиран абзац в
   .container на 1440 px е ~140 знака и точно това създава усещането
   „текст, залепен в шаблона“. .measure-tight е за водещо изречение,
   което трябва да се чете като твърдение, не като абзац. */
.measure { max-width: 68ch; }
.measure-tight { max-width: 46ch; }

/* Заглавие на страница без банерна снимка (кошница, поръчка, правни
   страници). Ляво подравнено и на --font-display, с косъм отдолу —
   същият език като .band-head. Досегашният .page-heading е центриран и
   на --font-body, но остава непроменен: ползват го страниците за
   плащане, които са извън обхвата.
   ВНИМАНИЕ: съдържанието се увива в .container от шаблона — тук няма
   собствен хоризонтален отстъп. */
.page-head {
    background: var(--color-card);
    border-bottom: 1px solid var(--color-border);
    padding: clamp(1.75rem, 4.5vw, 3rem) 0 clamp(1.25rem, 3vw, 1.75rem);
}
.page-head h1 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.75rem, 1.3rem + 2vw, 2.75rem);
    line-height: 1.1;
    letter-spacing: -0.02em;
    text-transform: none;
    color: var(--color-navy);
}
.page-head .eyebrow-quiet { margin-bottom: var(--space-2); }
.page-head-sub {
    margin: var(--space-3) 0 0;
    max-width: 56ch;
    font-size: 1.0625rem;
    line-height: 1.55;
    color: var(--color-muted);
}
/* Дата/бележка под заглавието (правните страници) */
.page-head-meta {
    margin: var(--space-3) 0 0;
    font-size: var(--text-sm);
    color: var(--color-muted);
}

/* Лента, която носи само лента с раздели или стъпки — пълната
   вертикална въздишка на .band (var(--space-8)) я откъсва от банера. */
.band-tight { padding: var(--space-5) 0 0; }

/* Дясната страна на ред от списък, когато освен цена има и действие
   (каталогът). `.rowlist-item > span:last-child` подравнява един
   елемент; тук са два и трябват собствени отстъпи. */
.rowlist-buy {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: var(--space-2) var(--space-4);
    white-space: nowrap;
}
.rowlist-buy .price {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.5rem;
}
.rowlist-buy .btn { flex: none; white-space: nowrap; }

/* --- Начална страница: layout, специфичен само за нея (не е част от
   десетте преизползваеми класа — скопиран през ID, за да не се разраства
   списъкът с класове). --- */
#how-it-works {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-6);
}
#how-it-works > div:first-child > p {
    margin: 0;
    font-family: var(--font-display);
    font-size: clamp(1.375rem, 1.1rem + 1.2vw, 2rem);
    line-height: 1.3;
    letter-spacing: -0.01em;
    color: var(--color-navy);
}
#how-it-works ol { list-style: none; margin: 0; padding: 0; counter-reset: how-step; }
#how-it-works li {
    display: grid;
    grid-template-columns: 2.75rem 1fr;
    gap: var(--space-4);
    padding: var(--space-5) 0;
    border-bottom: 1px solid var(--color-border);
    counter-increment: how-step;
}
#how-it-works li:first-child { padding-top: 0; }
#how-it-works li:last-child { border-bottom: none; padding-bottom: 0; }
#how-it-works li::before {
    content: "";
    font-family: var(--font-display);
    font-size: 1.375rem;
    color: var(--color-primary);
}
#how-it-works h3 { margin: 0 0 0.35rem; font-size: 1.3125rem; }
#how-it-works p { margin: 0; }
@media (min-width: 60rem) {
    /* Лявата колона (едно изречение) се ЦЕНТРИРА спрямо трите стъпки
       вдясно. При `align-items: start` изречението висеше горе и
       оставяше празно поле до края на списъка — раздел с една пълна и
       една почти празна колона. `center` го поставя срещу средата на
       стъпките и двете страни се четат като едно цяло. */
    #how-it-works { grid-template-columns: 1fr 1.15fr; gap: var(--space-8); align-items: center; }
}

#final-cta { text-align: center; }
#final-cta h2 {
    font-family: var(--font-display);
    font-size: clamp(1.75rem, 1.35rem + 2vw, 2.875rem);
    letter-spacing: -0.02em;
    max-width: 32ch;
    margin: 0 auto var(--space-3);
}
#final-cta > p { font-size: 1.1875rem; max-width: 56ch; margin: 0 auto var(--space-6); color: var(--color-text); }
#final-cta > div {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--space-5);
    flex-wrap: wrap;
    font-size: 1.0625rem;
    color: var(--color-muted);
}
#final-cta > div strong { color: var(--color-navy); }

/* ---------- 4. HERO И БАНЕРИ ---------- */

/* Hero на началната: текстът стои ВЪРХУ снимката със затъмняващ слой.
   Ако файлът липсва, отдолу остава навы градиент и текстът пак е четим.
   Снимката е на ::before (отделен слой), затъмняването — на ::after;
   така снимката може да се анимира (transform) без да пипаме текста. */
.hero {
    position: relative;
    overflow: hidden;
    background-image: linear-gradient(150deg, var(--color-navy) 0%, var(--color-primary) 60%, var(--color-accent) 120%);
    background-size: cover;
    background-position: center;
}

.hero::before {
    content: "";
    position: absolute;
    top: -5%;
    left: -5%;
    width: 110%;
    height: 110%;
    background-image: url("../images/hero.cdd77ec902d9.webp");  /* WebP: 210 → 109 KB; hero.jpg остава за og:image */
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    z-index: 0;
    animation: banner-drift-hero 18s ease-in-out infinite alternate;
    will-change: transform;
}

.hero::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(var(--overlay-dark), var(--overlay-light));
    z-index: 1;
}

.hero-inner {
    position: relative;
    z-index: 2;
    max-width: 1140px;
    margin: 0 auto;
    padding: clamp(4rem, 10vw, 7.5rem) var(--space-4);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

/* Заглавие на страница върху светъл фон — ползва се само на страниците
   без банер (кошница, поръчка, плащане, „Благодарим“) */
.page-heading {
    background: var(--color-card);
    text-align: center;
    padding: clamp(1.75rem, 4vw, 2.75rem) var(--space-4) clamp(1.25rem, 3vw, 2rem);
}
.page-heading h1 { margin: 0; }
.page-heading .eyebrow { margin-bottom: 0.9rem; }
.page-heading-sub {
    max-width: 44rem;
    margin: var(--space-3) auto 0;
    color: var(--color-muted);
    font-size: clamp(1.05rem, 1.6vw, 1.2rem);
}

/* Банер на вътрешните страници: заглавието стои ВЪРХУ снимката,
   със същия затъмняващ слой като hero-то (само височината е по-малка);
   при липсваща снимка — навы градиент и текстът пак е четим. */
.page-banner {
    position: relative;
    overflow: hidden;
    /* ПО-ВИСОК БАНЕР (11.08.2026). Беше 10–19 rem и на широк екран се
       четеше като лента, а не като начало на страница. Центрирането
       остава — то е това, което държи текста в средата, независимо от
       височината. */
    min-height: clamp(13rem, 32vw, 25rem);
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    background-image: linear-gradient(150deg, var(--color-navy) 0%, var(--color-primary) 60%, var(--color-accent) 120%);
    background-size: cover;
    background-position: center;
}
/* По-нисък банер за детайлната страница на услуга и портала. Расте заедно
   с големия, за да остане същата разлика между двата. */
.page-banner-compact { min-height: clamp(10rem, 22vw, 16rem); }

.page-banner::before {
    content: "";
    position: absolute;
    top: -5%;
    left: -5%;
    width: 110%;
    height: 110%;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    z-index: 0;
    animation: banner-drift-page 16s ease-in-out infinite alternate;
    will-change: transform;
}

.page-banner::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(var(--overlay-dark), var(--overlay-light));
    z-index: 1;
}

/* Съдържание на банера: центрирано вертикално и хоризонтално */
.banner-inner {
    position: relative;
    z-index: 2;
    max-width: 1140px;
    margin: 0 auto;
    padding: clamp(1.75rem, 4vw, 3rem) var(--space-4);
    display: flex;
    flex-direction: column;
    align-items: center;
}

/* Светъл текст върху затъмнената снимка — същият стил като hero-то.
   ⚠️ `.banner-title` е СЪЩИЯТ вид, но НЕ е заглавие (виж коментара в
   templates/calendar_app/paid_landing.html): страница с две заглавия от
   първо ниво обърква и четците на екран, и търсачките. Затова размерът се
   задава изрично — `<p>` не наследява размера на `h1`. */
.page-banner .banner-title {
    font-size: var(--text-xl);
    line-height: 1.2;
}
.page-banner h1,
.page-banner .banner-title {
    color: #fff;
    margin: 0;
    max-width: 46rem;
    text-wrap: balance;
    text-shadow: 0 2px 12px rgba(13, 20, 45, 0.45);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: -0.01em;
}
.page-banner .eyebrow {
    color: #fff;
    background: rgba(255, 255, 255, 0.14);
    border-color: rgba(255, 255, 255, 0.35);
    margin-bottom: 0.9rem;
}
.banner-sub {
    max-width: 44rem;
    margin: var(--space-3) 0 0;
    color: #e8edf6;
    font-size: clamp(1.05rem, 1.6vw, 1.2rem);
    text-shadow: 0 1px 8px rgba(13, 27, 54, 0.45);
}

/* Снимка за всяка вътрешна страница: static/images/banner-<име>.jpg
   (сложена на ::before на банера, вижте по-горе) */
.banner-services::before { background-image: url("../images/banner-services.3bad1e5ccd06.jpg"); }
.banner-cases::before { background-image: url("../images/banner-cases.5c968455028a.jpg"); }
/* „За нас“ използва неутралния екипен банер вместо инсцениран офис. */
.banner-about::before { background-image: url("../images/banner-consultation.b131891dd3f4.jpg"); }
.banner-contacts::before {
    background-image: url("../images/banner-contacts.645114db17ba.jpg");
    /* Снимката е портретна — фокусираме горната ѝ част, за да се вижда
       цялата бележка „Call Tax Agent“ */
    background-position: center 22%;
}
.banner-contacts { min-height: clamp(13rem, 34vw, 24rem); }

/* Светъл текст върху затъмнения hero фон — контраст > 7:1 */
.hero h1 {
    color: #fff;
    margin: 0 0 var(--space-4);
    max-width: 46rem;
    text-wrap: balance;
    text-shadow: 0 2px 16px rgba(13, 20, 45, 0.45);
    font-size: var(--text-hero);
    line-height: 1.08;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: -0.01em;
}

.hero-sub {
    font-size: clamp(1.125rem, 1.8vw, 1.3rem);
    line-height: var(--leading);
    color: #e8edf6;
    max-width: 38rem;
    margin: 0 0 var(--space-6);
    text-shadow: 0 1px 8px rgba(13, 27, 54, 0.45);
}

.hero .eyebrow {
    color: #fff;
    background: rgba(255, 255, 255, 0.14);
    border-color: rgba(255, 255, 255, 0.35);
}

.hero-actions { display: flex; gap: var(--space-3); flex-wrap: wrap; justify-content: center; }

.hero-trust {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-2) var(--space-5);
    margin: var(--space-6) 0 0;
    padding: 0;
    font-size: 1rem;
    color: #e8edf6;
    text-shadow: 0 1px 6px rgba(13, 27, 54, 0.45);
}
.hero-trust li::before {
    content: "✓";
    color: var(--color-accent-soft);
    font-weight: 700;
    margin-right: 0.45rem;
}

/* ---------- 5. СЕКЦИИ ПО СТРАНИЦИ ---------- */

/* .home-section/-head/-sub/-more, .home-grid, .category-grid/.category-card
   отпаднаха при визия „1c“ (началната мина на .band-редове/.rowlist-item —
   виж core/home.html и раздел „Ленти и общи класове“ по-горе). Проверено в
   целия templates/ (вкл. portal/, reporting/, documents/) и static/js/ —
   нулева употреба навсякъде. */

/* --- Счетоводни казуси (акордеон) --- */
/* --- Страница „Казуси“ (визия 3) — плоски редове, не карти.
   Списъкът е тялото на .band-split: заглавието стои центрирано отгоре
   вляво. Мярката 48rem остава — ред от 48rem се чете на един поглед —
   но `margin: 0 auto` отпада: центрирането беше причината линията под
   заглавието да стърчи със ~170 px от двете страни на акордеона. */
.cases-list {
    display: block;
    max-width: 48rem;
    margin: 0;
}
.case-card { border-bottom: 1px solid var(--color-border); }
.case-card:first-child { border-top: 1px solid var(--color-border); }

.case-card summary {
    display: flex;
    align-items: baseline;
    gap: var(--space-4);
    min-height: var(--tap-target);
    padding: var(--space-5) 0;
    cursor: pointer;
    list-style: none;
    user-select: none;
}
.case-card summary::-webkit-details-marker { display: none; }
.case-title {
    flex: 1;
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.375rem, 1.1rem + 1vw, 1.625rem);
    line-height: 1.3;
    color: var(--color-navy);
}
/* Знакът +/− е квадратен, не кръгъл — плоско навсякъде в тази визия */
.case-card summary::after {
    content: "+";
    flex-shrink: 0;
    width: 2rem;
    height: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--color-accent-bg);
    color: var(--color-primary);
    font-size: 1.25rem;
    font-weight: 700;
}
.case-card[open] summary::after { content: "−"; }
/* Знакът +/− става тънък и тих: плътният квадрат на --color-accent-bg
   изглеждаше като девет бутона на девет реда. */
.case-card summary::after {
    background: none;
    color: var(--color-muted);
    font-size: 1.5rem;
    font-weight: 400;
    width: 1.75rem;
    height: 1.75rem;
}
.case-card summary:hover .case-title { color: var(--color-primary); }
.case-card[open] summary::after { color: var(--color-primary); }
/* Отворен казус получава тънка лента отляво — единственият сигнал за
   „ето къде си“, вместо цветна кутия вътре. */
.case-card[open] {
    box-shadow: inset 3px 0 0 var(--color-primary);
    padding-left: var(--space-5);
    margin-left: calc(-1 * var(--space-5));
}

.case-body { padding: 0 0 var(--space-5); max-width: 68ch; }
.case-body p { margin: 0 0 var(--space-3); color: var(--color-text); font-size: 1.0625rem; line-height: 1.6; }

/* Съветът и помощта: плоски редове с етикет, не цветни кутии.
   Кехлибареното .case-tip четеше като предупреждение, а е съвет. */
.case-note {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-2);
    margin: 0 0 var(--space-4);
    padding: var(--space-4) 0 0;
    border-top: 1px solid var(--color-border);
    font-size: 1rem;
    line-height: 1.55;
    color: var(--color-text);
}
.case-note-label {
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.case-note-tip .case-note-label { color: var(--color-warning); }
/* „Как помагаме“ носи цвета на чертичките около заглавията — това е
   гласът на кантората в целия сайт. Съветът остава кехлибарен: той е
   общото правило, а помощта е нашето предложение. */
.case-note-help .case-note-label { color: var(--color-accent); }
/* САМО „Как помагаме“ получава фон. Това е единственият ред в казуса, в
   който говори кантората — останалото е обяснение на закона. Фонът го
   отделя, без да добавя още един цвят: същият нюанс като чертичките,
   разреден до фон. */
.case-note-help {
    background: var(--color-accent-bg);
    border: 1px solid var(--color-border);
    border-top: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-4);
    margin-top: var(--space-4);
}
/* Същият фон, но за CMS абзаца „Как помагаме“, който е обикновен <p> с
   <strong> вътре, а не редът с етикет и текст. Затова НЕ наследява решетката
   на .case-note — тя би разкъсала изречението на две колони.
   Класът се слага при отдаването (core/templatetags/cms_extras.py). */
.case-body p.case-help-inline {
    background: var(--color-accent-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-4);
    margin-top: var(--space-4);
}
.case-body p.case-help-inline strong { color: var(--color-accent); }
.case-note-text { max-width: 62ch; }
/* Числото на съвета — едро, вляво от текста на широк екран */
.case-note-figure {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: var(--figure-sm);
    line-height: 1;
    color: var(--color-navy);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
@media (min-width: 40rem) {
    .case-note {
        grid-template-columns: 8rem minmax(0, 1fr);
        gap: var(--space-2) var(--space-5);
        align-items: baseline;
    }
    .case-note-label { grid-column: 1; grid-row: 1; }
    .case-note-figure { grid-column: 1; grid-row: 2; }
    .case-note-text { grid-column: 2; grid-row: 1 / span 2; }
}

/* ---------- КАЗУСИТЕ, ЦЕНТРИРАНИ ----------
   Заглавието на раздела е центрирано, а списъкът под него беше ляво
   подравнен през цялата ширина — двете се четяха като два различни
   раздела. Тук списъкът поема оста на заглавието.

   Ширината пада до 52 rem нарочно. Центриран текст на широк ред е
   нечитаем: окото няма фиксирано място, откъдето да започне следващия ред.
   При ~60 знака връщането е късо и центрирането се чете като оформление,
   а не като грешка. */
.cases-list {
    max-width: 52rem;
    margin-inline: auto;
}
.case-card summary {
    justify-content: center;
    text-align: center;
    gap: var(--space-3);
}
.case-title { flex: 0 1 auto; }
/* Знакът стои ОТЛЯВО на въпроса (гледано от посетителя) и е в основния
   нюанс. Отдясно той изглеждаше като край на реда — окото го намираше
   чак след като е прочело целия въпрос, тоест след като вече е решило
   дали да го отвори. Отляво е там, където започва четенето. */
.case-card summary::after {
    order: -1;
    color: var(--color-accent);
    font-weight: 600;
}
.case-card summary:hover::after { color: var(--color-primary); }

.case-body {
    max-width: 46rem;
    margin-inline: auto;
    text-align: center;
}
.case-body p { margin-inline: auto; }
/* Двуколонната мрежа на съвета се изправя в един центриран стълб:
   етикет, число, текст. Двете колони с центрирано съдържание вътре
   изглеждат като счупена таблица. */
@media (min-width: 40rem) {
    .case-note {
        grid-template-columns: minmax(0, 1fr);
        justify-items: center;
        gap: var(--space-2);
    }
    .case-note-label,
    .case-note-figure,
    .case-note-text { grid-column: 1; grid-row: auto; }
}
.case-note-text { max-width: 60ch; margin-inline: auto; }
/* Лентата отляво при отворен казус отпада — при центрирано съдържание тя
   тегли окото встрани. Вместо нея отвореният получава мек фон и лека
   сянка, тоест сигналът е „това е издигнато“, а не „това е вляво“. */
/* РАЗДЕЛЕНИЕТО МЕЖДУ ВЪПРОСИТЕ.
   Косъмът от 1 px между девет затворени въпроса ги сливаше в един блок —
   не се виждаше къде свършва единият и започва другият. Сега всеки
   въпрос е отделна карта с фон, рамка и въздух помежду им. */
.case-card {
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-bottom: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    margin-bottom: var(--space-3);
    padding-inline: var(--space-5);
    transition: border-color var(--transition), box-shadow var(--transition);
}
.case-card:first-child { border-top: 1px solid var(--color-border); }
.case-card:hover { border-color: var(--color-primary); }
.case-card[open] {
    border-color: var(--color-primary);
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 10px 28px rgba(79, 70, 229, 0.1);
    padding-inline: var(--space-5);
    margin-inline: 0;
    border-radius: var(--radius-md);
}

/* --- Плавното отваряне (static/js/cases.js) ---
   Правилата важат САМО когато скриптът е поел управлението. Без него
   `<details>` работи както си е по подразбиране — мигновено, но изправно. */
.js-cases .case-body {
    overflow: hidden;
    will-change: height;
}
/* Знакът се завърта, вместо да се сменя +/− с рязък скок. */
.js-cases .case-card summary::after {
    transition: transform 320ms ease, color 320ms ease;
}
.js-cases .case-card[open] summary::after { transform: rotate(180deg); }

/* ---------- РАЗДЕЛ „УСЛУГИ“ ----------
   Страничната лента с категории (.catalog-layout, .filters, .filter-group,
   .cat-nav, .cat-link, .cat-summary, .cat-name, .cat-count, .cat-group,
   .cat-chevron, .cat-children, .cat-link-all) отпадна още при преминаването
   към хоризонтални раздели; правилата ѝ са изтрити при визия 3, след като
   grep -rn показа нула употреби в templates/ и static/js/. */

.empty-state { color: var(--color-muted); padding: var(--space-6) 0; }

/* Категориите като бутони отгоре — вместо странична лента.
   На телефон се превръщат в хоризонтален списък с плъзгане, вместо в дълъг
   стълб, който трябва да се подмине, за да се стигне до услугите. */
/* Категориите като лента с раздели, а не разпилени „балончета“.
   Овалните хапчета с различна дължина се редят неравно и приличат на
   етикети, не на навигация. Един общ фон с разделителна линия отдолу ги
   държи заедно и ги чете като едно нещо. */
.cat-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    border-bottom: 1px solid var(--color-border);
    margin-bottom: var(--space-5);
}
.cat-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 0;
    margin: 0;
}
/* Разделът е сив текст на бял фон с косъм отдолу — четеше се като
   изброяване, не като навигация: нищо не подсказваше, че се щрака.
   Сега всеки раздел е плочка с фон, а активният е плътен. Движението
   при посочване е единственото, което кара окото да ги пробва. */
.cat-chip {
    display: inline-flex;
    align-items: baseline;
    gap: 0.45rem;
    padding: 0.6rem 1rem;
    margin: 0 0.35rem 0.5rem 0;
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: 999px;
    color: var(--color-text);
    font-size: var(--text-sm);
    font-weight: 600;
    white-space: nowrap;
    transition: background var(--transition), border-color var(--transition),
                color var(--transition), transform var(--transition), box-shadow var(--transition);
}
/* Само връзка — .cat-chip се преизползва и за нетактивни (все още
   недостигнати) стъпки на поръчката, показани като <span>, без hover. */
a.cat-chip:hover {
    text-decoration: none;
    color: var(--color-primary-dark);
    border-color: var(--color-primary);
    background: var(--color-accent-bg);
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
}
a.cat-chip:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.cat-chip.is-active {
    background-image: var(--gradient-accent);
    border-color: transparent;
    color: #fff;
    box-shadow: 0 6px 18px rgba(79, 70, 229, 0.3);
}
a.cat-chip.is-active:hover { color: #fff; transform: translateY(-2px); }
.chip-count {
    font-size: 0.72rem;
    font-weight: 700;
    color: var(--color-muted);
    background: var(--color-bg);
    border-radius: var(--radius-pill);
    padding: 0.1rem 0.45rem;
    font-variant-numeric: tabular-nums;
}
.cat-chip.is-active .chip-count {
    background: rgba(255, 255, 255, 0.22);
    color: #fff;
}
/* Лентата вече не носи обща линия — плочките сами се четат като група. */
.cat-toolbar { border-bottom: none; }

.cat-typefilter {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    padding-bottom: var(--space-2);
    font-size: var(--text-sm);
    color: var(--color-muted);
}
/* Падащото поле идваше без стил и стоеше като чуждо тяло до плочките. */
.cat-typefilter select {
    max-width: 220px;
    padding: 0.45rem 0.7rem;
    border: 1px solid var(--color-border);
    border-radius: 999px;
    background: var(--color-card);
    color: var(--color-text);
    font: inherit;
    font-size: var(--text-sm);
    font-weight: 600;
    cursor: pointer;
}
.cat-typefilter select:hover { border-color: var(--color-primary); }
@media (prefers-reduced-motion: reduce) {
    .cat-chip { transition: none; }
    a.cat-chip:hover, a.cat-chip.is-active:hover { transform: none; }
}

/* Челната услуга вече е .band-navy + .band-cta на цяла ширина — правилата
   на .featured-service/.featured-text/.featured-name/… отпаднаха заедно с
   тъмната кутия в лилаво поле. Тук остава само видът на цената и бутона. */
.featured-band .featured-buy { flex: none; text-align: right; }
.featured-band .stat-value { font-size: var(--figure-md); color: #fff; }
.featured-band .stat-label { margin-top: var(--space-1); }
.featured-band .price-from { color: var(--color-on-navy-muted); font-size: 1rem; }
.featured-btn {
    display: inline-block;
    margin-top: var(--space-4);
    background: #fff;
    color: var(--color-navy);
    font-weight: 700;
    box-shadow: none;
}
.featured-btn:hover { background: var(--color-accent-bg); text-decoration: none; }

/* Лентата с раздели вече седи на бяла повърхност, залепена за банера */
.band-tight .cat-toolbar { margin-bottom: 0; border-bottom: 0; }

/* Името в реда на каталога — същият шрифт като .rowlist-item h3 на
   началната, но с втори, тих ред за срока. */
.rowlist-name {
    flex: 1 1 16rem;
    min-width: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.25rem, 1.05rem + 0.9vw, 1.625rem);
    line-height: 1.2;
    letter-spacing: -0.01em;
    color: var(--color-navy);
}
.rowlist-name:hover { color: var(--color-primary); text-decoration: none; }
.rowlist-name:hover > span:first-child { text-decoration: underline; }
.rowlist-meta {
    display: block;
    margin-top: var(--space-1);
    font-family: var(--font-body);
    font-size: 0.8125rem;
    font-weight: 400;
    letter-spacing: 0;
    color: var(--color-muted);
}

/* Решетката с карти (.product-grid/.product-card) остава в CSS, макар
   каталогът вече да ползва редове: shop/includes/product_card.html е
   запазен непроменен, за да е връщането към карти един {% include %}. */
.product-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: var(--space-4);
}

/* Картата на услугата: плоска, с цветна лента отляво.
   Рамка от всички страни + сянка + повдигане при посочване правеха
   осемнайсет еднакви кутии, които се борят една с друга за внимание.
   Лентата отляво групира визуално, без да огражда. */
.product-card {
    background: var(--color-card);
    border-left: 3px solid var(--color-primary);
    color: var(--color-text);
    display: flex;
    flex-direction: column;
    transition: background var(--transition);
}
.product-card:hover { background: var(--color-accent-bg); }

/* Връзката покрива снимката и текста; бутонът „Купи“ е отделно, извън нея */
.product-card-link {
    display: flex;
    flex-direction: column;
    flex: 1;
    color: var(--color-text);
    /* Съдържанието вече не започва със снимка, затова отстъпът е тук */
    padding: 1rem 1rem 0.75rem;
}
.product-card-link:hover { text-decoration: none; }
.product-card-link:hover .product-name { color: var(--color-primary); }

.product-card-actions { padding: 0 1rem 1rem; margin-top: auto; }
.btn-buy { width: 100%; }
/* Бутонът може да е <a> (заявка, час) или <button> (покупка) — трябва да
   изглеждат еднакво, затова <a> се центрира като бутон. */
a.btn-buy { display: block; text-align: center; }

/* --- Ред отгоре: плочка с буква + категория --- */
.product-head {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    margin-bottom: 0.7rem;
}
/* Плочката с буква отпадна заедно със снимката: цветната лента отляво вече
   носи същата функция — визуално групиране — без да заема ред. */
.product-head .product-category { flex: 1; }

/* Заглавието на картата — числа и заглавия минават на --font-display
   (визия „1c“); .product-name се ползва само вътре в картата. */
.product-name {
    margin: 0 0 0.5rem;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.125rem;
    line-height: 1.3;
    color: var(--color-navy);
}

/* --- Цената: голяма, с ясен суфикс --- */
.product-price {
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    align-items: baseline;
}
.price { font-weight: 700; font-size: 1.5rem; color: var(--color-navy); }
/* Цената на картата в каталога — --font-display 26px (визия „1c“). Скопено
   до .product-card, а не в самия .price: същата класа стои и на началната
   страница (.rowlist-item) и в .buybox, където размерът е друг. Source
   Serif 4 е свалена само в 400/600 — 700 тук би паднал на синтетично
   удебеляване, затова 600, не наследеното 700. */
.product-card .price {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.625rem;
}
.price-from, .price-suffix { font-size: var(--text-sm); color: var(--color-muted); }
.price-vat { margin: 0.15rem 0 0; font-size: 0.75rem; color: var(--color-muted); }

/* --- Три реда „какво включва“ --- */
.product-highlights {
    list-style: none;
    margin: 0.8rem 0 0;
    padding: 0;
    font-size: var(--text-sm);
    color: var(--color-muted);
}
.product-highlights li {
    display: flex;
    gap: var(--space-2);
    align-items: flex-start;
    line-height: 1.45;
    margin-bottom: 0.3rem;
}
.hl-tick { flex: none; color: var(--color-accent); font-weight: 700; }

.product-term {
    margin: 0.6rem 0 0;
    font-size: 0.78rem;
    color: var(--color-muted);
}

/* --- Обхват на услугата (детайлна страница) --- */
/* Заглавията на разделите в описанието — четими, не уверттюр-шепот:
   „Какво включва“ беше 0.8rem, тоест по-дребно от всеки ред под него. */
.service-scope { margin-top: var(--space-6); }
.service-scope h3 {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.25rem;
    text-transform: none;
    letter-spacing: 0;
    color: var(--color-navy);
    margin: 0 0 var(--space-3);
    padding-bottom: var(--space-2);
    border-bottom: 1px solid var(--color-border);
}
.scope-list { margin: 0; padding: 0; list-style: none; }
.scope-list li {
    position: relative;
    padding-left: 1.5rem;
    margin-bottom: var(--space-2);
    line-height: 1.6;
}
.scope-list li::before {
    position: absolute;
    left: 0;
    font-weight: 700;
}
.scope-in li::before { content: "✓"; color: var(--color-accent); }
/* Невключеното НЕ е забрана, а уточнение — затова тире, не кръстче:
   кръстчето чете като отказ и настройва клиента срещу услугата. */
.scope-out li::before { content: "–"; color: var(--color-muted); }
.scope-docs li::before { content: "•"; color: var(--color-primary); }

/* Заявка вместо покупка */
.service-request { margin: 1rem 0; }

/* Дребният шрифт под бутона „Купи пакет“. Нарочно е четим, не крие:
   казва какво точно се случва след плащането. */
.buy-terms {
    margin: 0.7rem 0 0;
    max-width: 46rem;
    font-size: 0.82rem;
    color: var(--color-muted);
    line-height: 1.55;
}

/* Избраната конфигурация в кошницата — откъде идва сумата */
.cart-row-config {
    margin: 0.2rem 0 0;
    font-size: 0.8rem;
    color: var(--color-muted);
    line-height: 1.45;
}
.cart-row-warn {
    margin: 0.3rem 0 0;
    padding: 0.35rem 0.55rem;
    background: var(--color-warning-bg);
    color: var(--color-warning);
    border-radius: var(--radius);
    font-size: 0.78rem;
}

/* --- Полетата на калкулатора („Вашият пакет“) ---
   Кутията `.calc` и редът `.calc-result*` отпаднаха заедно с калкулатора
   върху страницата на услуга: той живее само на /products/plan/, където
   цената стои в .plan-summary. Класовете се махат, а не се оставят да
   висят — мъртъв CSS е следващата грешка. */
.calc-fields {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    gap: var(--space-3);
}
.calc-field label {
    display: block;
    font-size: 0.78rem;
    color: var(--color-muted);
    margin-bottom: 0.25rem;
}
.calc-field select { width: 100%; }

.calc-addons {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-top: var(--space-3);
}
.calc-addon {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    font-size: var(--text-sm);
}
.calc-addon-price { margin-left: auto; color: var(--color-muted); font-size: 0.8rem; }

/* Обещанието „един натоварен месец не променя цената“.
   ⚠️ Беше 0.8rem в цвят --color-success с тънка лента отляво — на практика
   невидимо. А това е отговорът на най-честия страх при абонамент, тоест
   най-силният аргумент на целия раздел. Сега е самостоятелен ред с
   отметка, на размера на въведение и в основния цвят на текста: чете се
   като твърдение на кантората, а не като бележка под линия. */
.calc-promise {
    display: flex;
    align-items: baseline;
    gap: var(--space-3);
    justify-content: center;
    max-width: 44rem;
    margin: var(--space-5) auto 0;
    padding: var(--space-4) var(--space-5);
    background: var(--color-accent-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    color: var(--color-navy);
    font-size: 1.0625rem;
    font-weight: 600;
    line-height: 1.5;
    text-align: center;
}
.calc-promise-mark {
    flex: none;
    color: var(--color-primary);
    font-weight: 800;
}

/* .product-image, .image-placeholder и .product-info отпаднаха: снимка на
   картата няма от преработката на каталога насам (виж product_card.html) —
   потърсено в целия templates/, никъде не се ползват. .product-price/.price/
   .product-name се дублираха тук с версията по-горе (тази печелеше в
   каскадата и цената излизаше в грешен цвят) — махнати, остава една версия. */
/* Значката вече стои в реда с категорията, а не върху снимка —
   затова е в потока, а не абсолютно позиционирана. */
.badge {
    margin-left: auto;
    padding: 0.15rem 0.6rem;
    border-radius: var(--radius-pill);
    font-size: 0.75rem;
    font-weight: 600;
    color: #fff;
}
.badge-sale { background: var(--color-danger); }

.product-category {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-muted);
}
.old-price { color: var(--color-muted); font-size: var(--text-sm); }

/* --- Детайлна страница на услуга --- */
/* --- Страница на услуга: четене отляво, решение отдясно --- */
.service-page {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 340px;
    gap: var(--space-6);
    align-items: start;
    /* Отстъпът отдолу е на лентата (.band), не на решетката вътре в нея */
    margin-bottom: 0;
}
.service-main { min-width: 0; }
.service-image {
    border-radius: var(--radius-lg);
    overflow: hidden;
    margin-bottom: var(--space-4);
}
.service-image img { width: 100%; height: auto; display: block; }

/* Етикетите над описанието: тих ред с разделители, не овални хапчета.
   Хапчетата бяха единственият заоблен елемент на страницата. */
.service-tags {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--space-2) var(--space-3);
    margin-bottom: var(--space-5);
    padding-bottom: var(--space-3);
    border-bottom: 1px solid var(--color-border);
}
.service-tag {
    padding: 0;
    background: none;
    border-radius: 0;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.service-tag + .service-tag::before { content: "·"; margin-right: var(--space-3); color: var(--color-border); }
/* Кодът на услугата (SKU) е най-тихият етикет, но си остава ЧЕТИМ:
   --color-border върху бяло е ~1.1:1 контраст, тоест невидим текст.
   „Тихо“ тук се постига с размера и уверттюра, не с изсветляване. */
.service-tag-quiet { color: var(--color-muted); font-weight: 400; }

.product-description { margin-top: var(--space-4); max-width: 68ch; line-height: 1.65; }

/* Кутията за покупка: следва скрола, за да не се губи цената при четене.
   Плоска (визия „1c“): без рамка от всички страни и без сянка — само лента
   отгоре в цвета на действието, както лентата отляво на .product-card. */
.buybox {
    position: sticky;
    top: var(--space-5);
    background: var(--color-card);
    border-top: 3px solid var(--color-primary);
    padding: var(--space-5);
}
.buybox-price {
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--space-2);
}
.buybox-price .price {
    font-family: var(--font-display);
    font-size: var(--figure-md);   /* беше 2rem — цената е причината човек да е тук */
    /* 600, не 700: Source Serif 4 е свалена само в 400/600 (виж бюджета в
       „Шрифтове“) — 700 тук би дало синтетично удебеляване от браузъра. */
    font-weight: 600;
    color: var(--color-navy);
}
.buybox .price-vat { margin: 0.2rem 0 var(--space-4); }
.buybox .btn-buy-detail { width: 100%; text-align: center; }
.buy-qty {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    margin-bottom: var(--space-3);
}
.buy-qty input { width: 5rem; }
.buy-qty-label { font-size: var(--text-sm); color: var(--color-muted); }

/* .related-products отпадна: свързаните услуги вече са .band-lilac + .band-split */

/* --- Страница „Контакти“ (визия 3) ---
   Страницата е в ленти: бял (данните) → лилав (формата) → навы (офисът).
   `.contacts-layout`, `.contact-info`, `.contact-form-panel`,
   `.contact-list`, `.contact-row`, `.contact-phone` и `.map-card*`
   отпаднаха заедно с двуколонния layout в main.container. */

/* Видима бележка, че данните са примерни — да не се пуснат в продукция.
   Остава видима, но вече не е първото нещо на правните страници:
   заглавието и датата стоят над нея, в .page-head. */
.sample-note {
    display: inline-block;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--color-warning);
    background: var(--color-warning-bg);
    border: 1px solid #f59e0b;
    border-radius: var(--radius-sm);
    padding: 0.35rem 0.75rem;
    margin: 0 0 var(--space-5);
}

/* Телефонът и имейлът са едри, но не колкото число в лента с числа:
   те са адреси, не суми. */
.contact-lead .stat-value {
    margin: var(--space-2) 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: var(--figure-sm);
    line-height: 1.2;
    color: var(--color-navy);
    overflow-wrap: anywhere;     /* дълъг имейл не бута колоната навън — резерва за наистина тесни екрани */
}
/* Имейлът е по-дълъг низ без интервали от телефона или адреса — на същия
   размер шрифт се пренася по-често и от `overflow-wrap: anywhere` се чупи
   посред думата ("stroykomers2002@outlo" / "ok.com"). Две поправки:
   1. по-малък размер — колоната е за адрес, не за число;
   2. `<wbr>` след „@“ в шаблона (core/templatetags/format_extras.py) дава
      на браузъра естествено място за пренасяне, преди да прибегне до
      чупене посред буквите. */
.contact-lead .stat-value-email {
    font-size: clamp(1.125rem, 0.95rem + 0.7vw, 1.375rem);
    word-break: break-word;
}
.contact-lead .stat-value a { color: inherit; }
.contact-lead .stat-value a:hover { color: var(--color-primary); }
.contact-lead .stat-label { margin-top: 0; max-width: 32ch; }
/* Всяка колона е ясно отделена — косъм отгоре, не рамка около нея */
.contact-lead .stat { border-top: 1px solid var(--color-border); padding-top: var(--space-4); }

/* Бяла повърхност под формата. Полетата са с фон --color-bg; върху
   --color-bg те бяха невидими. Панелът е плосък: без заоблени ъгли и без
   сянка, само лента отгоре в цвета на действието — същият похват като
   .buybox и .cart-summary. */
.formpanel {
    background: var(--color-card);
    border-top: 3px solid var(--color-primary);
    padding: clamp(1.25rem, 3vw, 2rem);
}
.formpanel form { margin: 0; }
.formpanel .btn-cta { width: 100%; margin-top: var(--space-2); }

/* GDPR бележката: без емоджи, с етикет. Емоджито се рендира различно на
   всяка платформа и не се поддава на оцветяване. */
.gdpr-note {
    font-size: 0.9375rem;
    line-height: 1.55;
    color: var(--color-success);
    background: var(--color-success-bg);
    border-left: 3px solid var(--color-accent);
    padding: var(--space-3) var(--space-4);
    margin: var(--space-5) 0 0;
}
.gdpr-note a { color: inherit; text-decoration: underline; }
.gdpr-note-label {
    display: block;
    margin-bottom: var(--space-1);
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

/* Бутонът за обаждане — само на телефон, най-отгоре */
.contact-quickcall { display: none; margin-bottom: var(--space-6); }
@media (max-width: 47.99rem) {
    .contact-quickcall { display: block; }
    .contact-quickcall .btn { width: 100%; }
}

/* --- Клиентски портал (вход и защитено начало) --- */

/* Картичка за формата за вход — тясна и центрирана, в стила на контактния панел */
.auth-card {
    max-width: 26rem;
    margin: 0 auto var(--space-7);
    border-radius: var(--radius-lg);
    padding: clamp(1.5rem, 3vw, 2.25rem);
}
.auth-submit { width: 100%; text-align: center; }

.portal-home {
    /* Широка колона заради решетката с модулите; уводният текст остава
       тесен и центриран (виж .portal-home > p) */
    max-width: 68rem;
    margin: 0 auto var(--space-6);
    text-align: center;
}
.portal-home > p { max-width: 44rem; margin: 0 auto; }
.portal-home form { margin-top: var(--space-5); }

/* --- Покупка от детайлната страница: брой + „Купи“ --- */
.buy-form {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    margin: var(--space-4) 0;
    flex-wrap: wrap;
}
.buy-qty-label { font-weight: 600; }
.buy-form input[type="number"],
.cart-qty-form input[type="number"] {
    width: 4.6rem;
    min-height: var(--tap-target);
    font: inherit;
    text-align: center;
    padding: 0.4rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    background: var(--color-card);
}

/* --- Кошница --- */
.cart-layout {
    display: grid;
    grid-template-columns: 1.6fr 1fr;
    gap: var(--space-6);
    align-items: start;
    /* Отстъпът отдолу е на лентата (.band), не на решетката вътре в нея */
    margin-bottom: 0;
}
.cart-items { display: grid; gap: var(--space-3); }

/* Плосък ред с лента отляво — както .product-card (визия „1c“, партида Б) */
.cart-row {
    background: var(--color-card);
    border-left: 3px solid var(--color-primary);
    padding: 1.1rem 1.25rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--space-4);
    flex-wrap: wrap;
}
.cart-row-name { font-weight: 600; font-size: 1.05rem; }
.cart-row-meta { margin: 0.15rem 0 0.3rem; font-size: var(--text-sm); color: var(--color-muted); }
.cart-row-price { margin: 0; }
.cart-row-unit { color: var(--color-muted); }
.cart-row-actions { display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap; }
.cart-qty-form { display: flex; align-items: center; gap: var(--space-2); }
.cart-qty-label { font-size: var(--text-sm); font-weight: 600; }
.btn-small { padding: 0.35rem 1rem; }

/* „Премахни“ — вторично действие, но с достатъчна цел за докосване */
.btn-remove {
    background: none;
    border: 0;
    color: var(--color-danger);
    font: inherit;
    font-size: 0.95rem;
    text-decoration: underline;
    cursor: pointer;
    min-height: var(--tap-target);
    padding: 0 var(--space-2);
}
.btn-remove:hover { text-decoration: none; }

/* Обобщението: плоско, лента отгоре като .buybox — и то е кутия за решение
   (води към следваща стъпка). Лепкаво на широк екран, за да не се губи
   сумата при четене на дълъг списък услуги/поле за фактура. */
.cart-summary {
    background: var(--color-card);
    border-top: 3px solid var(--color-primary);
    padding: 1.5rem;
}
@media (min-width: 64rem) {
    .cart-summary { position: sticky; top: var(--space-5); }
}
/* Общата сума е числото на страницата — заради нея човек е тук.
   Серифна, с табулярни цифри, за да не танцува при смяна на количеството. */
.cart-total-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--space-3);
    font-size: 1rem;
    border-top: 1px solid var(--color-border);
    padding-top: var(--space-3);
    margin: var(--space-3) 0 var(--space-2);
}
.cart-total-row > span {
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.cart-total-row strong {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: var(--figure-sm);
    line-height: 1;
    color: var(--color-navy);
    font-variant-numeric: tabular-nums;
}
/* Номерата 01/02/03 в навы лентата са ориентири, не суми — една стъпка
   по-малки от истинско число и в цвета на акцента. */
.band-navy .band-stats .stat-value { font-size: var(--figure-sm); color: var(--color-accent-soft); }

.cart-vat-note { font-size: var(--text-sm); color: var(--color-muted); margin: 0 0 var(--space-4); }
.cart-checkout-btn { width: 100%; }
.cart-continue { display: inline-block; margin-top: var(--space-3); }
.cart-empty { text-align: center; padding: 0; }
.cart-empty p { color: var(--color-muted); margin: 0 0 var(--space-5); max-width: 34rem; margin-left: auto; margin-right: auto; }
/* Двата бутона на празната кошница ползват .thanks-actions (виж „Благодарим“) —
   един и същ ред от центрирани бутони, не нов клас за същото нещо. */

/* --- Поръчка (checkout) --- */
.checkout-layout {
    display: grid;
    grid-template-columns: 1.4fr 1fr;
    gap: var(--space-6);
    align-items: start;
    /* Отстъпът отдолу е на лентата (.band), не на решетката вътре в нея */
    margin-bottom: 0;
}
/* .checkout-form-panel се замени с .formpanel — един и същ бял панел на
   „Контакти“ и на „Поръчка“, вместо два с различен вид. */
.checkout-submit { width: 100%; margin-top: var(--space-2); }

/* Заглавието на панела: тих етикет върху линия — едно правило за цялата
   система вместо .contact-info h2 / .contact-form-panel h2. */
.formpanel-title {
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--color-muted);
    border-bottom: 1px solid var(--color-border);
    padding-bottom: var(--space-3);
    margin: 0 0 var(--space-5);
}
/* Разделител между групите полета във формата */
.formpanel-group {
    margin: var(--space-6) 0 var(--space-4);
    padding-top: var(--space-4);
    border-top: 1px solid var(--color-border);
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--color-muted);
}

.summary-list { list-style: none; margin: 0; padding: 0; }
.summary-row {
    display: flex;
    justify-content: space-between;
    gap: var(--space-3);
    padding: 0.45rem 0;
    border-bottom: 1px dashed var(--color-border);
}
.summary-row:last-child { border-bottom: 0; }

/* --- Плащане --- */
.payment-page { max-width: 36rem; margin: 0 auto var(--space-8); }
.payment-methods { display: grid; gap: var(--space-3); margin: var(--space-4) 0; }

/* Целият ред е етикет — кликва се навсякъде по картичката на метода.
   Плосък (визия „1c“, партида Б — само типографски пипната страница):
   лента отляво при избор, вместо inset сянка. */
.payment-method {
    background: var(--color-card);
    display: flex;
    gap: var(--space-3);
    align-items: flex-start;
    padding: 1rem 1.1rem;
    border-left: 3px solid transparent;
    cursor: pointer;
    transition: border-color var(--transition), background var(--transition);
}
.payment-method input {
    margin-top: 0.4rem;
    width: 1.15rem;
    height: 1.15rem;
    flex: none;
    accent-color: var(--color-primary);
}
.payment-method:has(input:checked) {
    border-left-color: var(--color-primary);
    background: var(--color-accent-bg);
}
.payment-method-name { display: block; font-weight: 700; }
.payment-method-desc { display: block; font-size: 0.95rem; color: var(--color-muted); }
.payment-submit { width: 100%; }
.payment-total { max-width: 24rem; }

.payment-sim-card {
    border-radius: var(--radius-lg);
    padding: clamp(1.5rem, 3vw, 2.25rem);
    text-align: center;
}
.payment-sim-amount { font-size: 1.2rem; }
.payment-sim-actions { display: grid; gap: var(--space-3); margin-top: var(--space-4); }

/* --- „Благодарим“ --- */
.thanks-page {
    max-width: 42rem;
    margin: 0 auto var(--space-8);
    display: grid;
    gap: var(--space-5);
}
.bank-instructions { background: var(--color-card); padding: clamp(1.5rem, 3vw, 2.25rem); }
.thanks-actions { display: flex; gap: var(--space-3); flex-wrap: wrap; justify-content: center; }

/* Списък „етикет — стойност“ за банковите данни. Правилата стояха в раздел
   „Контакти“; при визия 3 контактите минаха на .factlist, но „Благодарим“ е
   ИЗВЪН обхвата на визия 3 и още ги ползва — затова се местят тук, при
   единствения си потребител, вместо да се изтрият. */
.contact-list { margin: 0 0 var(--space-5); }
.contact-row { padding: var(--space-4) 0; border-bottom: 1px solid var(--color-border); }
.contact-row:last-child { border-bottom: 0; }
.contact-row dt {
    font-size: 0.8125rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--color-muted);
}
.contact-row dd { margin: 0.35rem 0 0; font-size: 1.25rem; color: var(--color-text); }

/* --- Страница „За нас“ (визия 3) ------------------------------------
   Страницата НЕ е в main.container: петте ѝ раздела са .band на цяла
   ширина (бял → лилав → навы → бял → тюркоаз), а вътре в лентата
   заглавието стои центрирано над съдържанието (.band-split).
   `.about-intro`, `.about-intro-stats` и `.about-card` отпаднаха:
   подредбата вече е .band-split, числата се показват само на началната,
   а „Как работим“ е номериран списък (.numlist). */

.about-lead {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.375rem, 1.1rem + 1.4vw, 1.875rem);
    line-height: 1.3;
    letter-spacing: -0.01em;
    color: var(--color-navy);
    margin: 0 0 var(--space-5);
}

/* Визитката: етикет отляво, стойност отдясно, косъм между редовете.
   Същият похват като .contact-row досега — нарочно, за да е един и
   същ обект на две места. */
.factlist { margin: 0; }
.factlist-row {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-1);
    padding: var(--space-4) 0;
    border-bottom: 1px solid var(--color-border);
}
.factlist-row:first-child { border-top: 1px solid var(--color-border); }
.factlist dt {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.factlist dd { margin: 0; font-size: 1.125rem; color: var(--color-text); }
/* Фирмата и ЕИК-ът са едрите редове — те са отговорът на въпроса
   „кой ми подписва отчета“. */
.factlist-figure {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: var(--figure-sm);
    line-height: 1.15;
    color: var(--color-navy);
    font-variant-numeric: tabular-nums;
}
@media (min-width: 40rem) {
    .factlist-row {
        grid-template-columns: 11rem minmax(0, 1fr);
        gap: var(--space-4);
        align-items: baseline;
    }
}

/* Номериран списък 01/02/03 — броячът е CSS, не текст в шаблона (същият
   похват като #how-it-works на началната; работи с произволен брой
   елементи, ако кантората въведе CMS секции). */
.numlist { list-style: none; margin: 0; padding: 0; counter-reset: numlist; }
.numlist li {
    display: grid;
    grid-template-columns: 2.75rem minmax(0, 1fr);
    gap: var(--space-4);
    padding: var(--space-5) 0;
    border-bottom: 1px solid var(--color-border);
    counter-increment: numlist;
}
.numlist li:first-child { padding-top: 0; }
.numlist li:last-child { border-bottom: none; padding-bottom: 0; }
.numlist li::before {
    content: "";
    font-family: var(--font-display);
    font-size: 1.375rem;
    line-height: 1.35;
    color: var(--color-primary);
}
/* ВСИЧКО освен брояча е във втората колона.
   Без този ред решетката подрежда децата автоматично: `::before` заема
   клетка 1, заглавието — клетка 2, а ВТОРОТО дете (параграфът) пада в
   първата колона на следващия ред — широка 2.75rem. Резултатът е текст по
   една дума на ред. Правилото важи за произволен брой деца, което е
   важно: съдържанието идва от CMS и може да е няколко абзаца. */
.numlist li > * { grid-column: 2; }
.numlist h3 {
    margin: 0 0 0.35rem;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.3125rem;
    color: var(--color-navy);   /* беше --color-primary в .about-card — приличаше на връзка */
}
.numlist p { margin: 0; max-width: 62ch; line-height: 1.55; }
/* В навы лентата: светли линии, светъл текст, тюркоазен брояч */
.band-navy .numlist li { border-bottom-color: rgba(255, 255, 255, 0.14); }
.band-navy .numlist li::before { color: var(--color-accent-soft); }
.band-navy .numlist h3 { color: #fff; }
.band-navy .numlist p { color: var(--color-on-navy); }
.band-navy .factlist-row { border-bottom-color: rgba(255, 255, 255, 0.14); }

/* „На какво държим“ — две колони плоски редове с ✓, не единична колона кутии */
.about-values {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: 1fr;
}
@media (min-width: 40rem) {
    .about-values { grid-template-columns: 1fr 1fr; column-gap: var(--space-6); }
}
.about-values li {
    display: flex;
    gap: var(--space-3);
    align-items: baseline;
    padding: var(--space-4) 0;
    border-bottom: 1px solid var(--color-border);
    font-size: 1.1875rem;
    line-height: 1.5;
}
.about-values li::before {
    content: "✓";
    color: var(--color-accent);
    font-weight: 700;
    flex: none;
}

/* Последният ред (и съседът му в двуколонния вариант) е без линия —
   иначе списъкът изглежда отрязан по средата. */
.about-values li:last-child,
.about-values li:nth-last-child(2):nth-child(odd) { border-bottom: none; }

/* ---------- „ЗА НАС“ — ЦЕНТРИРАНО СЪДЪРЖАНИЕ ----------
   Заглавията на четирите ленти са центрирани (.band-split-head), а
   съдържанието под тях беше ляво подравнено. На широк екран това четеше
   като две различни оси в един и същ раздел.

   Правилата са заключени в `.page-about`, не са общи: `.factlist`,
   `.numlist` и `.about-values` се ползват и другаде (визитката е обща с
   „Контакти“, номерираният списък — с началната страница). Централно
   подравняване там не е поискано и не се променя.

   Ширините са смъкнати нарочно — центриран текст на дълъг ред е
   нечитаем, защото окото няма фиксиран ляв ръб, откъдето да започне
   следващия ред. */
.page-about .band-split-body { text-align: center; }
.page-about .band-split-body p,
.page-about .about-lead { margin-inline: auto; }
.page-about .measure { max-width: 62ch; margin-inline: auto; }
.page-about .measure-tight { max-width: 46ch; margin-inline: auto; }

/* Визитката: етикетът застава НАД стойността и двете са центрирани.
   Двуколонният вид (етикет вляво, стойност вдясно) при централна ос
   изглежда като таблица, на която е паднала едната колона. */
.page-about .factlist { max-width: 34rem; margin-inline: auto; }
@media (min-width: 40rem) {
    .page-about .factlist-row {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--space-1);
        justify-items: center;
    }
}

/* Номерираният списък: броячът минава НАД заглавието, а не отляво. */
.page-about .numlist { max-width: 44rem; margin-inline: auto; }
.page-about .numlist li {
    grid-template-columns: minmax(0, 1fr);
    justify-items: center;
    gap: var(--space-2);
}
.page-about .numlist li::before,
.page-about .numlist li > * { grid-column: 1; }
.page-about .numlist p { max-width: 58ch; margin-inline: auto; }

/* „На какво държим“: отметката застава над реда, за да остане текстът
   центриран — flex с ✓ отляво измества центъра на всеки ред различно,
   според дължината на изречението. */
.page-about .about-values { max-width: 52rem; margin-inline: auto; }
.page-about .about-values li {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: var(--space-2);
    max-width: 34ch;
    margin-inline: auto;
}

/* ---------- 6. ДВИЖЕНИЕ ---------- */

/* Плавно появяване на hero/банера при зареждане на страница:
   лентата избледнява навътре, а текстът леко „изплува“ отдолу.
   Чист CSS — без JavaScript и без промяна в структурата. */
@keyframes banner-fade {
    from { opacity: 0; }
}
@keyframes banner-rise {
    from { opacity: 0; transform: translateY(12px); }
}
.hero, .page-banner { animation: banner-fade 0.6s ease-out both; }
.hero-inner, .banner-inner { animation: banner-rise 0.7s ease-out 0.1s both; }

/* Фин „жив“ ефект (Ken Burns) на снимката в hero/банера: само transform
   (scale + translate), не background-position, за да е плавно без „накъсване“.
   Снимката е с 10% запас (110% размер, -5% отместване), затова при
   движението не се виждат бели ръбове. Текстът върху нея не се движи. */
@keyframes banner-drift-hero {
    0%   { transform: scale(1.06) translate(0, 0); }
    50%  { transform: scale(1.1) translate(-1.5%, -1%); }
    100% { transform: scale(1.06) translate(1.5%, 1%); }
}
@keyframes banner-drift-page {
    0%   { transform: scale(1.05) translate(0, 0); }
    50%  { transform: scale(1.09) translate(1.4%, 1.1%); }
    100% { transform: scale(1.05) translate(-1.4%, -1.1%); }
}

/* Дискретно появяване при скрол: скриваме елементите само когато
   скриптът е активен (html.js-reveal) — без JavaScript всичко си е видимо. */
.js-reveal .reveal {
    opacity: 0;
    transform: translateY(14px);
    transition: opacity 0.55s ease, transform 0.55s ease;
}
.js-reveal .reveal.is-visible { opacity: 1; transform: none; }

/* При изрично намалено движение: без анимации и премествания никъде */
@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;
    }
    .js-reveal .reveal { opacity: 1; transform: none; }
    .btn-cta:hover, .product-card:hover { transform: none; }
    /* Банерите се показват веднага, без появяване */
    .hero, .page-banner, .hero-inner, .banner-inner { animation: none; }
    /* Снимката спира да „диша“ — остава неподвижна */
    .hero::before, .page-banner::before { animation: none; transform: scale(1.06); }
}

/* ---------- 7. АДАПТИВНОСТ ---------- */

@media (max-width: 53.75rem) {
    /* ⚠️ ВСИЧКИ БАЛОНЧЕТА ВИДИМИ НАВЕДНЪЖ (21.08.2026, второ преразглеждане).
       Първият опит правеше лентата хоризонтално превъртаща
       (`overflow-x: auto`) — вече не се разтягаше цялата страница, но
       повечето категории оставаха ИЗВЪН екрана, скрити зад ръба, докато
       човек не се сети да плъзне настрани. Изглеждаше счупено, дори не
       беше.

       Сега балончетата се УВИВАТ на нужния брой редове (`flex-wrap: wrap`)
       — по-дребни на телефон, за да се съберат повече на ред — и всички са
       на екрана веднага, без жест, без скролване настрани. Същият похват
       като филтрите в познатите пазарски приложения (Airbnb, Booking):
       „чипове“, които се пренасят, не бягат от кадъра.

       `min-width: 0` на лентата остава — иначе флекс родителят пак се
       опитва да не се свива под съдържанието си и разтяга страницата,
       независимо дали децата ѝ превъртат или се увиват. */
    .cat-toolbar { min-width: 0; }
    .cat-chips {
        flex-wrap: wrap;
        overflow-x: visible;
        max-width: 100%;
        min-width: 0;
        gap: 0;
    }
    .cat-chip {
        flex: none;
        min-width: 0;
        max-width: 100%;
        padding: 0.5rem 0.8rem;
        font-size: 0.82rem;
        /* Най-дългите имена („Регистрация на фирми и административни
           услуги“) са по-широки от самия екран на тесен телефон, дори
           смалени. `nowrap` (базовото правило по-горе) би ги изтласкало
           извън ръба и би върнало точно проблема, който се оправя тук —
           затова на телефон балончето може да пренесе текста си на втори
           ред, вместо да разтяга реда на лентата. */
        white-space: normal;
        text-align: center;
    }
    /* ⚠️ ПОПРАВКА (21.08.2026): „Месеците ви са много различни?“ панелът е
       flex БЕЗ `flex-wrap` (виж `.calc-promise` по-горе) — четирите му
       парчета (отметка, въпрос, връзка, отговор) се редят на ЕДИН ред по
       подразбиране. На тесен телефон не се събират и последната дума
       изтича извън ръба на екрана. Тук се пуска да се пренася на нужния
       брой редове — центрирано, както текстът вече си е. */
    .calc-promise { flex-wrap: wrap; }
    /* Цената и бутонът на челната услуга падат под текста — подравняват се
       по левия ръб като всичко останало, а не остават залепени вдясно. */
    .featured-band .featured-buy { text-align: left; }
    .product-detail { grid-template-columns: 1fr; padding: 1.25rem; }
    /* Телефон: кутията за покупка минава НАД описанието — цената и бутонът
       трябва да се виждат веднага, без скролване. */
    .service-page { grid-template-columns: 1fr; }
    .buybox { position: static; order: -1; }
    .cart-layout, .checkout-layout { grid-template-columns: 1fr; }
    /* На телефон: призивът — на цял ред, лесен за докосване */
    .btn-cta { width: 100%; text-align: center; }
    .hero-actions { width: 100%; }
}

/* ---------- ЛАПТОП (47.5rem–64rem / 760–1024px) ----------
   ⚠️ ИЗМЕРЕНО: при 993px видима ширина хедърът преливаше с 56px и цялата
   страница се плъзгаше настрани. Точната сметка:
       бранд 239 + табове 390 + дясна група 353 = 982
       + отстъпи 24 + вътрешни 29 = 1035  срещу  961 налични.
   Тук пълното меню вече се показва (сгъва се чак под 47.5rem), но
   разстоянията са същите като на широк монитор.

   1024px е най-масовата резолюция на лаптоп — тоест дефектът се виждаше
   от повече хора, отколкото на телефон.

   Свиваме трите най-широки неща: подзаглавието на бранда, отстъпите на
   табовете и на бутона. Нищо не се маха — само се стяга. */
@media (min-width: 60.01rem) and (max-width: 64rem) {
    .brand-tagline { display: none; }
    .main-nav a { padding: 0 0.55rem; }
    .main-nav { margin-left: 0.25rem; }
    .nav-portal { padding: 0 0.9rem; }
    .header-inner { padding-left: 0.8rem; gap: 0.5rem; }
}

/* Телефон И ТАБЛЕТ: pill-ът се пренася на два реда, менюто се сгъва зад
   бутона „Меню“ (checkbox — без JavaScript).

   ⚠️ ПРАГЪТ Е ВДИГНАТ ОТ 47.5rem (760px) НА 60rem (960px), 11.08.2026.
   Измерено при 789px: хедърът преливаше със 155px. Пълното меню изисква
   ~800px само за себе си (бранд 200 + четири таба 248 + дясна група 301 +
   отстъпи), а на 789px има 757. Стягането на отстъпите не стига — четирите
   таба просто не се събират.

   Проверено и на 919px: стягането пак не стигаше (25px преливане).
   Между 960px и 1024px менюто е видимо, но стегнато (заявката по-горе).
   Под 960px минава зад „Меню“ — обичайното поведение на таблет. */
@media (max-width: 60rem) {
    .header-inner { flex-wrap: wrap; border-radius: 20px; }
    .brand-tagline { display: none; }

    .nav-toggle { display: inline-flex; }
    /* Табовете изчезват от първия ред и се показват на цяла ширина отдолу */
    .main-nav { display: none; width: 100%; order: 5; flex-direction: column; gap: 4px; padding-top: 0.4rem; margin-left: 0; }
    .nav-toggle-input:checked ~ .main-nav { display: flex; }
    .main-nav a { justify-content: center; }
}
/* ⚠️ Заявката ГОРЕ важи за 47.5–60rem (таблет): един ред, менюто зад бутон.
   Под 47.5rem подредбата се поема изцяло от грида по-долу — той е
   ПО-НАТАТЪК във файла и затова печели при еднаква специфичност. Не
   разменяй реда на двата блока. */

/* ========== ЗАГЛАВНАТА ЛЕНТА НА ТЕЛЕФОН (до 47.5rem / 760px) ==========

   ЗАЩО ГРИД, А НЕ FLEX-WRAP

   Дотук редът беше `flex-wrap: wrap` и подредбата зависеше от това КОЙ
   елемент колко е широк. Резултатът се менеше сам при всяка промяна на
   текст: на 500px език + кошница + „Клиентски портал“ (207px) се събираха
   на един ред и бутонът се лепеше вдясно; на 375px се пренасяха как да е.
   Затова изглеждаше „плюснато“ — никой не беше решил подредбата, тя се
   случваше.

   Тук подредбата е ЗАДАДЕНА и не зависи от ширината на надписите:

       ┌──────────────────────────────────────────┐
       │ ☰ Меню   Стройкомерс 2002      BG|EN  🛒 │   ред 1
       │        Клиентски портал                  │   ред 2
       └──────────────────────────────────────────┘

   Три решения, всяко по искане на Илиян (12.08.2026):

   1. ХАМБУРГЕРЪТ Е ОСНОВЕН — първи на реда, с рамка, най-голямата цел за
      докосване горе вляво. На телефон навигацията е зад него, значи той е
      навигацията, а не украса до бранда.

   2. ЕЗИКЪТ Е ГОРЕ ВДЯСНО И ПО-МАЛЪК — той е рядко действие. Дотук беше
      подложен с плътна плочка и тежеше колкото бутона за портала.

   3. „КЛИЕНТСКИ ПОРТАЛ“ Е ЦЕНТРИРАН НА СВОЙ РЕД — главното действие за
      съществуващ клиент става най-лесната цел на екрана, вместо да се бори
      за място с кошницата.

   ⚠️ `minmax(0, 1fr)` на бранда, не `1fr`: подразбиращото се `min-width:
   auto` на грид елемент не му позволява да се свие под съдържанието си и
   дългото име избутва езика извън екрана. Точно това караше страницата да
   се плъзга настрани. */
@media (max-width: 47.5rem) {
    .header-inner {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto auto auto;
        grid-template-areas:
            "brand lang cart toggle"
            "portal portal portal portal";
        align-items: center;
        gap: 0.35rem 0.5rem;
        padding: 0.5rem 0.7rem;
        border-radius: 20px;
    }

    /* --- Ред 1 ---
       ⚠️ „МЕНЮ“ Е НАЙ-ВДЯСНО (19.08.2026). Дотук стоеше най-вляво и
       избутваше логото навътре — а знаците на ЕС под него започваха от
       ръба. Двете лога изглеждаха разместени. Сега лявата колона е само
       на бранда: лого и знаци на ЕС имат обща лява граница, а действията
       (език, кошница, меню) са подредени вдясно. */
    .nav-toggle {
        grid-area: toggle;
        justify-self: end;
        display: inline-flex;
        gap: 0.45rem;
        padding: 0 0.75rem;
        border: 1px solid var(--color-border);
        background: var(--color-bg);
        font-size: 0.9rem;
    }
    /* ⚠️ КЛЕТКАТА „brand“ Е НА ОБВИВКАТА, не на самата връзка (19.08.2026).
       Откакто брандът е лого + знаци на ЕС, `.brand` вече не е пряко дете
       на `.header-inner` — `grid-area` върху него няма никакво действие и
       лентата се подрежда автоматично, тоест се разпада. */
    .brand-block { grid-area: brand; min-width: 0; align-items: flex-start; }
    .brand { min-width: 0; }
    .brand-logo { max-width: 100%; }
    .brand-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .brand-tagline { display: none; }

    /* Дясната група се разпада: всеки елемент отива в своята клетка, а
       `display: contents` маха самия контейнер от подредбата. */
    .header-actions { display: contents; }

    .lang-switch {
        grid-area: lang;
        justify-self: end;
        background: none;   /* без плътната плочка — това е дребно действие */
        padding: 0;
    }
    .lang-btn {
        font-size: 0.72rem;
        min-height: 2rem;
        padding: 0 0.35rem;
    }
    .lang-btn.active {
        background: none;
        box-shadow: none;
        color: var(--color-primary-dark);
        text-decoration: underline;
        text-underline-offset: 3px;
    }
    .cart-link { grid-area: cart; justify-self: end; padding: 0 0.5rem; }

    /* --- Ред 2 --- */
    .nav-portal {
        grid-area: portal;
        justify-content: center;
        padding: 0 1rem;
        margin-top: 0.15rem;
        /* Сянката под бутон на цяла ширина изглежда като втора лента.
           На телефон плътният цвят е достатъчен. */
        box-shadow: none;
    }

    /* Табовете зад „Меню“ — трети ред, само когато е отворено.
       `grid-column: 1 / -1` е задължително: без него менюто застава в
       първата колона и се свива до ширината на „Меню“. */
    .main-nav {
        display: none;
        grid-column: 1 / -1;
        flex-direction: column;
        gap: 4px;
        margin-left: 0;
        padding-top: 0.35rem;
        border-top: 1px solid var(--color-border);
    }
    .nav-toggle-input:checked ~ .main-nav { display: flex; }
    .main-nav a { justify-content: center; min-height: var(--tap-target); }

    /* Скритият checkbox е `position: absolute` и не участва в грида —
       но нека не заема клетка при промяна на реализацията. */
    .nav-toggle-input { grid-area: toggle; }
}

/* ---------- МАЛЪК ТЕЛЕФОН (до 30rem / 480px) ----------
   ⚠️ ИЗМЕРЕНО, НЕ ПРЕДПОЛОЖЕНО: при 329px видима ширина страницата
   преливаше хоризонтално с 59px — на ВСЯКА страница, защото първият ред
   беше бранд + „Меню“ + език + кошница + бутон, всеки от тях `nowrap`.

   Гридът по-горе решава подредбата; тук остава само стягането на
   най-широките неща, за да се съберат в 320px. */
@media (max-width: 30rem) {
    .header-inner { gap: 0.3rem 0.35rem; padding: 0.45rem 0.6rem; }
    .brand-mark { margin-right: 0; }
    .brand-name { font-size: 0.95rem; }
    .nav-toggle { padding: 0 0.6rem; font-size: 0.85rem; }
    /* Надписът „Меню“ пада — иконата е разбираема сама. Достъпността е
       запазена: етикетът остава свързан с checkbox-а, а `aria-label`
       носи името. */
    .nav-toggle-text { display: none; }
    .cart-link { padding: 0 0.35rem; }

    /* Дълъг надпис в бутон се ПРЕНАСЯ, вместо да излиза от екрана.
       Измерено: „Виж на картата (Google Maps)“ е 318px при 329px видима
       ширина и с отстъпите отляво излизаше на 334px — пет пиксела, но
       достатъчни цялата страница да се плъзга настрани. */
    .btn {
        white-space: normal;
        padding-inline: 1rem;
        text-align: center;
    }
}

@media (max-width: 35rem) {
    .product-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
    .cart-row { flex-direction: column; align-items: stretch; }
    .cart-row-actions { justify-content: space-between; }
    .thanks-actions .btn { width: 100%; }
}

/* --- Чат уиджет „Пишете ни“ (долен десен ъгъл) --- */
/* <details>/<summary> — отваря се без JavaScript; z-index под банера за
   бисквитки (100), за да не закрива избора за съгласие.
   Визия: Messenger/Intercom стил — тъмна заглавна лента, светла нишка със
   съобщения, бяло поле за писане отдолу (вижте .chat-header/.chat-body/
   .chat-inputbar по-долу). */
:root {
    --chat-header-bg: #16305e;
    --chat-body-bg: #f4f6fa;
    --chat-accent: #5b21b6;
}
.chat-widget {
    position: fixed;
    right: 1rem;
    bottom: 1rem;
    z-index: 90;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
}
.chat-toggle {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    min-height: var(--tap-target);
    padding: 0.65rem 1.3rem;
    background: var(--color-accent);
    color: #fff;
    font-weight: 700;
    border-radius: var(--radius-pill);
    box-shadow: var(--shadow-hover);
    cursor: pointer;
    list-style: none;              /* маха стрелката на <summary> */
    transition: background 0.2s ease;
}
.chat-toggle::-webkit-details-marker { display: none; }
.chat-toggle:hover { background: var(--color-accent-dark); }
.chat-toggle:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.chat-icon { width: 1.3rem; height: 1.3rem; flex: none; }
/* Малка точка при затворен уиджет с ново съобщение (chat.js я показва/скрива) */
.chat-toggle-dot {
    position: absolute;
    top: -0.15rem;
    right: -0.15rem;
    width: 0.85rem;
    height: 0.85rem;
    border-radius: 50%;
    background: #ef4444;
    border: 2px solid var(--color-bg);
}

/* Отворен панел: картичка под бутона (браузърът винаги рендерира
   <summary> първи в <details>, затова бутонът остава отгоре).
   Фиксиран размер 380×560 (по-тесен екран го смалява до наличната ширина). */
.chat-panel {
    width: min(380px, calc(100vw - 2rem));
    height: min(560px, calc(100vh - 6.5rem));
    margin-top: 0.75rem;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: var(--color-card);
    border-radius: 16px;
    box-shadow: 0 24px 60px rgba(15, 20, 45, 0.28);
}

/* --- 1. Заглавна лента --- */
.chat-header {
    flex: none;
    display: flex;
    align-items: center;
    gap: 0.7rem;
    min-height: 64px;
    padding: 0.6rem 0.9rem;
    background: var(--chat-header-bg);
    color: #fff;
}
.chat-avatar {
    flex: none;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.16);
    display: grid;
    place-items: center;
    font-weight: 800;
    font-size: 0.9rem;
    letter-spacing: -0.02em;
}
.chat-header-text { flex: 1; min-width: 0; }
.chat-header-name { margin: 0; font-weight: 700; font-size: 0.98rem; line-height: 1.25; }
.chat-header-status {
    margin: 0.15rem 0 0;
    display: flex;
    align-items: center;
    gap: 0.35rem;
    font-size: 0.78rem;
    color: rgba(255, 255, 255, 0.75);
}
.chat-status-dot {
    flex: none;
    width: 0.45rem;
    height: 0.45rem;
    border-radius: 50%;
    background: #4ade80;
}
.chat-close {
    flex: none;
    width: 2rem;
    height: 2rem;
    display: grid;
    place-items: center;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: rgba(255, 255, 255, 0.85);
    cursor: pointer;
    transition: background 0.15s ease;
}
.chat-close svg { width: 1.1rem; height: 1.1rem; }
.chat-close:hover { background: rgba(255, 255, 255, 0.14); }
.chat-close:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* --- 2. Тяло: скролируема нишка + поле за писане --- */
.chat-body {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    background: var(--chat-body-bg);
}

.chat-reply { margin: var(--space-3); }
.chat-reply {
    background: var(--color-success-bg);
    color: var(--color-success);
    border-radius: var(--radius);
    padding: var(--space-2) var(--space-3);
}
.chat-reply p { margin: 0 0 0.5rem; }
.chat-reply-links { margin: 0; padding-left: 1.2rem; }
.chat-reply-links li { margin-bottom: 0.3rem; }
.chat-reply:focus { outline: none; }

.chat-hidden { display: none; }

.chat-bot { flex: 1; min-height: 0; display: flex; flex-direction: column; }

/* Нишката е единственото скролиращо се място в панела */
.chat-thread {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 16px;
}
.chat-bot-label { margin: 0 0 0.4rem; font-size: 0.8rem; color: var(--color-muted); padding: 0 16px; }
.chat-bot-chips-form:has(.chat-bot-chips-categories) { padding: 0 16px; margin-top: -4px; }

/* Ред със съобщение: [аватар (само бот)] + [балонче + час] */
.chat-row {
    display: flex;
    align-items: flex-end;
    gap: 0.45rem;
    animation: chat-row-in 0.2s ease both;
}
.chat-row-visitor { justify-content: flex-end; }
.chat-avatar-sm {
    flex: none;
    width: 1.7rem;
    height: 1.7rem;
    border-radius: 50%;
    background: var(--chat-header-bg);
    color: #fff;
    display: grid;
    place-items: center;
    font-size: 0.62rem;
    font-weight: 800;
}
/* Аватар само на първото балонче от поредица бот-съобщения */
.chat-row-bot + .chat-row-bot .chat-avatar-sm { visibility: hidden; }

.chat-bubble-wrap { display: flex; flex-direction: column; max-width: 78%; }
.chat-row-visitor .chat-bubble-wrap { align-items: flex-end; }
.chat-row-bot .chat-bubble-wrap { align-items: flex-start; }

.chat-bubble {
    margin: 0;
    padding: 0.6rem 0.85rem;
    font-size: 0.9rem;
    line-height: 1.42;
    word-break: break-word;
}
.chat-bubble-bot {
    background: #fff;
    color: var(--color-text);
    border: 1px solid var(--color-border);
    border-radius: 18px 18px 18px 4px;
}
.chat-bubble-visitor {
    background: var(--chat-header-bg);
    color: #fff;
    border-radius: 18px 18px 4px 18px;
}
.chat-bubble-greeting { color: var(--color-text); }

.chat-time {
    margin: 2px 0.3rem 0;
    font-size: 11px;
    color: var(--color-muted);
}

/* Чиповете стоят ПОД последното съобщение (естествено, като поредния ред
   в нишката) — не най-горе */
.chat-bot-chips-form { margin: 0; padding: 0 16px; }
.chat-bot-chips { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.chat-bot-chip {
    border: 1.5px solid var(--chat-accent);
    background: #fff;
    color: var(--chat-accent);
    border-radius: 999px;
    padding: 0.35rem 0.8rem;
    font-size: 0.82rem;
    font-weight: 600;
    cursor: pointer;
    text-align: left;
    transition: background 0.15s ease, color 0.15s ease;
}
.chat-bot-chip:hover,
.chat-bot-chip:focus-visible { background: var(--chat-accent); color: #fff; }
.chat-bot-chip:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.chat-bot-results { display: contents; }
.chat-bot-nomatch-inline,
.chat-bot-nomatch { font-size: 0.9rem; color: var(--color-muted); margin: 0 0 0.4rem; padding: 0 16px; }

/* Празни контейнери с чипове не заемат място (напр. няма "избор"/"свързани") */
.chat-bot-chips:empty { display: none; }
.chat-bot-chips-form:has(.chat-bot-chips:empty) { display: none; }
.chat-bot-chips-categories .chat-bot-chip-category {
    background: var(--chat-accent);
    color: #fff;
}
.chat-bot-chips-categories .chat-bot-chip-category:hover { background: var(--color-accent-dark); }

/* „← Друга тема“ — дискретен изход обратно към менюто, под всеки списък
   с въпроси, за да не задънва разговора (виж support/views.bot_ask) */
.chat-back-to-menu { margin: 0.1rem 0 0; padding: 0 16px; }
.chat-back-to-menu a {
    font-size: 0.78rem;
    color: var(--color-muted);
    text-decoration: none;
}
.chat-back-to-menu a:hover,
.chat-back-to-menu a:focus-visible { color: var(--chat-accent); text-decoration: underline; }

/* Подкана за консултация (идва с всеки отговор на бота) — чиповете тук са
   <a>/<label>/<button>, не форма, затова носят собствен padding */
.chat-bot-nudge-actions,
.chat-bot-consult-actions { padding: 0 16px; }
.chat-bot-chip-nudge { display: inline-block; text-decoration: none; }

/* „Пише…“ индикатор — 3 подскачащи точки, в балонче на бота */
.chat-typing-row { margin: 0; }
.chat-typing {
    display: inline-flex;
    gap: 0.25rem;
    padding: 0.7rem 0.9rem;
    background: #fff;
    border: 1px solid var(--color-border);
    border-radius: 18px 18px 18px 4px;
}
.chat-typing span {
    width: 0.4rem;
    height: 0.4rem;
    border-radius: 50%;
    background: var(--color-muted);
    animation: chat-typing-bounce 1.1s infinite ease-in-out;
}
.chat-typing span:nth-child(2) { animation-delay: 0.15s; }
.chat-typing span:nth-child(3) { animation-delay: 0.3s; }
@keyframes chat-typing-bounce {
    0%, 60%, 100% { transform: translateY(0); opacity: 0.6; }
    30% { transform: translateY(-0.25rem); opacity: 1; }
}
@keyframes chat-row-in {
    from { opacity: 0; transform: translateY(10px); }
}
@media (prefers-reduced-motion: reduce) {
    .chat-typing span { animation: none; }
    .chat-row { animation: none; }
}

/* --- 3. Поле за писане --- */
.chat-bot-ask-form { flex: none; border-top: 1px solid var(--color-border); background: #fff; padding: 0.6rem 0.7rem; }
.chat-inputbar { display: flex; align-items: center; gap: 0.5rem; }
.chat-input {
    flex: 1;
    min-width: 0;
    min-height: 2.6rem;
    font: inherit;
    font-size: 0.9rem;
    padding: 0.5rem 0.95rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-pill);
    background: var(--chat-body-bg);
    color: var(--color-text);
}
.chat-input:focus-visible {
    outline: none;
    border-color: var(--chat-accent);
    box-shadow: 0 0 0 3px rgba(15, 118, 110, 0.15);
}
.chat-send {
    flex: none;
    width: 2.5rem;
    height: 2.5rem;
    display: grid;
    place-items: center;
    border: 0;
    border-radius: 50%;
    background: var(--chat-accent);
    color: #fff;
    cursor: pointer;
    transition: background 0.15s ease;
}
.chat-send svg { width: 1.1rem; height: 1.1rem; }
.chat-send:hover { background: var(--color-accent-dark); }
.chat-send:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }

/* Формата „Пишете ни“ (пада тук след неуспешен опит на бота) и полето с
   автоматичен отговор след изпращане живеят в скролиращото се тяло */
.chat-form { padding: var(--space-3); }
.chat-form .form-field { margin-bottom: 0.75rem; }
.chat-form textarea { min-height: 4.5rem; }
.chat-submit { width: 100%; }
.chat-gdpr { font-size: 0.85rem; margin: 0.75rem 0 0; }

@media (max-width: 35rem) {
    /* На телефон панелът заема целия екран */
    .chat-widget { right: 0; bottom: 0; left: 0; align-items: stretch; }
    .chat-toggle { align-self: flex-end; margin: 0.75rem; }
    .chat-panel {
        /* 100vw включва ширината на вертикалната лента за плъзгане и на
           320px екран изнася панела с ~13px настрани. 100% се мери спрямо
           видимата област БЕЗ лентата — затова е по-безопасно. */
        width: 100%;
        max-width: 100vw;
        height: 100vh;
        height: 100dvh;
        margin-top: 0;
        border-radius: 0;
    }
}

/* ============================================================
   Календарен модул (клиентски портал)
   ============================================================ */
.calendar-page { max-width: 100%; }

/* Бележка „ПРОЕКТ“ — нормативните срокове чакат валидация от счетоводител.
   ⚠️ Класът вече НЕ се използва в календара на клиента (махнат 11.08.2026,
   виж бележката в templates/calendar_app/calendar.html). Стилът остава,
   защото същата бележка може да потрябва на вътрешен екран, където
   счетоводителят преглежда списъка преди потвърждаване. */
.calendar-disclaimer {
    background: var(--color-warning-bg);
    color: var(--color-warning);
    border: 1px solid #f3d9a4;
    border-radius: var(--radius);
    padding: var(--space-3) var(--space-4);
    margin-bottom: var(--space-5);
}

/* Две колони на широк екран: месецът вляво, предстоящите вдясно */
.calendar-layout {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
    gap: var(--space-6);
    align-items: start;
}

.calendar-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-3);
    margin-bottom: var(--space-2);
}
.calendar-title { margin: 0; text-transform: capitalize; }
.calendar-nav {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    min-height: var(--tap-target);
    padding: 0.4rem var(--space-3);
    border: 2px solid var(--color-border);
    border-radius: var(--radius);
    font-weight: 600;
}
.calendar-nav:hover { border-color: var(--color-primary); text-decoration: none; }
.calendar-today-link { margin: 0 0 var(--space-3); font-size: 0.95rem; }

/* Месечна решетка */
.calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 4px;
}
.calendar-weekday {
    text-align: center;
    font-size: 0.85rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-muted);
    padding: var(--space-1) 0;
}
/* Денят е ВРЪЗКА, не кутия — виж бележката в calendar.html. Оттук идват и
   `display:block` (иначе `<a>` е ред и решетката се разпада) и `color:
   inherit` (иначе всички дни стават сини като връзки). */
/* ⚠️ ВИСОЧИНАТА Е ФИКСИРАНА, не `min-height`. С минимум клетката растеше
   според най-дългото събитие в нея и редовете на месеца ставаха различно
   високи — календарът изглеждаше като счупена таблица. Сега всички
   клетки са еднакви, а излишъкът се крие (`overflow`) и се брои с
   „+N“. Съдържанието не се губи: то е в изскачащия прозорец и в
   разгънатия ден под решетката. */
.calendar-day {
    display: block;
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    height: 6.25rem;
    overflow: hidden;
    padding: var(--space-1) var(--space-2) var(--space-2);
    font-size: 0.9rem;
    color: inherit;
    text-decoration: none;
    transition: border-color var(--transition), background var(--transition), box-shadow var(--transition);
}
/* Ден със срокове изпъква леко — окото намира заетите дни, без да чете. */
.calendar-day.has-events { background: linear-gradient(180deg, var(--color-card), var(--color-bg)); }
a.calendar-day.has-events:hover { box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08); }
a.calendar-day:hover {
    border-color: var(--color-primary);
    background: var(--color-bg);
    text-decoration: none;
}
a.calendar-day:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.calendar-day.is-outside { background: transparent; border-color: transparent; }
.calendar-day.is-today { border: 2px solid var(--color-primary); }
/* Избраният ден е плътен, не само с рамка: рамката вече значи „днес“ и
   двете състояния трябва да се различават от пръв поглед.
   ⚠️ Беше --color-navy, тоест почти черно — единственото място в портала,
   където се появяваше този цвят, и изглеждаше като дупка в календара.
   Сега носи същия градиент като чертичките и избраните плочки. */
.calendar-day.is-selected {
    background-image: var(--gradient-accent);
    border-color: transparent;
    color: #fff;
    box-shadow: 0 6px 18px rgba(79, 70, 229, 0.3);
}
.calendar-day.is-selected .calendar-event { background: rgba(255, 255, 255, 0.92); }
.calendar-day.is-selected .calendar-day-num { color: #fff; }
.calendar-day-num { display: block; font-weight: 700; color: var(--color-muted); }
.calendar-day.is-today .calendar-day-num { color: var(--color-primary-dark); }
.calendar-day-full { display: none; }

/* --- Разгърнатият избран ден (под решетката) --- */
.calendar-selected {
    margin-top: var(--space-5);
    border-top: 2px solid var(--color-navy);
    padding-top: var(--space-4);
}
.calendar-selected-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--space-3);
    margin-bottom: var(--space-3);
}
.calendar-selected-head h2 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.25rem, 1.1rem + 0.8vw, 1.5rem);
    /* Мястото на плаващата лента отгоре — иначе котвата вкарва датата
       точно под нея и човек вижда следващия ред вместо избрания ден. */
    scroll-margin-top: 6rem;
    outline: none;   /* фокусът е програмен, не от клавиатура */
}
.calendar-selected-head a { font-size: 0.9375rem; color: var(--color-muted); }
.calendar-selected-list { list-style: none; margin: 0; padding: 0; }
.calendar-selected-item {
    display: flex;
    gap: var(--space-3);
    align-items: baseline;
    padding: var(--space-3) 0;
    border-bottom: 1px solid var(--color-border);
}
.calendar-selected-item:last-child { border-bottom: none; }
.calendar-selected-item .legend-dot { flex: none; margin-top: 0.35em; }
.calendar-selected-title { margin: 0; font-weight: 600; font-size: 1.0625rem; }
.calendar-selected-meta { margin: 0.15rem 0 0; color: var(--color-muted); font-size: 0.875rem; }
.calendar-selected-note { margin: 0.35rem 0 0; color: var(--color-text); font-size: 0.9375rem; line-height: 1.5; }

/* Събитие в клетка: цветна лента + текст (типът е и в скрит текст/легенда).
   ⚠️ ЕДИН РЕД, БЕЗ ПРЕНАСЯНЕ. Дотук `overflow-wrap: break-word` пренасяше
   „ДДС — справка-декларация, дневници и VIES“ на шест реда, клетката се
   разтягаше и редът на календара ставаше три пъти по-висок от съседния.
   Късото име идва от CalendarEvent.short_title, а тук се слага и таван:
   ако преводът е по-дълъг, се отрязва с многоточие вместо да разлее реда. */
.calendar-event {
    display: flex;
    align-items: baseline;
    gap: 0.25rem;
    margin-top: 0.25rem;
    padding: 0.15rem 0.35rem;
    border-left: 3px solid;
    border-radius: 4px;
    line-height: 1.3;
    font-size: 0.75rem;
    white-space: nowrap;
    overflow: hidden;
}
.calendar-event-time {
    flex: none;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    opacity: 0.75;
}
.calendar-event-name { overflow: hidden; text-overflow: ellipsis; }
.calendar-event.event-type-statutory { background: #fef2f2; border-color: var(--color-danger); color: #7f1d1d; }
.calendar-event.event-type-consultation { background: #f5f3ff; border-color: var(--color-accent); color: var(--color-accent-dark); }
.calendar-event.event-type-internal { background: var(--color-accent-bg); border-color: var(--color-primary); color: var(--color-navy); }
/* „+2“ — колко срока има още в този ден. Числото е по-честно от трети
   отрязан чип: то казва, че има още, без да се преструва, че го показва. */
.calendar-more {
    display: block;
    margin-top: 0.2rem;
    font-size: 0.6875rem;
    font-weight: 700;
    color: var(--color-muted);
}
.calendar-day.is-selected .calendar-more { color: rgba(255, 255, 255, 0.75); }
/* В решетката се виждат само първите две събития. Останалите СА в
   документа (търсене в страницата, екранен четец, телефонният списък), но
   не се рисуват — иначе клетката пак се разлива. */
.calendar-day-events { display: block; }
.calendar-day-events > .calendar-event:nth-child(n + 3) { display: none; }

/* Чипът е активен само когато JS-ът е поел подробността. Без него той е
   част от връзката към деня и не бива да подсказва второ действие. */
.js-calendar .calendar-event[data-event-future] { cursor: pointer; }
.js-calendar .calendar-event[data-event-future]:hover {
    filter: brightness(0.97);
    box-shadow: inset 0 0 0 1px currentColor;
}
.js-calendar .calendar-event.is-open {
    box-shadow: inset 0 0 0 1px currentColor, 0 2px 6px rgba(15, 23, 42, 0.18);
}

/* --- Изскачащата подробност (static/js/calendar.js) --- */
.cal-pop {
    position: absolute;
    z-index: 60;
    width: min(22rem, calc(100vw - 2rem));
    padding: var(--space-4) var(--space-4) var(--space-4);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: 12px;
    box-shadow: 0 12px 32px rgba(15, 23, 42, 0.16), 0 2px 6px rgba(15, 23, 42, 0.08);
    /* Появата е кратка и отдолу-нагоре — прозорецът „израства“ от чипа,
       вместо да мигне на екрана. */
    opacity: 0;
    transform: translateY(-6px) scale(0.98);
    transition: opacity 150ms ease, transform 150ms ease;
}
.cal-pop.is-visible { opacity: 1; transform: translateY(0) scale(1); }
.cal-pop.is-above { transform-origin: bottom center; }
.cal-pop-close {
    position: absolute;
    top: 0.4rem;
    right: 0.4rem;
    width: 1.75rem;
    height: 1.75rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 6px;
    background: none;
    color: var(--color-muted);
    font-size: 0.875rem;
    cursor: pointer;
}
.cal-pop-close:hover { background: var(--color-bg); color: var(--color-text); }
.cal-pop-kind {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    margin: 0 0 var(--space-2);
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.cal-pop-title {
    margin: 0 0 0.35rem;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.0625rem;
    line-height: 1.3;
    color: var(--color-navy);
}
.cal-pop-when { margin: 0; font-size: 0.875rem; color: var(--color-primary-dark); font-weight: 600; }
.cal-pop-desc {
    margin: var(--space-3) 0 0;
    padding-top: var(--space-3);
    border-top: 1px solid var(--color-border);
    font-size: 0.9375rem;
    line-height: 1.5;
    color: var(--color-text);
}
@media (prefers-reduced-motion: reduce) {
    .cal-pop { transition: none; transform: none; }
    .cal-pop.is-visible { transform: none; }
}

/* Легенда */
.calendar-legend {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2) var(--space-5);
    margin: var(--space-4) 0 0;
    padding: 0;
    color: var(--color-muted);
    font-size: 0.95rem;
}
.legend-dot {
    display: inline-block;
    width: 0.9rem;
    height: 0.9rem;
    border-radius: 3px;
    vertical-align: -0.08em;
    margin-right: 0.3rem;
}
.legend-dot.event-type-statutory { background: var(--color-danger); }
.legend-dot.event-type-consultation { background: var(--color-accent); }
.legend-dot.event-type-internal { background: var(--color-primary); }

/* Списък „Предстоящи срокове“ */
/* КОМПАКТНИЯТ СПИСЪК „Предстоящи срокове“.
   Мерките са премислени спрямо календара вляво: ред от ~64 px × 5 реда
   плюс заглавие се събира в горната част на екрана, до самата решетка.
   Дотук ред от ~300 px × 9 правеше колоната 2690 px при календар 748 px. */
.calendar-upcoming h2 { margin-bottom: var(--space-4); }
/* На широк екран колоната СЛЕДВА превъртането — човек скролва календара и
   пак вижда какво предстои, вместо да се връща нагоре. */
@media (min-width: 60rem) {
    .calendar-upcoming { position: sticky; top: var(--space-5); }
}
.upcoming-item {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    padding: var(--space-2) var(--space-3);
    margin-bottom: var(--space-2);
    color: inherit;
    text-decoration: none;
    cursor: pointer;
    transition: border-color var(--transition), box-shadow var(--transition);
}
a.upcoming-item:hover {
    text-decoration: none;
    border-color: var(--color-primary);
    box-shadow: 0 4px 12px rgba(15, 23, 42, 0.07);
}
a.upcoming-item:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.upcoming-item.is-open { border-color: var(--color-primary); }
/* Шестият и нататък се показват само след „още N“. Пазят се в документа —
   търсенето в страницата и екранният четец ги намират. */
.js-calendar .upcoming-item.is-extra { display: none; }
.js-calendar .calendar-upcoming.is-expanded .upcoming-item.is-extra { display: flex; }
.upcoming-date {
    flex: 0 0 auto;
    width: 2.75rem;
    text-align: center;
    background: var(--color-accent-bg);
    border-radius: var(--radius-sm);
    padding: 0.2rem 0;
}
.upcoming-day { display: block; font-size: 1.0625rem; font-weight: 800; color: var(--color-navy); line-height: 1.15; font-variant-numeric: tabular-nums; }
.upcoming-month { display: block; font-size: 0.625rem; font-weight: 700; color: var(--color-muted); text-transform: uppercase; letter-spacing: 0.06em; }
.upcoming-body { min-width: 0; display: block; }
/* Заглавието е на ЕДИН ред с многоточие. Пълното стои в `title` на
   прозореца, който се отваря при щракане. */
.upcoming-title {
    display: block;
    margin: 0;
    font-weight: 700;
    font-size: 0.9375rem;
    line-height: 1.3;
    color: var(--color-navy);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.upcoming-meta {
    margin: 0.1rem 0 0;
    display: flex;
    gap: 0.4rem;
    align-items: center;
    color: var(--color-muted);
    font-size: 0.8125rem;
    white-space: nowrap;
    overflow: hidden;
}
.upcoming-meta .legend-dot { flex: none; width: 0.55rem; height: 0.55rem; }
.upcoming-empty { color: var(--color-muted); }
/* „още 4“ — тих бутон, не втори призив за действие. */
.upcoming-more {
    width: 100%;
    margin-top: var(--space-2);
    padding: 0.5rem;
    border: 1px dashed var(--color-border);
    border-radius: var(--radius);
    background: none;
    color: var(--color-muted);
    font: inherit;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
}
.upcoming-more:hover { border-color: var(--color-primary); color: var(--color-primary-dark); }

/* Значка за тип събитие (текст, не само цвят) */
.event-badge {
    display: inline-block;
    padding: 0.1rem 0.55rem;
    border-radius: var(--radius-pill);
    font-size: 0.8rem;
    font-weight: 700;
}
.event-badge.event-type-statutory { background: #fef2f2; color: var(--color-danger); }
.event-badge.event-type-consultation { background: #f5f3ff; color: var(--color-accent-dark); }
.event-badge.event-type-internal { background: var(--color-accent-bg); color: var(--color-primary-dark); }

.calendar-back { margin-top: var(--space-5); display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; }

/* --- Консултации: списък и резервация --- */
.consultations-page section { margin-top: var(--space-5); }
.consult-actions { margin: var(--space-4) 0; }
.consult-item {
    display: flex;
    gap: var(--space-3);
    align-items: flex-start;
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-3) var(--space-4);
    margin-bottom: var(--space-3);
}
.consult-item.is-past { opacity: 0.75; }
.consult-body { flex: 1; }
.consult-title { margin: 0 0 0.25rem; font-weight: 700; }
.consult-topic { margin: 0 0 0.5rem; color: var(--color-muted); }
.consult-cancel-form { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1rem; }
.consult-hint { margin: 0; color: var(--color-muted); font-size: 0.85rem; }
.event-badge.badge-cancelled { background: #fef2f2; color: var(--color-danger); margin-left: 0.5rem; }

/* ==================== РЕЗЕРВАЦИЯ НА КОНСУЛТАЦИЯ ====================
   Три стъпки едновременно на екрана + обобщение отстрани. Подредбата и
   причината за нея са описани в templates/calendar_app/consultation_book.html. */
.booking-page { max-width: 64rem; }
.booking-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--space-5);
    align-items: start;
}
@media (min-width: 60rem) {
    .booking-layout { grid-template-columns: minmax(0, 1fr) 16rem; }
}

/* --- Стъпката като карта с номер --- */
.booking-step {
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-5);
    margin-bottom: var(--space-4);
}
.booking-step.is-waiting { background: transparent; border-style: dashed; }
.booking-step-head {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    margin-bottom: var(--space-4);
}
.booking-step-num {
    flex: none;
    width: 1.75rem;
    height: 1.75rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--color-accent-bg);
    color: var(--color-primary-dark);
    font-size: 0.8125rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
.booking-step.is-done .booking-step-num { background: var(--color-primary); color: #fff; }
.booking-step-head h2 {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.125rem;
    line-height: 1.25;
    color: var(--color-navy);
}
.booking-hint, .booking-empty { margin: 0; color: var(--color-muted); }

/* --- Лентата с дните --- */
.dayline { display: flex; align-items: center; gap: var(--space-2); }
.dayline-arrow {
    flex: none;
    width: 2rem;
    height: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--color-border);
    border-radius: 50%;
    background: var(--color-card);
    color: var(--color-primary-dark);
    font-size: 1.125rem;
    line-height: 1;
    cursor: pointer;
}
.dayline-arrow:hover { border-color: var(--color-primary); background: var(--color-bg); }
.dayline-track {
    display: flex;
    gap: var(--space-2);
    list-style: none;
    margin: 0;
    padding: 2px;              /* да не се реже фокусният пръстен */
    overflow-x: auto;
    scroll-snap-type: x proximity;
    /* Лентата за превъртане се крие: стрелките и плъзгането я заместват,
       а тънката сива черта под чиповете изглежда като дефект. */
    scrollbar-width: none;
}
.dayline-track::-webkit-scrollbar { display: none; }
.dayline-track > li { flex: none; scroll-snap-align: start; }

.daychip {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.1rem;
    min-width: 3.5rem;
    padding: var(--space-2) var(--space-3);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-card);
    color: inherit;
    text-decoration: none;
    line-height: 1.15;
    transition: border-color var(--transition), transform var(--transition), box-shadow var(--transition);
}
.daychip:hover {
    border-color: var(--color-primary);
    text-decoration: none;
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
}
.daychip:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.daychip-dow, .daychip-mon {
    font-size: 0.625rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.daychip-num {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.375rem;
    color: var(--color-navy);
    font-variant-numeric: tabular-nums;
}
.daychip.is-selected {
    background: var(--color-primary);
    border-color: var(--color-primary);
    box-shadow: 0 6px 18px rgba(79, 70, 229, 0.28);
}
.daychip.is-selected .daychip-num { color: #fff; }
.daychip.is-selected .daychip-dow,
.daychip.is-selected .daychip-mon { color: rgba(255, 255, 255, 0.8); }

/* Падащият списък е резервният път. Когато лентата работи, той се свива
   до тих ред отдолу — но НЕ се маха: с клавиатура и екранен четец е
   по-бърз от 30 чипа един по един. */
.booking-date-fallback {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    margin: var(--space-4) 0 0;
    font-size: 0.875rem;
    color: var(--color-muted);
}
/* Падащият списък идва от браузъра без стил и на фона на чиповете
   изглеждаше като чуждо тяло. Изравняваме го с полетата на сайта. */
.booking-date-fallback select {
    max-width: 15rem;
    margin: 0;
    padding: 0.4rem 0.6rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-card);
    color: var(--color-text);
    font: inherit;
    font-size: 0.875rem;
}
.booking-date-fallback .btn { padding: 0.4rem 0.9rem; font-size: 0.875rem; }

/* --- Свободните часове: едри плочки без видимо радио копче --- */
.slot-field { border: 0; padding: 0; margin: 0; }
.slot-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr)); gap: var(--space-2); }
.slot-option {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: var(--tap-target);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-card);
    padding: 0.55rem 0.5rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--color-navy);
    cursor: pointer;
    transition: border-color var(--transition), background var(--transition), transform var(--transition), box-shadow var(--transition);
}
/* Копчето се скрива ВИЗУАЛНО, но остава в дървото за достъпност: цялата
   плочка е целта за докосване, а точка вътре в бутон, който сам по себе
   си е бутон, е двойно казване. */
.slot-option input {
    position: absolute;
    opacity: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    inset: 0;
    cursor: pointer;
}
.slot-option:hover {
    border-color: var(--color-primary);
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
}
.slot-option:has(input:checked) {
    border-color: var(--color-primary);
    background: var(--color-primary);
    color: #fff;
    box-shadow: 0 6px 18px rgba(79, 70, 229, 0.3);
}
.slot-option:has(input:focus-visible) { outline: var(--focus-ring); outline-offset: 2px; }

/* --- Обобщението отстрани --- */
.booking-summary {
    position: sticky;
    top: var(--space-5);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-5);
    background: linear-gradient(160deg, var(--color-accent-bg), var(--color-card));
    text-align: center;
}
.booking-summary-eyebrow {
    margin: 0 0 var(--space-3);
    font-size: 0.625rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.booking-summary-date {
    margin: 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.0625rem;
    color: var(--color-navy);
}
/* Празното състояние е ДРЕБНО и тихо. На 2rem надписът „изберете час“ се
   пренасяше на два реда и се четеше като заглавие на картата — тоест
   подканата изглеждаше като вече попълнена стойност. Едро става чак
   когато има какво да се покаже. */
.booking-summary-time {
    margin: 0.2rem 0 0;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 0.9375rem;
    line-height: 1.3;
    color: var(--color-muted);
    font-variant-numeric: tabular-nums;
    transition: color var(--transition), font-size var(--transition);
}
.booking-summary.is-filled .booking-summary-time {
    font-size: 2rem;
    line-height: 1.1;
    color: var(--color-primary-dark);
}
.booking-summary-len { margin: var(--space-2) 0 0; font-size: 0.8125rem; color: var(--color-muted); }

/* --- Бутонът --- */
.booking-submit { width: 100%; }
.booking-submit:disabled {
    opacity: 0.45;
    cursor: not-allowed;
    box-shadow: none;
    transform: none;
}
/* Еднократно „събуждане“, когато бутонът стане натискаем. */
@keyframes booking-wake {
    0%   { transform: scale(1); }
    35%  { transform: scale(1.03); }
    100% { transform: scale(1); }
}
.booking-submit.is-woken { animation: booking-wake 600ms ease; }
.booking-submit.is-sending { opacity: 0.6; }
@media (prefers-reduced-motion: reduce) {
    .daychip, .slot-option, .booking-summary-time { transition: none; }
    .daychip:hover, .slot-option:hover { transform: none; }
    .booking-submit.is-woken { animation: none; }
}

/* Модулите на началото на портала (засега само календарът) */
/* --- Модули на портала ---------------------------------------------
   Решетката е СИМЕТРИЧНА: еднакви колони, еднаква височина на
   картичките и еднакви отстъпи от двете страни (центрирана).
   Броят колони е фиксиран по роля, а не auto-fit, защото само така
   последният ред е винаги пълен: клиентът вижда 4 картички (2×2),
   кантората — 6 (3×2). Балансът се пази с „очаквайте скоро“
   картичките, които показват и пътната карта.
   Височината е премерена така, че всички картички да се виждат БЕЗ
   СКРОЛВАНЕ на типичен десктоп (~1440×900).                        */
.portal-modules {
    display: grid;
    grid-template-columns: 1fr;   /* телефон: една колона */
    gap: var(--space-4);
    margin: var(--space-5) auto 0;
    max-width: 34rem;
    text-align: left;
}
/* Таблет и нагоре: две колони */
@media (min-width: 45rem) {
    .portal-modules { grid-template-columns: repeat(2, 1fr); max-width: 46rem; }
}
/* Десктоп: кантората минава на три колони (6 картички = 3×2);
   клиентът остава на две (4 картички = 2×2) — и двете са пълни редове */
@media (min-width: 64rem) {
    .portal-modules-3 { grid-template-columns: repeat(3, 1fr); max-width: 66rem; }
}
/* ПЛОСКО, като публичния сайт. Картичките бяха единственото място в
   портала, което още носеше стария език — кутия със сянка, която се вдига
   при посочване. Публичната част мина на плоски ленти при визия „1c“, а
   човекът, който влиза в портала, идва точно оттам: две различни визии в
   един продукт изглеждат като два продукта. Затова сянката и вдигането
   отпадат, а отговорът при посочване е цвят на рамката — по-тих сигнал,
   който не мести съдържанието под курсора. */
.portal-module-card {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    height: 100%;                 /* еднаква височина в реда */
    min-height: var(--tap-target); /* целта за докосване е винаги ≥ 44px */
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-5);
    color: inherit;
    transition: border-color var(--transition), background var(--transition);
}
/* Ефектите и фокусът са САМО за реалните картички (те са връзки) */
a.portal-module-card:hover {
    border-color: var(--color-primary);
    background: var(--color-bg);
    text-decoration: none;
}
a.portal-module-card:hover h2 { text-decoration: underline; }
a.portal-module-card:focus-visible { outline: var(--focus-ring); outline-offset: 3px; }
/* Заглавието с --font-display — същият глас като .band-head на публичните
   страници, само с една степен по-малък размер (тук са осем наведнъж) */
.portal-module-card h2 {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: var(--text-md);
    letter-spacing: -0.01em;
    margin-bottom: 0;
    color: var(--color-navy);
}
.portal-module-card p { margin: 0; color: var(--color-muted); font-size: 0.95rem; line-height: 1.5; }
/* „Очаквайте скоро“ — приглушена, БЕЗ връзка, не се фокусира и не се
   променя при посочване; за екранни четци има и скрито пояснение */
.portal-module-soon {
    background: transparent;
    border-style: dashed;
    border-color: var(--color-border);
    cursor: default;
}
.portal-module-soon h2 { color: var(--color-muted); }
.portal-module-soon:hover { border-color: var(--color-border); background: transparent; }
.portal-module-card .portal-module-badge {
    margin-top: auto;             /* значката ляга на дъното на картичката */
    align-self: flex-start;
    font-size: var(--text-sm);
    font-weight: 700;
    /* контраст ≥ 7:1 — кафяво върху бледожълто (токени за „внимание“) */
    color: var(--color-warning);
    background: var(--color-warning-bg);
    border: 1px solid var(--color-warning);
    border-radius: var(--radius-pill);
    padding: var(--space-1) var(--space-3);
}

/* Скрит текст само за екранни четци (типът на събитието в клетките) */
.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

/* Мобилен изглед: решетката става списък само с дните със събития */
@media (max-width: 47.5rem) {
    /* ⚠️ `minmax(0, 1fr)`, НЕ `1fr`.
       `1fr` е съкращение за `minmax(auto, 1fr)`, а `auto` тук значи
       „не по-малко от min-content“. Затова месецът стоеше 458px широк в
       колона от 343px и влачеше цялата страница настрани — независимо
       какво пише вътре. Нулата отменя точно това. */
    .calendar-layout { grid-template-columns: minmax(0, 1fr); }
    .calendar-grid { display: block; }

    /* ⚠️ ИЗМЕРЕНО на 375px (12.08.2026): заглавната лента на месеца
       преливаше със 115px и влачеше ЦЯЛАТА страница настрани.

       Причината е класическа и не се вижда от кода: `.calendar-head` е flex
       с три елемента — „‹ Предишен“ (132px), „Август 2026“ (124px) и
       „Следващ ›“ (120px). Flex елемент има `min-width: auto` и НЕ се свива
       под съдържанието си, а трите плюс отстъпите искат 400px при налични
       343. `justify-content: space-between` не помага: няма какво да
       разпределя, когато сборът вече е по-голям от мястото.

       Лек: заглавието слиза на СВОЙ ред отгоре, а двата бутона делят реда
       под него. Така и целите за докосване стават по-широки. */
    .calendar-head { flex-wrap: wrap; }
    .calendar-title {
        order: -1;
        flex: 1 1 100%;
        text-align: center;
        min-width: 0;
    }
    .calendar-nav { flex: 0 1 auto; min-width: 0; }
    .calendar-weekday { display: none; }
    /* На телефон решетката става списък само от дните със срокове. Тук
       фиксираната височина и отрязването ОТПАДАТ: няма съседна клетка, с
       която да се изравняваме, а списъкът трябва да се чете цял. */
    .calendar-day { display: none; height: auto; min-height: 0; overflow: visible; }
    .calendar-day.has-events {
        display: block;
        margin-bottom: var(--space-2);
        height: auto;
        overflow: visible;
        background: var(--color-card);
    }
    .calendar-day .calendar-event { white-space: normal; font-size: 0.875rem; }
    .calendar-day .calendar-event-name { overflow: visible; text-overflow: clip; }
    /* Списъкът показва ВСИЧКО — затова и броячът „+N“ отпада. */
    .calendar-day-events > .calendar-event:nth-child(n + 3) { display: flex; }
    .calendar-more { display: none; }
    .calendar-day-num { display: none; }
    .calendar-day.has-events .calendar-day-full {
        display: block;
        font-weight: 700;
        color: var(--color-navy);
    }
    .calendar-title { font-size: var(--text-md); }
}

/* --- Обмен на документи в портала (documents/) --- */
/* Общо съобщение за грешка над форма (сестра на .form-success) */
.form-error {
    background: #fef2f2;
    border: 1px solid var(--color-danger);
    border-radius: var(--radius);
    color: var(--color-danger);
    padding: var(--space-3) var(--space-4);
    margin: 0 0 1.25rem;
}
/* Пояснение под поле — по-тихо от етикета, но с достатъчен контраст */
.field-help { margin: 0.3rem 0 0; color: var(--color-muted); font-size: 0.9rem; }

/* Без сянка — по същата причина като .portal-module-card по-горе: една
   визия в целия продукт. Рамката е достатъчна, за да отдели кутията от
   фона; сянката само добавяше дълбочина, каквато публичният сайт няма. */
.doc-card {
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-5);
    margin-bottom: var(--space-5);
}
.doc-actions { margin: 0 0 var(--space-4); }

/* Филтрите са в един ред на широк екран, един под друг на телефон */
.doc-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--space-3);
    margin-bottom: var(--space-5);
}
.doc-filters .form-field { margin-bottom: 0; min-width: 12rem; flex: 1 1 12rem; }

.doc-list { list-style: none; padding: 0; margin: 0; }
.doc-item {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-3);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-3) var(--space-4);
    margin-bottom: var(--space-3);
}
.doc-body { flex: 1 1 20rem; min-width: 0; }
.doc-title { margin: 0 0 0.25rem; font-weight: 700; }
/* Дългите имена на файлове не бива да разпъват реда на телефон */
.doc-title a { overflow-wrap: anywhere; }
.doc-meta { margin: 0; color: var(--color-muted); font-size: 0.9rem; }
.doc-notes { margin: 0.4rem 0 0; font-size: 0.95rem; }
.doc-item-actions { margin: 0; }

/* Статусите са с цвят И текст — смисълът не разчита само на цвета */
.event-badge.doc-status-new { background: var(--color-accent-bg); color: var(--color-primary-dark); }
.event-badge.doc-status-in_review { background: #fffbeb; color: #92400e; }
.event-badge.doc-status-processed { background: #f5f3ff; color: var(--color-accent-dark); }
.event-badge.doc-status-rejected { background: #fef2f2; color: var(--color-danger); }

.doc-versions { list-style: none; padding: 0; margin: 0 0 var(--space-5); }
.doc-version {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-3);
    border-bottom: 1px solid var(--color-border);
    padding: var(--space-2) 0;
}
.doc-version-num { font-weight: 700; }
.doc-delete-form { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }
.doc-privacy-note {
    margin: var(--space-5) 0 0;
    color: var(--color-muted);
    font-size: 0.9rem;
}
/* Полето за файл наследява .form-field input (width:100%) — това е добре,
   но му трябва цел за докосване ≥ 44px и видим фокус като на другите полета */
.form-field input[type="file"] { padding: 0.6rem; min-height: var(--tap-target); }

@media (max-width: 37.5rem) {
    .doc-item { flex-direction: column; align-items: flex-start; }
    .doc-item-actions { width: 100%; }
    .doc-item-actions .btn { width: 100%; }
}

/* „Моята работа“ — четирите групи на началния екран на кантората */
.work-queue { display: grid; gap: var(--space-4); margin-bottom: var(--space-5); }
.work-group h2 {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    margin: 0 0 var(--space-3);
}

/* ==========================================================================
   Извличане на данни от фактури (Фаза C1) — екран за преглед и потвърждение.
   Вижда се само от кантората. Увереността е предадена И с текст, не само с
   цвят: смисълът не бива да зависи от цветовото възприятие.
   ========================================================================== */
.extract-page { max-width: 60rem; }

/* Видимото предупреждение за счетоводна валидация — не бива да се пропуска */
.extract-disclaimer {
    margin: 0 0 var(--space-5);
    padding: var(--space-3) var(--space-4);
    border-left: 4px solid var(--color-danger);
    background: var(--color-danger-bg);
    border-radius: var(--radius-sm);
    font-size: 0.95rem;
}

/* Задача 4: неуспешно разчитане — ясно съобщение + действие, причината
   остава дребен ред отдолу (не главното съобщение) */
.extract-failed-banner {
    margin: var(--space-4) 0 0;
    padding: var(--space-4);
    border-left: 4px solid var(--color-warning);
    background: var(--color-warning-bg);
    border-radius: var(--radius-sm);
}
.extract-failed-title { margin: 0; font-weight: 700; }
.extract-failed-banner .extract-actions { margin-top: var(--space-3); }
.extract-failed-banner .field-help { margin-top: var(--space-3); }

.extract-summary { margin-bottom: var(--space-5); }
.extract-form { margin-bottom: var(--space-5); }
.extract-field { margin-bottom: var(--space-4); }

.extract-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    margin: 0.3rem 0 0;
    font-size: 0.85rem;
}
.extract-badge {
    display: inline-block;
    padding: 0.15rem 0.55rem;
    border-radius: var(--radius-pill);
    font-weight: 600;
}
.extract-high { background: var(--color-success-bg); color: var(--color-success); }
.extract-medium { background: var(--color-warning-bg); color: var(--color-warning); }
.extract-low { background: var(--color-danger-bg); color: var(--color-danger); }
.extract-none { background: var(--color-bg); color: var(--color-muted); }
.extract-suggested { color: var(--color-muted); }

/* Статусите на извличането — цвят И текст, като при документите */
.event-badge.extract-status-pending { background: var(--color-warning-bg); color: var(--color-warning); }
.event-badge.extract-status-confirmed { background: var(--color-success-bg); color: var(--color-success); }
.event-badge.extract-status-rejected { background: var(--color-danger-bg); color: var(--color-danger); }

.extract-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    margin-top: var(--space-4);
}
.extract-reject-form {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-3);
    margin-bottom: var(--space-5);
}

.extract-raw { margin-top: var(--space-3); }
.extract-raw summary { cursor: pointer; min-height: var(--tap-target); padding: 0.6rem 0; }
.extract-raw-text {
    max-height: 24rem;
    overflow: auto;
    padding: var(--space-3);
    background: var(--color-bg);
    border-radius: var(--radius-sm);
    font-size: 0.85rem;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}

@media (max-width: 37.5rem) {
    .extract-actions .btn { width: 100%; }
}

/* ---------------------------------------------------------------------------
   Предложение за осчетоводяване (Фаза C2, accounting/) — само за кантората.
   Стъпва върху стиловете на екрана за извличане; тук са само разликите:
   таблицата с редовете и панелът с баланса.
   --------------------------------------------------------------------------- */
.journal-page .doc-card { margin-bottom: var(--space-5); }

.journal-balance { border-left: 4px solid var(--color-accent); }
.journal-totals {
    margin: 0 0 var(--space-3);
    font-size: 1.05rem;
    /* Сумите се четат по-лесно с равноширок шрифт */
    font-variant-numeric: tabular-nums;
}

.journal-table {
    width: 100%;
    border-collapse: collapse;
    margin-top: var(--space-3);
    font-size: 0.95rem;
}
.journal-table th,
.journal-table td {
    padding: 0.5rem 0.6rem;
    text-align: left;
    border-bottom: 1px solid var(--color-border);
}
.journal-table td:nth-child(3) {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.journal-lines {
    display: grid;
    gap: var(--space-4);
    margin-bottom: var(--space-4);
}
.journal-line {
    padding: var(--space-3) var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
}
.journal-line legend {
    padding: 0 0.4rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--color-text-muted);
}
.journal-line .form-field { margin-bottom: var(--space-3); }

@media (min-width: 45rem) {
    /* На широк екран редът се чете като ред от статия, а не като форма */
    .journal-line {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
        gap: var(--space-3);
        align-items: end;
    }
    .journal-line legend { grid-column: 1 / -1; }
}

@media (max-width: 37.5rem) {
    .journal-table { display: block; overflow-x: auto; }
}

/* ---------------------------------------------------------------------------
   ДДС дневници и справки към НАП (Фаза D, accounting/vat.py) — само кантора.
   ⚠️ Съдържанието е ЧЕРНОВА: предупреждението ползва вече съществуващия
   стил .extract-disclaimer, за да изглежда еднакво с останалите счетоводни
   екрани. Тук са само разликите: широките таблици на дневниците и списъкът
   с резултата от предварителния контрол.
   --------------------------------------------------------------------------- */
.vat-page .doc-card { margin-bottom: var(--space-5); }
.vat-page h2 { margin-top: var(--space-5); }

.vat-period-form button { margin-top: var(--space-2); }

/* Дневниците имат по 16–20 колони по образец: таблицата се плъзга
   ХОРИЗОНТАЛНО В СОБСТВЕНИЯ СИ КОНТЕЙНЕР, а страницата остава без
   хоризонтално преливане и на телефон. */
.vat-table-scroll {
    overflow-x: auto;
    margin-top: var(--space-3);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
}
.vat-table {
    margin-top: 0;
    min-width: 60rem;
    font-size: 0.85rem;
}
.vat-table th,
.vat-table td { white-space: nowrap; }
/* Общият стил подравнява третата колона надясно (сумата в статията);
   в дневника третата колона е име на фирма — връщаме я наляво. */
.vat-table td:nth-child(3) { text-align: left; }
.vat-table td { font-variant-numeric: tabular-nums; }
.vat-col-code {
    display: block;
    font-size: 0.75rem;
    font-weight: 700;
    color: var(--color-text-muted);
}
.vat-declaration td:nth-child(3) {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.vat-problem-heading {
    margin: var(--space-4) 0 var(--space-2);
    font-size: 1rem;
}
.vat-problems {
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: var(--space-2);
}
.vat-problem {
    padding: 0.6rem 0.8rem;
    border-radius: var(--radius-sm);
    /* Тежестта се носи и от ТЕКСТА (значката „Грешка“/„Предупреждение“),
       не само от цвета — достъпност. */
    border-left: 4px solid var(--color-border);
    background: var(--color-surface-muted, transparent);
}
.vat-problem-error { border-left-color: #b91c1c; }
.vat-problem-warning { border-left-color: #b45309; }
.vat-problem-where { color: var(--color-text-muted); }

/* ---------------------------------------------------------------------------
   Банкови извлечения и засичане на плащания (Фаза E, banking/) — само кантора.
   ⚠️ Съдържанието е ЧЕРНОВА: предупреждението ползва вече съществуващия стил
   .extract-disclaimer, за да изглежда еднакво с останалите счетоводни екрани.
   Тук са само разликите: движенията са СПИСЪК ОТ КАРТИЧКИ (а не таблица),
   защото всяко движение носи обяснение и собствени бутони за решение.
   --------------------------------------------------------------------------- */
.bank-page h2 { margin-top: var(--space-5); }

.bank-rows {
    margin: var(--space-3) 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: var(--space-4);
}
.bank-row { margin: 0; }
.bank-row-main { margin: 0 0 var(--space-1); }
.bank-row-main strong { font-variant-numeric: tabular-nums; }
.bank-row-status {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    margin: var(--space-3) 0 0;
}

/* Бутоните и ръчният избор: в един ред на широк екран, един под друг на
   телефон. Всяко действие е отделна POST форма с CSRF — без JavaScript. */
.bank-row-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--space-3);
    margin-top: var(--space-4);
    padding-top: var(--space-3);
    border-top: 1px solid var(--color-border);
}
.bank-row-actions form { margin: 0; }
.bank-manual-form {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
}
.bank-manual-form label { font-size: var(--text-sm); }
/* Падащото меню със статиите може да е дълго — ограничаваме ширината, за
   да не разпъне картичката и да не преля страницата на телефон. */
.bank-manual-form select { max-width: min(100%, 26rem); }

@media (max-width: 37.5rem) {
    .bank-row-actions { flex-direction: column; align-items: stretch; }
    .bank-row-actions .btn { width: 100%; }
}

/* --- Двуфакторна защита (2FA) ---------------------------------------- */
/* Страниците за настройка и за резервните кодове носят повече съдържание
   от формата за вход, затова картичката им е по-широка. */
.auth-card-wide { max-width: 34rem; }

.setup-steps {
    margin: 0 0 var(--space-4);
    padding-left: 1.25rem;
    text-align: left;
}
.setup-steps li { margin-bottom: var(--space-2); }

/* QR кодът е вграден SVG — центрира се и не надхвърля картичката */
.totp-qr-wrap { display: flex; justify-content: center; margin: var(--space-4) 0; }
.totp-qr { max-width: min(100%, 15rem); height: auto; border-radius: var(--radius-sm); }

.totp-secret { text-align: center; word-break: break-all; }
.totp-secret code {
    display: inline-block;
    margin-top: 0.25rem;
    padding: 0.2rem 0.5rem;
    background: var(--color-surface-alt, rgba(0, 0, 0, 0.05));
    border-radius: var(--radius-sm);
    letter-spacing: 0.08em;
}

/* Резервните кодове се четат и преписват — едроразмерни и в две колони */
.backup-codes {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-2);
    margin: var(--space-4) 0;
    padding: 0;
    list-style: none;
}
.backup-codes code {
    display: block;
    padding: 0.4rem 0.6rem;
    background: var(--color-surface-alt, rgba(0, 0, 0, 0.05));
    border-radius: var(--radius-sm);
    text-align: center;
    letter-spacing: 0.12em;
}

/* Бележката за защитата на началната страница на портала */
.portal-security-note {
    margin: var(--space-5) auto var(--space-4);
    max-width: 44rem;
    color: var(--color-muted);
    font-size: var(--text-sm);
}

@media (max-width: 30rem) {
    .backup-codes { grid-template-columns: 1fr; }
}

/* ==========================================================================
   Оборотни ведомости и табло на клиента (Фаза G, задача B) — виж
   reporting/views.py и шаблоните в templates/reporting/.
   ========================================================================== */
.reporting-page .doc-card { margin-bottom: var(--space-5); }

/* Прегледът по фирми: клетките на статуса са връзка с два малки етикета */
.reporting-overview-table td { vertical-align: top; }
.reporting-cell-link {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    align-items: flex-start;
}

/* Отметките на чеклиста преди отключване — етикетът обгръща полето, за
   да е цялата площ на реда кликаема (по-голяма цел за докосване) */
.form-field-checkbox label {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    font-weight: 400;
    cursor: pointer;
}
.form-field-checkbox input[type="checkbox"] {
    width: 1.2rem;
    height: 1.2rem;
    flex-shrink: 0;
}

/* Показателите на таблото — карти в решетка. На широк екран няколко в
   ред, на телефон (<640px) ЕДНА под друга колона (изискване на задачата). */
.indicator-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
    gap: var(--space-4);
    margin-bottom: var(--space-5);
}
.indicator-card {
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow);
    padding: var(--space-4) var(--space-5);
}
.indicator-label { margin: 0 0 0.3rem; color: var(--color-muted); font-size: 0.9rem; }
.indicator-value { margin: 0; font-size: var(--text-lg); font-weight: 700; color: var(--color-navy); }
.indicator-source { margin: 0.4rem 0 0; color: var(--color-muted); font-size: 0.8rem; }

@media (max-width: 39.99rem) {
    .indicator-grid { grid-template-columns: 1fr; }
}

/* ==========================================================================
   Чат уиджет — РАЗДЕЛЯНЕ НА ДВАТА ИЗГЛЕДА
   --------------------------------------------------------------------------
   Проблемът: разговорът с бота и формата за съобщение стояха един под друг
   в един панел и се застъпваха — на телефон панелът ставаше неизползваем.
   Решението: два взаимно изключващи се изгледа, превключвани с два скрити
   радио бутона. Работи БЕЗ JavaScript (важно — уиджетът е <details>).
   Правилата са НАКРАЯ на файла нарочно, за да имат последна дума.
   ========================================================================== */

.chat-tab-input { position: absolute; opacity: 0; pointer-events: none; }

/* Разделите */
.chat-tabs {
  display: flex;
  background: #fff;
  border-bottom: 1px solid var(--line, #dde3ec);
  flex: 0 0 auto;
}
.chat-tab {
  flex: 1;
  text-align: center;
  padding: 11px 8px;
  font-size: 14px;
  font-weight: 600;
  color: #5b6b82;
  cursor: pointer;
  border-bottom: 2px solid transparent;
  transition: color .15s, border-color .15s;
  user-select: none;
}
.chat-tab:hover { color: #16305e; }
#chat-tab-bot:checked  ~ .chat-tabs .chat-tab[for="chat-tab-bot"],
#chat-tab-form:checked ~ .chat-tabs .chat-tab[for="chat-tab-form"] {
  color: #5b21b6;
  border-bottom-color: #5b21b6;
}

/* Тялото е рамка с фиксирана височина; всеки изглед скролва сам */
.chat-panel { display: flex; flex-direction: column; }
.chat-body {
  flex: 1 1 auto;
  min-height: 0;          /* без това flex детето не се свива и излиза извън панела */
  overflow: hidden;
  display: flex;
  flex-direction: column;
  padding: 0;
}

/* Само избраният изглед се вижда — никакво застъпване */
.chat-view { display: none; flex-direction: column; min-height: 0; }
#chat-tab-bot:checked  ~ .chat-body .chat-view-bot,
#chat-tab-form:checked ~ .chat-body .chat-view-form { display: flex; }

/* Разговорът: нишката скролва, полето за писане стои долу */
.chat-view-bot { flex: 1 1 auto; overflow: hidden; }
.chat-view-bot .chat-bot { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; }
.chat-view-bot .chat-thread { flex: 1 1 auto; overflow-y: auto; min-height: 0; padding: 14px; }
.chat-view-bot .chat-bot-ask-form { flex: 0 0 auto; }

/* Формата: скролва цялата */
.chat-view-form { flex: 1 1 auto; overflow-y: auto; padding: 16px; }
.chat-view-form .chat-form { display: block; }

/* Изход от чата към формата */
.chat-handoff { margin: 0; padding: 0 14px 12px; text-align: center; flex: 0 0 auto; }
.chat-handoff-link {
  font-size: 12.5px; color: #5b21b6; cursor: pointer;
  text-decoration: underline; text-underline-offset: 3px;
}
.chat-handoff-link:hover { color: #16305e; }

/* JS продължава да управлява какво има ВЪТРЕ в изгледа — да има последна дума */
.chat-hidden { display: none !important; }

/* --------------------------------------------------------------------------
   Чат уиджет — КОМПАКТНА форма за съобщение
   Полетата бяха с размерите на голяма страница и не се събираха в панела:
   бутонът „Изпрати“ и бележката за GDPR оставаха под видимата част.
   Тук се стягат само ВЪТРЕ в уиджета — формите другаде не се пипат.
   -------------------------------------------------------------------------- */

.chat-view-form .form-field { margin-bottom: 10px; }
.chat-view-form .form-field label {
  display: block;
  font-size: 12px;
  font-weight: 600;
  color: #5b6b82;
  margin-bottom: 4px;
}
.chat-view-form .form-field input,
.chat-view-form .form-field textarea {
  width: 100%;
  padding: 8px 11px;
  font-size: 14px;
  line-height: 1.35;
  border: 1px solid var(--line, #dde3ec);
  border-radius: 8px;
  background: #fff;
}
.chat-view-form .form-field textarea {
  height: 68px;          /* вместо rows="3" — предвидима височина */
  min-height: 68px;
  resize: vertical;
}
.chat-view-form .form-field input:focus,
.chat-view-form .form-field textarea:focus {
  outline: 2px solid #5b21b6;
  outline-offset: 1px;
  border-color: #5b21b6;
}
.chat-view-form .chat-submit {
  width: 100%;
  padding: 11px 16px;
  font-size: 15px;
  margin-top: 2px;
}
.chat-view-form .chat-gdpr {
  font-size: 11px;
  line-height: 1.4;
  margin: 10px 0 0;
  color: #7b8794;
}
.chat-view-form .field-error { font-size: 12px; margin: 4px 0 0; }
.chat-view-form .chat-reply { font-size: 14px; }
.chat-view-form .chat-reply p { margin: 0 0 8px; }
.chat-view-form .chat-reply-links { margin: 6px 0 0; padding-left: 18px; font-size: 13px; }

/* Мобилно: панелът е на цял екран, формата ползва цялата височина */
@media (max-width: 39.99rem) {
  .chat-view-form { padding: 14px; }
  .chat-view-form .form-field textarea { height: 84px; min-height: 84px; }
}

/* --------------------------------------------------------------------------
   МЕСЕЧНИ ДОСИЕТА И ОПАШКА ЗА ОБРАБОТКА (пилот, август 2026)
   Значките следват вече наличния шаблон .event-badge: цвят + текст, никога
   само цвят — състоянието трябва да се чете и без възприемане на цвета.
   -------------------------------------------------------------------------- */
.event-badge.extract-status-not_applicable { background: var(--color-bg); color: var(--color-muted); }

.event-badge.dossier-status-open { background: var(--color-accent-bg); color: var(--color-primary-dark); }
.event-badge.dossier-status-submitted { background: #eff6ff; color: #1d4ed8; }
.event-badge.dossier-status-processing { background: var(--color-warning-bg); color: var(--color-warning); }
.event-badge.dossier-status-review { background: #fffbeb; color: #92400e; }
.event-badge.dossier-status-ready { background: #f5f3ff; color: var(--color-accent-dark); }
.event-badge.dossier-status-exported { background: #f5f3ff; color: var(--color-accent-dark); }
.event-badge.dossier-status-posted { background: var(--color-success-bg); color: var(--color-success); }
.event-badge.dossier-status-published { background: var(--color-success-bg); color: var(--color-success); }

.event-badge.job-status-pending { background: var(--color-bg); color: var(--color-muted); }
.event-badge.job-status-running { background: var(--color-warning-bg); color: var(--color-warning); }
.event-badge.job-status-done { background: var(--color-success-bg); color: var(--color-success); }
.event-badge.job-status-failed { background: #fffbeb; color: #92400e; }
.event-badge.job-status-dead { background: var(--color-danger-bg); color: var(--color-danger); }

/* Прогресът на разчитането в списъка с документи — дискретен ред под името */
.doc-progress { font-size: 0.85rem; color: var(--color-muted); }
.doc-progress-waiting_office { color: var(--color-danger); }

/* Месец + година един до друг на формата за качване */
.doc-period-fields { display: flex; gap: 8px; flex-wrap: wrap; }
.doc-period-fields select { flex: 1 1 auto; min-width: 120px; }

/* Екранът за проверка: режим на четене (по подразбиране) и придвижване */
.extract-progress { margin: 0 0 12px; font-size: 0.9rem; color: var(--color-muted); }
.extract-values { margin: 0; }
.extract-value-row {
  display: flex;
  gap: 12px;
  padding: 8px 0;
  border-bottom: 1px solid var(--color-border);
}
.extract-value-row:last-child { border-bottom: 0; }
.extract-value-row dt { flex: 0 0 40%; color: var(--color-muted); }
.extract-value-row dd { flex: 1 1 auto; margin: 0; font-weight: 600; }
.extract-next { margin: 16px 0; }

/* Под 640px етикетът и стойността се подреждат един под друг */
@media (max-width: 39.99rem) {
  .extract-value-row { flex-direction: column; gap: 2px; }
  .extract-value-row dt { flex: 1 1 auto; }
}

/* ============================================================
   МЕСЕЧНО КАЧВАНЕ ПРИ КЛИЕНТА (documents/upload_month.html)
   Екранът е нарочно едър и празен: клиентът има едно нещо за
   правене — да пусне файловете си. Никакви счетоводни термини.
   ============================================================ */

.upload-month-form { display: flex; flex-direction: column; gap: 20px; }

.upload-period { display: flex; flex-direction: column; gap: 8px; }
.upload-period > label { font-weight: 600; color: var(--color-navy); }

/* Голямата зона за пускане — тя е главното нещо на екрана */
.upload-drop {
  border: 2px dashed var(--color-primary);
  border-radius: 14px;
  background: var(--color-accent-bg);
  padding: 40px 24px;
  text-align: center;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.upload-drop.is-over {
  background: #e0e7ff;
  border-color: var(--color-primary-dark);
}
.upload-drop-title {
  margin: 0 0 4px;
  font-size: 1.35rem;
  font-weight: 700;
  color: var(--color-navy);
}
.upload-drop-sub { margin: 0 0 20px; color: var(--color-muted); }
.upload-drop-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  justify-content: center;
}
.upload-hint { margin: 18px 0 0; font-size: 0.85rem; color: var(--color-muted); }

/* Скритите input-и: етикетът е бутонът, който ги отваря */
.upload-input {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}
.upload-pick { cursor: pointer; }
/* Фокусът върху скрития input трябва да се вижда върху етикета */
.upload-input:focus-visible + .upload-pick,
.upload-pick:focus-visible {
  outline: 3px solid var(--color-primary);
  outline-offset: 2px;
}

/* „Снимай с телефона“ има смисъл само на устройство с камера;
   „цяла папка“ — само на настолен браузър. */
.upload-pick-camera { display: none; }
@media (max-width: 47.5rem) {
  .upload-pick-camera { display: inline-flex; }
  .upload-pick-folder { display: none; }
}

/* Списъкът с файловете и напредъкът */
.upload-progress-title { margin: 0 0 12px; font-size: 1.05rem; }
.upload-list { list-style: none; margin: 0; padding: 0; }
.upload-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px solid var(--color-border);
  font-size: 0.92rem;
}
.upload-row:last-child { border-bottom: 0; }
.upload-row-name {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.upload-row-bar {
  flex: 0 0 120px;
  height: 6px;
  background: var(--color-border);
  border-radius: 3px;
  overflow: hidden;
}
.upload-row-bar i {
  display: block;
  height: 100%;
  width: 0;
  background: var(--color-accent);
  transition: width 0.15s linear;
}
.upload-row-state {
  flex: 0 0 auto;
  min-width: 96px;
  text-align: right;
  color: var(--color-muted);
}
.upload-row.is-done .upload-row-state { color: var(--color-success); }
.upload-row.is-failed .upload-row-state { color: var(--color-danger); }
.upload-row.is-failed .upload-row-bar i { background: var(--color-danger); }

/* Краят: едно изречение, едър шрифт, и един бутон */
.upload-done { text-align: center; }
.upload-done-line {
  margin: 0 0 6px;
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--color-navy);
}
.upload-done-note { margin: 0 0 14px; color: var(--color-warning); }
.upload-done-actions { margin: 14px 0 6px; }
.btn-large { padding: 14px 28px; font-size: 1.05rem; }

/* Със скрипт резервният бутон изчезва (виж upload-month.js) */
.upload-month-js .upload-no-js { display: none; }

@media (max-width: 39.99rem) {
  .upload-drop { padding: 28px 14px; }
  .upload-drop-actions { flex-direction: column; }
  .upload-row { flex-wrap: wrap; }
  .upload-row-name { flex: 1 1 100%; }
  .upload-row-bar { flex: 1 1 auto; }
}

/* ============================================================
   ЕКРАН ЗА ПРОВЕРКА (extraction/review.html) — по ДЕМО, стъпка 3
   Отляво документът, отдясно полетата. Целта е сверяване с
   поглед встрани, а не превключване между два прозореца.
   ============================================================ */

.review-page { max-width: 1180px; }

.review-screen {
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(20, 40, 80, 0.06);
}

/* Горна и долна лента */
.review-bar,
.review-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 10px 16px;
  background: var(--color-bg);
  font-size: 0.88rem;
  color: var(--color-muted);
}
.review-bar { border-bottom: 1px solid var(--color-border); }
.review-footer { border-top: 1px solid var(--color-border); }
.review-bar b { color: var(--color-navy); }
.review-progress { font-weight: 600; color: var(--color-navy); }
.review-footer-actions { display: flex; gap: 10px; align-items: center; }

/* Ленти за важните състояния — най-горе, преди всичко останало */
.review-flag {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 12px 16px;
  font-size: 0.9rem;
  border-bottom: 1px solid var(--color-border);
}
.review-flag strong { font-size: 0.98rem; }
.review-flag-reverse {
  background: var(--color-warning-bg);
  color: var(--color-warning);
}
.review-flag-summary { background: #eef2ff; color: #3730a3; }
.review-flag-error { background: var(--color-danger-bg); color: var(--color-danger); }
.review-flag-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  margin-top: 6px;
}

/* Разделеният екран */
.review-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  min-height: 560px;
}
.review-doc {
  border-right: 1px solid var(--color-border);
  background: var(--color-bg);
  display: flex;
  flex-direction: column;
}
.review-frame {
  flex: 1 1 auto;
  width: 100%;
  min-height: 520px;
  border: 0;
  background: #fff;
}
.review-doc-missing {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: 10px;
  align-items: center;
  justify-content: center;
  color: var(--color-muted);
  padding: 30px;
  text-align: center;
}
.review-doc-meta {
  margin: 0;
  padding: 8px 14px;
  font-size: 0.8rem;
  color: var(--color-muted);
  border-top: 1px solid var(--color-border);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.review-fields { padding: 18px; overflow-y: auto; max-height: 720px; }
.review-disclaimer {
  margin: 0 0 14px;
  padding: 8px 11px;
  background: var(--color-warning-bg);
  border-radius: 6px;
  font-size: 0.82rem;
  color: var(--color-warning);
}
/* Блокът на банковото извлечение: присъдата за салдото стои НАД данните —
   първото, което счетоводителят вижда, е дали документът е прочетен докрай. */
.bank-block { margin: 0 0 16px; }
.bank-verdict {
  margin: 0 0 8px;
  padding: 10px 12px;
  border-radius: 6px;
  font-size: 0.9rem;
  font-weight: 600;
}
.bank-ok { background: var(--color-success-bg, #ecfdf5); color: var(--color-success, #047857); }
.bank-failed { background: var(--color-danger-bg); color: var(--color-danger); }

/* Защо няма полета за попълване (нефактурен тип). Празен екран без изречение
   се чете като повреда; изречението го прави решение. */
.review-type-explanation {
  margin: 0 0 14px;
  padding: 10px 12px;
  background: var(--color-bg);
  border-left: 3px solid var(--color-navy);
  border-radius: 6px;
  font-size: 0.88rem;
  color: var(--color-text);
}

/* Полетата в режим на четене */
.review-values { margin: 0; }
.review-value-row {
  display: flex;
  gap: 12px;
  padding: 7px 0;
  border-bottom: 1px solid var(--color-border);
  font-size: 0.92rem;
}
.review-value-row:last-child { border-bottom: 0; }
.review-value-row dt {
  flex: 0 0 42%;
  color: var(--color-muted);
  text-transform: uppercase;
  font-size: 0.72rem;
  letter-spacing: 0.03em;
  padding-top: 2px;
}
.review-value-row dd {
  flex: 1 1 auto;
  margin: 0;
  font-weight: 600;
  color: var(--color-navy);
}
/* Ниската увереност се вижда и без цвят — с ляв кант */
.review-value-row.review-level-low,
.review-value-row.review-level-none { border-left: 3px solid var(--color-warning); padding-left: 8px; }
.review-value-row.review-level-medium { border-left: 3px solid #d97706; padding-left: 8px; }

.review-field { margin-bottom: 12px; }
.review-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  align-items: center;
  margin-top: 16px;
}
.review-locked { margin-top: 14px; font-size: 0.88rem; color: var(--color-muted); }
.review-warning {
  margin: 10px 0 0;
  font-size: 0.85rem;
  color: var(--color-warning);
}

.review-extras {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 18px;
}
.review-reject { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

/* Под 900px документът застава НАД полетата — сверяването пак работи,
   само че с превъртане вместо с поглед встрани */
@media (max-width: 56.25rem) {
  .review-split { grid-template-columns: 1fr; min-height: 0; }
  .review-doc { border-right: 0; border-bottom: 1px solid var(--color-border); }
  .review-frame { min-height: 380px; }
  .review-fields { max-height: none; }
  .review-value-row { flex-direction: column; gap: 2px; }
  .review-value-row dt { flex: 1 1 auto; }
}

/* ============================================================
   ГРУПОВО ПОТВЪРЖДАВАНЕ (extraction/bulk_review.html)
   Общият сбор е едро отгоре; списъкът е низходящо по сума, за
   да стои необичайното число най-отгоре.
   ============================================================ */

.bulk-explain { border-left: 4px solid var(--color-primary); }
.bulk-explain h2 { margin-top: 0; font-size: 1.05rem; }
.bulk-explain p { margin: 0 0 10px; font-size: 0.92rem; }
.bulk-explain p:last-child { margin-bottom: 0; }

.bulk-total {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 16px 18px;
  margin: -4px -4px 16px;
  background: linear-gradient(135deg, var(--color-navy), var(--color-accent-dark));
  color: #fff;
  border-radius: 10px;
}
.bulk-total-label {
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  opacity: 0.8;
}
.bulk-total-value {
  font-size: 2.1rem;
  font-weight: 700;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}
.bulk-total-count { font-size: 0.85rem; opacity: 0.9; }

.bulk-table td.num,
.bulk-table th.num { text-align: right; font-variant-numeric: tabular-nums; }

.bulk-confirm-box {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: flex-start;
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--color-border);
}
.bulk-reviewed {
  display: flex;
  align-items: center;
  gap: 9px;
  font-weight: 600;
  color: var(--color-navy);
  cursor: pointer;
}
.bulk-reviewed input { width: 18px; height: 18px; }

/* Изключените — най-полезният списък на екрана */
.bulk-excluded-list { list-style: none; margin: 0; padding: 0; }
.bulk-excluded-item {
  padding: 11px 0;
  border-bottom: 1px solid var(--color-border);
}
.bulk-excluded-item:last-child { border-bottom: 0; }
.bulk-excluded-item.is-seed {
  border-left: 3px solid var(--color-accent);
  padding-left: 10px;
}
.bulk-excluded-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  font-weight: 600;
}
.bulk-excluded-amount {
  font-variant-numeric: tabular-nums;
  color: var(--color-navy);
}
.bulk-seed-hint {
  margin: 4px 0 0;
  font-size: 0.82rem;
  color: var(--color-accent-dark);
  font-weight: 600;
}
.bulk-reasons {
  margin: 6px 0 0;
  padding-left: 18px;
  font-size: 0.85rem;
  color: var(--color-warning);
}

@media (max-width: 39.99rem) {
  .bulk-total-value { font-size: 1.7rem; }
}

/* ---------- Сверка срещу обобщението на доставчика (Задача 5.2) ---------- */
.recon-alert {
  padding: 11px 14px;
  margin-bottom: 12px;
  background: var(--color-danger-bg);
  color: var(--color-danger);
  border-radius: 6px;
  font-size: 0.92rem;
}
.recon tr.recon-diff th,
.recon tr.recon-diff td { background: #fff6f6; }
.recon tr.recon-ok th { color: var(--color-success); }
.recon td.num,
.recon th.num { text-align: right; font-variant-numeric: tabular-nums; }
.doc-blocked { color: var(--color-warning); font-weight: 600; }
.dossier-close { margin: 14px 0 6px; }

/* ============================================================
   КЛИЕНТСКО ТАБЛО (reporting/client_dashboard.html) — ДЕМО, стъпка 8
   Голямо число отгоре, карти с цветна лента, разходи като ленти.
   ============================================================ */

/* --- Голямото число върху тъмносин градиент --- */
.dash-hero {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: 16px;
  padding: 24px 26px;
  margin-bottom: 20px;
  border-radius: 12px;
  background: linear-gradient(135deg, var(--color-navy), var(--color-accent-dark));
  color: #fff;
}
.dash-hero-cap {
  margin: 0 0 8px;
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  opacity: 0.8;
}
.dash-hero-big {
  margin: 0;
  font-size: 2.6rem;
  font-weight: 700;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}
.dash-hero-delta { margin: 10px 0 0; font-size: 0.9rem; opacity: 0.92; }
.dash-hero-note { margin: 8px 0 0; font-size: 0.8rem; opacity: 0.75; }
.dash-hero-stamp {
  font-size: 0.78rem;
  line-height: 1.55;
  background: rgba(255, 255, 255, 0.15);
  padding: 9px 14px;
  border-radius: 8px;
}

/* --- Карти с цветна лента отляво --- */
.kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 14px;
  margin-bottom: 22px;
}
.kpi-card {
  position: relative;
  overflow: hidden;
  padding: 16px 16px 16px 20px;
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: 10px;
}
.kpi-card::after {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
}
.kpi-tone-a::after { background: var(--color-accent); }
.kpi-tone-b::after { background: #1d4ed8; }
.kpi-tone-c::after { background: #b45309; }
.kpi-tone-d::after { background: #7c3aed; }
.kpi-label { margin: 0 0 8px; font-size: 0.8rem; color: var(--color-muted); }
.kpi-value {
  margin: 0;
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--color-navy);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}
/* Малкият ред под числото: „каса“, „срок 14-о число“ */
.kpi-sub { margin: 4px 0 0; font-size: 0.75rem; color: var(--color-muted); }
/* Карти, в които стойността е ДУМА, а не сума — по-дребно, за да не крещи */
.kpi-value-text { font-size: 1.05rem; }
.kpi-value-muted { color: var(--color-muted); font-weight: 600; }
.dash-state-wait { color: #b45309; }
.dash-state-ok { color: #15803d; }

/* --- Лентата на движението преди одобрението (ДЕМО.html, стъпка 2) ---
   Списък, а не редица от <span>: това е подредена последователност и
   екранният четец трябва да я чете като такава. Стрелките се рисуват от
   CSS, за да не влизат в прочита. */
.dash-flow {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin: 18px 0;
  padding: 0;
  list-style: none;
}
.dash-flow-step {
  position: relative;
  padding: 6px 12px;
  font-size: 0.78rem;
  color: var(--color-muted);
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: 20px;
}
/* Стрелката стои МЕЖДУ хапчетата, а не вътре в едното — затова е изнесена
   с абсолютно позициониране, вместо да е част от съдържанието на реда. */
.dash-flow-step + .dash-flow-step { margin-left: 18px; }
.dash-flow-step + .dash-flow-step::before {
  content: "→";
  position: absolute;
  left: -17px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--color-border);
}
.dash-flow-step.is-done {
  color: #15803d;
  border-color: #bbf7d0;
  background: #f0fdf4;
}
.dash-flow-step.is-current {
  color: #b45309;
  border-color: #fcd34d;
  background: #fffbeb;
  font-weight: 700;
}

/* --- Разходите като хоризонтални ленти, не таблица --- */
.dash-section-title {
  font-size: 0.8rem;
  color: var(--color-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin: 22px 0 12px;
}
.dash-bar-row {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 11px;
  font-size: 0.92rem;
}
.dash-bar-name { flex: 0 0 150px; color: var(--color-muted); }
.dash-bar-track {
  flex: 1 1 auto;
  height: 9px;
  background: var(--color-border);
  border-radius: 5px;
  overflow: hidden;
}
.dash-bar-track i {
  display: block;
  height: 100%;
  border-radius: 5px;
  background: linear-gradient(90deg, var(--color-accent-dark), var(--color-accent));
}
.dash-bar-amount {
  flex: 0 0 110px;
  text-align: right;
  font-weight: 600;
  color: var(--color-navy);
  font-variant-numeric: tabular-nums;
}

/* Ширините са ГОТОВИ КЛАСОВЕ, а не инлайн стил: Content Security Policy
   забранява инлайн стилове (style-src 'self'), а ширината се смята спрямо
   най-голямата група — виж reporting/dashboard.py::build_expense_bars. */
.bar-w-5 { width: 5%; }
.bar-w-10 { width: 10%; }
.bar-w-15 { width: 15%; }
.bar-w-20 { width: 20%; }
.bar-w-25 { width: 25%; }
.bar-w-30 { width: 30%; }
.bar-w-35 { width: 35%; }
.bar-w-40 { width: 40%; }
.bar-w-45 { width: 45%; }
.bar-w-50 { width: 50%; }
.bar-w-55 { width: 55%; }
.bar-w-60 { width: 60%; }
.bar-w-65 { width: 65%; }
.bar-w-70 { width: 70%; }
.bar-w-75 { width: 75%; }
.bar-w-80 { width: 80%; }
.bar-w-85 { width: 85%; }
.bar-w-90 { width: 90%; }
.bar-w-95 { width: 95%; }
.bar-w-100 { width: 100%; }

.dash-footnote {
  margin-top: 22px;
  font-size: 0.78rem;
  color: var(--color-muted);
  line-height: 1.6;
}

/* Мобилно: картите една под друга, лентите се пренасят */
@media (max-width: 39.99rem) {
  .dash-hero { padding: 18px; }
  .dash-hero-big { font-size: 2rem; }
  .kpi-grid { grid-template-columns: 1fr; }
  .dash-bar-row { flex-wrap: wrap; }
  .dash-bar-name { flex: 1 1 100%; }
  .dash-bar-amount { flex: 0 0 auto; }
}
.recon-explain { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.recon-explain textarea { width: 100%; }
.recon-explain button { align-self: flex-start; }
.recon-explained em { color: var(--color-text); }
/* Примерни файлове в справката „кои доставчици ни бавят“ */
.slow-samples {
  display: block;
  margin-top: 3px;
  font-size: 0.75rem;
  font-weight: 400;
  color: var(--color-muted);
  word-break: break-all;
}

/* ---------- Страница „Вашият пакет“ (shop/plan.html) ---------- */
.plan-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 340px;
    gap: var(--space-6);
    align-items: start;
    /* Отстъпът отдолу е на лентата (.band), не на решетката вътре в нея */
    margin-bottom: 0;
}
.plan-section { margin-bottom: var(--space-6); }
.plan-section:last-child { margin-bottom: 0; }
/* --font-display и за етикетите на разделите, за да звучат като .band-head,
   а не като портални заглавия. */
.plan-section h2 {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.25rem, 1.1rem + 0.7vw, 1.5rem);
    color: var(--color-navy);
    margin: 0 0 var(--space-2);
}
.plan-subhead {
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--color-muted);
    margin: var(--space-5) 0 var(--space-3);
}
.plan-choices {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: var(--space-4);
    margin-top: var(--space-4);
}
.plan-choices select { width: 100%; }
/* Едно изречение под избора: какво значи той на практика */
.plan-note {
    display: block;
    margin: var(--space-2) 0 0;
    font-size: 0.82rem;
    color: var(--color-muted);
    line-height: 1.45;
}
.plan-addons { gap: var(--space-3); }
.calc-addon-note {
    display: block;
    font-size: 0.78rem;
    color: var(--color-muted);
    line-height: 1.4;
}

.plan-included { list-style: none; margin: var(--space-4) 0 0; padding: 0; }
.plan-included li {
    display: flex;
    gap: var(--space-3);
    align-items: flex-start;
    padding: var(--space-3) 0;
    border-bottom: 1px solid var(--color-border);
}
.plan-included li:last-child { border-bottom: none; }
.plan-tick { flex: none; color: var(--color-accent); font-weight: 700; }

/* .plan-promise-box отпадна: обещанието вече е тялото на .band-split в
   лилавата лента, а не заоблена зелена кутия. */
.plan-promise p { max-width: 62ch; margin: 0 0 var(--space-4); line-height: 1.6; }
.plan-promise p:last-child { margin-bottom: 0; }
/* Заглавието на раздела е центрирано (.band-split-head), а трите абзаца под
   него бяха ляво подравнени и се четяха като друг раздел. Ширината пада до
   58ch — центриран текст на дълъг ред няма откъде да започне. */
.plan-promise-centered { text-align: center; }
.plan-promise-centered p { max-width: 58ch; margin-inline: auto; }

/* Цената следва скрола, докато човек мени изборите.
   Плоско: лента отгоре в цвета на действието, нищо друго. */
.plan-summary {
    position: sticky;
    top: var(--space-5);
    background: var(--color-card);
    border: 0;
    border-top: 3px solid var(--color-primary);
    border-radius: 0;
    padding: var(--space-5);
}
.plan-summary-label { margin: 0; font-size: 0.8rem; color: var(--color-muted); }
.plan-summary-value {
    margin: var(--space-1) 0;
    font-family: var(--font-display, inherit);
    font-size: var(--figure-md);   /* беше 2.4rem; същият размер като на началната */
    /* БЪГ: Source Serif 4 е свалена само в 400–600. 700 върху нея е
       синтетично удебеляване от браузъра — точно това, което другаде в
       този файл е изрично избягвано. */
    font-weight: 600;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--color-navy);
    /* Знакът на валутата стои ДО числото, не под него. При 340 px кутия и
       --figure-md „105,00 €“ не се събираше на един ред и браузърът пренасяше
       точно на интервала преди €. Три предпазителя, защото един не стига:
       тук nowrap, в шаблона неразделим интервал, в pricing.js — също. */
    white-space: nowrap;
}
.plan-summary-note { margin: 0; font-size: 0.75rem; color: var(--color-muted); }

/* Разбивката прави цената проверима — вижда се откъде идва всеки ред */
.plan-breakdown {
    margin: var(--space-4) 0;
    padding-top: var(--space-3);
    border-top: 1px solid var(--color-border);
    font-size: 0.85rem;
}
.plan-breakdown-row {
    display: flex;
    justify-content: space-between;
    gap: var(--space-3);
    padding: 0.25rem 0;
    color: var(--color-muted);
}
.plan-breakdown-total {
    margin-top: var(--space-2);
    padding-top: var(--space-2);
    border-top: 1px solid var(--color-border);
    color: var(--color-text);
    font-weight: 700;
}
.plan-buy button { width: 100%; }

/* ---------- Странираност (templates/includes/pagination.html) ----------
   Плоска, като всичко останало: без кутии и без сенки. Броят на записите е
   ТУК, а не отделно над списъка — човек пита „колко има“ точно когато
   стигне до края на страницата. */
.pagination {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    flex-wrap: wrap;
    margin: var(--space-5) 0 0;
    padding-top: var(--space-4);
    border-top: 1px solid var(--color-border);
}
.pagination-link {
    font-weight: 600;
    white-space: nowrap;
    /* 44 px висока цел за пръст — иначе на телефон се уцелва трудно */
    padding: 0.6rem 0.2rem;
}
.pagination-link.is-disabled {
    color: var(--color-muted);
    opacity: 0.5;
    cursor: default;
}
.pagination-status {
    font-size: 0.9rem;
    color: var(--color-muted);
    text-align: center;
    flex: 1 1 auto;
}

/* ---------- Едрият шрифт в лявата колона на „Вашият пакет“ ----------
   Искане на Илиян (12.08.2026): текстът и менютата от „Вашият профил“ до
   края на раздела +25%. Това е мястото, където човек взема решение — а
   надписите на менютата бяха 0.78rem, тоест по-дребни от всичко останало на
   страницата.

   Обхватът е `.plan-main`, тоест САМО лявата колона: кутията с цената
   (.plan-summary) е с фиксирана ширина 340 px и +25% там би пренесъл сумата
   на два реда. Затова не се пипа. */
.plan-main .plan-section h2 { font-size: clamp(1.56rem, 1.38rem + 0.88vw, 1.88rem); }
.plan-main .eyebrow-quiet { font-size: 0.94rem; }
.plan-main .field-help { font-size: 1.13rem; }
.plan-main .calc-field label { font-size: 0.98rem; }
.plan-main .calc-field select,
.plan-main .plan-choices select { font-size: 1.13rem; padding-block: 0.6rem; }
.plan-main .plan-note { font-size: 1.03rem; }
.plan-main .plan-subhead { font-size: 1rem; }
.plan-main .calc-addon { font-size: 1.13rem; }
.plan-main .calc-addon-note { font-size: 0.98rem; }
.plan-main .calc-addon-price { font-size: 1rem; }
.plan-main .plan-promise { font-size: 1.13rem; }

/* „Какво влиза“ живее в НАВЫ лента: линиите, отметките и бележките стават
   светли, иначе се губят в тъмното. */
.band-navy .plan-included li { border-bottom-color: rgba(255, 255, 255, 0.14); }
.band-navy .plan-included strong { color: #fff; }
.band-navy .plan-note { color: var(--color-on-navy-muted); }
.band-navy .plan-tick { color: var(--color-accent-soft); }

@media (max-width: 56.25rem) {
    .plan-layout { grid-template-columns: 1fr; }
    /* Цената минава НАД конфигурацията: първо се вижда какво плащаш */
    .plan-summary { position: static; order: -1; margin-bottom: var(--space-5); }
}


/* =========================================================================
   ЛОГО НА КАНТОРАТА, ЗНАЦИ ПО ПРОЕКТА И РАЗШИРЕН ДОЛЕН КОЛОНТИТУЛ
   (19.08.2026)

   Логото замени иконната значка `.brand-mark`. Името е ВЪТРЕ в картинката,
   затова в HTML-а до него стои само `visually-hidden` текст — иначе екранен
   четец и търсачка получават името два пъти.

   Знаците на ЕС в заглавната лента са ВРЪЗКА към `#eu-project` в долния
   колонтитул. Превъртането е `scroll-behavior: smooth` на `html`, без JS —
   при „намалено движение“ браузърът сам го изключва (правилото по-горе в
   този файл).
   ========================================================================= */

html { scroll-behavior: smooth; }

/* ЛОГОТО И ЗНАЦИТЕ СА ПОДРАВНЕНИ ВЛЯВО — на всяка ширина, без изключение
   (решение на Илиян, 19.08.2026). Брандът е началото на реда; центриран
   в клетката си той се откъсваше от левия ръб и на телефон опираше в
   бутона за меню. */
.brand-block {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 0.3rem;
    min-width: 0;
}
.brand-picture { display: block; min-width: 0; max-width: 100%; }
/* ⚠️ ВИСОЧИНАТА НА ЛОГОТО Е ЧЕТИМОСТТА НА НАДПИСА. Ключалката е 5,2:1 и
   надписът заема само средната ѝ третина — при 3rem „Стройкомерс 2002
   ЕООД“ вече не се четеше. 3,6rem е горната граница.

   ⚠️ `max-width: 100%` + `object-fit: contain` СА ЗАДЪЛЖИТЕЛНИ. Картинка
   със зададена височина и `width: auto` в тясна флекс/грид клетка се
   СПЛЕСКВА хоризонтално — точно това „изяждаше“ логото на телефон.
   `contain` пази пропорцията, каквото и да е останало от мястото. */
.brand-logo {
    display: block;
    height: clamp(2.4rem, 3.4vw, 3.6rem);
    width: auto;
    max-width: 100%;
    max-height: none;
    object-fit: contain;
}
/* Знаците на ЕС: без вид на бутон, но с ясно име за екранен четец.
   ⚠️ `nowrap` + `min-width: 0` на самите картинки: пренесени един под
   друг, двата знака се четат като два отделни източника на финансиране. */
.brand-eu {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: flex-start;
    gap: clamp(0.4rem, 1vw, 0.7rem);
    padding: 0.1rem 0.1rem 0;
    max-width: 100%;
    min-width: 0;
    border-radius: 6px;
    opacity: 0.88;
    transition: opacity var(--transition);
}
/* Височината се свива с екрана, а `object-fit` пази пропорцията, когато
   мястото свърши преди височината. */
.brand-eu img {
    display: block;
    height: clamp(0.95rem, 1.5vw, 1.25rem);
    width: auto;
    min-width: 0;
    max-width: 50%;
    object-fit: contain;
}
.brand-eu:hover { opacity: 1; }
.brand-eu:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 3px; }

/* --- Долен колонтитул: реквизити на кантората (01.09.2026) --- */
/* ДВЕ КОЛОНИ: лого отляво, реквизити отдясно.
   Това НЕ отменя решението от 19.08.2026 по-долу. Там едноколонната
   подредба спасява ПУБЛИЧНОСТТА ПО ПРОЕКТА от това да стане страничен
   блок; тук са данните за връзка, които се четат именно като двойка
   „кой“ + „къде“. Блокът по проекта остава на цяла ширина под тях.

   ⚠️ `align-items: flex-start` — логото и първият ред текст трябва да
   тръгват от една линия. Центрирането по вертикала провисва адреса при
   различна височина на логото. */
.footer-identity {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 1.5rem 2.5rem;
    padding: 0 0 1.5rem;
    margin: 0 0 1.25rem;
    border-bottom: 1px solid var(--color-border);
}
/* Логото носи собствен долен отстъп от блока по проекта; тук редът се
   държи от `gap`, затова се нулира. */
.footer-identity .footer-brand-logo { margin: 0; flex: 0 0 auto; }

/* `<address>` е курсив по подразбиране в браузърите — реквизити в курсив
   се четат като бележка под линия, а не като данни за връзка.

   ТРИ КОЛОНИ, ЗАЩОТО ЛОГОТО Е НИСКО. Логото е 480×148 при ширина 14rem,
   тоест около 69 px високо. Шест реда текст един под друг дават над 130 px
   и до логото зейва празнина. Групирани по смисъл — кой / къде / как —
   стават три реда, което е точно неговата височина. */
.footer-contact {
    display: grid;
    /* ⚠️ НЕ `auto`. С `auto` браузърът свива колоните, когато мястото е на
       изчерпване, и адресът се чупеше след „ул.“ — съкращението оставаше
       само на реда, откъснато от името на улицата.
       Трите колони заемат най-малко ~675 px; с логото и отстъпите — под
       62rem, което е и точката, в която подредбата минава в един стълб. */
    grid-template-columns: repeat(3, minmax(max-content, 1fr));
    align-items: start;
    gap: 0 2.5rem;
    /* Блокът заема ЦЯЛОТО останало място вдясно от логото (02.09.2026).

       Без това `<address>` е широк колкото съдържанието си и свършва
       по-рано от хедъра и от текста по проекта отдолу — трите блока
       завършват на три различни места по десния ръб и окото го чете като
       разместване, а не като подредба.

       `minmax(max-content, 1fr)` дава на всяка колона НАЙ-МАЛКО ширината на
       най-дългия ѝ ред (значи адресът пак не се чупи) и разпределя
       остатъка поравно между трите. Съдържанието се центрира в получената
       по-широка клетка — виж `.footer-contact-col`. */
    /* ⚠️ Основата е 0, НЕ `auto`. При `auto` изходната ширина на блока се
       смята от съдържанието, а колони `1fr` я надуват до три пъти
       най-широката колона (~1000 px). Флекс редът тогава не побира логото и
       контактите заедно и контактите падаха на СОБСТВЕН ред под логото.
       С основа 0 блокът просто взема всичко останало вдясно от логото. */
    flex: 1 1 0;
    min-width: 0;
    font-style: normal;
    font-size: 0.82rem;
    line-height: 1.6;
    color: var(--color-muted);
}
/* ЦЕНТРИРАНЕ ВЪТРЕ В КОЛОНАТА (02.09.2026, решение на Илиян).
   Всяка от трите групи — кой сме / къде сме / как да ни намериш — е
   центрирана спрямо СОБСТВЕНАТА си колона, не спрямо футъра. Затова
   центрирането е тук, а не на `.footer-contact`: така редовете в една група
   стоят под средата един на друг, а самите групи си остават на местата
   спрямо логото.

   ⚠️ Логото НЕ се пипа — то е вляво и остава вляво (`.footer-brand-logo`).
   `align-items: center` е за самите редове (те са flex елементи и иначе се
   разпъват по цялата ширина), `text-align: center` — за текста в тях,
   включително за адреса, който се пренася на два реда. */
.footer-contact-col {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 0.28rem;
}
/* ⚠️ ТАВАНЪТ ЗА ШИРИНА Е МАХНАТ (02.09.2026).

   Беше 17 rem (272 px), а адресът заема 309 px на един ред — тоест колоната
   беше по-тясна от съдържанието си ВИНАГИ. Оттам идваше пренасянето след
   „ул.“: съкращението оставаше само на реда, откъснато от името на улицата,
   и се четеше като печатна грешка.

   Ширината вече се определя от `max-content` в решетката по-горе, а не от
   закована стойност — така адресът остава цял, независимо какъв е записан
   в админа. */
.footer-contact-address { max-width: none; }

/* ⚠️ Работното време НЕ се пренася. „понеделник–петък, 9:00–17:00“ се беше
   счупило на „…9:00–“ / „17:00“ — час, разкъсан на два реда, се чете като
   две различни числа. 198 px се събират и на най-тесния телефон. */
.footer-contact-hours { white-space: nowrap; }

.footer-contact-name { font-weight: 600; color: var(--color-text); }
.footer-contact a { color: inherit; text-decoration: none; }
.footer-contact a:hover { color: var(--color-primary-dark); text-decoration: underline; }

/* ТРИ КОЛОНИ ИЛИ ЕДНА — БЕЗ МЕЖДИННА СТЪПКА (преработено 02.09.2026).

   Дотогава между тях имаше подредба в две колони. Тя изглеждаше разумно на
   хартия, но в две колони адресът получаваше около 200 px — по-малко от
   собствената си ширина — и се чупеше на три реда точно на таблет.

   Затова стъпката отпада: докато трите колони се събират до логото, те
   стоят; щом спрат да се събират, всичко минава в един стълб, където
   адресът пак има цял ред за себе си. */
@media (max-width: 62rem) {
    .footer-identity { gap: 1rem; }
    /* ⚠️ `flex-basis: 100%` е ЗАДЪЛЖИТЕЛЕН тук. Основата 0 от правилото
       по-горе значи, че блокът се свива до колкото му дадат — и на телефон
       оставаше да дели реда с логото, с около 110 px за себе си. Адресът се
       чупеше, а страницата тръгваше настрани. 100% го праща на собствен
       ред под логото, което е подредбата за тесен екран. */
    .footer-contact { grid-template-columns: 1fr; gap: 0.9rem; flex-basis: 100%; }
    /* Логото се центрира САМО тук (решение на Илиян, 02.09.2026).
       На широк екран то стои вляво, а реквизитите заемат останалото —
       двете заедно правят един ред. На тесен екран редът се разпада на два
       стълба: центрирани реквизити под ляво залепено лого изглеждаше като
       грешка. Автоматичните полета центрират флекс елемент, когато е сам на
       реда — точно случаят тук.

       ⚠️ Селекторът е с `.footer-identity` отпред НАРОЧНО: правилото по-горе
       (`.footer-identity .footer-brand-logo { margin: 0 }`) е с две имена на
       клас и медийната заявка НЕ добавя тежест. С един клас това тук просто
       нямаше да се приложи. */
    .footer-identity .footer-brand-logo { margin-left: auto; margin-right: auto; }
}

/* Най-тесните телефони (под ~384 px). Там 309 px адрес не се събират на
   един ред при никакъв разумен шрифт и насилването би дало хоризонтално
   плъзгане на цялата страница — по-лошото от двете.

   `balance` разделя текста на приблизително равни редове вместо да остави
   „офис 13“ сам на трети ред. Практически това значи прелом след запетая,
   тоест „ул.“ пак остава при името на улицата — което беше целта.

   ⚠️ Браузър без поддръжка на `text-wrap` просто пренася както досега.
   Това е разкрасяване, не носеща конструкция. */
@media (max-width: 24rem) {
    .footer-contact-col { text-wrap: balance; }
}

/* --- Долен колонтитул: блок по проекта --- */
/* ЕДНА КОЛОНА, ПОДРАВНЕНА ВЛЯВО (решение на Илиян, 19.08.2026).
   Двуколонната подредба (лого отляво, текст отдясно) правеше от
   задължителната публичност страничен блок. Тук тя е самостоятелно
   изявление: лого отгоре, текст под него, знаците на ЕС най-отдолу —
   всичко по една ос, залепено за левия ръб.

   ⚠️ Логото и знаците са ВЛЯВО, затова и текстът между тях е вляво.
   Центриран абзац между ляво лого и ляви знаци се чете като грешка, а не
   като избор. Ако текстът трябва да се върне в средата: `text-align`
   по-долу става `center`, а `.footer-brand-logo` и `.footer-eu-logos`
   пак се центрират — три реда. */
.footer-project {
    padding: 0.5rem 0 1.5rem;
    margin: 0 0 1.25rem;
    border-bottom: 1px solid var(--color-border);
    border-radius: var(--radius);
    outline: none;                 /* фокусът идва по котва, не от клавиатура */
    scroll-margin-top: 6rem;       /* мястото на плаващата заглавна лента */
    text-align: left;
}
/* Идването по котвата се вижда: блокът светва за миг и после угасва. */
.footer-project:target { animation: eu-project-glow 1.8s ease-out; }
@keyframes eu-project-glow {
    0%   { background: var(--color-accent-bg); }
    100% { background: transparent; }
}

.footer-brand-logo {
    display: block;
    width: 100%;
    max-width: 14rem;
    height: auto;
    margin: 0 0 1.1rem;
}
/* ⚠️ ТАВАНЪТ ЗА ШИРИНА Е МАХНАТ (02.09.2026, решение на Илиян).

   Беше 62rem (992 px) — обичайният таван за дължина на реда. Но контейнерът
   на футъра е 1140 px, тоест на всеки екран над ~1040 px абзацът свършваше
   116 px преди реквизитите, знаците на ЕС, разделителната линия и долния
   ред с авторските права. Пет блока един под друг с четири еднакви десни
   ръба и един по-къс — окото го чете като разместване.

   ⚠️ Цената е призната, не пропусната: редът става ~105 знака вместо ~94,
   тоест над препоръчителните 60–80. Ако някой ден се реши, че четимостта на
   този абзац е по-важна от подравняването, тук се връща `max-width: 62rem`
   — и тогава СЪЩОТО важи за реквизитите горе, иначе разминаването само
   сменя мястото си. */
.footer-project-text {
    margin: 0 0 0.65rem;
    font-size: 0.82rem;
    line-height: 1.65;
    color: var(--color-muted);
    text-wrap: pretty;
    /* ДВУСТРАННО ПОДРАВНЯВАНЕ (решение на Илиян, 02.09.2026).
       Блокът е официален текст по проекта — двустранното подравняване му
       отива и затваря десния ръб заедно с останалите блокове във футъра.

       ⚠️ `hyphens: auto` НЕ е разкрасяване, а част от решението. Без
       пренасяне двустранното подравняване разтяга интервалите, за да
       запълни реда, и в текста се появяват вертикални „реки“ от бяло —
       особено при дългите думи тук („Конкурентоспособност“,
       „безвъзмездна“). Пренасянето дава на браузъра къде да пречупи и
       интервалите остават нормални.

       Работи, защото `<html lang="bg">` е зададен в base.html — без езика
       браузърът не знае по какви правила да пренася и просто не пренася. */
    text-align: justify;
    hyphens: auto;
}

/* ⚠️ Под ~480 px двустранното подравняване се маха.
   Там редът е около 40 знака; разтеглянето до десния ръб при толкова малко
   думи прави дупки, широки колкото цяла дума. Ляво подравняване с назъбен
   десен ръб е по-четимо от подредено, но надупчено. */
@media (max-width: 30rem) {
    .footer-project-text { text-align: left; }
}
/* ⚠️ `nowrap`: двата знака на ЕС са ЕДИН ред. Пренесени един под друг,
   те се четат като два отделни източника на финансиране. Смаляват се
   заедно на тесен екран (виж правилото по-долу), но не се разделят. */
.footer-eu-logos {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: flex-start;
    gap: 1.75rem;
    margin-top: 1.4rem;
}
.footer-eu-logos img { height: 2.4rem; width: auto; }

.footer-copyright {
    margin: 1.25rem 0 0;
    padding-top: 1rem;
    border-top: 1px solid var(--color-border);
    font-size: 0.76rem;
    line-height: 1.6;
    color: var(--color-muted);
    text-align: center;
    text-wrap: pretty;
}

/* Правните връзки също се центрират — редът остава сам под блока по
   проекта, откакто „Всички цени са в EUR“ отпадна оттам. */
.site-footer .footer-inner { justify-content: center; }
.site-footer .footer-legal { justify-content: center; }

@media (max-width: 45rem) {
    .footer-brand-logo { max-width: 11rem; }
    .footer-eu-logos { gap: 1rem; }
    .footer-eu-logos img { height: 1.7rem; }
}
@media (max-width: 26rem) {
    .footer-eu-logos { gap: 0.7rem; }
    .footer-eu-logos img { height: 1.4rem; }
}

/* =========================================================================
   БАНЕР „ЗА НАС“ — КАКТО ОСТАНАЛИТЕ БАНЕРИ (преработен 19.08.2026)

   Първата редакция показваше цялата снимка (`contain`) с размит фон
   отстрани. На екран излизаше като картина в рамка и се биеше с всички
   останали банери на сайта. Сега е като тях: на цяла ширина, `cover`,
   със същото леко движение.

   ⚠️ `background-position` Е СЪДЪРЖАТЕЛЕН ИЗБОР, НЕ ОФОРМЛЕНИЕ. Табелата с
   логото стои на ~20% от височината на снимката. При `cover` на широк и
   нисък банер се вижда само хоризонтална ивица от нея — с `center 22%`
   тази ивица ВИНАГИ съдържа табелата, на всяка ширина. `center` (50%) я
   изрязваше напълно.

   Затова и мащабът на движението тук е по-малък от общия: при
   `scale(1.09)` табелата опира в горния ръб.
   ========================================================================= */
/* ⚠️ ДРУГА СНИМКА, НЕ ДРУГ ФОКУС (20.08.2026).
   `banner-about.jpg` е 1600×1067 (3:2). Банерът е широка ивица (около 3:1),
   затова `cover` изрязва вертикално и се вижда ЕДНА трета от кадъра: или
   табелата с логото горе, или хората на бюрата долу — никога двете.
   Местенето на `background-position` само сменя коя трета се губи.

   `banner-about-wide.jpg` е същата снимка, изрязана до 1600×880 (≈1.82:1):
   махнат е празният таван отгоре и част от пода отдолу. Остава ивицата от
   табелата до плотовете на бюрата.

   ⚠️ ИЗМЕРЕНО, НЕ НАГЛАСЕНО НА ОКО (20.08.2026). При банер 1553×544 се
   вижда 63.7% от височината на изреза. В изреза табелата заема 2–17%, а
   седналите са между 37% и 65%. `center 2%` показва 0.7–64.4% — тоест и
   табелата ЦЯЛА, и хората до гърдите. По-надолу (38%) табелата излиза от
   кадър; по-нагоре от нея няма какво да се спечели. */
.banner-about::before {
    background-image: url("../images/banner-consultation.b131891dd3f4.jpg");
    background-position: center;
    animation: banner-drift-about 20s ease-in-out infinite alternate;
}
/* По-висок от останалите банери: тази снимка има какво да покаже и на
   стандартна височина хората пак биха останали извън кадър. */
.banner-about { min-height: clamp(15rem, 44vw, 34rem); }
@keyframes banner-drift-about {
    0%   { transform: scale(1.04) translate(0, 0); }
    50%  { transform: scale(1.07) translate(0.9%, 0.6%); }
    100% { transform: scale(1.04) translate(-0.9%, -0.6%); }
}

/* На тесен екран банерът е нисък, а изрезът от снимката — тесен. */
@media (max-width: 47.5rem) {
    /* ⚠️ НА ТЕСЕН ЕКРАН СЕ РЕЖЕ ПО ШИРИНА, НЕ ПО ВИСОЧИНА.
       Банерът е по-висок, отколкото широк спрямо изреза (1.82:1), затова
       `cover` побира цялата височина и изрязва отстрани. Табелата е в
       ДЯСНАТА част на кадъра (60–92% от ширината) и при центриране десният
       ѝ ръб пада извън екрана. `62%` премества прозореца надясно: табелата
       остава цяла, а отляво се губи само част от прозореца. */
    .banner-about::before { background-position: center; }
}

/* =========================================================================
   ЛЕНТА С ЛОГОТО ПОД БАНЕРА („За нас“)

   Дъх между снимката и текста: логото само, на бял фон, разпънато но не
   разтеглено. Не е декорация — това е мястото, на което човек свързва
   снимката на офиса с името на кантората.
   ========================================================================= */
.brandstrip {
    display: flex;
    justify-content: center;
    padding: clamp(1.75rem, 4vw, 3rem) var(--space-4);
    background: var(--color-card);
    border-bottom: 1px solid var(--color-border);
}
.brandstrip img {
    display: block;
    width: 100%;
    max-width: clamp(13rem, 34vw, 26rem);
    height: auto;
}


/* =========================================================================
   ПЛАВАЩА МЕСЕЧНА ЦЕНА (19.08.2026)

   Две колони: отляво изборът (за кого е + колко документа), отдясно —
   сметката. Сметката е с фон на карта и стои „лепната“ на широк екран,
   защото тя е причината човек да мести плъзгача.

   Под 56.25rem колоните стават една и СМЕТКАТА МИНАВА ОТГОРЕ (`order: -1`)
   — същото решение като при `.plan-summary`: първо се вижда какво плащаш.
   ========================================================================= */
.flexband { scroll-margin-top: 5.5rem; }
.flexband-head { max-width: 46rem; }

.flexcalc {
    display: grid;
    grid-template-columns: 1fr minmax(17rem, 22rem);
    gap: clamp(1.5rem, 4vw, 3rem);
    align-items: start;
    margin-top: var(--space-5);
}

.flexcalc-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-bottom: var(--space-5);
}
.flexcalc-tab {
    min-height: var(--tap-target);
    padding: 0 1.1rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-pill);
    background: var(--color-card);
    color: var(--color-text);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
    transition: background var(--transition), border-color var(--transition), color var(--transition);
}
.flexcalc-tab:hover { border-color: var(--color-primary); }
.flexcalc-tab.is-active {
    background: var(--color-primary);
    border-color: var(--color-primary);
    color: #fff;
}

.flexcalc-label {
    display: block;
    font-weight: 700;
    font-size: 1.05rem;
    margin: 0 0 0.75rem;
}
.flexcalc-range {
    width: 100%;
    accent-color: var(--color-primary);
    min-height: var(--tap-target);
}
.flexcalc-count {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    margin: 0.25rem 0 0.5rem;
    font-weight: 600;
}
.flexcalc-number {
    width: 6rem;
    min-height: var(--tap-target);
    padding: 0 0.7rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    font: inherit;
    font-weight: 700;
    text-align: center;
}
.flexcalc-hint { margin: 0; color: var(--color-muted); font-size: var(--text-sm); }

/* Трите месеца един до друг — разликата между тих и силен месец е
   аргументът, не тарифата. */
.flexcalc-examples {
    list-style: none;
    margin: var(--space-5) 0 0;
    padding: 0;
    border-top: 1px solid var(--color-border);
}
.flexcalc-examples li {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
    padding: 0.6rem 0;
    border-bottom: 1px solid var(--color-border);
}
.flexcalc-examples span { color: var(--color-muted); }
.flexcalc-examples strong { font-variant-numeric: tabular-nums; white-space: nowrap; }

.flexcalc-result {
    position: sticky;
    top: 6.5rem;
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg, var(--radius));
    box-shadow: var(--shadow);
    padding: clamp(1.25rem, 3vw, 1.75rem);
}
.flexcalc-result-label {
    margin: 0;
    color: var(--color-muted);
    font-size: var(--text-sm);
    font-weight: 600;
}
.flexcalc-price {
    margin: 0.2rem 0 1rem;
    font-family: var(--font-display, inherit);
    font-size: clamp(2rem, 5vw, 2.75rem);
    font-weight: 800;
    line-height: 1.05;
    color: var(--color-navy);
    font-variant-numeric: tabular-nums;
}
.flexcalc-lines {
    list-style: none;
    margin: 0 0 0.9rem;
    padding: 0;
    font-size: var(--text-sm);
}
.flexcalc-lines li {
    display: flex;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.35rem 0;
    border-bottom: 1px dashed var(--color-border);
}
.flexcalc-lines li:last-child { border-bottom: 0; }
.flexcalc-lines strong { font-variant-numeric: tabular-nums; white-space: nowrap; }
.flexcalc-capped {
    display: block !important;
    color: var(--color-primary-dark);
    font-weight: 600;
}
.flexcalc-note { margin: 0 0 1rem; color: var(--color-muted); font-size: var(--text-sm); }
.flexcalc-cta { width: 100%; justify-content: center; }
.flexcalc-fineprint {
    margin: 0.85rem 0 0;
    color: var(--color-muted);
    font-size: 0.78rem;
    line-height: 1.5;
}

@media (max-width: 56.25rem) {
    .flexcalc { grid-template-columns: 1fr; }
    /* ⚠️ СМЕТКАТА Е НАКРАЯ, НЕ ОТПРЕД (20.08.2026). Дотук картата минаваше
       НАД плъзгача по правилото „първо се вижда какво плащаш“ — вярно за
       фиксирания пакет, но не и тук. При плаващата цена сметката е РЕЗУЛТАТ
       от избора: над него тя показва сума за брой документи, който човекът
       още не е задал, тоест число, което не значи нищо. Затова редът е
       естественият: избираш профил → казваш колко документа → виждаш
       колко струва такъв месец и плащаш основата. */
    .flexcalc-result { position: static; order: 1; margin-top: var(--space-5); }
    .flexcalc-controls { order: 0; }
}


/* =========================================================================
   ПЛАТЕНА СЧЕТОВОДНА КОНСУЛТАЦИЯ — публична страница (19.08.2026)

   Стъпките ползват вече съществуващите `.booking-step` / `.slot-grid` от
   резервацията в портала: това е СЪЩОТО действие с друга публика и две
   различни визии за едно действие се четат като два различни продукта.

   Новото тук е календарът: клетката казва ЕДНО нещо — има ли свободен час.
   Затова заетият ден е `div`, не връзка: сивото и липсата на курсор казват
   „не тук“ по-бързо от всякакъв надпис.
   ========================================================================= */
.paidcons { padding-block: var(--space-6, 2rem); }

/* ⚠️ БЕЗ РЕШЕТКА (20.08.2026). Уводът беше две колони — текст и цена. Сега
   е една централна ос и картата слиза под текста; подредбата се задава при
   `.paidcons-intro.section-head-marked` в края на файла. Тук остава само
   отстъпът надолу, за да няма две места, които спорят за подредбата. */
.paidcons-intro {
    margin-bottom: var(--space-6, 2.5rem);
}
/* Списъкът с отметки, изведен извън .section-head-marked (22.08.2026) —
   виж бележката в paid_landing.html. Отстъпът е същият, който преди
   имаше .paidcons-intro, за да не се промени височината на страницата. */
.paidcons-details { margin-bottom: var(--space-6, 2.5rem); }
.paidcons-list { margin: 1rem 0 0; padding-left: 1.15rem; }
.paidcons-list li { margin-bottom: 0.5rem; }

.paidcons-price {
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg, var(--radius));
    box-shadow: var(--shadow);
    padding: clamp(1.25rem, 3vw, 1.75rem);
    text-align: center;
}
.paidcons-price-label { margin: 0; color: var(--color-muted); font-size: var(--text-sm); font-weight: 600; }
.paidcons-price-value {
    margin: 0.15rem 0 0.35rem;
    font-family: var(--font-display, inherit);
    font-size: clamp(2.4rem, 6vw, 3.2rem);
    font-weight: 800;
    line-height: 1;
    color: var(--color-navy);
}
.paidcons-price-note { margin: 0; color: var(--color-muted); font-size: var(--text-sm); }
.paidcons-price-free {
    margin: 1.1rem 0 0;
    padding-top: 1rem;
    border-top: 1px solid var(--color-border);
    font-size: var(--text-sm);
    color: var(--color-muted);
}

/* --- Календарът --- */
.paidcons-calendar { margin-top: var(--space-4, 1rem); }
.paidcons-grid .calendar-day {
    min-height: 4.25rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.15rem;
    text-align: center;
}
.calendar-day.is-bookable {
    background: var(--color-accent-bg);
    color: var(--color-primary-dark);
    font-weight: 700;
    transition: background var(--transition), transform var(--transition);
}
.calendar-day.is-bookable:hover {
    background: var(--color-primary);
    color: #fff;
    text-decoration: none;
}
.calendar-day.is-bookable.is-selected {
    background: var(--color-primary);
    color: #fff;
    box-shadow: inset 0 0 0 2px var(--color-navy);
}
.calendar-day.is-taken { color: var(--color-muted); opacity: 0.5; }
.paidcons-free { font-size: 0.72rem; font-weight: 600; line-height: 1.1; }

/* Двойката „квадратче + обяснение“ не се къса — виж бележката в шаблона. */
.paidcons-legend-item {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
}
.paidcons-legend {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem 1.25rem;
    margin: 0.85rem 0 0;
    color: var(--color-muted);
    font-size: var(--text-sm);
}
/* ⚠️ ПО КЛАС, НЕ ПО `span` (20.08.2026). Правилото беше
   `.paidcons-legend span` и хващаше ВСЕКИ span вътре — включително
   обвивката `.paidcons-legend-item`, която стана 0.9rem на 0.9rem и
   изяждаше текста си. Квадратчетата си имат имена; те се ползват. */
.paidcons-legend-free,
.paidcons-legend-taken {
    display: inline-block;
    flex: none;
    width: 0.9rem;
    height: 0.9rem;
    border-radius: 4px;
    vertical-align: -0.1rem;
}
.paidcons-legend-free { background: var(--color-accent-bg); border: 1px solid var(--color-primary); }
.paidcons-legend-taken { background: var(--color-border); }
.calendar-nav.is-off { opacity: 0.25; padding: 0 0.75rem; }

/* Котва под плаващата заглавна лента — иначе изборът на час се скрива зад нея */
.anchor-offset { display: block; height: 0; scroll-margin-top: 6rem; }

/* --- Данните --- */
.paidcons-fields {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
    gap: 1rem 1.25rem;
}
.form-field-wide { grid-column: 1 / -1; }
.paidcons-fields input,
.paidcons-fields textarea { width: 100%; }
.form-hint { margin: 0.3rem 0 0; color: var(--color-muted); font-size: 0.82rem; }
.req { color: var(--color-danger); }
/* Отметката за съгласие: квадратчето и текстът в ЕДИН ред, подравнени
   отляво. Без изричното `text-align`/`width` квадратчето се центрира от
   общото правило за полета във формите и увисва над текста си. */
.form-field-check { margin-top: var(--space-4, 1rem); text-align: left; }
.form-field-check .checkline {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    line-height: 1.5;
    text-align: left;
    font-weight: 400;
}
.form-field-check .checkline input[type="checkbox"] {
    margin: 0.25rem 0 0;
    width: 1.15rem;
    height: 1.15rem;
    flex: none;
    accent-color: var(--color-primary);
}

.paidcons-commit {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem 2rem;
    margin-top: var(--space-5, 1.5rem);
    padding: clamp(1.1rem, 3vw, 1.6rem);
    background: var(--color-accent-bg);
    border-radius: var(--radius-lg, var(--radius));
}
.paidcons-commit-sum {
    margin: 0;
    font-family: var(--font-display, inherit);
    font-size: 1.5rem;
    font-weight: 800;
    color: var(--color-navy);
}
.paidcons-commit-note { margin: 0.3rem 0 0; max-width: 34rem; color: var(--color-muted); font-size: var(--text-sm); }

.paidcons-faq { margin-top: var(--space-6, 2.5rem); }
.paidcons-faq dt { font-weight: 700; margin-top: 1.1rem; }
.paidcons-faq dd { margin: 0.3rem 0 0; color: var(--color-muted); }

/* --- Състояние на заявката --- */
.paidcons-status { padding-block: var(--space-6, 2rem); max-width: 46rem; }
.paidcons-summary {
    margin: 0 0 var(--space-5, 1.5rem);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg, var(--radius));
    overflow: hidden;
}
.paidcons-summary > div {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 1rem;
    padding: 0.75rem 1.1rem;
    border-bottom: 1px solid var(--color-border);
}
.paidcons-summary > div:last-child { border-bottom: 0; }
.paidcons-summary dt { flex: 0 0 9rem; color: var(--color-muted); font-weight: 600; }
.paidcons-summary dd { margin: 0; font-weight: 600; }

.paidcons-cta {
    padding: clamp(1.1rem, 3vw, 1.6rem);
    background: var(--color-accent-bg);
    border-radius: var(--radius-lg, var(--radius));
}
.paidcons-cta.is-ok { background: var(--color-success-bg); }
.paidcons-cta.is-warn { background: var(--color-card); border: 1px solid var(--color-border); }
.paidcons-hold { margin: 0 0 1rem; font-weight: 600; }
.paidcons-ok { margin: 0 0 0.6rem; font-weight: 700; color: var(--color-success); }
.paidcons-fineprint { margin: 0.9rem 0 0; color: var(--color-muted); font-size: 0.8rem; line-height: 1.55; }

@media (max-width: 56.25rem) {
    /* Уводът вече е една колона на всяка ширина — тук няма какво да се
       пренарежда (виж `.paidcons-intro` по-горе). */
    .paidcons-summary dt { flex: 1 1 100%; }
}
@media (max-width: 30rem) {
    .paidcons-grid .calendar-day { min-height: 3.25rem; }
    .paidcons-free { font-size: 0.62rem; }
}

/* =========================================================================
   ПОДКАНА ЗА ПЛАТЕНА КОНСУЛТАЦИЯ В ЛЕНТИТЕ НА САЙТА (19.08.2026)

   Малка карта, която стои в „Услуги“, „Казуси“ и „Контакти“. Нарочно НЕ е
   в hero-то: там рекламата е за безплатната консултация и две различни
   предложения на един екран се неутрализират взаимно.
   ========================================================================= */
.consult-promo {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem 2rem;
    padding: clamp(1.2rem, 3vw, 1.75rem);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-left: 4px solid var(--color-primary);
    border-radius: var(--radius-lg, var(--radius));
    margin-block: var(--space-5, 1.5rem);
}
.consult-promo-body { max-width: 42rem; }
.consult-promo h2,
.consult-promo h3 {
    margin: 0 0 0.35rem;
    font-family: var(--font-display, inherit);
    font-size: 1.3rem;
}
.consult-promo p { margin: 0; color: var(--color-muted); }
.consult-promo-price { font-weight: 700; color: var(--color-navy); white-space: nowrap; }
.consult-promo .btn { flex: none; }
/* Върху тъмна лента картата се обръща: полупрозрачно бяло вместо бял
   панел. ⚠️ И ТЕКСТЪТ трябва да се обърне — иначе `--color-muted` (тъмно
   сиво) остава върху лилаво и абзацът се чете едва-едва. Точно това
   излезе на екрана в „Услуги“ при първото пускане. */
.band-navy .consult-promo,
.band-accent .consult-promo {
    background: rgba(255, 255, 255, 0.10);
    border-color: rgba(255, 255, 255, 0.28);
    border-left-color: #fff;
}
.band-navy .consult-promo p,
.band-navy .consult-promo-price,
.band-accent .consult-promo p,
.band-accent .consult-promo-price { color: rgba(255, 255, 255, 0.88); }
.band-navy .consult-promo h2,
.band-navy .consult-promo h3,
.band-accent .consult-promo h2,
.band-accent .consult-promo h3 { color: #fff; }
/* Бутонът върху цветна лента става бял с тъмен надпис — вторичният стил
   е с прозрачен фон и се губи. */
.band-accent .consult-promo .btn-secondary,
.band-navy .consult-promo .btn-secondary {
    background: #fff;
    border-color: #fff;
    color: var(--color-navy);
}


/* Вторият начин на плащане до обещанието за фиксираната лента (19.08.2026).
   По-тих от обещанието: то е основното, това е отговор на „а ако“. */
.calc-promise-alt { opacity: 0.92; font-size: 0.96em; }
/* Връзката НЕ се пребоядисва по лента: самата плочка е светла и вътре в
   нея важат обичайните цветове. Светъл акцент върху светла плочка се
   четеше едва-едва — видя се на екрана при първото пускане. */
.calc-promise-alt a {
    color: var(--color-primary-dark);
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 700;
}

/* Разграничението между двете консултации в „Контакти“ */
.contacts-paid-note {
    margin-top: 0.9rem;
    padding-top: 0.9rem;
    border-top: 1px solid var(--color-border);
    font-size: var(--text-sm);
}


/* =========================================================================
   ЗАГЛАВНАТА ЛЕНТА НА ТЕЛЕФОН: ЗНАЦИТЕ НА ЕС ПОЛУЧАВАТ СВОЙ РЕД
   (19.08.2026, след оплакване, че се „изяждат“)

   ДВЕ ОТДЕЛНИ ГРЕШКИ СЕ ОПРАВЯТ ТУК.

   1. Логото се СПЛЕСКВАШЕ. Картинка със зададена височина и `width: auto`
      в грид клетка `minmax(0, 1fr)` не запазва пропорцията си — свива се
      само по ширина. Оправено горе с `max-width: 100%` + `object-fit`.

   2. Знаците на ЕС нямаха място. Дотук те просто изчезваха под 1024px —
      което е скриване, не адаптиране. Сега лентата на телефон има ТРИ
      реда и знаците са на свой, центриран ред:

          [ лого ] [ език ] [ кошница ] [ бутон меню ]
          [ знаците на ЕС — под логото, от лявата ос ]
          [           КЛИЕНТСКИ ПОРТАЛ               ]

   `display: contents` върху обвивката маха самата нея от грида, за да
   могат `.brand` и `.brand-eu` да заемат СВОИ клетки. Иначе `grid-area`
   върху тях няма никакво действие — те не са преки деца на грида.
   ========================================================================= */
@media (max-width: 47.5rem) {
    .header-inner {
        grid-template-areas:
            "brand  lang   cart   toggle"
            "eu     eu     eu     eu"
            "portal portal portal portal";
    }

    .brand-block { display: contents; }
    .brand { grid-area: brand; min-width: 0; display: block; }
    .brand-picture { width: 100%; }

    /* ⚠️ ТУК ШИРИНАТА ВОДИ, НЕ ВИСОЧИНАТА. Клетката е тясна и с точно
       определена ширина; логото се вписва в нея и височината му следва.
       `aspect-ratio` пази мястото ПРЕДИ картинката да се зареди — иначе
       лентата подскача (CLS). Съотношението е на ИЗПРАВЕНОТО лого, което
       `<picture>` подава под 760px. */
    .brand-logo {
        width: 100%;
        max-width: 11.5rem;
        height: auto;
        max-height: none;
        aspect-ratio: 800 / 246;
        margin: 0;                 /* вляво, не центрирано */
    }

    /* ⚠️ ОБЩА ЛЯВА ОС С ЛОГОТО. Откакто „Меню“ е най-вдясно, колона 1 е
       само на бранда и знаците на ЕС тръгват от същата граница като
       логото — без изкуствено отместване. Четат се като един блок: кой
       сме ние и по кой проект е сайтът. */
    .brand-eu {
        grid-area: eu;
        justify-self: start;
        padding: 0;
        margin-top: 0.1rem;
        gap: 0.75rem;
    }
    .brand-eu img { height: 1.05rem; max-width: 46%; }
}

/* Под 26rem (320px) остава място само за иконата на менюто — знаците се
   свиват още, но НЕ изчезват: публичността по проекта е задължителна. */
@media (max-width: 26rem) {
    .brand-logo { max-width: 9.5rem; }
    .brand-eu { gap: 0.5rem; }
    .brand-eu img { height: 0.9rem; }
}


/* =========================================================================
   ПЛАВАЩА ЦЕНА И ЦЕНТРИРАНИ ИЗХОДИ (19.08.2026)
   Добавено НАКРАЯ, без да се пипа нищо по-горе. Всичко тук е добавъчен
   клас върху съществуващ: старият вид остава валиден навсякъде другаде.
   ========================================================================= */

/* „Не сте сигурни коя услуга ви трябва?“ — заглавие, текст и бутон в една
   централна ос. Разположението „текст вляво, бутон вдясно“ работи, докато
   лентата е сама; тук под нея стои втора карта и двете се четяха като две
   несвързани секции, залепени по случайност. */
.band-cta-centered {
    flex-direction: column;
    justify-content: center;
    text-align: center;
}
.band-cta-centered > div { max-width: 44rem; margin-inline: auto; }
.band-cta-centered .btn { flex: none; }

/* Втората карта в същата лента следва същата ос. Ивицата отляво отпада —
   тя води окото наляво, тоест точно срещу центрирането. */
.consult-promo-centered {
    flex-direction: column;
    justify-content: center;
    text-align: center;
    border-left-width: 1px;
    border-left-color: var(--color-border);
}
.consult-promo-centered .consult-promo-body { margin-inline: auto; }
.band-accent .consult-promo-centered,
.band-navy .consult-promo-centered { border-left-color: rgba(255, 255, 255, 0.28); }

/* Уводът на плаващата цена е центриран, а калкулаторът и сметката под него
   остават както са: изборът и числата се четат по-добре подравнени вляво. */
.flexband-head-centered { text-align: center; }
.flexband-head-centered .band-lead { max-width: 52rem; margin-inline: auto; }

/* ТРЗ по действително обработени ведомости. Полето стои отделено от
   документите с тънка линия — двата въпроса са различни по вид, а не две
   части на един. Скрива се от скрипта, когато тарифата няма цена за
   ведомост (`hidden` от шаблона важи и без JavaScript). */
.flexcalc-payslips {
    margin-top: var(--space-4, 1rem);
    padding-top: var(--space-4, 1rem);
    border-top: 1px solid var(--color-border);
}
.flexcalc-payslips[hidden] { display: none; }
.flexcalc-payslips .flexcalc-number { margin-top: 0.35rem; }

/* Формата за плащане на основата — по една на профил, видима е тази на
   активния раздел. Адресът на формата носи продукта, тоест и цената:
   затова се СКРИВА, а не се пренаписва от скрипта. */
.flexcalc-buy { display: none; }
.flexcalc-buy.is-active { display: block; }
.flexcalc-buy .btn { width: 100%; }


/* =========================================================================
   ЛОГО ВЪТРЕ В БАНЕР („Контакти“) — 19.08.2026

   Заглавието се изтегля нагоре, а логото стои под него, върху снимката.

   ⚠️ ЛОГОТО Е В СЪДЪРЖАНИЕТО, НЕ ВЪВ ФОНА. Фоновият слой (`::before`) се
   движи бавно; сложено там, логото щеше да „плува“ заедно със снимката.
   Тук стои неподвижно, точно както заглавието.

   ⚠️ Бялата версия липсва, а логото е тъмносиньо върху затъмнена снимка.
   Затова е върху собствена светла подложка със заоблени ъгли — не защото
   е красиво, а защото иначе не се чете. Подложката е полупрозрачна, за да
   не изглежда като залепен стикер.
   ========================================================================= */
.banner-with-brand .banner-inner { padding-block: clamp(1.5rem, 3.5vw, 2.5rem); }
.banner-with-brand h1 { margin-bottom: 0; }

.banner-brand {
    display: block;
    width: 100%;
    max-width: clamp(11rem, 26vw, 19rem);
    height: auto;
    margin: clamp(1rem, 2.5vw, 1.6rem) auto 0;
    padding: clamp(0.5rem, 1.2vw, 0.85rem) clamp(0.9rem, 2vw, 1.4rem);
    background: rgba(255, 255, 255, 0.92);
    border-radius: var(--radius-pill);
    box-shadow: 0 6px 24px rgba(13, 20, 45, 0.28);
}
.banner-with-brand .banner-sub { margin-top: clamp(1rem, 2.5vw, 1.5rem); }

/* Банерът на „Контакти“ е портретна снимка и вече е по-висок от другите;
   с логото вътре му трябва още малко въздух, за да не се събере всичко. */
.banner-contacts.banner-with-brand { min-height: clamp(17rem, 40vw, 28rem); }

@media (max-width: 30rem) {
    /* На най-тесните екрани подзаглавието отстъпва на логото — три
       текстови блока плюс лого в един банер стават стена. */
    .banner-brand { max-width: 13rem; }
    .banner-with-brand .banner-sub { font-size: 0.98rem; }
}


/* =========================================================================
   СТРАНИЦАТА ЗА ПЛАТЕНА КОНСУЛТАЦИЯ — ПРЕРАБОТКА (19.08.2026)

   Взети са СЪЩЕСТВУВАЩИ шарки от сайта, вместо да се измислят нови:
   списъкът с отметки от „На какво държим“ и хармониката от „Казуси“.
   Причината е проста — човек, който е дошъл от началната страница, вече
   е научил как изглеждат тези две неща.
   ========================================================================= */
.banner-consultation::before { background-image: url("../images/banner-consultation.b131891dd3f4.jpg"); }

/* Уводът е центриран и с по-широк ред — той е обещанието на страницата. */
.paidcons-lead {
    max-width: 44rem;
    margin: 0 auto 1.5rem;
    text-align: center;
    font-size: clamp(1.02rem, 1.5vw, 1.15rem);
}

/* Списъкът с отметки в ЕДНА колона и центриран. `.about-values` иначе е
   двуколонен — тук всяка точка е обещание и се чете една по една. */
.about-values-stacked {
    grid-template-columns: 1fr !important;
    max-width: 42rem;
    margin-inline: auto;
    text-align: center;
}
/* ⚠️ `display: block`, а не `flex`. Във флекс редът отметката е отделна
   колона и остава залепена за левия ръб, докато текстът се центрира —
   двете се разделят и ✓ увисва самичко. Като инлайн знак пред текста тя
   се центрира ЗАЕДНО с него. */
.about-values-stacked li {
    display: block;
    text-align: center;
}
.about-values-stacked li::before {
    display: inline;
    margin-right: 0.5rem;
}

/* --- Често задавани въпроси: хармониката от „Казуси“, центрирана --- */
.paidcons-faq { margin-top: var(--space-6, 2.5rem); }
.paidcons-faq h2 { text-align: center; margin-bottom: var(--space-5, 1.5rem); }
.cases-list-centered { max-width: 48rem; margin-inline: auto; }
.cases-list-centered .case-title,
.cases-list-centered .case-body { text-align: center; }
.cases-list-centered .case-body p { margin-inline: auto; max-width: 40rem; }

/* --- Данните: центрирани полета --- */
.paidcons-fields {
    max-width: 48rem;
    margin-inline: auto;
}
.paidcons-fields .form-field label { display: block; text-align: center; font-weight: 600; }
.paidcons-fields .form-hint,
.paidcons-fields .field-error { text-align: center; }

/* Отметката „Искам фактура“ и съгласието — центрирани като заглавията
   над тях, за да не увиснат вляво под центрирана колона полета. */
.paidcons-invoice-toggle,
.paidcons-consent {
    display: flex;
    justify-content: center;
    max-width: 48rem;
    margin-inline: auto;
}
.paidcons-invoice-toggle .checkline,
.paidcons-consent .checkline { max-width: 34rem; }

/* ⚠️ `align-items: center`, а не `flex-start`: текстът на съгласието е на
   два реда и квадратче, залепено за първия, изглежда недовършено. */
/* ⚠️ СПЕЦИФИЧНОСТТА ТУК Е РЕШАВАЩА (20.08.2026). `.checkline-middle` сам
   по себе си е (0,1,0) и губеше от `.form-field-check .checkline` (0,2,0)
   с неговото `align-items: flex-start`. Затова квадратчето продължаваше
   да стои НАД надписа въпреки класа. Селекторът е изравнен нарочно. */
.form-field-check .checkline.checkline-middle { align-items: center; }
.form-field-check .checkline-middle input[type="checkbox"] { margin-top: 0; }

/* Полетата за фактура са визуално отделени — те се появяват и изчезват и
   без рамка около тях появата им изглежда като разместване на страницата. */
.paidcons-invoice-fields {
    padding: clamp(1rem, 2.5vw, 1.4rem);
    margin-top: 0.75rem;
    margin-bottom: 0.75rem;
    background: var(--color-accent-bg);
    border-radius: var(--radius-lg, var(--radius));
}
.paidcons-invoice-fields[hidden] { display: none; }

/* Заключеният бутон трябва да ИЗГЛЕЖДА заключен, иначе човек го натиска и
   решава, че страницата не работи. */
.btn[disabled],
.btn[aria-disabled="true"] {
    opacity: 0.45;
    cursor: not-allowed;
    box-shadow: none;
}

@media (max-width: 40rem) {
    .paidcons-fields { grid-template-columns: 1fr; }
}


/* =========================================================================
   ЗАЩИТА СРЕЩУ ХОРИЗОНТАЛНО ИЗЛИЗАНЕ ПРИ 320px (19.08.2026)
   На най-тесния екран дълъг надпис в бутон („Виж на картата (Google Maps)“)
   разпъва бутона над ширината на контейнера и цялата страница започва да
   се плъзга настрани. Ограничението е върху ВСИЧКИ бутони, за да не се
   налага да се гони всеки отделен случай.
   ========================================================================= */
.btn {
    max-width: 100%;
}

@media (max-width: 26rem) {
    /* Под 416px надписът има право да се пренесе на два реда — по-добре
       по-висок бутон, отколкото плъзгаща се страница. */
    .btn {
        white-space: normal;
        padding-inline: 1rem;
        text-align: center;
    }
}


/* =========================================================================
   ТАЛОНЪТ НА ПЛАТЕНАТА КОНСУЛТАЦИЯ (19.08.2026)

   Старият вид беше списък „етикет — стойност“ на еднакво тегло: пет реда,
   в които часът тежеше колкото имейла. Човек отваря тази страница заради
   ЕДНО нещо — кога е срещата — и второ по важност — колко плаща. Затова
   първият ред е талон в основния нюанс, сумата е с едра цифра, а личните
   данни остават дребни отдолу.

   Добавъчни класове върху съществуващия `.paidcons-summary`: старите
   правила по-горе остават валидни и не са пипани.
   ========================================================================= */
.paidcons-summary {
    background: var(--color-card);
    box-shadow: 0 10px 30px rgba(13, 20, 45, 0.07);
}

.paidcons-summary .psum-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.35rem 1.25rem;
    padding: 0.85rem 1.15rem;
}
.paidcons-summary .psum-row dt {
    flex: 0 0 auto;
    font-size: 0.76rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.paidcons-summary .psum-row dd {
    flex: 1 1 auto;
    margin: 0;
    text-align: right;
    font-weight: 600;
    /* Дълъг имейл се пренася, вместо да разпъва талона настрани. */
    overflow-wrap: anywhere;
}

/* --- Първият ред: кога --------------------------------------------------
   Обърнат ред спрямо останалите: тук стойността е важна, не етикетът,
   затова часът заема цялата ширина и е подравнен вляво като заглавие. */
.paidcons-summary .psum-lead {
    display: block;
    padding: clamp(1.1rem, 3vw, 1.5rem) 1.15rem;
    background: linear-gradient(135deg,
        var(--color-accent-bg) 0%,
        var(--color-card) 100%);
    border-bottom: 1px solid var(--color-border);
}
.paidcons-summary .psum-lead dd { text-align: left; }
.paidcons-summary .psum-date {
    display: block;
    font-family: var(--font-display, inherit);
    font-size: clamp(1.15rem, 2.6vw, 1.5rem);
    font-weight: 700;
    line-height: 1.25;
    /* Датата идва от `date:"l, j E Y"` — на български започва с малка
       буква („петък“), а като заглавие се чете по-добре с главна. */
    text-transform: capitalize;
}
.paidcons-summary .psum-time {
    display: inline-block;
    margin-top: 0.45rem;
    padding: 0.2rem 0.7rem;
    border-radius: var(--radius-pill);
    background: var(--color-primary);
    color: #fff;
    font-size: 0.95rem;
    font-weight: 700;
    letter-spacing: 0.01em;
}
.paidcons-summary .psum-duration {
    display: inline-block;
    margin: 0.45rem 0 0 0.6rem;
    color: var(--color-muted);
    font-size: 0.85rem;
    font-weight: 600;
}

/* --- Сумата ------------------------------------------------------------- */
.paidcons-summary .psum-price dd {
    font-family: var(--font-display, inherit);
    font-size: clamp(1.35rem, 3.2vw, 1.75rem);
    font-weight: 700;
    color: var(--color-primary-dark, var(--color-primary));
    line-height: 1.1;
}

/* Втори ред под името: фирмата и ЕИК-ът не са на едно тегло с човека. */
.paidcons-summary .psum-sub {
    display: block;
    margin-top: 0.15rem;
    color: var(--color-muted);
    font-size: 0.85rem;
    font-weight: 500;
}

@media (max-width: 30rem) {
    /* На тесен екран етикетът застава НАД стойността: две къси колони
       на 320px правят от „Продължителност“ стълбица от срички. */
    .paidcons-summary .psum-row { display: block; }
    .paidcons-summary .psum-row dd { text-align: left; margin-top: 0.15rem; }
}


/* =========================================================================
   ДРЕБНИ ПОПРАВКИ ПО ОБРАТНА ВРЪЗКА (19.08.2026)
   ========================================================================= */

/* „Вашият казус не е тук?“ ползва вече готовия `.band-cta-centered`
   (виж по-горе) — само се добавя в шаблона. Тук няма ново правило нарочно:
   два класа за едно и също нещо се разминават при първата промяна. */

/* Отметката „Искам фактура на фирма“ вече носи `checkline-middle` в
   шаблона — квадратчето е на едно ниво с надписа, както при съгласието.
   Тук остава само подсигуровка за самия `input`: някои браузъри му слагат
   собствен вертикален отстъп, който изтегля квадратчето нагоре. */
.paidcons-invoice-toggle .checkline input[type="checkbox"] {
    margin-block: 0;
}


/* =========================================================================
   КАРТА „ПЛАТЕНА КОНСУЛТАЦИЯ“ В ЧАТА (19.08.2026)

   ЗАЩО КАРТА, А НЕ ВРЪЗКА
   Досега единственият ПЛАТЕН изход от разговора беше чипче — същата
   форма, същият размер и същият цвят като бутоните с нови въпроси. Тоест
   предложението, което носи приход, изглеждаше като поредната тема и се
   подминаваше. Картата е единственият елемент в нишката със свой фон,
   свой ръб и едър бутон — окото я хваща без да я търси.

   Тъмна е нарочно: целият разговор е на светъл фон и балончета, така че
   обръщането на контраста я вади напред без да добавя нов цвят.
   ========================================================================= */
.chat-consult-card {
    position: relative;
    margin: 0.85rem 0 0.25rem;
    padding: 1rem 1.05rem 0.9rem;
    border-radius: 18px;
    background:
        radial-gradient(120% 140% at 100% 0%, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0) 55%),
        linear-gradient(135deg, var(--color-primary-dark, #2c1c8a) 0%, var(--color-primary, #5b21e0) 100%);
    color: #fff;
    box-shadow: 0 14px 34px rgba(30, 20, 80, 0.28);
    /* Появява се насред разговор — плавно, за да не „скача“ екранът. */
    animation: chat-consult-in 0.32s ease-out both;
}
@keyframes chat-consult-in {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
    .chat-consult-card { animation: none; }
}

/* Краят на разговора носи тънък светъл ръб — единственият сигнал, че тази
   карта е ПОСЛЕДНОТО нещо, а не поредното предложение между отговорите. */
.chat-consult-card.is-closing {
    box-shadow: 0 14px 34px rgba(30, 20, 80, 0.34), 0 0 0 2px rgba(255, 255, 255, 0.22);
}

.chat-consult-eyebrow {
    margin: 0 0 0.35rem;
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.72);
}

.chat-consult-headline {
    margin: 0 0 0.7rem;
    font-family: var(--font-display, inherit);
    font-size: 1.02rem;
    font-weight: 700;
    line-height: 1.3;
    color: #fff;
}

/* Отметките са ✓ през `::before`, не списъчни точки: три реда полза се
   четат като списък от обещания, а не като изброяване. */
.chat-consult-list {
    margin: 0 0 0.85rem;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 0.3rem;
}
.chat-consult-list li {
    position: relative;
    padding-left: 1.25rem;
    font-size: 0.82rem;
    line-height: 1.4;
    color: rgba(255, 255, 255, 0.9);
}
.chat-consult-list li::before {
    content: "✓";
    position: absolute;
    left: 0;
    top: 0;
    font-weight: 700;
    color: #7ef0c2;
}

.chat-consult-action {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
}

/* Бутонът е БЯЛ върху тъмното: най-силният контраст, който има на екрана,
   и единственият такъв в целия панел. */
.chat-consult-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    min-height: 2.6rem;
    padding: 0 1.1rem;
    border-radius: var(--radius-pill, 999px);
    background: #fff;
    color: var(--color-primary-dark, #2c1c8a);
    font-size: 0.88rem;
    font-weight: 700;
    text-decoration: none;
    box-shadow: 0 6px 16px rgba(10, 6, 40, 0.28);
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}
/* Стрелката е в `::after`, за да не влиза в превода на етикета. */
.chat-consult-btn::after {
    content: "→";
    font-size: 1rem;
    line-height: 1;
    transition: transform 0.18s ease;
}
.chat-consult-btn:hover,
.chat-consult-btn:focus-visible {
    text-decoration: none;
    transform: translateY(-1px);
    box-shadow: 0 10px 22px rgba(10, 6, 40, 0.34);
}
.chat-consult-btn:hover::after,
.chat-consult-btn:focus-visible::after { transform: translateX(3px); }
.chat-consult-btn:focus-visible {
    outline: 2px solid #fff;
    outline-offset: 3px;
}
@media (prefers-reduced-motion: reduce) {
    .chat-consult-btn,
    .chat-consult-btn::after { transition: none; }
    .chat-consult-btn:hover { transform: none; }
}

.chat-consult-price {
    font-size: 0.82rem;
    font-weight: 700;
    color: rgba(255, 255, 255, 0.92);
    white-space: nowrap;
}

.chat-consult-fine {
    margin: 0.7rem 0 0;
    font-size: 0.72rem;
    line-height: 1.45;
    color: rgba(255, 255, 255, 0.68);
}

/* На най-тесния панел бутонът заема цял ред — цената под него, не до него. */
@media (max-width: 26rem) {
    .chat-consult-action { flex-direction: column; align-items: stretch; }
    .chat-consult-btn { justify-content: center; }
    .chat-consult-price { text-align: center; }
}


/* =========================================================================
   ЕЗИКЪТ КАТО ЕДИН БУТОН НА ТЕСЕН ЕКРАН (20.08.2026)

   ЗАЩО. На първия ред стоят лого, език, кошница и „Меню“. „BG | EN“ заема
   място за две думи, а казва едно: текущият език е подчертан, другият е
   връзка. На тесен екран това е и двусмислено — хората не са сигурни кое
   е бутон и кое е етикет.

   РЕШЕНИЕТО Е БЕЗ ПРОМЯНА В ШАБЛОНА: скрива се бутонът на ТЕКУЩИЯ език и
   остава само другият. Тогава надписът е и действие, и обещание — „EN“
   означава „мини на английски“. Така работят и повечето сайтове, които
   поддържат два езика.

   ⚠️ Разделителят „|“ се рисува от `.lang-switch form + form::before` —
   ако не се махне, остава сирак пред единствения бутон.
   ========================================================================= */
@media (max-width: 47.5rem) {
    .lang-switch .lang-btn.active { display: none; }
    /* Формата на скрития език е `display: contents`, но нейният псевдо-
       елемент пак се рисува — затова разделителят пада заедно с бутона. */
    .lang-switch form + form::before { content: none; }

    /* Останалият бутон вече не е дискретна текстова връзка, а действие:
       малко хапче с ръб, което се чете като бутон и е достатъчно голямо
       за пръст. */
    .lang-switch .lang-btn {
        min-height: 2.1rem;
        padding: 0 0.6rem;
        border: 1px solid var(--color-border);
        border-radius: var(--radius-pill, 999px);
        background: var(--color-bg);
        color: var(--color-primary-dark, var(--color-primary));
        font-size: 0.76rem;
        font-weight: 700;
        letter-spacing: 0.06em;
        text-decoration: none;
    }
    .lang-switch .lang-btn:hover,
    .lang-switch .lang-btn:focus-visible {
        border-color: var(--color-primary);
        color: var(--color-primary);
        text-decoration: none;
    }
}


/* =========================================================================
   ПОПРАВКИ ОТ 20.08.2026 — втора порция
   ========================================================================= */

/* --- Банер със снимката от началната страница ---------------------------
   Страницата на заявката за консултация влизаше с празен лилав
   правоъгълник. Механиката е на `.page-banner::before` (по-горе) — тук се
   подава само снимката. */
.banner-hero::before { background-image: url("../images/hero.cdd77ec902d9.webp"); }


/* --- „За кого е“ при плаващата цена -------------------------------------
   Три примера в ред, не абзац: човек се разпознава по дейността си за
   секунда, а определението „сезонна дейност“ иска четене. */
/* ⚠️ КОЛОНА, НЕ РЕД (22.08.2026): трите примера бяха плочки в общ ред,
   пренасящи се на различна ширина — на средна ширина втората плочка
   увисваше сама на нов ред, разместена спрямо центъра. Едно под друго,
   центрирани, оста е една и съща на всяка ширина. */
.flexband-audience {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.6rem;
    margin: clamp(1rem, 2.5vw, 1.4rem) auto 0;
    padding: 0;
    max-width: 34rem;
    list-style: none;
}
/* Отметка пред всеки вид — същият знак като в „На какво държим“ и в
   картата на консултацията. Три реда без нея се четат като изброяване;
   с нея — като „да, това сме ние“. */
.flexband-audience li {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.4rem 0.95rem 0.4rem 0.8rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-pill, 999px);
    background: var(--color-card);
    color: var(--color-text);
    font-size: 0.84rem;
    font-weight: 600;
}
.flexband-audience li::before {
    content: "✓";
    flex: none;
    font-weight: 700;
    color: var(--color-primary);
}


/* --- Двете суми в калкулатора -------------------------------------------
   ⚠️ ГОЛЯМАТА ЦИФРА Е ПРИМЕР, НЕ СМЕТКА ЗА ПЛАЩАНЕ. Дотук тя стоеше
   непосредствено над бутона „плати“ и всеки нормален човек четеше двете
   като едно. Разделителят и ясният надпис „плащате сега само основата“
   правят прехода видим. */
.flexcalc-later {
    margin: 0.85rem 0 0;
    padding: 0.6rem 0.75rem;
    border-radius: var(--radius);
    background: var(--color-accent-bg);
    color: var(--color-primary-dark, var(--color-primary));
    font-size: 0.82rem;
    font-weight: 600;
    line-height: 1.5;
}

.flexcalc-now-label {
    margin: 1.1rem 0 0.45rem;
    padding-top: 1.1rem;
    border-top: 1px dashed var(--color-border);
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--color-muted);
}

/* Бутонът носи и сумата — „плати“ без число кара човек да гадае колко. */
.flexcalc-cta {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: center;
    gap: 0.15rem 0.6rem;
}
/* ⚠️ БЕЗ РАЗДЕЛИТЕЛНА ЧЕРТА. Колоната с резултата е тясна и надписът с
   цената се пренася на втори ред — тогава вертикална черта отляво увисва
   над цифрата като случайна линия. Хапчето работи и на един, и на два
   реда. */
.flexcalc-cta-price {
    padding: 0.1rem 0.55rem;
    border-radius: var(--radius-pill, 999px);
    background: rgba(255, 255, 255, 0.18);
    font-weight: 800;
    white-space: nowrap;
}


/* --- Обяснението в кошницата --------------------------------------------
   Философията на плаващата цена — на екрана, на който се плаща. */
.cart-row-explain {
    margin: 0.7rem 0;
    padding: 0.75rem 0.9rem;
    border-left: 3px solid var(--color-primary);
    border-radius: 0 var(--radius) var(--radius) 0;
    background: var(--color-accent-bg);
}
.cart-row-explain p {
    margin: 0 0 0.4rem;
    font-size: 0.85rem;
    line-height: 1.55;
    color: var(--color-text);
}
.cart-row-explain p:last-child { margin-bottom: 0; }


/* --- Талонът на консултацията: какво се центрира и какво не -------------
   Часът е заглавие на талона — центриран, с продължителността под него.
   Сума / За / Имейл / Телефон остават „етикет вляво, стойност вдясно“:
   там окото сравнява стойности и подравняването отдясно помага. */
.paidcons-summary .psum-lead { text-align: center; }
.paidcons-summary .psum-lead dt {
    display: block;
    margin-bottom: 0.35rem;
}
.paidcons-summary .psum-lead dd { text-align: center; }
.paidcons-summary .psum-date { text-align: center; }
/* Продължителността слиза ПОД часа — двете на един ред се четат като едно
   изречение и часът губи тежестта си. */
.paidcons-summary .psum-duration {
    display: block;
    margin: 0.4rem 0 0;
}

/* Двата абзаца със състоянието и бутонът „Към плащането“ — по средата на
   кутията, както и часът над тях. */
.paidcons-cta {
    text-align: center;
}
.paidcons-cta .btn {
    margin-inline: auto;
}
.paidcons-hold,
.paidcons-ok,
.paidcons-fineprint {
    margin-inline: auto;
    max-width: 34rem;
}


/* =========================================================================
   ПОПРАВКИ ОТ 20.08.2026 — трета порция
   ========================================================================= */

/* --- Талонът стоеше вляво -----------------------------------------------
   `.paidcons-status` има `max-width: 46rem`, но без `margin-inline: auto`
   ограничението само реже дясната страна — блокът увисва вляво в широк
   екран. Заглавието на банера над него е центрирано и разминаването се
   вижда веднага. */
.paidcons-status {
    margin-inline: auto;
}

/* --- Заглавие на раздел с двете чертички ---------------------------------
   Същата украса като на „На какво държим“ (`.band-split-head` по-горе),
   но като САМОСТОЯТЕЛЕН клас: разделите, добавени в последните два дни,
   имат свои обвивки и не могат да ползват онзи селектор, без да наследят
   и решетката му.

   ⚠️ Чертите са асиметрични НАРОЧНО — горната вляво, долната вдясно. Две
   центрирани черти се четат като украса; изместените — като дизайн. */
.section-head-marked {
    max-width: 46rem;
    margin-inline: auto;
    text-align: center;
}
.section-head-marked::before,
.section-head-marked::after {
    content: "";
    display: block;
    width: 5rem;
    height: 6px;
    border-radius: 999px;
    background-image: var(--gradient-accent);
    box-shadow: 0 2px 4px rgba(15, 23, 42, 0.25), 0 4px 12px rgba(124, 58, 237, 0.28);
}
.section-head-marked::before { margin: 0 auto var(--space-4) 0; }   /* вляво */
.section-head-marked::after  { margin: var(--space-4) 0 0 auto; }   /* вдясно */

/* Върху тъмна лента градиентът се губи — там чертите са светли. */
.band-navy .section-head-marked::before,
.band-navy .section-head-marked::after,
.band-accent .section-head-marked::before,
.band-accent .section-head-marked::after {
    background-image: none;
    background-color: rgba(255, 255, 255, 0.55);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}

/* ⚠️ ЕДНА КОЛОНА, НЕ РЕД. `.band-head` е `display: flex` с
   `justify-content: space-between` — заглавие вляво, връзка вдясно. При
   централна ос това разхвърля елементите: надредът увисва вдясно, а
   заглавието остава вляво и НИЩО не е на средата. Затова тук подредбата
   се задава наново: колона, всеки елемент центриран. */
.section-head-marked {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    /* Чертата отдолу на `.band-head` дублира долната чертичка. */
    border-bottom: 0;
}
.section-head-marked > * { max-width: 100%; }
.section-head-marked .eyebrow,
.section-head-marked > p,
.section-head-marked > h2,
.section-head-marked > h3 {
    margin-inline: auto;
    text-align: center;
}
/* Чертичките са преки деца на flex контейнера — без `align-self` те се
   разтягат по цялата ширина и стават линии, а не чертички. */
.section-head-marked::before { align-self: flex-start; }
.section-head-marked::after { align-self: flex-end; }


/* --- Калкулаторът: числото и надписът под него ---------------------------
   ⚠️ ЧИСЛОТО Е ОСТА. Дотук полето и думите до него стояха вляво под
   плъзгача и окото ги четеше като поредния ред от форма. Центрирано, с
   надписа ПОД него, се чете като резултат — това, което човек мени. */
.flexcalc-count-stacked {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.4rem;
    margin: 0.9rem 0 0.5rem;
    text-align: center;
}
.flexcalc-count-stacked .flexcalc-number {
    min-width: 6.5rem;
    text-align: center;
    font-size: 1.35rem;
    font-weight: 700;
}
.flexcalc-count-stacked > span {
    font-size: 1rem;
    font-weight: 600;
    color: var(--color-text);
}

/* Пояснителните редове са в курсив: това са правила и уговорки, а не
   част от въпроса — курсивът ги отделя, без да добавя нов цвят. */
.flexcalc-hint-rule {
    font-style: italic;
}
.flexcalc-hint-rule:empty { display: none; }

.flexcalc-examples-title {
    margin: 1.6rem 0 0.5rem;
    font-size: 0.76rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--color-muted);
}
.flexcalc-examples-note {
    margin: 0.7rem 0 0;
    font-size: 0.85rem;
    font-style: italic;
    line-height: 1.55;
    color: var(--color-muted);
}

/* --- Картата с плащането: всичко на една централна ос -------------------- */
.flexcalc-result-label,
.flexcalc-price,
.flexcalc-now-label {
    text-align: center;
}
.flexcalc-buy { text-align: center; }
.flexcalc-fineprint { font-style: italic; }


/* --- Запазените часове в кошницата --------------------------------------
   Не е ред в кошницата (бройка не се мени, слотът има срок), но ИЗГЛЕЖДА
   като ред в кошницата — виж коментара при `.cart-hold`. */
.cart-holds { max-width: 62rem; margin-inline: auto; }
.cart-holds-title {
    margin: 0;
    font-family: var(--font-display, inherit);
    font-size: clamp(1.2rem, 2.4vw, 1.6rem);
    font-weight: 700;
}
/* Заглавието с чертичките носи собствен отстъп надолу — иначе двата се
   събират и картата се залепва за долната черта. */
.cart-holds .section-head-marked { margin-bottom: var(--space-5, 1.5rem); }
/* ⚠️ СЪЩАТА ФОРМА КАТО `.cart-row` (20.08.2026). Запазеният час и редът с
   услуга стоят един под друг на един екран — ако единият е заоблена карта
   с ръб отвсякъде, а другият плосък ред с лента отляво, четат се като две
   различни неща от два различни сайта. Стойностите тук са преписани от
   `.cart-row` нарочно: това е ЕДНА и съща форма, само съдържанието е друго. */
.cart-hold {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-4);
    padding: 1.1rem 1.25rem;
    margin-bottom: var(--space-3);
    border-left: 3px solid var(--color-primary);
    background: var(--color-card);
}
.cart-hold-info { min-width: 0; flex: 1 1 20rem; }
.cart-hold-name { margin: 0 0 0.2rem; font-weight: 700; }
.cart-hold-when {
    margin: 0 0 0.3rem;
    color: var(--color-primary-dark, var(--color-primary));
    font-weight: 600;
    text-transform: capitalize;
}
.cart-hold-note {
    margin: 0;
    font-size: 0.82rem;
    font-style: italic;
    color: var(--color-muted);
}
.cart-hold-actions {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    flex-wrap: wrap;
}
.cart-hold-price {
    margin: 0;
    font-family: var(--font-display, inherit);
    font-size: 1.35rem;
    font-weight: 700;
    white-space: nowrap;
}


/* --- Групите в кошницата: „Запазени часове“ / „Услуги“ ------------------
   Едно платно с две групи, не две кошници (виж коментара в
   templates/orders/cart.html). Заглавието на групата е ЕТИКЕТ, не рубрика:
   малко, разредено, с цвета на второстепенния текст — същият почерк като
   „ОБЩА СУМА“ в обобщението. Ако беше едро заглавие, двете групи щяха да
   изглеждат като два отделни раздела на страницата. */
.cart-group-title {
    /* Без собствен отстъп: разстоянието до картата идва от `gap` на
       `.cart-items`. Двете заедно даваха 35px и колоните се разминаваха. */
    margin: 0;
    font-size: 0.6875rem;
    font-weight: 800;
    line-height: 1.4;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--color-muted);
}
/* Втората група („Услуги“) идва след карта — трябва ѝ въздух отгоре.
   Първата няма нужда: тя започва колоната. */
.cart-group-title + .cart-row { margin-top: 0; }
.cart-row + .cart-group-title { margin-top: var(--space-3); }

/* ⚠️ ПОДРАВНЯВАНЕ НА ДВЕТЕ КОЛОНИ (20.08.2026).
   Отляво колоната започва с етикет на група, отдясно — направо с бялата
   карта. Затова първата карта отляво тръгваше по-ниско от обобщението и
   двете колони се четяха като разместени. Обобщението слиза с точно
   височината на етикета (ред + `gap`-а до първата карта), за да тръгнат
   двете карти от един и същ ред. `:has` пази случая без групи (само
   услуги, без часове) — там етикет няма и нищо не се мести.
   ⚠️ ИЗМЕРЕНО: 0.6875rem × 1.4 = 15.4px ред + 12px gap = 27.4px. Ако се
   смени шрифтът на етикета или `gap`-ът на `.cart-items`, се мени и тук. */
@media (min-width: 64rem) {
    .cart-layout:has(.cart-group-title) .cart-summary {
        margin-top: calc(0.6875rem * 1.4 + var(--space-3));
    }
}

/* Запазеният час е ред в общата решетка — разстоянието идва от `gap` на
   `.cart-items`. Собственият отстъп на `.cart-hold` се събираше с него. */
.cart-items .cart-hold { margin-bottom: 0; }
/* Текстът се свива, вместо да избутва действията на нов ред. Пояснението
   „Часът е запазен за вас…“ е дълго и без това правило „Виж часа“ и
   „Премахни“ падаха под него — за разлика от редовете с услуги. */
.cart-hold > .cart-row-info { flex: 1 1 18rem; min-width: 0; }

/* „Виж часа“ — второстепенно действие до „Премахни“, затова е връзка, а не
   бутон. Височината е като на `.btn-remove`, за да стоят на един ред. */
.cart-hold-link {
    display: inline-flex;
    align-items: center;
    min-height: var(--tap-target);
    font-size: 0.95rem;
    font-weight: 600;
}

/* Разбивката по вид в обобщението: показва се само когато има какво да се
   разбива (виж шаблона), затова тук няма празен случай за оправяне. */
.cart-breakdown {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: var(--space-2);
    font-size: var(--text-sm);
}
.cart-breakdown li {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--space-3);
}
.cart-breakdown li > span { color: var(--color-muted); }
.cart-breakdown strong { font-variant-numeric: tabular-nums; white-space: nowrap; }


/* --- Уводът на платената консултация: заглавие + цена в ЕДИН украсен
   параграф (20.08.2026) ---------------------------------------------------
   Заглавието слезе от банера тук, а картата с цената влезе ВЪТРЕ в
   украсения параграф — дотук тя стоеше извън него и двете чертички
   ограждаха само текста.

   ⚠️ `.section-head-marked` е тясна колона (46rem) с централна ос — точно
   каквото трябва за заглавие, но не и за две колони. Затова тук се
   разширява и се пуска да се разтяга; чертичките пазят своя `align-self`
   и остават чертички, а не линии по цялата ширина. */
/* ⚠️ ЕДНА КОЛОНА, НЕ ДВЕ (20.08.2026). Опитът с текст вляво и цена вдясно
   не се получава по аритметика: редът иска ~44rem, картата ~20rem, а
   лентата е ~68rem. Двете една до друга изместват текста вляво от средата
   на страницата и целият увод се чете като подравнен вляво — при положение
   че всичко останало на страницата (въпросите под календара, „На какво
   държим“) е на централна ос. Затова картата слиза ПОД текста и се
   центрира като него. Оста е една за целия параграф.

   ⚠️ КАРТАТА Е СЛЕД `</section>`, НЕ В НЕЯ. Долната чертичка на украсения
   параграф е негов `::after` — вътре тя оставаше ПОД цената и затваряше
   ценоразпис вместо изречение. Изнесена навън, чертичката приключва текста
   и картата идва под нея. Виж шаблона. */
.paidcons-intro.section-head-marked {
    max-width: 60rem;
    margin-bottom: var(--space-5, 1.5rem);
}
.paidcons-price {
    margin-inline: auto;
    max-width: 22rem;
    /* Отстъпът, който по-рано носеше `.paidcons-intro` — сега картата е
       последното нещо преди стъпка 1. */
    margin-bottom: var(--space-6, 2.5rem);
}
/* Текстът на увода носи собствената си централна ос (той е заглавието на
   страницата), а не тази на обвивката. */
.paidcons-intro-text > h1 {
    margin: 0 auto var(--space-3);
    text-align: center;
}
.paidcons-intro-text > .eyebrow { margin-inline: auto; }


/* --- Календарът за платена консултация на телефон (20.08.2026) -----------
   ⚠️ ЧУЖДИ ПРАВИЛА ГО РАЗГЛОБЯВАХА. `.paidcons-grid` ползва решетката на
   портала (`.calendar-grid` / `.calendar-day`), а тя под 47.5rem се
   превръща в СПИСЪК само от дните със събития:

       .calendar-grid { display: block }
       .calendar-weekday { display: none }
       .calendar-day { display: none }        ← показва се само .has-events
       .calendar-day-num { display: none }

   Тук няма събития — има свободни часове. Затова на телефон излизаше
   колона от празни картички без числа и без имена на дните, а „9 часа“
   висеше самичко. Правилата отдолу връщат решетката САМО за тази страница;
   портала не се пипа — там списъкът е правилното решение, защото клетка
   с три събития не се чете на 375px.

   Специфичността е нарочно по-висока (`.paidcons-calendar .paidcons-grid`),
   за да бие правилата в онзи медиен блок, който стои по-нагоре във файла. */
@media (max-width: 47.5rem) {
    .paidcons-calendar .paidcons-grid {
        display: grid;
        grid-template-columns: repeat(7, minmax(0, 1fr));
        gap: 3px;
    }
    .paidcons-calendar .paidcons-grid .calendar-weekday {
        display: block;
        /* Три букви на 375px: „ПОН“ се събира, цялата дума — не. */
        font-size: 0.6rem;
        letter-spacing: 0;
        padding: 0;
    }
    .paidcons-calendar .paidcons-grid .calendar-day {
        display: flex;
        height: auto;
        min-height: 2.9rem;
        margin-bottom: 0;
        overflow: hidden;
        padding: 0.15rem;
    }
    .paidcons-calendar .paidcons-grid .calendar-day-num {
        display: block;
        font-size: 0.9rem;
        line-height: 1.1;
    }
    /* ⚠️ „9 часа“ ОТПАДА на телефон. В клетка от ~45px надписът или се
       чупи на три реда, или изяжда числото. Броят остава в `aria-label`
       на връзката — четецът на екран го казва, окото го научава от
       цвета: лилаво = има свободни часове. */
    .paidcons-calendar .paidcons-grid .paidcons-free { display: none; }
    /* Празните дни от съседния месец не бива да са невидими — иначе
       решетката се разминава с имената на дните отгоре. */
    .paidcons-calendar .paidcons-grid .calendar-day.is-outside {
        display: block;
        min-height: 2.9rem;
        background: none;
    }
}

/* =========================================================================
   ЕДИНЕН СТИЛ НА ЗАГЛАВИЯТА (22.08.2026) — трите места, които досега не
   ползваха чертичките (.band-split-head / .section-head-marked):
   началната страница („Как работим“, финалният призив) и трите страници
   за платена консултация. Класовете тук са НОВИ и самостоятелни — не
   пипат .page-about, .about-values, .consult-promo и т.н., за да не
   разместят вече одобрен вид другаде. Отзивчиви са по подразбиране,
   защото ползват clamp()/rem и наследяват брейкпойнтите на сайта.
   ========================================================================= */

/* „Как работим“ на началната страница: номерираният списък е ЦЕНТРИРАН,
   не двуколонен както досега (#how-it-works). Копие на .page-about
   .numlist, но като самостоятелен клас — списъкът се ползва и извън
   „За нас“, а централно подравняване там не винаги е искано. */
.numlist-centered { max-width: 44rem; margin-inline: auto; }
.numlist-centered li {
    grid-template-columns: minmax(0, 1fr);
    justify-items: center;
    gap: var(--space-2);
    text-align: center;
}
.numlist-centered li::before,
.numlist-centered li > * { grid-column: 1; }
.numlist-centered p { max-width: 58ch; margin-inline: auto; }

/* Финалният призив на началната страница: бутонът+телефонът и картата
   „Имате конкретен въпрос?“ стоят центрирани, едно под друго — вместо
   ляво подравнени в .band-split-body по подразбиране. */
.final-cta-body {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-6);
}
.final-cta-body .consult-promo { width: 100%; max-width: 42rem; }

/* Оцветен вариант на .consult-promo — лек лилав фон вместо бял панел,
   за раздел, който вече стои на бяла лента и има нужда от акцент. */
.consult-promo-tinted {
    background: var(--color-accent-bg);
    border-color: rgba(124, 58, 237, 0.18);
}

/* =========================================================================
   ПОПРАВКИ ОТ 22.08.2026 (по прегледа на локалния сървър)
   ========================================================================= */

/* Финалният призив: бутонът и телефонният ред стояха един до друг —
   стекнати и центрирани, телефонът се чете като алтернатива на бутона
   над него. Самостоятелен модификатор — .hero-actions се ползва и в
   hero-то, където подредбата в ред си остава. */
.hero-actions-stacked {
    flex-direction: column;
    align-items: center;
    text-align: center;
}

/* „За нас“, лента 1: двата уводни абзаца бяха с различен размер и стил —
   .about-lead беше едър акцент (сериф, получер), .measure — обикновен
   текст. Тук стават еднакви: размерът е средата между двата предишни
   (1.875rem/1.125rem → 1.375rem), стилът е на обикновен абзац, за да не
   изглежда единият като цитат, а другият като бележка под него.
   Класовете са само в .page-about — не пипат .about-lead/.measure другаде
   по сайта (визитки, консултации). */
.page-about .about-lead-matched,
.page-about .measure-matched {
    font-family: var(--font-body);
    font-weight: 400;
    font-size: 1.375rem;
    line-height: 1.55;
    letter-spacing: normal;
    color: var(--color-text);
}

/* „Данъчна консултация“: шестте кратки точки на решетка 2 колони × 3 реда
   (на тесен екран — една колона), центрирана като цялото съдържание под
   чертичките. Заключителното изречение излиза отделно като .paidcons-closing
   по-долу — затова тук няма :last-child изключение като в .about-values. */
.about-values-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0 var(--space-6);
    max-width: 40rem;
    margin-inline: auto;
}
@media (min-width: 30rem) {
    .about-values-grid { grid-template-columns: 1fr 1fr; }
}
.about-values-grid li { text-align: left; }

/* Заключителното изречение („Ако след консултацията станете наш клиент…“)
   — центрирано на цялата ширина, отделено с тънка линия от решетката. */
.paidcons-closing {
    max-width: 42rem;
    margin: var(--space-5) auto 0;
    padding-top: var(--space-4);
    border-top: 1px solid var(--color-border);
    text-align: center;
    font-size: 1.1875rem;
    line-height: 1.5;
    color: var(--color-text);
}

/* Раздел „Услуги“, картата „А ако въпросът ви е конкретен?“: трите вида
   платена консултация — един ред, центрирани, пренасят се на тесен екран.
   Самите бутони са .btn-secondary — същият стил, който картата ползваше и
   досега за единствената си връзка. */
.consult-promo-links {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-3);
}

/* ------------------------------------------------------------------
   КАЗУСИТЕ КАТО ПОДСТРАНИЦИ — /cases/<слъг>/
   (списъкът .cases-index на /cases/ и самата страница на един казус)

   ЗАЩО ТАКА, А НЕ ГОЛ ТЕКСТ В КОЛОНА
   Първият опит беше една тясна колона с прост текст. На широк екран тя
   стоеше ВЛЯВО (имаше max-width, но нямаше margin-inline: auto) и се
   четеше като недовършена страница. Тук страницата ползва същия език,
   с който е направен акордеонът на /cases/: бяла карта с тънък ръб и
   заоблен ъгъл, върху светлата лента. Затова изглежда като част от
   същия сайт, а не като статия, залепена отстрани.

   ЦВЯТ НЯМА НОВ. Всичко идва от променливите в :root.
   ------------------------------------------------------------------ */

/* Списъкът на /cases/ — решетка от карти, по образеца на каталога.
   Първият опит беше прост <ul> с връзка и ред описание: на широк екран
   десет такива реда изглеждат като бележник, а не като раздел на сайта.
   Цял ред е връзка, за да е мишената голяма и на телефон. */
.cases-index {
    list-style: none;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
    gap: var(--space-4);
    margin: 0 0 var(--space-5);
    padding: 0;
}

.cases-index > li { display: flex; }

.cases-index > li > a {
    display: flex;
    flex-direction: column;
    width: 100%;
    padding: var(--space-5);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    color: inherit;
    text-decoration: none;
    transition: border-color var(--transition), box-shadow var(--transition);
}

.cases-index > li > a:hover,
.cases-index > li > a:focus-visible {
    border-color: var(--color-primary);
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 10px 28px rgba(79, 70, 229, 0.1);
}

.cases-index h3 {
    margin: 0 0 var(--space-3);
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.1875rem;
    line-height: 1.3;
    color: var(--color-navy);
    text-wrap: balance;
}

.cases-index > li > a:hover h3 { color: var(--color-primary); }

.cases-index p {
    margin: 0 0 var(--space-4);
    color: var(--color-muted);
    font-size: 0.9375rem;
    line-height: 1.6;
}

/* Опашката на картата стои долу, за да са подравнени при различна дължина
   на описанието. */
/* Филтър по направление на /cases/ (V3, 11.09.2026). Обикновени връзки от
   сървъра. Текущият се вижда по три признака, не само по цвят: плътен фон,
   удебелен текст и отметка пред името. */
.cases-filter { margin: 0 0 var(--space-6); }
.cases-filter ul {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-2);
    margin: 0;
    padding: 0;
}
.cases-filter a {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    min-height: var(--tap-target);
    padding: 0.4rem 1rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-pill);
    background: var(--color-card);
    color: var(--color-text);
    font-size: 0.9375rem;
}
.cases-filter a:hover { border-color: var(--color-primary); text-decoration: none; }
.cases-filter a.is-current {
    border-color: var(--color-navy);
    background: var(--color-navy);
    color: #fff;
    font-weight: 700;
}
.cases-filter a.is-current::before { content: "✓"; }
.cases-filter-count {
    min-width: 1.5rem;
    padding: 0 0.4rem;
    border-radius: var(--radius-pill);
    background: var(--color-accent-bg);
    color: var(--color-primary-dark);
    font-size: 0.75rem;
    font-weight: 700;
    text-align: center;
}
.cases-filter a.is-current .cases-filter-count { background: rgba(255, 255, 255, 0.18); color: #fff; }

/* ---------- Направленията в чат помощника (V4) ---------------------------
   Радио бутони + `:checked ~` — работи без JavaScript, както и останалата
   част от уиджета. Счетоводството носи готовия FAQ; другите три дават кратка
   ориентация и две връзки. */
.chat-dirs { padding: 0 16px; }
.chat-dir-input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}
.chat-dir-chips { margin-bottom: 0.5rem; }
.chat-dir-chip { cursor: pointer; }
.chat-dir-input:nth-of-type(1):checked ~ .chat-dir-chips .chat-dir-chip:nth-child(1),
.chat-dir-input:nth-of-type(2):checked ~ .chat-dir-chips .chat-dir-chip:nth-child(2),
.chat-dir-input:nth-of-type(3):checked ~ .chat-dir-chips .chat-dir-chip:nth-child(3),
.chat-dir-input:nth-of-type(4):checked ~ .chat-dir-chips .chat-dir-chip:nth-child(4) {
    background: var(--chat-accent);
    color: #fff;
}
/* Видим фокус за клавиатура: радиото е скрито, рисуваме върху етикета. */
.chat-dir-input:nth-of-type(1):focus-visible ~ .chat-dir-chips .chat-dir-chip:nth-child(1),
.chat-dir-input:nth-of-type(2):focus-visible ~ .chat-dir-chips .chat-dir-chip:nth-child(2),
.chat-dir-input:nth-of-type(3):focus-visible ~ .chat-dir-chips .chat-dir-chip:nth-child(3),
.chat-dir-input:nth-of-type(4):focus-visible ~ .chat-dir-chips .chat-dir-chip:nth-child(4) {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}
.chat-dir-panel { display: none; }
.chat-dir-input:nth-of-type(1):checked ~ .chat-dir-panel-accounting,
.chat-dir-input:nth-of-type(2):checked ~ .chat-dir-panel-digital,
.chat-dir-input:nth-of-type(3):checked ~ .chat-dir-panel-eu,
.chat-dir-input:nth-of-type(4):checked ~ .chat-dir-panel-insurance { display: block; }
.chat-dirs .chat-bot-chips-form,
.chat-dirs .chat-bot-label { padding: 0; }
.chat-dir-text { margin: 0 0 0.5rem; font-size: 0.875rem; line-height: 1.45; color: var(--color-text); }
.chat-dir-links { display: flex; flex-wrap: wrap; gap: 0.75rem; margin: 0 0 0.25rem; font-size: 0.85rem; font-weight: 600; }
.chat-dir-note { margin: 0.6rem 0 0; font-size: 0.75rem; line-height: 1.4; color: var(--color-muted); }

/* ---------- Падащото меню „Бизнес решения“ (V4) --------------------------
   ⚠️ `<details>`, НЕ hover меню: отваря се с клик, с клавиатура и с
   докосване. Hover-only меню е недостъпно на телефон и капан за
   клавиатурата. `nav.js` добавя само Escape и затваряне при клик навън.

   На широк екран панелът е плаващ (абсолютно позициониран под бутона); под
   60rem менюто и без това е разгънат списък зад бутона „Меню“, затова там
   панелът е обикновен блок — без плаване и без изрязване. */
.nav-drop { position: relative; }
.nav-drop-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    min-height: var(--tap-target);
    padding: 0 0.9rem;
    border-radius: var(--radius-pill);
    color: var(--color-text);
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    list-style: none;
}
.nav-drop-toggle::-webkit-details-marker { display: none; }
.nav-drop-toggle:hover { color: var(--color-primary-dark); background: var(--color-accent-bg); }
.nav-drop[open] > .nav-drop-toggle { color: var(--color-primary-dark); background: var(--color-accent-bg); }
.nav-drop-toggle:focus-visible { outline: var(--focus-ring); outline-offset: 2px; }
.nav-drop-caret {
    width: 0.45rem;
    height: 0.45rem;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    rotate: 45deg;
    translate: 0 -2px;
    transition: rotate var(--transition);
}
.nav-drop[open] .nav-drop-caret { rotate: 225deg; translate: 0 2px; }
.nav-drop-panel {
    display: grid;
    gap: 2px;
    padding: 0.4rem;
}
.nav-drop-item {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    min-height: var(--tap-target);
    padding: 0 0.7rem;
    border-radius: var(--radius);
    color: var(--color-text);
    font-weight: 600;
    white-space: nowrap;
}
.nav-drop-item:hover { background: var(--color-accent-bg); color: var(--color-primary-dark); text-decoration: none; }
.nav-drop-no {
    font-family: var(--font-display);
    font-size: 0.8125rem;
    color: var(--color-accent);
}
.nav-drop-sep { height: 1px; margin: 0.3rem 0.5rem; background: var(--color-border); }
.nav-drop-prices { color: var(--color-muted); }

@media (min-width: 60.01rem) {
    .nav-drop-panel {
        position: absolute;
        top: calc(100% + 0.5rem);
        left: 0;
        z-index: 30;
        min-width: 17rem;
        border: 1px solid var(--color-border);
        border-radius: 18px;
        background: var(--color-card);
        box-shadow: 0 18px 40px -18px rgba(30, 27, 58, 0.35), var(--shadow);
    }
}
/* Телефон и таблет: менюто вече е списък на цяла ширина — падащото меню се
   разгъва на място, с тънка линия отляво, за да се вижда, че е подменю. */
@media (max-width: 60rem) {
    .nav-drop { width: 100%; }
    .nav-drop-toggle { justify-content: center; width: 100%; }
    .nav-drop-panel {
        margin: 0.2rem 0 0.3rem;
        padding: 0.2rem 0 0.2rem 0.75rem;
        border-left: 2px solid var(--color-accent-bg);
    }
    .nav-drop-item { justify-content: flex-start; }
}
/* Стягане между 960 и 1100px: менюто вече носи една дълга дума повече. */
@media (min-width: 60.01rem) and (max-width: 68.75rem) {
    .main-nav a, .nav-drop-toggle { padding: 0 0.5rem; }
    .nav-drop-toggle { gap: 0.3rem; }
}
/* Призивът на /cases/ следва филтъра (V4): един основен бутон и, само при
   счетоводството, втори към платената консултация. */
.cases-cta-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-3); margin: 0; }
.cases-empty {
    max-width: 40rem;
    margin: 0 auto;
    padding: var(--space-6);
    border: 1px dashed var(--color-border);
    border-radius: var(--radius);
    text-align: center;
    color: var(--color-muted);
}
.cases-empty p { margin: 0; }
.cases-empty p + p { margin-top: var(--space-3); }

.cases-index-more {
    margin-top: auto;
    color: var(--color-accent);
    font-size: 0.9375rem;
    font-weight: 600;
}

/* --- Страницата на един казус --- */

.case-article {
    /* 46rem — СЪЩАТА мярка като `.band-split-head` на всички други раздели.
       С вътрешните отстъпи на картата редът излиза около 68 знака, тоест
       точно `.measure` (68ch), с която е мерен дългият текст навсякъде
       другаде в сайта. */
    max-width: 46rem;
    margin-inline: auto;   /* БЕЗ него колоната стои вляво — виж бележката горе */
}

/* „Накратко“ — отговорът, който човек чете първи и който влиза в
   разметката. Същият вид като „Как помагаме:“ в акордеона
   (.case-help-inline): акцентен фон, тънък ръб, без сянка. */
.case-short {
    background: var(--color-accent-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-5);
    margin-bottom: var(--space-5);
}

.case-short .eyebrow-quiet { margin-bottom: var(--space-2); }

.case-short p:last-child {
    margin-bottom: 0;
    max-width: 62ch;
    margin-inline: auto;
    /* Една стъпка над текста на тялото: това е отговорът, който човек чете
       първи, и той трябва да се различава от обяснението под него. */
    font-size: 1.125rem;
    line-height: 1.65;
}

/* Тялото е КАРТА, като отворения казус в акордеона — оттам идва усещането
   за „насложено“, вместо текст, изсипан върху фона. */
.case-longread {
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-6) clamp(var(--space-5), 4vw, var(--space-7));
}

.case-longread > :first-child { margin-top: 0; }
.case-longread > :last-child { margin-bottom: 0; }

/* ⚠️ И ДВЕТЕ НИВА (29.08.2026). Подзаглавията в тялото на казуса минаха от
   <h3> на <h2>: дотогава документът вървеше H1 → H3 → H3 → H2, тоест самото
   съдържание стоеше ПОД „Как помагаме?“ и „Свързани казуси“. Езиковите
   модели режат страницата по нивата на заглавията — при такъв ред главното
   излизаше като подробност към призива.

   Старият селектор остава: текстове, писани преди това и вече редактирани
   от админа, още носят <h3>. Двата реда струват нищо, а изчистването им
   изисква да се пипне съдържание, което никой не е поръчвал да се пипа. */
/* Подзаглавията вътре са границите между темите. Чертата отгоре ги
   разделя, без да се налага всяка тема да е отделна карта. */
.case-longread h2,
.case-longread h3 {
    margin: var(--space-6) 0 var(--space-4);
    padding-top: var(--space-5);
    border-top: 1px solid var(--color-border);
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(1.25rem, 1.05rem + 0.7vw, 1.5rem);
    line-height: 1.3;
    color: var(--color-navy);
}

.case-longread > h2:first-child,
.case-longread > h3:first-child {
    padding-top: 0;
    border-top: 0;
}

.case-longread p,
.case-longread li {
    /* Стъпката на текста в целия сайт (`.band-split-head p`,
       `.case-body p`, `.product-description`). */
    font-size: 1.0625rem;
    line-height: 1.65;
}

/* Мярката на реда: `.measure` = 68ch, както при правните страници,
   описанието на услуга и отворения казус в акордеона. */
.case-longread > p,
.case-longread > ol,
.case-longread > ul {
    max-width: 68ch;
    margin-inline: auto;
}

.case-longread > h3 { max-width: 56ch; margin-inline: auto; }

.case-longread p { margin: 0 0 var(--space-4); }

.case-longread ol,
.case-longread ul {
    margin: 0 0 var(--space-4);
    padding-left: 1.4rem;
}

.case-longread ol > li,
.case-longread ul > li { margin-bottom: var(--space-3); }

/* Номерът е акцентът, не текстът. */
.case-longread ol > li::marker {
    color: var(--color-accent);
    font-weight: 700;
}

.case-longread strong { color: var(--color-navy); }

/* Призивът и опашката под него. */
.case-article .consult-promo { margin-top: var(--space-5); }

.case-secondary {
    margin: var(--space-4) 0 0;
    text-align: center;
    color: var(--color-muted);
    font-size: 1rem;
}

.case-related {
    margin-top: var(--space-6);
    background: var(--color-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: var(--space-5) clamp(var(--space-5), 4vw, var(--space-6));
}

.case-related h2 {
    margin: 0 0 var(--space-3);
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 1.25rem;
    color: var(--color-navy);
}

.case-related ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

.case-related li + li { border-top: 1px solid var(--color-border); }

.case-related a {
    display: block;
    padding: var(--space-3) 0;
    font-size: 1.0625rem;
}

/* „Актуално към …“ — при счетоводно съдържание датата е част от
   достоверността, но не е заглавие. */
.case-valid,
.case-back {
    margin-top: var(--space-5);
    text-align: center;
    color: var(--color-muted);
    font-size: 0.875rem;
}

.case-back { margin-top: var(--space-3); }

/* --- Центрирани заглавия и бутони ---
   Акордеонът на /cases/ е центриран (виж `.case-card summary` и
   `.cases-list-centered`). Подстраниците следват същата ос: заглавията и
   призивът стоят в средата, а САМИЯТ ТЕКСТ остава ляво подравнен — дълъг
   центриран абзац няма постоянно начало на реда и се чете двойно по-бавно. */

.case-short .eyebrow-quiet { text-align: center; }

.case-longread h2,
.case-longread h3,
.case-related h2 { text-align: center; }

/* Заглавието на призива е <h2> (h1 е въпросът горе), а общият компонент
   стилизира <h3> — тук му се дава същият вид. */
/* Текстът в призива — по мярката на `.band-split-head p` (56ch). */
.case-article .consult-promo p { max-width: 56ch; margin-inline: auto; }

.case-article .consult-promo h2 {
    margin: 0 0 0.35rem;
    font-family: var(--font-display);
    font-size: 1.3rem;
}

.case-related a { text-align: center; }

/* Двете чертички около „Как помагаме“ — горе вляво и долу вдясно.
   Същите като около заглавията на разделите (`.band-split-head::before/
   ::after`): същата ширина, същият градиент, същите две сенки. Тук блокът
   е flex колона, затова изместването става с `margin: … auto`, което
   надделява над центрирането. */
.case-article .consult-promo-centered::before,
.case-article .consult-promo-centered::after {
    content: "";
    display: block;
    width: 5rem;
    height: 6px;
    border-radius: 999px;
    background-image: var(--gradient-accent);
    box-shadow: 0 2px 4px rgba(15, 23, 42, 0.25), 0 4px 12px rgba(124, 58, 237, 0.28);
}

.case-article .consult-promo-centered::before {
    margin: 0 auto var(--space-4) 0;   /* избутана ВЛЯВО */
}

.case-article .consult-promo-centered::after {
    margin: var(--space-4) 0 0 auto;   /* избутана ВДЯСНО */
    /* Чертата стои НАД бутона, не под него: бутонът е последното нещо на
       блока и нищо не бива да виси под него. В DOM-а `::after` е след
       бутона, затова редът се обръща с `order` (двата са в един flex). */
    order: 0;
}

.case-article .consult-promo-centered .btn { order: 1; }


/* Текстът в картите е центриран — по същата ос като заглавието на раздела. */
.cases-index > li > a { text-align: center; }

/* Трохите НЯМАТ нов клас: страницата ползва общия `.breadcrumbs`
   (includes/breadcrumbs.html), същия като при услугите. */

/* --- Телефон ---
   Праговете са тези, които сайтът вече ползва другаде (37.5rem = 600px,
   30rem = 480px). Логиката е същата като при документите и кошницата:
   отстъпите се свиват, а бутонът става на цяла ширина, вместо да стои
   като малко петно в средата. */
@media (max-width: 37.5rem) {
    .cases-index {
        grid-template-columns: 1fr;
        gap: var(--space-3);
    }

    .cases-index > li > a { padding: var(--space-4); }

    .case-short { padding: var(--space-4); }

    .case-longread { padding: var(--space-5) var(--space-4); }

    .case-longread ol,
    .case-longread ul { padding-left: 1.1rem; }

    .case-related { padding: var(--space-4); }

    .case-article .consult-promo .btn { width: 100%; }
}

@media (max-width: 30rem) {
    /* Под 480px петте рема на чертата изяждат една трета от реда. */
    .case-article .consult-promo-centered::before,
    .case-article .consult-promo-centered::after { width: 3.5rem; }
}


/* =========================================================================
   ПО-МАЛЪК ФАЙЛ ЗА ПО-МАЛЪК ЕКРАН — hero снимката (02.09.2026)
   =========================================================================

   ЗАЩО

   `hero.webp` е 1920×1280 и 109 KB. Понеже е ФОН в CSS, а не `<img>`, за нея
   няма `srcset` — браузърът няма как сам да избере по-малък файл и телефонът
   теглеше същите 109 KB за площ от 400 пиксела. При мобилен интернет това е
   най-тежкото нещо на началната страница и точно то е LCP елементът.

   КАК

   Два допълнителни файла, направени от същия оригинал (без ново изрязване,
   същата рамка — само по-малко пиксели):
       hero-900.webp   900×600    34 KB   — телефон
       hero-1200.webp  1200×800   49 KB   — таблет и малък лаптоп
       hero.webp      1920×1280  109 KB   — монитор (остава по подразбиране)

   ⚠️ РЕДЪТ НА ДВАТА БЛОКА Е ЗНАЧИМ. На екран под 700 px важат и двете
   заявки; печели последната. Затова 1200 стои ПРЕДИ 700 — разместени, на
   телефона би влязъл по-големият файл и цялата работа е напразна.

   ⚠️ `preload` В ШАБЛОНА СЛЕДВА СЪЩИТЕ ПРАГОВЕ (templates/core/home.html).
   Ако тук се смени праг, сменя се и там — иначе браузърът тегли предварително
   един файл, а CSS-ът иска друг, и вместо да се спести, се тегли двойно. */
@media (max-width: 1200px) {
    .hero::before,
    .banner-hero::before { background-image: url("../images/hero-1200.7b6d77500a43.webp"); }
}

@media (max-width: 700px) {
    .hero::before,
    .banner-hero::before { background-image: url("../images/hero-900.5b1b2e257c31.webp"); }
}


/* =========================================================================
   V2 (10.09.2026) — ТРИ ОБЩИ ПОПРАВКИ, ОТКРИТИ ПРИ ПРЕГЛЕД В ИСТИНСКИ
   БРАУЗЪР. Стоят НАКРАЯ нарочно: всяка от тях коригира правило по-горе и
   при равна тежест печели последната. Така по-горните блокове остават
   четими такива, каквито са писани, а поправката се вижда като поправка.

   Трите са ОБЩИ за сайта, а не за една страница — затова са тук, а не в
   `business-solutions.css`. Всяка е проверена и на началната страница, в
   каталога и в казусите.
   ========================================================================= */

/* ---------- 1. Котвите вече не се крият под лепкавата лента -------------
   `.site-header` е `position: sticky`. Вътрешна връзка към раздел водеше
   заглавието ТОЧНО под лентата и то оставаше невидимо — човек виждаше
   средата на секцията и не разбираше къде е попаднал.

   ⚠️ `scroll-padding-top` НА КОРЕНА, А НЕ `scroll-margin-top` НА ВСЯКА
   ЦЕЛ. Отстъпът е свойство на ПРЕВЪРТАЩИЯ КОНТЕЙНЕР, не на целите: така
   важи за всяка котва в сайта — и за тези, които още не са написани — и
   работи еднакво при клик по връзка, при отваряне на адрес с диез и при
   презареждане с диез. Двете заедно се СЪБИРАТ, затова целите не бива да
   носят и свой отстъп. */
html {
    scroll-padding-top: 6.5rem;
}
@media (max-width: 47.5rem) {
    html { scroll-padding-top: 5.5rem; }
}

/* ---------- 2. Компактна лента на телефон -------------------------------
   ИЗМЕРЕНО НА 390px: 164px височина. Три реда — бранд с действията,
   знаците на ЕС, и „Клиентски портал“ на цял ред отдолу. Лентата изяждаше
   една пета от екрана, преди съдържанието да започне.

   ⚠️ ЗНАЦИТЕ НА ЕС НЕ СЕ МАХАТ И НЕ СЕ СКРИВАТ. Публичността по проекта за
   дигитализация е задължителна. Те само се връщат ПОД логото, вътре в
   блока на бранда, вместо да заемат собствен ред на цялата ширина.

   ⚠️ „КЛИЕНТСКИ ПОРТАЛ“ НЕ СЕ МАХА, А СЕ СВИВА ДО ИКОНА. Надписът остава в
   разметката като `visually-hidden`, тоест достъпното име се запазва —
   екранният четец чете същото, което четеше и преди. Пълният надпис се
   вижда и в отвореното меню. */
/* ⚠️ ТЕЗИ ДВЕ ПРАВИЛА СТОЯТ ПРЕДИ МЕДИЯ ЗАЯВКИТЕ, А НЕ СЛЕД ТЯХ. Тежестта им
   е еднаква с тази на правилата вътре (`.nav-portal-icon` е един клас и на
   двете места), затова печели ПОСЛЕДНОТО. Написани отдолу, те връщаха
   иконата и връзката в менюто на `display: none` и на телефон — сгрешено
   веднъж точно така. */
.nav-portal-icon { display: none; width: 1.15rem; height: 1.15rem; flex: none; }
/* ⚠️ СЕЛЕКТОРЪТ НОСИ И `.main-nav a`, ЗАЩОТО ТО ЗАДАВА `display: inline-flex`
   (ред 404) и е по-тежко от един клас. Написано само като
   `.nav-portal-inmenu`, правилото губеше и връзката се показваше ВТОРИ ПЪТ
   в лентата на широк екран, до бутона. */
.main-nav a.nav-portal-inmenu { display: none; }

@media (max-width: 47.5rem) {
    .site-header { padding: 0.4rem 0; }

    .header-inner {
        grid-template-columns: minmax(0, 1fr) auto auto auto auto;
        grid-template-areas: "brand lang cart portal toggle";
        gap: 0 0.4rem;
        padding: 0.4rem 0.55rem;
        border-radius: 18px;
    }

    /* Обратно към флекс колона: логото и знаците пак са ЕДИН блок в една
       клетка. Докато обвивката беше `display: contents`, всеки от двата
       заемаше собствен ред на грида — оттам идваше третият ред. */
    .brand-block {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        gap: 0.2rem;
        grid-area: brand;
        min-width: 0;
    }
    .brand-logo { max-width: 8.5rem; }
    .brand-eu { margin-top: 0; gap: 0.55rem; }
    .brand-eu img { height: 0.95rem; }

    /* Иконата на портала се показва само тук; надписът се скрива визуално,
       но остава за екранни четци (не `display: none`). */
    .nav-portal {
        grid-area: portal;
        width: 2.5rem;
        min-height: 2.5rem;
        padding: 0;
        margin-top: 0;
        justify-content: center;
        border-radius: 50%;
    }
    .nav-portal .nav-portal-icon { display: block; }
    .nav-portal .nav-portal-text {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        padding: 0;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .nav-toggle { min-height: 2.5rem; padding: 0 0.6rem; }
    .cart-link { min-height: 2.5rem; }
    .lang-btn { min-height: 2.5rem; }

    /* Пълният надпис — вътре в отвореното меню, където има място за него. */
    .main-nav a.nav-portal-inmenu {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 0.5rem;
        min-height: var(--tap-target);
        margin-top: 0.35rem;
        border-radius: var(--radius-pill);
        background: var(--color-primary);
        color: #fff;
        font-weight: 700;
    }
    /* ⚠️ `.main-nav a` по-горе задава свой цвят и е също толкова тежък;
       затова тук селекторът носи и тага, за да надделее. Без това надписът
       остава тъмен върху индигото и не се чете. */
    .main-nav a.nav-portal-inmenu { color: #fff; }
    .main-nav a.nav-portal-inmenu:hover {
        background: var(--color-primary-dark);
        color: #fff;
        text-decoration: none;
    }
}

@media (max-width: 26rem) {
    .header-inner { gap: 0 0.3rem; padding: 0.35rem 0.45rem; }
    .brand-logo { max-width: 7.25rem; }
    .brand-eu { gap: 0.4rem; }
    .brand-eu img { height: 0.85rem; }
    .nav-portal { width: 2.25rem; min-height: 2.25rem; }
    .nav-toggle { padding: 0 0.45rem; min-height: 2.25rem; }
    .cart-link { padding: 0 0.3rem; min-height: 2.25rem; }
    .lang-btn { min-height: 2.25rem; padding: 0 0.25rem; }
}


/* ---------- 3. Плаващият асистент спира да закрива съдържание -----------
   На телефон „Попитайте ни“ е широк бутон с надпис в долния десен ъгъл и
   покриваше резултата на навигатора, списъци и полета на формата.

   Три промени, всяка за отделен случай:
     - свит вид: остава само иконата (кръгъл бутон), с 44px цел за докосване
       и с `aria-label`, който вече е в разметката;
     - долният ръб зачита `safe-area` на телефони с жестова лента;
     - класът `bs-assistant-tucked` (задава се от JavaScript, когато
       формата е на екрана или полето е на фокус) го прибира до ръба, за
       да не застане върху активно поле.

   ⚠️ Функцията НЕ СЕ МАХА и поведението на широк екран НЕ СЕ ПИПА. */
@media (max-width: 47.5rem) {
    .chat-widget {
        right: 0.6rem;
        bottom: calc(0.6rem + env(safe-area-inset-bottom, 0px));
    }
    .chat-widget:not([open]) .chat-toggle {
        width: var(--tap-target);
        min-height: var(--tap-target);
        padding: 0;
        justify-content: center;
        border-radius: 50%;
    }
    .chat-widget:not([open]) .chat-toggle-label {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        padding: 0;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    /* Прибран до ръба: вижда се, че го има, но не стои върху полето. */
    .chat-widget.bs-assistant-tucked:not([open]) {
        opacity: 0.42;
        translate: 38% 0;
    }
    .chat-widget.bs-assistant-tucked:not([open]):hover,
    .chat-widget.bs-assistant-tucked:not([open]):focus-within {
        opacity: 1;
        translate: 0 0;
    }
    .chat-widget:not([open]) {
        transition: translate 0.25s ease, opacity 0.25s ease;
    }
}

@media (prefers-reduced-motion: reduce) {
    .chat-widget:not([open]) { transition: none; }
}
