/* ============================================================
   BulGhar Homes — Component primitives.
   Reusable across web + mobile UI kits and slide decks.
   Import after colors_and_type.css.
   ============================================================ */

/* ============ BUTTONS ============ */
.bg-btn {
  --_bg: var(--gold);
  --_fg: var(--navy);
  --_bd: var(--gold);
  display: inline-flex; align-items: center; gap: var(--space-2);
  font-family: var(--font-caption);
  font-weight: 600;
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  font-size: var(--fs-13);
  padding: 14px 24px;
  background: var(--_bg);
  color: var(--_fg);
  border: 1px solid var(--_bd);
  border-radius: var(--radius-pill);
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-out),
              color var(--dur-fast) var(--ease-out),
              transform var(--dur-fast) var(--ease-spring),
              box-shadow var(--dur-base) var(--ease-out);
  text-decoration: none;
  white-space: nowrap;
}
.bg-btn:hover  { background: var(--gold-light); color: var(--navy-deep); box-shadow: var(--shadow-gold-glow); }
.bg-btn:active { transform: translateY(1px) scale(0.985); background: var(--gold-deep); }

.bg-btn--ghost {
  background: transparent;
  color: var(--gold);
  border-color: var(--gold);
}
.bg-btn--ghost:hover { background: var(--gold-tint); color: var(--gold-light); }
/* На cream: --gold дава 1.78:1 и текстът, и рамката изчезваха. */
.on-cream .bg-btn--ghost { color: var(--gold-ink); border-color: var(--gold-ink); }
.on-cream .bg-btn--ghost:hover { background: var(--gold-tint-light); color: var(--gold-ink); }

.bg-btn--solid-navy {
  background: var(--navy);
  color: var(--white);
  border-color: var(--navy);
}
.bg-btn--solid-navy:hover { background: var(--navy-soft); box-shadow: var(--shadow-md); }

.bg-btn--quiet {
  background: transparent;
  color: var(--fg);
  border-color: transparent;
}
.bg-btn--quiet:hover { background: rgba(255,255,255,0.08); }
/* --fg е бяло; на cream --quiet бутонът беше бял текст върху крем. */
.on-cream .bg-btn--quiet { color: var(--ink); }
.on-cream .bg-btn--quiet:hover { background: rgba(33,41,71,0.06); }

.bg-btn--sm  { padding: 10px 16px; font-size: var(--fs-12); }
.bg-btn--lg  { padding: 18px 32px; font-size: var(--fs-14); }

/* Disabled — общо за всички варианти. Не се разчита само на бледост:
   cursor + aria-disabled/disabled носят състоянието и за екранен четец. */
.bg-btn:disabled,
.bg-btn[aria-disabled="true"],
.bg-btn--disabled {
  background: var(--navy-soft);
  color: var(--fg-3);
  border-color: var(--navy-line);
  box-shadow: none;
  cursor: not-allowed;
  pointer-events: none;
}
.on-cream .bg-btn:disabled,
.on-cream .bg-btn[aria-disabled="true"],
.on-cream .bg-btn--disabled {
  background: var(--cream-line);
  color: var(--ink-3);
  border-color: var(--cream-line-strong);
}

/* Icon button */
.bg-icon-btn {
  width: 44px; height: 44px;
  display: inline-grid; place-items: center;
  border-radius: var(--radius-pill);
  background: rgba(255,255,255,0.06);
  color: var(--gold);
  border: 1px solid var(--navy-line-strong);
  cursor: pointer;
  transition: background var(--dur-fast), border-color var(--dur-fast);
}
.bg-icon-btn:hover { background: var(--gold-tint); border-color: var(--gold); }
/* Беше --gold-deep върху --cream-soft = 2.80:1 (иконата под прага 3:1 за
   нетекстов елемент) с --cream-line рамка = 1.26:1 (рамката я нямаше). */
.on-cream .bg-icon-btn { background: var(--white); color: var(--gold-ink); border-color: var(--cream-line-strong); }
.on-cream .bg-icon-btn:hover { background: var(--gold-tint-light); border-color: var(--gold-ink); }
.bg-icon-btn:disabled,
.bg-icon-btn[aria-disabled="true"] { color: var(--fg-3); border-color: var(--navy-line); cursor: not-allowed; pointer-events: none; }
.on-cream .bg-icon-btn:disabled,
.on-cream .bg-icon-btn[aria-disabled="true"] { color: var(--ink-3); border-color: var(--cream-line); }

/* ============ CHIPS / BADGES ============ */
.bg-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px;
  font-family: var(--font-caption);
  font-size: var(--fs-12);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  border-radius: var(--radius-pill);
  background: rgba(255,255,255,0.06);
  color: var(--fg-2);
  border: 1px solid var(--navy-line);
  cursor: pointer;
  transition: all var(--dur-fast) var(--ease-out);
}
.bg-chip:hover  { color: var(--gold); border-color: var(--gold); }
.bg-chip--active { background: var(--gold-tint); color: var(--gold); border-color: var(--gold); font-weight: 600; }
.on-cream .bg-chip { background: transparent; color: var(--ink-2); border-color: var(--cream-line-strong); }
.on-cream .bg-chip:hover { color: var(--gold-ink); border-color: var(--gold-ink); }
/* Тук беше най-грубото: избраният чип (gold-deep върху gold-tint над cream =
   2.45:1) беше ПО-НЕВИДИМ от неизбрания (ink-2 върху cream = 6.65:1).
   Сега измивката стои над бяло (--gold-tint-light), мастилото е --gold-ink
   = 4.88:1, а inset ring-ът дава втори пиксел дебелина без да мести layout. */
.on-cream .bg-chip--active {
  background: var(--gold-tint-light);
  color: var(--gold-ink);
  border-color: var(--gold-ink);
  box-shadow: inset 0 0 0 1px var(--gold-ink);
}
.bg-chip:disabled,
.bg-chip[aria-disabled="true"] { color: var(--fg-3); border-color: var(--navy-line); cursor: not-allowed; pointer-events: none; }
.on-cream .bg-chip:disabled,
.on-cream .bg-chip[aria-disabled="true"] { color: var(--ink-3); border-color: var(--cream-line); }

.bg-badge {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 4px 10px;
  font-family: var(--font-caption);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  border-radius: var(--radius-pill);
  background: var(--gold);
  color: var(--navy);
}
.bg-badge--ghost { background: transparent; color: var(--gold); border: 1px solid var(--gold); }
.on-cream .bg-badge--ghost { color: var(--gold-ink); border-color: var(--gold-ink); }
.bg-badge--cream { background: var(--cream); color: var(--navy); }

/* ============ СТАТУС НА ИМОТ ============
   Петте статуса от Excel-а. По подразбиране navy тема, .on-cream за светла.

   ⚠️ WCAG 1.4.1 — НИКОГА само цвят. Плочката ЗАДЪЛЖИТЕЛНО съдържа думата:

     <span class="bg-status bg-status--sale">За продажба</span>
     <span class="bg-status bg-status--sold">Продаден</span>
     <span class="bg-status bg-status--reserved">Резервиран</span>
     <span class="bg-status bg-status--rent">Под наем</span>
     <span class="bg-status bg-status--off">Свален</span>

   Точката ::before е втори, излишен носител на цвета — не заместител на текста.
   Празен .bg-status е бъг, не стилистичен избор.
   Поводът: 15.08.2026 наем със златен етикет „За продажба" на витрината,
   защото златото беше единственият цвят в системата и се лепеше на всичко. */
.bg-status {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 12px;
  font-family: var(--font-caption);
  font-size: var(--fs-12);
  font-weight: 600;
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  border-radius: var(--radius-pill);
  border: 1px solid currentColor;
  white-space: nowrap;
}
.bg-status::before {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: currentColor; flex: none;
}

.bg-status--sale     { background: var(--status-sale-bg-navy);     color: var(--status-sale-on-navy); }
.bg-status--sold     { background: var(--status-sold-bg-navy);     color: var(--status-sold-on-navy); }
.bg-status--reserved { background: var(--status-reserved-bg-navy); color: var(--status-reserved-on-navy); }
.bg-status--rent     { background: var(--status-rent-bg-navy);     color: var(--status-rent-on-navy); }
.bg-status--off      { background: var(--status-off-bg-navy);      color: var(--status-off-on-navy); }

.on-cream .bg-status--sale     { background: var(--status-sale-bg);     color: var(--status-sale-ink); }
.on-cream .bg-status--sold     { background: var(--status-sold-bg);     color: var(--status-sold-ink); }
.on-cream .bg-status--reserved { background: var(--status-reserved-bg); color: var(--status-reserved-ink); }
.on-cream .bg-status--rent     { background: var(--status-rent-bg);     color: var(--status-rent-ink); }
.on-cream .bg-status--off      { background: var(--status-off-bg);      color: var(--status-off-ink); }

/* Свален = приключил. Леко приглушен, но НЕ под прага — 6.46:1 на светло. */
.bg-status--off { text-decoration: line-through; text-decoration-thickness: 1px; }

/* ============ CARDS ============ */
.bg-card {
  background: var(--cream-soft);
  color: var(--ink);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  overflow: hidden;
  transition: transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}
.bg-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }

.bg-card--navy {
  background: var(--navy-soft);
  color: var(--fg);
  border: 1px solid var(--navy-line);
}

.bg-card--gold-edge {
  border: 1px solid var(--gold);
  box-shadow: var(--shadow-gold-glow);
}

/* ============ FORM CONTROLS ============ */
.bg-field {
  display: flex; flex-direction: column; gap: 6px;
}
.bg-field > label, .bg-field-label {
  font-family: var(--font-caption);
  font-size: var(--fs-12);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  color: var(--gold);
}
/* --gold върху cream е 1.78:1 — етикетите на светлите форми не се четяха. */
.on-cream .bg-field > label,
.on-cream .bg-field-label { color: var(--gold-ink); }
.bg-input, .bg-select, .bg-textarea {
  font-family: var(--font-body);
  font-size: var(--fs-16);
  padding: 14px 18px;
  background: transparent;
  color: var(--fg);
  /* --navy-line е 1.50:1 срещу navy — за декоративен косъм минава, за граница
     на поле не (WCAG 1.4.11 иска 3:1). --navy-line-strong е 3.67:1. */
  border: 1px solid var(--navy-line-strong);
  border-radius: var(--radius-md);
  transition: border-color var(--dur-fast), background var(--dur-fast);
  width: 100%;
}
.bg-input::placeholder, .bg-textarea::placeholder { color: var(--fg-3); }
.bg-input:hover, .bg-select:hover, .bg-textarea:hover { border-color: var(--gold); }
.bg-input:focus, .bg-select:focus, .bg-textarea:focus { border-color: var(--gold); outline: none; background: rgba(255,255,255,0.04); }
/* Беше --cream-line = 1.17:1 срещу cream и 1.37:1 срещу бялото на самото поле —
   полето и фонът бяха един цвят за окото. --cream-line-strong е 3.29 / 3.84:1. */
.on-cream .bg-input, .on-cream .bg-select, .on-cream .bg-textarea {
  border-color: var(--cream-line-strong); color: var(--ink); background: var(--white);
}
/* ⚠️ НАЙ-ЛОШОТО ЕДИНИЧНО ЧИСЛО, което системата е имала — по-лошо от златото
   върху кремаво. Плейсхолдърът наследяваше --fg-3 = rgba(255,255,255,.54),
   тоест 54% БЯЛО върху бялото поле: композитът е чисто #ffffff, контраст
   точно 1.00:1. Не „труден за четене" — буквално невидим текст.
   --ink-3 дава 5.64:1. Не връщай --fg-3 тук при никакви обстоятелства. */
.on-cream .bg-input::placeholder,
.on-cream .bg-textarea::placeholder { color: var(--ink-3); }
.on-cream .bg-input:hover, .on-cream .bg-select:hover, .on-cream .bg-textarea:hover { border-color: var(--gold-ink); }
.on-cream .bg-input:focus, .on-cream .bg-select:focus, .on-cream .bg-textarea:focus { background: var(--white); border-color: var(--gold-ink); }

/* Disabled поле */
.bg-input:disabled, .bg-select:disabled, .bg-textarea:disabled {
  background: rgba(255,255,255,0.03);
  color: var(--fg-3);
  border-color: var(--navy-line);
  cursor: not-allowed;
}
.on-cream .bg-input:disabled, .on-cream .bg-select:disabled, .on-cream .bg-textarea:disabled {
  background: var(--cream-line); color: var(--ink-3); border-color: var(--cream-line-strong);
}

/* Невалидно поле. Цветът НЕ е единственият сигнал: иска се и aria-invalid,
   и видим .bg-field-error текст под полето (WCAG 1.4.1 + 3.3.1).
     <input class="bg-input bg-input--invalid" aria-invalid="true"
            aria-describedby="err-tel">
     <p class="bg-field-error" id="err-tel">Телефонът трябва да е с код +359.</p> */
.bg-input--invalid,
.bg-input[aria-invalid="true"],
.bg-select[aria-invalid="true"],
.bg-textarea[aria-invalid="true"] {
  border-color: var(--danger-on-navy);
  box-shadow: inset 0 0 0 1px var(--danger-on-navy);
}
.bg-input--invalid:focus,
.bg-input[aria-invalid="true"]:focus { border-color: var(--danger-on-navy); }
.on-cream .bg-input--invalid,
.on-cream .bg-input[aria-invalid="true"],
.on-cream .bg-select[aria-invalid="true"],
.on-cream .bg-textarea[aria-invalid="true"] {
  border-color: var(--danger-ink);
  box-shadow: inset 0 0 0 1px var(--danger-ink);
}

.bg-field-error {
  display: flex; align-items: center; gap: 6px;
  font-family: var(--font-caption);
  font-size: var(--fs-13);
  color: var(--danger-on-navy);   /* 4.56:1 на navy */
}
.bg-field-error::before { content: "!"; font-weight: 700; }
.on-cream .bg-field-error { color: var(--danger-ink); }  /* 4.51:1 на cream */

.bg-field-hint {
  font-family: var(--font-caption);
  font-size: var(--fs-13);
  color: var(--fg-2);
}
.on-cream .bg-field-hint { color: var(--ink-2); }

/* Search field — pill with leading icon */
.bg-search {
  display: flex; align-items: center; gap: var(--space-3);
  padding: 10px 18px;
  border: 1px solid var(--navy-line-strong);
  border-radius: var(--radius-pill);
  background: rgba(255,255,255,0.04);
  transition: border-color var(--dur-fast);
}
.bg-search:focus-within { border-color: var(--gold); }
.bg-search input { all: unset; flex: 1; font-family: var(--font-body); font-size: var(--fs-16); color: inherit; }
.bg-search input::placeholder { color: var(--fg-3); }
.on-cream .bg-search { background: var(--white); border-color: var(--cream-line-strong); color: var(--ink); }
.on-cream .bg-search:focus-within { border-color: var(--gold-ink); }
.on-cream .bg-search input::placeholder { color: var(--ink-3); }

/* ============ DIVIDER + ORNAMENTS ============ */
.bg-rule {
  height: 1px; background: linear-gradient(to right, transparent, var(--gold) 50%, transparent);
  border: 0; margin: var(--space-8) 0;
}
.bg-rule--solid { background: var(--navy-line); }
.on-cream .bg-rule--solid { background: var(--cream-line); }
/* Декорация (WCAG я освобождава от праг), но --gold на крем е 1.78:1 и линията
   практически изчезваше. --gold-deep е 2.61:1 — вижда се, без да натежава. */
.on-cream .bg-rule { background: linear-gradient(to right, transparent, var(--gold-deep) 50%, transparent); }

/* Tagline ornament — used as decorative section dividers */
.bg-ornament {
  display: inline-flex; align-items: center; gap: var(--space-3);
  font-family: var(--font-tagline);
  text-transform: uppercase;
  letter-spacing: var(--ls-tag);
  color: var(--gold);
  font-size: var(--fs-12);
}
.bg-ornament::before, .bg-ornament::after {
  content: ""; height: 1px; width: 48px; background: currentColor; opacity: 0.55;
}
/* Орнаментът носи ТЕКСТ, не е чиста декорация — иска 4.5:1 и на светло. */
.on-cream .bg-ornament { color: var(--gold-ink); }

/* ============ LINK TREATMENTS ============ */
.bg-link {
  color: var(--gold);
  text-decoration: none;
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 0% 1px;
  background-position: 0 100%;
  background-repeat: no-repeat;
  transition: background-size var(--dur-base) var(--ease-out), color var(--dur-fast);
}
.bg-link:hover { background-size: 100% 1px; color: var(--gold-light); }
/* Линк в златно върху крем беше 1.78:1 — най-често срещаният счупен текст в
   системата (телефон, имейл, „виж имота"). --gold-ink е 4.51:1.
   На hover ПОДЧЕРТАВАНЕТО е носителят на състоянието, не цветът — затова тук
   се потъмнява, а не изсветлява: --gold-light на cream е 1.62:1. */
.on-cream .bg-link { color: var(--gold-ink); }
.on-cream .bg-link:hover { color: var(--ink); }

/* ============ NAV ============ */
.bg-navlink {
  font-family: var(--font-caption);
  font-size: var(--fs-13);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  color: var(--fg-2);
  text-decoration: none;
  padding: 8px 0;
  position: relative;
  transition: color var(--dur-fast);
}
.bg-navlink:hover, .bg-navlink--active { color: var(--gold); }
.bg-navlink--active::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -2px;
  height: 1px; background: var(--gold);
}
/* --fg-2 е 78% бяло — навигацията беше невидима върху крем. */
.on-cream .bg-navlink { color: var(--ink-2); }
.on-cream .bg-navlink:hover, .on-cream .bg-navlink--active { color: var(--gold-ink); }
.on-cream .bg-navlink--active::after { background: var(--gold-ink); }

/* ============ HOVER MEDIA ============ */
.bg-media-zoom { overflow: hidden; }
.bg-media-zoom > img { transition: transform var(--dur-slow) var(--ease-out); }
.bg-media-zoom:hover > img { transform: scale(1.06); }

/* ============ BRAND PATTERNS ============ */
/* Usage: add class to any surface element. Combine with brand bg colors. */

.bg-pattern-diamond {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M12 0L24 12L12 24L0 12Z' fill='none' stroke='%23cbb26a' stroke-width='0.7' opacity='0.35'/%3E%3C/svg%3E");
}
.bg-pattern-dots {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Ccircle cx='10' cy='10' r='1.2' fill='%23cbb26a' opacity='0.28'/%3E%3C/svg%3E");
}
.bg-pattern-arch {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M0 40C10 18 30 18 40 40' fill='none' stroke='%23cbb26a' stroke-width='0.8' opacity='0.32'/%3E%3C/svg%3E");
}
.bg-pattern-diagonal {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10'%3E%3Cline x1='0' y1='10' x2='10' y2='0' stroke='%23cbb26a' stroke-width='0.55' opacity='0.22'/%3E%3C/svg%3E");
}
.bg-pattern-ogee {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28'%3E%3Cpath d='M0 0C7 14 21 14 28 0' fill='none' stroke='%23cbb26a' stroke-width='0.7' opacity='0.32'/%3E%3Cpath d='M0 28C7 14 21 14 28 28' fill='none' stroke='%23cbb26a' stroke-width='0.7' opacity='0.32'/%3E%3C/svg%3E");
}
/* On cream: darker gold for visibility */
.on-cream .bg-pattern-diamond  { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M12 0L24 12L12 24L0 12Z' fill='none' stroke='%23a8924f' stroke-width='0.7' opacity='0.3'/%3E%3C/svg%3E"); }
.on-cream .bg-pattern-dots      { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Ccircle cx='10' cy='10' r='1.2' fill='%23a8924f' opacity='0.3'/%3E%3C/svg%3E"); }
.on-cream .bg-pattern-arch      { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M0 40C10 18 30 18 40 40' fill='none' stroke='%23a8924f' stroke-width='0.8' opacity='0.28'/%3E%3C/svg%3E"); }
.on-cream .bg-pattern-diagonal  { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10'%3E%3Cline x1='0' y1='10' x2='10' y2='0' stroke='%23a8924f' stroke-width='0.55' opacity='0.22'/%3E%3C/svg%3E"); }
.on-cream .bg-pattern-ogee      { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28'%3E%3Cpath d='M0 0C7 14 21 14 28 0' fill='none' stroke='%23a8924f' stroke-width='0.7' opacity='0.28'/%3E%3Cpath d='M0 28C7 14 21 14 28 28' fill='none' stroke='%23a8924f' stroke-width='0.7' opacity='0.28'/%3E%3C/svg%3E"); }

/* ============ BRAND TEXTURES ============ */
/* Grain/noise overlays — apply on top of brand surface colors */

.bg-texture-grain {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E");
}
.bg-texture-linen {
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.055'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cline x1='0' y1='0' x2='4' y2='4' stroke='%23c8b88a' stroke-width='0.3' opacity='0.15'/%3E%3C/svg%3E");
}
.bg-texture-stone {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='turbulence' baseFrequency='0.5' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.07'/%3E%3C/svg%3E");
}

/* ============ BRAND FRAMES ============ */
/* Corner marks — add to a position:relative container */

/* 2-corner minimal (top-left + bottom-right) */
.bg-frame-2corner::before,
.bg-frame-2corner::after {
  content: ""; position: absolute;
  width: 10px; height: 10px;
  border-color: var(--gold); border-style: solid;
  opacity: 0.7;
}
.bg-frame-2corner::before { top: 10px; left: 10px; border-width: 1.5px 0 0 1.5px; }
.bg-frame-2corner::after  { bottom: 10px; right: 10px; border-width: 0 1.5px 1.5px 0; }

/* 4-corner full — requires nested .bg-frame-4corner-inner element */
.bg-frame-4corner { position: relative; }
.bg-frame-4corner::before,
.bg-frame-4corner::after {
  content: ""; position: absolute;
  width: 14px; height: 14px;
  border-color: var(--gold); border-style: solid;
  opacity: 0.8; pointer-events: none; z-index: 1;
}
.bg-frame-4corner::before { top: 10px; left: 10px; border-width: 1.5px 0 0 1.5px; }
.bg-frame-4corner::after  { top: 10px; right: 10px; border-width: 1.5px 1.5px 0 0; }
.bg-frame-4corner-bl::before,
.bg-frame-4corner-bl::after {
  content: ""; position: absolute;
  width: 14px; height: 14px;
  border-color: var(--gold); border-style: solid;
  opacity: 0.8; pointer-events: none; z-index: 1;
}
.bg-frame-4corner-bl::before { bottom: 10px; left: 10px; border-width: 0 0 1.5px 1.5px; }
.bg-frame-4corner-bl::after  { bottom: 10px; right: 10px; border-width: 0 1.5px 1.5px 0; }

/* Рамките са чиста декорация, но --gold на крем е 1.78:1 и ъглите изчезваха.
   --gold-deep (2.61:1) ги връща, без да променя тъмния облик. */
.on-cream .bg-frame-2corner::before,
.on-cream .bg-frame-2corner::after,
.on-cream .bg-frame-4corner::before,
.on-cream .bg-frame-4corner::after,
.on-cream .bg-frame-4corner-bl::before,
.on-cream .bg-frame-4corner-bl::after { border-color: var(--gold-deep); }

/* Full inset border */
.bg-frame-inset {
  box-shadow: inset 0 0 0 10px transparent,
              inset 0 0 0 11px rgba(203,178,106,0.35);
}

/* ============ СЪОБЩЕНИЯ / ALERTS ============
   Дотук --success / --warning / --danger / --info бяха дефинирани в
   colors_and_type.css, но `grep var(--success) components.css` даваше 0
   попадения — четири сирачета. Това е първият им реален компонент.

   ⚠️ WCAG 1.4.1: ролята не се носи от цвета. Ползвай role="status" (success/
   info), role="alert" (danger) и заглавен ред с ДУМА в .bg-alert-title. */
.bg-alert {
  display: flex; flex-direction: column; gap: 4px;
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-md);
  border-left: 3px solid currentColor;
  font-family: var(--font-body);
  font-size: var(--fs-14);
  line-height: var(--lh-normal);
}
.bg-alert-title {
  font-family: var(--font-caption);
  font-size: var(--fs-12);
  font-weight: 700;
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
}
.bg-alert-body { color: var(--fg); }          /* бяло върху тъмната подложка */
.on-cream .bg-alert-body { color: var(--ink); }

.bg-alert--success { background: var(--success-wash-navy); color: var(--success-on-navy); }  /* 4.63:1 */
.bg-alert--warning { background: var(--warning-wash-navy); color: var(--warning); }           /* 5.43:1 */
.bg-alert--danger  { background: var(--danger-wash-navy);  color: var(--danger-on-navy); }    /* 4.79:1 */
.bg-alert--info    { background: var(--info-wash-navy);    color: var(--info-on-navy); }      /* 4.65:1 */

.on-cream .bg-alert--success { background: var(--success-wash); color: var(--success-ink); }  /* 4.63:1 */
.on-cream .bg-alert--warning { background: var(--warning-wash); color: var(--warning-ink); }  /* 4.76:1 */
.on-cream .bg-alert--danger  { background: var(--danger-wash);  color: var(--danger-ink); }   /* 4.52:1 — най-тясната двойка в системата */
.on-cream .bg-alert--info    { background: var(--info-wash);    color: var(--info-ink); }     /* 4.56:1 */

/* ============ ТАБЛИЦА ============
   Дотук в системата нямаше таблица изобщо и всяка следваща се измисляше
   ad hoc. Зебра, sticky header, hover ред, разделители над 3:1. */
.bg-table {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-body);
  font-size: var(--fs-14);
  color: var(--fg);
}
.bg-table caption {
  text-align: left;
  padding-bottom: var(--space-3);
  font-family: var(--font-caption);
  font-size: var(--fs-12);
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  color: var(--fg-2);
}
.bg-table thead th {
  position: sticky; top: 0; z-index: 2;
  background: var(--navy-deep);
  color: var(--gold);                       /* 8.11:1 върху navy-deep */
  font-family: var(--font-caption);
  font-size: var(--fs-12);
  font-weight: 600;
  letter-spacing: var(--ls-caps);
  text-transform: uppercase;
  text-align: left;
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--navy-line-strong);
}
.bg-table tbody td {
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--navy-line-strong);
  vertical-align: middle;
}
.bg-table tbody tr:nth-child(even) { background: rgba(255,255,255,0.04); }
.bg-table tbody tr:hover { background: var(--navy-soft); }
.bg-table tfoot td {
  padding: var(--space-3) var(--space-4);
  font-weight: 600;
  border-top: 2px solid var(--navy-line-strong);
}
/* Цифри — винаги IBM Plex Serif, дясно подравнени, с таблични фигури.
   Правилото „числа никога с Italiana" от COOKBOOK важи и тук. */
.bg-table .num, .bg-table td[data-num] {
  text-align: right;
  font-family: var(--font-body);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.on-cream .bg-table { color: var(--ink); }
.on-cream .bg-table caption { color: var(--ink-2); }
.on-cream .bg-table thead th {
  background: var(--cream);
  color: var(--gold-ink);                   /* 4.51:1 върху cream */
  border-bottom-color: var(--cream-line-strong);
}
.on-cream .bg-table tbody td,
.on-cream .bg-table tfoot td { border-color: var(--cream-line-strong); }
.on-cream .bg-table tbody tr:nth-child(even) { background: var(--white); }
.on-cream .bg-table tbody tr:hover { background: var(--gold-tint-light); }

/* ============ UTILITY ============ */
.bg-skeleton {
  background: linear-gradient(90deg, var(--navy-soft) 0%, var(--navy-line) 50%, var(--navy-soft) 100%);
  background-size: 200% 100%;
  animation: bg-shimmer 1.4s linear infinite;
  border-radius: var(--radius-sm);
}
/* Тъмният skeleton върху крем беше навy петно на светла страница. */
.on-cream .bg-skeleton {
  background: linear-gradient(90deg, var(--cream-line) 0%, var(--cream-soft) 50%, var(--cream-line) 100%);
  background-size: 200% 100%;
}
@keyframes bg-shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) {
  .bg-skeleton { animation: none; }
}
