/* BulGhar Homes — mobile "sticky compact bar" nav (РУНД 13, Вариант 5).
   Injected by bottom-nav.js on pages under 900px. Desktop header/nav is untouched
   above 900px; this file only ever activates the bar and hides the desktop nav
   rows below that breakpoint.

   17.08.2026 — файлът НЕ е само за долната лента и отдавна не е. Той е
   единственият CSS, зареден на всяка публична страница (проверено: всичките 50,
   без `admin.html` и архивната `coming-soon.html`), затова тук живее и общата
   „обвивка" на сайта: правилата за хедъра `.bh-mobile-consult` и
   `[data-bh-nav-grid]` по-долу, връзката за прескачане и общото зачитане на
   `prefers-reduced-motion` в края. Алтернативата беше нов файл, тоест още една
   заявка на всяка страница за под 30 реда CSS. */

@media (max-width:900px){
  header nav{display:none!important}
  [data-bh-nav-grid]{grid-template-columns:1fr auto 1fr!important}
  /* 17.08.2026 — БЕЗ този ред логото не е центрирано на НИТО една страница.
     Редът отгоре изравнява крайните колони, но `header nav{display:none}` изважда
     двата nav-а от решетката, логото се самонарежда в колона 1, а средната `auto`
     колона остава 0px. Мерено при 375px: центърът на логото пада на 96 вместо на
     188, тоест 92px вляво. Дотогава задачата се водеше „24 страници нямат
     атрибута", а истината беше, че атрибутът сам по себе си не върши работата и
     седемте „правилни" страници бяха сгрешени точно колкото останалите.
     Обхватът е нарочно `> a`: пряко дете на решетката, тоест хваща логото и не
     пипа линковете вътре в nav-овете.

     17.08.2026, второ откритие — изключението `.bh-mobile-consult` е задължително.
     И тя е пряко дете `<a>` на решетката, тоест голото `[data-bh-nav-grid] > a`
     (специфичност 0,1,1) надделяваше над `.bh-mobile-consult{grid-column:3}`
     (0,1,0) и я слагаше в средната колона ПОД логото. Мерено при 375px на
     index.html: хедърът беше 135px вместо 93px, а надписът стоеше центриран под
     иконата вместо вдясно. `:not()` не добавя специфичност сам по себе си, но
     аргументът вътре добавя — оттам 0,2,1 за логото и правилото за надписа
     отново важи. */
  [data-bh-nav-grid] > a:not(.bh-mobile-consult){grid-column:2}
}
.bh-mobile-consult{display:none}
@media (max-width:900px){
  .bh-mobile-consult{display:flex;flex-direction:column;align-items:flex-end;justify-self:end;grid-column:3;font-family:var(--font-caption);font-size:10.5px;line-height:1.25;letter-spacing:.02em;color:var(--cream);text-decoration:none;white-space:nowrap}
}

/* ── Смяна на езика на телефон (23.08.2026, находка A6) ─────────────────────
   Разметката се сглобява от `bottom-nav.js` (там е и обяснението откъде идват
   адресите); тук е само видът ѝ.

   ЗАЩО В ХЕДЪРА, А НЕ ПЕТИ ТАБ ДОЛУ. Мерено при 375px преди промяната:
   - долната лента дава на всеки таб `flex:1`, тоест 93.75px при четири таба (hy)
     и 75px при пет (bg/en, вече има „Още"). Шести таб за bg/en значи 62.5px, а
     етикетът „Обади се" е 45px плюс 8px padding — на ръба, тоест втора двуредова
     обвивка, точно дефектът отдолу в този файл;
   - хедърът при същите 375px е 93px висок, а решетката му е `1fr auto 1fr` =
     `123.5px 56px 123.5px`, от които колона 1 е ПРАЗНА на всичките 65 страници
     (двата `<nav>` са `display:none`, логото е заковано в колона 2). Две хапчета
     по 44px плюс 6px процеп = 94px, тоест влизат в 123.5px без да пипнат ширината
     на колоната, значи и без да разцентроват логото.
   Плюс довод по правило 5а-0: `bottom:0` е споделен ресурс с `.im-mobile-cta`
   на имотните страници. Решение, което изобщо не пипа долната лента, не може да
   го засегне.

   ЗАЩО ДВЕ ПРЕКИ ХАПЧЕТА, А НЕ ПАДАЩО МЕНЮ КАТО НА ДЕСКТОП. Съседните езици са
   най-много два (три езика минус текущия). Меню за два реда иска състояние,
   aria-expanded, затваряне при клик отвън и при Escape — и точно менюто, което
   не може да се затвори, беше находка A1 в този кръг. Две `<a>` нямат състояние,
   което да заседне, и са в tab реда без нито ред JS.

   ⚠️ Рамката е `rgba(255,255,255,.35)`, не `.25` както на десктоп хапчето.
   Мерено срещу `--navy` (#212947): .25 дава 2.24:1, .35 дава 3.07:1, а прагът за
   граница на елемент от интерфейса е 3:1 (WCAG 1.4.11). Текстът
   `rgba(255,255,255,.7)` е 7.75:1 и минава AA сам по себе си.
   Десктоп хапчето остава каквото е — то е `build_shell.py`, не този файл.

   Специфичността е нарочно 0,1,0 и по двойката „база + медия", както при
   `.bh-mobile-consult` отгоре: без `!important`, без `html:root`, без селектор,
   който да засенчи чужд токен. `grid-column:1` не се бие с
   `[data-bh-nav-grid] > a:not(.bh-mobile-consult){grid-column:2}` по-горе —
   онова правило хваща само пряко дете `<a>`, а това е `<div>`. */
.bh-lang{display:none}
@media (max-width:900px){
  .bh-lang{display:flex;align-items:center;gap:6px;grid-column:1;justify-self:start}
}
.bh-lang__a{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 8px;border:1px solid rgba(255,255,255,.35);border-radius:999px;font-family:var(--font-caption);font-size:11px;line-height:1.2;letter-spacing:.04em;color:rgba(255,255,255,.7);text-decoration:none;white-space:nowrap}
.bh-lang__a:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

.bh-bn-bar{position:fixed;left:0;right:0;bottom:0;z-index:970;display:none;background:var(--navy-deep);border-top:1px solid var(--navy-line);padding-bottom:env(safe-area-inset-bottom);transition:transform .25s ease}
@media (max-width:900px){
  .bh-bn-bar{display:flex}
  body{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
}
body.bh-bn-hide .bh-bn-bar{transform:translateY(100%)}

/* 23.08.2026 — `justify-content:flex-start`, не `center`, и `line-height` вместо 1.
   Дотогава редът от икони видимо не беше прав на арменските страници. Мерено при
   375x812 на `home-hy.html`: етикетът „Ինչպես ենք օգնում" е 97.62px по естествена
   ширина, а кутията на таба е 93.75 − 2×4 = 85.75px, тоест се пренася на два реда
   и става 20px висок срещу 10px на другите три. При `justify-content:center`
   по-високият етикет вдига своята икона: y=759 срещу y=764 на останалите.

   Двете части на поправката са различни и двете са нужни:
   1. `flex-start` + фиксиран `padding-top` заковава иконата на 8px от горния ръб
      на ВСЕКИ таб, независимо колко реда има етикетът. Центрирането по същността
      си прави обратното. Това е и единственото, което държи, ако утре друг език
      донесе трети ред.
   2. `line-height:1.25` вместо `1`. При 10px реалната мастилена височина на
      арменския е 7.7px нагоре + 2.45px надолу (мерено с `TextMetrics` в самия
      шрифт), тоест 10.15px в кутия от 10px: опашките на `ղ`, `պ`, `ց` се блъскат
      в реда отгоре с 0.15px застъпване. 12.5px оставят 2.35px просвет.

   ⚠️ Съкращаване на етикета НЕ беше вариант: „Ինչպես ենք օգնում" е името на
   страницата в `build_shell.py` (`NAV_MAIN`, `FOOTER_NAV`) и в десктоп хедъра.
   Друг текст тук значи мобилно и десктоп да наричат една страница различно, а
   съчиняване на по-къс арменски е забранено (правило от 22.08.2026).
   Неравни ширини на табовете (`flex:1 1 auto`) също отпаднаха: те слагат край на
   пренасянето, но развалят ритъма на реда от икони, който точно поправяме.

   Аритметиката, защо `padding-bottom` пада от 10px на 6px: двуредов таб става
   8+19+4+25+6 = 62px, тоест лентата е 63px с горния кант, при резервирани
   `body{padding-bottom:64px}` по-долу. С 10px щеше да е 67px и лентата щеше да
   покрие 3px съдържание на всяка арменска страница. Едноредовите табове остават
   на `min-height:56px`, тоест bg/en лентата не мърда изобщо. */
.bh-bn-item{position:relative;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:4px;min-height:56px;min-width:44px;padding:8px 4px 6px;text-decoration:none;color:var(--fg-3);background:none;border:none;font-family:var(--font-caption);font-size:10px;letter-spacing:.02em;cursor:pointer;-webkit-tap-highlight-color:transparent}
.bh-bn-item span{line-height:1.25;text-align:center}
.bh-bn-item *{pointer-events:none}
.bh-bn-item.bh-bn-active{color:var(--gold)}
.bh-bn-item.bh-bn-active::after{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:28px;height:3px;border-radius:0 0 3px 3px;background:var(--gold)}
.bh-bn-item.bh-bn-more.bh-bn-active{color:var(--gold)}
.bh-bn-item:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.bh-bn-more-i{display:flex}
.bh-bn-more-t{display:inline}
.bh-bn-more-i--on,.bh-bn-more-t--on{display:none}
.bh-bn-item.bh-bn-active .bh-bn-more-i--off,.bh-bn-item.bh-bn-active .bh-bn-more-t--off{display:none}
.bh-bn-item.bh-bn-active .bh-bn-more-i--on{display:flex}
.bh-bn-item.bh-bn-active .bh-bn-more-t--on{display:inline}

.bh-bn-backdrop{position:fixed;inset:0;background:rgba(12,15,26,.55);z-index:965;display:none}
body.bh-bn-open .bh-bn-backdrop{display:block}

/* 17.08.2026 — `visibility:hidden` в затворено състояние, не само `opacity:0`.
   Дотогава четирите линка в панела оставаха фокусируеми, докато bottom-nav.js
   държи на контейнера aria-hidden="true": табването влизаше в съдържание, което
   екранният четец нарочно не обявява, и фокусът изчезваше зад невидим панел.
   opacity и pointer-events махат само мишката; tab реда го маха единствено
   visibility (или display/inert).
   `visibility` НАРОЧНО стои извън списъка на прехода. Изкушението е да се забави с
   `visibility 0s linear .2s`, за да се види избледняването докрай. Тогава обаче
   „скрит" настъпва само ако преходът наистина е изтекъл, а преход, който не е тръгнал
   (несвтвърден таб, спрени анимации, прекъснат преход), оставя четирите линка
   фокусируеми под aria-hidden — точно дефектът, който този ред поправя. Мерено: при
   спрени анимации панелът остава visible и след 2.5s, тоест 4 фокусируеми линка.
   Затова скриването е незабавно. Цената е, че затварянето е рязко; отварянето пази
   анимацията си цяла, защото там visibility пада веднага, а transform и opacity текат.
   Задният фон (`.bh-bn-backdrop`) така или иначе се сваля с `display:none`, тоест
   рязкото затваряне е и по-последователно с това, което вече става на екрана. */
.bh-bn-sheet{position:fixed;left:12px;right:12px;bottom:calc(64px + 12px + env(safe-area-inset-bottom));background:var(--cream);border-radius:16px;padding:6px 18px;box-shadow:0 -8px 24px rgba(0,0,0,.25);z-index:975;transform:translateY(16px);opacity:0;visibility:hidden;pointer-events:none;transition:transform .2s ease,opacity .2s ease}
body.bh-bn-open .bh-bn-sheet{transform:translateY(0);opacity:1;visibility:visible;pointer-events:auto}
.bh-bn-sheet a{display:flex;align-items:center;min-height:44px;padding:11px 0;border-bottom:1px solid var(--cream-line);color:var(--ink);font-family:var(--font-body);text-decoration:none;font-weight:600}
.bh-bn-sheet a:last-child{border-bottom:none}
/* 21.08.2026 — фокусният пръстен в панела „Още".
   Панелът е КРЕМАВА повърхност (`background:var(--cream)`), но не е обвит в
   `.on-cream`, тоест `.on-cream :focus-visible{outline-color:var(--gold-ink)}` от
   `colors_and_type.css` не го хваща и четирите линка получаваха глобалния пръстен
   `--gold`: 1.78:1 върху `--cream` при праг 3:1 (WCAG 1.4.11). Това е и точното
   място, където правило 5з т.4 казва, че светла секция БЕЗ `on-cream` губи
   решението на дизайн системата мълчаливо.
   Мерено на реален DOM при 375x812 с отворен панел (`body.bh-bn-open`), не по
   четене: 1.78 → 4.51. Панелът е в този файл, тоест поправката важи наведнъж за
   всички 22 публични страници, които го зареждат.
   ⚠️ Резервата `,#7d6a33` е задължителна по правило 5з т.2 — токенът живее в
   `ds/<хеш>/colors_and_type.css`, а хешът се сменя при нов Design export.
   ⚠️ Изборът е `outline-color` върху съществуващия пръстен, НЕ клас `on-cream`
   върху панела: класът носи и целия светъл слой на `components.css` за всеки
   `bg-*` клас вътре, а `bottom-nav.js` може утре да сложи такъв. */
.bh-bn-sheet :focus-visible{outline-color:var(--gold-ink,#7d6a33)}

/* 22.08.2026 — фокусният пръстен на бутоните, писани с `all:unset`.
   `.bh-share` и `.bh-heart-btn` стоят в 20 блог статии, `.bh-toggle-btn` в 3,
   `.bh-poll-btn` в 2, и всеки от тях започва с `all:unset`. `all` включва
   `outline`, тоест нулира и пръстена. Глобалното `:focus-visible` в
   `colors_and_type.css` НЕ го връща: специфичността е равна (0,1,0 срещу 0,1,0), а
   `<style>` блокът на статията се зарежда СЛЕД каноничния CSS, значи печели той.
   Резултат: човек с клавиатура табва през „сподели" и „харесай" напълно на сляпо.
   Затова тук селекторът носи и класа, и псевдокласа (0,2,0) — бие `all:unset`
   независимо от реда на файловете, а не разчита на това, че `bottom-nav.css` се
   зарежда последен.
   Тонът следва правилото на системата: `--gold` върху тъмно, `--gold-ink` под
   `.on-cream` (1.78:1 срещу 4.51:1 на крем, праг 3:1 по WCAG 1.4.11). Резервата
   `,#7d6a33` е по правило 5з т.2 — хешът на `ds/` се сменя при нов Design export.
   Едно място за 20 статии: пренасянето на такова правило по файлове е точно дългът,
   който `build_shell.py` изчисти за хедъра. */
.bh-share:focus-visible,
.bh-heart-btn:focus-visible,
.bh-toggle-btn:focus-visible,
.bh-poll-btn:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.on-cream .bh-share:focus-visible,
.on-cream .bh-heart-btn:focus-visible,
.on-cream .bh-toggle-btn:focus-visible,
.on-cream .bh-poll-btn:focus-visible{outline-color:var(--gold-ink,#7d6a33)}

@media (min-width:901px){
  .bh-bn-bar,.bh-bn-backdrop,.bh-bn-sheet{display:none!important}
}

.bh-bn-call{color:var(--gold-light)}
.bh-bn-call:active{color:var(--gold)}

/* ── Прескачане на навигацията (17.08.2026) ─────────────────────────────────
   Разметката се генерира от `build_shell.py`; тук е само видът ѝ.

   `position:fixed`, не `absolute`. При `absolute` връзката се мери спрямо
   документа: `top:12px` значи 12px от НАЧАЛОТО на страницата, а не от горния
   ръб на екрана. Обикновено съвпада, защото Tab тръгва при скрол 0, но не и
   когато посетителят се върне на страницата с възстановен скрол — тогава
   връзката получава фокус някъде далеч нагоре и на екрана не се появява нищо.

   Не се крие с `display:none` или `visibility:hidden` — това я маха и от tab
   реда, тоест механизмът престава да съществува. Изкарва се извън екрана.

   Цветовете са брандови: кремаво хапче с navy текст (12.5:1) върху navy хедър,
   с пръстен `--gold` — 6.87:1 спрямо navy, тоест пръстенът се вижда като
   фокус, а не се слива. Злато като ТЕКСТ върху кремаво не се ползва (1.78:1). */
.bh-skip{position:fixed;left:12px;top:-120px;z-index:1000;padding:12px 20px;background:var(--cream);color:var(--navy);border-radius:var(--radius-md);font-family:var(--font-caption);font-size:13px;letter-spacing:.04em;text-decoration:none;box-shadow:0 0 0 3px var(--gold),var(--shadow-md)}
.bh-skip:focus{top:12px}

/* `#main` носи `tabindex="-1"`, за да приема фокус НАИСТИНА (иначе котвата мести
   само точката, от която тръгва следващият Tab, а екранният четец мълчи).
   Цената е, че клик със свободна мишка вътре в съдържанието също го фокусира и
   браузърът рисува рамка около цялата страница. Затова рамката се маха точно
   тук: индикаторът, който има значение, е този на следващия елемент, до който
   човекът табва. */
#main:focus{outline:none}

/* Визуално скрито, но в дървото за достъпност. Ползва се от `release-gate.js`
   за брояча и за обявяването на разкриването. Същият рецепт като `.ct-srlive` в
   contact.html — тук е изнесен, за да не се преписва трети път. */
.bh-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ── prefers-reduced-motion, за всички страници наведнъж (17.08.2026) ───────
   Дотогава го имаха само обявите (`imot/_template.html`), `nav-intro.css` и
   `components.css` (за `.bg-skeleton`). Навсякъде другаде `bh-ph-sheen` въртеше
   безкрайно, а лентата „Предстои" в blog.html се движеше 26 секунди в цикъл.

   `animation-duration:.01ms`, НЕ `animation:none` — правило от дизайн системата:
   анимация, чийто краен кадър НОСИ съдържание (`bh-fade-up … both` тръгва от
   `opacity:0`), трябва да свърши веднага, а не да изчезне. С `none` половината
   начална страница остава невидима.

   `animation-iteration-count:1` е това, което спира безкрайните: без него
   .01ms се повтаря вечно и трептенето става по-лошо, не по-добро.
   `animation-delay:0s` е за струпаните с 0.1s/0.2s/0.3s в `index.html`: без
   него съдържанието стои празно още 400ms след като всичко друго е готово.

   ⚠️ Правилото НЕ бие `animation:none`, зададено от страница — то сменя
   `animation-name`, а тук се пипат само другите свойства. Точно затова лентата
   в `blog.html` продължава да спира на НАЧАЛОТО си (както е замислено), а не
   да скача на крайния си кадър, тоест изместена. Това правило е дъно, не покрив:
   не махай местните правила заради него. */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    animation-delay:0s!important;
    transition-duration:.01ms!important;
    transition-delay:0s!important;
  }
  html{scroll-behavior:auto!important}
}

/* =====================================================================
   17.08.2026 — РЕЗЕРВИ С `size-adjust` (точка 3, секция 6 на _ЗАДАЧИ.md)

   Шрифтовете се доставят със `font-display:swap`, тоест текстът се рисува
   веднага със системен сериф и се пребоядисва, щом woff2 пристигне. Без
   изравнени метрики второто рисуване е с ДРУГА ширина и височина на реда,
   тоест заглавието се мести пред очите на посетителя.

   Колко точно се мести — мерено, не преценено. Метод: реален DOM елемент,
   `getBoundingClientRect()`, след ЯВНО `document.fonts.load(...)` (canvas
   `measureText` не задейства зареждане на webfont — `ПРАВИЛА.md` § 1).
   Проверено е и че двата шрифта НЕ дават еднакви ширини, което би значело,
   че нито един не се е заредил. При 100px кегел, върху българско заглавие:

     Playfair Display (кирилица)  1681.41px : Times New Roman  1501.63px = 111.97%
     IBM Plex Serif (кирилица)    1753.31px : Georgia          1651.13px = 106.19%
     IBM Plex Serif (латиница)    1481.50px : Georgia          1403.63px = 105.55%
     Cormorant SC (кирилица)      1629.50px : Times New Roman  1501.63px = 108.52%
     Jura (кирилица)              1685.86px : Helvetica Neue   1675.61px = 100.61%

   Затова `--font-caption` (Jura) НЯМА резерва тук: 0.61% разлика не се вижда,
   а всяко ново семейство е още едно място, което може да остарее.

   ⚠️ `ascent-override` и `descent-override` са процент от кегела СЛЕД
   `size-adjust`. Затова стойността не е измерената (108/100 за Playfair),
   а измерената, разделена на size-adjust: 108/1.12 = 96.4%.

   ⚠️ `src` изброява САМО шрифта, за който е сметнат size-adjust. Ако го няма
   на машината, лицето остава без източник, пропуска се, и стекът пада на
   следващото име — вместо да разтегли грешен шрифт с чужди числа. Liberation
   Serif е нарочно метрично съвместим с Times New Roman, затова е в списъка.

   ⚠️ Трите стека по-долу СА КОПИЕ на каноничните от `ds/<хеш>/colors_and_type.css`
   с вмъкнато едно име. Смени ли се канонът, това копие трябва да се пресвери
   ръчно — няма механизъм, който да го направи сам.
   ===================================================================== */
@font-face{
  font-family:'BH Display Fallback';
  src:local('Times New Roman'),local('Times'),local('Liberation Serif');
  size-adjust:111.97%;
  ascent-override:96.5%;   /* 108 / 1.1197 */
  descent-override:22.3%;  /*  25 / 1.1197 */
  line-gap-override:0%;
}
@font-face{
  font-family:'BH Body Fallback';
  src:local('Georgia');
  size-adjust:105.9%;      /* средно между кирилица 106.19 и латиница 105.55 */
  ascent-override:96.3%;   /* 102 / 1.059 */
  descent-override:25.5%;  /*  27 / 1.059 */
  line-gap-override:0%;
}
@font-face{
  font-family:'BH Tagline Fallback';
  src:local('Times New Roman'),local('Times'),local('Liberation Serif');
  size-adjust:108.52%;
  ascent-override:84.8%;   /* 92 / 1.0852 */
  descent-override:26.7%;  /* 29 / 1.0852 */
  line-gap-override:0%;
}
/* `html:root`, а не голо `:root`, е нарочно. Голото `:root` е със същата
   тежест като това в `colors_and_type.css` и печели само защото се зарежда
   по-късно ПО РЕД В ДОКУМЕНТА. На `portal.html` редът е обратен: този файл
   стои в <head>, а каноничният CSS е долу в <helmet> блока на support.js,
   тоест там резервите щяха да са мъртви, без да личи. `html:root` е с една
   степен по-специфично и не зависи от реда. */
html:root{
  --font-display:'Italiana','Playfair Display','Noto Serif Armenian','BH Display Fallback','Times New Roman',serif;
  --font-tagline:'Cormorant SC','Italiana','BH Tagline Fallback','Times New Roman',serif;
  --font-body:'IBM Plex Serif','Noto Serif Armenian','BH Body Fallback',Georgia,'Times New Roman',serif;
  --font-caption:'Jura','Noto Sans Armenian','Avenir Next','Helvetica Neue',sans-serif;
}

/* 21.08.2026 — лентата за бисквитки покрива съдържанието, докато посетителят
   не ѝ отговори. Мерено с `document.elementFromPoint` в центъра на бутона
   „Изпрати запитване": при 1280x800 лентата заема долните 147 px, при 410x888
   долните 239 px, тоест 27% от екрана на телефон. Клик там връща картата на
   лентата, не бутона.

   Цената е тиха и висока: ПЪРВИ посетител, който още не е отговорил на лентата,
   натиска „Изпрати" и не се случва нищо. Няма съобщение, няма грешка, няма как
   да разбере защо. А първи посетител е точно този, който още не е клиент.

   ⚠️ Поправката е тук, в CSS, а НЕ в `assets/consent.js`: там е логиката на
   съгласието, тя е защитена и няма причина да се пипа за проблем на оформление.
   `:has()` се поддържа от всички живи браузъри от 2023 г.; браузър без него
   просто се държи както досега, тоест поправката не може да счупи нищо.

   Стойностите са с резерва над измереното (147 → 168, 239 → 264), защото
   височината на лентата зависи от дължината на текста и от пренасянето му. */
body:has(#bh-consent-bar) { padding-bottom: 168px }
@media (max-width: 640px) {
  body:has(#bh-consent-bar) { padding-bottom: 264px }
}
/* Turnstile: мястото се запазва ПРЕДИ джаджата да се е появила.
   `api.js` е async defer, тоест `div.cf-turnstile` е празен и висок 0px, докато
   скриптът зареди, и след това скача на 71px. На contact.html и ocenka.html
   бутонът за изпращане стои НЕПОСРЕДСТВЕНО под този div, а самият бутон е висок
   46px: скокът е по-голям от бутона, значи прицел, взет преди появата, каца
   изцяло извън него, върху джаджата.
   ⚠️ Това е ВТОРА, независима пречка пред същия бутон, намерена докато се
   мереше точка 0в.6. Първата е лентата за бисквитки точно отгоре — тя е
   постоянна и е по-вероятното обяснение на наблюдаваното „първият клик не
   изпраща". Тази тук иска съвпадение по време (клик, преди джаджата да се е
   появила), тоест не я замества, а стои до нея.
   ⚠️ 71px е ИЗМЕРЕНО на живо (300x71 и при 375px, и при 1280px, 21.08.2026),
   не е документираното от Cloudflare 300x65. Ако джаджата някой ден се смени,
   остатъчният скок е няколко пиксела, не 71. Мери наново, не приемай.
   На 19-те блог страници същият div носи transform:scale(.85); transform не
   променя оформителната кутия, тоест там кутията също е 71px и правилото пасва. */
.cf-turnstile{min-height:71px}

/* `.bg-btn--ghost-navy` се ползваше на 10 места (по едно в 10 блог статии), без да
   съществува НИКЪДЕ: нито в `ds/<хеш>/components.css`, нито в каноничния
   `Дизайн система/документация/components.css`. Бутонът падаше на базовия `.bg-btn`,
   тоест излизаше ПЛЪТНО ЗЛАТЕН върху златната CTA лента.

   Защо никой не го е забелязал: текстът му остава четим. Мерено на живо -
   navy `rgb(33,41,71)` върху `--gold` `rgb(203,178,106)` дава 6.87:1. Изчезва
   ФОРМАТА, не текстът: лентата е `linear-gradient(135deg,#a8924f,#cbb26a 35%,…)`,
   тоест на 35% фонът ѝ е буквално същият цвят като бутона - контраст 1:1 при праг
   3:1 за граница на интерактивен контрол (WCAG 1.4.11). Двата CTA бутона стоят един
   до друг и единият няма очертание.

   ⚠️ И по-лошото, което не се вижда на брандовата страница: стойността идва от
   `--gold` в ЛОКАЛНИЯ `:root` на статията. Всяка нова „версия на агента" мълчаливо
   сменя вида на този бутон, без някой да е поискал.

   Дефиницията следва точно образеца на `.bg-btn--ghost` (прозрачен фон, цветът и
   рамката са един и същи токен), само че в navy - той е ghost за СВЕТЛА, златна
   подложка, докато `--ghost` е за тъмна. Navy върху лентата: 6.87:1 и за текста,
   и за рамката, тоест минава и 4.5:1, и 3:1.

   ⚠️ Нарочно НЕ ползва `--gold`/`--gold-deep`: целта е точно да НЕ зависи от
   локалната палитра на статията. */
.bg-btn--ghost-navy{background:transparent;color:var(--navy);border-color:var(--navy)}
.bg-btn--ghost-navy:hover{background:var(--navy);color:var(--white);box-shadow:var(--shadow-md)}

/* 22.08.2026 — падащото меню за език виси ПОСТОЯННО ОТВОРЕНО на арменските страници.
   Мерено на живо: на `/` селекторът `.bh-nav-drop__menu` дава `display:none`, на
   `/home-hy` дава `display:block`, тоест никакво правило не се прилага и под чипа
   „ՀԱՅ ▾" стоят видими, неоформени „BG" и „EN".

   Причината: markup-ът идва от `build_shell.py`, стилът НЕ. Той е преписан inline в
   `<style>` блока на всяка страница. Преброено: 64 страници носят markup-а, 62 имат
   CSS зад него; двете без са `home-hy.html` и `contact-hy.html`, писани на ръка,
   преди скриптът да познава `hy`.

   Затова базата живее ТУК: този файл е единственият CSS, зареден на всичките 65
   публични страници, и се версионира от `cachebust.py`. Емитиране от `build_shell.py`
   би сложило същите пет реда в 65 `<style>` блока.

   ⚠️ Защо `:where()` на два от петте реда. Инлайн копията НЕ са едно и също правило:
   от 62-те има 15 различни варианта. 14 блог статии със своя „версия на агента" носят
   СВОЙ фон и цвят на рамката — мерено на рендер, `blog/akt-14-15-16.html` дава
   `rgb(46,53,56)` и `rgba(232,205,53,.25)`, докато каноничното е `rgb(33,41,71)` и
   `rgb(58,68,103)`. Нито една от тях не предефинира `--navy` или `--navy-line` в
   локалния си `:root`: стойностите са изписани буквално, тоест `var(--navy)` НЕ ги
   възпроизвежда.

   А редът на зареждане не е един и същ: на `index.html` инлайн блокът е ПРЕДИ този
   файл, на `portal.html` е СЛЕД него (там този файл е в <head>, а страницата рисува
   стила си в <helmet>). При еднаква тежест печели по-късният, значи голо
   `.bh-nav-drop__menu{background:var(--navy)}` щеше да пребоядиса 14 статии на едните
   страници и нищо на другите. `:where()` е с тежест 0,0,0 и всяко локално копие
   (0,1,0) го бие НЕЗАВИСИМО от реда — същият довод, който по-горе прави `html:root`
   вместо голо `:root`.

   Другите три реда СЪЗНАТЕЛНО остават с нормална тежест: те са дословно еднакви и в
   15-те варианта, тоест не могат да променят нищо никъде, и така не зависят от
   тежест 0,0,0, която чужд селектор от рода на `header nav a` би надвил.
   Редът на последните два има значение: правилото за `:hover`/`:focus-within` е с
   по-голяма тежест (0,3,0) и затова отваря менюто и там, където базата е `:where()`.

   ⚠️ 62-те инлайн копия НАРОЧНО остават на място. Махането им е отделна стъпка. */
.bh-nav-drop{position:relative}
:where(.bh-nav-drop__menu){position:absolute;top:100%;left:50%;transform:translateX(-50%);background:var(--navy);border:1px solid var(--navy-line);border-radius:10px;padding:8px;display:none;flex-direction:column;min-width:240px;box-shadow:0 16px 32px rgba(0,0,0,.35);z-index:60}
.bh-nav-drop:hover .bh-nav-drop__menu,.bh-nav-drop:focus-within .bh-nav-drop__menu{display:flex}
.bh-nav-drop__menu a{padding:10px 14px;border-radius:6px;white-space:nowrap}
:where(.bh-nav-drop__menu a:hover){background:rgba(203,178,106,.12)}

/* ── Широка таблица на тесен екран (правило 2г, изнесено тук на 22.08.2026) ──────
   Шаблонът беше описан в `_ПРАВИЛА_САЙТ.md` и дефиниран inline в ЕДНА блог статия.
   Тоест всяка следваща страница, която го копира, взима markup-а без стила и таблицата
   разлива тялото на документа. Точно това стана с `privacy.html`: таблицата с бисквитките
   е 371px в родител от 335 и разлива страницата до 391 при екран 375.
   По правило 5о споделеният компонент живее тук, а не в `<style>` на страницата. */
.bh-tw{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:12px}
.bh-tw:focus-visible{outline:2px solid var(--gold-ink,#7d6a33);outline-offset:3px}
.bh-t{border-collapse:collapse;width:100%;min-width:560px}
.bh-tcap{font-family:var(--font-caption);font-size:12.5px;color:var(--ink-3);margin:0 0 8px}
/* Скролваща зона без афорданс изглежда като отрязана таблица. Надписът се показва само
   там, където скролът реално се появява. */
.bh-tw-hint{display:none;font-family:var(--font-caption);font-size:11.5px;color:var(--ink-3);
  margin:6px 0 0}
@media (max-width:760px){.bh-tw-hint{display:block}}

/* ── Формата за коментар на тесен екран (23.08.2026) ────────────────────────────
   Мехурчето с полето е `flex:1` до аватара от 40px. `flex:1` значи `min-width:auto`,
   тоест дъното му е min-content на `<input>`-а вътре, а input има собствена вътрешна
   ширина независимо от `width:100%`. При 320px реалната сметка е 40 + 12 + 255 = 307
   в родител от 280, тоест 12 блог страници се разливаха. Лекарството е каноничното от
   правило 5п: `min-width:0` на клетката. Тук, а не inline, защото формата е един и същ
   markup, преписан във всяка статия (правило 5о). */
#bh-comment-form > div{min-width:0}
#bh-comment-form > div > div{min-width:0}
#bh-comment-form input,#bh-comment-form textarea{min-width:0}
