/* input(3918,5): run-time error CSS1060: Expected closing curly-brace, found '@keyframes'
input(3922,1): run-time error CSS1019: Unexpected token, found '}'
input(8731,22): run-time error CSS1030: Expected identifier, found '4\/3'
input(8731,22): run-time error CSS1033: Expected closing bracket, found '4\/3'
input(8731,26): run-time error CSS1031: Expected selector, found ']'
input(8731,26): run-time error CSS1025: Expected comma or open brace, found ']' */
/* ============================================
   BCFC Card Animations
   Hover lift, image scale, and stagger effects
   ============================================ */

/* Card base hover effect */
.bcfc-card,
.bcfc-number-card,
.stat-item,
article[class*="card"] {
    transition: all 0.3s ease;
}

@media (prefers-reduced-motion: reduce) {
    .bcfc-card,
    .bcfc-number-card,
    .stat-item,
    article[class*="card"] {
        transition: none;
    }

    /* Suppress hover transforms */
    .bcfc-card:hover,
    .bcfc-number-card:hover,
    .stat-item:hover,
    article[class*="card"]:hover {
        transform: none;
        box-shadow: none;
    }

    .bcfc-card:hover img,
    .bcfc-number-card:hover img,
    .stat-item:hover img,
    article[class*="card"]:hover img {
        transform: none;
    }

    .bcfc-home__why-grid .bcfc-number-card:hover {
        transform: none;
        box-shadow: none;
    }

    .bcfc-home__why-grid .bcfc-number-card:hover .bcfc-number-card__number {
        transform: none;
    }

    a.bcfc-home__action:hover {
        transform: none;
        box-shadow: none;
    }

    .bcfc-pill-nav__link:hover,
    .bcfc-pill-nav a:hover {
        transform: none;
    }

    .bcfc-guideline-card:hover,
    [class*="guideline-card"]:hover {
        transform: none;
        box-shadow: none;
    }
}

/* Hover lift effect on cards */
.bcfc-card:hover,
.bcfc-number-card:hover,
.stat-item:hover,
article[class*="card"]:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(14, 44, 92, 0.08);
}

/* Image scale inside cards on hover */
.bcfc-card img,
.bcfc-number-card img,
.stat-item img,
article[class*="card"] img {
    transition: transform 0.3s ease;
}

.bcfc-card:hover img,
.bcfc-number-card:hover img,
.stat-item:hover img,
article[class*="card"]:hover img {
    transform: scale(1.03);
}

/* Number cards in home page why section */
.bcfc-home__why-grid .bcfc-number-card {
    transition: all 0.3s ease;
}

.bcfc-home__why-grid .bcfc-number-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(14, 44, 92, 0.08);
}

.bcfc-home__why-grid .bcfc-number-card:hover .bcfc-number-card__number {
    transform: scale(1.05);
}

.bcfc-home__why-grid .bcfc-number-card__number {
    transition: transform 0.3s ease;
}

/* Stats section card stagger */
.bcfc-stats-section .stat-item {
    transition: all 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
}

/* CTA buttons with hover lift */
a.bcfc-home__action:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
}

/* Pill nav links hover */
.bcfc-pill-nav__link:hover,
.bcfc-pill-nav a:hover {
    transform: translateY(-1px);
}

/* Guideline cards */
.bcfc-guideline-card,
[class*="guideline-card"] {
    transition: all 0.3s ease;
}

.bcfc-guideline-card:hover,
[class*="guideline-card"]:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px rgba(14, 44, 92, 0.08);
}

/* ============================================
   CARD GRID ENTRANCE — staggered scroll reveals
   Applied to children of card grids that have
   .io-animate on each item.
   ============================================ */

/* Default: stagger delay for items without explicit --io-delay */
.ir-bento-item.io-animated,
.ir-link-card.io-animated,
.report-card.io-animated,
.ar-report-card.io-animated,
.announcement-card.io-animated {
    --io-delay: 0ms;
}

/* Stagger up to 8 items */
.ir-bento-item.io-animated:nth-child(1),
.ir-link-card.io-animated:nth-child(1),
.report-card.io-animated:nth-child(1),
.ar-report-card.io-animated:nth-child(1),
.announcement-card.io-animated:nth-child(1) { --io-delay: 0ms; }
.ir-bento-item.io-animated:nth-child(2),
.ir-link-card.io-animated:nth-child(2),
.report-card.io-animated:nth-child(2),
.ar-report-card.io-animated:nth-child(2),
.announcement-card.io-animated:nth-child(2) { --io-delay: 60ms; }
.ir-bento-item.io-animated:nth-child(3),
.ir-link-card.io-animated:nth-child(3),
.report-card.io-animated:nth-child(3),
.ar-report-card.io-animated:nth-child(3),
.announcement-card.io-animated:nth-child(3) { --io-delay: 120ms; }
.ir-bento-item.io-animated:nth-child(4),
.ir-link-card.io-animated:nth-child(4),
.report-card.io-animated:nth-child(4),
.ar-report-card.io-animated:nth-child(4),
.announcement-card.io-animated:nth-child(4) { --io-delay: 180ms; }
.ir-bento-item.io-animated:nth-child(5),
.ir-link-card.io-animated:nth-child(5),
.report-card.io-animated:nth-child(5),
.ar-report-card.io-animated:nth-child(5),
.announcement-card.io-animated:nth-child(5) { --io-delay: 240ms; }
.ir-bento-item.io-animated:nth-child(6),
.ir-link-card.io-animated:nth-child(6),
.report-card.io-animated:nth-child(6),
.ar-report-card.io-animated:nth-child(6),
.announcement-card.io-animated:nth-child(6) { --io-delay: 300ms; }
.ir-bento-item.io-animated:nth-child(7),
.ir-link-card.io-animated:nth-child(7),
.report-card.io-animated:nth-child(7),
.ar-report-card.io-animated:nth-child(7),
.announcement-card.io-animated:nth-child(7) { --io-delay: 360ms; }
.ir-bento-item.io-animated:nth-child(8),
.ir-link-card.io-animated:nth-child(8),
.report-card.io-animated:nth-child(8),
.ar-report-card.io-animated:nth-child(8),
.announcement-card.io-animated:nth-child(8) { --io-delay: 420ms; }

/* ============================================
   CARD ICON MICRO-INTERACTIONS
   SVG icons scale + rotate slightly on parent hover
   ============================================ */

.ir-link-card:hover .ir-link-card__icon svg,
.ir-bento-item:hover .ir-bento-card__icon svg,
.ir-bento-item:hover .ir-bento-wide__icon svg,
.ir-governance-item:hover .ir-governance-item__icon svg {
    transform: scale(1.15);
    color: var(--bcfc-dark-ink, var(--color-secondary));
    transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), color 0.2s ease;
}

.ir-link-card__icon svg,
.ir-bento-card__icon svg,
.ir-bento-wide__icon svg,
.ir-governance-item__icon svg {
    transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), color 0.2s ease;
}

/* ============================================
   CARD IMAGE ZOOM REVEAL ON HOVER
   Image inside card zooms subtly from center
   ============================================ */

.report-card:hover .report-card__thumbnail,
.ar-report-card:hover .ar-report-card-image img,
.announcement-card:hover .announcement-card__image img {
    transform: scale(1.06);
}

.report-card__thumbnail,
.ar-report-card-image img,
.announcement-card__image img {
    transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

/* ============================================
   REPORT CARD — button arrow slide right on hover
   ============================================ */

.report-card:hover .report-card__btn-icon,
.ir-bento-item:hover .ir-bento-card__action svg,
.ir-bento-wide:hover .ir-bento-wide__action svg {
    transform: translateX(3px);
}

.report-card__btn-icon,
.ir-bento-card__action svg,
.ir-bento-wide__action svg {
    transition: transform 0.2s ease;
}

/* ============================================
   BENTO ITEM — full card lift + border accent
   ============================================ */

.ir-bento-item.io-animated {
    animation: io-fadeInUp 0.5s ease forwards;
    opacity: 0;
}

.ir-bento-item:hover {
    border-color: rgba(0, 59, 114, 0.25);
    box-shadow: 0 12px 32px rgba(0, 59, 114, 0.1);
}

/* ============================================
   IR LINK CARD — press effect on click
   ============================================ */

.ir-link-card:active {
    transform: translateY(-1px) scale(0.99);
    transition: transform 0.1s ease;
}

/* ============================================
   BOARD CHARTER BANNER — gradient pulse on hover
   ============================================ */

.board-charter-banner:hover .board-charter-banner__gradient {
    opacity: 0.2;
    transition: opacity 0.4s ease;
}

.board-charter-banner__gradient {
    opacity: 0.1;
    transition: opacity 0.4s ease;
}

.board-charter-banner:hover .board-charter-banner__link {
    transform: scale(1.03);
    box-shadow: 0 16px 32px rgba(0, 0, 0, 0.2);
}

.board-charter-banner__link {
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

/* ============================================
   YEAR PILL FILTER — subtle bounce on activation
   ============================================ */


@keyframes pill-pop {
    0%   { transform: scale(1); }
    50%  { transform: scale(1.08); }
    100% { transform: scale(1); }
}

/* ============================================
   VIEW TOGGLE — active indicator slides
   ============================================ */

.view-toggle__btn--active {
    position: relative;
    overflow: hidden;
}

.view-toggle__btn--active::after {
    content: '';
    position: absolute;
    inset: 0;
    background: rgba(255, 255, 255, 0.15);
    border-radius: inherit;
    animation: toggle-pulse 1.5s ease-in-out infinite;
}

@keyframes toggle-pulse {
    0%, 100% { opacity: 0; transform: scale(0.8); }
    50%       { opacity: 1; transform: scale(1); }
}

/* ============================================
   ANNOUNCEMENT CARD — slide-in arrow on hover
   ============================================ */

.announcement-card:hover .announcement-card__btn {
    gap: 10px;
}

.announcement-card__btn {
    gap: 6px;
    transition: gap 0.2s ease;
}

/* ============================================
   AR REPORT CARD — full card lift + image zoom
   ============================================ */

.ar-report-card-link:hover {
    transform: translateY(-3px);
    box-shadow: 0 12px 28px rgba(0, 59, 114, 0.12);
}

.ar-report-card-link {
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.ar-report-card-link:hover .ar-report-card-image img {
    transform: scale(1.05);
}

.ar-report-card-image img {
    transition: transform 0.4s ease;
}

.ar-report-card-link:hover .ar-report-card-cta {
    gap: 10px;
}

.ar-report-card-cta {
    gap: 6px;
    transition: gap 0.2s ease;
}

/* ============================================
   GOVERNANCE LINK CARD — icon slides right
   ============================================ */

.ir-governance-item:hover .ir-governance-item__title {
    color: var(--bcfc-dark-ink, var(--color-secondary));
    transition: color 0.2s ease;
}

.ir-governance-item__title {
    transition: color 0.2s ease;
    text-transform: capitalize;
}

/* ============================================
   IR ACCORDION — content fade + slide on open
   ============================================ */

.ir-accordion-body {
    animation: accordion-open 0.35s ease forwards;
}

@keyframes accordion-open {
    from { opacity: 0; transform: translateY(-8px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* ============================================
   REDUCED MOTION — suppress all transitions/animations
   ============================================ */

@media (prefers-reduced-motion: reduce) {
    .ir-bento-item.io-animated,
    .ir-link-card.io-animated,
    .report-card.io-animated,
    .ar-report-card.io-animated,
    .announcement-card.io-animated {
        animation: none;
        opacity: 1;
    }

    
    .view-toggle__btn--active::after {
        animation: none;
    }

    .board-charter-banner__gradient,
    .board-charter-banner__link {
        transition: none;
    }

    .ir-link-card:active {
        transform: none;
        transition: none;
    }
}

/* ============================================
   Scroll-triggered animations (replaces animate.css)
   Triggered by bcfc-intersection.js when .io-animate
   elements enter the viewport.
   Uses --io-delay CSS var so per-element delay works.
   ============================================ */
.io-animated {
    animation-duration: 1s;
    animation-fill-mode: both;
    animation-delay: var(--io-delay, 0ms);
}

/* Pre-animation state so elements start hidden instead of flashing
   visible -> invisible -> visible when the scroll observer triggers. */
.io-animate:not(.io-animated) {
    opacity: 0;
}

@media (prefers-reduced-motion: reduce) {
    .io-animate:not(.io-animated) {
        opacity: 1;
    }
}
/*
   The intersection script adds these local classes. Keep their animation
   names here instead of relying on the asynchronously loaded animate.css
   CDN stylesheet, which is not guaranteed to be available when a page is
   painted.
*/
/* io-fadeIn — A PURE OPACITY FADE, WITH NO TRANSFORM, and it was missing.
   100 elements across 64 views are marked `io-animate fadeIn`, i.e. their author asked for a fade
   and nothing else. There was no io-fadeIn class and no 'fadeIn' entry in bcfc-intersection.ts's
   animationMap, so every one of them fell through to the default io-fadeInUp and ran a 1s fade
   PLUS a 40px upward slide. On a tall band that is the visible judder reported as flickering on
   /en/islamic-finance/islamic-services/murabaha-financing/ — measured: .bcfc-app-band sat at
   near-zero opacity while already fully in view, then fade-slid in. */
.io-animated.io-fadeIn { animation-name: io-fadeIn; }
.io-animated.io-fadeInUp { animation-name: io-fadeInUp; }
.io-animated.io-fadeInDown { animation-name: io-fadeInDown; }
.io-animated.io-fadeInLeft { animation-name: io-fadeInLeft; }
.io-animated.io-fadeInRight { animation-name: io-fadeInRight; }
.io-animated.io-slideInLeft { animation-name: io-slideInLeft; }
.io-animated.io-slideInRight { animation-name: io-slideInRight; }
.io-animated.io-zoomIn { animation-name: io-zoomIn; }
.io-animated.io-flipInX { animation-name: io-flipInX; }
.io-animated.io-bounceIn { animation-name: io-bounceIn; }

@keyframes io-fadeIn {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes io-fadeInUp {
    from { opacity: 0; transform: translate3d(0, 40px, 0); }
    to   { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes io-fadeInDown {
    from { opacity: 0; transform: translate3d(0, -40px, 0); }
    to   { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes io-fadeInLeft {
    from { opacity: 0; transform: translate3d(-40px, 0, 0); }
    to   { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes io-fadeInRight {
    from { opacity: 0; transform: translate3d(40px, 0, 0); }
    to   { opacity: 1; transform: translate3d(0, 0, 0); }
}

@keyframes io-slideInLeft {
    from { transform: translate3d(-100%, 0, 0); visibility: visible; }
    to   { transform: translate3d(0, 0, 0); }
}

@keyframes io-slideInRight {
    from { transform: translate3d(100%, 0, 0); visibility: visible; }
    to   { transform: translate3d(0, 0, 0); }
}

@keyframes io-zoomIn {
    from { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); }
    50%  { opacity: 1; }
    to   { transform: scale3d(1, 1, 1); }
}

@keyframes io-flipInX {
    from { transform: perspective(400px) rotate3d(1, 0, 0, 90deg); animation-timing-function: ease-in; opacity: 0; }
    40%  { transform: perspective(400px) rotate3d(1, 0, 0, -20deg); animation-timing-function: ease-in; }
    60%  { transform: perspective(400px) rotate3d(1, 0, 0, 10deg); opacity: 1; }
    80%  { transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }
    to   { transform: perspective(400px); }
}

@keyframes io-bounceIn {
    from, 20%, 40%, 60%, 80%, to { animation-timing-function: ease-out; }
    0%   { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); }
    20%  { transform: scale3d(1.1, 1.1, 1.1); }
    40%  { transform: scale3d(0.9, 0.9, 0.9); }
    60%  { opacity: 1; transform: scale3d(1.03, 1.03, 1.03); }
    80%  { transform: scale3d(0.97, 0.97, 0.97); }
    to   { opacity: 1; transform: scale3d(1, 1, 1); }
}

/* ============================================
   Odometer.js rolling digit counter
   BCFC brand colours and Almarai font
   ============================================ */

.why-new-card-number.odometer,
.why-new-card-number.odometer.odometer-auto-theme,
.why-new-card-number.odometer.odometer-theme-default {
    display: inline-block;
    vertical-align: middle;
    position: relative;
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    color: var(--bcfc-dark-ink-brand, var(--bcfc-primary));
}








/* Rolling up animation */


/* Rolling down animation */


.why-new-card-number.odometer,
.why-new-card-number.odometer.odometer-auto-theme,
.why-new-card-number.odometer.odometer-theme-default {
    line-height: 1.1em;
}

.why-new-card-number.odometer .odometer-value,
.why-new-card-number.odometer.odometer-auto-theme .odometer-value,
.why-new-card-number.odometer.odometer-theme-default .odometer-value {
    text-align: center;
}

/* Reduced-motion: skip animation, show final value immediately */

/* Fallback value — visible only when JS is unavailable */
.why-new-card-number .odometer-value {
    display: none;
}



/* ============================================
   SCROLL PROGRESS BAR
   JS sets --scroll-progress custom property on documentElement.
   CSS uses it to drive width. Progressive enhancement:
   hidden by default, revealed when JS sets the variable.
   ============================================ */

.bcfc-scroll-progress {
    position: fixed;
    top: 0;
    inset-inline-start: 0;
    width: 100%;
    height: 3px;
    background: linear-gradient(to right, var(--bcfc-blue-light), var(--bcfc-green));
    z-index: var(--bcfc-z-emergency, 9999);
    pointer-events: none;
    transform: scaleX(var(--scroll-progress, 0));
    transform-origin: left;
    transition: transform 0.1s ease-out;
}

/* Arabic fills from the right, so the gradient and the grow origin both mirror. */
[dir="rtl"] .bcfc-scroll-progress {
    background: linear-gradient(to left, var(--bcfc-blue-light), var(--bcfc-green));
    transform-origin: right;
}

/* The Islamic section uses green only. */
.is-islamic .bcfc-scroll-progress {
    background: linear-gradient(to right, var(--bcfc-green-dark), var(--bcfc-green));
}

[dir="rtl"] .is-islamic .bcfc-scroll-progress {
    background: linear-gradient(to left, var(--bcfc-green-dark), var(--bcfc-green));
}

@media (prefers-reduced-motion: reduce) {
    .bcfc-scroll-progress {
        transition: none;
    }
}

@media print {
    .bcfc-scroll-progress {
        display: none;
    }
}

/* ============================================
   SCROLL-TO-TOP BUTTON
   Scroll-driven: button is invisible until page scrolls >300px.
   Uses animation-timeline: scroll() where supported (Chrome 115+).
   Falls back to .bcfc-scrolltop-js class added by JS for Safari.
   ============================================ */

/* Default: button hidden at top of page.
   animation: none prevents .io-animated (added by IntersectionObserver at page load)
   from overriding the scroll-driven animation below. */
#bcfc-scroll-to-top {
    opacity: 0;
    pointer-events: none;
    animation: none !important;
}

/* Scroll-driven visibility — modern browsers */
@supports (animation-timeline: scroll()) {
    #bcfc-scroll-to-top {
        animation: scrolltop-visibility linear both;
        animation-timeline: scroll(root block);
        animation-range: 0px 300px;
    }

    @keyframes scrolltop-visibility {
        from {
            opacity: 0;
            pointer-events: none;
        }
        to {
            opacity: 1;
            pointer-events: auto;
        }
    }
}

/* JS-assisted fallback for browsers without scroll-driven animation (Safari) */
.bcfc-scrolltop-js #bcfc-scroll-to-top {
    transition: opacity 0.3s ease;
}

.bcfc-scrolltop-js #bcfc-scroll-to-top.is-visible {
    opacity: 1;
    pointer-events: auto;
}

@media (prefers-reduced-motion: reduce) {
    #bcfc-scroll-to-top {
        animation: none !important;
        opacity: 1;
        pointer-events: auto;
    }
}

/* ============================================
   HOME PAGE GRID STAGGER DELAYS
   CSS nth-child stagger for io-animated items inside common home page grids.
   Replaces JS setting --io-delay inline style.
   ============================================ */

/* Stats cards grid */

/* Why section number cards */
.bcfc-home__why-grid .bcfc-number-card.io-animated { --io-delay: 0ms; }
.bcfc-home__why-grid .bcfc-number-card.io-animated:nth-child(1) { --io-delay: 0ms; }
.bcfc-home__why-grid .bcfc-number-card.io-animated:nth-child(2) { --io-delay: 80ms; }
.bcfc-home__why-grid .bcfc-number-card.io-animated:nth-child(3) { --io-delay: 160ms; }
.bcfc-home__why-grid .bcfc-number-card.io-animated:nth-child(4) { --io-delay: 240ms; }
.bcfc-home__why-grid .bcfc-number-card.io-animated:nth-child(5) { --io-delay: 320ms; }
.bcfc-home__why-grid .bcfc-number-card.io-animated:nth-child(6) { --io-delay: 400ms; }

/* Card carousel slides */
.bcfc-card-carousel .swiper-slide.io-animated { --io-delay: 0ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(1) { --io-delay: 0ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(2) { --io-delay: 80ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(3) { --io-delay: 160ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(4) { --io-delay: 240ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(5) { --io-delay: 320ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(6) { --io-delay: 400ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(7) { --io-delay: 480ms; }
.bcfc-card-carousel .swiper-slide.io-animated:nth-child(8) { --io-delay: 560ms; }

/* Services / finance / news section cards */
.bcfc-home__services .bcfc-card.io-animated { --io-delay: 0ms; }
.bcfc-home__services .bcfc-card.io-animated:nth-child(1) { --io-delay: 0ms; }
.bcfc-home__services .bcfc-card.io-animated:nth-child(2) { --io-delay: 70ms; }
.bcfc-home__services .bcfc-card.io-animated:nth-child(3) { --io-delay: 140ms; }
.bcfc-home__services .bcfc-card.io-animated:nth-child(4) { --io-delay: 210ms; }
.bcfc-home__services .bcfc-card.io-animated:nth-child(5) { --io-delay: 280ms; }
.bcfc-home__services .bcfc-card.io-animated:nth-child(6) { --io-delay: 350ms; }

.bcfc-home__finance .bcfc-card.io-animated { --io-delay: 0ms; }
.bcfc-home__finance .bcfc-card.io-animated:nth-child(1) { --io-delay: 0ms; }
.bcfc-home__finance .bcfc-card.io-animated:nth-child(2) { --io-delay: 70ms; }
.bcfc-home__finance .bcfc-card.io-animated:nth-child(3) { --io-delay: 140ms; }
.bcfc-home__finance .bcfc-card.io-animated:nth-child(4) { --io-delay: 210ms; }

.bcfc-home__news .bcfc-card.io-animated { --io-delay: 0ms; }
.bcfc-home__news .bcfc-card.io-animated:nth-child(1) { --io-delay: 0ms; }
.bcfc-home__news .bcfc-card.io-animated:nth-child(2) { --io-delay: 70ms; }
.bcfc-home__news .bcfc-card.io-animated:nth-child(3) { --io-delay: 140ms; }
.bcfc-home__news .bcfc-card.io-animated:nth-child(4) { --io-delay: 210ms; }

/* App download section */

/* ============================================
   ISLAMIC LANDING & PRODUCT CARD GRIDS
   Per-card reveal stagger (source islamic-main IntersectionObserver i*90ms).
   Scoped to the Islamic service/product/board/uses card grids so their
   cards cascade instead of revealing together.
   ============================================ */
.bcfc-islamic-landing__card.io-animated,
.bcfc-islamic-product__card.io-animated,
.bcfc-islamic-landing__member.io-animated,
.bcfc-islamic-product__use.io-animated { --io-delay: 0ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(1),
.bcfc-islamic-product__card.io-animated:nth-child(1),
.bcfc-islamic-landing__member.io-animated:nth-child(1),
.bcfc-islamic-product__use.io-animated:nth-child(1) { --io-delay: 0ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(2),
.bcfc-islamic-product__card.io-animated:nth-child(2),
.bcfc-islamic-landing__member.io-animated:nth-child(2),
.bcfc-islamic-product__use.io-animated:nth-child(2) { --io-delay: 90ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(3),
.bcfc-islamic-product__card.io-animated:nth-child(3),
.bcfc-islamic-landing__member.io-animated:nth-child(3),
.bcfc-islamic-product__use.io-animated:nth-child(3) { --io-delay: 180ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(4),
.bcfc-islamic-product__card.io-animated:nth-child(4),
.bcfc-islamic-landing__member.io-animated:nth-child(4),
.bcfc-islamic-product__use.io-animated:nth-child(4) { --io-delay: 270ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(5),
.bcfc-islamic-product__card.io-animated:nth-child(5),
.bcfc-islamic-landing__member.io-animated:nth-child(5),
.bcfc-islamic-product__use.io-animated:nth-child(5) { --io-delay: 360ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(6),
.bcfc-islamic-product__card.io-animated:nth-child(6),
.bcfc-islamic-landing__member.io-animated:nth-child(6),
.bcfc-islamic-product__use.io-animated:nth-child(6) { --io-delay: 450ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(7),
.bcfc-islamic-product__card.io-animated:nth-child(7),
.bcfc-islamic-landing__member.io-animated:nth-child(7),
.bcfc-islamic-product__use.io-animated:nth-child(7) { --io-delay: 540ms; }
.bcfc-islamic-landing__card.io-animated:nth-child(8),
.bcfc-islamic-product__card.io-animated:nth-child(8),
.bcfc-islamic-landing__member.io-animated:nth-child(8),
.bcfc-islamic-product__use.io-animated:nth-child(8) { --io-delay: 630ms; }

/* ============================================
   Parallax Area Styles
   For sections that need background parallax effect
   ============================================ */

.parallax-area {
    position: relative;
    background-attachment: fixed;
    background-position: center center;
    background-repeat: no-repeat;
    background-size: cover;
    overflow: hidden;
}

.parallax-overlay {
    position: absolute;
    top: 0;
    inset-inline: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.4);
    pointer-events: none;
}

.parallax-content {
    position: relative;
    z-index: 1;
}

/* Mobile fallback - disable fixed attachment on touch devices */
@media (hover: none) and (pointer: coarse) {
    .parallax-area {
        background-attachment: scroll;
    }
}

/* Reduced motion - disable parallax */
@media (prefers-reduced-motion: reduce) {
    .parallax-area {
        background-attachment: scroll;
    }
}

/**
 * BCFC Custom Swiper Styles
 * Custom pagination, progress bar, navigation arrows, and slide effects
 */

/* ============================================
   Custom Navigation Arrows
   ============================================ */
.bcfc-swiper__navigation {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 1rem;
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    z-index: 10;
}

.bcfc-swiper__nav-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    border: 2px solid rgba(0, 74, 152, 0.3);
    border-radius: 50%;
    background: var(--bcfc-surface-raised, rgba(255, 255, 255, 0.9));
    color: var(--bcfc-ink-link, #004a97);
    cursor: pointer;
    transition: all 0.3s ease;
    padding: 0;
}

.bcfc-swiper__nav-btn:hover {
    background: #004a97;
    border-color: #004a97;
    color: #fff;
    transform: scale(1.05);
}

.bcfc-swiper__nav-btn:active {
    transform: scale(0.95);
}

.bcfc-swiper__nav-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.bcfc-swiper__nav-btn--prev {
    margin-right: 0.5rem;
}

.bcfc-swiper__nav-btn--next {
    margin-left: 0.5rem;
}

.bcfc-home-hero-slider .bcfc-swiper__navigation {
    display: none !important;
}

.bcfc-home-hero-slider .bcfc-swiper__autoplay-progress,
.bcfc-home-hero-slider .bcfc-swiper__slide-count {
    display: none !important;
}

.bcfc-home-hero-slider:not(.bcfc-home-hero-slider--dedicated-nav) .bcfc-swiper__navigation {
    inset: 50% 0 auto 0;
    left: 0;
    width: 100%;
    transform: translateY(-50%);
    justify-content: space-between;
    padding-inline: 0;
    pointer-events: none;
}

.bcfc-home-hero-slider .bcfc-swiper__nav-btn {
    pointer-events: auto;
    border-color: transparent;
    background: transparent;
    color: #fff;
    box-shadow: none;
    text-shadow: 0 2px 10px rgba(0, 0, 0, .45);
}

.bcfc-home-hero-slider .bcfc-swiper__nav-btn:hover {
    background: transparent;
    border-color: transparent;
    color: #fff;
    opacity: .78;
}

/* RTL Support */

/* ============================================
   Custom Pagination Styles
   ============================================ */
.bcfc-swiper__pagination {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 1rem 0;
}

.bcfc-swiper__pagination .swiper-pagination-bullet {
    width: 12px;
    height: 12px;
    background: rgba(0, 74, 152, 0.3);
    border-radius: 50%;
    cursor: pointer;
    transition: all 0.3s ease;
    opacity: 1;
}

.bcfc-swiper__pagination .swiper-pagination-bullet:hover {
    background: rgba(0, 74, 152, 0.6);
    transform: scale(1.2);
}

.bcfc-swiper__pagination .swiper-pagination-bullet-active {
    background: #004a97;
    width: 32px;
    border-radius: 6px;
    transform: scale(1.1);
}

/* Hero Slider Pagination Override */
.bcfc-home-hero-slider__pagination {
    bottom: 24px !important;
    z-index: 10;
}

.bcfc-home-hero-slider__pagination .swiper-pagination-bullet {
    width: auto;
    height: auto;
    background: transparent;
    opacity: 1;
    border: none;
}

.bcfc-home-hero-slider__pagination .swiper-pagination-bullet::after {
    content: "";
    display: block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.5));
    transition: all 0.5s ease;
}

.bcfc-home-hero-slider__pagination .swiper-pagination-bullet:hover::after {
    background: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.8));
}

.bcfc-home-hero-slider__pagination .swiper-pagination-bullet-active {
    transform: scaleX(1.58);
}

.bcfc-home-hero-slider__pagination .swiper-pagination-bullet-active::after {
    width: 28px;
    height: 12px;
    border-radius: 6px;
    background: var(--bcfc-surface-raised, #fff);
}

/* ============================================
   Autoplay Progress Bar
   ============================================ */
.bcfc-swiper__autoplay-progress {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 4px;
    background: rgba(0, 0, 0, 0.1);
    z-index: 20;
    overflow: hidden;
}

.bcfc-swiper__autoplay-progress-bar {
    height: 100%;
    width: 0%;
    background: linear-gradient(90deg, #004a97 0%, #007bff 100%);
    transition: transform 0.1s linear;
    transform: scaleX(0);
    transform-origin: left center;
}

/* Hero Slider Progress Bar */
.bcfc-home-hero-slider .bcfc-swiper__autoplay-progress {
    height: 6px;
    background: rgba(255, 255, 255, 0.2);
}

.bcfc-home-hero-slider .bcfc-swiper__autoplay-progress-bar {
    background: linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0.7) 100%);
}

/* ============================================
   Slide Count Indicator
   ============================================ */
.bcfc-swiper__slide-count {
    position: absolute;
    bottom: 60px;
    right: 24px;
    display: flex;
    align-items: center;
    gap: 4px;
    font-size: 0.9375rem;
    font-weight: 600;
    color: rgba(255, 255, 255, 0.9);
    background: rgba(0, 0, 0, 0.3);
    padding: 6px 12px;
    border-radius: 20px;
    backdrop-filter: blur(4px);
    z-index: 10;
}

.bcfc-swiper__slide-count-current {
    font-size: 1.125rem;
    font-weight: 700;
}

.bcfc-swiper__slide-count-total {
    font-size: 0.9375rem;
    opacity: 0.7;
}

/* ============================================
   Slide Shadow Effects
   ============================================ */
.bcfc-card-carousel .swiper-slide {
    /* Never let the flex engine shrink a slide below the width Swiper sets inline
       from slidesPerView — otherwise slides squish to share the wrapper instead of
       overflowing/swiping (e.g. 6 slides crammed into one screen width on mobile). */
    flex-shrink: 0;
    /* overflow-x:hidden + overflow-y:visible computes to overflow-y:auto, which
       clipped the top of cards lifted on hover — slides must not clip */
    overflow: visible;
    /* Match the card's 22px radius so the hover box-shadow follows the card's
       rounded corners instead of the slide's square box (white corner wedges) */
    border-radius: 22px;
    transition: box-shadow 0.3s ease, transform 0.3s ease;
}

/* Hover shadow lives on the card, not the slide: the card is what lifts on hover
   (article[class*="card"]:hover in bcfc-animations.css), so a slide-level shadow
   lags behind the moving card and leaves a bright unshadowed strip at its bottom */
.bcfc-card-carousel .swiper-slide .bcfc-content-card {
    border-radius: 22px;
    transition: box-shadow 0.3s ease, transform 0.3s ease;
}

.bcfc-card-carousel .swiper-slide:hover .bcfc-content-card {
    box-shadow: 0 8px 24px rgba(14, 44, 92, 0.08);
}

.bcfc-card-carousel .swiper-slide-active {
    transform: translateY(-4px);
}

/* ============================================
   Home hero slider: plain Swiper "slide" effect
   (was a hand-rolled !important-opacity crossfade that fought
   Swiper's own effect + the reveal choreography in
   home-hero-carousel.ts — removed; Swiper now owns the transition
   entirely via transform on .swiper-wrapper)
   ============================================ */
.bcfc-home-hero-slider__swiper {
    overflow: hidden;
}

/* ============================================
   Fade Effect for New Hero Banner (bcfc-hero-banner)
   ============================================ */
.bcfc-hero-banner__swiper {
    overflow: hidden;
}

.bcfc-hero-banner__swiper .swiper-slide {
    opacity: 0 !important;
    transition: opacity 0.9s ease !important;
    visibility: hidden;
}

.bcfc-hero-banner__swiper .swiper-slide.swiper-slide-active {
    opacity: 1 !important;
    z-index: 2;
    visibility: visible;
}

.bcfc-hero-banner__swiper .swiper-slide-prev,
.bcfc-hero-banner__swiper .swiper-slide-next {
    opacity: 0 !important;
    visibility: hidden;
}

/* Fade transition for banner content */
.bcfc-hero-banner__content {
    transition: opacity 0.6s ease, transform 0.6s ease;
}

.bcfc-hero-banner__swiper .swiper-slide:not(.swiper-slide-active) .bcfc-hero-banner__content {
    opacity: 0;
    transform: translateY(20px);
}

.bcfc-hero-banner__swiper .swiper-slide-active .bcfc-hero-banner__content {
    opacity: 1;
    transform: translateY(0);
}

/* ============================================
   Slide Content Animation
   ============================================ */
@keyframes slideContentIn {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.slide-content-animate {
    animation: slideContentIn 0.6s ease forwards;
}

.bcfc-home-hero-slider__swiper .swiper-slide-active .bcfc-hero__content > *:nth-child(1) {
    animation-delay: 0.1s;
}

.bcfc-home-hero-slider__swiper .swiper-slide-active .bcfc-hero__content > *:nth-child(2) {
    animation-delay: 0.2s;
}

.bcfc-home-hero-slider__swiper .swiper-slide-active .bcfc-hero__content > *:nth-child(3) {
    animation-delay: 0.3s;
}

.bcfc-home-hero-slider__swiper .swiper-slide-active .bcfc-hero__content > *:nth-child(4) {
    animation-delay: 0.4s;
}

.bcfc-home-hero-slider__swiper .swiper-slide-active .bcfc-hero__content > *:nth-child(5) {
    animation-delay: 0.5s;
}

/* ============================================
   Parallax Image Effect
   ============================================ */
.bcfc-home-hero-slider__image,
.bcfc-home-hero-slider__video {
    transition: transform 0.3s ease-out;
    will-change: transform;
}

/* ============================================
   Dynamic Dot Count Indicator
   ============================================ */



/* ============================================
   Card Carousel Enhancements
   ============================================ */
.bcfc-card-carousel {
    position: relative;
    /* Headroom inside the swiper's overflow:hidden clip box so cards lifted on
       hover (translateY(-4px)) keep their top edge; margin compensates layout */
    padding-top: 8px;
    margin-top: -8px;
}

.bcfc-card-carousel .bcfc-swiper__autoplay-progress {
    bottom: 0;
    height: 3px;
}

.bcfc-card-carousel:hover .bcfc-swiper__autoplay-progress-bar {
    animation-play-state: paused;
}

/* ============================================
   Responsive Adjustments
   ============================================ */
@media (max-width: 768px) {
    .bcfc-swiper__nav-btn {
        width: 40px;
        height: 40px;
    }

    .bcfc-swiper__slide-count {
        bottom: 50px;
        right: 16px;
        font-size: 0.8125rem;
        padding: 4px 10px;
    }

    .bcfc-swiper__slide-count-current {
        font-size: 1rem;
    }

    .bcfc-home-hero-slider__pagination {
        bottom: 16px !important;
    }

    .bcfc-swiper__autoplay-progress {
        height: 3px;
    }

    /* Smaller pagination dots on mobile */
    .bcfc-swiper__pagination .swiper-pagination-bullet {
        width: 8px;
        height: 8px;
    }

    .bcfc-swiper__pagination .swiper-pagination-bullet-active {
        width: 20px;
    }

    .bcfc-home-hero-slider__pagination .swiper-pagination-bullet::after {
        width: 8px;
        height: 8px;
    }

    .bcfc-home-hero-slider__pagination .swiper-pagination-bullet-active {
        width: 22px;
    }

    .bcfc-home-hero-slider__pagination .swiper-pagination-bullet-active::after {
        width: 16px;
        height: 8px;
    }

    .bcfc-swiper__pagination {
        gap: 6px;
    }
}

@media (min-width: 1200px) {
    .bcfc-swiper__navigation {
        gap: 1.5rem;
    }

    .bcfc-swiper__nav-btn {
        width: 56px;
        height: 56px;
    }
}

/* ============================================
   Touch/Focus States
   ============================================ */
.bcfc-swiper__nav-btn:focus-visible {
    outline: 2px solid #004a97;
    outline-offset: 2px;
}

.bcfc-card-carousel__nav-btn:focus-visible {
    outline: 2px solid #004a97;
    outline-offset: 2px;
}

.bcfc-card-carousel:focus-within {
    outline: 2px solid rgba(0, 74, 152, 0.3);
    outline-offset: 4px;
}

/* Swiper adds these lock classes (via watchOverflow) once every slide already
   fits in the visible area at the current breakpoint — nothing left to scroll
   to, so hide the arrows/dots instead of showing controls that do nothing. */
.bcfc-swiper__nav-btn.swiper-button-lock,
.bcfc-card-carousel__nav-btn.swiper-button-lock {
    display: none !important;
}

.bcfc-swiper__pagination.swiper-pagination-lock,
.bcfc-card-carousel__pagination.swiper-pagination-lock {
    display: none !important;
}

/* ============================================
   Print Styles
   ============================================ */
@media print {
    .bcfc-swiper__navigation,
    .bcfc-swiper__pagination,
    .bcfc-swiper__autoplay-progress,
    .bcfc-swiper__slide-count {
        display: none !important;
    }
}

/* ============================================================
   Minimal line-style pagination — applies to ALL carousels.
   Converts every Swiper pagination dot into a thin line while
   keeping each carousel's own colour (themes set only the
   background/::after colour, which we leave untouched).
   High-specificity + !important so it wins over every per-page
   theme override without editing each one individually.
   ============================================================ */
.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet {
    /* TAP TARGET (2026-10-14): the visible line stays 18x4, but the BUTTON is a 40x40 hit area.
       The line is the content box — 18px inline / 11px block padding is transparent hit area, and
       background-clip keeps a theme's `background:` fill (card carousel) inside the line. A theme
       that paints on ::after instead (hero, promo) is matched by the ::after inset below.
       Measured on beta before: 18x4 (49 targets on the home page). */
    box-sizing: border-box !important;
    width: 40px !important;
    height: 40px !important;
    padding: 18px 11px !important;
    background-clip: content-box !important;
    min-width: 0 !important;
    /* Without this, the global mobile touch-target rule (bcfc-responsive-fixes.css
       `[role="button"] { min-height: 44px }`) stretches every bullet to 44px since
       this rule never set min-height to override it. */
    min-height: 0 !important;
    margin: 0 !important;
    /* Square: a radius would round off the hit area's corners too (hit-testing follows it). The
       visible line's 2px radius is on ::after; a theme that fills the button itself gets square ends. */
    border-radius: 0 !important;
    transform: none !important;
    vertical-align: middle !important;
    opacity: 1 !important;
}

.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active {
    width: 52px !important;
}

/* UW-385: the interactive states keep the line-only paint. Any theme rule that sets the `background`
   SHORTHAND on :hover / :focus / :active (important or not) resets background-clip to border-box and
   fills the whole 40x40 hit area; the base rule above only ties it on specificity (0,3,0) and loses
   on source order. One extra class here (0,4,0) wins for every carousel, present and future, so a
   theme can recolour a hovered dot but can never grow it into a square. */
.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet:hover,
.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet:focus,
.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet:active {
    background-clip: content-box !important;
}

/* A row of 8+ bullets cannot hold 40px each on a 390px phone (12 x 40 = 480px), so a long row
   keeps the 40px height and narrows the inline padding: 26px pitch, 8px between the lines. */
.swiper-pagination-bullets:has(> .swiper-pagination-bullet:nth-child(8)) .swiper-pagination-bullet.swiper-pagination-bullet {
    width: 26px !important;
    padding-inline: 4px !important;
}

.swiper-pagination-bullets:has(> .swiper-pagination-bullet:nth-child(8)) .swiper-pagination-bullet.swiper-pagination-bullet-active {
    width: 38px !important;
}

/* Carousels that paint the visible dot on a ::after pseudo:
   stretch it to fill the whole line (colour stays from the theme). */
.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet::after {
    position: absolute !important;
    inset: 18px 11px !important;
    width: auto !important;
    height: auto !important;
    border-radius: 2px !important;
    transform: none !important;
}

.swiper-pagination-bullets:has(> .swiper-pagination-bullet:nth-child(8)) .swiper-pagination-bullet.swiper-pagination-bullet::after {
    inset-inline: 4px !important;
}

/* The padding above IS the spacing now, so a row's own gap would double it and wrap a 7-bullet row
   on a phone; and the hero's row is absolutely positioned at left:50%, so its shrink-to-fit width is
   half the hero and must not wrap either. */
.swiper-pagination-bullets.swiper-pagination-horizontal {
    gap: 0 !important;
    white-space: nowrap;
}

/**
 * BCFC Responsive Fixes
 * Comprehensive mobile responsiveness patches
 */

/* ============================================
   1. GLOBAL MOBILE FIXES
   ============================================ */

/* Prevent horizontal overflow on all pages.
   ------------------------------------------------------------------------------
   `overflow-x: hidden` HERE IS WHAT BREAKS EVERY `position: sticky` ON THE SITE.
   A non-visible overflow on <body> makes it a scroll container, so a sticky
   descendant sticks to <body> — which never scrolls — instead of to the viewport,
   and it simply scrolls away. Measured in real Chromium at 1280x800 with this exact
   ancestor chain: at scrollY 1500 a `sticky; top:104px` bar sat at top:-800 with
   `hidden`, and at top:104 (correctly pinned) with `clip`.

   `overflow-x: clip` clips exactly the same way and still suppresses the horizontal
   scrollbar, but it does NOT create a scroll container, so sticky keeps working. The
   only thing it gives up is programmatic/user horizontal scrolling of the element,
   which is precisely what this rule exists to forbid.

   Kept behind @supports rather than swapped outright: `overflow: clip` is Safari 16+,
   so on Safari 15 and older the declaration would be dropped and the page would gain
   the horizontal scrollbar this rule prevents. Old Safari therefore keeps `hidden` —
   no sticky, but no regression either — and every current browser gets `clip`.
   This is a global change on purpose; scoping it per page meant every template that
   wants a sticky bar had to re-discover the same trap.
   ------------------------------------------------------------------------------ */
html, body {
    overflow-x: hidden;
    max-width: 100vw;
}

@supports (overflow-x: clip) {
    html, body {
        overflow-x: clip;
    }
}

/* Prevent iOS zoom on form focus */
@media (width < 768px) {
    input, select, textarea {
        font-size: 1rem !important;
    }
}

/* Touch targets minimum 44px — every standalone control EXCEPT decorative
   indicators, which are exempted by convention below.

   Why the exemption exists: a carousel dot is a real <button> (they have to be
   keyboard-operable), so this floor clamped every 6-10px dot to 44x44 — a huge
   circle — on six separate carousels. It also flattened their active state,
   which widens via `width` (18-32px, all under the floor), so active and
   inactive dots rendered identically. min-width/min-height beat width/height in
   the cascade whatever the specificity, so a component's own sizes cannot win
   on their own; the opt-out has to live here.

   Note this floor is inert on inline boxes — min-* does not apply to them — so
   it never touched links inside body copy, only inline-block/block/flex ones. */
@media (width < 768px) {
    a, button, [role="button"], input[type="submit"], input[type="button"] {
        min-height: 44px;
        min-width: 44px;
    }

    /* Opt-outs. Convention-based on purpose: a new dot carousel is covered
       without editing this file, which is how all six existing ones slipped
       through one at a time.
         [class*="dot" i]          — "dot" is the site-wide name for a carousel
                                     indicator (ccf-dot, cdot, irp-dot,
                                     pfs-card__dot, ...). Case-insensitive to
                                     catch camelCase (…-stepDot). Also matches
                                     the dot *rows* and non-interactive dot
                                     spans, where min:0 is already the default.
         .swiper-pagination-bullet — Swiper's name for the same thing. Its own
                                     reset in bcfc-swiper.css (~line 522) uses
                                     !important; this makes that redundant
                                     rather than conflicting.
         .bcfc-tap-exempt          — explicit hook for a decorative control that
                                     fits neither convention.
       Nothing interactive in the codebase carries "dot" except those dots, so
       this takes no real touch target with it. Both selectors are (0,1,0): they
       beat bare `button` (0,0,1) and win the [role="button"] tie by order. The
       floor rule's own specificity is left alone deliberately — folding :not()
       into it would raise its weight and break the component CSS that currently
       overrides it at plain class weight. */
    [class*="dot" i],
    .swiper-pagination-bullet,
    .bcfc-tap-exempt {
        min-width: 0;
        min-height: 0;
    }

    /* Losing the floor also loses a real tap target, so pad the hit area back
       out invisibly — the trick .pfs-card__dot already used. The inline inset
       stays under half the row's gap so neighbouring dots cannot overlap and
       steal each other's taps; the block inset stays within the padding the row
       already has. Skipped for .bcfc-profile-popup__dot — its row is an
       overflow:auto scroller, where an overflowing pseudo would add scrollable
       area — and for .pfs-card__dot, which has its own. */
    .bcfc-loyalty-detail__guide-dot,
    .irp-dot,
    .re-v2 .carousel .cdot {
        position: relative;
    }

    .bcfc-loyalty-detail__guide-dot::after,
    .irp-dot::after,
    .re-v2 .carousel .cdot::after {
        content: "";
        position: absolute;
    }

    /* .ccf-dot carries its own 40px hit area as padding (bcfc-card-coverflow.scss). */

    /* .bcfc-loyalty-detail__guide-prog gap: 9px, padding: 16px */
    .bcfc-loyalty-detail__guide-dot::after {
        inset: -10px -4px;
    }

    /* .irp-dot-progress-container gap: 14px, padding: 1rem 0 */
    .irp-dot::after {
        inset: -10px -6px;
    }

    /* .re-v2 .carousel .cdots gap: 6px */
    .re-v2 .carousel .cdot::after {
        inset: -8px -3px;
    }
}

/* ============================================
   2. TABLE FIXES
   ============================================ */

@media (width < 768px) {
    .table-container {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }

    .table {
        min-width: 600px;
    }

    .table th,
    .table td {
        white-space: nowrap;
        padding: 8px 12px;
        font-size: 0.9375rem;
    }
}

/* ============================================
   3. IMAGE & VIDEO FIXES
   ============================================ */

img, video, iframe, embed, object {
    max-width: 100%;
    height: auto;
}

/* Fix for images inside fixed-width containers */
@media (width < 768px) {
    .img-fluid {
        width: 100%;
    }
}

/* ============================================
   4. HERO SECTION FIXES
   ============================================ */

@media (width < 768px) {
    .bcfc-home-hero-slider__title,
    .bcfc-home__hero h1 {
        padding-inline-start: 12px;
        padding-inline-end: 20px;
        -webkit-line-clamp: 3;
        line-clamp: 3;
    }

    .bcfc-home-hero-slider__title::before {
        width: 3px;
    }

    .bcfc-home__hero-copy {
        padding: 72px 0 36px;
    }

    .bcfc-home__eyebrow {
        font-size: 0.7125rem;
        min-height: 28px;
        padding: 0 10px;
    }

    .bcfc-home__highlight {
        font-size: 0.95rem;
    }

    .bcfc-home__subtitle {
        font-size: 0.9425rem;
        line-height: 1.65;
    }

    .bcfc-home__action, .bcfc-home__button {
        min-width: auto;
        min-height: 48px;
        padding: 12px 20px;
        font-size: 0.9425rem;
    }
}

/* ============================================
   5. FINANCE CARD FIXES
   ============================================ */


/* ============================================
   6. STATS & WHY SECTION FIXES
   ============================================ */


/* ============================================
   7. CAMPAIGN & APP CARD FIXES
   ============================================ */


/* ============================================
   8. NEWS SECTION FIXES
   ============================================ */

@media (width < 768px) {
    .bcfc-home__news-card {
        border-radius: 14px;
    }

    .bcfc-home__news-copy {
        padding: 18px 18px 20px;
    }

    .bcfc-home__news-copy h3 {
        font-size: 1.05rem;
    }

    .bcfc-home__news-date {
        font-size: 0.7825rem;
    }
}

/* ============================================
   9. PROMO CAROUSEL FIXES
   ============================================ */

@media (width < 768px) {
    /* No min-height here: it beat the wrapper's aspect-ratio: 10/7 (Home.css)
       and stretched the card past the artwork, reintroducing a letterbox on
       mobile only. The aspect-ratio alone gives a full-bleed, uncropped promo. */

    
    
    .bcfc-promo-carousel__nav {
    appearance: none !important;
    -webkit-appearance: none !important;
    border: 1.5px solid rgba(14, 44, 92, 0.2) !important;
    background: var(--bcfc-surface-raised, #fff) !important;
    border-radius: 50% !important;
    width: 2.75rem !important;
    height: 2.75rem !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    box-shadow: 0 2px 8px rgba(14, 44, 92, 0.1) !important;
    cursor: pointer;
    transition: all 0.2s ease;
}


.bcfc-promo-carousel__nav:hover {
    background: var(--bcfc-surface-sunken, #f0f4f8) !important;
    border-color: rgba(14, 44, 92, 0.4) !important;
    box-shadow: 0 4px 12px rgba(14, 44, 92, 0.15) !important;
    transform: translateY(-1px);
}

.bcfc-promo-carousel__nav svg {
    width: 1rem !important;
    height: 1rem !important;
    color: var(--bcfc-ink, #0E2C5C);
}
}

/* ============================================
   10. POPUP / MODAL FIXES
   ============================================ */


@media (width < 768px) {
    .bcfc-home__pv-lightbox-dialog,
    .photo-video-lightbox__dialog {
        width: 96vw;
        margin: 2vh auto;
        padding: 14px 14px 10px;
        border-radius: 12px;
    }

    .bcfc-home__pv-lightbox-content,
    .photo-video-lightbox__content {
        height: min(52vh, 56.25vw);
        max-height: 52vh;
        border-radius: 8px;
    }

    .bcfc-home__pv-lightbox-close,
    .photo-video-lightbox__close {
        font-size: 1.75rem;
        right: 6px;
        top: 2px;
    }

    .bcfc-home__pv-lightbox-title,
    .photo-video-lightbox__title {
        font-size: 0.9125rem;
    }
}

/* ============================================
   11. SAHEL PROMO FIXES
   ============================================ */

@media (max-width: 768px) {
    .bcfc-home-sahel-promo__brand-logo {
        width: 150px;
    }

    .bcfc-home-sahel-promo__title-line {
        font-size: 1.8rem;
    }

    .bcfc-home-sahel-promo__title-accent {
        font-size: 2.2rem;
    }

    .bcfc-home-sahel-promo__description {
        font-size: 1.1rem;
    }

    .bcfc-home-sahel-promo__store {
        justify-content: center;
    }

    /* An unscoped `.bcfc-home-sahel-promo__store-badge { height: 28px }` was removed here as dead
       code. Measured at a 700px viewport with the real stylesheets, re-injecting it moved nothing:
         * on THIS band, the scoped `.bcfc-home-sahel-promo .bcfc-home-sahel-promo__store-badge`
           rule further down this same media block (height: auto; max-height: 28px) is later and
           more specific, so it already won;
         * on the FOOTER — whose badge <img>s carry this class too (BCFCFooter.cshtml,
           bcfcStoreBadgeItem.cshtml) despite living nowhere near this band —
           `.bcfc-footer__store-badge > img { height: auto }` in bcfc-inline-partials.css is a class
           PLUS a type (0,1,1) and outranks this bare class (0,1,0).
       Worth knowing before re-adding any height for this class: because of that shared class, an
       unscoped rule here is aimed at the footer as much as at this band, and a fixed height against
       the footer's fixed `width` would stretch the artwork off its ratio and turn its baked-in
       corners elliptical — which the hover ring's radius cannot then match. Scope it to
       `.bcfc-home-sahel-promo` and cap with max-height, the way the rule below does. */

    /* Mobile order: Sahel branding + text FIRST, then the app image, then the
       app-store badges last. The badges (__stores) live inside __content, so a
       plain block-flip can't put the image between the text and the badges.
       __content is flattened with display:contents (below) so brand/title/
       description/stores all become direct flex children of __inner alongside
       __visual, and each is placed with `order`. gap:0 — vertical rhythm comes
       from each element's own margins (see __visual margin-top below). Mobile
       only; desktop's two-column grid is untouched. */
    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__inner {
        display: flex !important;
        flex-direction: column !important;
        align-items: stretch !important;
        gap: 0;
        min-width: 0;
        text-align: center;
    }

    /* display:contents removes the box but keeps children in the flex flow —
       brand/title/description keep order 0 (first, in source order); the image
       and badges are ordered after them. */
    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__content {
        display: contents !important;
    }

    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__description {
        max-width: 100% !important;
        min-width: 0 !important;
        word-break: normal !important;
        overflow-wrap: break-word !important;
        white-space: normal !important;
        writing-mode: horizontal-tb !important;
        width: 100% !important;
        font-size: clamp(0.9rem, 3.5vw, 1.1rem) !important;
        line-height: 1.65 !important;
        box-sizing: border-box;
    }

    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__brand {
        display: flex !important;
        justify-content: center;
    }

    /* Badges last (order 2), after the image. Keeps its own margin-top:34px for
       the gap above it. */
    /* Two badges per row on mobile instead of one per row: three stacked full-width badges pushed
       everything below them off screen. This is the rule that actually applies — Home.css has a
       lower-specificity copy that this one outranks. Desktop stays a single nowrap flex row. */
    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__stores {
        order: 2;
        display: flex !important;
        flex-wrap: nowrap;
        grid-template-columns: none;
        gap: 10px;
        justify-content: center;
        /* Without a cap the two columns are half the viewport each, so the badge art scales up to
           fill them and reads much bigger than it does on desktop. Cap the block and centre it, so
           the badges stay phone-sized on a wide phone/small tablet. */
        max-width: none;
        margin-left: auto;
        margin-right: auto;
        padding-bottom: 18px;
    }

    /* (superseded: the stores are one flex row of three now) With an odd number of badges the last one would hang alone in the left column. Give it the full
       row and centre it, so three stores read as 2 + 1 centred. Also covers the single-store case. */
    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__stores > :last-child:nth-child(odd) {
        grid-column: auto;
        justify-self: auto;
    }

    /* Fixed height + width:auto can overflow a half-width cell on a narrow phone. Cap the height
       instead so the badge scales down proportionally rather than being squashed or clipped. */
    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__store-badge {
        height: auto;
        max-height: 28px;
        max-width: 100%;
    }

    /* Image sits between the text (order 0) and the badges (order 2).
       margin-top recreates the gap after the description now that __inner gap is 0. */
    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__visual {
        order: 1;
        display: block !important;
        width: 100% !important;
        max-width: 380px;
        min-width: 0;
        margin: 40px auto 0;
    }

    .bcfc-home-sahel-promo .bcfc-home-sahel-promo__image-frame {
        max-width: 100%;
    }
}

/* ============================================
   12. CARDS PROMO FIXES
   ============================================ */


/* ============================================
   13. LOYALTY SECTION FIXES
   ============================================ */

@media (width < 768px) {
    .bcfc-home-loyalty__head-row {
        flex-direction: column;
        align-items: flex-start;
        gap: 16px;
    }

    .bcfc-home-loyalty__head-row .bcfc-btn {
        inline-size: 100%;
    }

    .bcfc-home-loyalty .bcfc-loyalty-card__logo {
        width: 56px;
        height: 56px;
    }

    .bcfc-home-loyalty .bcfc-loyalty-card__title {
        font-size: 1.05rem;
    }

    .bcfc-home-loyalty .bcfc-loyalty-card__desc {
        font-size: 0.9125rem;
    }
}

/* ============================================
   14. CALL CENTER FIXES
   ============================================ */

@media (width < 768px) {
    .bcfc-call-center__card {
        flex-direction: column;
        align-items: flex-start;
        gap: 16px;
        padding: 20px;
    }

    .bcfc-call-center__card-icon {
        width: 52px;
        height: 52px;
        min-width: 52px;
        padding: 12px;
    }

    .bcfc-call-center__card-label {
        font-size: 1.125rem;
    }

    .bcfc-call-center__card-value {
        font-size: 1.375rem;
    }
}

/* ============================================
   15. FINANCE SECTION FIXES
   ============================================ */

@media (width < 768px) {
    .bcfc-finance-section__title {
        font-size: 2rem;
    }

    .bcfc-finance-section__description {
        font-size: 1.25rem;
    }
}

/* ============================================
   16. HEADER & NAVIGATION FIXES
   ============================================ */

@media (width < 768px) {
    .header-inner {
        padding: 0 12px;
    }

    .mobile-menu {
        max-width: 100%;
        height: calc(100dvh - 64px);
    }

    .mobile-menu-inner {
        padding: 16px;
    }

    .mobile-nav-link {
        padding: 14px 0;
        font-size: 1rem;
    }

    .mobile-actions {
        gap: 10px;
    }
}

/* ============================================
   17. FLOATING ELEMENTS & SAFE AREA
   ============================================ */

/* The safe-area inset is applied ONCE, inside the `bottom` of each member of the
   floating-action column in bcfc-inline-partials.css (.bcfc-scroll-to-top bottom slot,
   .bcfc-quick-links above it, .bcfc-ai above both). Nothing to override here.

   There used to be an extra `padding-bottom: env(safe-area-inset-bottom)` on
   .bcfc-quick-links at this breakpoint, which double-counted the inset for that one
   member. Because the toggle is the last child of a column flex box with
   justify-content:flex-end and the box's bottom edge is pinned by `bottom`, the padding
   pushed the toggle UP out of its slot by the size of the inset — 34px on a notched
   iPhone. At that offset the "+" toggle climbed into the AI launcher's slot and overlapped
   the assistant portrait by 20px (and left a 34px hole above scroll-to-top). It only
   reproduced on iOS with the browser toolbar collapsed, i.e. once the visitor scrolled,
   which is why it survived desktop-width testing. Do not reintroduce it: any bottom
   clearance for this column belongs in --bcfc-fab-lift, which every member reads. */

/* ============================================
   19. PROMO CAROUSEL MOBILE IMPROVEMENTS
   ============================================ */

/* Make promo carousel wrapper full-bleed on mobile so slides can breathe */
@media (width < 768px) {
    
    /* Smaller pagination bullets on mobile — scale down the ::after pseudo too */
    .bcfc-promo-carousel__pagination .swiper-pagination-bullet {
        height: 12px !important;
        width: 12px !important;
    }

    .bcfc-promo-carousel__pagination .swiper-pagination-bullet::after {
        height: 8px !important;
        width: 8px !important;
    }

    .bcfc-promo-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active {
        width: 20px !important;
    }

    .bcfc-promo-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active::after {
        width: 14px !important;
    }

    .bcfc-promo-carousel__pagination {
        gap: 0;
    }
}

/* ============================================
   20. SERVICES CAROUSEL MOBILE PAGINATION BULLETS
   ============================================ */

@media (width < 768px) {
    /* Services carousel on home page — reduce bullet size */
    .bcfc-home__services-shell .bcfc-card-carousel__pagination .swiper-pagination-bullet {
        height: 8px;
        width: 8px;
    }

    .bcfc-home__services-shell .bcfc-card-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active {
        transform: scale(1.1);
    }
}

/* ============================================
   21. SWIPER PAGINATION BULLET BUTTON RESET
   ============================================ */

/* Services carousel (card carousel) pagination — small dots */
.bcfc-card-carousel__pagination .swiper-pagination-bullet {
    appearance: none !important;
    -webkit-appearance: none !important;
    border: none !important;
    padding: 0 !important;
    margin: 0 !important;
    cursor: pointer;
    border-radius: 50% !important;
    /* background-COLOR, never the `background` shorthand (UW-385): the shorthand also resets
       background-clip to border-box, which undid the 40x40 hit area's content-box clip in
       bcfc-swiper.css and painted the whole box on hover. */
    background-color: rgba(14, 44, 92, 0.25) !important;
    opacity: 1 !important;
    transition: all 0.3s ease;
    flex-shrink: 0;
    width: 0.5rem !important;
    height: 0.5rem !important;
    display: block;
    position: relative;
    box-shadow: none !important;
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet::after {
    display: none !important;
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet:hover {
    background-color: rgba(14, 44, 92, 0.5) !important;
    transform: scale(1.2);
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet-active {
    width: 0.625rem !important;
    height: 0.625rem !important;
    border-radius: 50% !important;
    background-color: #0E2C5C !important;
    transform: none !important;
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet-active:hover {
    transform: none !important;
    background-color: #0E2C5C !important;
}

/* Promo carousel (featured promos) pagination — larger dots on desktop */
@media (min-width: 768px) {
    .bcfc-promo-carousel__pagination .swiper-pagination-bullet {
        height: 1.125rem !important;
        width: 1.125rem !important;
    }
}

/* ============================================
   18. GENERAL UTILITIES
   ============================================ */

/* Hide on very small screens */

/* Word break for long URLs/text. LTR only: in Arabic a word is never broken (CLAUDE.md RULE 5), and
   `word-break: break-word` here applied to every paragraph, list item and cell on mobile. */
@media (width < 768px) {
    html:not([dir="rtl"]) :is(p, li, td, .bcfc-home__subtitle, .bcfc-home__section-head p) {
        overflow-wrap: break-word;
    }
}

/* Fix for sticky hover states on touch */
@media (hover: none) and (pointer: coarse) {
    .bcfc-home__action:hover,
    .bcfc-home__button:hover,
    .bcfc-home__section-link:hover,
    .bcfc-home__news-card:hover,
    .bcfc-home__services-card:hover,
    .bcfc-promo-carousel__card:hover,
    .bcfc-home-loyalty .bcfc-loyalty-card:hover {
        transform: none !important;
    }
}

/**
 * BCFC Video Styles
 * - Video facade with play overlay
 * - Video loaded transition
 */

/* ============================================================
   Video Facade
   ============================================================ */
.video-facade {
    position: relative;
    display: inline-block;
    overflow: hidden;
    cursor: pointer;
    background-color: var(--bcfc-surface-inverse, #000);
}

.video-facade .play-overlay {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 2;
    pointer-events: none;
    transition: transform 0.3s ease, opacity 0.3s ease;
}

/* Play button circle */
.video-facade .play-overlay::before {
    content: '';
    display: block;
    width: 60px;
    height: 60px;
    background-color: rgba(0, 0, 0, 0.6);
    border-radius: 50%;
    border: 2px solid rgba(255, 255, 255, 0.8);
}

/* Play triangle */
.video-facade .play-overlay::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 53%;
    transform: translate(-50%, -50%);
    border-style: solid;
    border-width: 10px 0 10px 18px;
    border-color: transparent transparent transparent rgba(255, 255, 255, 0.9);
}

.video-facade:hover .play-overlay {
    transform: translate(-50%, -50%) scale(1.1);
}

/* Thumbnail image inside facade */
.video-facade img,
.video-facade .poster-img {
    display: block;
    width: 100%;
    height: auto;
}

/* ============================================================
   Video iframe transition
   ============================================================ */
.video-facade iframe {
    opacity: 0;
    transition: opacity 0.3s ease-in-out;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border: 0;
}

.video-facade.video-loaded iframe,
.video-facade iframe.loaded {
    opacity: 1;
}

/* ============================================================
   Video wrapper utility
   ============================================================ */


/* ============================================================
   Generic YouTube video background ([data-vbg])
   Used by split-content-block, card-alternating-split, and card
   detail alternating split. Fades the iframe in once playback
   starts; page-specific stylesheets still control positioning.
   ============================================================ */
[data-vbg] iframe {
    border: 0;
    opacity: 0;
    transition: opacity 0.5s ease;
}

[data-vbg].bcfc-vbg-playing iframe {
    opacity: 1;
}

/**
 * BCFC AI Assistant — Ali (conventional) / Alaa (Tas'heelat Islamic)
 *
 * Visual language is ported from the Sahel Assistant in the BCFC Flutter app
 * (lib/feature/ai_assistant/widgets/) so the two assistants feel like one product:
 *
 *   - rounded-square launcher tile + circular message avatars (app: FAB radius 18 / CircleAvatar)
 *   - white header with avatar, name and muted subtitle — NOT a coloured title bar
 *   - 20px fully-rounded bubbles, brand fill for the visitor, neutral fill for the assistant
 *   - staggered opening-prompt chips, 70ms apart, fade + rise
 *   - three sine-driven typing dots beside a "breathing" avatar
 *   - pill input with no border on a gray-50 fill, circular brand send button
 *
 * Accent follows the section: brand blue on conventional pages, Islamic green under /islamic
 * (inherited from the html[data-islamic="true"] flag the chrome already sets). All colour comes from
 * existing tokens — no new hex values. --bcfc-accent is the brand yellow, which is the same
 * pairing the app uses for its yellow-on-green assistant glyphs.
 *
 * Motion is transform/opacity only — never width/height/margin — so opening the panel can't
 * trigger layout on the page behind it.
 */

.bcfc-ai {
    --ai-accent: var(--bcfc-blue);
    --ai-accent-dark: var(--bcfc-blue-dark);

    /* ── Widget geometry, in one place ──────────────────────────
       Squared off deliberately (2026-08-16). The 20-24px radii this used to carry read as a
       consumer messaging toy next to the chat NBB ships — which is stock Kore.ai, and puts 4px on
       every single surface: panel, header buttons, quick-reply buttons, code blocks. Dense and
       square reads as a banking tool; round and airy reads as a plaything.
       --bcfc-radius-sm (8px) is the smallest radius on the scale, so this is as square as the
       widget can get without inventing a value off-token. */
    --ai-radius: var(--bcfc-radius-sm);
    --ai-radius-bubble: var(--bcfc-radius-md);

    /* Kore's panel is a flat 400px wide. Ours was min(27rem, ...) = 432px. */
    --ai-panel-w: 25rem;

    /* The one corner a bubble tightens to point at its sender. Kore uses 2px on the user bubble's
       bottom-inline-end corner and flips it under [dir=rtl]; we get the flip for free by setting
       the logical corner instead (border-end-end-radius). */
    --ai-bubble-tail: 2px;

    /* Third slot in the shared floating-action column defined in bcfc-inline-partials.css:
       .bcfc-scroll-to-top takes the bottom slot, .bcfc-quick-links the one above it, and this
       sits above both. Anchoring anywhere else put the launcher straight on top of the
       quick-links toggle and swallowed its clicks. Reuses --bcfc-fab-* (including --bcfc-fab-lift,
       which the sticky bottom bar raises) so all three move together instead of drifting.

       CLOSED, the third slot is measured off the two circles that are actually ON SCREEN: the
       scroll-to-top button and the quick-links TOGGLE. It used to be measured off
       --bcfc-quick-links-height — the strip's FULL box, ~256px with the site's usual 3-4 links,
       because collapsed items keep their layout space (opacity:0/pointer-events:none, not
       display:none — see the comment above .bcfc-quick-links in bcfc-inline-partials.css). That
       parked the launcher ~360px up the screen with a 200px hole under it and nothing in the hole:
       a fourth FAB floating on its own, which is what "looks lost" means. It cannot simply sit at
       slot 3 permanently either — the strip expands UPWARD into exactly that space — so the offset
       is two values and the widget moves between them. */
    /* Shifted up one slot 2026-09-23: .bcfc-a11y moved from the top of the column to the
       bottom (N=0), pushing .bcfc-scroll-to-top and .bcfc-quick-links up one slot each, and
       this launcher along with them - now three toggle-heights up instead of two. See the
       N= comment on .bcfc-a11y in bcfc-inline-partials.css for the full slot map. */
    /* + --bcfc-a11y-rail-extra (declared in bcfc-inline-partials.css): the accessibility rail
       at N=0 reveals its controls UPWARD, straight into this launcher's slot, unless this
       rises out of the way while it is open. Reported live 2026-09-23: "the 4th one is
       overlapping the suhaila button". */
    --ai-column-closed: calc(
        20px
        + var(--bcfc-fab-lift, 0px)
        + var(--bcfc-fab-toggle-size, 56px) + var(--bcfc-fab-gap, 14px)
        + var(--bcfc-fab-toggle-size, 56px) + var(--bcfc-fab-gap, 14px)
        + var(--bcfc-fab-toggle-size, 56px) + var(--bcfc-fab-gap, 14px)
        + var(--bcfc-a11y-rail-extra, 0px)
        + env(safe-area-inset-bottom, 0px)
    );
    /* The part of the strip that only exists while it is expanded: its measured height minus the
       toggle that is always visible. bcfc-chrome.js writes the measurement into
       --bcfc-quick-links-height on load and on resize; until it runs — or where there are no
       quick links at all and the strip is not rendered — the fallback makes this 0px, so the
       launcher stays in slot 3 rather than jumping once the script lands. max() floors it at 0
       in case a measurement ever comes back under one toggle. */
    --ai-quicklinks-items: max(0px, calc(
        var(--bcfc-quick-links-height, var(--bcfc-fab-toggle-size, 56px))
        - var(--bcfc-fab-toggle-size, 56px)
    ));
    --ai-column-expanded: calc(var(--ai-column-closed) + var(--ai-quicklinks-items));
    /* BOTTOM slot, used only while the panel is open — see .bcfc-ai.is-open below. */
    --ai-column-bottom: calc(20px + var(--bcfc-fab-lift, 0px) + env(safe-area-inset-bottom, 0px));
    --ai-column-offset: var(--ai-column-closed);
    /* What the PANEL has to give up vertically: whatever slot the widget is anchored in, plus
       the launcher and the column gap it grows above, plus 5rem of breathing room at the top so
       it never runs under the sticky masthead. A custom property rather than a repeated calc()
       because four declarations below read it — and it deliberately carries no vh/dvh unit, since
       a custom property holding an unsupported unit poisons the declaration that uses it instead
       of letting it fall back. */
    --ai-panel-reserve: calc(
        var(--ai-column-offset)
        + var(--bcfc-fab-toggle-size, 56px)
        + 0.75rem
        + 5rem
    );

    position: fixed;
    inset-inline-end: var(--bcfc-fab-right, 20px);
    inset-block-end: var(--ai-column-offset);
    /* Same layer as the other FABs. The whole column now shares --bcfc-z-fab-raised (1035)
       instead of each button picking its own: this and .bcfc-quick-links were at
       --bcfc-z-modal (1050) while .bcfc-scroll-to-top was at 150. One token keeps them
       co-planar, and 1035 sits below --bcfc-z-modal-backdrop so a real modal still covers
       the column. They never overlap spatially, so co-planar is safe. */
    z-index: var(--bcfc-z-fab-raised, 1035);
    /* The slide between the three column anchors above. inset-block-end and not a transform,
       because a transform would carry the open PANEL with it as well as the launcher. */
    transition: inset-block-end 0.28s cubic-bezier(0.16, 1, 0.3, 1);
    font-family: var(--bcfc-ff-primary);
    display: flex;
    /* column-REVERSE, so the launcher (first in the DOM, for tab order) renders at the bottom
       and the panel grows upward above it. Plain `column` put the launcher on top of the panel
       and shoved it 230px up the screen out of the FAB column every time the panel opened. */
    flex-direction: column-reverse;
    align-items: flex-end;
    gap: 0.75rem;
}

/* RTL: NOTHING TO OVERRIDE ANY MORE - the whole column mirrors together now.
   Owner's call 2026-09-22: mirror the FAB column on Arabic.

   This block used to pin the launcher back to `right` in RTL, because this widget was the only
   member of the column using the logical `inset-inline-end` above, so on /ar it mirrored alone
   and split the "shared floating-action column" across both bottom corners. Its other stated
   reason - that bottom-left was reserved for the reCAPTCHA badge - has expired: that badge is
   no longer drawn at all. Verified on live /ar 2026-09-22: no .grecaptcha-badge, no
   .bcfc-suhail, nothing fixed in the bottom-left quadrant.

   .bcfc-scroll-to-top, .bcfc-quick-links, .bcfc-a11y and .lcalc-jump all now use
   inset-inline-end too, so the logical property above is correct unassisted and this widget
   mirrors WITH them rather than away from them.

   `align-items: flex-start` went with it, and deleting it is the point rather than an oversight:
   it existed to stop `flex-end` resolving to the inline end and hanging the 56px launcher off
   the wide panel's left edge while the container was pinned physically right. With the container
   pinned to the inline end in BOTH cultures, `flex-end` resolves to that same edge and the
   launcher sits flush with the panel - the behaviour the physical override was faking. */

/* THE SELECTOR IS html[data-islamic="true"], NOT html.bcfc-islamic — this rule never fired.

   `bcfc-islamic` is a CLASS the HtmlLanding srcdoc puts on its own <html>; the real document only
   ever gets the ATTRIBUTE, from _RootLayout.cshtml:43
   (`data-islamic="@(isIslamic ? "true" : "false")"`). The assistant renders in the real document,
   so this matched nothing and the Suhail/Suhaila widget stayed brand blue (#004a98) on every
   Islamic page while claiming green in its own header comment.

   The attribute is set in BOTH layers - the srcdoc emits `class="bcfc-islamic" data-islamic="true"`
   together - so the attribute selector is the one that works everywhere, and it carries the same
   specificity as the class did, so nothing else in the cascade moves. */
html[data-islamic="true"] .bcfc-ai {
    --ai-accent: var(--bcfc-green-dark);
    --ai-accent-dark: var(--bcfc-green-darker);
}

/* ── OPEN: the widget drops to the bottom slot ────────────────
   The third-slot anchor above is right for the CLOSED launcher and ruinous for the open panel.
   Everything below the widget is dead space the panel cannot use — the panel grows UPWARD — and
   with the site's usual 3-4 quick links the measured --bcfc-quick-links-height is ~256px, so
   --ai-column-expanded lands at ~360px. On a 1366x768 laptop that left the panel a 312px box:
   header + composer + disclaimer are ~158px of chrome, so the greeting was cut mid-sentence and
   every suggestion chip was below the fold. Measured, not estimated — the log reported
   scrollHeight 400 in a 152px window.

   So while the panel is open the whole widget takes the BOTTOM slot and the panel gets the
   viewport it needs (~600px on the same laptop). Only the custom property is restated: both
   `inset-block-end` and the panel's four height bounds derive from it, so they all follow.
   (0,2,0) beats the (0,1,0) block above; the RTL block only pins the horizontal edge, so there
   is nothing to fight. */
.bcfc-ai.is-open {
    --ai-column-offset: var(--ai-column-bottom);
    /* Taking the corner is instant. Sliding 140px down WHILE the panel plays its own scale-in
       reads as the panel falling out of the launcher; on close the class goes and the base
       transition above brings the launcher back up on its own, which does read as one motion. */
    transition: none;
}

/* ── EXPANDED quick links: the launcher rides up out of the way ────
   The strip expands upward into slot 3, so while it is open the launcher takes the slot above
   the expanded items instead — the ~360px anchor this file used to hold unconditionally. It
   comes straight back down when the strip collapses, which is the whole point: the two states
   are what stop the launcher either overlapping the links or floating alone.

   :not(.is-open) is load-bearing. This selector is (0,3,1) — body plus :has()'s argument plus
   .bcfc-ai — so it OUTWEIGHS the (0,2,0) .bcfc-ai.is-open rule above, and a visitor who
   expanded the strip and then opened the panel would keep the high anchor and the cramped
   panel that comes with it. */
body:has(.bcfc-quick-links[data-expanded="true"]) .bcfc-ai:not(.is-open) {
    --ai-column-offset: var(--ai-column-expanded);
}

/* The other two FABs step aside for the duration: .bcfc-scroll-to-top parks in that same bottom
   slot, so without this the launcher lands exactly on top of it — the click-swallowing overlap
   the comment above --ai-column-closed records — and .bcfc-quick-links would sit behind the panel
   anyway. opacity, not display, so nothing reflows and they fade back on close. */
body:has(.bcfc-ai.is-open) .bcfc-scroll-to-top,
body:has(.bcfc-ai.is-open) .bcfc-quick-links {
    opacity: 0;
    pointer-events: none;
}

/* :has() fallback — Safari 15.4 and Firefox 121 are the floor. Without :has() there is neither a
   way to hide the column nor a way to see the strip's expanded state, so the widget parks above
   the strip's full height permanently: a cramped panel and a lost-looking launcher are both worse
   than a launcher stacked on the scroll-to-top button, or one buried under the expanded links. */
@supports not selector(:has(a)) {
    .bcfc-ai,
    .bcfc-ai.is-open {
        --ai-column-offset: var(--ai-column-expanded);
    }
}

/* site.css declares `p { text-align: justify }` for the whole site at (0,0,1), and it is a LATER
   entry in bundle-main than this file. A direct declaration on the <p> beats the INHERITED
   text-align from .bcfc-ai__intro, so the greeting, the disclaimer and every paragraph of every
   answer came out justified inside a 400px panel — word rivers at ~34ch, and a stretched last
   line on the two-line intro. Same trap AboutRevamp.css and CareersTemplate.css already record.
   `inherit` rather than a value, so a centred intro stays centred and a bubble stays start-aligned
   in both cultures. */
.bcfc-ai p {
    text-align: inherit;
}

/* ── Launcher ─────────────────────────────────────────────── */

.bcfc-ai__launcher {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* Matched to the other two FABs in this column — same diameter AND same shape, because
       mismatched circles read as "off" even when their edges line up. */
    width: var(--bcfc-fab-toggle-size, 56px);
    height: var(--bcfc-fab-toggle-size, 56px);
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--ai-accent);
    color: var(--bcfc-white);
    cursor: pointer;
    /* Same white keyline as the other two circles in the column — see --bcfc-fab-ring in
       bcfc-inline-partials.css. It matters most here: the launcher is a PHOTOGRAPH, so without a
       ring its edge is whatever colour the portrait happens to end on. */
    box-shadow: var(--bcfc-fab-ring), var(--bcfc-shadow-md);
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.bcfc-ai__launcher:hover {
    transform: translateY(-2px);
    box-shadow: var(--bcfc-fab-ring), var(--bcfc-shadow-lg);
}

.bcfc-ai__launcher:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 3px;
}

.bcfc-ai__launcher-img {
    width: 100%;
    height: 100%;
    border-radius: inherit;
    object-fit: cover;
    transition: opacity 0.18s ease, transform 0.18s ease;
}

/* The close glyph is stacked on top of the portrait and only fades in once the panel is open. */
.bcfc-ai__launcher-close {
    position: absolute;
    inset: 0;
    margin: auto;
    opacity: 0;
    transform: scale(0.7);
    transition: opacity 0.18s ease, transform 0.18s ease;
}

.bcfc-ai.is-open .bcfc-ai__launcher {
    /* Matches the app's AnimatedScale(0.9) when the sheet is showing. */
    transform: scale(0.92);
}

.bcfc-ai.is-open .bcfc-ai__launcher-img {
    opacity: 0;
    transform: scale(0.7);
}

.bcfc-ai.is-open .bcfc-ai__launcher-close {
    opacity: 1;
    transform: scale(1);
}

.bcfc-ai.is-open .bcfc-ai__badge--launcher {
    opacity: 0;
}

/* ── Launcher hint ────────────────────────────────────────────
   One-line "How can I help?" pill so the launcher reads as something you can talk to instead of
   a decorative portrait in the corner of a busy hero.

   Absolutely positioned, so it is out of the column-reverse flow above and cannot push the
   launcher out of the shared FAB column. It is anchored to the BOTTOM of .bcfc-ai and centred on
   the launcher, which is the last item in that reversed column.

   LOGICAL `inset-inline-*` as of 2026-09-22, and the previous note here said the opposite for a
   reason that no longer holds. It read: "Physical right/left, not inset-inline-*, ... the launcher
   is pinned to the screen's right edge in BOTH cultures, so the hint always belongs to its left.
   A logical inset-inline-end would flip it onto the launcher itself on /ar." That was correct
   while the RTL block above pinned the column physically right in both directions.

   Mirroring the FAB column on Arabic invalidated the premise, and this was the defect it caused:
   the launcher moved to the screen's LEFT edge while the hint stayed physically to its left, so
   Suhaila's greeting rendered 137px OFF THE LEFT OF THE SCREEN. Measured on /ar at 375px wide:
   hint at left -137 / right 8, with `right` resolving to 68.5px from a container whose own right
   edge was 76.

   The logical form is now the correct one precisely because the launcher follows the reading
   direction: inline-end is the screen edge it is pinned to in EITHER culture, so the hint always
   hangs inline-START of it, which is always into the page. Text inside still follows the document
   direction. */
.bcfc-ai__hint {
    position: absolute;
    bottom: 0;
    inset-inline-end: calc(var(--bcfc-fab-toggle-size, 56px) + 0.625rem);
    inset-inline-start: auto;
    /* Match the launcher's height and centre against it rather than using translateY, so the
       entrance animation below owns transform outright. */
    height: var(--bcfc-fab-toggle-size, 56px);
    display: flex;
    align-items: center;
    margin: 0;
    padding: 0.4375rem 0.875rem;
    box-sizing: border-box;
    white-space: nowrap;
    font-size: 0.875rem;
    font-weight: 600;
    line-height: 1;
    color: var(--bcfc-white);
    background: var(--ai-accent);
    border-radius: 999px;
    box-shadow: var(--bcfc-shadow-md);
    /* Decorative: the launcher button carries the accessible name, and a hint that swallowed the
       click would make the widget look broken. */
    pointer-events: none;
    /* Delayed so it does not compete with the preloader or the cookie banner for attention on a
       cold homepage load. */
    /* Appears, holds, then retires itself.
       Two animations rather than one longer keyframe set, so the entrance timing stays independently
       adjustable from the dwell. The hint has done its job once it has been read — leaving it parked
       against the launcher forever turns a nudge into clutter, and it sits over page content —
       measured as a real complaint on mobile, where "page content" is a lot closer to the FAB
       column than on desktop. Reworked 2026-09-02 from a 6s dwell (1.4s in, gone at 7.85s) down to
       under 2s of total on-screen time: in at 0.4s, gone by 2s.
       `forwards` holds visibility:hidden afterwards so it cannot flash back on a repaint, and
       pointer-events was already none so it never intercepted a click either way. */
    animation:
        bcfc-ai-hint-in 0.3s ease 0.4s both,
        bcfc-ai-hint-out 0.3s ease 1.7s forwards;
}

/* The little tail pointing at the launcher — same fill, so it reads as one speech bubble.
   LOGICAL, and it has to be: the bubble hangs inline-START of the launcher, so the tail belongs on
   the bubble's inline-END edge to point back at it. Physical `right` pointed it correctly in LTR
   and AWAY from the launcher on /ar once the column mirrored. The 45deg square is symmetric, so
   only the inset needs flipping. */
.bcfc-ai__hint::after {
    content: "";
    position: absolute;
    top: 50%;
    inset-inline-end: -0.25rem;
    width: 0.5rem;
    height: 0.5rem;
    transform: translateY(-50%) rotate(45deg);
    background: inherit;
    border-radius: 0.0625rem;
}

@keyframes bcfc-ai-hint-in {
    from { opacity: 0; transform: translateX(0.5rem); }
    to { opacity: 1; transform: translateX(0); }
}

/* visibility is set ONLY on the final frame, never on `from`.
   An animated value outranks a normal declaration while the animation is running, so declaring
   `visibility: visible` up front would beat the `.is-open` rule below and flash the hint back over
   the panel if someone opened the chat mid-fade. Touching it once at the end avoids that entirely
   while still keeping the element out of the accessibility tree afterwards. */
@keyframes bcfc-ai-hint-out {
    from { opacity: 1; }
    99% { opacity: 0; }
    to { opacity: 0; visibility: hidden; }
}

/* Once the panel is open the hint is answered — and it would sit on top of the panel's own
   bottom-right corner. Kept in the DOM so it returns when the visitor closes the panel.

   visibility, deliberately NOT opacity: the entrance animation above uses fill-mode `both`, and a
   filled animation value beats a normal declaration in the cascade, so `opacity: 0` here would
   simply lose to the keyframes' `to { opacity: 1 }`. visibility is untouched by those keyframes,
   so it is the one property that can actually win. */
.bcfc-ai.is-open .bcfc-ai__hint {
    visibility: hidden;
}

/* ── "AI" badge ───────────────────────────────────────────── */

/* Machine disclosure. Was a solid --bcfc-accent (brand yellow) pill with gray-900 ink, which put a
   mustard dot next to the name on every surface and clashed with the blue wordmark — and read as
   the Islamic-green variant's opposite instead of inheriting it. Now a quiet wash of the section
   accent with accent ink, so it belongs to the brand and follows blue → green automatically. */
.bcfc-ai__badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-inline-start: 0.4375rem;
    padding: 0.0625rem 0.375rem;
    font-family: var(--bcfc-ff-secondary);
    font-size: 0.6875rem;
    font-weight: var(--bcfc-fw-extrabold);
    line-height: 1.5;
    letter-spacing: 0.08em;
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
    background: color-mix(in srgb, var(--ai-accent) 12%, transparent);
    border-radius: var(--bcfc-radius-full);
    vertical-align: 0.12em;
}

@supports not (background: color-mix(in srgb, red 10%, transparent)) {
    .bcfc-ai__badge {
        color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
        background: var(--bcfc-surface-sunken, var(--bcfc-gray-100));
    }
}

/* Removed: .bcfc-ai__aimark, the tinted "AI" inside Suhail / Suhaila. It rendered as three
   separate tokens — "Suh AI l" — and the padding was never the cause: .bcfc-ai__name below is
   display:flex, so the bare text runs either side of the <span> each became an ANONYMOUS FLEX ITEM
   and got laid out as its own box. No amount of tightening fixes that; only removing the element
   or the flex context does. The name is now plain text and machine disclosure is the
   .bcfc-ai__badge pill, as Arabic always did. If an inline mark is ever wanted back, .bcfc-ai__name
   must stop being a flex container first. */

/* The launcher copy is a SOLID pill, not the translucent wash above.
   .bcfc-ai__badge's `color-mix(in srgb, var(--ai-accent) 12%, transparent)` is designed for the
   panel header, where it sits on flat white and 12% is enough to read as a pill. On the launcher it
   sits on the avatar PHOTO and on the accent-filled circle behind it, so a 12%-alpha background is
   effectively invisible and accent-on-accent ink made the letters disappear into the portrait —
   which is exactly how this turned up in review.

   So: opaque accent fill, white ink, and the white ring kept as a separator. That combination reads
   on a white page, on a dark photo and against the blue (or Islamic-green) launcher circle alike,
   and it still follows --ai-accent, so blue → green switches automatically with the section.
   `background` is a plain var() with no color-mix, so the @supports fallback further up cannot
   reach it and this stays opaque in every browser. */
.bcfc-ai__badge--launcher {
    position: absolute;
    inset-block-start: -0.25rem;
    inset-inline-end: -0.25rem;
    margin: 0;
    padding: 0.0625rem 0.3125rem;
    color: var(--bcfc-white);
    background: var(--ai-accent);
    /* Two separators rather than one: the ring lifts it off the launcher circle, the drop shadow
       lifts it off whatever page content sits behind the corner it overhangs. */
    box-shadow: 0 0 0 2px var(--bcfc-white), 0 1px 4px rgba(7, 27, 51, 0.28);
    /* One step up from the 10px inherited above — the badge is now ink-on-fill rather than a tinted
       wash, and at 10px white extrabold on blue the two letters were closing up. */
    font-size: 0.75rem;
    letter-spacing: 0.06em;
    transition: opacity 0.18s ease;
}

/* The logical inset above does NOT mirror on /ar: bcfc-rtl-latin.js stamps the badge
   `data-bcfc-latin="ltr"` (its text is the Latin "AI"), and a logical inset resolves against the
   element's OWN direction — so it stayed top-RIGHT, on the inner side of a column that now sits on
   the left edge. Measured on beta 2026-09-23: badge at x 58–80 on a 20–76 launcher. Physical here
   so the badge sits on the column's outer corner in both cultures. */
html[dir="rtl"] .bcfc-ai__badge--launcher {
    inset-inline-end: auto;
    right: auto;
    left: -0.25rem;
}

/* ── Panel ────────────────────────────────────────────────── */

.bcfc-ai__panel {
    display: flex;
    flex-direction: column;
    width: min(var(--ai-panel-w), calc(100vw - 2.5rem));
    /* Has to clear the whole FAB column plus the launcher and its gap, or the top of the panel
       gets pushed off-screen on short viewports. */
    /* No rem ceiling any more. The old min(40rem, ...) capped the panel at 640px, so on any normal
       desktop it sat as a small card in the corner while NBB's fills the window — that difference in
       presence is most of why theirs reads as an application and ours read as a widget. Kore has no
       cap at all (height: calc(100% - 148px)); this is the same idea, minus the FAB column. */
    /* The disable covers the vh/dvh pair below. It is needed only because the two max-height
       lines are NOT adjacent - min-height and two comment blocks sit between them - so the pair
       falls outside the config's `consecutive-duplicates-with-different-values` allowance despite
       being exactly that idiom. stylelint anchors the report on the FIRST occurrence, which is
       why the disable is here and not on the dvh line. Keep the dvh one SECOND: it must win
       wherever it is supported. */
    /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
    max-height: calc(100vh - var(--ai-panel-reserve));
    /* Floor as well as a ceiling: without this the panel shrink-wraps its content, so a fresh
       conversation opened as a cramped ~210px sliver. Clamped against the same available space
       so it can never exceed max-height on a short viewport. */
    min-height: min(28rem, calc(100vh - var(--ai-panel-reserve)));

    /* dvh repeats both properties on purpose — it is the mobile fix, and the vh lines above stay as
       the fallback for browsers that don't support dvh.
       On a phone, 100vh is the viewport with the URL bar COLLAPSED, so a panel sized against it is
       taller than what you can actually see whenever the bar is showing. The overflow lands at the
       bottom, which is exactly where the composer is — so the visitor sees the transcript but the
       input is under the browser chrome. dvh tracks the *dynamic* viewport and shrinks with the bar. */
    max-height: calc(100dvh - var(--ai-panel-reserve));
    min-height: min(28rem, calc(100dvh - var(--ai-panel-reserve)));
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    border: 1px solid var(--bcfc-border-light);
    border-radius: var(--ai-radius);
    overflow: hidden;
    box-shadow: var(--bcfc-shadow-xl);
    transform-origin: bottom var(--bcfc-panel-origin, right);
    animation: bcfc-ai-panel-in 0.22s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.bcfc-ai__panel[hidden] {
    display: none;
}

@keyframes bcfc-ai-panel-in {
    from {
        opacity: 0;
        transform: translateY(0.5rem) scale(0.97);
    }
    to {
        opacity: 1;
        transform: none;
    }
}

/* ── Header ───────────────────────────────────────────────── */

.bcfc-ai__header {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    /* Tightened from 0.875rem/1rem. Kore's header is a flat 50px; ours can't go that low because it
       carries a 40px avatar over two lines of text where theirs is one bold title, but 10px/12px
       gets it to ~60px instead of ~68px and stops the chrome eating the transcript. */
    padding: 0.625rem 0.75rem;
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    border-block-end: 1px solid var(--bcfc-border-light);
}

.bcfc-ai__ident {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-width: 0;
}

.bcfc-ai__name {
    display: flex;
    align-items: center;
    font-size: var(--bcfc-fs-md);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.25;
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
}

.bcfc-ai__role {
    font-size: var(--bcfc-fs-xs);
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500));
    line-height: 1.4;
}

.bcfc-ai__icon-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 2rem;
    height: 2rem;
    border: 0;
    border-radius: var(--bcfc-radius-full);
    background: transparent;
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500));
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease;
}

.bcfc-ai__icon-btn:hover {
    background: var(--bcfc-surface-sunken, var(--bcfc-gray-100));
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
}

.bcfc-ai__icon-btn:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 1px;
}

/* ── Avatars ──────────────────────────────────────────────── */

.bcfc-ai__avatar {
    display: inline-flex;
    flex: 0 0 auto;
    width: 1.75rem;
    height: 1.75rem;
    border-radius: var(--bcfc-radius-full);
    overflow: hidden;
    background: var(--bcfc-surface-sunken, var(--bcfc-gray-100));
}

.bcfc-ai__avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.bcfc-ai__avatar--md {
    width: 2.5rem;
    height: 2.5rem;
}

.bcfc-ai__avatar--xl {
    width: 4.5rem;
    height: 4.5rem;
    /* Faint brand ring instead of the app's tinted circle behind the logo glyph — a portrait
       needs separation from the panel, not a backdrop. */
    box-shadow: 0 0 0 3px var(--bcfc-white), 0 0 0 4px var(--bcfc-border-light);
}

/* ── Opening state ────────────────────────────────────────── */

.bcfc-ai__log {
    flex: 1 1 auto;

    /* Load-bearing, not tidying. A flex item defaults to min-height:auto, which refuses to shrink
       below its content — so `flex: 1 1 auto` + `overflow-y: auto` does NOT actually scroll until
       this is set: the log grows to fit the transcript and pushes .bcfc-ai__form out of the bottom
       of the panel. On a desktop panel that is 40rem tall it takes a very long conversation to
       notice; on a phone it happens on the first multi-line answer, and the visitor loses the input
       box entirely with no way to scroll it back. */
    min-height: 0;

    overflow-y: auto;

    /* Keep momentum scrolling inside the log instead of handing the gesture to the page once the
       transcript hits either end. */
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;

    padding: 1rem;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
}

.bcfc-ai.has-messages .bcfc-ai__intro {
    display: none;
}

/* Centre-aligned, full-bleed body copy was the other readability problem: the paragraph ran the
   whole 27rem panel width with a ragged centred rag, and the whole block floated in the middle of
   a tall panel. Now it sits top-aligned with a measure cap and a left rag. */
.bcfc-ai__intro {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.375rem;
    /* was `margin: auto 0`, which vertically centred the block and left a large dead band above
       the header on tall panels */
    margin: 0;
    padding: 1.25rem 0.25rem 0.5rem;
    text-align: center;
}

.bcfc-ai__intro-title {
    margin: 0.625rem 0 0;
    font-size: var(--bcfc-fs-lg);
    font-weight: var(--bcfc-fw-bold);
    letter-spacing: -0.01em;
    color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-ai__intro-text {
    margin: 0;
    /* ~34ch keeps the two-line rag even inside a 27rem panel instead of running edge to edge */
    max-width: 34ch;
    font-size: var(--bcfc-fs-sm);
    line-height: 1.6;
    text-wrap: pretty;
    /* was --bcfc-gray-500 (~3.1:1 on the gray-50 log) — one step darker to clear 4.5:1 */
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
}

/* Two even columns instead of `flex-wrap` + `justify-content: center`, which left the fourth chip
   orphaned and centred on its own row. Equal-width targets also stop the labels controlling the
   layout, so an editor adding a longer prompt can't make it ragged again. */
.bcfc-ai__chips {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.5rem;
    width: 100%;
    margin-block-start: 1.125rem;
}

.bcfc-ai__chip {
    /* Kore's quick-reply button is 9px/16px, radius 4px. */
    padding: 0.5625rem 1rem;
    font-family: inherit;
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-semibold);
    line-height: 1.35;
    text-align: start;
    color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    /* --bcfc-border was so pale (#d9e4ef) the chips barely registered as pressable. A tinted brand
       edge plus a real resting shadow reads as an affordance without shouting. */
    border: 1px solid color-mix(in srgb, var(--ai-accent) 22%, var(--bcfc-border-light));
    border-radius: var(--ai-radius);
    box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
    cursor: pointer;
    transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
    /* Staggered rise, 70ms apart — the app's _AnimatedSuggestionChip delay. */
    animation: bcfc-ai-chip-in 0.22s ease-out both;
    animation-delay: calc(var(--chip-i, 0) * 70ms);
}

.bcfc-ai__chip:hover {
    background: color-mix(in srgb, var(--ai-accent) 5%, var(--bcfc-surface-raised, var(--bcfc-white)));
    border-color: var(--ai-accent);
    transform: translateY(-1px);
}

.bcfc-ai__chip:active {
    transform: none;
}

@supports not (background: color-mix(in srgb, red 10%, transparent)) {
    .bcfc-ai__chip { border-color: var(--bcfc-border-light); }
    .bcfc-ai__chip:hover { background: var(--bcfc-surface-raised, var(--bcfc-gray-50)); }
}

@media (prefers-reduced-motion: reduce) {
    .bcfc-ai__chip { animation: none; }
    .bcfc-ai__chip:hover { transform: none; }
}

.bcfc-ai__chip:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 2px;
}

@keyframes bcfc-ai-chip-in {
    from {
        opacity: 0;
        transform: translateY(0.375rem);
    }
    to {
        opacity: 1;
        transform: none;
    }
}

/* ── Messages ─────────────────────────────────────────────── */

.bcfc-ai__row {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
    animation: bcfc-ai-msg-in 0.19s ease-out both;
}

.bcfc-ai__row--user {
    justify-content: flex-end;
}

@keyframes bcfc-ai-msg-in {
    from {
        opacity: 0;
        transform: translateY(0.375rem);
    }
    to {
        opacity: 1;
        transform: none;
    }
}

.bcfc-ai__bubble {
    /* Kore runs bubbles to 95% of the column at 12px/15px padding. 90% here rather than 95% because
       our rows also carry a 28px avatar gutter that theirs doesn't. */
    max-width: 90%;
    padding: 0.75rem 0.9375rem;
    border-radius: var(--ai-radius-bubble);
    font-size: var(--bcfc-fs-sm);
    line-height: 1.5;
}

.bcfc-ai__bubble p {
    margin: 0;

    /* Take the bubble's colour. shared/main.css declares a bare `p { color: var(--bcfc-ink) }`, and a
       DIRECT declaration on the <p> beats the colour it would INHERIT from the bubble, so the white
       text of the blue user bubble rendered grey-on-blue on any page where that sheet loads. */
    color: inherit;

    /* The reply is injected with textContent (never innerHTML — model output is not markup), so a
       multi-line answer arrives as real "\n" characters that HTML would otherwise collapse into one
       run-on paragraph. pre-line honours those breaks while still collapsing runs of spaces, which
       is exactly what a "- item per line" list needs. Without this, asking for several offers at
       once renders as a single unreadable block. */
    white-space: pre-line;
}

.bcfc-ai__row--bot .bcfc-ai__bubble {
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    border: 1px solid var(--bcfc-border-light);
    color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
}

.bcfc-ai__row--user .bcfc-ai__bubble {
    background: var(--ai-accent);
    color: var(--bcfc-white);
    /* The tail. Kore tightens the user bubble's bottom-right to 2px and needs a separate
       [dir=rtl] rule to move it to bottom-left; the logical corner does both at once. */
    border-end-end-radius: var(--ai-bubble-tail);
}

/* ── Typing indicator ─────────────────────────────────────── */

/* Calm in/out breath while the answer is being generated — the app's
   _BreathingAssistantAvatar: 1200ms easeInOut, +/-15% scale, reversing. */
.bcfc-ai__row--typing .bcfc-ai__avatar {
    animation: bcfc-ai-breathe 1.2s ease-in-out infinite alternate;
}

@keyframes bcfc-ai-breathe {
    from { transform: scale(0.85); }
    to { transform: scale(1.15); }
}

.bcfc-ai__dots {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.125rem 0;
}

.bcfc-ai__dots i {
    width: 0.375rem;
    height: 0.375rem;
    border-radius: 50%;
    background: var(--ai-accent);
    /* Approximates the app's sine-driven dots: scale 0.72 -> 1.27, opacity 0.35 -> 1, 1100ms,
       each dot a fixed phase behind the last. */
    animation: bcfc-ai-dot 1.1s ease-in-out infinite;
}

.bcfc-ai__dots i:nth-child(2) { animation-delay: 0.11s; }
.bcfc-ai__dots i:nth-child(3) { animation-delay: 0.22s; }

@keyframes bcfc-ai-dot {
    0%, 100% { transform: scale(0.72); opacity: 0.35; }
    50% { transform: scale(1.27); opacity: 1; }
}

/* ── Next-step action ─────────────────────────────────────── */

/* "Open this page" / "open the right form". Sits above the sources list because it's the thing
   we want acted on; citations are supporting detail. */
/* ── Card tiles ───────────────────────────────────────────────
   Artwork + name + limit + two benefits, matching the Sahel app's card result.

   The images are large and served straight from S3, so they bypass the app and ImageSharp cannot
   resize them — a `?width=` on these does nothing. Everything below therefore constrains DISPLAY
   size only; the full bytes still download. If that becomes a problem on mobile the fix is smaller
   derivatives in the bucket, not more CSS. */
.bcfc-ai__cards {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin-block-start: 0.625rem;
}

/* THE TILE IS A WRAPPER, NOT THE LINK. It used to be the <a> itself, which is why it could never
   carry an Apply button — an anchor inside an anchor is invalid and the inner one is unclickable in
   some browsers. The page link is now .bcfc-ai__card-main and Apply is its sibling. */
.bcfc-ai__card {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem;
    background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
    border: 1px solid var(--bcfc-border-light);
    border-radius: var(--bcfc-radius-lg);
    color: inherit;
    transition: border-color 0.2s ease, background-color 0.2s ease;
}

.bcfc-ai__card-main {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    /* Takes the slack so Apply sits hard against the trailing edge. min-width:0 lets the body's
       ellipsis actually engage instead of the row growing past the bubble. */
    flex: 1 1 auto;
    min-width: 0;

    /* /css/index.css IS Bootstrap and loads after the bundles, so `a { text-decoration: underline }`
       wins site-wide unless a component opts out explicitly. */
    color: inherit;
    text-decoration: none;
}

/* Only the clickable variant gets hover affordance — a non-linked tile must not look interactive. */
.bcfc-ai__card:has(a.bcfc-ai__card-main:hover),
.bcfc-ai__card:has(a.bcfc-ai__card-main:focus-visible) {
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    border-color: var(--ai-accent);
}

/* :has() fallback — the hover lands on the link rather than the tile, which is less pretty and
   entirely functional. Safari 15.4 and Firefox 120 are the floor for :has(). */
@supports not selector(:has(a)) {
    a.bcfc-ai__card-main:hover,
    a.bcfc-ai__card-main:focus-visible {
        text-decoration: none;
    }

    a.bcfc-ai__card-main:hover .bcfc-ai__card-name {
        color: var(--bcfc-dark-ink-brand, var(--ai-accent));
    }
}

.bcfc-ai__card-main:hover,
.bcfc-ai__card-main:focus-visible {
    text-decoration: none;
}

/* The one thing on a tile that starts an application. Filled rather than outlined: it is the action,
   and it competes with nothing else inside the tile. */
.bcfc-ai__card-apply {
    flex: 0 0 auto;
    align-self: center;
    padding: 0.3125rem 0.625rem;
    font-size: 0.75rem;
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.2;
    white-space: nowrap;
    color: var(--bcfc-white);
    background: var(--ai-accent);
    border-radius: var(--bcfc-radius-full);
    text-decoration: none;
    transition: filter 0.2s ease;
}

.bcfc-ai__card-apply:hover,
.bcfc-ai__card-apply:focus-visible {
    color: var(--bcfc-white);
    text-decoration: none;
    filter: brightness(0.92);
}

/* ── Compact tiles: the whole range at a glance ───────────────
   For an answer that named more cards than fit as full tiles. Showing all of them small is honest
   in a way that three arbitrary ones out of eight is not — see AiChatResponse.CardsCompact. A
   horizontal scroller rather than a wrap, so eight cards cannot push the composer off screen. */
.bcfc-ai__cards--compact {
    flex-direction: row;
    gap: 0.375rem;
    overflow-x: auto;
    /* Room for the scrollbar so it never overlaps the last tile's label. */
    padding-block-end: 0.25rem;
    scrollbar-width: thin;
}

.bcfc-ai__card--compact {
    flex: 0 0 auto;
    width: 5.5rem;
    padding: 0.375rem;
}

.bcfc-ai__card--compact .bcfc-ai__card-main {
    flex-direction: column;
    gap: 0.25rem;
    text-align: center;
}

.bcfc-ai__card--compact .bcfc-ai__card-img {
    width: 100%;
}

.bcfc-ai__card--compact .bcfc-ai__card-name {
    /* Two lines then clip. A card name is 3-5 words, so one line truncates almost all of them to
       "IMTIAZ World…" and the overview stops distinguishing anything. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: 0.6875rem;
}

.bcfc-ai__card-img {
    /* Card artwork is landscape; a fixed width with auto height keeps every tile the same size
       regardless of the source file's aspect ratio. */
    flex: 0 0 auto;
    width: 4rem;
    height: auto;
    border-radius: var(--bcfc-radius-sm);
}

.bcfc-ai__card-body {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
    /* min-width:0 so long benefit text can ellipsis instead of stretching the tile past the
       bubble's 82% max-width. */
    min-width: 0;
}

.bcfc-ai__card-name {
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.3;
    color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
}

.bcfc-ai__card-limit {
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.3;
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
}

.bcfc-ai__card-benefits {
    font-size: 0.75rem;
    line-height: 1.35;
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-600));
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Page buttons ─────────────────────────────────────────────
   The pages an answer named. Secondary to .bcfc-ai__action on purpose: that button is the ONE next
   step we want taken, so these are outlined rather than filled and cannot compete with it. Several
   can appear at once ("here are both sushi offers"), hence the wrapping row. */
.bcfc-ai__links {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    margin-block-start: 0.625rem;
}

.bcfc-ai__link {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    max-width: 100%;
    padding: 0.3125rem 0.6875rem;
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.35;
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
    background: transparent;
    border: 1px solid var(--ai-accent);
    border-radius: var(--bcfc-radius-full);

    /* /css/index.css IS Bootstrap and loads after the bundles, so `a { text-decoration: underline }`
       wins site-wide unless every component opts out explicitly. */
    text-decoration: none;
    transition: background-color 0.2s ease, color 0.2s ease;

    /* Page titles can be long ("IMTIAZ World Elite Mastercard®"); clip rather than let one chip
       force the bubble past its 82% max-width. */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bcfc-ai__link:hover,
.bcfc-ai__link:focus-visible {
    color: var(--bcfc-white);
    background: var(--ai-accent);
    text-decoration: none;
}

.bcfc-ai__action {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin-block-start: 0.625rem;
    padding: 0.4375rem 0.875rem;
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.4;
    color: var(--bcfc-white);
    background: var(--ai-accent);
    border-radius: var(--ai-radius);
    text-decoration: none;
    transition: background-color 0.2s ease;
}

.bcfc-ai__action::after {
    content: "→";
    font-weight: var(--bcfc-fw-normal);
}

[dir="rtl"] .bcfc-ai__action::after {
    content: "←";
}

/* ── Call action ───────────────────────────────────────────────
   The assistant is INSTRUCTED to hand off to the contact centre in five separate places in
   AiChatService (PII refusal, unpublished figures, account questions, "no confident answer", and the
   deflection reply itself). Until 2026-08-16 none of those produced a button: the resolver only ever
   emitted "navigate" and "form", so the number sat in the prose as dead text — and on a phone, where
   tapping it is the entire point, there was nothing to tap.
   A directional arrow would misdescribe this one: nothing is navigated to, the handset dials. So the
   arrow is suppressed in both cultures and a phone glyph leads instead. */
/* Both selectors are needed. A bare `.bcfc-ai__action--call::after` is specificity (0,1,1) and would
   LOSE to `[dir="rtl"] .bcfc-ai__action::after` (0,2,1) above — so on /ar the call button would have
   drawn the "←" arrow AND the handset. The second selector ties at (0,2,1) and wins on source order. */
.bcfc-ai__action--call::after,
[dir="rtl"] .bcfc-ai__action--call::after {
    content: none;
}

.bcfc-ai__action--call::before {
    content: "";
    flex: 0 0 auto;
    width: 0.875rem;
    height: 0.875rem;
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M6.62 10.79a15.05 15.05 0 0 0 6.59 6.59l2.2-2.2a1 1 0 0 1 1.02-.24c1.12.37 2.33.57 3.57.57a1 1 0 0 1 1 1V20a1 1 0 0 1-1 1A17 17 0 0 1 3 4a1 1 0 0 1 1-1h3.5a1 1 0 0 1 1 1c0 1.24.2 2.45.57 3.57a1 1 0 0 1-.25 1.02l-2.2 2.2z'/%3E%3C/svg%3E") center / contain no-repeat;
            mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M6.62 10.79a15.05 15.05 0 0 0 6.59 6.59l2.2-2.2a1 1 0 0 1 1.02-.24c1.12.37 2.33.57 3.57.57a1 1 0 0 1 1 1V20a1 1 0 0 1-1 1A17 17 0 0 1 3 4a1 1 0 0 1 1-1h3.5a1 1 0 0 1 1 1c0 1.24.2 2.45.57 3.57a1 1 0 0 1-.25 1.02l-2.2 2.2z'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* The number itself must stay LTR even on /ar. A Bahraini number rendered in an RTL run gets its
   digit groups reordered on screen, so the visitor reads a number that isn't the one being dialled. */
.bcfc-ai__action--call {
    unicode-bidi: isolate;
}

.bcfc-ai__action:hover,
.bcfc-ai__action:focus-visible {
    background: var(--ai-accent-dark);
    color: var(--bcfc-white);
    text-decoration: none;
}

.bcfc-ai__action:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 2px;
}

/* ── Speech ───────────────────────────────────────────────── */

/* Replay / listen button. A first synthesis of a novel answer costs ~9s at the TTS provider,
   so this MUST show progress — a plain disabled button for nine seconds reads as broken.
   .is-loading spins, .is-playing shows the equalizer, and both are driven from the widget. */
.bcfc-ai__play {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.3125rem;
    height: 1.75rem;
    margin-block-start: 0.5rem;
    padding: 0 0.625rem;
    font-family: inherit;
    font-size: 0.75rem;
    font-weight: var(--bcfc-fw-semibold);
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
    background: transparent;
    border: 1px solid var(--bcfc-border);
    border-radius: var(--bcfc-radius-full);
    cursor: pointer;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}

.bcfc-ai__play:hover:not(:disabled) {
    background: var(--bcfc-surface-sunken, var(--bcfc-gray-100));
    border-color: var(--ai-accent);
}

.bcfc-ai__play:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 2px;
}

.bcfc-ai__play:disabled {
    cursor: default;
}

.bcfc-ai__play.is-loading {
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500));
}

/* Synthesis failed. Stays clickable — on this network it's usually a dropped connection to the
   voice provider, so a second attempt genuinely works. */
.bcfc-ai__play.is-error {
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-600));
    border-color: var(--bcfc-gray-300);
    background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
}

.bcfc-ai__play.is-loading svg {
    animation: bcfc-ai-spin 0.8s linear infinite;
}

@keyframes bcfc-ai-spin {
    to { transform: rotate(1turn); }
}

/* Audio-meter bars while the answer is being spoken — the app renders the same thing on its
   FAB via _EqualizerBars. Five bars on staggered delays reads as level metering without
   needing to sample the actual audio. */
.bcfc-ai__eq {
    display: inline-flex;
    align-items: center;
    gap: 0.09375rem;
    height: 0.75rem;
}

.bcfc-ai__eq i {
    width: 0.125rem;
    height: 100%;
    background: currentColor;
    border-radius: var(--bcfc-radius-full);
    transform-origin: center;
    animation: bcfc-ai-eq 0.9s ease-in-out infinite;
}

.bcfc-ai__eq i:nth-child(2) { animation-delay: 0.18s; }
.bcfc-ai__eq i:nth-child(3) { animation-delay: 0.36s; }
.bcfc-ai__eq i:nth-child(4) { animation-delay: 0.12s; }
.bcfc-ai__eq i:nth-child(5) { animation-delay: 0.3s; }

@keyframes bcfc-ai-eq {
    0%, 100% { transform: scaleY(0.35); }
    50% { transform: scaleY(1); }
}

/* Header speaker toggle: exactly one of the two glyphs is ever shown. */
.bcfc-ai__ico-off,
.bcfc-ai.is-muted .bcfc-ai__ico-on {
    display: none;
}

.bcfc-ai.is-muted .bcfc-ai__ico-off {
    display: block;
}

/* ── Mic ──────────────────────────────────────────────────── */

.bcfc-ai__send-wrap {
    position: relative;
    display: inline-flex;
    flex: 0 0 auto;
}

.bcfc-ai__ico-send {
    grid-area: 1 / 1;
    transition: opacity 0.18s ease, transform 0.18s ease;
}

/* Removed with the mic (2026-08-03): .bcfc-ai__ico-mic, .bcfc-ai__mic-halo, the
   .is-mic-ready cross-fade, the .is-listening halo animation, and its keyframes. The composer
   is text-only — the send button has one job now, so it needs no state swap. Speech OUTPUT
   (.bcfc-ai__play and the mute toggle) is untouched. */

.bcfc-ai__sources {
    margin: 0.5rem 0 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 0.1875rem;
}

.bcfc-ai__sources a {
    font-size: var(--bcfc-fs-xs);
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500));
    text-decoration: underline;
    text-underline-offset: 2px;
}

.bcfc-ai__sources a:hover {
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
}

/* ── Spoken-answer consent ────────────────────────────────── */

/* Sits directly above the composer, which is where the visitor is already looking having just
   typed — not under the header, where a bar competes with the answer arriving at the other end
   of the panel. The view renders it [hidden]; the widget reveals it for the first answer that
   could be spoken and hides it for good once either button is pressed. */
.bcfc-ai__voice-ask {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    padding: 0.625rem 0.75rem;
    border-block-start: 1px solid var(--bcfc-border-light);
    /* A faint brand tint, so it reads as the panel asking rather than as an answer in the log. */
    background: color-mix(in srgb, var(--ai-accent) 6%, var(--bcfc-surface-raised, var(--bcfc-white)));
    animation: bcfc-ai-voice-ask-in 0.22s ease-out both;
}

/* [hidden] is an attribute, and the display above would beat it. */
.bcfc-ai__voice-ask[hidden] {
    display: none;
}

.bcfc-ai__voice-ask-ico {
    display: inline-flex;
    flex: 0 0 auto;
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
}

.bcfc-ai__voice-ask-text {
    flex: 1 1 8rem;
    min-width: 0;
    margin: 0;
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-semibold);
    line-height: 1.35;
    color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-ai__voice-ask-actions {
    display: inline-flex;
    flex: 0 0 auto;
    gap: 0.375rem;
}

.bcfc-ai__voice-ask-btn {
    padding: 0.375rem 0.75rem;
    font-family: inherit;
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-semibold);
    line-height: 1.2;
    /* Never a pill: the widget squared everything to --ai-radius, and a rounded button here
       would read as a chip, i.e. as something that sends a question. */
    border-radius: var(--ai-radius);
    cursor: pointer;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}

/* Declining must stay as reachable as accepting — no ghost button. Both carry a real border and
   a legible ink colour on their own background; see the button-contrast rule. */
.bcfc-ai__voice-ask-btn {
    color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    border: 1px solid var(--bcfc-border);
}

.bcfc-ai__voice-ask-btn:hover {
    border-color: var(--ai-accent);
    background: color-mix(in srgb, var(--ai-accent) 6%, var(--bcfc-surface-raised, var(--bcfc-white)));
}

.bcfc-ai__voice-ask-btn--yes {
    color: var(--bcfc-white);
    background: var(--ai-accent);
    border-color: var(--ai-accent);
}

.bcfc-ai__voice-ask-btn--yes:hover {
    background: var(--ai-accent-dark);
    border-color: var(--ai-accent-dark);
}

.bcfc-ai__voice-ask-btn:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 2px;
}

@keyframes bcfc-ai-voice-ask-in {
    from { opacity: 0; transform: translateY(0.25rem); }
    to { opacity: 1; transform: none; }
}

/* ── Composer ─────────────────────────────────────────────── */

.bcfc-ai__form {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.75rem;
    border-block-start: 1px solid var(--bcfc-border-light);
    background: var(--bcfc-surface-raised, var(--bcfc-white));
}

.bcfc-ai__input {
    flex: 1 1 auto;
    min-width: 0;
    padding: 0.625rem 1rem;
    font: inherit;
    font-size: var(--bcfc-fs-sm);
    color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
    /* Was a fully-rounded pill, after the app's TextField(filled, grey.shade50, no border side).
       Squared to --ai-radius with the rest of the widget. Kore's composer is a bare borderless line
       with no fill at all; the grey-50 fill is kept regardless, because a naked line gives no hint
       that the region is typable. */
    background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
    border: 1px solid transparent;
    border-radius: var(--ai-radius);
    transition: background-color 0.15s ease, border-color 0.15s ease;
}

.bcfc-ai__input::placeholder {
    color: var(--bcfc-gray-400);
}

.bcfc-ai__input:focus {
    outline: none;
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    border-color: var(--ai-accent);
}

.bcfc-ai__input:disabled {
    background: var(--bcfc-surface-sunken, var(--bcfc-gray-100));
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500));
}

.bcfc-ai__send {
    /* Grid, not flex, so the mic and send glyphs can occupy the same cell and cross-fade. */
    display: inline-grid;
    place-items: center;
    position: relative;
    flex: 0 0 auto;
    width: 2.5rem;
    height: 2.5rem;
    border: 0;
    border-radius: 50%;
    background: var(--ai-accent);
    color: var(--bcfc-white);
    cursor: pointer;
    transition: background-color 0.2s ease, transform 0.15s ease;
}

.bcfc-ai__send:hover:not(:disabled) {
    background: var(--ai-accent-dark);
    transform: scale(1.06);
}

.bcfc-ai__send:focus-visible {
    outline: 2px solid var(--ai-accent);
    outline-offset: 2px;
}

.bcfc-ai__send:disabled {
    background: var(--bcfc-surface-muted, var(--bcfc-gray-300));
    cursor: not-allowed;
}

/* WHILE SENDING, keep the icon.
   The button is disabled during a request, and the plain :disabled rule above drops it to gray-300 —
   which puts a white glyph on light gray and all but erases it, so the composer reads as blank or
   broken at exactly the moment the visitor is waiting on it. This is the same mistake the play button
   made and that the file header calls out: "a disabled button with no spinner reads as a broken one".
   So the accent fill is kept (icon stays legible), the cursor still says "not now", and the glyph
   pulses so the state reads as working rather than dead. */
.bcfc-ai.is-thinking .bcfc-ai__send:disabled {
    background: var(--ai-accent);
    opacity: 0.75;
    cursor: progress;
}

.bcfc-ai.is-thinking .bcfc-ai__send:disabled .bcfc-ai__ico-send {
    animation: bcfc-ai-send-pulse 1.1s ease-in-out infinite;
}

/* Opacity and a small lift only — no rotation. The glyph is a directional arrow, so spinning it
   would read as a different control rather than the same one waiting. */
@keyframes bcfc-ai-send-pulse {
    0%, 100% { opacity: 1; transform: translateY(0); }
    50% { opacity: 0.55; transform: translateY(-0.0625rem); }
}

.bcfc-ai__disclaimer {
    margin: 0;
    padding: 0 0.875rem 0.75rem;
    /* 11px at --bcfc-gray-400 (#98a2b3) measured ~2.6:1 on white — a WCAG failure on the one line
       that carries a real-money instruction ("for account matters call 80008000"). Bumped to 12px
       at gray-600 (~5.7:1). It still reads as fine print; it's now legible fine print. */
    font-size: 0.8125rem;
    line-height: 1.45;
    color: var(--bcfc-ink, var(--bcfc-gray-600, #475467));
    background: var(--bcfc-surface-raised, var(--bcfc-white));
}

/* ── Responsive ───────────────────────────────────────────── */

/* SHORT DESKTOP VIEWPORTS — a 768px-tall laptop with a toolbar and a taskbar, or a half-height
   window. Nothing above is wrong at these sizes; there is simply not enough height for the
   opening state at its full dimensions, so the suggestion chips fall below the fold and the
   panel opens looking truncated even though it is scrollable (measured at 1024x620: a 400px
   intro inside a 292px log).

   Two levers, cheapest first: hand the panel back most of the top clearance it does not need on
   a short screen, then compact the intro. Nothing is HIDDEN — the CPR/card-number warning is a
   real instruction and the chips are the entire point of the opening state, so anything dropped
   here would have to be scrolled to anyway.

   min-width: 601px keeps this off the mobile takeover below, which is already full-height and
   has no squeeze to relieve. Placed BEFORE that block so the takeover still wins on a phone. */
@media (width > 600px) and (max-height: 780px) {
    .bcfc-ai {
        /* Top clearance 5rem -> 2rem. The masthead is ~80px tall, but a dialog anchored to the
           opposite corner of a 620px screen has to be allowed past it: what the visitor reads is
           this panel's own header, not the site nav behind it. */
        --ai-panel-reserve: calc(
            var(--ai-column-offset)
            + var(--bcfc-fab-toggle-size, 56px)
            + 0.75rem
            + 2rem
        );
    }

    .bcfc-ai__intro {
        padding-block-start: 0.5rem;
        gap: 0.25rem;
    }

    /* 72px -> 56px. Still a portrait rather than a message avatar, and the ring keeps it
       separated from the log fill. */
    .bcfc-ai__avatar--xl {
        width: 3.5rem;
        height: 3.5rem;
    }

    .bcfc-ai__intro-title {
        margin-block-start: 0.25rem;
        font-size: var(--bcfc-fs-md);
    }

    .bcfc-ai__chips {
        margin-block-start: 0.75rem;
        gap: 0.375rem;
    }

    /* Vertical padding only — the labels keep their horizontal room, so nothing re-wraps onto a
       fourth row and undoes the saving. */
    .bcfc-ai__chip {
        padding-block: 0.4375rem;
    }
}

/* Second tier, for the genuinely short cases (a ~620px window, a 768px laptop with a browser
   toolbar AND a taskbar). The tier above gets the chips on screen there; this one buys the last
   ~15px so the opening state does not scroll at all. Kept as a separate step rather than folded
   into the block above, because a 56px portrait is the right size wherever there is room for it. */
@media (width > 600px) and (max-height: 660px) {
    .bcfc-ai__intro {
        padding-block-end: 0.125rem;
    }

    .bcfc-ai__avatar--xl {
        width: 3rem;
        height: 3rem;
    }
}

/* 600px, not 480px. At 480 the breakpoint missed most of the phones people actually hold — a
   Pixel/Galaxy in landscape, a large phone with the browser zoomed, and every phablet between 481
   and 600 kept the desktop `min(27rem, 100vw - 2.5rem)` panel. That is narrower than the screen and
   pinned to one corner, which is what "not responsive on mobile" looks like. */
@media (max-width: 600px) {
    /* CLOSED: unchanged. The launcher stays parked in the shared floating-action column with the
       quick-links and scroll-to-top buttons. */
    .bcfc-ai__launcher {
        align-self: flex-end;
    }

    /* OPEN: a true full-screen takeover, and nothing else on screen.
       This replaces an inset floating card (left: 0.75rem, right: the FAB gutter, height capped
       against --ai-column-offset). On a 390px-wide phone that card gave up ~35px of width to
       margins and a chunk of height to the FAB column, so the transcript was a letterbox with page
       content showing around it. NBB's goes near-full-bleed on mobile
       (width: calc(100% - 20px); height: calc(100% - 115px)); this goes all the way. */
    html .bcfc-ai.is-open {
        /* PHYSICAL edges, and `html` on the front. Both are load-bearing:
           - physical, because the RTL block near the top of this file pins the column with
             `right`/`left: auto` in BOTH cultures, so a logical inset-inline-start would resolve to
             `right` on /ar and fight it;
           - `html`, because `html[dir="rtl"] .bcfc-ai` is specificity (0,2,1) and a bare
             `.bcfc-ai.is-open` is only (0,2,0) — it would LOSE, keep `right` pinned to the FAB
             gutter, and never reach the left edge on Arabic. `html` makes this (0,2,1) as well,
             which ties, and a tie is won by source order — this block is last in the file. */
        top: 0;
        left: 0;
        right: 0;
        inset-block-end: auto;
        bottom: auto;

        /* dvh, with vh as the fallback. `bottom: 0` or 100vh would size against the viewport with
           the URL bar COLLAPSED, which is taller than what you can see — and the overflow lands at
           the bottom, exactly where the composer is. Same bug the panel heights above already
           carry a dvh fix for. */
        height: 100vh;
        height: 100dvh;

        align-items: stretch;
        gap: 0;

        /* The FAB layer (1035) deliberately sits UNDER a modal backdrop so real modals cover the
           column. A full-screen panel is itself the modal here, so it has to clear the site header
           rather than let it draw on top. */
        z-index: var(--bcfc-z-modal, 1050);
    }

    html .bcfc-ai.is-open .bcfc-ai__panel {
        width: 100%;
        max-width: none;
        height: 100%;

        /* All three bounds have to go. Leaving max-height or min-height in place keeps the panel
           clamped against --ai-column-offset, which is the whole reason it wasn't full-height. */
        max-height: none;
        min-height: 0;

        /* Edge-to-edge: a border and a radius on a full-bleed sheet just draw a hairline box around
           the screen. */
        border: 0;
        border-radius: 0;
    }

    /* Stop a flick inside the transcript from chaining through to the page behind it once the log
       hits its end — without this the document scrolls under the takeover. */
    html .bcfc-ai.is-open .bcfc-ai__log {
        overscroll-behavior: contain;
    }

    /* The launcher and its hint would float on top of the takeover. The header's own close button
       (data-ai-close) is the way out on mobile, so nothing is lost by hiding them. */
    .bcfc-ai.is-open .bcfc-ai__launcher,
    .bcfc-ai.is-open .bcfc-ai__hint {
        display: none;
    }
}

@media (prefers-reduced-motion: reduce) {
    .bcfc-ai,
    .bcfc-ai__launcher,
    .bcfc-ai__launcher-img,
    .bcfc-ai__launcher-close,
    .bcfc-ai__send,
    .bcfc-ai__icon-btn,
    .bcfc-ai__input {
        transition: none;
    }

    .bcfc-ai__panel,
    .bcfc-ai__chip,
    .bcfc-ai__row,
    /* Unlike .bcfc-ai__hint below, this animation only ever reveals — nothing about the resting
       state is held by fill-mode — so dropping it is safe and the question still appears. */
    .bcfc-ai__voice-ask {
        animation: none;
    }

    /* No pulse, but the sending state must still be visible — otherwise reduced-motion users get the
       erased gray button this was added to fix. The accent fill and the dimmed glyph carry it
       statically. */
    .bcfc-ai.is-thinking .bcfc-ai__send:disabled .bcfc-ai__ico-send {
        animation: none;
        opacity: 0.7;
    }

    /* No slide-in, but the hint still has to appear — and with the animation off, fill-mode is no
       longer holding opacity at 1, so the resting state has to be stated explicitly.
       It still has to RETIRE, though. Auto-hiding is behaviour, not decoration: someone who prefers
       reduced motion should not be the only visitor left with the hint parked over page content
       forever. steps(1) jumps straight to hidden with no fade and no movement, which honours the
       preference while keeping the behaviour. */
    .bcfc-ai__hint {
        opacity: 1;
        transform: none;
        animation: bcfc-ai-hint-out 1ms steps(1) 1.7s forwards;
    }

    /* The dots and the breath are the only "is it working?" signal, so they keep a slow,
       non-moving pulse rather than stopping dead. */
    .bcfc-ai__row--typing .bcfc-ai__avatar {
        animation: none;
    }

    .bcfc-ai__dots i {
        animation: bcfc-ai-dot-fade 1.4s ease-in-out infinite;
    }

    @keyframes bcfc-ai-dot-fade {
        0%, 100% { opacity: 0.35; }
        50% { opacity: 1; }
    }
}

/* ── Interactive turns ─────────────────────────────────────────────────────────────────────────
   The finder's questions, its results, the compare table and the branch list.

   Everything here is rendered from a SERVER-BUILT payload, never from model output: the finder is a
   deterministic filter over AiKnowledge/card_details.md (see AiCardRecommender for why "recommend a
   card" must not be a prompt on a CBB-licensed site), so these styles are dressing real data rather
   than presenting something a model might have imagined. */

/* Follow-up chips and the finder's option buttons both reuse .bcfc-ai__chip, but not its layout:
   the opening prompts are a fixed 2-column grid (four curated chips, deliberately even), while these
   are a variable-length row that has to wrap cleanly at any count. */
.bcfc-ai__chips--follow,
.bcfc-ai__chips--options {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    margin-block-start: 0.625rem;
}

/* Follow-ups sit below the answer and the citations, so they are quieter than an opening prompt —
   smaller, no drop shadow, no staggered entrance. They are an offer, not the point of the turn. */
.bcfc-ai__chips--follow .bcfc-ai__chip {
    padding: 0.3125rem 0.6875rem;
    font-size: 0.75rem;
    border-radius: var(--bcfc-radius-full);
    box-shadow: none;
    animation: none;
}

/* An option button IS the point of the turn — the assistant just asked a question and this is how
   you answer it — so it stays at full chip weight. */
.bcfc-ai__chip--option {
    flex: 0 1 auto;
}

/* The finder chip leads the opening prompts and spans both grid columns: it starts a flow rather
   than asking a question, so it should not read as one of the four sibling prompts. */
.bcfc-ai__chip--lead {
    grid-column: 1 / -1;
    color: var(--bcfc-white);
    background: var(--ai-accent);
    border-color: var(--ai-accent);
}

.bcfc-ai__chip--lead:hover {
    color: var(--bcfc-white);
    background: var(--ai-accent);
    border-color: var(--ai-accent);
    filter: brightness(0.92);
}

/* "Question 2 of 4". Small and unemphatic — it tells the visitor the flow is short and finite,
   which is the only reason it exists. */
.bcfc-ai__step-progress {
    margin: 0 0 0.25rem;
    font-size: 0.6875rem;
    font-weight: var(--bcfc-fw-bold);
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500, var(--bcfc-gray-600)));
}

.bcfc-ai__widget-title {
    margin: 0 0 0.375rem;
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.3;
    color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
}

/* The compliance line under a result set or a compare table: not advice, not an approval, and where
   to get your own numbers. Small, but NOT hidden and NOT low-contrast — this is the sentence that
   keeps a filtered shortlist from reading as a recommendation, so it has to be legible. */
.bcfc-ai__fineprint {
    margin: 0.5rem 0 0;
    padding-block-start: 0.5rem;
    border-block-start: 1px solid var(--bcfc-border-light);
    font-size: 0.6875rem;
    line-height: 1.45;
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-600));
}

/* ── Compare table ───────────────────────────────────────────
   A real <table> with real <th scope>: this is tabular data, and a grid of divs is unreadable to a
   screen reader in exactly the situation where the row and column a cell belongs to is the entire
   meaning. The panel is narrow, so it scrolls sideways rather than reflowing — three columns of
   figures that wrap to two lines each stop being a comparison. */
.bcfc-ai__compare-scroll {
    overflow-x: auto;
    scrollbar-width: thin;
}

.bcfc-ai__compare {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.75rem;
    line-height: 1.35;
}

.bcfc-ai__compare th,
.bcfc-ai__compare td {
    padding: 0.3125rem 0.375rem;
    text-align: start;
    vertical-align: top;
    border-block-end: 1px solid var(--bcfc-border-light);
}

.bcfc-ai__compare thead th {
    font-weight: var(--bcfc-fw-bold);
    color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
    white-space: normal;
    /* Enough for a card name on two lines, narrow enough that three fit before scrolling starts. */
    min-width: 5.5rem;
}

.bcfc-ai__compare thead th a {
    color: var(--bcfc-dark-ink-brand, var(--ai-accent));
    text-decoration: none;
}

.bcfc-ai__compare thead th a:hover {
    text-decoration: underline;
}

/* The row label. Sticky so the attribute stays readable while the columns scroll — without it, a
   sideways scroll leaves the visitor looking at three numbers with no idea what they measure. */
.bcfc-ai__compare tbody th {
    position: sticky;
    inset-inline-start: 0;
    font-weight: var(--bcfc-fw-semibold);
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-600));
    background: var(--bcfc-surface-raised, var(--bcfc-white));
    white-space: nowrap;
}

.bcfc-ai__compare tbody td {
    color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
}

/* ── Branch list ─────────────────────────────────────────────
   Reads the same branchItems Block List the branches page renders. No Google Maps script and no API
   key: that would need the Maps host admitted to CSP on every page carrying the widget, which is
   every page. A plain maps.google.com link per branch gets to directions with neither. */
.bcfc-ai__branches {
    display: flex;
    flex-direction: column;
    gap: 0.375rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.bcfc-ai__branch {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
    padding: 0.5rem;
    background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
    border: 1px solid var(--bcfc-border-light);
    border-radius: var(--bcfc-radius-lg);
}

.bcfc-ai__branch-name {
    font-size: var(--bcfc-fs-xs);
    font-weight: var(--bcfc-fw-bold);
    line-height: 1.3;
    color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
}

.bcfc-ai__branch-meta {
    font-size: 0.6875rem;
    line-height: 1.4;
    color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-600));
}

.bcfc-ai__branch-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
    margin-block-start: 0.25rem;
}

/* A denser page button, for the two-per-branch pairs where the full-size pill is out of proportion
   to the row it sits in. */
.bcfc-ai__link--sm {
    padding: 0.1875rem 0.5rem;
    font-size: 0.6875rem;
}

/* A cited PDF is not a page and must not look like one — the visitor is about to download a
   document, and the leading glyph is the only warning they get. The server signs these urls at
   response-build time (never stored: the token outlives nothing), so this row is the only place a
   document link is presented in the chat. */
.bcfc-ai__link--doc::before {
    content: "";
    flex: 0 0 auto;
    width: 0.5rem;
    height: 0.625rem;
    background: currentColor;
    /* A dog-eared page outline, so it survives forced-colors mode where a background image would
       vanish. */
    clip-path: polygon(0 0, 65% 0, 100% 32%, 100% 100%, 0 100%);
}

/* ChatWidget.cshtml's three-dot typing indicator: staggered animation-delay on the
   Tailwind `animate-bounce` dots, moved out of inline style attributes. */
.bcfc-chat-widget__dot--delay-2 { animation-delay: 0.2s; }
.bcfc-chat-widget__dot--delay-3 { animation-delay: 0.4s; }

/* ========================================
   FLOATING BUTTONS ON A PHONE: TWO, NEVER FIVE (2026-10-14)
   Script and the full reasoning: wwwroot/js/bcfc-fab-dial.ts.

   At max-width 767px the script puts `bcfc-fab-dial` on <body>. Then:
     slot 0  Suhaila's launcher (her own button, a brand feature)
     slot 1  the quick-links "+", now a speed dial, visible from first paint (it carries the
             accessibility FAB, which must never be scroll-gated)
   and the calculator jump and the accessibility FAB are FOLDED: hidden until the
   "+" is opened, then stacked above the quick links in the order the script numbers them
   (--bcfc-dial-i). Hidden means `visibility: hidden`, so a folded button is out of the tab order
   and the accessibility tree, not merely transparent.

   !important on the folded/unfolded state for the reason bcfc-inline-partials.css gives on its
   phone rules: scroll-to-top's visibility is ALSO driven by an ID selector and a scroll-timeline
   animation in bcfc-animations.css, and only an important declaration outranks an animation.

   Every value derives from the column's own tokens (--bcfc-fab-toggle-size / -gap / -right, which
   bcfc-inline-partials.css already shrinks to 44 / 8 / 12px at 640px), so nothing here re-states a
   size, a colour or a z-index. Logical properties only: the column mirrors to the left on /ar.
   ======================================== */
@media (width < 768px) {
    /* The column's floor. --bcfc-dial-lift is set by the script while a full-width bottom bar sits
       under the column; --bcfc-fab-lift is the older per-bar mechanism (CardsV18's compare tray). */
    body.bcfc-fab-dial {
        --bcfc-dial-floor: calc(12px + max(var(--bcfc-fab-lift, 0px), var(--bcfc-dial-lift, 0px)) + env(safe-area-inset-bottom, 0px));
        --bcfc-dial-step: calc(var(--bcfc-fab-toggle-size, 44px) + var(--bcfc-fab-gap, 8px));
    }

    /* ── slot 0: Suhaila. Every anchor the assistant's sheet moves between collapses to the floor,
       because nothing sits under her any more. */
    body.bcfc-fab-dial .bcfc-ai {
        --ai-column-closed: var(--bcfc-dial-floor);
        --ai-column-expanded: var(--bcfc-dial-floor);
        --ai-column-bottom: var(--bcfc-dial-floor);
    }

    /* ── slot 1: the "+" dial. Not scroll-gated on a phone (see the header). */
    body.bcfc-fab-dial .bcfc-quick-links {
        bottom: calc(var(--bcfc-dial-floor) + var(--bcfc-dial-step));
        opacity: 1;
        transform: none;
    }

    body.bcfc-fab-dial .bcfc-quick-links__toggle {
        pointer-events: auto;
    }

    /* Rail items match the toggle (44px on a phone, still the minimum touch target), so the open
       stack is as short as it can be. */
    body.bcfc-fab-dial :is(.bcfc-quick-links, .bcfc-a11y) .bcfc-quick-links__item {
        width: var(--bcfc-fab-toggle-size, 44px);
        height: var(--bcfc-fab-toggle-size, 44px);
        min-height: var(--bcfc-fab-toggle-size, 44px);
    }

    body.bcfc-fab-dial .bcfc-quick-links .bcfc-quick-links__controls {
        gap: var(--bcfc-fab-gap, 8px);
        margin-bottom: 0;
    }

    /* ── the folded members ─────────────────────────────────── */
    body.bcfc-fab-dial :is(.lcalc-jump, .bcfc-a11y) {
        opacity: 0 !important;
        visibility: hidden !important;
        pointer-events: none !important;
        transition: opacity 0.2s ease, visibility 0.2s ease !important;
    }

    body.bcfc-fab-dial.bcfc-fab-dial--open :is(.lcalc-jump, .bcfc-a11y)[data-bcfc-dial-member] {
        opacity: 1 !important;
        visibility: visible !important;
        transform: none !important;
        /* Above the quick-links box (its measured height, --bcfc-dial-stack), one step per member. */
        bottom: calc(
            var(--bcfc-dial-floor)
            + var(--bcfc-dial-step)
            + var(--bcfc-dial-stack, var(--bcfc-fab-toggle-size, 44px))
            + var(--bcfc-fab-gap, 8px)
            + var(--bcfc-dial-step)
            + var(--bcfc-dial-i, 0) * var(--bcfc-dial-step)
        ) !important;
    }

    /* ── scroll-to-top: NEVER folded, always visible (owner, 2026-10-18). It is the permanent slot
       directly above the "+", and when the dial opens it rides up above the unfolded box (measured,
       --bcfc-dial-stack) and the folded members stack one step above it (the extra step in the rule
       above). !important for the same reason as the folded state: an ID selector and a
       scroll-timeline animation in bcfc-animations.css also drive its visibility. */
    body.bcfc-fab-dial [data-bcfc-scroll-top] {
        opacity: 1 !important;
        visibility: visible !important;
        transform: none !important;
        pointer-events: auto !important;
        /* Closed: hugging the "+" (the box's measured height counts its folded rail, so it is NOT
           used here). Open: above the whole unfolded box. */
        bottom: calc(
            var(--bcfc-dial-floor)
            + var(--bcfc-dial-step)
            + var(--bcfc-fab-toggle-size, 44px)
            + var(--bcfc-fab-gap, 8px)
        ) !important;
    }

    body.bcfc-fab-dial.bcfc-fab-dial--open [data-bcfc-scroll-top] {
        bottom: calc(
            var(--bcfc-dial-floor)
            + var(--bcfc-dial-step)
            + var(--bcfc-dial-stack, var(--bcfc-fab-toggle-size, 44px))
            + var(--bcfc-fab-gap, 8px)
        ) !important;
    }

    body.bcfc-fab-dial.bcfc-fab-dial--open :is(.lcalc-jump)[data-bcfc-dial-member],
    body.bcfc-fab-dial.bcfc-fab-dial--open .bcfc-a11y[data-bcfc-dial-member] .bcfc-a11y__toggle {
        pointer-events: auto !important;
    }

    /* The accessibility panel opens SIDEWAYS on a phone, toward the inline start, at the height of
       its own toggle — opening upward would climb over the stack and off a short screen. A row in
       the writing direction, so it mirrors on /ar with no extra rule. The hover tooltips would lie
       across the neighbouring buttons in a row; a touch screen has no hover anyway. */
    body.bcfc-fab-dial .bcfc-a11y .bcfc-quick-links__controls {
        position: absolute;
        inset-block-end: 0;
        inset-inline-end: calc(100% + var(--bcfc-fab-gap, 8px));
        flex-direction: row;
        gap: var(--bcfc-fab-gap, 8px);
    }

    body.bcfc-fab-dial .bcfc-a11y .bcfc-quick-links__item::after {
        content: none;
        display: none;
    }

    /* ── no quick links on the page: the accessibility FAB is the second button, at slot 1, and
       the calculator jump stays off the column on a phone. Scroll-to-top stays, above it. */
    body.bcfc-fab-dial.bcfc-fab-dial--bare .bcfc-a11y {
        bottom: calc(var(--bcfc-dial-floor) + var(--bcfc-dial-step)) !important;
        opacity: 1 !important;
        visibility: visible !important;
    }

    body.bcfc-fab-dial.bcfc-fab-dial--bare .bcfc-a11y .bcfc-a11y__toggle {
        pointer-events: auto !important;
    }

    body.bcfc-fab-dial.bcfc-fab-dial--bare [data-bcfc-scroll-top] {
        bottom: calc(var(--bcfc-dial-floor) + var(--bcfc-dial-step) * 2) !important;
    }

    /* Suhaila's open panel takes the screen: the dial and its members get out of the way, as the
       "+" and scroll-to-top already do in bcfc-ai-assistant.css. */
    body.bcfc-fab-dial:has(.bcfc-ai.is-open) :is([data-bcfc-scroll-top], .lcalc-jump, .bcfc-a11y, .bcfc-quick-links) {
        opacity: 0 !important;
        visibility: hidden !important;
        pointer-events: none !important;
    }
}

/* BCFC PDF Viewer Modal Styles */

/* Frosted, not blacked out. At rgba(0,0,0,0.95) with a 4px blur the page behind was simply gone, so
   the viewer read as a separate screen rather than as something open ON the page; the blur was doing
   no visible work under that much black. Lighter tint, much stronger blur: the layout behind stays
   legible as shape and colour while text is unreadable, which is what keeps the document the subject.

   THE TINT LIVES HERE AND NOWHERE ELSE. .pdf-viewer-backdrop is stacked on top of this element, so a
   background on both multiplies — two 0.55 layers composite to ~0.8 and the effect is lost. The
   backdrop element carries the click target only, and its Tailwind bg-black/95 backdrop-blur-sm
   utilities were removed from the markup rather than overridden here, because the generated Tailwind
   sheet is bundled AFTER this file and would win. */
.pdf-viewer-modal {
    background: rgba(0, 0, 0, 0.55);
    /* saturate lifts the colour the blur washes out, so the page reads as frosted glass rather than
       as grey fog. */
    backdrop-filter: blur(16px) saturate(120%);
    -webkit-backdrop-filter: blur(16px) saturate(120%);
}

.pdf-viewer-backdrop {
    cursor: pointer;
}

.pdf-viewer-close {
    transition: background-color 0.2s ease, transform 0.2s ease;
}

/* Must sit above the loading overlay AND above anything embedPDF renders inside the
   viewer (its own UI uses z-index up to 10000), otherwise the X is visible but not
   clickable. Two classes deliberately: the markup also carries Tailwind's .z-10, and
   tailwind.generated.css is bundled AFTER this file, so a single-class rule loses. */
.pdf-viewer-modal .pdf-viewer-close {
    z-index: 30;
}

.pdf-viewer-close:hover {
    background-color: rgba(255, 255, 255, 0.2);
    transform: scale(1.05);
}

.pdf-viewer-close:active {
    transform: scale(0.95);
}

/* Lives in the top band the stage reserves (see .pdf-viewer-stage below), left-aligned rather than
   centred. Centring is what broke it: with `left: 50%` + a -50% translate and a max-width narrower
   than the text, the overflow was clipped on the LEFT, so a phone showed "...ual Report 2010".
   Left-aligned with an end-side gutter for the close button, the ellipsis lands where it belongs.
   Physical left/right rather than logical, mirrored explicitly for RTL. The gutter swaps sides with
   the close BUTTON, which despite its Tailwind `right-4` does move in RTL — rtl-ar.css carries
   `[dir="rtl"] .pdf-viewer-close { right: auto; left: 1rem }`. Change one of those two and the
   title lands under the X. */
.pdf-viewer-title {
    top: 1.75rem;
    left: 1.5rem;
    right: 5.5rem;
    max-width: none;
    text-align: start;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
    font-size: 1rem;
}

html[dir="rtl"] .pdf-viewer-title {
    left: 5.5rem;
    right: 1.5rem;
}

@media (min-width: 48rem) {
    .pdf-viewer-title {
        left: 2rem;
        font-size: 1rem;
    }

    html[dir="rtl"] .pdf-viewer-title {
        left: 5.5rem;
        right: 2rem;
    }
}

/* Reserve a band at the top of the modal for OUR chrome (title + close), so embedPDF's toolbar
   starts below it.

   The close button sat directly on top of embedPDF's search control: measured at 393px wide, their
   button occupied x 321-353 / y 40-72 and ours x 325-381 / y 8-64 — a real intersection. Ours won
   the hit-test at every probe point, so the X worked while permanently covering theirs.

   Nudging the button cannot fix this. The container is inset by the stage's 24px padding while the
   close button is inset 16px, so `container.right` is ALWAYS further right than `close.left` at
   every viewport width — whether they clash depends only on whether embedPDF happens to place a
   control in that last ~44px, which it does once the toolbar goes compact. Vertical separation is
   the only fix that cannot regress when their layout changes, so it is applied at all widths rather
   than under a breakpoint guessed from the outside.

   The stage's padding is declared here in full, and the `p-4 md:p-8` utilities were removed from the
   markup to make that possible: at two classes of specificity this still lost to Tailwind's `.p-4`,
   so the top band could not be applied from CSS while both were present. Owning all four sides here
   also keeps the band and the side gutters in one place. */
.pdf-viewer-stage {
    /* 5rem clears the 56px close button plus its 16px offset, with room to spare. */
    padding: 5rem 1.5rem 1.5rem;
}

@media (min-width: 48rem) {
    .pdf-viewer-stage {
        padding: 5rem 2rem 2rem;
    }
}


/* Fills the stage's PADDED content box — deliberately 100%/100% rather than a viewport-based
   calc(). A vh-based height ignores the stage's padding, and since the stage centres its child, any
   excess spilled equally above and below and pushed embedPDF's toolbar back under the close button. */
.pdf-viewer-container {
    height: 100%;
    max-height: 100%;
}

/* Nothing inside the viewer is selectable.
   Scoped to #pdf-viewer-target rather than the whole modal, so the title and the "PDF could not be
   displayed" fallback message stay selectable; that message names the failure and is worth being
   able to copy into a bug report.

   What this actually covers, measured in Chrome rather than assumed: @embedpdf/snippet@2 renders
   each page as a RASTER (an img element) inside one shadow root — no text layer in the DOM at all, so
   the document's text was never selectable to begin with. A real 12-step mouse drag across a
   577x817 page selects nothing even with `user-select: text !important` forced on. What WAS
   selectable is the viewer's own chrome (toolbar labels, page counter), and embedPDF already sets
   `user-select: none` on most of it. So do not read this rule as plugging a copy-the-document hole:
   it makes the guarantee explicit and, because it matches `*`, it also covers a text layer that a
   future version of the snippet might create lazily on drag.

   It works through the shadow boundary because `user-select` is an INHERITED property, and inherited
   values cross into shadow trees even though this stylesheet cannot address elements inside one.
   Confirmed: all text-bearing leaves under the host compute `none`. There is a 0x0 about:blank
   utility iframe in there too — inheritance would NOT cross that, but nothing renders inside it.

   -webkit-touch-callout suppresses the iOS long-press "Copy / Look Up" sheet, a separate mechanism
   from selection.

   The real exposure is the file itself, not selection — see PdfLinkSigner and the /media PDF token
   gate in Program.cs. */
#pdf-viewer-target,
#pdf-viewer-target * {
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
    -webkit-touch-callout: none;
}

/* Spans the whole modal (inset-0), so it must never swallow clicks meant for
   the close button — including in the failure state, where it stays visible. */
.pdf-viewer-loading {
    z-index: 10;
    pointer-events: none;
}

.pdf-viewer-loading > * {
    pointer-events: auto;
}

/* Own stacking context: keeps embedPDF's internal z-indexes (toolbars,
   dropdowns, dialogs — up to 10000) from painting over the modal chrome. */
.pdf-viewer-stage {
    z-index: 0;
    isolation: isolate;
}

/* CLICKING THE BACKDROP CLOSES THE VIEWER, and this is what makes that reach it.

   .pdf-viewer-backdrop carries data-pdf-viewer-close and the delegated handler in
   bcfc-pdf-viewer.js was always correct — but the click never arrived. The backdrop is
   `absolute inset-0` with an auto z-index, and the stage is a LATER sibling that is
   `w-full h-full` with `z-index: 0`. Two positioned siblings at the same level paint in DOM
   order, so the stage sat on top of the whole backdrop and absorbed every click in the modal.
   Nothing looked wrong, because the stage is transparent.

   So the stage stops taking pointer events and the container takes them back. The gutters the
   stage's own padding creates - 5rem at the top, 1.5-2rem at the sides, plus whatever the
   container's max-w-6xl leaves on a wide screen - now fall through to the backdrop, which is
   exactly the region a visitor reads as "outside the document".

   Same pattern as .pdf-viewer-loading above, for the same reason: an overlay that must be seen
   and not clicked. Do NOT give the stage a positive z-index to "fix" a layering problem here;
   that is what hid the backdrop in the first place.

   The close button is unaffected - it is a sibling of the stage, not a child, and carries its
   own z-index 30. */
.pdf-viewer-stage {
    pointer-events: none;
}

/* The document itself stays fully interactive: embedPDF's toolbar, scrolling, zoom and text
   all live inside the container. */
.pdf-viewer-container {
    pointer-events: auto;
}

/* Animation for modal appearance */
@keyframes pdfModalFadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

@keyframes pdfModalSlideUp {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.pdf-viewer-modal:not(.hidden) {
    animation: pdfModalFadeIn 0.2s ease-out;
}

.pdf-viewer-modal:not(.hidden) .pdf-viewer-container {
    animation: pdfModalSlideUp 0.3s ease-out;
}

/* Hide scrollbar when modal is open */
body.pdf-viewer-open {
    overflow: hidden;
}

/* RTL Support */

/* THE DOCUMENT ITSELF IS ALWAYS LAID OUT LTR, in both cultures.

   `direction` is an inherited property, so `<html dir="rtl">` on every /ar page reached into
   embedPDF's shadow root — inheritance crosses a shadow boundary even though this stylesheet cannot
   address anything inside one, which is the same mechanism the `user-select: none` rule above relies
   on. embedPDF documents no RTL support and lays its scroll container out from the INLINE start, so
   on Arabic pages the page was pinned to the right edge of the viewport with an empty gutter beside
   it and its far side clipped off, and embedPDF's own notices came out bidi-mangled (the full stop
   in "…to view or unlock permissions." rendered at the start of the line).

   bcfc-pdf-viewer.js also sets dir="ltr" on the mount target, which is what actually fixes the
   MODAL. This rule is the floor: it covers an inline mount whose wrapper markup a page supplies
   itself, and it keeps the reset visible to anyone reading the stylesheet rather than only to
   someone reading the script.

   SCOPED TO THE DOCUMENT AREA, NEVER THE MODAL. `.pdf-viewer-title` is real Arabic text on /ar and
   must stay RTL, as must the "PDF could not be displayed" fallback copy. */
#pdf-viewer-target,
[data-pdf-inline-target] {
    direction: ltr;
}

/* CENTRING THE PAGE IS NOT HERE, and cannot be. embedPDF writes a stale pixel `margin-left` onto
   its scroll container's child on every zoom change, which is what pushes the document sideways
   once it no longer fits; the rule that replaces it with auto margins has to live INSIDE the
   shadow root, so it is injected by centreDocumentIn() in bcfc-pdf-viewer.js. `direction` above
   reaches in only because it is inherited. */

/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
    .pdf-viewer-modal:not(.hidden) {
        animation: none;
    }

    .pdf-viewer-modal:not(.hidden) .pdf-viewer-container {
        animation: none;
    }

    .pdf-viewer-close {
        transition: none;
    }
}

:root {
  --bcfc-blue: #004a98;
  --bcfc-blue-dark: #00346a;
  --bcfc-blue-light: #0066c7;
  --bcfc-navy: #071b33;
  --bcfc-navy-light: #0a2847;
  --bcfc-card-hover: #11295f;
  --bcfc-card-accent: #afc6ec;
  --bcfc-yellow: #f3db6e;
  --bcfc-yellow-light: #f9e99a;
  --bcfc-red: #f32735;
  --bcfc-danger: #d81222;
  --bcfc-danger-dark: #b00e1c;
  --bcfc-danger-tint: rgba(216, 18, 34, 0.08);
  --bcfc-danger-ring: rgba(216, 18, 34, 0.14);
  --bcfc-navy-tint: rgba(7, 27, 51, 0.06);
  --bcfc-navy-tint-strong: rgba(7, 27, 51, 0.1);
  --bcfc-blue-tint: rgba(0, 74, 152, 0.07);
  --bcfc-green: #65c3a0;
  --bcfc-green-dark: #113e35;
  --bcfc-green-darker: #0c2d27;
  --bcfc-sahel-deep: #002719;
  --bcfc-sahel-deep-hover: #0b3a2a;
  --bcfc-primary: #004a98;
  --bcfc-primary-dark: #00346a;
  --bcfc-accent: #f3db6e;
  --bcfc-success: #65c3a0;
  --bcfc-white: #ffffff;
  --bcfc-gray-50: #f9fafb;
  --bcfc-gray-100: #f2f4f7;
  --bcfc-gray-200: #e4e7ec;
  --bcfc-gray-300: #d0d5dd;
  --bcfc-gray-400: #98a2b3;
  --bcfc-gray-500: #667085;
  --bcfc-gray-600: #475467;
  --bcfc-gray-700: #344054;
  --bcfc-gray-800: #1d2939;
  --bcfc-gray-900: #101828;
  --bcfc-border: #d9e4ef;
  --bcfc-border-light: #e2e8f0;
  --bcfc-ff-primary: "Almarai", Arial, sans-serif;
  --bcfc-ff-secondary: "Nunito", Arial, sans-serif;
  --bcfc-ff-tertiary: "Poppins", Arial, sans-serif;
  --bcfc-fs-xs: 0.8125rem;
  --bcfc-fs-sm: 0.9375rem;
  --bcfc-fs-base: 1.0625rem;
  --bcfc-fs-md: 1.125rem;
  --bcfc-fs-lg: 1.25rem;
  --bcfc-fs-xl: 1.5rem;
  --bcfc-fs-2xl: 2rem;
  --bcfc-fs-3xl: 2.5rem;
  --bcfc-fs-4xl: 3rem;
  --bcfc-fw-normal: 400;
  --bcfc-fw-medium: 500;
  --bcfc-fw-semibold: 600;
  --bcfc-fw-bold: 700;
  --bcfc-fw-extrabold: 800;
  --bcfc-lh-tight: 1.25;
  --bcfc-lh-normal: 1.5;
  --bcfc-lh-relaxed: 1.65;
  --bcfc-space-1: 0.25rem;
  --bcfc-space-2: 0.5rem;
  --bcfc-space-3: 0.75rem;
  --bcfc-space-4: 1rem;
  --bcfc-space-5: 1.25rem;
  --bcfc-space-6: 1.5rem;
  --bcfc-space-8: 2rem;
  --bcfc-space-10: 2.5rem;
  --bcfc-space-12: 3rem;
  --bcfc-space-16: 4rem;
  --bcfc-space-20: 5rem;
  --bcfc-space-24: 6rem;
  --bcfc-radius-sm: 8px;
  --bcfc-radius-md: 12px;
  --bcfc-radius-lg: 16px;
  --bcfc-radius-xl: 20px;
  --bcfc-radius-2xl: 24px;
  --bcfc-radius-full: 9999px;
  --bcfc-shadow-sm: 0 2px 8px rgba(0, 74, 152, 0.08);
  --bcfc-shadow-md: 0 8px 24px rgba(0, 74, 152, 0.12);
  --bcfc-shadow-lg: 0 16px 48px rgba(0, 74, 152, 0.15);
  --bcfc-shadow-xl: 0 24px 60px rgba(0, 0, 0, 0.12);
  --bcfc-z-base: 0;
  --bcfc-z-raised: 1;
  --bcfc-z-fab: 100;
  --bcfc-z-fab-raised: 1035;
  --bcfc-z-dropdown: 1000;
  --bcfc-z-sticky: 1020;
  --bcfc-z-fixed: 1030;
  --bcfc-z-modal-backdrop: 1040;
  --bcfc-z-modal: 1050;
  --bcfc-z-popover: 1060;
  --bcfc-z-tooltip: 1070;
  --bcfc-z-skip-link: 1080;
  --bcfc-z-cookie-banner: 1200;
  --bcfc-z-emergency: 9999;
}

@media (max-width: 1536px) {
  :root {
    --bcfc-fs-4xl: 2.75rem;
  }
}
@media (max-width: 1280px) {
  :root {
    --bcfc-fs-4xl: 2.5rem;
    --bcfc-fs-3xl: 2.25rem;
  }
}
@media (max-width: 1024px) {
  :root {
    --bcfc-fs-4xl: 2.25rem;
    --bcfc-fs-3xl: 2rem;
    --bcfc-fs-2xl: 1.75rem;
  }
}
@media (max-width: 768px) {
  :root {
    --bcfc-fs-4xl: 2rem;
    --bcfc-fs-3xl: 1.75rem;
    --bcfc-fs-2xl: 1.5rem;
    --bcfc-fs-xl: 1.25rem;
  }
}
:root {
  --bcfc-header-height: 104px;
  --bcfc-masthead-height: 0px;
  --bcfc-total-header-height: calc(var(--bcfc-masthead-height, 0px) + var(--bcfc-header-height, 104px));
  --bcfc-color-primary: #004a98;
  --bcfc-header-action-blue: #004892;
  --bcfc-color-secondary: #163529;
  --bcfc-sahel-green: #113e35;
  --bcfc-header-cta-bg: var(--bcfc-sahel-green);
  --bcfc-color-white: #ffffff;
  --bcfc-header-glass-bg: rgba(255, 255, 255, 0.42);
  --bcfc-header-glass-blur: blur(20px) saturate(180%);
  --bcfc-header-control-radius: 12px;
  --bcfc-color-border: #d9e4ef;
  --bcfc-lang-control-width: 116px;
  --bcfc-nav-hover-bg: #f3f7fb;
  --bcfc-green-light: #65C3A0;
}

@media (max-width: 768px) {
  :root {
    --bcfc-header-height: 72px;
  }
}
:root {
  --bcfc-fab-right: 20px;
  --bcfc-fab-toggle-size: 56px;
  --bcfc-fab-gap: 14px;
  --bcfc-fab-lift: 0px;
  --bcfc-fab-ring: 0 0 0 2px var(--bcfc-white, #fff);
}

@media (min-width: 1400px) {
  :root {
    --bcfc-fab-right: 24px;
  }
}
:root {
  --bcfc-btn-radius: var(--bcfc-radius-full, 9999px);
  --bcfc-btn-pad-block: 0.95rem;
  --bcfc-btn-pad-inline: 1.75rem;
  --bcfc-btn-size: 0.9375rem;
  --bcfc-btn-weight: var(--bcfc-fw-extrabold, 800);
  --bcfc-btn-gap: 0.5rem;
  --bcfc-btn-line: 1.5px;
  --bcfc-btn-min-height: 3.25rem;
  --bcfc-btn-lift: -2px;
  --bcfc-btn-speed: 0.22s;
  --bcfc-btn-ease: cubic-bezier(0.4, 0, 0.2, 1);
  --bcfc-btn-navy: var(--bcfc-blue-dark, #00346a);
  --bcfc-btn-navy-hover: var(--bcfc-blue, #004a98);
  --bcfc-btn-white: var(--bcfc-color-white, #ffffff);
  --bcfc-btn-fill: var(--bcfc-btn-navy);
  --bcfc-btn-ink: var(--bcfc-btn-white);
  --bcfc-btn-border: transparent;
  --bcfc-btn-shadow: none;
  --bcfc-btn-fill-hover: color-mix(in srgb, var(--bcfc-btn-fill) 86%, black);
  --bcfc-btn-ink-hover: var(--bcfc-btn-ink);
  --bcfc-btn-border-hover: var(--bcfc-btn-border);
  --bcfc-btn-shadow-hover: var(--bcfc-btn-shadow);
}

@media (width < 576px) {
  :root {
    --bcfc-btn-pad-inline: 1.35rem;
    --bcfc-btn-min-height: 3rem;
  }
}
:root {
  --bcfc-text-muted: #4b5563;
}

html[dir=rtl] {
  --bcfc-ar-lh-min: 1.5;
}

html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.0625rem;
  line-height: 1.5;
  color: var(--bcfc-ink, #101828);
  background-color: var(--bcfc-surface-base, #ffffff);
}

::selection {
  background-color: rgba(0, 74, 152, 0.22);
  color: #071b33;
}

a {
  color: var(--bcfc-ink-link, #004a98);
  text-decoration: none;
  transition: color 0.2s ease;
}
a:hover:where(:not([class*=btn]):not([class*=cta]):not([class*=pill])) {
  color: var(--bcfc-ink-link-hover, #00346a);
}

h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 0 0 var(--bcfc-space-4);
  line-height: var(--bcfc-lh-tight);
}

h1 {
  font-size: var(--bcfc-fs-4xl);
  font-weight: var(--bcfc-fw-bold);
}

h2 {
  font-size: var(--bcfc-fs-3xl);
  font-weight: var(--bcfc-fw-bold);
}

h3 {
  font-size: var(--bcfc-fs-2xl);
  font-weight: var(--bcfc-fw-medium);
}

h4 {
  font-size: var(--bcfc-fs-xl);
  font-weight: var(--bcfc-fw-medium);
}

h5 {
  font-size: var(--bcfc-fs-lg);
  font-weight: var(--bcfc-fw-medium);
}

h6 {
  font-size: var(--bcfc-fs-md);
  font-weight: var(--bcfc-fw-medium);
}

hr {
  margin-top: 1.5rem;
  border: none;
  border-top: 1px solid #e2e8f0;
}

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

input,
textarea,
select,
button {
  font-family: inherit;
  font-size: inherit;
}

@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;
  }
}
.bcfc-card {
  --card-radius: var(--bcfc-radius-xl);
  --card-pad-block: 1.75rem;
  --card-pad-inline: 1.625rem;
  --card-shadow: var(--bcfc-shadow-sm);
  --card-bg: var(--bcfc-surface-raised, var(--bcfc-white));
  --card-border: var(--bcfc-border);
  position: relative;
  min-inline-size: 0;
  padding-block: var(--card-pad-block) calc(var(--card-pad-block) + 0.1875rem);
  padding-inline: var(--card-pad-inline);
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius);
  background: var(--card-bg);
  box-shadow: var(--card-shadow);
}
.bcfc-card--sm {
  --card-radius: var(--bcfc-radius-lg);
  --card-pad-block: 1.25rem;
  --card-pad-inline: 1.125rem;
}
.bcfc-card--lg {
  --card-radius: var(--bcfc-radius-2xl);
  --card-pad-block: 2.25rem;
  --card-pad-inline: 2.25rem;
}
.bcfc-card--stack, .bcfc-card--media {
  display: flex;
  flex-direction: column;
}
.bcfc-card--flat {
  --card-shadow: none;
}
.bcfc-card--tint {
  --card-bg: var(--bcfc-gray-50);
}
.bcfc-card--dark {
  --card-bg: var(--bcfc-navy);
  --card-border: color-mix(in srgb, var(--bcfc-white) 10%, transparent);
  --card-shadow: none;
  color: var(--bcfc-ink, var(--bcfc-white));
}
.bcfc-card--media {
  padding: 0;
  overflow: hidden;
}
.bcfc-card--lift {
  transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.3s ease, border-color 0.3s ease;
}
.bcfc-card--lift:hover, .bcfc-card--lift:focus-within {
  transform: translateY(-4px);
  box-shadow: var(--bcfc-shadow-lg);
}
.bcfc-card--lift:hover .bcfc-card__image, .bcfc-card--link:hover .bcfc-card__image {
  transform: scale(1.04);
}
.bcfc-card__media {
  position: relative;
  aspect-ratio: 16/10;
  overflow: hidden;
  background: var(--bcfc-blue-tint);
}
.bcfc-card__media--portrait {
  aspect-ratio: 4/4.5;
}
.bcfc-card__media--scrim::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  inset-block-end: 0;
  block-size: 56%;
  pointer-events: none;
  background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--bcfc-navy) 78%, transparent));
}
.bcfc-card__image {
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
  transition: transform 0.4s ease;
}
.bcfc-card__badge {
  position: absolute;
  inset-inline-start: var(--bcfc-space-4);
  inset-block-end: var(--bcfc-space-4);
  z-index: var(--bcfc-z-raised);
  display: inline-flex;
  align-items: center;
  min-block-size: 2.125rem;
  padding-inline: var(--bcfc-space-3);
  border-radius: var(--bcfc-radius-full);
  background: color-mix(in srgb, var(--bcfc-white) 92%, transparent);
  color: var(--bcfc-blue);
  font: var(--bcfc-fw-extrabold) 0.8125rem/1 var(--bcfc-ff-primary);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.bcfc-card__body {
  display: grid;
  flex: 1 1 auto;
  align-content: start;
  gap: var(--bcfc-space-3);
  padding: var(--bcfc-space-5) var(--bcfc-space-5) var(--bcfc-space-6);
}
.bcfc-card__eyebrow {
  margin: 0;
  color: var(--bcfc-ink-strong, var(--bcfc-navy));
  font: var(--bcfc-fw-extrabold) 0.8125rem/1.2 var(--bcfc-ff-primary);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.bcfc-card__title {
  margin: 0;
  color: var(--bcfc-ink-strong, var(--bcfc-navy));
  font: var(--bcfc-fw-extrabold) 1.18rem/1.38 var(--bcfc-ff-primary);
}
.bcfc-card__text {
  margin: 0;
  color: var(--bcfc-ink, var(--bcfc-gray-600));
  font: var(--bcfc-fw-medium) 0.96rem/1.72 var(--bcfc-ff-primary);
}
.bcfc-card__footer {
  margin-block-start: auto;
  padding-block-start: var(--bcfc-space-3);
}
.bcfc-card__action {
  display: inline-flex;
  align-items: center;
  gap: var(--bcfc-space-2);
  color: var(--bcfc-ink-link, var(--bcfc-blue));
  font-weight: var(--bcfc-fw-extrabold);
}
.bcfc-card__link {
  color: inherit;
  text-decoration: none;
}
.bcfc-card__link::after {
  content: "";
  position: absolute;
  inset: 0;
}
.bcfc-card--link:hover .bcfc-card__action, .bcfc-card--link:focus-within .bcfc-card__action {
  color: var(--bcfc-ink-link-hover, var(--bcfc-blue-dark));
}
@media (width < 768px) {
  .bcfc-card--lg {
    --card-pad-block: 1.5rem;
    --card-pad-inline: 1.25rem;
  }
  .bcfc-card__body {
    padding: var(--bcfc-space-4) var(--bcfc-space-4) var(--bcfc-space-5);
  }
  .bcfc-card__title {
    font-size: 1.06rem;
  }
}
@media (prefers-reduced-motion: reduce) {
  .bcfc-card--lift, .bcfc-card__image {
    transition: none;
  }
  .bcfc-card--lift:hover, .bcfc-card--lift:focus-within, .bcfc-card--lift:hover .bcfc-card__image, .bcfc-card--link:hover .bcfc-card__image {
    transform: none;
  }
}

[dir=rtl] .bcfc-card__eyebrow,
[dir=rtl] .bcfc-card__badge {
  letter-spacing: normal;
}

.btn--ghost, .btn--secondary, .btn--primary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding-block: 0.75rem;
  padding-inline: 1.5rem;
  font-family: "Almarai", Arial, sans-serif;
  font-size: 0.9375rem;
  font-weight: 700;
  line-height: 1.25;
  text-decoration: none;
  border: 0;
  border-radius: 9999px;
  cursor: pointer;
  transition: all 0.24s ease;
}

.btn--primary {
  background: linear-gradient(135deg, #004a98 0%, #00346a 100%);
  color: #ffffff;
}
.btn--primary:hover {
  background: linear-gradient(135deg, #00346a 0%, color-mix(in srgb, #00346a 95%, black) 100%);
  transform: translateY(-1px);
}

.btn--secondary {
  background: transparent;
  color: #004a98;
  border: 1.5px solid color-mix(in srgb, #004a98 20%, transparent);
}
.btn--secondary:hover {
  background: color-mix(in srgb, #004a98 5%, transparent);
  border-color: color-mix(in srgb, #004a98 30%, transparent);
}

.btn--ghost {
  background: transparent;
  color: #101828;
}
.btn--ghost:hover {
  background: color-mix(in srgb, #101828 5%, transparent);
}

.bcfc-eyebrow, .bcfc-comp .eyebrow {
  --eyebrow-ink: var(--bcfc-ink-strong, var(--bcfc-blue));
  --eyebrow-rule: var(--bcfc-navy);
  --eyebrow-rule-size: 1.75rem;
  display: inline-flex;
  align-items: center;
  gap: var(--bcfc-space-3);
  margin-block: 0;
  color: var(--eyebrow-ink);
  font-size: var(--bcfc-fs-xs);
  font-weight: var(--bcfc-fw-extrabold);
  line-height: 1.5;
  letter-spacing: 0.24em;
  text-transform: uppercase;
}
.bcfc-eyebrow--center, .bcfc-comp .eyebrow--center {
  justify-content: center;
}
.bcfc-eyebrow--start {
  justify-content: flex-start;
}
.bcfc-eyebrow--light, .bcfc-comp .eyebrow--light {
  --eyebrow-ink: var(--bcfc-white);
  --eyebrow-rule: currentcolor;
}
.bcfc-eyebrow--dark, .bcfc-comp .eyebrow--dark {
  --eyebrow-ink: var(--bcfc-yellow);
  --eyebrow-rule: var(--bcfc-yellow);
}
.bcfc-eyebrow--islamic {
  --eyebrow-ink: var(--bcfc-green-dark);
  --eyebrow-rule: var(--bcfc-green-dark);
}
[data-bcfc-theme=dark] .bcfc-eyebrow--islamic {
  --eyebrow-ink: var(--bcfc-dark-ink-green);
  --eyebrow-rule: var(--bcfc-dark-ink-green);
}
.bcfc-eyebrow--label {
  letter-spacing: 0.08em;
  line-height: 1;
  margin-block-end: var(--bcfc-space-3);
}
.bcfc-eyebrow--pill {
  padding-block: var(--bcfc-space-1);
  padding-inline: var(--bcfc-space-3);
  border: 1px solid currentcolor;
  border-radius: var(--bcfc-radius-full);
}
.bcfc-eyebrow :is(.material-icons-outlined, .material-symbols-outlined, .svg-ic), .bcfc-comp .eyebrow :is(.material-icons-outlined, .material-symbols-outlined, .svg-ic) {
  font-size: 1.125rem;
}
[dir=rtl] .bcfc-eyebrow, [dir=rtl] .bcfc-comp .eyebrow, .bcfc-comp [dir=rtl] .eyebrow, .bcfc-eyebrow[dir=rtl], .bcfc-comp [dir=rtl].eyebrow {
  letter-spacing: normal;
}

[class*=eyebrow]::before {
  content: none !important;
  display: none !important;
}

.bcfc-comp .eyebrow:not(.eyebrow--light):not(.eyebrow--dark) {
  --eyebrow-ink: var(--bcfc-dark-ink-brand, var(--brand, var(--bcfc-blue)));
}

.bcfc-sec-head,
.bcfc-comp .sec-head {
  --sh-ink-title: var(--bcfc-ink-strong, var(--bcfc-navy));
  --sh-ink-lede: var(--bcfc-ink, var(--bcfc-gray-600));
  --sh-gap: var(--bcfc-space-8);
  --sh-lede-max: 52rem;
  --sh-rule: var(--bcfc-dark-ink-brand, var(--bcfc-navy));
  max-inline-size: 56rem;
  margin-block: 0 var(--sh-gap);
  margin-inline: auto;
  text-align: center;
}
@media (max-width: 47.9375rem) {
  .bcfc-sec-head,
  .bcfc-comp .sec-head {
    --sh-gap: var(--bcfc-space-6);
  }
}

.bcfc-sec-head__title,
.bcfc-comp .sec-head h2 {
  margin-block: 0.875rem 0.75rem;
  color: var(--sh-ink-title);
  font-family: var(--bcfc-ff-primary);
  font-size: clamp(1.625rem, 3.2vw, 2.375rem);
  font-weight: var(--bcfc-fw-extrabold);
  line-height: 1.15;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.bcfc-sec-head__lede,
.bcfc-comp .sec-head p {
  max-inline-size: var(--sh-lede-max);
  margin-block: 0;
  margin-inline: auto;
  color: var(--sh-ink-lede);
  font-size: 1rem;
  line-height: 1.7;
  text-align: inherit;
}

.bcfc-sec-head__rule {
  display: block;
  inline-size: 3.25rem;
  block-size: 0.1875rem;
  margin-block: 0 0.875rem;
  margin-inline: auto;
  border-radius: var(--bcfc-radius-full);
  background: var(--sh-rule);
}

.bcfc-sec-head__body {
  min-inline-size: 0;
}

.bcfc-sec-head:not(:has(.bcfc-sec-head__lede)) .bcfc-sec-head__title {
  margin-block-end: 0;
}

.bcfc-sec-head__rule + .bcfc-sec-head__title {
  margin-block-start: 0;
}

.bcfc-sec-head--start, .bcfc-sec-head--split,
.bcfc-comp .sec-head--start,
.bcfc-comp .sec-head--split {
  max-inline-size: none;
  margin-inline: 0;
  text-align: start;
}

.bcfc-sec-head--start .bcfc-sec-head__rule,
.bcfc-comp .sec-head--start .bcfc-sec-head__rule {
  margin-inline: 0;
}
.bcfc-sec-head--start .bcfc-sec-head__lede,
.bcfc-sec-head--start p,
.bcfc-comp .sec-head--start .bcfc-sec-head__lede,
.bcfc-comp .sec-head--start p {
  margin-inline: 0;
}
.bcfc-sec-head--start .bcfc-eyebrow,
.bcfc-comp .sec-head--start .bcfc-eyebrow {
  justify-content: flex-start;
}

.bcfc-sec-head--flush {
  --sh-gap: 0;
}

.bcfc-sec-head--split {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--bcfc-space-6);
}
.bcfc-sec-head--split .bcfc-sec-head__lede {
  flex: 1 1 17.5rem;
  max-inline-size: 34rem;
  margin-inline: 0;
}

.bcfc-sec-head--display {
  --sh-lede-max: 44rem;
}
.bcfc-sec-head--display .bcfc-sec-head__title {
  margin-block-start: 1rem;
  font-size: clamp(1.875rem, 4vw, 3.125rem);
  line-height: 1.05;
  letter-spacing: -0.02em;
}
.bcfc-sec-head--display .bcfc-sec-head__lede {
  font-weight: var(--bcfc-fw-light, 300);
}

.bcfc-sec-head--dark {
  --sh-ink-title: var(--bcfc-ink-strong, var(--bcfc-white));
  --sh-ink-lede: var(--bcfc-ink, var(--bcfc-white));
  --sh-rule: var(--bcfc-yellow);
}

html[data-islamic=true][data-bcfc-theme=dark] .bcfc-sec-head:not(.bcfc-sec-head--dark) {
  --sh-rule: var(--bcfc-dark-ink-green, var(--bcfc-navy));
}

[dir=rtl] .bcfc-sec-head__title,
[dir=rtl] .bcfc-comp .sec-head h2,
[dir=rtl] .bcfc-sec-head--display .bcfc-sec-head__title {
  letter-spacing: normal;
}

.bcfc-sec-head[dir=rtl] .bcfc-sec-head__title {
  letter-spacing: normal;
}

.bcfc-band {
  --bcfc-band-y: clamp(3.75rem, 7vw, 5.75rem);
  --bcfc-band-wrap: 75rem;
  --bcfc-band-gutter: var(--bcfc-space-6);
  position: relative;
  padding-block: var(--bcfc-band-y);
  scroll-margin-block-start: var(--bcfc-anchor-offset, 9.5rem);
}
.bcfc-band__wrap {
  inline-size: 100%;
  max-inline-size: var(--bcfc-band-wrap, 75rem);
  margin-inline: auto;
  padding-inline: var(--bcfc-band-gutter, var(--bcfc-space-6));
}
@media (width < 768px) {
  .bcfc-band__wrap {
    padding-inline: var(--bcfc-band-gutter, var(--bcfc-space-4));
  }
}
.bcfc-band--tint {
  background: var(--bcfc-gray-50);
}
.bcfc-band--raised {
  background: var(--bcfc-white);
}
.bcfc-band--dark {
  background: var(--bcfc-navy);
}
.bcfc-band--compact {
  --bcfc-band-y: clamp(2rem, 4vw, 3rem);
}
.bcfc-band--wide-y {
  --bcfc-band-y: clamp(5.5rem, 10vw, 8.75rem);
}
.bcfc-band--flush-top {
  padding-block-start: 0;
}
.bcfc-band--flush-bottom {
  padding-block-end: 0;
}
.bcfc-band--flush {
  padding-block: 0;
}
.bcfc-band--narrow {
  --bcfc-band-wrap: 70rem;
}
.bcfc-band--wide {
  --bcfc-band-wrap: 80rem;
}
.bcfc-band--form {
  --bcfc-band-wrap: 56.25rem;
}
@media (width < 768px) {
  .bcfc-band {
    --bcfc-band-gutter: var(--bcfc-space-4);
  }
}

.phone:has(.iti) .cc {
  display: none !important;
}

.iti .iti__selected-flag {
  border-radius: 11px 0 0 11px;
}




/* Placeholder for images while loading */

/* NO `fetchpriority` RULE HERE. It is an HTML attribute and has never been a CSS property, so
   `img[data-lcp="true"]{fetchpriority:high}` was silently dropped by every browser - and nothing
   in the solution sets data-lcp either, so the selector matched nothing regardless. LCP priority
   is set in the MARKUP, which Home.cshtml, Insurance.cshtml and LoyaltyOffers.cshtml already do
   with fetchpriority="high". Caught by stylelint's property-no-unknown. */

/* Responsive images - prevent CLS */
img:not([width]):not([height]) {
    aspect-ratio: attr(width) / attr(height);
}

/* Swiper overflow fix - allows card shadows to escape vertically */
.swiper-container {
    overflow-x: clip !important;
    overflow-y: visible !important;
    padding-bottom: 30px;
    margin-bottom: -30px;
}

/* Pages without a breadcrumb banner need top padding to clear the fixed header.

   :not(:has(.bcfc-hero)) ADDED 2026-08-24. .bcfc-hero took its header clearance as
   `margin-block-start` on 2026-08-23 (see bcfc-page-hero.css — "Template must start after the
   nav bar"), which is OUTSIDE the band, so on any page this rule also matched the two stacked:
   118px of body padding plus the hero's own 104px put the band at y=222 with a 118px strip of
   dead page background between the nav and the hero. Measured at 1440px on 2026-08-24, three
   pages hit it — /en/support/complaints-form/, /en/support/customer-complaints-and-suggestions/
   and /en/support/suggestions-form/ — because they carry none of the four classes above; the
   other 255 shared-hero pages were already flush at the header's bottom edge. Excluding hero
   pages here leaves the base `body { padding-top }` in bcfc-inline-partials.css, which
   bcfc-page-hero.css zeroes for the same reason.

   :not(:has(.cmp-hero)) ADDED 2026-10-18 (UW-288). The campaign hero (cmp-hero, bcfcHeroCampaignBlock)
   is not .bcfc-hero, so /en/programs-access/imtiazxavios-template matched this rule and sat 118px
   below the top of the page with dead background above it. cmp-hero clears the header with its own
   top padding, so it must not also get body padding.

   The 118px is a stale literal — the header has been 104px since --bcfc-header-height was
   raised — and is deliberately left alone: it now only reaches pages with no hero at all
   (chiefly the error page), and correcting it would shift those 14px for no reported reason. */
body:not(.bcfc-page-has-breadcrumb):not(.bcfc-hero-page):not(.sahel-app-page):not(.sahel-page):not(:has(.bcfc-hero)):not(:has(.cmp-hero)) {
    padding-top: 118px;
}

/* Material Icons (legacy family, still used across ~60 pages). Google's hosted stylesheet
   for this family (fonts.googleapis.com/icon?family=Material+Icons+Outlined) only ships the
   deprecated -webkit-font-feature-settings, which current Chrome no longer honors - only the
   unprefixed property actually turns on the 'liga' substitution that swaps ligature text like
   "support_agent" for the icon glyph. Without it the icon name renders as literal text. This
   override supplies the missing property; it must stay in a stylesheet that loads after the
   Google one so it wins on source order (same specificity either way). */
.material-icons-outlined {
    font-family: 'Material Icons Outlined';
    font-weight: normal;
    font-style: normal;
    font-size: 1.5rem;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    font-feature-settings: 'liga';
    -webkit-font-feature-settings: 'liga';
    -webkit-font-smoothing: antialiased;
}

/* Material Symbols font */
.material-symbols-outlined {
    font-family: 'Material Symbols Outlined';
    font-weight: normal;
    font-style: normal;
    font-size: 1.5rem;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    font-feature-settings: 'liga';
    -webkit-font-feature-settings: 'liga';
    -webkit-font-smoothing: antialiased;
}

/* ============================================
   Phosphor compatibility shim
   ============================================
   ~24 views were authored against Phosphor Icons (<i class="ph ph-car">), but the
   Phosphor font/stylesheet is NOT loaded anywhere in this project and never has been
   — so every one of those icons rendered as blank space (the whole insurance vertical
   included). Rather than add a third icon font, or rewrite the markup in 24 files,
   we remap the .ph-* classes onto the Material Symbols glyphs already loaded above,
   via a ::before ligature.

   Notes for future edits:
   - Sizing is untouched. No page CSS targets `.ph` directly; icons are sized by parent
     rules like `.bcfc-insurance__hero-mark i { font-size: ... }`, which still apply.
   - No RTL logic here on purpose. Pages that need directional flipping already do it
     themselves (e.g. Insurance.css `[dir="rtl"] .bcfc-insurance-card a i { rotate 180deg }`).
     Swapping content per-direction here as well would cancel that out.
   - The `.ph::before` fallback must stay FIRST: the specific rules below have equal
     specificity and win only on source order.
   - Prefer Material Symbols directly in new markup; this shim is for the legacy views.
*/
.ph {
    font-family: 'Material Symbols Outlined';
    font-weight: normal;
    font-style: normal;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    font-feature-settings: 'liga';
    -webkit-font-feature-settings: 'liga';
    -webkit-font-smoothing: antialiased;
}

.ph::before { content: 'circle'; }

.ph-airplane-tilt::before        { content: 'flight'; }
.ph-apple-logo::before           { content: 'phone_iphone'; }
.ph-arrow-left::before           { content: 'arrow_back'; }
.ph-arrow-right::before          { content: 'arrow_forward'; }
.ph-briefcase::before            { content: 'work'; }
.ph-calendar-blank::before       { content: 'calendar_today'; }
.ph-calendar-check::before       { content: 'event_available'; }
.ph-car::before                  { content: 'directions_car'; }
.ph-caret-double-left::before    { content: 'keyboard_double_arrow_left'; }
.ph-caret-double-right::before   { content: 'keyboard_double_arrow_right'; }
.ph-caret-left::before           { content: 'chevron_left'; }
.ph-caret-right::before          { content: 'chevron_right'; }
.ph-clock::before                { content: 'schedule'; }
.ph-download-simple::before      { content: 'download'; }
.ph-envelope-simple::before      { content: 'mail'; }
.ph-eye::before                  { content: 'visibility'; }
.ph-file-text::before            { content: 'description'; }
.ph-first-aid-kit::before        { content: 'medical_services'; }
.ph-globe::before                { content: 'language'; }
.ph-google-play-logo::before     { content: 'shop'; }
.ph-house-line::before           { content: 'home'; }
.ph-lightbulb::before            { content: 'lightbulb'; }
.ph-magnifying-glass::before     { content: 'search'; }
.ph-map-pin::before              { content: 'location_on'; }
.ph-phone::before                { content: 'call'; }
.ph-rocket-launch::before        { content: 'rocket_launch'; }
.ph-scales::before               { content: 'balance'; }
.ph-shield::before               { content: 'shield'; }
.ph-shield-check::before         { content: 'verified_user'; }
.ph-users-three::before          { content: 'groups'; }
.ph-x::before                    { content: 'close'; }

.visually-hidden,
.visually-hidden-focusable:not(:focus):not(:focus-within) {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}

/* .bcfc-skip-link lives in bcfc-accessibility.css (critical bundle) — do not redefine here */

/* ============================================
   Touch Action Manipulation - Remove 300ms Delay
   Global styles for touch devices
   ============================================ */
button,
a,
[role="button"],
input[type="button"],
input[type="submit"],
input[type="reset"],
.clickable {
    touch-action: manipulation;
    -ms-touch-action: manipulation;
}

/* Allow pinch-zoom but keep fast taps */
a, button, input, textarea, select {
    touch-action: manipulation;
    -ms-touch-action: manipulation;
}

/* ==============================================================================================
   JUSTIFIED BODY COPY — requested site-wide.

   Deliberately at (0,0,1), the lowest weight a rule can carry while still targeting <p>. Every
   component sheet's own paragraph rule therefore still wins, so nothing that already chose its
   alignment is disturbed.

   THE RE-INHERIT RULE BELOW IS NOT OPTIONAL. A DIRECT declaration always beats an INHERITED value
   regardless of specificity, so `p { text-align: justify }` silently overrides centring that comes
   from an ancestor — and this codebase centres copy that way constantly (`.sec-head.center`,
   Tailwind's `.text-center` on a wrapper, the `--center` block modifiers). Without the second rule
   every one of those blocks would quietly go ragged-right. `text-align: inherit` hands the decision
   back to the ancestor rather than guessing a value, so a centred wrapper stays centred and a
   right-aligned one stays right-aligned.

   Scoped by the substring "center" on purpose: it covers .center, .text-center, .centered and the
   *--center modifiers in one rule, which is every centring hook in use here. The [style] arms catch
   wrappers centred inline by rawHtml content, which no class selector can reach.
   ============================================================================================== */
p {
    text-align: justify;
}

/* ...but NOT at phone/tablet width (UX review, 2026-10-14). A 30-40ch measure leaves too few
   gaps per line to absorb the slack, so justify opens rivers; next to an unbreakable e-mail or
   URL a line held three words spread edge to edge (/ar/support/customer-complaints-and-suggestions/
   step 1). `start` is right in /ar and left in /en. Same (0,0,1) weight, so every rule below that
   centres or re-inherits still wins exactly as it does on desktop. */
@media (max-width: 768px) {
    p {
        text-align: start;
    }
}

/* ARABIC NEVER JUSTIFIES (UW-304, 2026-10-19). Arabic justifies by stretching the gaps between words
   (kashida elongation is not applied by browsers), so any line that does not fill the measure opens
   uneven holes, which reads as broken wording. English keeps the site-wide justify above. `inherit`
   hands the decision to the ancestor like every rule below (centred stays centred, otherwise it
   resolves to `start`, which is the right edge in RTL). `:where()` keeps this at (0,0,1), placed
   right after the `p` rule so it wins on order, and a sheet that chose its own alignment still wins. */
:where(:lang(ar), [dir="rtl"]) p {
    text-align: inherit;
}

/* ARABIC: NO JUSTIFY ANYWHERE, NO LETTER-SPACING (UW-304, 2026-10-21, from an iPhone screenshot).
   1) A rich-text body pasted with an inline style="text-align: justify" beats every stylesheet, so
      the attribute is overridden here (e.g. /ar/news/new-coo/). Centred blocks use "center", not
      "justify", so they are untouched.
   2) Arabic is a cursive script: letters JOIN, and any non-zero letter-spacing pulls the joins
      apart. Chrome ignores letter-spacing on Arabic as the spec says; iOS Safari does NOT, so
      tracked eyebrows and negative-tracked headings (board roles and names, 1.68px / -0.16px)
      rendered as separate, cut letters on iPhone only. Arabic text never takes tracking. */
:lang(ar) [style*="text-align: justify"],
:lang(ar) [style*="text-align:justify"],
[dir="rtl"] [style*="text-align: justify"],
[dir="rtl"] [style*="text-align:justify"] {
    text-align: start !important;
}

/* The Tailwind `.text-justify` utility (tailwind.generated.css) can sit on any wrapper in rawHtml
   content. Same reasoning as the inline style above: Arabic gets `start`, and the paragraphs inside
   inherit it through the `p` rule above. A news article body keeps the editor's choice. */
:lang(ar) .text-justify:not(.bcfc-news-article *),
[dir="rtl"] .text-justify:not(.bcfc-news-article *) {
    text-align: start;
}

/* ...EXCEPT a news article body (UW-363, 2026-10-21, marketing). There the editor chose justify on
   purpose, paragraph by paragraph, so that choice wins again. Only the inline-styled paragraphs
   change; every other Arabic page and every unstyled paragraph keeps the rule above. The class
   is the article body of MediaCentreDetail.cshtml (and its quote block); the extra class makes
   this outrank the rule above whatever the order. */
:lang(ar) .bcfc-news-article [style*="text-align: justify"],
:lang(ar) .bcfc-news-article [style*="text-align:justify"],
[dir="rtl"] .bcfc-news-article [style*="text-align: justify"],
[dir="rtl"] .bcfc-news-article [style*="text-align:justify"] {
    text-align: justify !important;
}

html:lang(ar) body *,
html:lang(ar) body *::before,
html:lang(ar) body *::after {
    letter-spacing: normal !important;
}

:is([class*="center"], [class*="Center"], [style*="text-align:center"], [style*="text-align: center"]) p {
    text-align: inherit;
}

/* ---------- CARDS NEVER JUSTIFY — GLOBAL, requested 2026-08-31 ----------
   Justification needs a long measure to look right. A card is the opposite: a narrow column of
   16-30ch, so `text-align: justify` stretches the word gaps into visible rivers and every card in a
   row ends up with a different apparent leading depending on how many words landed on its last line.
   That is what made the three Sustainability report cards look mismatched — the 2025 and 2024
   subtitles wrapped to two stretched lines while the 2023 one sat on a single un-stretched line, and
   the report read as "the line spacing is different on 2023" when nothing about line-height differed.

   Keyed on the "card" substring for the same reason the centring rule above is keyed on "center":
   there are ~1000 distinct card class names in this codebase across BEM, legacy and per-design
   sheets (.bcfc-ir-su__card, .info-card, .sig__card, .rep-card, .cardx, .redeem__card, .card ...),
   and no single class name reaches them.

   `:where()` is load-bearing. It contributes NOTHING to specificity, so this whole selector weighs
   (0,0,1) — exactly the weight of the `p` rule above, and it only wins because it comes after. So:
     - the centring rule above (0,1,0) still beats it, and a card inside a centred wrapper stays
       centred rather than being yanked to the start edge;
     - any component sheet that has deliberately CHOSEN an alignment for its own card copy still
       wins, so this cannot silently overrule a design decision. Nothing currently does — every
       explicit `text-align: justify` in the codebase sits on a non-card leaf (.calc__note,
       .bcfc-home-sahel-banner__description, .svc-text p) — but the guarantee is what makes a
       site-wide rule safe to add.

   `inherit`, not `start`: it hands the decision to the ancestor exactly as the centring rule does.
   No container anywhere declares justify, so in practice this resolves to `start` — which is
   direction-agnostic and therefore correct on /ar without an RTL arm. */
:where([class*="card"], [class*="Card"]) p {
    text-align: inherit;
}

/* ---------- SECTION HEADS NEVER JUSTIFY — GLOBAL, requested 2026-09-03 ----------
   Bahaa: "the paragraphs under the heading are still on the left, they should be in the middle."
   The lede under a section heading was rendering justified — and therefore reading as flush-left —
   on /en/finance/, /en/services/ and every other comp page, even though `.bcfc-comp .sec-head`
   has said `text-align: center` since bcfc-comp.css was written.

   Nothing was overriding that centring: a DIRECT declaration beats an INHERITED one no matter the
   specificity, so `p { text-align: justify }` above (0,0,1) silently won over a `text-align` the
   <p> only INHERITED from its .sec-head ancestor. The existing escape hatch above keys on the
   "center" substring, and not one of the ~55 section-head class names in this codebase contains it.

   Both spellings are needed: "sec-head" is NOT a substring of "section-head". The other three arms
   cover the remaining spellings in use (.services-section-head__intro, .bcfc-media-centre-page__
   section-header, .si-sec-intro, .personal-loan-section-title).

   `inherit`, not `center`: a section head that deliberately aligns to the start edge —
   `.sec-head--start`, `.loans-sec-head`, `.nmc-sec-head--split` — keeps its own alignment and its
   lede follows the heading it belongs to. That is the whole point; hardcoding `center` here would
   centre copy under a left-aligned heading, which is the same defect mirrored.

   `:where()` so this weighs (0,0,1) like the two rules above: any component sheet that has CHOSEN
   an alignment for its own lede still wins, and this cannot silently overrule a design decision. */
:where([class*="sec-head"], [class*="section-head"], [class*="section-header"],
       [class*="sec-intro"], [class*="section-title"]) p {
    text-align: inherit;
}

/* ---------- HEADINGS, HEROES AND STATEMENTS NEVER JUSTIFY — GLOBAL, 2026-10-07 ----------
   Marketing handoff: short blocks (the Vision statement, hero leads, report theme lines) were
   stretched edge to edge with huge gaps between three or four words. Justification needs a long
   measure; a heading, a hero lead or a one-line statement never has one.

   Same shape as the card and section-head rules above: `:where()` keeps it at (0,0,1) so any sheet
   that deliberately chose an alignment still wins, and `inherit` hands the decision to the ancestor
   (centred stays centred; otherwise it resolves to `start`, which mirrors in /ar with no RTL arm).
   A <p> inside a heading is real here — the word-block helper emits one inside the Vision <h2>. */
:where(h1, h2, h3, h4, h5, h6,
       [class*="hero"], [class*="lead"], [class*="statement"],
       [class*="subtitle"], [class*="tagline"], [class*="theme"],
       [class*="eyebrow"], [class*="kicker"]) p,
:where(p[class*="hero"], p[class*="lead"], p[class*="statement"],
       p[class*="subtitle"], p[class*="tagline"], p[class*="theme"],
       p[class*="eyebrow"], p[class*="kicker"]) {
    text-align: inherit;
}

/* EYEBROWS NEVER JUSTIFY — site-wide, 2026-10-11. An eyebrow is a short uppercase label that wraps
   to two or three words per line (board cards: "CHIEF / FINANCE OFFICER"); justifying it spreads
   the words to both edges. Covers a non-<p> eyebrow (span/div/small) too, which `p` above never
   reached. `inherit` for the same reason as above: centred stays centred, otherwise `start`. */
:where([class*="eyebrow"], [class*="kicker"]):not(p, button) {
    text-align: inherit;
}

/* SHORT LABELS NEVER JUSTIFY — site-wide, 2026-10-11. Buttons, chips, pills, tags, badges, captions,
   breadcrumbs, field labels and hint / helper text are one or two lines in a narrow box, which is
   exactly where justification stretches the word gaps. Same shape as the rules above: `:where()`
   keeps (0,0,1) so a sheet that chose an alignment still wins, `inherit` keeps centred text centred
   and resolves to `start` otherwise (mirrors in /ar). "tag" is matched as a whole class or a BEM
   part only, because the bare substring also sits inside "stage" and "advantage". */
:where(button, label, figcaption, caption, summary,
       [class*="btn"], [class*="button"], [class*="chip"], [class*="pill"], [class*="badge"],
       [class~="tag"], [class*="-tag"], [class*="__tag"], [class*="caption"], [class*="breadcrumb"],
       [class*="hint"], [class*="helper"], [class*="field-label"], [class*="form-label"]) p,
:where(p[class*="btn"], p[class*="button"], p[class*="chip"], p[class*="pill"], p[class*="badge"],
       p[class~="tag"], p[class*="-tag"], p[class*="__tag"], p[class*="caption"],
       p[class*="breadcrumb"], p[class*="hint"], p[class*="helper"],
       p[class*="field-label"], p[class*="form-label"]) {
    text-align: inherit;
}
:where(h1, h2, h3, h4, h5, h6) p {
    text-wrap: balance;
}


/* ---------- THE FIRST CARD UNDER A HERO NEVER TOUCHES IT — GLOBAL, 2026-10-11 ----------
   Owner: "many things they always touch the hero which looks bad". Measured on 90 pages of beta: a
   floating card (a PDF/document card, an archive feature card, a featured panel) that is the FIRST
   thing after the hero sat 0-5px under it, because the only thing that ever gave a page that gap
   was a notice / intro / lead above the card carrying `margin: 50px 0 …` — and when none of those
   renders (the hero printed the intro itself) nothing did.

   Deliberately narrow, and the reason matters: a blanket `.bcfc-hero + * { margin-top }` would put
   a white strip above every FULL-BLEED band that is meant to start where the hero ends (the navy
   stats band on /about-bcfc/ceo-message/, the icon-card band on /about-bcfc/strategic-review/ and a
   dozen more). So this only matches a first child whose class says it IS a card, feature or panel,
   either directly after the hero or as the first child of the wrapper that directly follows it. A
   full-width section never gets the gap: anything whose class says `band` is excluded, and a wrapper
   that is itself a card/feature/panel is skipped so its inner card is not pushed (corporate-governance
   pulls its featured section up by -32px on purpose).

   `:where()` keeps it at (0,0,1): any sheet that sets its own margin-top on that card — including a
   negative one, for a card that deliberately overlaps the hero — still wins. The gap is a token so
   one page can retune it. */
:where(.bcfc-hero + :not([class*="card"], [class*="feature"], [class*="panel"], [class*="band"]) > :first-child:is([class*="card"], [class*="feature"], [class*="panel"]):not([class*="band"], [class*="breadcrumb"])),
:where(.bcfc-hero + :is([class*="card"], [class*="feature"], [class*="panel"]):not([class*="band"])) {
    margin-top: var(--bcfc-hero-gap, 50px);
}

/*
====================================
Stitch Design System - Professional Banking Core
====================================
Version: 1.0.0
Description: Design tokens and base styles for Professional Banking Core design language

This file provides:
- CSS custom properties (design tokens) based on Professional Banking Core
- Base typography styles
- Component-level variables
====================================*/

/* ============================================
   1. DESIGN TOKENS - COLORS
   Professional Banking Core color palette
   ============================================ */

:root {
  /* Primary Colors - Corporate Blue */
  --sds-primary: #003b72;
  --sds-on-primary: #ffffff;
  --sds-primary-container: #00529b;
  --sds-on-primary-container: #a5c7ff;
  --sds-inverse-primary: #a6c8ff;

  /* Secondary Colors - Accent Red */
  --sds-secondary: var(--bcfc-navy, #071b33);
  --sds-on-secondary: #ffffff;
  --sds-secondary-container: var(--bcfc-navy, #071b33);
  --sds-on-secondary-container: #fffbff;

  /* Tertiary Colors */
  --sds-tertiary: #383c3e;
  --sds-on-tertiary: #ffffff;
  --sds-tertiary-container: #4f5355;
  --sds-on-tertiary-container: #c3c6c8;

  /* Surface Colors */
  --sds-surface: #fbf9f8;
  --sds-surface-dim: #dbd9d9;
  --sds-surface-bright: #fbf9f8;
  --sds-surface-container-lowest: #ffffff;
  --sds-surface-container-low: #f5f3f3;
  --sds-surface-container: #efeded;
  --sds-surface-container-high: #eae8e7;
  --sds-surface-container-highest: #e4e2e2;
  --sds-surface-variant: #e4e2e2;
  --sds-surface-tint: #1d5fa8;

  /* On Colors (text/icons on surfaces) */
  --sds-on-surface: #1b1c1c;
  --sds-on-surface-variant: #424751;
  --sds-inverse-surface: #303030;
  --sds-inverse-on-surface: #f2f0f0;
  --sds-on-background: #1b1c1c;

  /* Outline Colors */
  --sds-outline: #727782;
  --sds-outline-variant: #c2c6d3;

  /* Error Colors */
  --sds-error: var(--bcfc-danger, #d81222);
  --sds-on-error: #ffffff;
  --sds-error-container: var(--bcfc-danger-tint, rgba(216, 18, 34, 0.08));
  --sds-on-error-container: var(--bcfc-danger, #d81222);

  /* Fixed Colors */
  --sds-primary-fixed: #d5e3ff;
  --sds-primary-fixed-dim: #a6c8ff;
  --sds-on-primary-fixed: #001c3b;
  --sds-on-primary-fixed-variant: #004787;
  --sds-secondary-fixed: var(--bcfc-navy-tint-strong, rgba(7, 27, 51, 0.10));
  --sds-secondary-fixed-dim: rgba(7, 27, 51, 0.18);
  --sds-on-secondary-fixed: var(--bcfc-navy, #071b33);
  --sds-on-secondary-fixed-variant: var(--bcfc-navy, #071b33);
  --sds-tertiary-fixed: #e0e3e5;
  --sds-tertiary-fixed-dim: #c4c7c9;
  --sds-on-tertiary-fixed: #181c1e;
  --sds-on-tertiary-fixed-variant: #434749;

  /* Background */
  --sds-background: #fbf9f8;
  --sds-on-background: #1b1c1c;
}

/* ============================================
   2. DESIGN TOKENS - TYPOGRAPHY
   ============================================ */

:root {
  /* Font Family */
  --sds-font: 'Almarai', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

  /* Font Sizes */
  --sds-h1-size: 2.5rem;      /* 40px */
  --sds-h2-size: 2rem;        /* 32px */
  --sds-h3-size: 1.5rem;      /* 24px */
  --sds-nav-item-size: 1.375rem; /* 22px */
  --sds-body-lg-size: 1.125rem; /* 18px */
  --sds-body-md-size: 1rem;     /* 16px */
  --sds-body-sm-size: 0.875rem; /* 14px */
  --sds-label-size: 0.75rem;     /* 12px */

  /* Font Weights */
  --sds-font-weight-regular: 400;
  --sds-font-weight-medium: 500;
  --sds-font-weight-semibold: 600;
  --sds-font-weight-bold: 700;

  /* Line Heights */
  --sds-h1-line-height: 1.2;
  --sds-h2-line-height: 1.3;
  --sds-h3-line-height: 1.4;
  --sds-nav-item-line-height: 1.5;
  --sds-body-lg-line-height: 1.6;
  --sds-body-md-line-height: 1.6;
  --sds-body-sm-line-height: 1.5;
  --sds-label-line-height: 1;

  /* Letter Spacing */
  --sds-link-bold-letter-spacing: 0.02em;
  --sds-label-letter-spacing: 0.05em;
}

/* ============================================
   3. DESIGN TOKENS - SPACING
   ============================================ */

:root {
  --sds-spacing-base: 0.5rem;   /* 8px */
  --sds-spacing-xs: 0.25rem;     /* 4px */
  --sds-spacing-sm: 0.75rem;     /* 12px */
  --sds-spacing-md: 1.5rem;      /* 24px */
  --sds-spacing-lg: 2.5rem;      /* 40px */
  --sds-spacing-xl: 4rem;        /* 64px */
  --sds-spacing-gutter: 1.5rem;  /* 24px */
  --sds-container-max: 80rem;     /* 1280px */
}

/* ============================================
   4. DESIGN TOKENS - BORDER RADIUS
   ============================================ */

:root {
  --sds-radius-sm: 0.25rem;     /* 4px */
  --sds-radius: 0.5rem;         /* 8px */
  --sds-radius-md: 0.75rem;      /* 12px */
  --sds-radius-lg: 1rem;         /* 16px */
  --sds-radius-xl: 1.5rem;       /* 24px */
  --sds-radius-full: 9999px;
}

/* ============================================
   5. DESIGN TOKENS - SHADOWS
   ============================================ */

:root {
  --sds-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
  --sds-shadow: 0px 10px 30px rgba(0, 0, 0, 0.1);
  --sds-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
}

/* ============================================
   6. BASE TYPOGRAPHY STYLES
   ============================================ */

.sds-h1,
.sds-h2,
.sds-h3,
.sds-body-lg,
.sds-body-md,
.sds-body-sm,
.sds-label,
.sds-link-bold {
  font-family: var(--sds-font);
}

.sds-h1 {
  font-size: var(--sds-h1-size);
  font-weight: 700;
  line-height: var(--sds-h1-line-height);
}

.sds-h2 {
  font-size: var(--sds-h2-size);
  font-weight: 600;
  line-height: var(--sds-h2-line-height);
}

.sds-h3 {
  font-size: var(--sds-h3-size);
  font-weight: 600;
  line-height: var(--sds-h3-line-height);
}

.sds-body-lg {
  font-size: var(--sds-body-lg-size);
  font-weight: var(--sds-font-weight-regular);
  line-height: var(--sds-body-lg-line-height);
}

.sds-body-md {
  font-size: var(--sds-body-md-size);
  font-weight: var(--sds-font-weight-regular);
  line-height: var(--sds-body-md-line-height);
}

.sds-body-sm {
  font-size: var(--sds-body-sm-size);
  font-weight: var(--sds-font-weight-regular);
  line-height: var(--sds-body-sm-line-height);
}

.sds-label {
  font-size: var(--sds-label-size);
  font-weight: 600;
  line-height: var(--sds-label-line-height);
  letter-spacing: var(--sds-label-letter-spacing);
  text-transform: uppercase;
}

.sds-link-bold {
  font-size: var(--sds-body-md-size);
  font-weight: 700;
  line-height: var(--sds-body-sm-line-height);
  letter-spacing: var(--sds-link-bold-letter-spacing);
}

/* ============================================
   7. COLOR UTILITY CLASSES
   ============================================ */

/* Primary */
.sds-text-primary { color: var(--bcfc-ink, var(--sds-primary)); }
.sds-text-on-primary { color: var(--sds-on-primary); }
.sds-text-primary-container { color: var(--bcfc-ink, var(--sds-primary-container)); }
.sds-text-on-primary-container { color: var(--sds-on-primary-container); }

/* Secondary */
.sds-text-secondary { color: var(--sds-secondary); }
.sds-text-on-secondary { color: var(--sds-on-secondary); }

/* Surface */
.sds-text-on-surface { color: var(--bcfc-ink, var(--sds-on-surface)); }
.sds-text-on-surface-variant { color: var(--bcfc-ink, var(--sds-on-surface-variant)); }

/* Background */
.sds-bg-surface { background-color: var(--sds-surface); }
.sds-bg-surface-container { background-color: var(--sds-surface-container); }
.sds-bg-surface-container-lowest { background-color: var(--sds-surface-container-lowest); }
.sds-bg-surface-container-low { background-color: var(--sds-surface-container-low); }
.sds-bg-primary { background-color: var(--sds-primary); }
.sds-bg-primary-container { background-color: var(--sds-primary-container); }

/* ============================================
   8. LAYOUT UTILITIES
   ============================================ */

.sds-container {
  max-width: var(--sds-container-max);
  margin-inline: auto;
  padding-inline: var(--sds-spacing-md);
}

:root {
  --figma-blue: #003b72;
  --figma-blue-dark: #00346a;
  --figma-green: #113e35;
  --figma-green-soft: #65c3a0;
  --figma-text: #3e3e3e;
  --figma-text-muted: #787878;
  --figma-surface: #f7f7f8;
  --figma-surface-alt: #f4f4f4;
  --figma-shadow: 0 24px 60px rgba(0, 0, 0, 0.12);
  --figma-radius-card: 20px;
  --figma-radius-pill: 999px;
}

body.bcfc-figma-theme {
  font-family: "Almarai", Arial, sans-serif;
  color: var(--bcfc-ink, var(--figma-text));
  background: var(--bcfc-color-white);
}

body.bcfc-figma-theme h1,
body.bcfc-figma-theme .h1,
body.bcfc-figma-theme h2,
body.bcfc-figma-theme .h2,
body.bcfc-figma-theme h3,
body.bcfc-figma-theme .h3,
body.bcfc-figma-theme h4,
body.bcfc-figma-theme .h4 {
  font-family: "Almarai", Arial, sans-serif;
}

body.bcfc-figma-theme p,
body.bcfc-figma-theme li,
body.bcfc-figma-theme a,
body.bcfc-figma-theme span {
  font-family: "Almarai", Arial, sans-serif;
}

body.bcfc-figma-theme .btn,
body.bcfc-figma-theme button {
  font-family: "Almarai", Arial, sans-serif;
}

body.bcfc-figma-theme .bcfc-nav {
  position: sticky;
  top: 0;
  z-index: 1000;
  backdrop-filter: blur(12px);
  background: rgba(255, 255, 255, 0.95);
  border-bottom: 1px solid rgba(0, 59, 114, 0.08);
  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.04);
}

body.bcfc-figma-theme .bcfc-nav .container {
  gap: 1.5rem;
  min-height: 80px;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}

body.bcfc-figma-theme .bcfc-nav-brand {
  display: flex;
  align-items: center;
  gap: 1rem;
}

body.bcfc-figma-theme .bcfc-nav-logo {
  display: flex;
  flex-direction: column;
  text-decoration: none;
}

body.bcfc-figma-theme .bcfc-nav-logo-mark {
  color: var(--bcfc-ink-link, var(--figma-blue));
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.6rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.08em;
}

body.bcfc-figma-theme .bcfc-nav-logo-text {
  color: var(--bcfc-ink-link, var(--figma-text-muted));
  font-size: 0.8625rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

body.bcfc-figma-theme .bcfc-nav-main {
  display: flex;
  flex: 1 1 auto;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
}

body.bcfc-figma-theme .bcfc-nav .language-switcher {
  min-width: max-content;
  font-weight: 700;
  letter-spacing: 0.04em;
}

body.bcfc-figma-theme .bcfc-nav .lang-link {
  color: var(--bcfc-ink-link, var(--figma-text-muted));
}

body.bcfc-figma-theme .bcfc-nav .lang-link.active,
body.bcfc-figma-theme .bcfc-nav .lang-link:hover {
  color: var(--bcfc-ink-link-hover, var(--figma-blue));
}

body.bcfc-figma-theme .bcfc-nav .nav-list {
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.25rem;
}

body.bcfc-figma-theme .bcfc-nav .nav-link {
  min-height: 42px;
  padding: 0.75rem 1rem;
  color: var(--bcfc-ink-link, var(--figma-blue));
  border-radius: 12px;
  font-weight: 700;
}

body.bcfc-figma-theme .bcfc-nav .nav-link:hover,
body.bcfc-figma-theme .bcfc-nav .nav-item.active > .nav-link {
  color: var(--bcfc-color-white);
  background: var(--figma-blue);
}

body.bcfc-figma-theme .bcfc-nav .dropdown-menu {
  margin-top: 0.75rem;
  border: 0;
  border-radius: 18px;
  box-shadow: var(--figma-shadow);
  overflow: hidden;
}

body.bcfc-figma-theme .bcfc-nav .dropdown-link {
  font-weight: 700;
}

body.bcfc-figma-theme .bcfc-nav-actions {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

body.bcfc-figma-theme .bcfc-nav-pill {
  display: flex;
  flex-direction: column;
  min-width: 150px;
  padding: 0.7rem 1rem;
  border: 1px solid rgba(0, 59, 114, 0.15);
  border-radius: 14px;
  background: rgba(0, 59, 114, 0.04);
  text-decoration: none;
}

body.bcfc-figma-theme .bcfc-nav-pill-label {
  color: var(--bcfc-ink-link, var(--figma-text-muted));
  font-size: 0.7825rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

body.bcfc-figma-theme .bcfc-nav-pill-value {
  color: var(--bcfc-ink-link, var(--figma-blue));
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1rem;
  font-weight: 700;
}

body.bcfc-figma-theme .bcfc-footer {
  position: relative;
  padding: 4.5rem 0 1.5rem;
  background:
    radial-gradient(circle at top right, rgba(101, 195, 160, 0.2), transparent 30%),
    linear-gradient(180deg, var(--figma-green) 0%, #0c2d27 100%);
}

body.bcfc-figma-theme .bcfc-footer .footer-top {
  gap: 2rem;
}

body.bcfc-figma-theme .bcfc-footer .footer-contact-column {
  min-width: 0;
}

body.bcfc-figma-theme .bcfc-footer .logo-text {
  font-family: "Almarai", Arial, sans-serif;
  font-size: 2rem;
  letter-spacing: 0.06em;
}

body.bcfc-figma-theme .bcfc-footer .logo-tagline,
body.bcfc-figma-theme .bcfc-footer .footer-tagline,
body.bcfc-figma-theme .bcfc-footer .footer-links a,
body.bcfc-figma-theme .bcfc-footer .footer-contact li,
body.bcfc-figma-theme .bcfc-footer .footer-bottom-left p,
body.bcfc-figma-theme .bcfc-footer .legal-links a {
  color: rgba(255, 255, 255, 0.78);
}

body.bcfc-figma-theme .bcfc-footer .footer-title {
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.1rem;
}

body.bcfc-figma-theme .bcfc-footer .footer-links a:hover,
body.bcfc-figma-theme .bcfc-footer .legal-links a:hover {
  color: var(--bcfc-color-white);
}

body.bcfc-figma-theme .bcfc-footer .footer-contact {
  margin: 0;
  padding: 0;
  list-style: none;
}

body.bcfc-figma-theme .bcfc-footer .footer-contact li {
  display: grid;
  grid-template-columns: 72px 1fr;
  gap: 0.75rem;
  margin-bottom: 0.85rem;
  color: rgba(255, 255, 255, 0.82);
}

body.bcfc-figma-theme .bcfc-footer .footer-contact-label {
  color: rgba(255, 255, 255, 0.56);
  font-size: 0.8425rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

body.bcfc-figma-theme .bcfc-footer .footer-contact a,
body.bcfc-figma-theme .bcfc-footer .footer-contact span:last-child {
  color: rgba(255, 255, 255, 0.88);
  text-decoration: none;
}

body.bcfc-figma-theme .bcfc-footer .footer-bottom-right {
  display: flex;
  align-items: center;
  gap: 1.5rem;
}

body.bcfc-figma-theme .bcfc-footer .footer-social-links {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

body.bcfc-figma-theme .bcfc-footer .footer-social-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  color: var(--bcfc-color-white);
  font-family: "Almarai", Arial, sans-serif;
  font-size: 0.9625rem;
  font-weight: 700;
  text-decoration: none;
}

body.bcfc-figma-theme .bcfc-footer .footer-social-link:hover {
  color: var(--bcfc-color-white);
  background: rgba(255, 255, 255, 0.18);
}

body.bcfc-figma-theme .bcfc-content-section,
body.bcfc-figma-theme .bcfc-case-study-section {
  padding-top: var(--bcfc-section-padding-top, clamp(3.5rem, 6vw, 6rem));
  padding-bottom: var(--bcfc-section-padding-bottom, clamp(3.5rem, 6vw, 6rem));
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

body.bcfc-figma-theme .bcfc-content-section {
  color: var(--bcfc-ink, var(--bcfc-section-text, var(--figma-text)));
}

body.bcfc-figma-theme .bcfc-content-section a {
  color: var(--bcfc-ink-link, var(--bcfc-section-link, var(--figma-blue)));
}

body.bcfc-figma-theme .bcfc-content-section a:hover {
  color: var(--bcfc-ink-link-hover, var(--bcfc-section-link-hover, var(--figma-blue-dark)));
}

body.bcfc-figma-theme .bcfc-block-areas {
  width: min(1200px, calc(100% - 2rem));
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(var(--umb-block-grid--area-grid-columns, 12), minmax(0, 1fr));
  gap: 1.5rem;
}

body.bcfc-figma-theme .bcfc-block-area {
  grid-column: span min(var(--umb-block-grid--area-column-span, 12), var(--umb-block-grid--area-grid-columns, 12));
  min-width: 0;
}

body.bcfc-figma-theme .bcfc-block-area .umb-block-grid__layout-container {
  row-gap: 1.5rem;
}

body.bcfc-figma-theme .bcfc-rich-text {
  color: inherit;
}

body.bcfc-figma-theme .bcfc-rich-text > :first-child {
  margin-top: 0;
}

body.bcfc-figma-theme .bcfc-rich-text > :last-child {
  margin-bottom: 0;
}

body.bcfc-figma-theme .bcfc-rich-text h1,
body.bcfc-figma-theme .bcfc-rich-text h2,
body.bcfc-figma-theme .bcfc-rich-text h3,
body.bcfc-figma-theme .bcfc-rich-text h4 {
  color: inherit;
  line-height: 1.08;
  letter-spacing: -0.03em;
}

body.bcfc-figma-theme .bcfc-rich-text h1 {
  font-size: clamp(2.8rem, 6vw, 5rem);
}

body.bcfc-figma-theme .bcfc-rich-text h2 {
  font-size: clamp(2.1rem, 4vw, 3.6rem);
}

body.bcfc-figma-theme .bcfc-rich-text p {
  color: inherit;
  font-size: 1.05rem;
  line-height: 1.7;
}

body.bcfc-figma-theme .bcfc-headline {
  margin: 0;
  color: inherit;
  line-height: 1.12;
}

body.bcfc-figma-theme .bcfc-headline--center {
  text-align: center;
}

body.bcfc-figma-theme .bcfc-headline--right {
  text-align: right;
}

body.bcfc-figma-theme .bcfc-cta-group {
  display: flex;
  margin-top: 0.5rem;
}

body.bcfc-figma-theme .bcfc-cta-group--left {
  justify-content: flex-start;
}

body.bcfc-figma-theme .bcfc-cta-group--center {
  justify-content: center;
}

body.bcfc-figma-theme .bcfc-cta-group--right {
  justify-content: flex-end;
}

body.bcfc-figma-theme .bcfc-media-frame {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 24px;
  box-shadow: var(--figma-shadow);
  object-fit: cover;
}

body.bcfc-figma-theme .bcfc-divider {
  width: 100%;
  height: 1px;
  margin: 0;
  border: 0;
  background: color-mix(in srgb, var(--bcfc-section-border, #d8d8d8) 70%, white);
}

body.bcfc-figma-theme .bcfc-spacer {
  min-height: clamp(1rem, 3vw, 2rem);
}

body.bcfc-figma-theme .bcfc-roadmap {
  display: grid;
  gap: 1rem;
}

body.bcfc-figma-theme .bcfc-roadmap-item {
  position: relative;
  display: grid;
  grid-template-columns: 80px minmax(0, 1fr);
  gap: 1rem;
  align-items: start;
  padding: 1.5rem;
  border: 1px solid rgba(0, 59, 114, 0.08);
  border-radius: 24px;
  background: rgba(255, 255, 255, 0.82);
  backdrop-filter: blur(8px);
}

body.bcfc-figma-theme .bcfc-roadmap-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 80px;
  height: 80px;
  border-radius: 22px;
  background: linear-gradient(135deg, rgba(0, 59, 114, 0.12), rgba(101, 195, 160, 0.18));
}

body.bcfc-figma-theme .bcfc-roadmap-icon object,
body.bcfc-figma-theme .bcfc-roadmap-icon-image {
  width: 48px;
  height: 48px;
}

body.bcfc-figma-theme .bcfc-roadmap-copy h3 {
  margin: 0 0 0.6rem;
  color: var(--bcfc-ink-strong, var(--figma-blue-dark));
  font-size: 1.2rem;
}

body.bcfc-figma-theme .bcfc-roadmap-copy p {
  margin: 0;
  color: var(--bcfc-ink-muted, var(--figma-text-muted));
}

body.bcfc-figma-theme .bcfc-logo-band {
  overflow: hidden;
}

body.bcfc-figma-theme .bcfc-logo-band__header {
  width: min(1200px, calc(100% - 2rem));
  margin: 0 auto 2rem;
}

body.bcfc-figma-theme .bcfc-logo-band__grid,
body.bcfc-figma-theme .bcfc-logo-band__track {
  width: min(1200px, calc(100% - 2rem));
  margin: 0 auto;
}

body.bcfc-figma-theme .bcfc-logo-band__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 1rem;
}

body.bcfc-figma-theme .bcfc-logo-band__track {
  display: flex;
  gap: 1rem;
}

body.bcfc-figma-theme .bcfc-logo-band__item {
  flex: 0 0 172px;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 92px;
  padding: 1rem;
  border-radius: 22px;
  background: rgba(255, 255, 255, 0.86);
  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.05);
}

body.bcfc-figma-theme .bcfc-logo-band__item img {
  width: 100%;
  max-width: 140px;
  height: auto;
  object-fit: contain;
}

body.bcfc-figma-theme .bcfc-case-study-section {
  padding-top: clamp(3rem, 5vw, 4rem);
  padding-bottom: clamp(3rem, 5vw, 4rem);
}

body.bcfc-figma-theme .bcfc-case-study-wrap {
  width: min(1200px, calc(100% - 2rem));
  margin: 0 auto;
}

body.bcfc-figma-theme .bcfc-case-card {
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(280px, 0.9fr);
  gap: 2rem;
  align-items: stretch;
  padding: 1.5rem;
  border-radius: 30px;
  background: rgba(255, 255, 255, 0.86);
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.06);
}

body.bcfc-figma-theme .bcfc-case-card--reverse .bcfc-case-card__media {
  order: 2;
}

body.bcfc-figma-theme .bcfc-case-card__image,
body.bcfc-figma-theme .bcfc-case-card__image img {
  width: 100%;
  height: 100%;
}

body.bcfc-figma-theme .bcfc-case-card__image {
  overflow: hidden;
  border-radius: 24px;
}

body.bcfc-figma-theme .bcfc-case-card__image img {
  display: block;
  min-height: 320px;
}

body.bcfc-figma-theme .bcfc-case-card__content,
body.bcfc-figma-theme .bcfc-case-card__copy {
  display: flex;
  flex-direction: column;
}

body.bcfc-figma-theme .bcfc-case-card__content {
  justify-content: space-between;
  gap: 1.5rem;
}

body.bcfc-figma-theme .bcfc-case-card__copy h1,
body.bcfc-figma-theme .bcfc-case-card__copy h2,
body.bcfc-figma-theme .bcfc-case-card__copy h3 {
  margin: 0 0 0.75rem;
  color: var(--bcfc-ink-strong, var(--figma-blue-dark));
  font-size: clamp(1.6rem, 2vw, 2.15rem);
}

body.bcfc-figma-theme .bcfc-case-card__summary,
body.bcfc-figma-theme .bcfc-case-card__summary p {
  color: var(--bcfc-ink, var(--figma-text-muted));
  font-size: 1rem;
  line-height: 1.7;
}

body.bcfc-figma-theme .bcfc-case-card__tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin: 1rem 0 0;
  padding: 0;
  list-style: none;
}

body.bcfc-figma-theme .bcfc-case-card__tags li {
  padding: 0.5rem 0.85rem;
  border-radius: 999px;
  background: rgba(0, 59, 114, 0.08);
  color: var(--bcfc-ink, var(--figma-blue-dark));
  font-size: 0.9625rem;
  font-weight: 700;
}

body.bcfc-figma-theme .section-hero,
body.bcfc-figma-theme .section-hero-2,
body.bcfc-figma-theme .section-hero-3,
body.bcfc-figma-theme .banner-3 {
  border-radius: 0;
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal {
  min-height: 662px;
  padding: 0;
  background: var(--figma-green);
  overflow: hidden;
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .container {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(340px, 463px);
  align-items: center;
  gap: 3rem;
  min-height: 662px;
  padding-top: 4rem;
  padding-bottom: 0;
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content {
  max-width: 540px;
  color: var(--bcfc-color-white);
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content h1,
body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content h2,
body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content .h1,
body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content .h2 {
  color: var(--bcfc-color-white);
  font-size: clamp(2.5rem, 4vw, 3.5rem);
  line-height: 1.1;
  margin-bottom: 1rem;
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content p {
  color: rgba(255, 255, 255, 0.85);
  font-size: 1.2rem;
  line-height: 1.6;
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content .btn,
body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content .btn-primary,
body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-content .btn-outline-primary {
  min-width: 232px;
  min-height: 60px;
  border-radius: 11px;
  border-width: 1.2px;
  font-size: 1.25rem;
  font-weight: 800;
}

body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-background {
  width: min(463px, 100%);
  height: 733px;
  margin-left: auto;
  margin-bottom: -72px;
  background-position: center bottom;
  background-repeat: no-repeat;
  background-size: contain !important;
}

body.bcfc-figma-theme .service-card-figma {
  position: relative;
  min-height: 491px;
  border: 0;
  border-radius: 11px;
  overflow: hidden;
  box-shadow: none;
}

body.bcfc-figma-theme .service-card-figma .row {
  display: block;
  height: 100%;
}

body.bcfc-figma-theme .service-card-figma .service-media {
  position: absolute;
  inset: 0;
  width: 100%;
  max-width: none;
}

body.bcfc-figma-theme .service-card-figma .service-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.01);
  transition: transform 0.45s ease;
}

body.bcfc-figma-theme .service-card-figma:hover .service-media img {
  transform: scale(1.06);
}

body.bcfc-figma-theme .service-card-figma .service-body {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  justify-content: flex-end !important;
  width: 100%;
  max-width: none;
  height: 100%;
  padding: 2rem !important;
  color: var(--bcfc-color-white);
  background: linear-gradient(180deg, rgba(17, 62, 53, 0.12) 0%, rgba(17, 62, 53, 0.9) 100%);
}

body.bcfc-figma-theme .service-card-figma .service-description,
body.bcfc-figma-theme .service-card-figma .service-action {
  display: none;
}

body.bcfc-figma-theme .service-card-figma h1,
body.bcfc-figma-theme .service-card-figma h2,
body.bcfc-figma-theme .service-card-figma h3,
body.bcfc-figma-theme .service-card-figma h4,
body.bcfc-figma-theme .service-card-figma .h4 {
  margin: 0;
  color: var(--bcfc-color-white);
  font-family: "Almarai", Arial, sans-serif;
  font-size: clamp(1.7rem, 2vw, 2rem);
  line-height: 1.15;
}

body.bcfc-figma-theme .section-features {
  padding-top: 5rem !important;
  padding-bottom: 5rem !important;
  background: var(--figma-surface-alt);
}

body.bcfc-figma-theme .section-features > .container > .text-center.lead-sm,
body.bcfc-figma-theme .section-features > .container > .text-holder.lead-sm {
  max-width: 760px;
  margin: 0 auto 3rem;
  color: var(--bcfc-ink-strong, var(--figma-text));
  font-size: 1.1rem;
  line-height: 1.65;
}

body.bcfc-figma-theme .section-features > .container > .h2,
body.bcfc-figma-theme .section-features > .container > h2 {
  margin-bottom: 3rem !important;
  color: var(--bcfc-ink-strong, #5c5c5c);
  text-align: left !important;
  font-size: clamp(2.5rem, 4vw, 3.125rem);
  line-height: 1.15;
}

body.bcfc-figma-theme .section-features .row {
  row-gap: 1.5rem;
}

body.bcfc-figma-theme .section-features .card-feature-sm {
  position: relative;
  height: 100%;
  padding: 4.5rem 2rem 2rem !important;
  border: 0;
  border-radius: 12px;
  background: var(--bcfc-color-white) !important;
  box-shadow: none;
}

body.bcfc-figma-theme .section-features .card-feature-sm .img-holder {
  margin-bottom: 1rem !important;
}

body.bcfc-figma-theme .section-features .card-feature-sm h3,
body.bcfc-figma-theme .section-features .card-feature-sm h4,
body.bcfc-figma-theme .section-features .card-feature-sm .h5 {
  color: var(--bcfc-ink-strong, #5c5c5c);
  font-size: 1.5rem;
  line-height: 1.3;
}

body.bcfc-figma-theme .section-features .card-feature-sm .text-holder,
body.bcfc-figma-theme .section-features .card-feature-sm .text-holder p {
  color: var(--bcfc-ink, var(--figma-text-muted));
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.05rem;
  line-height: 1.55;
}

body.bcfc-figma-theme .section-features .card-feature-sm::before {
  position: absolute;
  top: 1.25rem;
  right: 1.5rem;
  color: var(--bcfc-ink, var(--figma-blue));
  font-family: "Almarai", Arial, sans-serif;
  font-size: 3.25rem;
  font-weight: 700;
  line-height: 1;
  opacity: 0.95;
  counter-increment: figma-feature;
  content: counter(figma-feature, decimal-leading-zero);
}

body.bcfc-figma-theme .section-features .row {
  counter-reset: figma-feature;
}

body.bcfc-figma-theme .banner-3 {
  padding-top: 5rem;
  padding-bottom: 5rem;
  background: var(--bcfc-color-white) !important;
}

body.bcfc-figma-theme .figma-campaign-section {
  overflow: visible;
}

body.bcfc-figma-theme .banner-3 .inner-holder,
body.bcfc-figma-theme .banner-3 .position-relative.pb-7.pb-xl-14.overflow-hidden {
  overflow: visible !important;
}

body.bcfc-figma-theme .banner-3 .mw-sm.ms-auto.mw-1xl.text-holder p {
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.25rem;
  line-height: 1.55;
  color: var(--bcfc-ink, #111);
}

body.bcfc-figma-theme .banner-3 .mw-sm.mw-lg-xl.mw-xl-3xl {
  text-align: left !important;
}

body.bcfc-figma-theme .banner-3 h1,
body.bcfc-figma-theme .banner-3 .h1,
body.bcfc-figma-theme .banner-3 h2 {
  color: var(--bcfc-ink-strong, var(--figma-blue));
  font-size: clamp(2.6rem, 4vw, 3.125rem);
}

body.bcfc-figma-theme .banner-3 img {
  border-radius: 24px !important;
}

body.bcfc-figma-theme .section-review {
  padding-top: 4.5rem !important;
  padding-bottom: 4.5rem !important;
  background: var(--bcfc-color-white) !important;
}

body.bcfc-figma-theme .figma-split-section {
  padding-top: 5rem !important;
  padding-bottom: 5rem !important;
  background: var(--bcfc-color-white) !important;
}

body.bcfc-figma-theme .figma-split-section .row {
  max-width: 1292px;
  margin-inline: auto;
  align-items: center;
  gap: 2rem 0;
}

body.bcfc-figma-theme .figma-split-section .figma-split-copy .hero-content {
  max-width: 680px;
}

body.bcfc-figma-theme .figma-split-section .figma-split-copy .lead-sm {
  margin-bottom: 1rem !important;
  color: var(--bcfc-ink-strong, #111);
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.35rem;
  line-height: 1.35;
}

body.bcfc-figma-theme .figma-split-section .figma-split-copy h1,
body.bcfc-figma-theme .figma-split-section .figma-split-copy .h1,
body.bcfc-figma-theme .figma-split-section .figma-split-copy h2 {
  margin-bottom: 1.5rem;
  color: var(--bcfc-ink-strong, var(--figma-blue));
  font-size: clamp(2.5rem, 4vw, 3.125rem);
  line-height: 1.15;
}

body.bcfc-figma-theme .figma-split-section .figma-split-copy p,
body.bcfc-figma-theme .figma-split-section .figma-split-copy .text-holder p {
  color: var(--bcfc-ink-muted, #111);
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.2rem;
  line-height: 1.55;
}

body.bcfc-figma-theme .figma-split-section .figma-split-copy .btn,
body.bcfc-figma-theme .figma-split-section .figma-split-copy .btn-primary,
body.bcfc-figma-theme .figma-split-section .figma-split-copy .btn-outline-primary {
  min-width: 232px;
  min-height: 60px;
  border-radius: 11px;
  border-width: 1.2px;
  font-size: 1.25rem;
  font-weight: 800;
}

body.bcfc-figma-theme .figma-split-section .figma-split-media .hero-background {
  min-height: 604px;
  border-radius: 24px;
}

body.bcfc-figma-theme .section-review .container > h2,
body.bcfc-figma-theme .section-review .container > .h2 {
  color: var(--bcfc-ink-strong, var(--figma-blue));
  font-size: clamp(2.5rem, 4vw, 3.125rem);
  text-align: left !important;
}

body.bcfc-figma-theme .section-review .container > p.lead-lg {
  max-width: 936px;
  margin: 0 0 2.5rem;
  color: var(--bcfc-ink-strong, #5c5c5c);
  text-align: left !important;
  font-size: 1.05rem;
  line-height: 1.6;
}

body.bcfc-figma-theme .section-review .swiper-slide {
  border-radius: 20px;
  background: var(--figma-surface);
  box-shadow: none;
}

body.bcfc-figma-theme .section-review .swiper-navigations,
body.bcfc-figma-theme .carousel-block .carousel-control-prev,
body.bcfc-figma-theme .carousel-block .carousel-control-next {
  gap: 0.5rem;
}

body.bcfc-figma-theme .section-review .swiper-button-prev,
body.bcfc-figma-theme .section-review .swiper-button-next,
body.bcfc-figma-theme .carousel-block .carousel-control-prev,
body.bcfc-figma-theme .carousel-block .carousel-control-next {
  width: 48px;
  height: 48px;
  border: 2px solid var(--figma-blue);
  border-radius: 50%;
  color: var(--bcfc-ink, var(--figma-blue));
  background: var(--bcfc-color-white);
}

body.bcfc-figma-theme .card-case {
  display: flex;
  gap: 1.25rem;
  align-items: stretch;
  padding: 1rem;
  border-radius: 20px;
  background: var(--figma-surface);
  box-shadow: none;
}

body.bcfc-figma-theme .card-case .img-holder {
  flex: 0 0 237px;
  margin: 0 !important;
  overflow: hidden;
}

body.bcfc-figma-theme .card-case .img-holder img {
  width: 100%;
  height: 157px;
  object-fit: cover;
}

body.bcfc-figma-theme .card-case .lead-sm {
  margin-bottom: 0.35rem;
  color: var(--bcfc-ink-strong, var(--figma-text-muted));
}

body.bcfc-figma-theme .card-case h3,
body.bcfc-figma-theme .card-case .h3 {
  color: var(--bcfc-ink-strong, var(--figma-blue-dark));
  font-family: "Almarai", Arial, sans-serif;
  font-size: 1.1rem;
  line-height: 1.3;
}

body.bcfc-figma-theme .card-case ul {
  display: none;
}

body.bcfc-figma-theme .news-card-figma .news-card-copy {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  justify-content: center;
  padding: 0.5rem 0;
}

body.bcfc-figma-theme .news-card-figma .news-card-meta {
  font-size: 1rem;
  line-height: 1.5;
}

body.bcfc-figma-theme .news-card-figma .news-card-tags {
  display: none;
}

body.bcfc-figma-theme .floating-footer,
body.bcfc-figma-theme .bcfc-floating-footer {
  position: fixed;
  right: 1rem;
  bottom: 1rem;
  z-index: 1200;
}

body.bcfc-figma-theme .bcfc-floating-footer {
  left: 50%;
  right: auto;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.9rem 1.1rem;
  border-radius: 999px;
  background: rgba(62, 62, 62, 0.72);
  backdrop-filter: blur(10px);
  transform: translateX(-50%);
  box-shadow: 0 20px 45px rgba(0, 0, 0, 0.18);
}

body.bcfc-figma-theme .bcfc-floating-link {
  color: var(--bcfc-color-white);
  font-size: 0.95rem;
  font-weight: 700;
  text-decoration: none;
  white-space: nowrap;
}

body.bcfc-figma-theme .bcfc-floating-link:hover {
  color: var(--bcfc-color-white);
  text-decoration: underline;
}

@media (width < 992px) {
  body.bcfc-figma-theme .bcfc-nav .container {
    flex-direction: column;
    align-items: stretch;
  }

  body.bcfc-figma-theme .bcfc-block-area {
    grid-column: 1 / -1;
  }

  body.bcfc-figma-theme .bcfc-nav-brand,
  body.bcfc-figma-theme .bcfc-nav-main,
  body.bcfc-figma-theme .bcfc-nav-actions {
    flex-direction: column;
    align-items: flex-start;
  }

  body.bcfc-figma-theme .bcfc-nav .nav-list {
    justify-content: flex-start;
  }

  body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .container {
    grid-template-columns: 1fr;
    min-height: auto;
    padding-top: 3rem;
    padding-bottom: 2rem;
  }

  body.bcfc-figma-theme .section-hero-2.figma-app-promo.direction-horizontal .hero-background {
    height: 420px;
    margin-bottom: 0;
  }

  body.bcfc-figma-theme .bcfc-case-card {
    grid-template-columns: 1fr;
  }

  body.bcfc-figma-theme .card-case {
    flex-direction: column;
  }

  body.bcfc-figma-theme .card-case .img-holder {
    flex-basis: auto;
  }

  body.bcfc-figma-theme .section-features > .container > .h2,
  body.bcfc-figma-theme .section-features > .container > h2,
  body.bcfc-figma-theme .section-review .container > h2,
  body.bcfc-figma-theme .section-review .container > .h2,
  body.bcfc-figma-theme .banner-3 .mw-sm.mw-lg-xl.mw-xl-3xl {
    text-align: center !important;
  }

  body.bcfc-figma-theme .section-review .container > p.lead-lg {
    text-align: center !important;
    margin-inline: auto;
  }

  body.bcfc-figma-theme .figma-split-section .figma-split-media .hero-background {
    min-height: 420px;
  }

  body.bcfc-figma-theme .bcfc-footer .footer-bottom-right {
    flex-direction: column;
  }
}

@media (width < 768px) {
  body.bcfc-figma-theme .bcfc-footer .container,
  body.bcfc-figma-theme .bcfc-nav .container {
    padding-inline: 1rem;
  }

  body.bcfc-figma-theme .bcfc-block-areas,
  body.bcfc-figma-theme .bcfc-logo-band__header,
  body.bcfc-figma-theme .bcfc-logo-band__grid,
  body.bcfc-figma-theme .bcfc-logo-band__track,
  body.bcfc-figma-theme .bcfc-case-study-wrap {
    width: calc(100% - 1.5rem);
  }

  body.bcfc-figma-theme .bcfc-roadmap-item {
    grid-template-columns: 1fr;
  }

  body.bcfc-figma-theme .bcfc-roadmap-icon {
    width: 64px;
    height: 64px;
  }

  body.bcfc-figma-theme .bcfc-case-card {
    padding: 1rem;
    border-radius: 22px;
  }

  body.bcfc-figma-theme .bcfc-case-card__image img {
    min-height: 240px;
  }

  body.bcfc-figma-theme .service-card-figma {
    min-height: 360px;
  }

  body.bcfc-figma-theme .service-card-figma .service-body {
    padding: 1.25rem !important;
  }

  body.bcfc-figma-theme .section-features .card-feature-sm {
    padding: 4rem 1.25rem 1.5rem !important;
  }

  body.bcfc-figma-theme .section-features .card-feature-sm::before {
    right: 1rem;
    font-size: 2.75rem;
  }

  body.bcfc-figma-theme .bcfc-floating-footer {
    bottom: 0.75rem;
    width: calc(100% - 1.5rem);
    justify-content: space-between;
    gap: 0.5rem;
    padding: 0.8rem 0.9rem;
  }

  body.bcfc-figma-theme .bcfc-floating-link {
    font-size: 0.8625rem;
  }
}

/* ============================================
   BCFC HOMEPAGE - FIGMA DESIGN
   ============================================ */

/* Base */
.homepage-wrapper {
    font-family: 'Almarai', sans-serif;
    background: var(--bcfc-surface-raised, #ffffff);
    position: relative;
    width: 100%;
    overflow-x: hidden;
}

/* ============================================
   SECTION SPACING - Consistent padding
   ============================================ */
.homepage-section-title {
    font-family: 'Almarai', sans-serif;
    font-size: clamp(2rem, 4vw, 3.125rem);
    font-weight: 700;
    line-height: 1.2;
    color: var(--bcfc-ink-strong, #003b72);
    margin-bottom: 40px;
    text-align: center;
}

/* ============================================
   HEADER / NAVIGATION
   ============================================ */
.homepage-header {
    position: relative;
    height: 724px;
    width: 100%;
}

.homepage-nav {
    position: absolute;
    top: 10px;
    inset-inline: 0;
    height: 118px;
    display: flex;
    align-items: center;
    padding: 0 40px;
}

.homepage-logo {
    width: 342px;
    height: 91px;
    position: relative;
}

.homepage-nav-links {
    display: flex;
    gap: 13px;
    margin-left: auto;
    margin-right: 40px;
}

.homepage-nav-link {
    background: var(--bcfc-surface-raised, #ffffff);
    border: 0.5px solid #003b72;
    border-radius: 8px;
    height: 33px;
    width: 152px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: 'Almarai', sans-serif;
    font-size: 1.25rem;
    color: var(--bcfc-ink-link, #003b72);
    text-decoration: none;
    opacity: 0.95;
    transition: all 0.3s ease;
}

.homepage-nav-link:hover {
    opacity: 1;
    box-shadow: 0 2px 8px rgba(0, 74, 152, 0.2);
}

.homepage-islamic-mode {
    background: #65c3a0;
    border: 0.639px solid #163529;
    border-radius: 7.663px;
    width: 32px;
    height: 33px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-right: 20px;
}

.homepage-arabic-toggle {
    position: relative;
    width: 87px;
    height: 40px;
    margin-right: 15px;
    cursor: pointer;
}

.homepage-search {
    width: 32px;
    height: 33px;
    background: var(--bcfc-surface-raised, #ffffff);
    border: 0.639px solid #003b72;
    border-radius: 7.663px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-right: 10px;
}

.homepage-login-btn {
    background: #003b72;
    border-radius: 5.71px;
    height: 32.355px;
    width: 71.054px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: 'Almarai', sans-serif;
    font-weight: 800;
    font-size: 1rem;
    color: #ffffff;
    text-decoration: none;
    margin-right: 23px;
}

/* ============================================
   BANNER / HERO SECTION
   ============================================ */
.homepage-banner {
    position: relative;
    width: 100%;
    height: 822px;
    overflow: hidden;
}

.homepage-banner-bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
}

.homepage-banner-bg-image {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 1;
}

.homepage-banner-bg-yellow {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 139px;
    background: #ede46b;
    z-index: 2;
}

.homepage-banner-bg-blue {
    position: absolute;
    top: -38px;
    left: -50px;
    width: 1523px;
    height: 730px;
    background: #c3d6ef;
    z-index: 2;
}

.homepage-banner-phone {
    position: absolute;
    right: 36px;
    top: 93px;
    width: 493px;
    height: 648px;
    z-index: 5;
}

.homepage-banner-phone img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.homepage-banner-overlay {
    position: absolute;
    bottom: 0;
    inset-inline: 0;
    height: 26.5%;
    background: linear-gradient(to top, rgba(0, 27, 40, 0.2), transparent);
    z-index: 3;
    pointer-events: none;
}

.homepage-banner-top-gradient {
    position: absolute;
    top: -38px;
    left: -28px;
    width: 1502px;
    height: 273px;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 100%);
    transform: scaleY(-1);
    z-index: 3;
    pointer-events: none;
}

.homepage-banner-content {
    position: absolute;
    top: 23%;
    left: 8.17%;
    width: 60%;
    z-index: 10;
}

.homepage-banner-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: clamp(2.5rem, 5vw, 5.27375rem);
    line-height: 84.375px;
    color: var(--bcfc-dark-ink-green, #113e35);
    margin-bottom: 20px;
}

.homepage-banner-subtitle {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: clamp(1.2rem, 2.5vw, 2.451875rem);
    line-height: 94.922px;
    color: var(--bcfc-ink-strong, #53575a);
    margin-bottom: 40px;
}

.homepage-banner-cta {
    position: absolute;
    left: 124px;
    top: 516px;
    z-index: 10;
}

.homepage-banner-arrows {
    position: absolute;
    bottom: 20%;
    left: 1.81%;
    display: flex;
    gap: 10px;
    z-index: 10;
}

.homepage-banner-arrow {
    width: 57.803px;
    height: 57.803px;
    background: var(--bcfc-surface-raised, rgba(255, 255, 255, 0.9));
    border: 1px solid #003b72;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: all 0.3s ease;
    font-size: 1.5rem;
    color: var(--bcfc-ink, #003b72);
}

.homepage-banner-arrow:hover {
    transform: scale(1.1);
}

/* ============================================
   SERVICES SECTION
   ============================================ */
.homepage-services {
    padding: 120px 72px;
    max-width: 1440px;
}

.homepage-services-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
}

.homepage-service-card {
    position: relative;
    width: 100%;
    aspect-ratio: 299 / 491;
    border-radius: 11px;
    overflow: hidden;
    text-decoration: none;
    transition: transform 0.3s ease;
    display: block;
}

.homepage-service-card:hover {
    transform: translateY(-8px);
}

.homepage-service-card img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.homepage-service-card-overlay {
    position: absolute;
    bottom: 0;
    inset-inline: 0;
    height: 60%;
    background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.8));
}

.homepage-service-card-title {
    position: absolute;
    bottom: 30px;
    left: 30px;
    font-family: 'Almarai', sans-serif;
    font-size: 1.75rem;
    font-weight: 700;
    color: #ffffff;
}

/* ============================================
   SERVICES LEGACY (for backward compatibility)
   ============================================ */
.services-new {
    width: 100%;
    max-width: 1296px;
    margin: 0 auto;
    padding: 80px 72px;
    position: relative;
}

/* Section Title */
.services-title {
    font-family: 'Almarai', sans-serif;
    font-size: 3.125rem;
    font-weight: 700;
    font-style: normal;
    line-height: 32px;
    color: var(--bcfc-ink-strong, #003b72);
    margin-bottom: 38px;
    text-align: left;
    letter-spacing: normal;
    text-transform: capitalize;
}

/* Services Grid - 4 cards with exact 32px gap */
.services-grid {
    display: grid;
    grid-template-columns: repeat(4, 299px);
    gap: 32px;
    justify-content: center;
}

/* Service Card - Exact 299x491px dimensions */
.service-card {
    width: 299px;
    height: 491px;
    position: relative;
    border-radius: 11.35px;
    overflow: hidden;
    cursor: pointer;
    transition: transform 0.3s ease;
}

.service-card:hover {
    transform: translateY(-8px);
}

.service-card-link {
    display: block;
    width: 100%;
    height: 100%;
    text-decoration: none;
}

/* Card Image Container - Full card background */
.card-image-container {
    position: absolute;
    inset: 0;
    border-radius: 11.35px;
    overflow: hidden;
}

.service-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Gradient Overlay - Bottom area */
.card-gradient {
    position: absolute;
    width: 299px;
    height: 294px;
    left: 50%;
    top: calc(50% + 98.5px);
    transform: translate(-50%, -50%);
    border-radius: 11px;
    background: linear-gradient(
        to bottom,
        rgba(19, 19, 19, 0) 0%,
        rgba(19, 19, 19, 0.83) 79.265%
    );
    pointer-events: none;
}

/* Service Title - White text at bottom */
.service-card-title {
    position: absolute;
    left: 30px;
    top: 424px;
    font-family: 'Almarai', sans-serif;
    font-size: 1.875rem;
    font-weight: 700;
    font-style: normal;
    line-height: 35.185px;
    color: #ffffff;
    margin: 0;
    white-space: nowrap;
    z-index: 10;
}

/* RTL Support for Services */

/* Responsive Design */
@media (max-width: 1400px) {
    .services-new {
        max-width: 100%;
        padding: 60px 40px;
    }

    .homepage-services {
        padding: 60px 40px;
    }
}

@media (max-width: 1200px) {
    .services-grid {
        grid-template-columns: repeat(2, 299px);
        gap: 32px;
        justify-content: center;
    }

    .services-new {
        padding: 60px 32px;
    }

    .homepage-services-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 768px) {
    .services-new {
        padding: 40px 20px;
    }

    .homepage-services {
        padding: 40px 24px;
    }

    .homepage-services-grid {
        grid-template-columns: 1fr;
    }

    .services-title {
        font-size: 2.25rem;
        text-align: center;
        margin-bottom: 32px;
    }

    .services-grid {
        grid-template-columns: 299px;
        gap: 24px;
        justify-content: center;
    }

    .service-card {
        margin: 0 auto;
    }

    
}

@media (max-width: 480px) {
    .service-card {
        width: 100%;
        max-width: 299px;
        height: 450px;
    }

    .services-title {
        font-size: 1.75rem;
    }

    .service-card-title {
        font-size: 1.5rem;
        top: 380px;
    }

    .card-gradient {
        width: 100%;
        height: 260px;
        top: calc(50% + 80px);
    }

    .homepage-service-card-title {
        font-size: 1.25rem;
    }
}

/* ============================================
   WHY CHOOSE US SECTION
   ============================================ */
.homepage-why-section {
    position: relative;
    background: var(--bcfc-surface-sunken, #f4f4f4);
    padding: 120px 72px;
    overflow: hidden;
}

.homepage-why-container {
    max-width: 1301px;
    margin: 0 auto;
    position: relative;
}

.homepage-why-bg {
    position: absolute;
    top: -62px;
    left: -69px;
    width: 1439px;
    height: 859px;
    background: var(--bcfc-surface-sunken, #f4f4f4);
    border-radius: 20px;
}

.homepage-why-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: clamp(2rem, 4vw, 3.125rem);
    line-height: 76.444px;
    color: var(--bcfc-ink-strong, #5c5c5c);
    margin-bottom: 20px;
}

.homepage-why-description {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: clamp(1rem, 2vw, 1.283562rem);
    line-height: 33px;
    color: var(--bcfc-ink-muted, #3e3e3e);
    max-width: 369px;
    margin-bottom: 60px;
}

.homepage-why-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 30px;
}

.homepage-why-card {
    background: var(--bcfc-surface-raised, #ffffff);
    border-radius: 11.409px;
    padding: 40px;
    position: relative;
    min-height: 280px;
    transition: all 0.3s ease;
}

.homepage-why-card:hover {
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}

.homepage-why-number {
    position: absolute;
    top: 30px;
    right: 30px;
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: 4.135937rem;
    line-height: 34.228px;
    color: var(--bcfc-ink, #003b72);
}

.homepage-why-card-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: 1.5625rem;
    line-height: 33.088px;
    color: var(--bcfc-ink-strong, #5c5c5c);
    margin-bottom: 15px;
    padding-right: 60px;
}

.homepage-why-card-description {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: 1.283562rem;
    line-height: 26.242px;
    color: var(--bcfc-ink-muted, #787878);
}

/* ============================================
   CAMPAIGN SECTION (UEFA)
   ============================================ */
.homepage-campaign {
    background: var(--bcfc-surface-raised, #ffffff);
    padding: 120px 72px;
    overflow: hidden;
}

.homepage-campaign-container {
    max-width: 1292px;
    margin: 0 auto;
}

.homepage-campaign-content {
    display: grid;
    grid-template-columns: 483.622px 1fr;
    gap: 60px;
    align-items: center;
}

.homepage-campaign-image {
    height: 604px;
    border-radius: 20px;
    overflow: hidden;
}

.homepage-campaign-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.homepage-campaign-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: clamp(2rem, 4vw, 3.125rem);
    line-height: 32px;
    color: var(--bcfc-ink-strong, #003b72);
    margin-bottom: 30px;
    text-transform: capitalize;
}

.homepage-campaign-text {
    font-family: 'Almarai', sans-serif;
    font-weight: 600;
    font-size: 1.5rem;
    line-height: 28.3px;
    color: var(--bcfc-ink, #000000);
    text-align: justify;
    margin-bottom: 30px;
}

/* ============================================
   APP SECTION (SAHEL)
   ============================================ */
.homepage-app-section {
    background: #113e35;
    position: relative;
    overflow: hidden;
}

.homepage-app-container {
    display: grid;
    grid-template-columns: 886px 1fr;
    min-height: 662px;
}

.homepage-app-content {
    padding: 72px 70px;
    position: relative;
    z-index: 2;
}

.homepage-app-logo {
    width: 218px;
    height: 67px;
    margin-bottom: 60px;
}

.homepage-app-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: clamp(2rem, 4vw, 3.125rem);
    line-height: 55px;
    color: #ffffff;
    margin-bottom: 30px;
}

.homepage-app-description {
    font-family: 'Almarai', sans-serif;
    font-weight: 300;
    font-size: clamp(1rem, 2vw, 1.5rem);
    line-height: 35px;
    color: #ffffff;
    text-align: justify;
    max-width: 456px;
    margin-bottom: 60px;
}

.homepage-app-qr {
    position: absolute;
    right: 72px;
    top: 396px;
    width: 181.492px;
    height: 181.492px;
    border: 3px solid #ffffff;
    border-radius: 10px;
    padding: 10px;
    background: var(--bcfc-surface-raised, #ffffff);
}

.homepage-app-qr img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.homepage-app-cta {
    margin-top: 60px;
}

.homepage-app-image {
    position: relative;
    background: var(--bcfc-surface-sunken, #f0f0f0);
}

.homepage-app-phone {
    position: absolute;
    left: -50px;
    top: 3px;
    width: 463.669px;
    height: 733px;
}

.homepage-app-phone img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.homepage-app-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, rgba(0, 0, 0, 0.2), rgba(26, 25, 55, 1));
}

/* ============================================
   NEWS SECTION
   ============================================ */
.homepage-news {
    padding: 120px 72px;
    max-width: 1440px;
}

.homepage-news-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 50px;
    padding: 0 16px;
}

.homepage-news-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: clamp(2rem, 4vw, 3.125rem);
    line-height: 32px;
    color: var(--bcfc-ink-strong, #003b72);
}

.homepage-news-description {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: 1.25rem;
    line-height: 32px;
    color: var(--bcfc-ink-muted, #5c5c5c);
    max-width: 936px;
    margin-top: 30px;
}

.homepage-news-arrows {
    display: flex;
    gap: 10px;
    margin-top: 40px;
}

.homepage-news-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 30px;
}

.homepage-news-card {
    background: var(--bcfc-surface-sunken, #f7f7f8);
    border-radius: 20px;
    overflow: hidden;
    display: flex;
    height: 157px;
    transition: all 0.3s ease;
}

.homepage-news-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}

.homepage-news-card-image {
    width: 237px;
    height: 157px;
    border-radius: 0 20px 20px 0;
    overflow: hidden;
}

.homepage-news-card-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.homepage-news-card-content {
    flex: 1;
    padding: 11px 23px;
}

.homepage-news-date {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: 1rem;
    line-height: 30px;
    color: var(--bcfc-ink-muted, #787878);
    margin-bottom: 15px;
}

.homepage-news-card-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: 1rem;
    line-height: 20px;
    color: var(--bcfc-ink-strong, #00346a);
    display: -webkit-box;
    -webkit-line-clamp: 5;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ============================================
   FOOTER
   ============================================ */
.homepage-footer {
    background: #003b72;
    border-radius: 50px 50px 0 0;
    padding-top: 60px;
    padding-bottom: 30px;
    position: relative;
}

.homepage-footer-overlay {
    position: absolute;
    top: 0;
    inset-inline: 0;
    height: 453px;
    background: rgba(0, 0, 0, 0.2);
    mix-blend-mode: color-dodge;
    opacity: 0.2;
    pointer-events: none;
}

.homepage-footer-content {
    position: relative;
    z-index: 2;
    max-width: 1440px;
    margin: 0 auto;
    padding: 0 128px;
}

.homepage-footer-top {
    display: grid;
    grid-template-columns: 216px 1fr 1fr 1fr;
    gap: 60px;
    margin-bottom: 40px;
}

.homepage-footer-logo {
    width: 216px;
    height: 195px;
}

.homepage-footer-logo img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.homepage-footer-about {
    text-align: center;
    max-width: 279px;
    margin: 0 auto;
}

.homepage-footer-about-text {
    font-family: 'Almarai', sans-serif;
    font-weight: 500;
    font-size: 1rem;
    line-height: 22px;
    color: #ffffff;
}

.homepage-footer-social {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-top: 20px;
}

.homepage-footer-social-icon {
    width: 40px;
    height: 40px;
    background: rgba(255, 255, 255, 0.2);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #ffffff;
    transition: all 0.3s ease;
}

.homepage-footer-social-icon:hover {
    background: rgba(255, 255, 255, 0.3);
}

.homepage-footer-links-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 900;
    font-size: 1.375rem;
    line-height: 55px;
    color: #ffffff;
    text-transform: uppercase;
    margin-bottom: 20px;
}

.homepage-footer-links-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.homepage-footer-links-list li {
    margin-bottom: 12px;
}

.homepage-footer-links-list a {
    font-family: 'Almarai', sans-serif;
    font-weight: 500;
    font-size: 1rem;
    color: #ffffff;
    text-decoration: none;
    transition: color 0.3s ease;
}

.homepage-footer-links-list a:hover {
    color: #ede46b;
}

.homepage-footer-contact-title {
    font-family: 'Almarai', sans-serif;
    font-weight: 900;
    font-size: 1.375rem;
    line-height: 55px;
    color: #ffffff;
    text-transform: uppercase;
    margin-bottom: 10px;
}

.homepage-footer-contact-item {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 15px;
}

.homepage-footer-contact-item span {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: 1rem;
    color: #ffffff;
}

.homepage-footer-bottom {
    border-top: 1px solid rgba(255, 255, 255, 0.2);
    padding-top: 20px;
    text-align: center;
}

.homepage-footer-bottom p {
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: 1rem;
    color: #ffffff;
}

/* ============================================
   FLOATING FOOTER
   ============================================ */
.homepage-floating-footer {
    position: fixed;
    bottom: 29px;
    left: 50%;
    transform: translateX(-50%);
    background: rgba(92, 92, 92, 0.6);
    backdrop-filter: blur(10px);
    border-radius: 100px;
    padding: 10px 30px;
    display: flex;
    align-items: center;
    gap: 30px;
    box-shadow: 0 8px 13px rgba(0, 0, 0, 0.25);
    z-index: 1000;
}

.homepage-floating-footer-link {
    display: flex;
    align-items: center;
    gap: 5px;
    font-family: 'Almarai', sans-serif;
    font-weight: 400;
    font-size: 1.358313rem;
    color: #ffffff;
    text-decoration: none;
    white-space: nowrap;
}

.homepage-floating-footer-link:hover {
    color: #ede46b;
}

.homepage-floating-footer-divider {
    width: 1px;
    height: 26px;
    background: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.5));
}

/* ============================================
   BUTTONS
   ============================================ */
.homepage-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 60px;
    width: 232px;
    border-radius: 11px;
    font-family: 'Almarai', sans-serif;
    font-weight: 800;
    font-size: 1.34375rem;
    text-decoration: none;
    transition: all 0.3s ease;
}

.homepage-btn-primary {
    background: var(--bcfc-surface-raised, #ffffff);
    border: 1.197px solid #003b72;
    color: var(--bcfc-ink-link, #003b72);
}

.homepage-btn-primary:hover {
    background: #003b72;
    color: #ffffff;
}

.homepage-btn-green {
    background: #113e35;
    border: 1.197px solid #ffffff;
    color: #ffffff;
}

.homepage-btn-green:hover {
    background: var(--bcfc-surface-raised, #ffffff);
    color: var(--bcfc-dark-ink-green, #113e35);
}

.homepage-btn-gray {
    background: var(--bcfc-surface-raised, #ffffff);
    border: 1.197px solid #5c5c5c;
    color: var(--bcfc-ink-link, #5c5c5c);
}

.homepage-btn-gray:hover {
    background: #5c5c5c;
    color: #ffffff;
}

/* ============================================
   RESPONSIVE DESIGN
   ============================================ */
@media (max-width: 1200px) {
    .homepage-why-grid {
        grid-template-columns: 1fr;
    }

    .homepage-news-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .homepage-campaign-content {
        grid-template-columns: 1fr;
    }

    .homepage-app-container {
        grid-template-columns: 1fr;
    }

    .homepage-app-qr {
        position: relative;
        right: auto;
        top: auto;
        margin-top: 30px;
    }

    .homepage-services {
        padding: 60px 32px;
        margin-top: 20px;
    }
}

@media (max-width: 768px) {
    .homepage-nav {
        flex-wrap: wrap;
        height: auto;
        padding: 10px 20px;
    }

    .homepage-nav-links {
        display: none;
    }

    .homepage-news-grid {
        grid-template-columns: 1fr;
    }

    .homepage-footer-top {
        grid-template-columns: 1fr;
        text-align: center;
    }

    .homepage-floating-footer {
        width: 90%;
        flex-wrap: wrap;
        justify-content: center;
        padding: 15px;
    }

    .homepage-floating-footer-divider {
        display: none;
    }

    .homepage-banner-content {
        top: 15%;
        left: 5%;
        width: 90%;
    }

    .homepage-banner-phone {
        width: 280px;
        height: 368px;
    }

    .homepage-why-section,
    .homepage-campaign {
        padding-inline: 24px;
        padding-top: 60px;
        padding-bottom: 60px;
    }

    .homepage-services,
    .homepage-news {
        padding-inline: 24px;
        padding-top: 60px;
        padding-bottom: 60px;
    }

    .homepage-services {
        padding-top: 60px;
        padding-bottom: 60px;
    }
}

/* ============================================
   RTL SUPPORT
   ============================================ */

/* ============================================
   APP NEW SECTION (Legacy Partial)
   ============================================ */
.app-new-section {
    position: relative;
    width: 100%;
    height: 662px;
    overflow: hidden;
}

.app-new-container {
    position: relative;
    width: 1440px;
    max-width: 1440px;
    height: 662px;
    margin: 0 auto;
    padding: 0 72px;
    box-sizing: border-box;
}

.app-new-frame {
    position: absolute;
    left: 0;
    top: 0;
    width: 75%;
    height: 662px;
    background: #113E35;
    display: flex;
    flex-direction: column;
    padding: 72px 69px;
    box-sizing: border-box;
}

.app-logo {
    width: 218px;
    height: 67px;
    margin-bottom: 60px;
    flex-shrink: 0;
}

.app-logo svg {
    width: 100%;
    height: auto;
    display: block;
}

.app-title {
    width: 100%;
    font-family: 'Almarai', sans-serif;
    font-weight: 700;
    font-size: 3.125rem;
    line-height: 55px;
    color: #ffffff;
    margin: 0 0 50px 0;
}

.app-description {
    width: 456px;
    font-family: 'Almarai', sans-serif;
    font-weight: 300;
    font-size: 1.5rem;
    line-height: 35px;
    color: #ffffff;
    margin: 0 0 50px 0;
}

.download-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 232px;
    height: 61px;
    background-color: transparent;
    border: 1.2px solid #ffffff;
    border-radius: 11px;
    font-family: 'Almarai', sans-serif;
    font-weight: 800;
    font-size: 1.3125rem;
    color: #ffffff;
    text-decoration: none;
    transition: all 0.3s ease;
}

.download-btn:hover {
    background-color: var(--bcfc-surface-raised, #ffffff);
    color: var(--bcfc-dark-ink-green, #113E35);
}

.qr-code {
    position: absolute;
    right: 69px;
    top: 396px;
    width: 181px;
    height: 181px;
    border: 3px solid #ffffff;
    border-radius: 10px;
    padding: 10px;
    background: var(--bcfc-surface-raised, #ffffff);
}

.qr-image-wrapper {
    width: 100%;
    height: 100%;
}

.qr-image-wrapper img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.app-image-area {
    position: absolute;
    right: 0;
    top: 0;
    width: 25%;
    height: 662px;
    overflow: hidden;
}

.phone-mockup {
    position: absolute;
    right: 50%;
    top: 50%;
    transform: translate(50%, -50%);
    width: 120%;
}

.phone-mockup img {
    width: 100%;
    height: auto;
    display: block;
}

/* ============================================
   WHY NEW SECTION (Legacy Partial)
   ============================================ */
.why-new {
    position: relative;
    width: 100%;
    max-width: 1439px;
    min-height: 728px;
    margin: 0 auto;
    padding: 120px 72px;
    overflow: hidden;
}

.why-new-background {
    position: absolute;
    inset: 0;
    background-color: var(--bcfc-surface-sunken, #f4f4f4);
    z-index: 0;
}

.why-new-container {
    position: relative;
    max-width: 1439px;
    margin: 0 auto;
    z-index: 1;
}

.why-new-title {
    margin: 0 0 30px;
    color: var(--bcfc-ink-strong, #5c5c5c);
    font-family: 'Almarai', sans-serif;
    font-size: 3.125rem;
    font-weight: 700;
    line-height: 76.444px;
    text-align: left;
}

.why-new-subtitle {
    max-width: 369px;
    margin: 0 0 80px;
    color: var(--bcfc-ink-strong, #3e3e3e);
    font-family: 'Almarai', sans-serif;
    font-size: 1.283562rem;
    font-weight: 400;
    line-height: 33px;
    text-align: left;
}

.why-new-grid {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 30px;
    max-width: 1301px;
}

.why-new-card {
    position: relative;
    width: 100%;
    min-height: 346.684px;
}

.why-new-card-bg {
    position: absolute;
    inset: 0;
    background-color: var(--bcfc-surface-raised, #ffffff);
    border-radius: 11.409px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
    transition: box-shadow 0.3s ease, transform 0.3s ease;
    z-index: 0;
}

.why-new-card:hover .why-new-card-bg {
    box-shadow: 0 8px 24px rgba(0, 74, 152, 0.15);
    transform: translateY(-4px);
}

.why-new-card-number {
    position: absolute;
    top: 71px;
    right: 32px;
    z-index: 1;
    color: var(--bcfc-ink, #003b72);
    font-family: 'Almarai', sans-serif;
    font-size: 4.135937rem;
    font-weight: 700;
    line-height: 34.228px;
}

.why-new-card-title {
    position: absolute;
    top: 141px;
    left: 32px;
    right: 24px;
    z-index: 1;
    margin: 0;
    color: var(--bcfc-ink-strong, #5c5c5c);
    font-family: 'Almarai', sans-serif;
    font-size: 1.5625rem;
    font-weight: 700;
    line-height: 33.088px;
}

.why-new-card-description {
    position: absolute;
    bottom: 78px;
    left: 32px;
    right: 40px;
    z-index: 1;
    margin: 0;
    color: var(--bcfc-ink-muted, #787878);
    font-family: 'Almarai', sans-serif;
    font-size: 1.283562rem;
    font-weight: 400;
    line-height: 26.242px;
}

/* ============================================
   FOOTER NEWSLETTER
   ============================================ */
.bcfc-footer-newsletter {
    margin-top: 1.5rem;
}

.bcfc-footer-newsletter h4 {
    font-family: 'Almarai', sans-serif;
    font-size: 1rem;
    font-weight: 800;
    text-transform: uppercase;
    color: #ffffff;
    margin-bottom: 0.5rem;
}

.bcfc-footer-newsletter p {
    font-family: 'Almarai', sans-serif;
    font-size: 0.9375rem;
    color: rgba(255, 255, 255, 0.8);
    line-height: 1.5;
}

.bcfc-footer-newsletter form {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.bcfc-footer-newsletter input {
    flex: 1;
    min-width: 200px;
    border-radius: 0.5rem;
    padding: 0.625rem 1rem;
    font-size: 0.9375rem;
    border: none;
    background: rgba(255, 255, 255, 0.15);
    color: #ffffff;
}

.bcfc-footer-newsletter input::placeholder {
    color: rgba(255, 255, 255, 0.6);
}

.bcfc-footer-newsletter input:focus {
    outline: none;
    box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5);
}

.bcfc-footer-newsletter button {
    padding: 0.625rem 1rem;
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--bcfc-ink, #003b72);
    background: var(--bcfc-surface-raised, #ffffff);
    border: none;
    border-radius: 0.5rem;
    cursor: pointer;
    transition: background-color 0.3s ease;
}

.bcfc-footer-newsletter button:hover {
    background: var(--bcfc-surface-sunken, #f0f0f0);
}

/* ============================================
   SCROLL TO TOP BUTTON
   ============================================ */
.bcfc-scroll-to-top {
    /* Position (right/bottom) now owned by bcfc-inline-partials.css, which
       keeps this button stacked above .bcfc-quick-links in the same column
       — don't redeclare right/bottom here or the two widgets drift apart. */
    transition: all 0.3s ease;
}

.bcfc-scroll-to-top.visible {
    opacity: 1;
    visibility: visible;
}

.bcfc-scroll-to-top:hover {
    transform: translateY(-2px);
}

/* ============================================
   PHOTOS & VIDEOS PAGE
   ============================================ */

.photos-videos-page {
    min-height: 50vh;
}

/* Photo & Video Cards */
.photo-video-card {
    display: block;
    text-decoration: none;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.photo-video-card:hover {
    transform: translateY(-4px);
}

.photo-card .aspect-[4\/3],
.video-card .aspect-video {
    position: relative;
}

/* Photo Gallery with ColorBox */
.photo-gallery-item {
    cursor: pointer;
}

/* Loading States */
.photo-video-card.loading {
    pointer-events: none;
    opacity: 0.6;
}

.photo-video-card.loading::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
    animation: shimmer 1.5s infinite;
}

@keyframes shimmer {
    0% { transform: translateX(-100%); }
    100% { transform: translateX(100%); }
}

/* Hidden Items for Filtering */
.photo-video-card.hidden {
    display: none;
}

/* No Results State */
.photos-videos-page .no-results {
    grid-column: 1 / -1;
    text-align: center;
    padding: 4rem 2rem;
}

/* Filter Form Styling */
#photos-videos-filter label {
    display: block;
    margin-bottom: 0.5rem;
    font-weight: 600;
}

#photos-videos-filter input,
#photos-videos-filter select {
    width: 100%;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

#photos-videos-filter input:focus,
#photos-videos-filter select:focus {
    border-color: #003b72;
    box-shadow: 0 0 0 3px rgba(0, 74, 152, 0.1);
}

/* Video Play Button Animation */
.video-card .play-button {
    transition: transform 0.3s ease;
}

.video-card:hover .play-button {
    transform: scale(1.1);
}

/* RTL Support for Photos & Videos Page */

/* ============================================
   PHOTO & VIDEO DETAIL PAGE
   ============================================ */

.photo-video-detail-page {
    min-height: 50vh;
}

/* Video Embed Container */
.photo-video-detail-page iframe {
    aspect-ratio: 16 / 9;
    width: 100%;
}

/* Related media thumbnails on detail page */
.photo-video-detail-page .related-media-thumb {
    aspect-ratio: 16 / 9;
    max-height: 220px;
}

@media (max-width: 768px) {
    .photo-video-detail-page .related-media-thumb {
        max-height: 190px;
    }
}

/* Transcript Section */
#transcript-toggle {
    cursor: pointer;
    user-select: none;
}

/* No `#transcript-icon.rotate-180 { transform: rotate(180deg) }` here: Tailwind ships
   `.rotate-180{rotate:180deg}`, and `rotate` COMPOSES with `transform` instead of
   overriding it, so this copy turned the caret a full 360deg and the toggle looked
   inert. Same cancellation as the Arabic breadcrumb chevron (see page-utilities.css). */

/* Gallery Grid Masonry Effect */
.photo-gallery-item {
    break-inside: avoid;
    margin-bottom: 0;
}

/* Lightbox/ColorBox Overrides */
#cboxOverlay {
    background: var(--bcfc-surface-inverse, rgba(0, 0, 0, 0.9));
}

#cboxContent {
    background: transparent;
    padding: 20px;
    border-radius: 8px;
}

#cboxLoadedContent {
    background: transparent;
}

#cboxTitle {
    color: #ffffff;
    font-family: 'Almarai', sans-serif;
    font-size: 1rem;
    padding: 12px 0 0;
}

#cboxCurrent {
    color: rgba(255, 255, 255, 0.7);
    font-size: 0.9375rem;
}

#cboxPrevious,
#cboxNext {
    width: 44px;
    height: 44px;
    background: rgba(255, 255, 255, 0.1);
    border-radius: 50%;
    transition: background 0.3s ease;
}

#cboxPrevious:hover,
#cboxNext:hover {
    background: rgba(255, 255, 255, 0.2);
}

#cboxClose {
    width: 40px;
    height: 40px;
    background: rgba(255, 255, 255, 0.1);
    border-radius: 50%;
    top: 10px;
    right: 10px;
    transition: background 0.3s ease;
}

#cboxClose:hover {
    background: rgba(255, 255, 255, 0.2);
}

/* RTL for ColorBox */

/* Share Button Animation */
#share-video-btn {
    transition: all 0.2s ease;
}

#share-video-btn:active {
    transform: scale(0.95);
}

/* Responsive Video Embed */
.video-responsive {
    position: relative;
    padding-bottom: 56.25%;
    height: 0;
    overflow: hidden;
}

.video-responsive iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

/* Hero layout overrides — moved from HomeHeroBanner.cshtml inline <style> */
.bcfc-home__hero-inner { grid-template-columns: minmax(0, 1fr); }
.bcfc-home__hero-copy { max-width: 640px; padding-inline-start: 0; padding-inline-end: auto; }

/*
  Tokens for this file's own utilities.

  These used to be declared as `--bcfc-*` on :root, which silently clobbered the
  canonical tokens from scss/_variables.scss for the WHOLE site — this file is bundled
  after style.css in bundle-main.css, so it won. That was a load-order accident, not a
  decision. Three of the overrides were never even used here, they only did damage:
    --bcfc-border      canonical #d9e4ef  was being overridden to #e5e7eb
    --bcfc-shadow-sm   canonical blue-tinted  was being flattened to grey
    --bcfc-shadow-lg   canonical blue-tinted  was being flattened to grey
  Those are removed, so the ~6 files that consume them now get the intended brand values.
  --bcfc-surface / --bcfc-surface-alt were declared but referenced nowhere; also removed.

  What's left below is renamed to a private --pu-* namespace so it cannot leak again.

  --bcfc-text-muted keeps its original name (bcfc-inline-partials.css, pages/Home.css and
  pages/GeneralPage.css read it) and is now defined in scss/_root.scss (UW-328).
*/

/* Private tokens, declared only on the rules in this file that read them. */
:where(body.bcfc-figma-theme, .prose,
       .bcfc-page-button--primary, .bcfc-page-button--secondary) {
  --pu-blue: #003b72;
  --pu-blue-dark: #003a7a;
  --pu-text: var(--bcfc-dark-ink, #111827);
}

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

html { font-size: 1rem; }

body.bcfc-figma-theme {
  margin: 0;
  color: var(--bcfc-ink, var(--pu-text));
  background: var(--bcfc-surface-raised, #fff);
  overflow-x: hidden;
}

body.bcfc-figma-theme img {
  max-width: 100%;
  display: block;
}

.main-content {
  padding-top: 0px;
}

body.bcfc-figma-theme .main-content {
  min-height: calc(100vh - 160px);
}

.container {
  width: min(1280px, calc(100% - 2rem));
  margin-inline: auto;
}

@media (width < 768px) {
  .container {
    width: calc(100% - 1.5rem);
  }
}

.min-h-screen { min-height: 100vh; }
.min-h-\[300px\] { min-height: 300px; }
.min-h-\[350px\] { min-height: 350px; }
.min-h-\[400px\] { min-height: 400px; }
.min-h-\[320px\] { min-height: 320px; }
.min-h-\[360px\] { min-height: 360px; }

.relative { position: relative; }
.absolute { position: absolute; }
.inset-0 { inset: 0; }
.top-0 { top: 0; }
.top-3 { top: 0.75rem; }
.right-0 { right: 0; }
.right-3 { right: 0.75rem; }
.bottom-0 { bottom: 0; }
.left-0 { left: 0; }
.z-10 { z-index: 10; }
.-bottom-20 { bottom: -5rem; }
.-left-20 { left: -5rem; }
.-right-16 { right: -4rem; }
.-top-16 { top: -4rem; }

.block { display: block; }
.inline-block { display: inline-block; }
.flex { display: flex; }
.inline-flex { display: inline-flex; }
.grid { display: grid; }
.flex-col { flex-direction: column; }
.flex-shrink-0 { flex-shrink: 0; }
.flex-wrap { flex-wrap: wrap; }
.items-center { align-items: center; }
.items-start { align-items: flex-start; }
.justify-center { justify-content: center; }
.justify-between { justify-content: space-between; }
.text-center { text-align: center; }
.text-left { text-align: left; }
.overflow-hidden { overflow: hidden; }
.list-none { list-style: none; }
.cursor-pointer { cursor: pointer; }
.object-cover { object-fit: cover; }
.whitespace-pre-line { white-space: pre-line; }

.w-5 { width: 1.25rem; }
.w-6 { width: 1.5rem; }
.w-8 { width: 2rem; }
.w-10 { width: 2.5rem; }
.w-12 { width: 3rem; }
.w-16 { width: 4rem; }
.w-20 { width: 5rem; }
.w-48 { width: 12rem; }
.w-56 { width: 14rem; }
.w-64 { width: 16rem; }
.w-full { width: 100%; }

.h-5 { height: 1.25rem; }
.h-6 { height: 1.5rem; }
.h-8 { height: 2rem; }
.h-10 { height: 2.5rem; }
.h-12 { height: 3rem; }
.h-16 { height: 4rem; }
.h-20 { height: 5rem; }
.h-48 { height: 12rem; }
.h-52 { height: 13rem; }
.h-56 { height: 14rem; }
.h-72 { height: 18rem; }
.h-64 { height: 16rem; }

.max-w-none { max-width: none; }
.max-w-2xl { max-width: 42rem; }
.max-w-3xl { max-width: 48rem; }
.max-w-4xl { max-width: 56rem; }
.max-w-5xl { max-width: 64rem; }
.max-w-6xl { max-width: 72rem; }
.max-w-7xl { max-width: 80rem; }
.mx-auto { margin-inline: auto; }

.p-3 { padding: 0.75rem; }
.p-6 { padding: 1.5rem; }
.p-8 { padding: 2rem; }
.px-2 { padding-inline: 0.5rem; }
.px-3 { padding-inline: 0.75rem; }
.px-4 { padding-inline: 1rem; }
.px-5 { padding-inline: 1.25rem; }
.px-6 { padding-inline: 1.5rem; }
.px-8 { padding-inline: 2rem; }
.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
.py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }
.py-4 { padding-top: 1rem; padding-bottom: 1rem; }
.py-12 { padding-top: 3rem; padding-bottom: 3rem; }
.py-16 { padding-top: 4rem; padding-bottom: 4rem; }
.pt-3 { padding-top: 0.75rem; }
.pt-4 { padding-top: 1rem; }
.pb-12 { padding-bottom: 3rem; }

.mt-1 { margin-top: 0.25rem; }
.mb-1 { margin-bottom: 0.25rem; }
.mb-2 { margin-bottom: 0.5rem; }
.mb-3 { margin-bottom: 0.75rem; }
.mb-4 { margin-bottom: 1rem; }
.mb-6 { margin-bottom: 1.5rem; }
.mb-8 { margin-bottom: 2rem; }
.mb-12 { margin-bottom: 3rem; }
.mt-2 { margin-top: 0.5rem; }
.mt-3 { margin-top: 0.75rem; }
.mt-4 { margin-top: 1rem; }
.mt-6 { margin-top: 1.5rem; }
.mt-8 { margin-top: 2rem; }
.mt-12 { margin-top: 3rem; }
.ml-2 { margin-left: 0.5rem; }
.mr-2 { margin-right: 0.5rem; }
.mx-2 { margin-inline: 0.5rem; }

.gap-3 { gap: 0.75rem; }
.gap-4 { gap: 1rem; }
.gap-6 { gap: 1.5rem; }
.gap-8 { gap: 2rem; }
.gap-10 { gap: 2.5rem; }
.gap-12 { gap: 3rem; }

.space-y-1 > * + * { margin-top: 0.25rem; }
.space-y-2 > * + * { margin-top: 0.5rem; }
.space-y-3 > * + * { margin-top: 0.75rem; }
.space-y-4 > * + * { margin-top: 1rem; }
.space-y-6 > * + * { margin-top: 1.5rem; }

.rounded { border-radius: 0.25rem; }
.rounded-lg { border-radius: 0.5rem; }
.rounded-xl { border-radius: 0.75rem; }
.rounded-2xl { border-radius: 1rem; }
.rounded-3xl { border-radius: 1.5rem; }
.rounded-full { border-radius: 9999px; }

.border { border: 1px solid #d1d5db; }
.border-2 { border: 2px solid currentColor; }
.border-t { border-top: 1px solid #e5e7eb; }
.border-gray-100 { border-color: #f3f4f6; }
.border-gray-200 { border-color: #e5e7eb; }
.border-gray-300 { border-color: #d1d5db; }
.border-white\/10 { border-color: rgba(255, 255, 255, 0.1); }
.border-white\/40 { border-color: rgba(255, 255, 255, 0.4); }
.border-\[\#003b72\] { border-color: #003b72; }

.shadow-sm { box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08); }
.shadow-lg { box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12); }
.shadow-xl { box-shadow: 0 22px 60px rgba(15, 23, 42, 0.18); }

.bg-white { background-color: var(--bcfc-surface-raised, #fff); }
.bg-black { background-color: var(--bcfc-surface-inverse, #000); }
.bg-gray-50 { background-color: var(--bcfc-surface-raised, #f8fafc); }
.bg-gray-100 { background-color: var(--bcfc-surface-sunken, #f1f5f9); }
.bg-blue-50 { background-color: var(--bcfc-surface-sunken, #eff6ff); }
.bg-blue-100 { background-color: #dbeafe; }
.bg-green-100 { background-color: #dcfce7; }
.bg-purple-100 { background-color: var(--bcfc-surface-sunken, #f3e8ff); }
.bg-yellow-100 { background-color: #fef3c7; }
.bg-yellow-500 { background-color: #eab308; }
.bg-\[\#003b72\] { background-color: #003b72; }
.bg-\[\#003b72\]\/10 { background-color: rgba(0, 74, 152, 0.1); }

.bg-gradient-to-br { background-image: linear-gradient(135deg, var(--tw-gradient-from, transparent), var(--tw-gradient-to, transparent)); }
.bg-gradient-to-t { background-image: linear-gradient(180deg, var(--tw-gradient-from, transparent), var(--tw-gradient-to, transparent)); }
.from-\[\#003b72\] { --tw-gradient-from: #003b72; }
.from-\[\#003b72\]\/10 { --tw-gradient-from: rgba(0, 74, 152, 0.1); }
.from-\[\#003b72\]\/20 { --tw-gradient-from: rgba(0, 74, 152, 0.2); }
.from-black\/20 { --tw-gradient-from: rgba(0, 0, 0, 0.2); }
.from-gray-900 { --tw-gradient-from: #111827; }
.to-\[\#0066c7\] { --tw-gradient-to: #0066c7; }
.to-\[\#0066c7\]\/10 { --tw-gradient-to: rgba(0, 102, 199, 0.1); }
.to-\[\#0066c7\]\/20 { --tw-gradient-to: rgba(0, 102, 199, 0.2); }
.to-gray-800 { --tw-gradient-to: #1f2937; }
.to-transparent { --tw-gradient-to: rgba(255, 255, 255, 0); }

.text-xs { font-size: 0.8125rem; }
.text-sm { font-size: 0.9375rem; }
.text-base { font-size: 1rem; }
.text-lg { font-size: 1.125rem; }
.text-xl { font-size: 1.25rem; }
.text-2xl { font-size: 1.5rem; }
.text-3xl { font-size: 1.875rem; }
.text-4xl { font-size: 2.25rem; }

.font-\[\'Almarai\'\] { font-family: "Almarai", "Segoe UI", Tahoma, sans-serif; }
.font-\[\'Nunito\'\] { font-family: "Almarai", "Segoe UI", Tahoma, sans-serif; }
.font-normal { font-weight: 400; }
.font-medium { font-weight: 500; }
.font-semibold { font-weight: 600; }
.font-bold { font-weight: 700; }
.font-extrabold { font-weight: 800; }
.leading-tight { line-height: 1.2; }
.leading-relaxed { line-height: 1.7; }
.uppercase { text-transform: uppercase; }
.tracking-wide { letter-spacing: 0.05em; }

.text-white { color: #fff; }
.text-white\/90 { color: rgba(255, 255, 255, 0.9); }
.text-black { color: var(--bcfc-ink, #000); }
.text-\[\#003b72\] { color: var(--bcfc-ink, #003b72); }
.text-\[\#003b72\]\/40 { color: rgba(0, 74, 152, 0.4); }
.text-\[\#53575a\] { color: var(--bcfc-ink, #53575a); }
.text-blue-600 { color: var(--bcfc-ink, #2563eb); }
.text-blue-800 { color: var(--bcfc-ink, #1e40af); }
.text-gray-300 { color: #d1d5db; }
.text-gray-200 { color: #e5e7eb; }
.text-gray-400 { color: #9ca3af; }
.text-gray-500 { color: var(--bcfc-ink, #6b7280); }
.text-gray-600 { color: var(--bcfc-ink, #4b5563); }
.text-gray-700 { color: var(--bcfc-ink, #374151); }
.text-gray-900 { color: var(--bcfc-ink, #111827); }
.text-green-600 { color: #16a34a; }
.text-purple-600 { color: var(--bcfc-dark-ink-brand, #9333ea); }
.text-yellow-300 { color: #fde047; }
.text-yellow-400 { color: #facc15; }
.text-yellow-800 { color: var(--bcfc-dark-ink-red, #854d0e); }

.opacity-10 { opacity: 0.1; }
.opacity-50 { opacity: 0.5; }
.opacity-90 { opacity: 0.9; }

.transition-all,
.transition-colors,
.transition-shadow,
.transition-transform {
  transition-duration: 300ms;
  transition-timing-function: ease;
}

.duration-300 { transition-duration: 300ms; }

.group:hover .group-hover\:scale-110 { transform: scale(1.1); }
.group:hover .group-hover\:text-\[\#003b72\] { color: var(--bcfc-ink-link-hover, #003b72); }

.hover\:bg-\[\#003a7a\]:hover { background-color: #003a7a; }
.hover\:bg-\[\#003b72\]:hover { background-color: #003b72; }
.hover\:bg-gray-50:hover { background-color: var(--bcfc-surface-raised, #f8fafc); }
.hover\:bg-gray-100:hover { background-color: var(--bcfc-surface-sunken, #f1f5f9); }
.hover\:border-blue-200:hover { border-color: #bfdbfe; }
.hover\:text-\[\#003b72\]:hover { color: var(--bcfc-ink-link-hover, #003b72); }
.hover\:text-blue-600:hover { color: var(--bcfc-ink-link-hover, #2563eb); }
.hover\:text-white:hover { color: #fff; }
.hover\:shadow-md:hover { box-shadow: 0 12px 30px rgba(15, 23, 42, 0.12); }
.hover\:shadow-xl:hover { box-shadow: 0 24px 70px rgba(15, 23, 42, 0.18); }

.focus\:border-transparent:focus { border-color: transparent; }
.focus\:ring-2:focus {
  outline: 0;
  box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
}
.focus\:ring-\[\#003b72\]:focus {
  outline: 0;
  box-shadow: 0 0 0 3px rgba(0, 74, 152, 0.18);
}

.prose p + p { margin-top: 1rem; }
.prose {
  color: var(--bcfc-ink, var(--bcfc-text-muted));
  line-height: 1.8;
}
.prose h1,
.prose h2,
.prose h3,
.prose h4 {
  color: var(--bcfc-ink-strong, var(--pu-text));
  font-family: "Almarai", "Segoe UI", Tahoma, sans-serif;
  line-height: 1.15;
  margin: 0 0 1rem;
}
.prose h2 { font-size: clamp(2rem, 4vw, 2.75rem); }
.prose h3 { font-size: clamp(1.4rem, 3vw, 1.9rem); }
.prose ul,
.prose ol {
  padding-left: 1.25rem;
  margin: 1rem 0;
}
.prose li + li {
  margin-top: 0.4rem;
}
.prose a {
  color: var(--bcfc-ink-link, var(--pu-blue));
  text-decoration: underline;
  text-decoration-thickness: 1px;
}
.prose-sm { font-size: 0.95rem; line-height: 1.65; }
.prose-lg { font-size: 1.05rem; }
.line-clamp-3 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

/* .rotate-180 is NOT declared here. tailwind.generated.css already ships
   `.rotate-180{rotate:180deg}` in every bundle, and `rotate` is an INDEPENDENT
   transform property that COMPOSES with `transform` rather than overriding it —
   so a second `transform: rotate(180deg)` here made the element turn 360deg and
   the flip vanished. That is what left the Arabic breadcrumb chevron pointing
   right on /ar (measured on beta 2026-09-15); the same cancellation silently hit
   every `isArabic ? "rotate-180"` chevron on the site. Do not re-add it. */
/* The four translate-1/2 utilities are NOT declared here either, for exactly the
   reason given above: Tailwind v4 compiles them to the standalone `translate`
   property (`--tw-translate-x:…; translate:var(--tw-translate-x) var(--tw-translate-y)`),
   which COMPOSES with `transform` instead of being overridden by it. A
   `transform: translateX(-50%)` copy here therefore moved the element a SECOND
   half-width and every `left-1/2 -translate-x-1/2` / `top-1/2 -translate-y-1/2`
   centring on the site landed a full element width/height off centre.

   Measured in a probe page against these two real stylesheets (400x200 box, 40x20
   element), offset of the element centre from the box centre:

     top-1/2 -translate-y-1/2    dY -10.0px  ->  0.0px
     left-1/2 -translate-x-1/2   dX -20.0px  ->  0.0px

   i.e. exactly one element height / width of error, removed. It also went UNNOTICED
   for so long because the error is asymmetric: an element carrying BOTH axes got two
   competing `transform` declarations from this file, the later one won outright, and
   so only ONE axis doubled (the decorative blur blobs on FAQ / Vision & Mission /
   Insurance / CTA / Stats / Features / Video were 20px out on x and correct on y).

   Same root cause as .rotate-180 above, and the same conclusion _PdfViewer.cshtml
   reached independently when its centred title could not be re-positioned from CSS.
   Do not re-add these. */

@media (min-width: 640px) {
  .sm\:flex-row { flex-direction: row; }
}

@media (min-width: 768px) {
  .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .md\:px-8 { padding-inline: 2rem; }
  .md\:text-3xl { font-size: 1.875rem; }
  .md\:text-4xl { font-size: 2.25rem; }
  .md\:text-lg { font-size: 1.125rem; }
}

@media (min-width: 1024px) {
  .lg\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .lg\:grid-cols-\[1\.1fr_\.9fr\] { grid-template-columns: 1.1fr 0.9fr; }
  .lg\:min-h-\[500px\] { min-height: 500px; }
  .lg\:px-16 { padding-inline: 4rem; }
  .lg\:text-5xl { font-size: 3rem; }
  .lg\:text-xl { font-size: 1.25rem; }
  .lg\:mb-6 { margin-bottom: 1.5rem; }
  .lg\:mb-8 { margin-bottom: 2rem; }
}

@media (min-width: 1280px) {
  .xl\:px-24 { padding-inline: 6rem; }
}

body.bcfc-figma-theme .nav-list,
body.bcfc-figma-theme .dropdown-menu,
body.bcfc-figma-theme .footer-links,
body.bcfc-figma-theme .legal-links {
  list-style: none;
  margin: 0;
  padding: 0;
}

body.bcfc-figma-theme .nav-list,
body.bcfc-figma-theme .footer-top,
body.bcfc-figma-theme .footer-bottom,
body.bcfc-figma-theme .legal-links {
  display: flex;
}

body.bcfc-figma-theme .footer-top {
  justify-content: space-between;
  align-items: flex-start;
  gap: 2rem;
}

body.bcfc-figma-theme .footer-bottom {
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  margin-top: 2rem;
  padding-top: 1.5rem;
  border-top: 1px solid rgba(255, 255, 255, 0.12);
}

body.bcfc-figma-theme .footer-brand,
body.bcfc-figma-theme .footer-section {
  min-width: 0;
}

body.bcfc-figma-theme .footer-links {
  display: grid;
  gap: 0.65rem;
}

body.bcfc-figma-theme .legal-links {
  gap: 1rem;
}

body.bcfc-figma-theme .content-wrapper,
body.bcfc-figma-theme .post-body {
  width: min(960px, 100%);
}

@media (width < 992px) {
  body.bcfc-figma-theme .footer-top,
  body.bcfc-figma-theme .footer-bottom {
    flex-direction: column;
  }
}

body.bcfc-figma-theme .main-content.bcfchomepage {
  background:
    radial-gradient(circle at top right, rgba(0, 74, 152, 0.12), transparent 28rem),
    linear-gradient(180deg, #f7fbff 0%, #ffffff 58%, #eef5fb 100%);
}

body.bcfc-figma-theme .bcfc-nav {
  background: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.82));
  border-bottom: 1px solid rgba(0, 74, 152, 0.08);
  box-shadow: 0 16px 40px rgba(15, 23, 42, 0.06);
}

body.bcfc-figma-theme .bcfc-nav .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

body.bcfc-figma-theme .bcfc-nav-main {
  min-width: 0;
}

body.bcfc-figma-theme .bcfc-nav .nav-list {
  gap: 0.35rem;
}

body.bcfc-figma-theme .bcfc-nav .nav-link {
  transition: background-color 180ms ease, color 180ms ease, transform 180ms ease;
}

body.bcfc-figma-theme .bcfc-nav .nav-link:hover {
  transform: translateY(-1px);
}

body.bcfc-figma-theme .bcfc-footer {
  margin-top: 2rem;
}









.bcfc-page-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: 2rem;
}

.bcfc-page-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 10.5rem;
  min-height: 3rem;
  padding: 0.85rem 1.35rem;
  border: 1px solid transparent;
  border-radius: 0.5rem;
  font-family: "Almarai", "Segoe UI", Tahoma, sans-serif;
  font-size: 0.96rem;
  font-weight: 700;
  line-height: 1.2;
  text-decoration: none;
  transition: transform 180ms ease, box-shadow 180ms ease, background-color 180ms ease, color 180ms ease, border-color 180ms ease;
}

.bcfc-page-button:hover {
  transform: translateY(-1px);
}

.bcfc-page-button:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(0, 74, 152, 0.18);
}

.bcfc-page-button--primary {
  background: var(--pu-blue);
  color: #fff;
  box-shadow: 0 12px 24px rgba(0, 74, 152, 0.18);
}

.bcfc-page-button--primary:hover {
  color: #fff;
  background: var(--pu-blue-dark);
  box-shadow: 0 16px 28px rgba(0, 74, 152, 0.22);
}

.bcfc-page-button--secondary {
  background: var(--bcfc-surface-raised, #fff);
  border: 1px solid rgba(0, 74, 152, 0.18);
  color: var(--bcfc-ink, var(--pu-blue));
  box-shadow: 0 6px 18px rgba(15, 23, 42, 0.06);
}

.bcfc-page-button--secondary:hover {
  color: var(--bcfc-dark-ink-brand, var(--pu-blue-dark));
  background: var(--bcfc-surface-raised, #fff);
  border-color: rgba(0, 74, 152, 0.34);
}

.bcfc-page-stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1rem;
  margin-top: 2.5rem;
}

.bcfc-page-stat {
  padding: 1.1rem 1.15rem;
  border: 1px solid rgba(0, 74, 152, 0.1);
  border-radius: 1.4rem;
  background: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.72));
  backdrop-filter: blur(12px);
  box-shadow: 0 16px 30px rgba(15, 23, 42, 0.06);
}

.bcfc-page-stat strong,
.bcfc-page-stat span {
  display: block;
}

.bcfc-page-stat strong {
  color: var(--bcfc-ink, #071b33);
  font-family: "Almarai", "Segoe UI", Tahoma, sans-serif;
  font-size: 1.7rem;
  font-weight: 800;
  line-height: 1;
}

.bcfc-page-stat span {
  margin-top: 0.45rem;
  color: var(--bcfc-ink, var(--bcfc-text-muted));
  font-size: 0.9925rem;
  line-height: 1.5;
}


.bcfc-finance-card {
  position: relative;
  padding: 1.75rem;
  border: 1px solid rgba(0, 74, 152, 0.12);
  border-radius: 1.75rem;
  background:
    linear-gradient(180deg, var(--bcfc-surface-raised, rgba(255, 255, 255, 0.98)) 0%, var(--bcfc-surface-raised, rgba(245, 250, 255, 0.96)) 100%);
  box-shadow: 0 24px 60px rgba(8, 33, 64, 0.14);
  overflow: hidden;
}

.bcfc-finance-card::after {
  content: "";
  position: absolute;
  inset: auto -2rem -2rem auto;
  width: 9rem;
  height: 9rem;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 191, 71, 0.26), transparent 68%);
  pointer-events: none;
}

.bcfc-finance-card__header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
}

.bcfc-finance-card__header strong {
  color: var(--bcfc-ink, #071b33);
  font-family: "Almarai", "Segoe UI", Tahoma, sans-serif;
  font-size: clamp(1.8rem, 4vw, 2.6rem);
  font-weight: 800;
  line-height: 1;
}

.bcfc-finance-card__details {
  display: grid;
  gap: 0.9rem;
  margin: 1.5rem 0 0;
}

.bcfc-finance-card__details div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding-bottom: 0.8rem;
  border-bottom: 1px solid rgba(0, 74, 152, 0.08);
}

.bcfc-finance-card__details dt,
.bcfc-finance-card__details dd {
  margin: 0;
}

.bcfc-finance-card__details dt {
  color: var(--bcfc-ink, var(--bcfc-text-muted));
  font-size: 0.9825rem;
}

.bcfc-finance-card__details dd {
  color: var(--bcfc-ink, #071b33);
  font-family: "Almarai", "Segoe UI", Tahoma, sans-serif;
  font-size: 0.98rem;
  font-weight: 800;
  text-align: end;
}

.bcfc-finance-card__progress {
  margin-top: 1.4rem;
}

.bcfc-finance-card__empty {
  margin-top: 1.35rem;
  padding: 1.1rem 1.15rem;
  border: 1px dashed rgba(0, 74, 152, 0.18);
  border-radius: 1.2rem;
  background: rgba(0, 74, 152, 0.03);
}

.bcfc-finance-card__empty p {
  margin: 0;
  color: var(--bcfc-ink, var(--bcfc-text-muted));
  line-height: 1.8;
}

.bcfc-finance-card__progress-meta {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 0.55rem;
  color: var(--bcfc-ink-muted, var(--bcfc-text-muted));
  font-size: 0.9625rem;
}

.bcfc-finance-card__progress-track {
  height: 0.8rem;
  border-radius: 999px;
  background: rgba(0, 74, 152, 0.1);
  overflow: hidden;
}

.bcfc-finance-card__progress-bar {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, #ffbf47 0%, #0066c7 100%);
}

.bcfc-page-section {
  padding: 1rem 0 5rem;
}

.bcfc-page-section .content-wrapper {
  padding: 2rem 2.2rem;
  border: 1px solid rgba(0, 74, 152, 0.08);
  border-radius: 1.75rem;
  background: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.82));
  box-shadow: 0 20px 50px rgba(15, 23, 42, 0.08);
}

/* Two orphan `body.bcfc-figma-theme` selector lines sat here with no declaration block. A
   selector with no `{` does not end — it keeps consuming until it finds one, so the two lines
   and the `@media` below them were read as ONE selector and the media query's entire body
   became that bogus rule's block. Every rule inside it was dead. Deleted; the @media now opens
   on its own. */
@media (width < 992px) {
  body.bcfc-figma-theme .bcfc-nav .container,
  body.bcfc-figma-theme .bcfc-nav-main {
    align-items: flex-start;
  }



  .bcfc-page-stats {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (width < 768px) {

  .bcfc-page-stats {
    grid-template-columns: 1fr;
  }

  .bcfc-page-button {
    width: 100%;
  }

  .bcfc-finance-card,
  .bcfc-page-section .content-wrapper {
    padding: 1.35rem;
  }
}

.umb-block-grid__layout-container {
  position: relative;
  display: grid;
  grid-template-columns: repeat(var(--umb-block-grid--grid-columns, 1), minmax(0, 1fr));
  grid-auto-flow: row;
  grid-auto-rows: minmax(20px, min-content);
  column-gap: 20px;
  row-gap: var(--umb-block-grid--row-gap, 0);
}

.umb-block-grid__layout-item {
  position: relative;
  /* For small devices we scale columnSpan by three, to make everything bigger than 1/3 take full width: */
  grid-column-end: span min(calc(var(--umb-block-grid--item-column-span, 1) * 3), var(--umb-block-grid--grid-columns));
  grid-row: span var(--umb-block-grid--item-row-span, 1);
}

.umb-block-grid__layout-item .umb-block-grid__block--view .umb-block-grid__layout-item {
  margin-bottom: 20px;
}

.umb-block-grid__layout-container .umb-block-grid__layout-container .umb-block-grid__layout-item {
  margin-bottom: 20px;
}

@media (max-width: 768px) {
  .umb-block-grid__layout-item {
    grid-column-end: span min(calc(var(--umb-block-grid--item-column-span, 1) * 12), var(--umb-block-grid--grid-columns));
  }
}

.umb-block-grid__area-container,
.umb-block-grid__block--view::part(area-container) {
  position: relative;
  display: grid;
  grid-template-columns: repeat(var(--umb-block-grid--area-grid-columns, var(--umb-block-grid--grid-columns, 1)), minmax(0, 1fr));
  grid-auto-flow: row;
  grid-auto-rows: minmax(50px, min-content);
  column-gap: var(--umb-block-grid--areas-column-gap, 0);
  row-gap: var(--umb-block-grid--areas-row-gap, 0);
}

.umb-block-grid__area {
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  /* For small devices we scale columnSpan by three, to make everything bigger than 1/3 take full width: */
  grid-column-end: span min(calc(var(--umb-block-grid--area-column-span, 1) * 3), var(--umb-block-grid--grid-columns));
  grid-row: span var(--umb-block-grid--area-row-span, 1);
}

@media (min-width: 1024px) {
  .umb-block-grid__layout-item {
    grid-column-end: span min(var(--umb-block-grid--item-column-span, 1), var(--umb-block-grid--grid-columns));
  }

  .umb-block-grid__area {
    grid-column-end: span var(--umb-block-grid--area-column-span, 1);
  }
}

/**** Custom additions to the default Grid Layout Stylehseet: ****/

/* additional CSS options for area-container and areas: */
.umb-block-grid__area-container,
.umb-block-grid__block--view::part(area-container) {
  max-width: var(--my-container-max-width);
  padding: var(--my-container-padding);
  margin-inline: auto;
  --umb-block-grid--areas-column-gap: 20px;
  --umb-block-grid--areas-row-gap: 20px;
}

/* .umb-block-grid__area {
  justify-content: center;
} */

.umb-block-grid__layout-item[data-content-element-type-alias="oneColumnSectionBlock"] .umb-block-grid__layout-container {
  --umb-block-grid--column-gap: 20px;
  --umb-block-grid--row-gap: 0;
}

@media (max-width: 992px) {
  .umb-block-grid__layout-item[data-content-element-type-alias="oneColumnSectionBlock"] .umb-block-grid__layout-container {
    --umb-block-grid--row-gap: 20px;
  }
}

/**** My custom website styles: ****/

:root,
:host,
body {
  /* font-family: "Lato";
  font-weight: 500; */
  /* font-size: 16px;
  line-height: 1.5;
  margin: 0; */
}

.umb-block-grid {
  container-type: inline-size;
  --my-container-max-width: 1320px;
  --my-container-padding: 0 calc(1.5rem * 0.5);
}
/* @container (min-width: 720px) {
  .umb-block-grid__layout-container {
    --my-container-padding: 0 60px;
  }
} */

/* No blanket `padding: var(--section-padding, 60px 0)` here — this was the twin of the rule
   removed from index.css. Between them, every <section> site-wide got 60-80px of vertical
   padding it never asked for, and page stylesheets had grown local padding-block:0 workarounds
   (ImtiazCardDetail, IrLanding, IrAnnualReport, IrArchive, IrSustainability). A section that
   wants band padding sets --section-padding or declares its own. */
section {
  background-position: 50% 50%;
  background-size: cover;
}
section[bright-contrast] {
  color: white;
  --my-bright-contrast: ;
  --has-bright-contrast: white;
}

/** only works on website. */
.umb-block-grid__layout-item:has(section[nobackgroundcolor]) + .umb-block-grid__layout-item section[nobackgroundcolor] {
  padding-top: 0;
}

/** Image */

img.image {
  object-fit: cover;
  height: 100%;
  width: 100%;
}

/** Rich Text */

.rich-text {
  color: inherit;
}

.rich-text > p:first-child {
  margin-top: 0;
}

/** Hero */

.umb-block-grid__layout-item[data-content-element-type-alias="heroBlock"] .umb-block-grid__area-container,
.umb-block-grid__layout-item[data-content-element-type-alias="heroBlock"] .umb-block-grid__block--view::part(area-container) {
  padding: 0;
}

.hero {
  position: relative;
  min-height: 80vh;
  width: 100%;
  display: flex;
  align-items: end;
  padding: 60px 0;
  box-sizing: border-box;
}
.hero[bright-contrast] {
  color: white;
  --my-bright-contrast: ;
  --has-bright-contrast: white;
}

.hero .hero-background {
  position: absolute;
  inset: 0;
  background-position: 50% 50%;
  background-size: cover;
}

.hero .hero-content {
  position: relative;
  width: 100%;
  max-width: var(--my-container-max-width);
  padding: var(--my-container-padding);
  margin-inline: auto;
}

.hero .hero-content > h1 {
  max-width: 14em;
}

/** Call to action */

.call-to-action {
  display: inline-block;
  --call-to-action--background-color--condition: var(--my-bright-contrast) white;
  background-color: var(--call-to-action--background-color--condition, #3544b1);
  --call-to-action--text-color--condition: var(--my-bright-contrast) black;
  color: var(--call-to-action--text-color--condition, white);
  font-weight: 500;
  padding: 14px 28px;
  margin-top: 10px;
  margin-bottom: 10px;
  margin-right: auto;
  max-width: 180px;
  text-decoration: none;
}

/** Inspiration */

.inspiration[bright-contrast] {
  --my-bright-contrast: ;
  --has-bright-contrast: white;
}

.inspiration .area-container {
  max-width: var(--my-container-max-width);
  padding: var(--my-container-padding);
  margin-left: auto;
  margin-right: auto;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  grid-auto-flow: row;
  /* `gap: 10px` below already sets the column gap; the `column-gap: 10px` that used to sit here
     was overridden by it on the next line and never applied. */
  gap: 10px;
}

@media (min-width: 768px) {
  .inspiration .area-container {
    max-width: var(--my-container-max-width);
    padding: var(--my-container-padding);
    margin-inline: auto;
    display: grid;
    grid-template-columns: 3fr 3fr 3fr;
    grid-template-rows: 4fr repeat(3, 2fr);
    grid-template-areas:
      "left-1 right-1-1 right-1-2"
      "left-2 right-1-1 right-1-2"
      "left-2 right-2 right-2"
      "left-2 right-2 right-2";
    height: 100vh;
  }

  .left-1 {
    grid-area: left-1;
  }

  .left-2 {
    grid-area: left-2;
  }

  .right-1-1 {
    grid-area: right-1-1;
  }

  .right-1-2 {
    grid-area: right-1-2;
  }

  .right-2 {
    grid-area: right-2;
  }
}

@media (max-width: 768px) {
  .inspiration .area-container {
    grid-template-columns: 1fr 1fr;
    grid-template-areas:
      "left-1 right-1"
      "left-2 right-2"
      "full-width full-width";
  }

  .left-1,
  .left-2,
  .right-1-1,
  .right-1-2,
  .right-2 {
    padding-bottom: 50%;
  }
}

@media (max-width: 768px) {
  .inspiration .right-2 {
    grid-area: full-width;
  }
}

/* .inspiration .left-area {
  grid-column-end: span 1;
  display: block;
  margin-bottom: 60px;
} */

.inspiration .right-area {
  grid-column-end: span 1;
  display: block;
  margin-top: 60px;
  margin-right: -120px;
  transform: translateX(-120px);
}

.inspiration .content-area {
  grid-column-end: span 2;
  display: block;
}

.umb-block-grid__layout-item[data-content-element-type-alias="inspirationBlock"] .umb-block-grid__area[data-area-alias="leftArea"] {
  justify-content: start;
}

.umb-block-grid__layout-item[data-content-element-type-alias="inspirationBlock"] .umb-block-grid__area[data-area-alias="rightArea"] {
  justify-content: end;
}

/* Card */

.card {
  display: flex;
  flex-direction: column;
  height: 100%;
  color: var(--bcfc-ink, black);
  background-color: var(--bcfc-surface-raised, white);
}

.card .card-media {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
}

.card .card-media img {
  object-fit: cover;
  height: 100%;
  width: 100%;
}

.card .card-content {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 20px;
  font-weight: 300;
}

.card .card-content p {
  margin: 0;
}

.card.--medium {
  height: auto;
}

.card.--medium .card-media::after {
  content: "";
  position: absolute;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.22);
  pointer-events: none;
}

.card.--medium .card-content {
  position: absolute;
  z-index: 1;
  bottom: 0;
  color: white;
}

.card.--medium .card-content h4 {
  font-size: 1.875rem;
}

.umb-block-grid__area-actions > button {
  color: var(--bcfc-ink, #1b264f) !important;
  background: var(--bcfc-surface-raised, white);
}

.license-message {
  /* `display: table` used to be here and was overridden by the `display: flex` further down this
     same block, so it never applied. */
  width: 100%;
  height: calc(100% + 32px);
  position: absolute;
  top: 0;
  left: 0;
  z-index: 10;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #dadadab2;
}

.license-message .license-block {
  width: 100%;
  max-width: 900px;
  padding: 20px;
  display: flex;
  flex-direction: column;
  align-items: center;
  background: var(--bcfc-surface-raised, white);
}

.license-message .license-block .img-holder {
  margin-bottom: 23px;
  max-width: 120px;
}

.license-message .license-block .img-holder img {
  width: 100%;
  height: auto;
}

.license-message .license-block h3 {
  margin-top: 0;
  margin-bottom: 0;
  font-weight: 500;
  font-size: 1.3125rem;
  line-height: 1.2;
}

.license-message .license-block p {
  margin-top: -10px;
}

.license-message .license-block .content-holder {
  max-width: 390px;
  text-align: center;
  color: var(--bcfc-ink, black);
  font-size: 1rem;
}

.license-message .license-block .btn-activate {
  display: inline-block;
  min-width: 105px;
  padding: 15px 26px;
  font-size: 1.125rem;
  color: white;
  background: #1c274e;
  text-decoration: none;
  border-radius: 4px;
}

@charset "UTF-8";
/* THE SITE'S CONTENT COLUMN, as a token — added 2026-09-03 so a page sheet can line its own
   bands up with the shared bands instead of guessing. It was a bare literal here, and the pages
   that needed to match it hardcoded their own: /en/loyalty-programme/ shipped 1120px in one sheet
   and 1200px in another, so its bands sat 64px narrower than the Related Pages band immediately
   below them. Declared on :root, not on the class, so a caller that is not inside a
   .bcfc-pattern-shell can still read it. */
:root {
  --bcfc-shell-max: 80rem;
}

.bcfc-pattern-shell {
  max-width: var(--bcfc-shell-max, 80rem);
  margin: 0 auto;
  padding-inline: 1rem;
}

/* ============================================================
   Back-to-listing link (Shared/_BackLink.cshtml). Promoted from the Loyalty V2 detail
   page's .lofd-crumb, which used page-scoped --lofd-blue/--lofd-red variables that only
   resolved on pages loading LoyaltyOfferDetailV2.css. This rule uses the site-wide tokens
   directly so the component works on any page, and lives in this file because it's part
   of the global bundle-main(.css|-rtl.css) — see Program.cs.
   ============================================================ */
.bcfc-back-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 20px;
  color: var(--bcfc-ink-link, var(--bcfc-blue, #004a98));
  font-weight: 800;
  font-size: 0.90625rem;
  text-decoration: none;
  transition: gap 0.25s ease, color 0.25s ease;
}

.bcfc-back-link:hover {
  gap: 12px;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-blue, #004a98));
}

.bcfc-back-link svg {
  width: 17px;
  height: 17px;
  flex-shrink: 0;
}

[dir=rtl] .bcfc-back-link svg {
  transform: scaleX(-1);
}

.bcfc-pattern-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  min-height: 2.875rem;
  padding: 0.75rem 1.125rem;
  border: 1px solid transparent;
  border-radius: 0.5rem;
  font-family: Almarai, sans-serif;
  font-weight: 700;
  font-size: 0.95rem;
  line-height: 1.2;
  text-decoration: none;
  box-shadow: 0 6px 18px rgba(7, 27, 51, 0.08);
  transition: transform 0.2s ease, background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}

.bcfc-pattern-button:hover {
  transform: translateY(-1px);
  box-shadow: 0 10px 22px rgba(7, 27, 51, 0.12);
}

.bcfc-pattern-button:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(0, 74, 152, 0.18);
}

/* --bcfc-primary-darker IS DEFINED IN NO STYLESHEET IN THIS REPO, so the hover below was an
   invalid declaration the parser dropped and the primary pattern button had NO hover colour at
   all. That is the bug pages were locally patching — RealEstateHubV3.css restates this hover for
   its own scope and says so. Fixed here with the button tokens, so the patch can go and the
   hover recolours fill AND ink together instead of leaving the label behind. */
.bcfc-pattern-button--primary {
  background: var(--bcfc-btn-fill, var(--bcfc-color-primary));
  color: var(--bcfc-btn-ink, var(--bcfc-color-white));
}

/* FOLLOWS THE SHARED BUTTON, whatever it is doing — this rule reads the `--bcfc-btn-*-hover`
   tokens, so it tracked bcfc-button.css from a fill darkening (pre-2026-09-06) to the inversion
   (2026-09-06) and now back to a deepened fill with the label left alone (2026-09-07, owner: *"if
   background is not white the text cannot be black so it should be white"*). Nothing here needs to
   change again if the shared hover changes.
   The LITERAL FALLBACKS are what needed the edit: they are only reached if bcfc-button.css did not
   load, and they described the inversion — a transparent face with navy ink, i.e. the state the
   amendment rules out. They now mirror the token values. `.bcfc-pattern-button` reserves
   `1px solid transparent`, so the border colour moves with the fill and nothing reflows. */
.bcfc-pattern-button--primary:hover,
.bcfc-pattern-button--primary:focus-visible {
  background: var(--bcfc-btn-fill-hover, color-mix(in srgb, var(--bcfc-color-primary) 86%, black));
  color: var(--bcfc-btn-ink-hover, var(--bcfc-color-white, #fff));
  border-color: var(--bcfc-btn-border-hover, transparent);
  box-shadow: none;
}

.bcfc-pattern-button--secondary {
  border: 1px solid #cbd5e1;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white));
  color: var(--bcfc-text-dark);
  box-shadow: none;
}

.bcfc-pattern-button--secondary:hover {
  background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
  border-color: #9fc2eb;
}

.bcfc-pattern-hero {
  padding: 2.5rem 0 3rem;
}

.bcfc-pattern-hero__grid {
  display: grid;
  gap: 2rem;
  align-items: center;
  padding: 2rem;
  border-radius: 2rem;
  background: linear-gradient(135deg, var(--bcfc-surface-sunken, #eef5ff) 0%, var(--bcfc-surface-raised, #f8fbff) 100%);
}

.bcfc-pattern-hero__title {
  margin: 0;
  color: var(--bcfc-text-dark);
  font-family: Almarai, sans-serif;
  font-size: clamp(2rem, 4vw, 3.25rem);
  font-weight: 800;
  line-height: 1.15;
}

.bcfc-pattern-hero__subtitle {
  margin: 1rem 0 0;
  max-width: 44rem;
  color: var(--bcfc-text-secondary);
  font-size: 1.0625rem;
  line-height: 1.8;
}

.bcfc-pattern-hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-top: 1.5rem;
}

.bcfc-pattern-hero__media {
  overflow: hidden;
  border-radius: 1.5rem;
  background: var(--bcfc-surface-muted, var(--bcfc-gray-200));
  box-shadow: 0 20px 40px rgba(7, 27, 51, 0.12);
}

.bcfc-pattern-hero__media img {
  display: block;
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
}

.bcfc-pattern-section-intro {
  margin-bottom: 1.5rem;
}

.bcfc-pattern-section-intro--centered {
  text-align: center;
}

.bcfc-pattern-section-intro__title {
  margin: 0;
  color: var(--bcfc-text-dark);
  font-family: Almarai, sans-serif;
  font-size: clamp(1.75rem, 2vw, 2.5rem);
  font-weight: 800;
  line-height: 1.2;
  text-transform: capitalize;
}

.bcfc-pattern-section-intro__summary {
  margin: 0.875rem 0 0;
  max-width: 52rem;
  color: var(--bcfc-text-secondary);
  line-height: 1.85;
}

.bcfc-pattern-section-intro--centered .bcfc-pattern-section-intro__summary {
  margin-inline: auto;
}

.bcfc-pattern-links-grid__items {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}

.bcfc-pattern-links-grid__item {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  min-height: 100%;
  padding: 1.25rem 1.375rem;
  border: 1px solid var(--bcfc-border);
  border-radius: 1.25rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white));
  color: var(--bcfc-text-dark);
  text-decoration: none;
  box-shadow: 0 8px 22px rgba(7, 27, 51, 0.06);
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

.bcfc-pattern-links-grid__item:hover {
  transform: translateY(-2px);
  border-color: #9fc2eb;
  box-shadow: 0 16px 30px rgba(7, 27, 51, 0.1);
}

.bcfc-pattern-links-grid__item h3 {
  margin: 0;
  font-size: 1.0625rem;
  font-weight: 800;
}

.bcfc-pattern-links-grid__item p {
  margin: 0.5rem 0 0;
  color: var(--bcfc-text-secondary);
  line-height: 1.7;
}

.bcfc-pattern-links-grid__item i {
  margin-top: 0.125rem;
  color: var(--bcfc-ink-link, var(--bcfc-color-primary));
  font-size: 1.25rem;
}

.bcfc-pattern-toolbar {
  margin-bottom: 1.5rem;
}

.bcfc-pattern-toolbar__row {
  display: grid;
  gap: 1rem;
  align-items: center;
}

.bcfc-pattern-toolbar__heading {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.bcfc-pattern-toolbar__heading h2 {
  margin: 0;
  color: var(--bcfc-text-dark);
  font-family: Almarai, sans-serif;
  font-size: 1.75rem;
  font-weight: 800;
}

.bcfc-pattern-toolbar__count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.25rem;
  min-height: 2.25rem;
  padding: 0.125rem 0.75rem;
  border-radius: 999px;
  background: var(--bcfc-blue-light);
  color: var(--bcfc-ink, var(--bcfc-color-primary));
  font-size: 0.9375rem;
  font-weight: 700;
}

.bcfc-pattern-toolbar__sort {
  width: 100%;
  max-width: 22rem;
  justify-self: end;
}

.bcfc-pattern-toolbar__sort label {
  display: block;
  margin-bottom: 0.5rem;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--bcfc-dark-ink, var(--bcfc-gray-800));
}

.bcfc-pattern-toolbar__sort select {
  width: 100%;
  min-height: 3.5rem;
  padding: 0.9rem 1rem;
  border: 1px solid var(--bcfc-gray-300);
  border-radius: 0.875rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white));
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-pattern-support {
  margin-top: 2rem;
}

.bcfc-pattern-support__card {
  display: grid;
  grid-template-columns: 1fr;
  border-radius: 1.25rem;
  background: linear-gradient(120deg, var(--bcfc-surface-sunken, #eaf3ff) 0%, var(--bcfc-surface-raised, #dce9fb) 100%);
  border: 1px solid rgba(0, 74, 152, 0.14);
  overflow: hidden;
}

.bcfc-pattern-support__content {
  order: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 1.5rem;
  padding: 2.25rem 2rem;
}

.bcfc-pattern-support__media {
  order: -1;
  position: relative;
  aspect-ratio: 16/9;
  background: var(--bcfc-surface-muted, var(--bcfc-gray-200, #e2e8f0));
}

.bcfc-pattern-support__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.bcfc-pattern-support__copy h2 {
  margin: 0;
  color: var(--bcfc-text-dark);
  font-family: Almarai, sans-serif;
  font-size: clamp(1.75rem, 2.4vw, 2.5rem);
  font-weight: 800;
  letter-spacing: -0.01em;
  line-height: 1.15;
}

.bcfc-pattern-support__copy p {
  margin: 0.875rem 0 0;
  max-width: 32rem;
  color: var(--bcfc-text-secondary);
  line-height: 1.8;
}

.bcfc-pattern-support__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
}

.bcfc-pattern-support__actions .bcfc-pattern-button {
  min-height: 2.875rem;
  padding: 0.75rem 1.375rem;
  font-size: 0.9625rem;
}

.bcfc-pattern-support__actions .bcfc-pattern-button:hover {
  transform: translateY(-2px);
}

.bcfc-pattern-support__actions .bcfc-pattern-button i {
  font-size: 1rem;
}

.bcfc-pattern-page-meta {
  /* Themeable accent — blue by default, Islamic green under body.is-islamic */
  --pm-accent: var(--bcfc-primary, #004a98);
  --pm-tint: var(--bcfc-surface-sunken, #eff6ff);
  margin-top: 2rem;
}

body.is-islamic .bcfc-pattern-page-meta {
  --pm-accent: var(--bcfc-green-dark, #113e35);
  --pm-tint: var(--bcfc-surface-sunken, #eef6f2);
}

.bcfc-footer-meta-section {
  padding: 0;
}

.bcfc-footer-meta-section .bcfc-pattern-page-meta {
  margin-top: 0;
  padding-top: 1.75rem;
  padding-bottom: 1.5rem;
  border-top: 1px solid #e2e8f0;
}

.bcfc-pattern-page-meta__divider {
  display: none;
}

.bcfc-pattern-page-meta__row {
  display: grid;
  gap: 1rem;
  justify-items: center;
}

.bcfc-pattern-page-meta__share {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
}

.bcfc-pattern-page-meta__title {
  font-weight: 700;
  color: var(--bcfc-text-dark);
}

.bcfc-pattern-page-meta__list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.bcfc-pattern-page-meta__list a,
.bcfc-pattern-page-meta__list button {
  width: 2.5rem;
  height: 2.5rem;
  border: 1px solid var(--bcfc-gray-300);
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* --pm-accent FIRST, not as the fallback. This read used to be
       `var(--bcfc-ink-link, var(--pm-accent))`, which looks like "the accent, unless a surface
       overrides it" and behaves as the opposite: bcfc-surface-map.css declares --bcfc-ink-link on
       a long list of legacy wrappers - .bcfc-meta-utilitybar__card among them - so on any page
       inside one the fallback NEVER fired and the icons took brand blue. That is why they stayed
       blue on the Islamic pages while this band's own `body.is-islamic` rule below was correctly
       turning --pm-accent green: the intent was in the file, the token order defeated it. Same
       shape as the "fallback passed as an argument" trap in CLAUDE.md.
       Non-Islamic output is UNCHANGED - --pm-accent defaults to --bcfc-primary, the same #004a98
       the surface token was resolving to. */
  color: var(--bcfc-dark-ink-green, var(--pm-accent));
  text-decoration: none;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white));
  cursor: pointer;
  padding: 0;
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, transform 0.2s ease;
}

.bcfc-pattern-page-meta__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1rem;
  height: 1rem;
  line-height: 1;
}

.bcfc-pattern-page-meta__badge svg {
  width: 1rem;
  height: 1rem;
}

.bcfc-pattern-page-meta__list a:hover,
.bcfc-pattern-page-meta__list button:hover {
  background: var(--pm-accent);
  border-color: var(--pm-accent);
  color: var(--bcfc-color-white);
  transform: translateY(-2px);
}

.bcfc-pattern-page-meta__list button[data-copied=true] {
  background: var(--pm-tint);
  border-color: var(--pm-accent);
  color: var(--bcfc-ink-muted, var(--pm-accent));
}

/* ---------------------------------------------------------------------------
   DARK THEME: keep the ACCENT, lifted.                        (phase 5 exception)

   `color: var(--bcfc-ink-muted, var(--pm-accent))` reads as "the accent, unless a
   surface overrides it". In DARK mode bcfc-theme-dark.css defines the ink tokens at
   the root, so the ink always wins and the accent is never seen — the element goes
   generic ink and loses its identity. (Legible, just wrong; see section 3.8 of
   docs/design-system/08-surface-vocabulary.md, which lists this as one of four.)

   Fixed by overriding the DECLARATION under the theme attribute rather than by
   reordering the chain. Reordering is the house fix for this shape — see the long
   note on .bcfc-pattern-page-meta__list in bcfc-page-patterns.css — but it only
   works when the accent and the ink resolve to the same colour anyway, and --pm-accent
   is not brand blue.

   `color-mix` with `white`, NOT a hardcoded lift, because --pm-accent is CONTEXTUAL:
   it is brand blue by default, --bcfc-green-dark on the Islamic pages and
   --sahel-chrome-accent on Sahel. Mixing lifts whatever it resolves to in that
   scope. 65% was measured: at 55% the Sahel green lands at 4.13:1 on
   --bcfc-surface-inverse, below AA. At 65% every accent in the estate clears AA on
   every tier (worst 5.36:1).

   `white` rather than #ffffff on purpose — a raw hex here would raise this file's
   frozen count in gate 8 for no reason.

   Light mode cannot reach this rule: the attribute is absent, so the selector does
   not match. --------------------------------------------------------------------- */
:root[data-bcfc-theme=dark] .bcfc-pattern-page-meta__list button[data-copied=true] {
  color: color-mix(in srgb, white 65%, var(--pm-accent));
}

.bcfc-pattern-page-meta__list a:focus-visible,
.bcfc-pattern-page-meta__list button:focus-visible {
  outline: 2px solid var(--pm-accent);
  outline-offset: 2px;
}

.bcfc-pattern-page-meta__updated {
  display: flex;
  align-items: center;
}

.bcfc-pattern-page-meta__updated p {
  margin: 0;
  color: var(--bcfc-text-secondary);
}

.bcfc-pattern-page-meta__updated b {
  color: var(--bcfc-text-dark);
}

/* ========================================
   Combined utility bar
   Merges "Was this page helpful?" (_PageFeedback) and "Share this page"
   (_PageMeta) into ONE card so they read as a single unit above the footer.
   Both partials keep their own markup/classes/data-attrs (and JS) — these
   rules just flatten their individual card/shell chrome and lay them side by
   side. Scoped to .bcfc-meta-utilitybar so each partial is unchanged if it is
   ever rendered standalone elsewhere.
   ======================================== */
.bcfc-meta-utilitybar {
  padding: 1.75rem 0 2rem;
}

.bcfc-meta-utilitybar__card {
  --ub-surface: var(--bcfc-surface-sunken, #f5f9ff);
  --ub-border: rgba(0, 74, 152, 0.14);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1.1rem 2rem;
  max-width: 60rem;
  margin-inline: auto;
  padding: 1.15rem 1.6rem;
  border: 1px solid var(--ub-border);
  border-radius: 1.1rem;
  background: var(--ub-surface);
}

body.is-islamic .bcfc-meta-utilitybar__card {
  --ub-surface: var(--bcfc-surface-sunken, #f0f7f4);
  --ub-border: rgba(17, 62, 53, 0.16);
}

/* Strip each partial's own section spacing, nested shell, inner card and
   divider — the utility-bar card owns all of that now. */
.bcfc-meta-utilitybar .bcfc-pattern-page-feedback,
.bcfc-meta-utilitybar .bcfc-pattern-page-meta {
  padding: 0;
  margin: 0;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-feedback {
  flex: 1 1 260px;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-meta {
  position: relative;
  flex: 0 1 auto;
  border-top: none;
  padding-inline-start: 2rem;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-feedback .bcfc-pattern-shell,
.bcfc-meta-utilitybar .bcfc-pattern-page-meta .bcfc-pattern-shell {
  max-width: none;
  margin: 0;
  padding: 0;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-feedback__inner {
  max-width: none;
  margin: 0;
  padding: 0;
  background: none;
  border: none;
  justify-content: flex-start;
  gap: 0.75rem 1rem;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-feedback__message {
  max-width: none;
  margin-inline: 0;
  text-align: start;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-meta__row {
  grid-template-columns: 1fr;
  gap: 0.5rem;
  justify-items: start;
}

.bcfc-meta-utilitybar .bcfc-pattern-page-meta__updated p {
  font-size: 0.8825rem;
  color: var(--bcfc-ink-muted, var(--bcfc-text-muted, #94a3b8));
}

.bcfc-meta-utilitybar .bcfc-pattern-page-meta__updated b {
  font-weight: 700;
  color: var(--bcfc-ink-muted, var(--bcfc-text-secondary, #4a5568));
}

/* Divider between the two zones — vertical on wide screens */
.bcfc-meta-utilitybar .bcfc-pattern-page-meta::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 1px;
  height: 2.25rem;
  background: var(--ub-border);
}

@media (max-width: 768px) {
  .bcfc-meta-utilitybar__card {
    flex-direction: column;
    align-items: stretch;
    gap: 1rem;
  }
  /* The wide layout gives this zone "flex: 1 1 260px" to claim horizontal space. Once the
       card flips to a column, 260px becomes a flex-basis on the BLOCK axis — a 260px minimum
       height for ~95px of content, leaving a large dead gap above the divider. Size to
       content instead. */
  .bcfc-meta-utilitybar .bcfc-pattern-page-feedback {
    flex: 0 0 auto;
  }
  .bcfc-meta-utilitybar .bcfc-pattern-page-meta {
    padding-inline-start: 0;
    padding-top: 1rem;
  }
  /* Divider becomes a horizontal rule between the stacked zones */
  .bcfc-meta-utilitybar .bcfc-pattern-page-meta::before {
    inset-inline-start: 0;
    top: 0;
    transform: none;
    width: 100%;
    height: 1px;
  }
  .bcfc-meta-utilitybar .bcfc-pattern-page-feedback__inner,
  .bcfc-meta-utilitybar .bcfc-pattern-page-meta__share,
  .bcfc-meta-utilitybar .bcfc-pattern-page-meta__row {
    justify-content: center;
    justify-items: center;
  }
}
.bcfc-pattern-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid var(--bcfc-border);
  border-radius: 1.5rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white));
  box-shadow: 0 10px 24px rgba(7, 27, 51, 0.06);
  overflow: hidden;
}

.bcfc-pattern-card__link {
  display: flex;
  flex-direction: column;
  height: 100%;
  color: inherit;
  text-decoration: none;
}

.bcfc-pattern-card__image {
  overflow: hidden;
  background: var(--bcfc-surface-muted, var(--bcfc-gray-200));
}

.bcfc-pattern-card__image img {
  display: block;
  width: 100%;
  aspect-ratio: 16/9;
  object-fit: cover;
}

.bcfc-pattern-card__image--portrait img {
  aspect-ratio: 4/4.5;
}

.bcfc-pattern-card__body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  padding: 1.25rem;
}

/* Eyebrows are the .bcfc-eyebrow component (scss/components/_eyebrow.scss); placement only here. */
.bcfc-pattern-kicker {
  margin-block-end: 0.875rem;
  line-height: 1.5;
}

.bcfc-pattern-card__eyebrow {
  margin-block-end: 0.625rem;
  line-height: 1.5;
}

.bcfc-pattern-card__body h3 {
  margin: 0;
  color: var(--bcfc-text-dark);
  font-family: Almarai, sans-serif;
  font-size: 1.125rem;
  font-weight: 800;
  line-height: 1.45;
}

.bcfc-pattern-card__body p {
  margin: 0.75rem 0 0;
  color: var(--bcfc-text-secondary);
  line-height: 1.8;
}

.bcfc-pattern-card__cta,
.bcfc-pattern-card__foot {
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-top: auto;
  padding-top: 1rem;
  color: var(--bcfc-ink-link, var(--bcfc-color-primary));
  font-weight: 700;
  text-decoration: none;
}

.bcfc-pattern-card__meta {
  color: var(--bcfc-ink-muted, #64748b);
  font-size: 0.95rem;
  font-weight: 600;
}

.bcfc-pattern-card__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-top: 1.25rem;
}

.bcfc-pattern-branch__row {
  display: flex;
  align-items: flex-start;
  gap: 0.625rem;
}

.bcfc-pattern-branch__row i {
  margin-top: 0.2rem;
  color: var(--bcfc-ink, var(--bcfc-color-primary));
}

@media (min-width: 768px) {
  .bcfc-pattern-shell {
    padding-inline: 2rem;
  }
  .bcfc-pattern-toolbar__row,
  .bcfc-pattern-page-meta__row {
    grid-template-columns: minmax(0, 1fr) auto;
  }
  .bcfc-pattern-support__card {
    grid-template-columns: minmax(0, 1fr) minmax(280px, 380px);
    align-items: stretch;
  }
  .bcfc-pattern-support__content,
  .bcfc-pattern-support__media {
    order: initial;
  }
  .bcfc-pattern-support__media {
    aspect-ratio: auto;
  }
  .bcfc-pattern-links-grid__items--2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .bcfc-pattern-links-grid__items--3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .bcfc-pattern-links-grid__items--4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .bcfc-pattern-page-meta__updated {
    justify-content: end;
  }
}
@media (min-width: 1024px) {
  .bcfc-pattern-shell {
    padding-inline: 4rem;
  }
  .bcfc-pattern-hero__grid {
    grid-template-columns: minmax(0, 1.2fr) minmax(18rem, 0.9fr);
    padding: 2.5rem;
  }
}
/* ========================================
   Page Feedback (Thumbs Up/Down)
   ======================================== */
.bcfc-pattern-page-feedback {
  /* Themeable accent — blue on the conventional site, green on Islamic pages.
       Consumed by the buttons, Continue CTA, select focus and the card surface. */
  --fb-accent: var(--bcfc-primary, #004a98);
  --fb-accent-ink: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark, #00346a));
  --fb-surface: var(--bcfc-surface-sunken, #f5f9ff);
  --fb-border: rgba(0, 74, 152, 0.14);
  /* Yes = green, No = red (Bahaa, 2026-08-18), the two hexes he supplied. NOT theme colours:
       they are the ANSWER's meaning, so unlike --fb-accent they do not turn green on Islamic
       pages — a red "No" has to stay red everywhere or it stops reading as the negative choice.

       ON HOVER ONLY (Bahaa, 2026-08-18 — "only on hover make it"). The bar sits at the foot of
       every page, so both buttons rest in the neutral grey of .bcfc-pattern-page-feedback__btn and
       the colour is the response to the pointer, not decoration the reader has to look past. The
       recorded vote (.--active, written by page-feedback.ts) keeps the colour too — that class is
       the only visible trace of having voted, so it shares the hover declarations rather than
       reverting to grey.

       The hex is the BORDER and the TINT — what reads as "green" and "red". The LABEL is a darkened
       mix of the same colour, because the 14px bold text lands on the tint, not on white, and WCAG
       does not count 14px bold as large text: the raw green is 3.2:1 there. Mixed toward the brand
       navy the two labels measure 5.6:1 and 5.1:1 on the tint they actually sit on, and the label
       moves with the fill rather than the fill changing alone (house rule, docs/design-system).
       Where color-mix is unsupported the mixes drop and the labels fall back to the inherited body
       ink — the buttons lose their tint, never their legibility, and the raw border colour still
       carries the meaning. */
  --fb-yes: #3d9c71;
  --fb-yes-ink: color-mix(in srgb, var(--fb-yes) 58%, var(--bcfc-navy, #071b33));
  --fb-no: #c94435;
  --fb-no-ink: var(--bcfc-dark-ink-red, color-mix(in srgb, var(--fb-no) 80%, var(--bcfc-navy, #071b33)));
  padding: 1.5rem 0 2rem;
}

body.is-islamic .bcfc-pattern-page-feedback {
  --fb-accent: var(--bcfc-green-dark, #113e35);
  --fb-accent-ink: var(--bcfc-green-darker, #0c2d27);
  --fb-surface: var(--bcfc-surface-sunken, #f0f7f4);
  --fb-border: rgba(17, 62, 53, 0.16);
}

.bcfc-pattern-page-feedback__inner {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem 1.5rem;
  flex-wrap: wrap;
  max-width: 640px;
  margin: 0 auto;
  padding: 1.1rem 1.6rem;
  border-radius: 1.1rem;
  background: var(--fb-surface);
  border: 1px solid var(--fb-border);
}

.bcfc-pattern-page-feedback__label {
  font-size: 1rem;
  font-weight: 700;
  color: var(--bcfc-ink, var(--bcfc-navy, #071b33));
}

.bcfc-pattern-page-feedback__buttons {
  display: flex;
  gap: 0.75rem;
  align-items: center;
  flex-wrap: wrap;
}

.bcfc-pattern-page-feedback__btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  min-height: 2.75rem;
  padding: 0.625rem 0.95rem;
  border: 1.5px solid var(--bcfc-border-color, #e2e8f0);
  border-radius: 0.75rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white));
  color: var(--bcfc-ink-link, var(--bcfc-text-secondary, #4a5568));
  cursor: pointer;
  font-size: 0.9375rem;
  font-weight: 700;
  transition: all 0.2s ease;
  line-height: 1;
}

.bcfc-pattern-page-feedback__btn:hover {
  border-color: var(--fb-accent);
  color: var(--fb-accent);
  background: color-mix(in srgb, var(--fb-accent) 8%, var(--bcfc-surface-raised, white));
}

.bcfc-pattern-page-feedback__btn:focus-visible {
  outline: 2px solid var(--fb-accent);
  outline-offset: 2px;
}

.bcfc-pattern-page-feedback__btn svg {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}

/* Hover, keyboard focus and the recorded vote — nothing at rest, by design (see the tokens above).
   These rules used to be keyed on __btn--like / __btn--dislike, but the partial has always emitted
   __btn--yes / __btn--no, so they matched NOTHING: both buttons went BLUE on hover from the generic
   rule above, on a bar whose whole point is a yes/no. Same class of bug as the undeclared-alias
   epidemic — the intent was in the file, the selector just never met the markup.

   Chained with the base class (two classes + a pseudo) so they outrank both the generic
   __btn:hover here and the Islamic page sheet's own 2-class resting rule, which would otherwise
   turn the hover on BOTH buttons the same green — see pages/Islamic.css. */
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--yes:hover,
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--yes:focus-visible,
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--yes.bcfc-pattern-page-feedback__btn--active {
  border-color: var(--fb-yes);
  color: var(--fb-yes-ink);
  background: color-mix(in srgb, var(--fb-yes) 17%, var(--bcfc-surface-raised, var(--bcfc-white, #fff)));
}

.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--no:hover,
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--no:focus-visible,
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--no.bcfc-pattern-page-feedback__btn--active {
  border-color: var(--fb-no);
  color: var(--bcfc-dark-ink-red, var(--fb-no-ink));
  background: color-mix(in srgb, var(--fb-no) 17%, var(--bcfc-surface-raised, var(--bcfc-white, #fff)));
}

/* The focus ring follows the button's own colour rather than --fb-accent, which would put a blue
   ring on the red button. currentColor resolves to the coloured ink here because :focus-visible is
   in the group above, so the ring is green on Yes and red on No — and nothing is coloured at rest,
   which is what was asked for. */
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--yes:focus-visible,
.bcfc-pattern-page-feedback__btn.bcfc-pattern-page-feedback__btn--no:focus-visible {
  outline-color: currentColor;
}

/* .bcfc-pattern-page-feedback__count is gone with the vote tally the partial no longer renders
   (2026-08-18). The pill's own rule went with it rather than being left as an orphan selector. */
.bcfc-pattern-page-feedback__message {
  max-width: 640px;
  margin: 0.5rem auto 0;
  font-size: 0.8625rem;
  text-align: center;
  /* Was --bcfc-text-muted (#94a3b8), which is ~2.8:1 on white and fails WCAG AA for
       body text. This copy confirms a submission, so it has to be readable. */
  color: var(--bcfc-dark-ink-muted, var(--bcfc-text-secondary, #4a5568));
  min-height: 1.2em;
}

/* "You already shared your feedback" notice — shown when a repeat vote is suppressed, so the
   click has a visible result. Uses the component's own --fb-* tokens, so it turns green inside
   body.is-islamic with no extra rule. [hidden] is set by the script; the attribute selector is
   NOT relied on for hiding, because `display: flex` here would otherwise beat it. */
.bcfc-fb-notice {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.45rem;
  max-width: 640px;
  margin: 0.5rem auto 0;
  padding: 0.55rem 0.9rem;
  border: 1px solid var(--fb-border, rgba(7, 27, 51, 0.14));
  border-radius: 999px;
  background: var(--bcfc-surface-sunken, var(--fb-surface, #f1f5fb));
  color: var(--bcfc-dark-ink-green, var(--fb-accent-ink, var(--bcfc-text-secondary, #4a5568)));
  font-size: 0.8825rem;
  text-align: center;
  /* Entry is opt-in via .is-in so a second click can replay it. */
  opacity: 0;
  transform: translateY(-0.25rem);
  transition: opacity 0.18s ease, transform 0.18s ease;
}

.bcfc-fb-notice[hidden] {
  display: none;
}

.bcfc-fb-notice.is-in {
  opacity: 1;
  transform: none;
}

.bcfc-fb-notice__icon {
  font-size: 1.05rem;
  line-height: 1;
  flex: 0 0 auto;
  color: var(--bcfc-dark-ink, var(--fb-accent, var(--bcfc-navy, #071b33)));
}

@media (prefers-reduced-motion: reduce) {
  .bcfc-fb-notice {
    transition: none;
    transform: none;
  }
}
/* While a vote POST is in flight the button stops accepting input, so spamming Yes/No
   can't fire concurrent requests. See the guard note in pages/page-feedback.ts. */
.bcfc-pattern-page-feedback__btn.is-busy {
  pointer-events: none;
  opacity: 0.72;
}

/* ============================================
   Feedback routing modal
   Native <dialog>, so it renders in the top layer: no z-index needed and nothing in the
   footer's overflow or stacking context can clip it. Lives inside the feedback section so
   --fb-accent cascades in — blue normally, green on Islamic pages, with no extra rules.
   ============================================ */
.bcfc-fb-modal {
  width: min(30rem, 100vw - 2rem);
  max-width: none;
  margin: auto;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  /* Keep the panel's shadow unclipped; the panel owns any scrolling. */
  overflow: visible;
}

.bcfc-fb-modal::backdrop {
  background: color-mix(in srgb, var(--bcfc-navy, #071b33) 55%, transparent);
  backdrop-filter: blur(3px);
}

.bcfc-fb-modal__panel {
  max-height: calc(100dvh - 2rem);
  overflow-y: auto;
  padding: clamp(1.25rem, 4vw, 1.75rem);
  border-radius: 1.25rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white, #fff));
  box-shadow: 0 1.5rem 3.5rem rgba(7, 27, 51, 0.28);
  text-align: start;
}

/* The panel takes focus on open (see the partial) purely so the reading position starts at
   the title — it isn't an interactive control, so it shouldn't draw a ring. */
.bcfc-fb-modal__panel:focus,
.bcfc-fb-modal__panel:focus-visible {
  outline: none;
}

.bcfc-fb-modal__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
}

.bcfc-fb-modal__title {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 800;
  line-height: 1.3;
  color: var(--bcfc-ink-strong, var(--bcfc-navy, #071b33));
  text-wrap: balance;
}

.bcfc-fb-modal__sub {
  margin: 0.35rem 0 0;
  font-size: 0.9375rem;
  line-height: 1.45;
  color: var(--bcfc-ink, var(--bcfc-text-secondary, #4a5568));
}

.bcfc-fb-modal__close {
  position: relative;
  display: grid;
  place-items: center;
  flex-shrink: 0;
  width: 2.25rem;
  height: 2.25rem;
  border: 1px solid var(--bcfc-border-color, #e2e8f0);
  border-radius: 0.625rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white, #fff));
  color: var(--bcfc-ink, var(--bcfc-text-secondary, #4a5568));
  cursor: pointer;
  transition: border-color 0.18s ease, color 0.18s ease, background-color 0.18s ease;
}

/* The visual button is 36px; this pushes the hit area to 48px without moving anything. */
.bcfc-fb-modal__close::before {
  content: "";
  position: absolute;
  inset: -6px;
}

.bcfc-fb-modal__close:hover {
  border-color: var(--fb-accent);
  color: var(--fb-accent);
  background: color-mix(in srgb, var(--fb-accent) 8%, var(--bcfc-surface-raised, var(--bcfc-color-white, #fff)));
}

.bcfc-fb-modal__close:focus-visible {
  outline: 2px solid var(--fb-accent);
  outline-offset: 2px;
}

.bcfc-fb-modal__options {
  display: grid;
  gap: 0.5rem;
  margin-top: 1.25rem;
}

.bcfc-fb-option {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.875rem;
  min-height: 3.75rem;
  padding: 0.75rem 0.875rem;
  border: 1px solid var(--bcfc-border-color, #e2e8f0);
  border-radius: 1rem;
  background: var(--bcfc-surface-raised, var(--bcfc-color-white, #fff));
  color: inherit;
  text-decoration: none;
  transition: border-color 0.18s ease, background-color 0.18s ease, box-shadow 0.18s ease;
  --i: 0;
}

.bcfc-fb-option--1 {
  --i: 1;
}

.bcfc-fb-option--2 {
  --i: 2;
}

.bcfc-fb-option:hover {
  border-color: var(--fb-accent);
  background: color-mix(in srgb, var(--fb-accent) 6%, var(--bcfc-surface-raised, var(--bcfc-color-white, #fff)));
  box-shadow: 0 0.5rem 1.25rem color-mix(in srgb, var(--fb-accent) 12%, transparent);
}

.bcfc-fb-option:focus-visible {
  outline: 2px solid var(--fb-accent);
  outline-offset: 2px;
}

.bcfc-fb-option:active {
  background: color-mix(in srgb, var(--fb-accent) 11%, var(--bcfc-surface-raised, var(--bcfc-color-white, #fff)));
}

.bcfc-fb-option__emoji {
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 0.875rem;
  background: color-mix(in srgb, var(--fb-accent) 10%, var(--bcfc-surface-raised, var(--bcfc-color-white, #fff)));
  font-size: 1.375rem;
  line-height: 1;
  /* Pin an emoji stack so the glyphs render as colour emoji on every platform instead of
       falling back to the body font's monochrome outlines. */
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Android Emoji", sans-serif;
}

.bcfc-fb-option__text {
  display: grid;
  gap: 0.15rem;
  min-width: 0;
}

.bcfc-fb-option__label {
  font-size: 0.95rem;
  font-weight: 700;
  line-height: 1.25;
  color: var(--bcfc-ink, var(--bcfc-navy, #071b33));
}

.bcfc-fb-option__desc {
  font-size: 0.875rem;
  line-height: 1.35;
  color: var(--bcfc-ink-muted, var(--bcfc-text-secondary, #4a5568));
}

.bcfc-fb-option__chev {
  flex-shrink: 0;
  color: var(--bcfc-ink, var(--bcfc-text-secondary, #4a5568));
  transition: transform 0.18s cubic-bezier(0.22, 1, 0.36, 1), color 0.18s ease;
}

.bcfc-fb-option:hover .bcfc-fb-option__chev {
  color: var(--fb-accent);
  transform: translateX(3px);
}

/* Mirror the chevron in Arabic, and send the hover nudge the other way. */
[dir=rtl] .bcfc-fb-option__chev {
  transform: scaleX(-1);
}

[dir=rtl] .bcfc-fb-option:hover .bcfc-fb-option__chev {
  transform: scaleX(-1) translateX(3px);
}

.bcfc-fb-modal__foot {
  margin: 1rem 0 0;
  font-size: 0.875rem;
  line-height: 1.4;
  color: var(--bcfc-ink, var(--bcfc-text-secondary, #4a5568));
}

/* Entrance: backdrop fade + panel rise on ease-out-quint. No fill-mode, so a renderer that
   never runs animations still shows the panel fully visible rather than blank. */
@keyframes bcfc-fb-panel-in {
  from {
    opacity: 0;
    transform: translateY(12px) scale(0.985);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes bcfc-fb-backdrop-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
.bcfc-fb-modal[open] .bcfc-fb-modal__panel {
  animation: bcfc-fb-panel-in 320ms cubic-bezier(0.22, 1, 0.36, 1);
}

.bcfc-fb-modal[open]::backdrop {
  animation: bcfc-fb-backdrop-in 320ms cubic-bezier(0.22, 1, 0.36, 1);
}

/* Exit runs at ~75% of the entrance, per the usual enter/exit asymmetry. */
.bcfc-fb-modal.is-closing .bcfc-fb-modal__panel {
  animation: bcfc-fb-panel-in 200ms cubic-bezier(0.22, 1, 0.36, 1) reverse forwards;
}

.bcfc-fb-modal.is-closing::backdrop {
  animation: bcfc-fb-backdrop-in 200ms linear reverse forwards;
}

@media (max-width: 480px) {
  .bcfc-fb-option {
    min-height: 3.5rem;
    gap: 0.75rem;
    padding: 0.7rem 0.75rem;
  }
  .bcfc-fb-option__emoji {
    width: 2.5rem;
    height: 2.5rem;
    font-size: 1.25rem;
  }
}
@media (prefers-reduced-motion: reduce) {
  .bcfc-fb-modal[open] .bcfc-fb-modal__panel,
  .bcfc-fb-modal[open]::backdrop,
  .bcfc-fb-modal.is-closing .bcfc-fb-modal__panel,
  .bcfc-fb-modal.is-closing::backdrop {
    animation: none;
  }
  .bcfc-fb-option,
  .bcfc-fb-option__chev,
  .bcfc-fb-modal__close {
    transition: none;
  }
  .bcfc-fb-option:hover .bcfc-fb-option__chev {
    transform: none;
  }
  [dir=rtl] .bcfc-fb-option:hover .bcfc-fb-option__chev {
    transform: scaleX(-1);
  }
}
/* Responsive */
@media (max-width: 480px) {
  .bcfc-pattern-page-feedback__inner {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 0.75rem;
  }
  .bcfc-pattern-page-feedback__buttons {
    justify-content: center;
  }
}
.bcfc-footer-meta-section .bcfc-related-pages-section + .bcfc-pattern-page-meta {
  margin-top: 1.5rem;
}

/* The related banner is a full-bleed coloured band that already separates the
   share strip below it — drop the extra top margin AND the hairline border that
   would otherwise stack up into an oversized, seam-like gap right under it. */
.bcfc-footer-meta-section .bcfc-related-banner + .bcfc-pattern-page-meta {
  margin-top: 0;
  border-top: none;
  padding-top: 1.5rem;
}

.bcfc-footer-meta-section .bcfc-pattern-page-feedback {
  margin-top: 1.5rem;
}

/* ========================================
   No Records Alert
   ======================================== */
.alert-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.alert-icon svg {
  color: var(--bcfc-dark-ink-red, var(--color-warning, #d97706));
}

/* Popup modal styles now live entirely in bcfc-popup.css — this was a
   stale duplicate (older markup: header/footer bar, contain-fit image)
   that loaded after bcfc-popup.css in the bundle and was winning the
   cascade for shared property names, silently reverting the redesign. */
/* ==============================================================================================
   ISLAMIC: THE FEEDBACK BUTTONS MUST NOT REST IN BRAND BLUE.

   The token block above states the intent - "both buttons rest in the neutral grey of
   .bcfc-pattern-page-feedback__btn" - and colour is the response to the pointer only (Bahaa,
   2026-08-18: *"only on hover make it"*). But the base rule reads
   `var(--bcfc-ink-link, var(--bcfc-text-secondary, #4a5568))`, and bcfc-surface-map.css declares
   --bcfc-ink-link on .bcfc-meta-utilitybar__card, the band's own wrapper. So the first token
   always wins, the intended grey never applies, and the pair rests brand blue.

   Restated for Islamic pages, where blue is simply wrong. NEUTRAL, not green: resting green would
   break the same rule from the other side, and --fb-yes has to stay the only green in this band or
   "Yes" stops reading as the affirmative choice. The hover and recorded-vote colours are untouched
   - they are chained at (0,3,1) and keep winning.

   NOTE this is only the Islamic half of the defect: the grey is unreachable on every
   surface-mapped page, not just these. Left alone deliberately - restoring it site-wide is a
   visible change on ~400 pages and belongs in its own reviewed commit, not smuggled into a
   colour fix. */
/* :not(:hover):not(:focus-visible) so this touches the RESTING state only. Without it the rule
   is (0,2,1) and outranks the generic `.bcfc-pattern-page-feedback__btn:hover` at (0,2,0), which
   would silently kill the accent hover on any button in this band that is neither --yes nor --no.
   The two chained yes/no rules are (0,3,0) and win either way; this protects the others. */
body.is-islamic .bcfc-pattern-page-feedback__btn:not(:hover):not(:focus-visible) {
  color: var(--bcfc-dark-ink-muted, var(--bcfc-text-secondary, #4a5568));
}

/* UW-380: icons from the pack in wwwroot/icons, drawn by IconHelper.Svg(). The artwork strokes in
   currentColor, so colour is the parent's. Size is em-based on the element's own width/height
   attributes, so the A+/A- control scales it. --mirror is for directional glyphs only. */
.bcfc-icon {
  flex: none;
  vertical-align: -0.2em;
}

:where([dir=rtl]) .bcfc-icon--mirror {
  transform: scaleX(-1);
}
@charset "UTF-8";
.bcfc-cookie-banner {
  position: fixed;
  inset-inline: 0;
  bottom: 0;
  z-index: var(--bcfc-z-cookie-banner);
  padding: 0 1rem 1rem;
  pointer-events: none;
}

.bcfc-cookie-banner__inner {
  width: min(1200px, 100% - 2rem);
  margin: 0 auto;
  display: grid;
  grid-template-columns: minmax(0, 1.8fr) auto;
  gap: 1.25rem;
  align-items: center;
  padding: 1rem 1.25rem;
  border: 1px solid rgba(0, 74, 152, 0.14);
  border-radius: 1rem;
  background: linear-gradient(180deg, var(--bcfc-surface-raised, rgba(255, 255, 255, 0.98)), var(--bcfc-surface-sunken, rgba(245, 248, 252, 0.98)));
  box-shadow: 0 -12px 40px rgba(15, 23, 42, 0.12);
  backdrop-filter: blur(10px);
  pointer-events: auto;
}

.bcfc-cookie-banner__content {
  display: grid;
  gap: 0.375rem;
}

.bcfc-cookie-banner__title {
  margin: 0;
  font-size: 1rem;
  font-weight: 700;
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-cookie-banner__message {
  margin: 0;
  font-size: 0.95rem;
  line-height: 1.6;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
}

.bcfc-cookie-banner__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.75rem;
  align-items: center;
}

.bcfc-cookie-banner__panel {
  grid-column: 1/-1;
  display: grid;
  gap: 0.9rem;
  padding-top: 0.25rem;
  border-top: 1px solid rgba(148, 163, 184, 0.28);
}

.bcfc-cookie-banner__panel-title,
.bcfc-cookie-banner__preference-title,
.bcfc-cookie-banner__preference-text {
  margin: 0;
}

.bcfc-cookie-banner__panel-title {
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-cookie-banner__preference {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 1rem;
  align-items: center;
  padding: 0.9rem 1rem;
  border-radius: 0.9rem;
  background: var(--bcfc-surface-raised, rgba(248, 250, 252, 0.9));
}

.bcfc-cookie-banner__preference-copy {
  display: grid;
  gap: 0.25rem;
}

.bcfc-cookie-banner__preference-title {
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-cookie-banner__preference-text {
  font-size: 0.9625rem;
  line-height: 1.55;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-600));
}

.bcfc-cookie-banner__panel-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.75rem;
}

.bcfc-cookie-banner__toggle {
  position: relative;
  display: inline-flex;
  align-items: center;
  cursor: pointer;
}

.bcfc-cookie-banner__toggle input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.bcfc-cookie-banner__toggle-track {
  position: relative;
  width: 3.2rem;
  height: 1.9rem;
  border-radius: 999px;
  background: var(--bcfc-surface-muted, #cbd5e1);
  transition: background-color 0.2s ease;
}

.bcfc-cookie-banner__toggle-track::after {
  content: "";
  position: absolute;
  top: 0.2rem;
  inset-inline-start: 0.2rem;
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 50%;
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.18);
  transition: transform 0.2s ease;
}

.bcfc-cookie-banner__toggle input:checked + .bcfc-cookie-banner__toggle-track {
  background: var(--bcfc-primary-dark);
}

.bcfc-cookie-banner__toggle input:checked + .bcfc-cookie-banner__toggle-track::after {
  transform: translateX(1.3rem);
}

.bcfc-cookie-banner__toggle input:disabled + .bcfc-cookie-banner__toggle-track {
  background: #0f766e;
}

.bcfc-cookie-banner__link {
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  font-size: 0.95rem;
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

/* The Privacy Guidelines and Cookie Policy links are authored INSIDE the message, because they are
   part of the PDPL disclosure sentence and their href differs per culture — see the
   FlowcourierCookieConsent.Modal.Description dictionary item. They are therefore plain <a> elements
   with no class, so they need styling here rather than via .bcfc-cookie-banner__link above.
   Inheriting font-size keeps them on the message's scale instead of the action-row scale. */
.bcfc-cookie-banner__message a {
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

.bcfc-cookie-banner__message a:hover,
.bcfc-cookie-banner__message a:focus-visible {
  color: var(--bcfc-ink-link-hover, #003f81);
}

.bcfc-cookie-banner__message a:focus-visible {
  outline: 3px solid rgba(0, 74, 152, 0.22);
  outline-offset: 2px;
}

/* The footer's "Cookie preferences" reopen control (BCFCFooter.cshtml). Styled here, with the
   component it belongs to, rather than in the footer sheet — this file is already in both the LTR and
   RTL bundles, so the control cannot end up unstyled on Arabic.

   It is a <button> that has to read as a link: `all: unset` would also drop the cursor and the focus
   ring, so the button chrome is removed explicitly instead. `color: inherit` lets it sit on the
   footer's dark bar without hardcoding a colour that a footer restyle would leave stranded. */
.bcfc-cookie-preferences-link {
  appearance: none;
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 0.18em;
  opacity: 0.85;
}

.bcfc-cookie-preferences-link:hover,
.bcfc-cookie-preferences-link:focus-visible {
  opacity: 1;
}

.bcfc-cookie-preferences-link:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 3px;
}

.bcfc-cookie-banner__button {
  appearance: none;
  border: 1px solid transparent;
  padding: 0.8rem 1.1rem;
  font-size: 0.95rem;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background-color 0.18s ease, border-color 0.18s ease;
}

.bcfc-cookie-banner__button:hover,
.bcfc-cookie-banner__button:focus-visible {
  transform: translateY(-1px);
}

.bcfc-cookie-banner__button:focus-visible,
.bcfc-cookie-banner__link:focus-visible {
  outline: 3px solid rgba(0, 74, 152, 0.22);
  outline-offset: 2px;
}

.bcfc-cookie-banner__button--primary {
  background: var(--bcfc-primary-dark);
  color: var(--bcfc-white);
  box-shadow: 0 10px 24px rgba(0, 74, 152, 0.22);
}

.bcfc-cookie-banner__button--primary:hover,
.bcfc-cookie-banner__button--primary:focus-visible {
  background: #003f81;
}

.bcfc-cookie-banner__button--secondary {
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  border-color: rgba(0, 74, 152, 0.48);
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-cookie-banner__button--ghost {
  background: transparent;
  border-color: rgba(148, 163, 184, 0.42);
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
}

.bcfc-cookie-banner__button--ghost:hover,
.bcfc-cookie-banner__button--ghost:focus-visible {
  background: var(--bcfc-surface-sunken, rgba(241, 245, 249, 0.95));
  border-color: rgba(0, 74, 152, 0.28);
}

.bcfc-cookie-banner__button--secondary:hover,
.bcfc-cookie-banner__button--secondary:focus-visible {
  border-color: rgba(0, 74, 152, 0.7);
  background: var(--bcfc-surface-sunken, #eff6ff);
}

@media (max-width: 900px) {
  .bcfc-cookie-banner__inner {
    grid-template-columns: 1fr;
  }
  .bcfc-cookie-banner__actions {
    justify-content: stretch;
  }
  .bcfc-cookie-banner__actions > * {
    width: 100%;
    text-align: center;
  }
  .bcfc-cookie-banner__preference {
    grid-template-columns: 1fr;
  }
  .bcfc-cookie-banner__panel-actions {
    justify-content: stretch;
  }
  .bcfc-cookie-banner__panel-actions > * {
    width: 100%;
  }
}
@charset "UTF-8";
.bcfc-card-carousel {
  /* 8px top headroom (offset by margin-top:-8px in bcfc-swiper.css) so cards
       lifted on hover aren't clipped by the swiper's overflow:hidden box */
  padding: 8px 16px 46px;
  overflow: visible;
}

.bcfc-related-pages-section {
  padding: 30px 0;
  background: linear-gradient(180deg, rgba(245, 249, 255, 0) 0%, rgba(245, 249, 255, 0.92) 100%);
}

.bcfc-related-pages-section__header {
  display: flex;
  justify-content: space-between;
  align-items: end;
  gap: 24px;
  margin-bottom: 28px;
}

.bcfc-related-pages-section__copy {
  max-width: 720px;
}

.bcfc-related-pages-section__title {
  margin: 0;
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  font: 800 clamp(1.9rem, 1.4rem + 1.3vw, 2.6rem)/1.12 "Almarai", sans-serif;
  text-transform: capitalize;
}

.bcfc-related-pages-section__summary {
  margin: 14px 0 0;
  color: var(--bcfc-ink, #52606d);
  font: 500 1rem/1.72 "Almarai", sans-serif;
}

.bcfc-related-pages-section__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

@media (width < 1024px) {
  .bcfc-related-pages-section__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (width < 640px) {
  .bcfc-related-pages-section__grid {
    grid-template-columns: 1fr;
  }
}
.bcfc-related-pages-section__grid .bcfc-content-card {
  height: 100%;
}

.bcfc-related-pages-section__nav {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
}

.bcfc-related-pages-section__nav-prev,
.bcfc-related-pages-section__nav-next {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--bcfc-primary-dark);
  background: transparent;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  cursor: pointer;
  transition: all 0.2s ease;
}

.bcfc-related-pages-section__nav-prev:hover,
.bcfc-related-pages-section__nav-next:hover {
  background: var(--bcfc-primary-dark);
  color: var(--bcfc-white);
}

.bcfc-related-pages-section__nav-prev svg,
.bcfc-related-pages-section__nav-next svg {
  width: 20px;
  height: 20px;
}

.bcfc-related-pages-section__carousel {
  overflow: hidden;
}

.bcfc-card-carousel .swiper-wrapper {
  display: flex;
  flex-wrap: nowrap;
  align-items: stretch;
  justify-content: flex-start;
  /* No flex `gap` here: Swiper already spaces slides via an inline
       margin-right derived from its own `spaceBetween` param. Adding a CSS
       gap on top double-counts the spacing per slide, so each autoplay
       step drifts the "active" slide further out of the clipped viewport
       than Swiper's own math (slidesGrid/translate) expects. */
}

.bcfc-card-carousel .swiper-slide {
  display: flex;
  flex-shrink: 0;
  height: auto;
  min-width: 0;
}

.bcfc-card-carousel .swiper-slide > * {
  flex: 1;
  min-width: 0;
}

.bcfc-card-carousel__header {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 12px;
  margin-bottom: 12px;
}

.bcfc-card-carousel__pagination {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding-top: 18px;
  padding-bottom: 2px;
  justify-content: center;
  flex: 1;
}

.bcfc-card-carousel__nav {
  display: flex;
  gap: 8px;
}

.bcfc-card-carousel__nav-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: 1px solid rgba(0, 74, 152, 0.2);
  border-radius: 50%;
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  cursor: pointer;
  transition: all 0.2s ease;
}

.bcfc-card-carousel__nav-btn:hover {
  background: var(--bcfc-primary-dark);
  color: var(--bcfc-white);
  border-color: var(--bcfc-primary-dark);
}

/* Dark mode: the light-mode navy hairline vanishes on the navy surface. */
[data-bcfc-theme=dark] .bcfc-card-carousel__nav-btn {
  border-color: var(--bcfc-dark-ink-brand, var(--bcfc-line));
}

[data-bcfc-theme=dark] .bcfc-card-carousel__nav-btn:hover {
  border-color: var(--bcfc-primary-dark);
}

/* Islamic pages: the resting hairline is green, not the generic blue. */
html[data-islamic=true][data-bcfc-theme=dark] .bcfc-card-carousel__nav-btn:not(:hover) {
  border-color: var(--bcfc-dark-ink-green, var(--bcfc-line));
}

/* Shared with Islamic partials (e.g. IslamicServices) — hover fills green
   instead of blue on Islamic pages. */
body.is-islamic .bcfc-card-carousel__nav-btn:hover {
  background: var(--bcfc-color-secondary);
  border-color: var(--bcfc-color-secondary);
}

.bcfc-card-carousel__nav-btn svg {
  display: block;
}

.bcfc-card-carousel__nav-btn.swiper-nav-hidden {
  opacity: 0;
  pointer-events: none;
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet {
  background-color: rgba(0, 74, 152, 0.3);
  opacity: 1;
  height: 10px;
  width: 10px;
  margin: 0 !important;
  border-radius: 50%;
  transition: all 0.3s ease;
  cursor: pointer;
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet:hover {
  background-color: rgba(0, 74, 152, 0.6);
}

.bcfc-card-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active {
  background-color: var(--bcfc-primary-dark);
  transform: scale(1.2);
}

/* Homepage phones: the small round dots of the Elfsight-style pager (owner ticket 2026-10-13): 8px circles,
   navy at 25% resting, solid navy active, no scale pop. Dark mode lifts the navy so it does not vanish. */
@media (max-width: 768px) {
  .bcfc-card-carousel__pagination .swiper-pagination-bullet {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background-color: rgba(14, 44, 92, 0.25);
    opacity: 1;
    margin: 0 4px !important;
  }
  .bcfc-card-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active {
    width: 8px;
    height: 8px;
    background-color: #0e2c5c;
    transform: none;
  }
  [data-bcfc-theme=dark] .bcfc-card-carousel__pagination .swiper-pagination-bullet {
    background-color: color-mix(in srgb, var(--bcfc-dark-ink-brand, #6ea8e0) 30%, transparent);
  }
  [data-bcfc-theme=dark] .bcfc-card-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active {
    background-color: var(--bcfc-dark-ink-brand, #6ea8e0);
  }
}
.bcfc-content-card {
  width: 100%;
  height: 100%;
}

/* ========================================
   Base card link — hover interactions
   ======================================== */
.bcfc-content-card__link {
  position: relative;
  display: grid;
  grid-template-rows: auto 1fr;
  height: 100%;
  border-radius: 22px;
  background: linear-gradient(180deg, var(--bcfc-surface-raised, #ffffff) 0%, var(--bcfc-surface-raised, #f7faff) 100%);
  border: 1px solid rgba(0, 74, 152, 0.12);
  box-shadow: 0 18px 42px rgba(10, 33, 64, 0.08);
  color: inherit;
  text-decoration: none;
  overflow: hidden;
  transition: background-color 0.4s ease, box-shadow 0.24s ease, border-color 0.24s ease;
}

/* Animated bottom accent bar — slides in from left.
   Scaled rather than grown: animating `width` relayouts the card on every frame of a 500ms hover.
   transform-origin is the physical left to match the `left: 0` anchor, which has no RTL override, so
   the direction of travel is unchanged. */
.bcfc-content-card__link::before {
  content: "";
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 4px;
  background: var(--bcfc-card-accent, #afc6ec);
  z-index: 3;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.5s ease;
  /* Contain within card's rounded bottom corners */
  clip-path: inset(0 0 0 0 round 0 0 22px 22px);
}

/* Hover state */
.bcfc-content-card__link:hover {
  background: var(--bcfc-card-hover, #11295f);
}

.bcfc-content-card__link:hover::before {
  transform: scaleX(1);
}

/* Focus ring */
.bcfc-content-card:has(a:focus-visible) .bcfc-content-card__link {
  box-shadow: 0 0 0 3px rgba(0, 74, 152, 0.4);
}

.bcfc-content-card__media {
  position: relative;
  aspect-ratio: 16/10;
  overflow: hidden;
  /* Top corners nest inside the 22px card frame (minus 1px border) — a smaller
       radius leaves white wedges peeking at the card's rounded top corners */
  border-radius: 21px 21px 12px 12px;
  background: var(--bcfc-primary, #004a98);
}

.bcfc-content-card__media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(7, 27, 51, 0) 0%, rgba(7, 27, 51, 0.65) 100%);
  pointer-events: none;
  z-index: 1;
  border-radius: 12px;
}

.bcfc-content-card__image,
.bcfc-content-card__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.bcfc-content-card__link:hover .bcfc-content-card__image,
.bcfc-content-card__link:hover .bcfc-content-card__video {
  opacity: 0.9;
}

.bcfc-content-card__image--placeholder {
  width: 100%;
  height: 100%;
  background: linear-gradient(135deg, #dbe6f6 0%, #bed2ed 100%);
}

.bcfc-content-card__badge {
  position: absolute;
  inset-inline-start: 16px;
  bottom: 16px;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  min-height: 34px;
  padding: 0 12px;
  border-radius: 999px;
  background: var(--bcfc-surface-raised, rgba(255, 255, 255, 0.92));
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  font: 800 0.8025rem/1 "Almarai", sans-serif;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* A COLUMN WITH THE ACTION PINNED TO THE BOTTOM, not a fixed four-row grid.
   This was `display: grid` with `grid-template-rows: auto minmax(3.3rem,auto) minmax(5rem,auto)
   auto` and `align-content: start`, which assumed all four children render — eyebrow/meta, title,
   description, action. The service cards on the home page emit only THREE (no eyebrow), so each
   child shifted up a row and the action landed in the DESCRIPTION's row: its position then moved
   with the length of the description, and a card whose text wrapped to two lines instead of three
   put its "Explore →" ~20px higher than the cards beside it. That is the misalignment marked on
   the home category carousel (owner, 2026-09-07).
   `margin-block-start: auto` on the action eats the slack instead, so the link sits on the card's
   bottom edge whatever renders above it and every card in a row agrees — the card is already
   `height: 100%` inside a `1fr` body row, so there is always slack to eat. */
.bcfc-content-card__body {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 22px 22px 24px;
}

.bcfc-content-card__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
}

.bcfc-content-card__eyebrow,
.bcfc-content-card__meta-text {
  font: 800 0.8225rem/1 "Almarai", sans-serif;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.bcfc-content-card__eyebrow {
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
}

.bcfc-content-card__meta-text {
  color: var(--bcfc-ink-muted, #6b7784);
}

.bcfc-content-card__title {
  margin: 0;
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  font: 800 1.18rem/1.38 "Almarai", sans-serif;
  text-transform: capitalize;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}

.bcfc-content-card__description {
  margin: 0;
  color: var(--bcfc-ink-muted, #52606d);
  font: 500 0.96rem/1.72 "Almarai", sans-serif;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

.bcfc-content-card__action {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  /* `start`, not the `end` this carried under the grid: in a column flexbox align-self is the
       INLINE axis, so `end` would push the link to the trailing edge of the card. `start` keeps it
       at the leading edge — left in LTR, right in RTL, with no `[dir]` arm. */
  align-self: start;
  /* Eats every pixel of leftover height, which is what lines the four cards up. Logical, so it
       is the same declaration in RTL. */
  margin-block-start: auto;
  padding-block-start: 6px;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  font: 800 0.9825rem/1 "Almarai", sans-serif;
  white-space: nowrap;
}

.bcfc-content-card__arrow {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}

.bcfc-content-card--service .bcfc-content-card__media {
  aspect-ratio: 16/10;
}

.bcfc-content-card--service .bcfc-content-card__media::after {
  background: none;
}

.bcfc-content-card--service .bcfc-content-card__title {
  font-size: 1.28rem;
}

/* The service variant's own `grid-template-rows` override lived here and is gone with the grid —
   it was the rule that reserved 3.55rem/5.2rem for the title and description rows. It is not
   replaced: the title is line-clamped to 2 lines and the description to 3, so the copy block is
   already bounded, and the row of cards now agrees on where the ACTION sits rather than on where
   each paragraph starts. */
.bcfc-content-card--media .bcfc-content-card__badge {
  background: rgba(7, 27, 51, 0.88);
  color: var(--bcfc-white);
}

.bcfc-number-card {
  min-height: 220px;
  padding: 24px;
  border-radius: 20px;
  background: linear-gradient(180deg, var(--bcfc-surface-raised, #ffffff) 0%, var(--bcfc-surface-sunken, #f5f9ff) 100%);
  border: 1px solid rgba(0, 74, 152, 0.1);
  box-shadow: 0 18px 36px rgba(15, 23, 42, 0.06);
}

.bcfc-number-card__number {
  display: inline-flex;
  min-width: 48px;
  min-height: 48px;
  align-items: center;
  justify-content: center;
  border-radius: 12px;
  background: var(--bcfc-primary-dark);
  color: var(--bcfc-white);
  font: 800 0.96rem/1 "Almarai", sans-serif;
}

.bcfc-number-card__title {
  margin: 18px 0 0;
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  font: 800 1.22rem/1.32 "Almarai", sans-serif;
  text-transform: capitalize;
}

.bcfc-number-card__description {
  margin: 12px 0 0;
  color: var(--bcfc-ink-muted, #5c6670);
  font: 500 0.98rem/1.68 "Almarai", sans-serif;
}

@media (max-width: 768px) {
  .bcfc-related-pages-section {
    padding-bottom: 56px;
  }
  .bcfc-related-pages-section__header {
    margin-bottom: 22px;
  }
  .bcfc-related-pages-section__summary {
    font-size: 0.94rem;
  }
  .bcfc-content-card__body {
    padding: 18px 18px 20px;
  }
  .bcfc-content-card__title {
    font-size: 1.06rem;
  }
  .bcfc-number-card {
    min-height: auto;
    padding: 20px 18px;
  }
}
/* ========================================
   Global button styles — used throughout
   ======================================== */
.bcfc-guideline-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.55rem;
  padding: 0.8rem 1.15rem;
  border: 1px solid transparent;
  cursor: pointer;
  font-weight: 700;
  text-decoration: none;
  line-height: 1.2;
  border-radius: 6px;
  font-size: 0.9375rem;
  transition: all 0.2s ease;
}

.bcfc-guideline-button--primary {
  background: var(--bcfc-color-primary, #004a98);
  color: #fff;
  box-shadow: 0 10px 22px rgba(0, 74, 152, 0.16);
}

/* AMENDED 2026-09-07 — the fill deepens and the label stays white (owner: *"if background is not
   white the text cannot be black so it should be white"*). The 2026-09-06 inversion put blue ink
   on a transparent face, and these buttons sit on guideline cards and tinted panels, not on white.
   The base reserves `1px solid transparent`, so nothing reflows. */
.bcfc-guideline-button--primary:hover {
  background: color-mix(in srgb, var(--bcfc-color-primary, #004a98) 86%, black);
  border-color: color-mix(in srgb, var(--bcfc-color-primary, #004a98) 86%, black);
  color: #fff;
  box-shadow: 0 10px 22px rgba(0, 74, 152, 0.22);
}

.bcfc-guideline-button--secondary {
  background: var(--bcfc-surface-raised, #fff);
  color: var(--bcfc-ink, var(--bcfc-color-navy, #0c1f35));
  border-color: rgba(11, 53, 102, 0.09);
  box-shadow: 0 4px 14px rgba(15, 23, 42, 0.05);
}

.bcfc-guideline-button--secondary:hover {
  background: var(--bcfc-surface-raised, #f8fafc);
  border-color: #b8c4d3;
}

/* ========================================
   Card text color inversion on hover
   ======================================== */
.bcfc-content-card__eyebrow,
.bcfc-content-card__meta-text,
.bcfc-content-card__title,
.bcfc-content-card__description,
.bcfc-content-card__action,
.bcfc-content-card__arrow {
  transition: color 0.4s ease;
}

.bcfc-content-card__link:hover .bcfc-content-card__eyebrow,
.bcfc-content-card__link:hover .bcfc-content-card__meta-text {
  color: rgba(255, 255, 255, 0.8);
}

.bcfc-content-card__link:hover .bcfc-content-card__title {
  color: #fff;
}

.bcfc-content-card__link:hover .bcfc-content-card__description {
  color: rgba(255, 255, 255, 0.85);
}

.bcfc-content-card__link:hover .bcfc-content-card__action {
  color: #fff;
}

.bcfc-content-card__link:hover .bcfc-content-card__action .bcfc-content-card__arrow {
  transform: translateX(4px);
}

/* Arrow icon transition */
.bcfc-content-card__arrow {
  display: inline-block;
  transition: transform 0.24s ease;
}

/* Accent color variants */
.bcfc-content-card--accent-teal::before {
  background-color: #00897b;
}

.bcfc-content-card--accent-red::before {
  background-color: var(--bcfc-navy, #071b33);
}

.bcfc-content-card--accent-green::before {
  background-color: #43a047;
}

.bcfc-content-card--accent-yellow::before {
  background-color: #fdd835;
}

.bcfc-content-card--accent-camel::before {
  background-color: #c69c6d;
}

.bcfc-content-card--accent-teal .bcfc-content-card__eyebrow {
  color: var(--bcfc-dark-ink-green, #00897b);
}

.bcfc-content-card--accent-red .bcfc-content-card__eyebrow {
  color: var(--bcfc-dark-ink, var(--bcfc-navy, #071b33));
}

.bcfc-content-card--accent-green .bcfc-content-card__eyebrow {
  color: #43a047;
}

.bcfc-content-card--accent-yellow .bcfc-content-card__eyebrow {
  color: #bfa500;
}

.bcfc-content-card--accent-camel .bcfc-content-card__eyebrow {
  color: #c69c6d;
}

/* ========================================
   Share buttons (social)
   ======================================== */
.bcfc-share {
  display: flex;
  align-items: center;
  gap: 10px;
}

.bcfc-share--vertical {
  flex-direction: column;
  align-items: flex-start;
}

.bcfc-share__label {
  font-size: 0.8625rem;
  font-weight: 700;
  color: var(--bcfc-ink, #6b7784);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.bcfc-share__buttons {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.bcfc-share__btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  transition: all 0.2s ease;
  text-decoration: none;
}

.bcfc-share__btn svg {
  width: 16px;
  height: 16px;
}

.bcfc-share__btn--facebook {
  background: #1877f2;
  color: #fff;
}

.bcfc-share__btn--facebook:hover {
  background: #0e5fba;
}

.bcfc-share__btn--linkedin {
  background: #0a66c2;
  color: #fff;
}

.bcfc-share__btn--linkedin:hover {
  background: #004182;
}

.bcfc-share__btn--twitter {
  background: var(--bcfc-surface-inverse, #000);
  color: #fff;
}

.bcfc-share__btn--twitter:hover {
  background: var(--bcfc-surface-inverse, #333);
}

.bcfc-share__btn--whatsapp {
  background: #25d366;
  color: #fff;
}

.bcfc-share__btn--whatsapp:hover {
  background: #128c7e;
}

.bcfc-share__btn:hover {
  transform: scale(1.1);
}

/* ========================================
   Year filter multi-select
   ======================================== */
/* ========================================
   Filter bar
   ======================================== */
.bcfc-filter-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  padding: 16px 0;
}

.bcfc-filter-bar__search {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: 1;
  min-width: 200px;
  padding: 8px 14px;
  border: 1px solid rgba(0, 74, 152, 0.15);
  border-radius: 8px;
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  transition: border-color 0.2s ease;
}

.bcfc-filter-bar__search:focus-within {
  border-color: var(--bcfc-primary, #004a98);
}

.bcfc-filter-bar__search svg {
  flex-shrink: 0;
  color: var(--bcfc-ink, #6b7784);
}

.bcfc-filter-bar__search input {
  flex: 1;
  border: none;
  background: transparent;
  font: 500 0.9625rem/1 "Almarai", sans-serif;
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  outline: none;
  min-width: 0;
}

.bcfc-filter-bar__search input::placeholder {
  color: #9fb3c8;
}

.bcfc-filter-bar__select {
  appearance: none;
  padding: 8px 32px 8px 12px;
  border: 1px solid rgba(0, 74, 152, 0.15);
  border-radius: 8px;
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  font: 500 0.9625rem/1 "Almarai", sans-serif;
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  cursor: pointer;
  outline: none;
  transition: border-color 0.2s ease;
}

.bcfc-filter-bar__select:focus {
  border-color: var(--bcfc-primary, #004a98);
}

.bcfc-filter-bar__btn {
  display: inline-flex;
  align-items: center;
  padding: 8px 16px;
  border-radius: 8px;
  font: 700 0.9375rem/1 "Almarai", sans-serif;
  cursor: pointer;
  text-decoration: none;
  transition: all 0.2s ease;
}

.bcfc-filter-bar__btn--primary {
  background: var(--bcfc-primary, #004a98);
  color: #fff;
  border: 1px solid var(--bcfc-primary, #004a98);
}

.bcfc-filter-bar__btn--primary:hover {
  background: #003d7a;
  border-color: #003d7a;
}

.bcfc-filter-bar__btn--secondary {
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  border: 1px solid rgba(0, 74, 152, 0.2);
}

.bcfc-filter-bar__btn--secondary:hover {
  background: var(--bcfc-surface-sunken, #f0f4f8);
  border-color: rgba(0, 74, 152, 0.35);
}

.bcfc-filter-bar__btn:focus-visible {
  outline: 3px solid rgba(0, 74, 152, 0.3);
  outline-offset: 2px;
}

@media (width < 640px) {
  .bcfc-filter-bar {
    flex-direction: column;
    align-items: stretch;
  }
  .bcfc-filter-bar__search {
    min-width: unset;
  }
}
/* The selector on this block was lost in an edit — it read as a bare
   `{position:relative;min-width:140px}` with nothing in front of it, which made the `}` a
   syntax error and dropped both declarations. Restored as `.bcfc-year-select` on the evidence
   below it: `.bcfc-year-select::after` (line ~790) is `position:absolute; right:12px; top:50%`,
   i.e. the dropdown chevron, and an absolutely-positioned ::after with no positioned parent
   anchors to the nearest ancestor that does have one — so the chevron was landing somewhere
   else on the page entirely, not on the select. Caught by stylelint (CssSyntaxError), not by
   looking at the file. */
.bcfc-year-select {
  position: relative;
  min-width: 140px;
}

.bcfc-year-select select {
  appearance: none;
  width: 100%;
  padding: 8px 32px 8px 12px;
  border: 1px solid rgba(0, 74, 152, 0.1);
  border-radius: 8px;
  background: var(--bcfc-surface-raised, #fff);
  font-size: 0.9375rem;
  color: var(--bcfc-ink, #0c1f35);
  cursor: pointer;
  outline: none;
  transition: border-color 0.2s ease;
}

.bcfc-year-select select:focus {
  border-color: var(--bcfc-primary, #004a98);
}

.bcfc-year-select::after {
  content: "";
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 5px solid #6b7784;
  pointer-events: none;
}

/* Pagination moved to its own component file: /css/shared/components/bcfc-pagination.css.
   It is a site-wide control and did not belong in a page-specific stylesheet - keeping it here is
   why new listings kept writing their own look-alike pagination instead of reusing this one. */
/* ========================================
   Empty state
   ======================================== */
.bcfc-empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 48px 24px;
}

.bcfc-empty-state__icon {
  width: 56px;
  height: 56px;
  margin-bottom: 20px;
  color: #9fb3c8;
}

.bcfc-empty-state__icon svg {
  width: 100%;
  height: 100%;
}

.bcfc-empty-state__title {
  margin: 0 0 8px;
  color: var(--bcfc-dark-ink, var(--bcfc-navy));
  font: 800 1.1rem/1.3 "Almarai", sans-serif;
  text-transform: capitalize;
}

.bcfc-empty-state__message {
  margin: 0;
  color: var(--bcfc-ink, #6b7784);
  font: 500 0.95rem/1.6 "Almarai", sans-serif;
}

/* ========================================
   Related pages — full-width link banner
   Replaces the old related-pages card carousel: a single brand-blue band
   with the "continue browsing" copy on one side and the related links as
   inline pill buttons on the other. Sits full-bleed above the footer.
   ======================================== */
.bcfc-related-banner {
  /* Themeable palette — brand blue by default, Islamic green under body.is-islamic */
  --rb-grad-start: var(--bcfc-primary-dark, #00346a);
  --rb-grad-mid: var(--bcfc-primary, #004a98);
  --rb-grad-end: #0a5bb5;
  --rb-glow: rgba(243, 179, 53, 0.16);
  --rb-ink: var(--bcfc-primary-dark, #00346a);
  position: relative;
  padding: 40px 0;
  background: radial-gradient(120% 140% at 100% 0%, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 55%), linear-gradient(115deg, var(--rb-grad-start) 0%, var(--rb-grad-mid) 62%, var(--rb-grad-end) 100%);
  overflow: hidden;
}

body.is-islamic .bcfc-related-banner {
  --rb-grad-start: var(--bcfc-green-darker, #0c2d27);
  --rb-grad-mid: var(--bcfc-green-dark, #113e35);
  --rb-grad-end: #1c5a4c;
  --rb-glow: rgba(165, 209, 197, 0.2);
  --rb-ink: var(--bcfc-green-dark, #113e35);
}

/* Soft brand-tint glow anchored to the trailing edge for depth */
.bcfc-related-banner::after {
  content: "";
  position: absolute;
  inset-inline-end: -8%;
  top: -60%;
  width: 46%;
  height: 220%;
  background: radial-gradient(circle at center, var(--rb-glow) 0%, transparent 70%);
  pointer-events: none;
  z-index: 0;
}

.bcfc-related-banner__shell {
  position: relative;
  z-index: 1;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 28px 40px;
}

.bcfc-related-banner__copy {
  flex: 1 1 220px;
  min-width: 0;
}

/* placement + the softer white this kicker always had; the look is .bcfc-eyebrow */
.bcfc-related-banner__kicker {
  --eyebrow-ink: rgb(255 255 255 / 0.72);
  margin-block-end: 0.5rem;
}

.bcfc-related-banner__title {
  margin: 0;
  color: var(--bcfc-white);
  font: 800 clamp(1.55rem, 1.2rem + 1.1vw, 2.2rem)/1.14 "Almarai", sans-serif;
  text-transform: capitalize;
}

.bcfc-related-banner__links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 12px;
  margin: 0;
  padding: 0;
  list-style: none;
  flex: 1 1 auto;
  justify-content: flex-end;
}

.bcfc-related-banner__item {
  display: flex;
}

.bcfc-related-banner__pill {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  /* Tight on the leading (thumb) edge, roomy on the trailing (arrow) edge.
       Logical props keep the balance correct in RTL. */
  padding-block: 7px;
  padding-inline: 7px 20px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  background: rgba(255, 255, 255, 0.08);
  color: var(--bcfc-white);
  font: 700 0.95rem/1 "Almarai", sans-serif;
  text-decoration: none;
  white-space: nowrap;
  backdrop-filter: blur(2px);
  transition: background-color 0.22s ease, border-color 0.22s ease, transform 0.22s ease, box-shadow 0.22s ease;
}

.bcfc-related-banner__pill:hover {
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  border-color: var(--bcfc-white);
  color: var(--bcfc-dark-ink-brand, var(--rb-ink));
  transform: translateY(-2px);
  box-shadow: 0 12px 26px rgba(4, 20, 44, 0.28);
}

.bcfc-related-banner__pill:focus-visible {
  outline: 3px solid rgba(255, 255, 255, 0.55);
  outline-offset: 2px;
}

.bcfc-related-banner__pill-thumb {
  display: inline-flex;
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 50%;
  overflow: hidden;
  background: rgba(255, 255, 255, 0.18);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.3);
}

.bcfc-related-banner__pill-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.bcfc-related-banner__pill:hover .bcfc-related-banner__pill-thumb {
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--rb-ink) 20%, transparent);
}

.bcfc-related-banner__pill-arrow {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  transition: transform 0.22s ease;
}

.bcfc-related-banner__pill:hover .bcfc-related-banner__pill-arrow {
  transform: translateX(3px);
}

/* RTL: chevron points the reading direction, and travels the correct way */
.bcfc-related-banner[dir=rtl] .bcfc-related-banner__pill-arrow {
  transform: scaleX(-1);
}

.bcfc-related-banner[dir=rtl] .bcfc-related-banner__pill:hover .bcfc-related-banner__pill-arrow {
  transform: scaleX(-1) translateX(3px);
}

@media (max-width: 860px) {
  .bcfc-related-banner {
    padding: 32px 0;
  }
  .bcfc-related-banner__shell {
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
  }
  .bcfc-related-banner__links {
    justify-content: flex-start;
  }
}
/* ========================================
   Related pages — icon cards (_RelatedPagesList.cshtml)
   A 2-column grid of link cards: tinted icon tile + category tag + title +
   arrow, with a left accent bar that fills on hover. Icon + tag come from the
   RelatedPageIconLibrary auto-map (or the editor's relatedIcon/relatedTag
   override). Theme-aware: brand blue by default, Islamic green under
   body.is-islamic.
   ======================================== */ /* ── Related pages ("Continue browsing") ──────────────────────────────────────
Rendered by Views/Partials/PagePatterns/_RelatedPagesList.cshtml, which the site
footer and four page templates use. Laid out as a THREE column grid on desktop:
at two columns each card was ~790px wide holding ~40 characters, leaving a wide
void between the label and the chevron, and eight tall rows stacked into a very
long block above the footer. */
.bcfc-related-cards {
  /* Tokens, not hand-mixed hex (2026-08-31). Every value below was a literal that happened to
       sit near a ramp entry; they now ARE the ramp entry, so a palette change reaches this band.
       --rc-tile is the house icon-tile wash (--bcfc-blue-tint), --rc-line the blue-tinted hairline
       (a neutral grey rule reads as foreign here), --rc-panel the ONLY approved alternating band
       fill, --rc-tag the secondary-text step. */
  --rc-accent: var(--bcfc-primary, #004a98);
  --rc-tile: var(--bcfc-blue-tint, rgba(0, 74, 152, 0.07));
  --rc-line: var(--bcfc-border, #d9e4ef);
  --rc-tag: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500, #667085));
  --rc-panel: var(--bcfc-surface-raised, var(--bcfc-gray-50, #f9fafb));
  --rc-ring: color-mix(in srgb, var(--rc-accent) 16%, transparent);
  /* Was 2.5rem/2.75rem — roughly half the house band rhythm, which is why the band read as
       cramped between the last content section and the footer. --comp-band-y is the one value that
       drives every other band on the site; matched here so this one stops being the exception.
       Fallback repeats the clamp because this sheet also renders outside .bcfc-comp. */
  padding-block: var(--comp-band-y, clamp(60px, 7vw, 92px));
  background: var(--bcfc-surface-raised, var(--rc-panel));
  border-top: 1px solid var(--rc-line);
}

body.is-islamic .bcfc-related-cards {
  --rc-accent: var(--bcfc-green-dark, #113e35);
  /* The Islamic window tints the same three roles off --bcfc-green-dark rather than off four more
       literals, so retheming the window is one token. */
  --rc-tile: color-mix(in srgb, var(--rc-accent) 9%, var(--bcfc-white, #fff));
  --rc-line: color-mix(in srgb, var(--rc-accent) 14%, var(--bcfc-white, #fff));
  --rc-tag: color-mix(in srgb, var(--rc-accent) 62%, var(--bcfc-gray-500, #667085));
  --rc-panel: color-mix(in srgb, var(--rc-accent) 5%, var(--bcfc-white, #fff));
}

.bcfc-related-cards__head {
  margin-bottom: 1.15rem;
}

/* The eyebrow itself is the .bcfc-eyebrow component; this only feeds it the band accent. */
.bcfc-related-cards__eyebrow {
  --eyebrow-ink: var(--bcfc-ink-strong, var(--rc-accent));
  --eyebrow-rule: var(--rc-accent);
  line-height: 1;
}

/* Sized to sit ABOVE the cards without dwarfing them - the old clamp topped out at
   2.1rem against 1rem card labels, so the heading read as the only real content. */
.bcfc-related-cards__title {
  margin: 0.55rem 0 0;
  color: var(--bcfc-ink-strong, var(--bcfc-navy, #0f1f4b));
  font: 800 clamp(1.3rem, 1.05rem + 0.7vw, 1.7rem)/1.15 "Almarai", sans-serif;
  letter-spacing: -0.02em;
  /* NO `capitalize`. This heading is editor copy — _RelatedPagesList takes Model.Title and only
       falls back to the "Related Pages" literal — so capitalize title-cased whatever was typed,
       e.g. "More from our IR centre" -> "More From Our IR Centre". Same bug pages/CardsV18.css:132
       and bcfc-inline-partials.css:3450 already record for headings. */
  text-transform: none;
}

.bcfc-related-cards__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  /* House grid gap. At 12px the six cards read as one crowded slab; the wrap is 1200px so the
       cards only lose ~8px each. */
  gap: 24px;
}

.bcfc-related-cards__card {
  position: relative;
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 14px 16px;
  border: 1px solid var(--rc-line);
  /* 14px was off the radius scale (sm 8 / md 12 / lg 16 / xl 20); cards and panels sit at lg. */
  border-radius: var(--bcfc-radius-lg, 16px);
  background: var(--bcfc-surface-raised, var(--bcfc-white, #fff));
  color: inherit;
  text-decoration: none;
  /* The house lift easing, the same curve .btn:hover uses, instead of a plain `ease`. */
  transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.18s ease, border-color 0.18s ease;
}

.bcfc-related-cards__card:hover {
  transform: translateY(-2px);
  border-color: color-mix(in srgb, var(--rc-accent) 32%, var(--rc-line));
  /* Blue-tinted, like every other shadow on the site — the old one was a hand-mixed navy black.
       Hover ink may go brand blue here because the fill under it is WHITE (the house hover rule). */
  box-shadow: var(--bcfc-shadow-md, 0 8px 24px rgba(0, 74, 152, 0.12));
}

.bcfc-related-cards__card:focus-visible {
  outline: 2px solid var(--rc-accent);
  outline-offset: 2px;
}

.bcfc-related-cards__tile {
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  border-radius: var(--bcfc-radius-md, 12px);
  display: grid;
  place-items: center;
  background: var(--rc-tile);
  box-shadow: inset 0 0 0 1px var(--rc-ring);
  color: var(--bcfc-dark-ink-brand, var(--rc-accent));
  transition: background-color 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
}

.bcfc-related-cards__tile svg {
  width: 22px;
  height: 22px;
}

.bcfc-related-cards__card:hover .bcfc-related-cards__tile {
  background: var(--rc-accent);
  box-shadow: inset 0 0 0 1px transparent;
  color: var(--bcfc-white, #fff);
}

.bcfc-related-cards__body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

/* The category tag was 0.62rem (9.9px) - illegible on every page and worse in Arabic, whose
   glyphs run smaller at the same size. 0.75rem is the site's eyebrow size (12px at the default
   root), the floor for any text here; rem so the A+/A- control scales it. */
.bcfc-related-cards__tag {
  color: var(--bcfc-ink-muted, var(--rc-tag));
  font: 800 0.75rem/1.2 "Almarai", sans-serif;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}

.bcfc-related-cards__name {
  color: var(--bcfc-ink-strong, var(--bcfc-navy, #0f1f4b));
  transition: color 0.18s ease;
  font: 700 0.95rem/1.35 "Almarai", sans-serif;
  /* Wrap to a second line instead of ellipsis-truncating: single-line clipping cut real page
       titles mid-phrase, which is what made the cards look broken rather than tidy. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* A bare chevron floating in whitespace read as an artefact; as a disc that tints on
   hover it reads as the card's affordance. */
.bcfc-related-cards__arrow {
  margin-inline-start: auto;
  flex: 0 0 auto;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: var(--bcfc-ink-muted, var(--rc-tag));
  background: transparent;
  transition: background-color 0.18s ease, transform 0.18s ease, color 0.18s ease;
}

.bcfc-related-cards__arrow svg {
  width: 16px;
  height: 16px;
}

.bcfc-related-cards__card:hover .bcfc-related-cards__arrow {
  background: var(--rc-tile);
  color: var(--bcfc-dark-ink-brand, var(--rc-accent));
  transform: translateX(2px);
}

.bcfc-related-cards__card:hover .bcfc-related-cards__name {
  color: var(--bcfc-dark-ink-brand, var(--rc-accent));
}

/* Arabic letterforms are cursive and DISCONNECT when tracked, so the two tracked styles in this
   band (the tag at .09em; the eyebrow resets inside its component) reset to normal in RTL. House rule, stated in
   bcfc-comp.css; logical properties cover everything else here, this is one of the two cases they
   do not. */
.bcfc-related-cards[dir=rtl] .bcfc-related-cards__tag {
  letter-spacing: normal;
}

/* RTL: chevron points/travels the reading direction */
.bcfc-related-cards[dir=rtl] .bcfc-related-cards__arrow {
  transform: scaleX(-1);
}

/* RTL: directional icons (plane, megaphone, transfer) still point toward the LTR-forward
   direction unless mirrored — flipping the whole tile matches the arrow above and is a
   no-op for the symmetric icons in the set (trophy, tag, store, etc.). */
.bcfc-related-cards[dir=rtl] .bcfc-related-cards__tile svg {
  transform: scaleX(-1);
}

.bcfc-related-cards[dir=rtl] .bcfc-related-cards__card:hover .bcfc-related-cards__arrow {
  transform: scaleX(-1) translateX(2px);
}

@media (max-width: 1024px) {
  .bcfc-related-cards__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 640px) {
  .bcfc-related-cards {
    /* Under 640px the house clamp already bottoms out near 60px; trimmed a touch further
           because the band is the last thing before the footer on a phone. */
    padding-block: clamp(40px, 9vw, 60px);
  }
  /* A single stacked column of up to 8 cards ran the band to several screens tall on a phone —
       the single most complained-about length on this page. Swapped for a horizontal, snap-scroll
       strip: same cards, one row, swipeable. The 82% card width intentionally leaves the next card
       peeking in so the strip reads as scrollable without a hint label. */
  .bcfc-related-cards__grid {
    display: flex;
    grid-template-columns: none;
    gap: 12px;
    overflow-x: auto;
    overflow-y: visible;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: var(--bcfc-space-gutter, 16px);
    -webkit-overflow-scrolling: touch;
    /* Let the hover lift (translateY) and focus ring render without being clipped by the
           scroller, and give the last card room to breathe past the edge. */
    padding-block: 4px;
    padding-inline-end: 8px;
    margin-inline: calc(var(--bcfc-space-gutter, 16px) * -1);
    padding-inline-start: var(--bcfc-space-gutter, 16px);
    scrollbar-width: none;
  }
  .bcfc-related-cards__grid::-webkit-scrollbar {
    display: none;
  }
  .bcfc-related-cards__card {
    flex: 0 0 82%;
    scroll-snap-align: start;
  }
  /* One line here, not two — a snap card is narrow and fixed-width, so a wrapped second line
       made cards in the same strip different heights and the snap points visibly misaligned. */
  .bcfc-related-cards__name {
    -webkit-line-clamp: 1;
  }
}
@media (prefers-reduced-motion: reduce) {
  .bcfc-related-cards__card,
  .bcfc-related-cards__arrow,
  .bcfc-related-cards__tile,
  .bcfc-related-cards__name {
    transition: none;
  }
}
/* PHONE TEXT FLOOR (mobile audit 2026-10-14): the tag's 11px phone override is gone - the
   base size above (0.75rem) is now legible at every width, so the phone needs no special case. */
/* PHONE: ONE ROW OF DOTS (mobile audit 2026-10-14). A carousel with a dozen slides (IMTIAZ Offers
   on the homepage: 12) needed ~520px of 30px dashes and wrapped onto a second row under a 311px
   pager, which read as a rendering fault. The row no longer wraps, and the dots shrink to share it
   instead - flex-shrink works whatever width another sheet sets, including the !important ones,
   so this does not have to win that fight. The active dot keeps its full length. */
@media (max-width: 640px) {
  .bcfc-card-carousel__pagination {
    flex-wrap: nowrap;
    gap: 4px;
  }
  .bcfc-card-carousel__pagination .swiper-pagination-bullet {
    flex: 0 1 auto;
    min-width: 6px;
    /* The phone rule above spaces dots with a 4px !important margin each side; with a dozen dots
       that alone is 96px. The 4px row gap does the spacing here instead. */
    margin: 0 !important;
  }
  .bcfc-card-carousel__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active {
    flex-shrink: 0;
  }
}
@charset "UTF-8";
/* ==========================================================================
   BCFC Pagination — the one pagination look for the whole site.

   Rendered only by Views/Partials/Shared/_BcfcPagination.cshtml. Moved out of
   bcfc-guideline-cards.css, where a site-wide component had ended up buried inside a
   page-specific file; that is why new listings kept growing their own look-alike styles
   (the IMTIAZ offers listing had a whole second copy inline in its view).

   Every custom property carries a literal fallback on purpose: the tokens are declared on
   :root by style.css, but a component reused inside a page that re-scopes its own tokens
   would otherwise resolve var() to nothing and render an invalid value.

   Works for both markup modes the partial emits — <a> for real links, <button data-page>
   for AJAX listings — so they are styled by the same selectors and cannot drift.
   ========================================================================== */
.bcfc-pagination {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 24px 0 8px;
}

.bcfc-pagination__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  min-height: 40px;
  padding: 0 8px;
  border-radius: 8px;
  border: 1px solid rgba(0, 74, 152, 0.15);
  background: var(--bcfc-surface-raised, var(--bcfc-white, #ffffff));
  color: var(--bcfc-ink-link, var(--bcfc-primary-dark, #00346a));
  font: 700 0.9375rem/1 "Almarai", Arial, sans-serif;
  /* Bootstrap (/css/index.css) loads after the bundles and sets a { text-decoration: underline }.
       A class beats a bare element selector, so this holds regardless of order. */
  text-decoration: none;
  transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
  cursor: pointer;
}

.bcfc-pagination__btn:hover:not(.bcfc-pagination__btn--active):not([disabled]) {
  background: var(--bcfc-primary-dark, #00346a);
  color: var(--bcfc-white, #ffffff);
  border-color: var(--bcfc-primary-dark, #00346a);
  text-decoration: none;
}

.bcfc-pagination__btn--active,
.bcfc-pagination__btn[aria-current=page] {
  background: var(--bcfc-primary, #004a98);
  color: var(--bcfc-white, #ffffff);
  border-color: var(--bcfc-primary, #004a98);
  cursor: default;
}

/* The partial always renders first/prev/next/last so the control never changes width as you
   page through; the ends are disabled rather than removed, so they need a real disabled look. */
.bcfc-pagination__btn[disabled],
.bcfc-pagination__btn--disabled {
  opacity: 0.4;
  cursor: default;
  pointer-events: none;
}

.bcfc-pagination__btn:focus-visible {
  outline: 3px solid rgba(0, 74, 152, 0.4);
  outline-offset: 2px;
}

.bcfc-pagination__btn svg {
  width: 16px;
  height: 16px;
  flex: none;
}

/* Gap marker between non-contiguous page numbers ("1 … 5 6 7 … 12"). Not a control: no border,
   no background, no hover. */
.bcfc-pagination__gap {
  display: inline-flex;
  align-items: flex-end;
  justify-content: center;
  min-width: 24px;
  height: 40px;
  padding-bottom: 10px;
  color: var(--bcfc-ink, #6b7784);
  font: 700 0.9375rem/1 "Almarai", Arial, sans-serif;
  user-select: none;
}

.bcfc-pagination__info {
  width: 100%;
  text-align: center;
  padding-top: 12px;
  color: var(--bcfc-ink, #6b7784);
  font: 500 0.9375rem/1 "Almarai", Arial, sans-serif;
}

/* Arrows must point the other way in Arabic. rtl-ar.css already mirrors `.bcfc-pagination i`
   for icon-font arrows, but this component draws inline SVG, which that rule does not match. */
[dir=rtl] .bcfc-pagination__btn svg {
  transform: scaleX(-1);
}

@media (max-width: 480px) {
  .bcfc-pagination {
    gap: 6px;
  }
  .bcfc-pagination__btn {
    min-width: 36px;
    min-height: 36px;
    padding: 0 6px;
  }
}
@charset "UTF-8";
/*
====================================
Pill Navigation Component
Mega menu style - matches provided design
====================================
*/
/* ============================================
   1. PILL NAVIGATION BAR
   ============================================ */
.bcfc-pill-nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--bcfc-surface-raised, rgba(255, 255, 255, 0.92));
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid #e2e8f0;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
}

.bcfc-pill-nav__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 32px;
  height: 72px;
}

/* ============================================
   2. BRAND
   ============================================ */
.bcfc-pill-nav__brand {
  display: flex;
  align-items: center;
  text-decoration: none;
  flex-shrink: 0;
}

.bcfc-pill-nav__logo {
  height: 32px;
  width: auto;
  display: block;
}

.bcfc-pill-nav__brand-name {
  font-size: 1.1rem;
  font-weight: 900;
  color: var(--bcfc-ink-link, #00529b);
  letter-spacing: -0.02em;
  line-height: 1;
}

/* ============================================
   3. CENTRAL PILL NAVIGATION
   ============================================ */
.bcfc-pill-nav__pills {
  display: none;
  align-items: center;
  gap: 8px;
  flex: 1;
  justify-content: center;
}

@media (min-width: 1024px) {
  .bcfc-pill-nav__pills {
    display: flex;
  }
}
.bcfc-pill-nav__pill-item {
  position: static;
}

.bcfc-pill-nav__pill-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 8px 20px;
  border-radius: 999px;
  font-size: 0.9375rem;
  font-weight: 600;
  font-family: "Almarai", system-ui, sans-serif;
  text-decoration: none;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
  background: transparent;
  border: 1px solid transparent;
  cursor: pointer;
  transition: all 0.2s ease;
  white-space: nowrap;
  line-height: 1.4;
}

.bcfc-pill-nav__pill-btn:hover {
  background: var(--bcfc-surface-sunken, #f1f5f9);
  color: var(--bcfc-dark-ink-brand, #00529b);
}

.bcfc-pill-nav__pill-btn.is-active {
  background: #00529b;
  color: var(--bcfc-white);
  font-weight: 700;
}

.bcfc-pill-nav__pill-btn[aria-expanded=true] {
  background: #00529b;
  color: var(--bcfc-white);
}

/* ============================================
   4. RIGHT ACTIONS
   ============================================ */
.bcfc-pill-nav__actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

.bcfc-pill-nav__action-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 8px;
  color: var(--bcfc-ink-link, #00529b);
  text-decoration: none;
  transition: background 0.2s ease, color 0.2s ease;
  cursor: pointer;
  background: transparent;
  border: none;
}

.bcfc-pill-nav__action-btn:hover {
  background: var(--bcfc-surface-sunken, #eff6ff);
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
}

.bcfc-pill-nav__action-btn svg {
  display: block;
}

.bcfc-pill-nav__arabic-btn {
  display: inline-flex;
  align-items: center;
  padding: 6px 16px;
  border-radius: 999px;
  border: 1.5px solid #00529b;
  color: var(--bcfc-ink-link, #00529b);
  font-size: 0.8625rem;
  font-weight: 700;
  font-family: "Almarai", system-ui, sans-serif;
  text-decoration: none;
  cursor: pointer;
  background: transparent;
  transition: all 0.2s ease;
  white-space: nowrap;
}

.bcfc-pill-nav__arabic-btn:hover {
  background: #00529b;
  color: var(--bcfc-white);
}

.bcfc-pill-nav__login-btn {
  display: inline-flex;
  align-items: center;
  padding: 8px 24px;
  border-radius: 8px;
  background: #00529b;
  color: var(--bcfc-white);
  font-size: 0.8625rem;
  font-weight: 700;
  font-family: "Almarai", system-ui, sans-serif;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.2s ease;
  box-shadow: 0 1px 2px rgba(0, 82, 155, 0.2);
  border: none;
}

.bcfc-pill-nav__login-btn:hover {
  background: var(--bcfc-primary-dark);
  transform: translateY(-1px);
  box-shadow: 0 2px 4px rgba(0, 82, 155, 0.3);
}

.bcfc-pill-nav__islamic-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 14px;
  border-radius: 8px;
  background: var(--bcfc-surface-sunken, #f0f6fc);
  border: 1px solid #d0dbe6;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary));
  font-size: 0.8425rem;
  font-weight: 700;
  font-family: "Almarai", system-ui, sans-serif;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.2s ease;
}

.bcfc-pill-nav__islamic-toggle:hover {
  background: var(--bcfc-primary);
  border-color: var(--bcfc-primary);
  color: var(--bcfc-white);
  transform: translateY(-1px);
}

.bcfc-pill-nav__islamic-icon {
  width: 20px;
  height: 20px;
  object-fit: contain;
}

.bcfc-pill-nav__islamic-label {
  white-space: nowrap;
}

.bcfc-pill-nav__menu-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 8px;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
  cursor: pointer;
  background: transparent;
  border: none;
  transition: background 0.2s ease;
}

.bcfc-pill-nav__menu-btn:hover {
  background: var(--bcfc-surface-sunken, #f1f5f9);
}

@media (min-width: 1024px) {
  .bcfc-pill-nav__menu-btn {
    display: none;
  }
}
.bcfc-pill-nav__dropdown {
  position: absolute;
  top: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  min-width: 220px;
  background-color: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.55));
  backdrop-filter: blur(24px) saturate(180%);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, 0.4);
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(14, 44, 92, 0.18);
  padding: 6px;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
  z-index: 49;
}

.bcfc-pill-nav__pill-item.is-open .bcfc-pill-nav__dropdown {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateX(-50%) translateY(0);
}

.bcfc-pill-nav__dropdown-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 14px;
  border-radius: 8px;
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
  text-decoration: none;
  transition: all 0.15s ease;
  white-space: nowrap;
}

.bcfc-pill-nav__dropdown-link:hover {
  background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
  color: var(--bcfc-dark-ink-brand, #00529b);
}

.bcfc-pill-nav__dropdown-arrow {
  opacity: 0;
  transform: translateX(-4px);
  transition: all 0.15s ease;
  color: var(--bcfc-ink-link, #00529b);
  flex-shrink: 0;
}

.bcfc-pill-nav__dropdown-link:hover .bcfc-pill-nav__dropdown-arrow {
  opacity: 1;
  transform: translateX(0);
}

/* ============================================
   5. MEGA DROPDOWN
   ============================================ */
.bcfc-pill-nav__pill-item {
  position: relative;
}

.bcfc-pill-nav__pill-item .mega-dropdown {
  position: fixed;
  top: 72px;
  inset-inline: 0;
  width: min(1480px, 100vw);
  margin-inline: auto;
  z-index: 49;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.2s ease, visibility 0.2s ease;
}

.bcfc-pill-nav__pill-item.is-open .mega-dropdown,
.bcfc-pill-nav__pill-item[data-nav-item].is-open .mega-dropdown {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.mega-dropdown__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.08);
  z-index: -1;
}

.mega-dropdown__panel {
  max-width: min(1800px, 100vw - 24px);
  margin: 0 auto;
  padding: 32px;
  background-color: var(--bcfc-surface-scrim, rgba(255, 255, 255, 0.55));
  backdrop-filter: blur(24px) saturate(180%);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, 0.4);
  box-shadow: 0 20px 60px rgba(14, 44, 92, 0.18);
  display: flex;
  gap: 32px;
  overflow: hidden;
  border-radius: 16px;
}

/* ============================================
   6. MEGA DROPDOWN LINKS
   ============================================ */
.mega-dropdown__group {
  padding: 0;
  min-width: 200px;
  background: transparent !important;
  box-shadow: none !important;
  border: none !important;
  border-radius: 12px;
  margin: 0 8px;
}

.mega-dropdown__group-title {
  font-size: 0.7625rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
  margin-bottom: 16px;
  padding-top: 12px;
  padding-bottom: 8px;
}

.mega-dropdown__group-title--link {
  display: block;
  text-decoration: none;
  transition: color 0.15s ease;
}

.mega-dropdown__group-title--link:hover {
  color: var(--bcfc-ink-link-hover, #00529b);
}

.mega-dropdown__group--split .mega-dropdown__group-title {
  text-align: start;
}

.mega-dropdown__links {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.mega-dropdown__links-row {
  display: flex;
  gap: 32px;
}

.mega-dropdown__links-cols {
  display: flex;
  gap: 32px;
  padding: 32px 0;
  flex: 1;
}

.mega-dropdown__links-col {
  min-width: 200px;
}

.mega-dropdown__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 14px;
  border-radius: 10px;
  font-size: 0.9625rem;
  font-weight: 600;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
  text-decoration: none;
  transition: all 0.15s ease;
  border-left: 3px solid transparent;
  margin-bottom: 2px;
}

.mega-dropdown__link:hover {
  background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
  color: var(--bcfc-dark-ink-brand, #00529b);
  border-left-color: #00529b;
}

/* ---- RICH LINK ROWS: icon + label + description -------------------------------------------
   Navigation/_MegaMenuPill.cshtml (and the three bcfcHeaderNavigation* block previews that
   mirror it) emit .mega-dropdown__link-icon / -text / -desc whenever a configured link carries
   an image or a description -- bcfcHeaderNavigationLinkBlock's `image` and `description`
   fields. No sheet anywhere defined them, so the icon rendered at the media item's NATURAL
   size, the label and its description ran together on one line, and .mega-dropdown__link's own
   `justify-content: space-between` pushed the icon and the text to opposite ends of the row.

   SCOPED TO --rich DELIBERATELY. .mega-dropdown__link-text is also emitted on every PLAIN
   single-column link, where it needs no rule and must keep the layout it has today; only the
   rich branch changes.

   No physical sides and no row-reverse: the LTR order is [icon][text] and dir="rtl" mirrors it
   on its own -- see the long note on [dir="rtl"] .mega-dropdown__link in rtl-ar.css.

   THE DOUBLED CLASS IS LOAD-BEARING. The live header renders Navigation/_MegaMenuPill.cshtml
   inside `.bcfc-header__mega-panel` (BCFCNavigation.cshtml:273), and bcfc-inline-partials.css
   carries its own `.bcfc-header__mega-panel .mega-dropdown__link` copy that re-sets
   justify-content, align-items AND white-space. A single `.mega-dropdown__link--rich` loses to
   it on specificity; `.mega-dropdown__link.mega-dropdown__link--rich` matches it and wins on
   order, because bcfc-inline-partials.css is bundle-critical and this sheet is bundle-main. */
.mega-dropdown__link.mega-dropdown__link--rich {
  align-items: flex-start;
  justify-content: flex-start;
}

.mega-dropdown__link--rich .mega-dropdown__link-icon {
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: 8px;
  background: var(--bcfc-blue-tint);
  overflow: hidden;
}

.mega-dropdown__link--rich .mega-dropdown__link-icon img {
  display: block;
  width: auto;
  max-width: 22px;
  max-height: 22px;
  object-fit: contain;
}

/* min-inline-size:0 so a long description WRAPS inside the panel column instead of widening
   the flex row past .mega-dropdown__panel. text-align:start rather than inheriting the row, and
   white-space:normal because the header panel's copy of the link rule sets `nowrap` and that
   INHERITS -- with it, a description cannot wrap however wide the column is. */
.mega-dropdown__link--rich .mega-dropdown__link-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-inline-size: 0;
  text-align: start;
  white-space: normal;
}

/* Secondary ink, same treatment as .mega-dropdown__promo-desc below: the ink token if a dark
   surface has re-anchored it, the neutral ramp's secondary grey otherwise. It sets its own
   colour so the row's blue hover does not repaint the description. */
.mega-dropdown__link-desc {
  font-size: 0.8425rem;
  font-weight: 400;
  line-height: 1.5;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500));
}

/* ============================================
   7. MEGA DROPDOWN PROMO
   ============================================ */
.mega-dropdown__promo {
  display: flex;
  flex-direction: column;
  width: 320px;
  min-width: 280px;
  max-width: 360px;
  text-decoration: none;
  border-radius: 12px;
  overflow: hidden;
  background: transparent !important;
  border: 1px solid rgba(15, 41, 66, 0.12);
  transition: all 0.2s ease;
  flex-shrink: 0;
}

.mega-dropdown__promo:hover {
  background: transparent !important;
  border-color: rgba(15, 41, 66, 0.22);
}

.mega-dropdown__promo-media {
  position: relative;
  width: 100%;
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 12px;
}

.mega-dropdown__promo-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s ease;
  border-radius: 12px;
}

.mega-dropdown__promo:hover .mega-dropdown__promo-media img {
  transform: scale(1.04);
}

.mega-dropdown__promo-body {
  padding: 20px 24px 24px;
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.mega-dropdown__promo-kicker {
  font-size: 0.7625rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--bcfc-ink-strong, #00529b);
}

.mega-dropdown__promo-title {
  font-size: 1rem;
  font-weight: 800;
  color: var(--bcfc-dark-ink, var(--bcfc-gray-900));
  line-height: 1.3;
  text-transform: capitalize;
}

.mega-dropdown__promo-desc {
  font-size: 0.8825rem;
  color: var(--bcfc-ink-muted, #64748b);
  line-height: 1.6;
  margin: 0;
}

/* ============================================
   8. RTL SUPPORT
   ============================================ */
/* ============================================
   SAHEL THEME OVERRIDES
   ============================================ */
body.sahel-page .bcfc-pill-nav {
  background: var(--bcfc-surface-raised, rgba(255, 255, 255, 0.95));
  border-bottom: 1px solid rgba(101, 195, 160, 0.3);
}

body.sahel-page .bcfc-pill-nav__brand-name {
  color: var(--bcfc-green-dark);
}

body.sahel-page .bcfc-pill-nav__pills {
  /* Sahel green for pill nav background */
}

body.sahel-page .bcfc-pill-nav__pill-btn {
  color: var(--bcfc-green-dark);
}

body.sahel-page .bcfc-pill-nav__pill-btn:hover {
  background: rgba(101, 195, 160, 0.1);
  color: var(--bcfc-green);
}

body.sahel-page .bcfc-pill-nav__pill-btn.is-active,
body.sahel-page .bcfc-pill-nav__pill-btn[aria-expanded=true] {
  background: var(--bcfc-green);
  color: var(--bcfc-white);
}

body.sahel-page .bcfc-pill-nav__action-btn {
  color: var(--bcfc-green-dark);
}

body.sahel-page .bcfc-pill-nav__action-btn:hover {
  background: rgba(101, 195, 160, 0.1);
  color: var(--bcfc-green);
}

body.sahel-page .bcfc-pill-nav__arabic-btn {
  border-color: var(--bcfc-green);
  color: var(--bcfc-green);
}

body.sahel-page .bcfc-pill-nav__arabic-btn:hover {
  background: var(--bcfc-green);
  color: var(--bcfc-white);
}

body.sahel-page .bcfc-pill-nav__login-btn {
  background: var(--bcfc-green-dark);
}

body.sahel-page .bcfc-pill-nav__login-btn:hover {
  background: var(--bcfc-green-darker);
}

body.sahel-page .bcfc-pill-nav__menu-btn {
  color: var(--bcfc-green-dark);
}

body.sahel-page .bcfc-pill-nav__menu-btn:hover {
  background: rgba(101, 195, 160, 0.1);
}

/* Mega dropdown Sahel theme */
body.sahel-page .bcfc-pill-nav__pill-item .mega-dropdown {
  z-index: 49;
}

/* The mega nav is site chrome, not page chrome: Sahel no longer retints it.
   Every colour override that used to live here (green panel border, green group
   titles, green link hover, green promo, dark-green backdrop) was removed on
   request, along with the opaque-white panel background that supported them, so
   the dropdown now renders identically to every other page. Only the z-index
   rule above survives, because it is layout, not colour. */
/* Islamic section (body.is-islamic) — NOT the Sahel Islamic page, whose body class
   is `sahel-islamic-page` and which carries no Islamic green in the nav at all.
   Left in place when the Sahel mega theme above was removed. */
body.is-islamic .mega-dropdown__link {
  color: var(--bcfc-dark-ink-green, var(--bcfc-color-secondary));
}

body.is-islamic .mega-dropdown__link:hover {
  color: var(--bcfc-dark-ink-green, var(--bcfc-color-secondary));
  border-left-color: var(--bcfc-color-secondary);
}

/* RTL Sahel overrides */
/* Mobile menu Sahel */
body.sahel-page .bcfc-pill-nav__mobile-link:hover,
body.sahel-page .bcfc-pill-nav__mobile-link.is-active {
  background: rgba(101, 195, 160, 0.1);
  color: var(--bcfc-green);
}

body.sahel-page .bcfc-pill-nav__mobile-lang:hover {
  background: var(--bcfc-green);
  color: var(--bcfc-white);
}

body.sahel-page .bcfc-pill-nav__mobile-overlay {
  background: rgba(17, 62, 53, 0.5);
}

/* ============================================
   10. RESPONSIVE
   ============================================ */
.bcfc-pill-nav__mobile-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.4);
  z-index: 48;
}

.bcfc-pill-nav__mobile-menu {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(360px, 90vw);
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  z-index: 51;
  transform: translateX(100%);
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  overflow-y: auto;
  box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
}

.bcfc-pill-nav__mobile-menu.is-open,
.bcfc-pill-nav__mobile-menu[aria-hidden=false] {
  transform: translateX(0);
}

.bcfc-pill-nav__mobile-panel {
  display: flex;
  flex-direction: column;
  min-height: 100%;
}

.bcfc-pill-nav__mobile-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px 24px;
  border-bottom: 1px solid #f1f5f9;
}

.bcfc-pill-nav__mobile-close {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 8px;
  border: none;
  background: var(--bcfc-surface-sunken, #f1f5f9);
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
  cursor: pointer;
  transition: background 0.2s ease;
}

.bcfc-pill-nav__mobile-close:hover {
  background: var(--bcfc-surface-sunken, #e2e8f0);
}

.bcfc-pill-nav__mobile-nav {
  /* No flex-grow: the footer sits directly under the last link instead of
       being pushed to the bottom of the panel, which left an empty band with a
       floating border above it. */
  flex: 0 0 auto;
  padding: 16px 24px 8px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.bcfc-pill-nav__mobile-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 16px;
  border-radius: 12px;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
  text-decoration: none;
  transition: all 0.15s ease;
}

.bcfc-pill-nav__mobile-link:hover,
.bcfc-pill-nav__mobile-link.is-active {
  background: var(--bcfc-surface-sunken, #eff6ff);
  color: var(--bcfc-ink-link-hover, #00529b);
}

.bcfc-pill-nav__mobile-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 8px;
  border: none;
  background: transparent;
  color: var(--bcfc-ink-link, #64748b);
  cursor: pointer;
  transition: all 0.15s ease;
}

.bcfc-pill-nav__mobile-toggle:hover {
  background: var(--bcfc-surface-sunken, #f1f5f9);
  color: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700));
}

.bcfc-pill-nav__mobile-children {
  display: none;
  flex-direction: column;
  gap: 2px;
  padding: 4px 0 4px 16px;
}

.bcfc-pill-nav__mobile-children.is-open {
  display: flex;
}

.bcfc-pill-nav__mobile-child-link {
  display: block;
  padding: 10px 16px;
  border-radius: 8px;
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--bcfc-ink-link, #64748b);
  text-decoration: none;
  transition: all 0.15s ease;
}

.bcfc-pill-nav__mobile-child-link:hover {
  background: var(--bcfc-surface-raised, var(--bcfc-gray-50));
  color: var(--bcfc-dark-ink-brand, #00529b);
}

.bcfc-pill-nav__mobile-footer {
  margin-top: 8px;
  padding: 16px 24px 24px;
  border-top: 1px solid #eef2f6;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.bcfc-pill-nav__mobile-lang {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 12px 16px;
  border-radius: 12px;
  border: 1.5px solid #00529b;
  color: var(--bcfc-ink-link, #00529b);
  font-size: 0.9125rem;
  font-weight: 700;
  text-decoration: none;
  text-align: center;
  transition: background 0.2s ease, color 0.2s ease;
}

.bcfc-pill-nav__mobile-lang:hover {
  background: #00529b;
  color: var(--bcfc-white);
}

.bcfc-pill-nav__mobile-phone {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 12px 16px;
  border-radius: 12px;
  background: var(--bcfc-surface-sunken, #eff6ff);
  font-size: 0.9125rem;
  font-weight: 700;
  color: var(--bcfc-ink-link, #00529b);
  text-decoration: none;
  text-align: center;
  transition: background 0.2s ease;
}

.bcfc-pill-nav__mobile-phone:hover {
  background: #dbeafe;
}

/* ============================================
   10. RESPONSIVE
   ============================================ */
@media (width < 1024px) {
  .bcfc-pill-nav__inner {
    padding: 0 20px;
    height: 64px;
  }
  .bcfc-pill-nav__pills {
    display: none !important;
  }
  .bcfc-pill-nav__arabic-btn {
    display: none;
  }
}
@media (width < 768px) {
  .bcfc-pill-nav__inner {
    gap: 12px;
  }
  .bcfc-pill-nav__login-btn {
    padding: 8px 16px;
    font-size: 0.8125rem;
  }
}
/* ─── Inline Search Bar ─── */
.bcfc-pill-nav__search-bar {
  background: var(--bcfc-surface-raised, var(--bcfc-white));
  border-bottom: 1px solid #d8e8f4;
}

.bcfc-pill-nav__search-bar-inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px;
}

.bcfc-pill-nav__search-form {
  display: flex;
  align-items: center;
  gap: 0;
  max-width: 520px;
}

.bcfc-pill-nav__search-input {
  flex: 1;
  min-height: 48px;
  padding: 0 12px;
  border: none;
  border-radius: 0;
  font-size: 1rem;
  color: var(--bcfc-text-dark);
  background: transparent;
  outline: none;
  box-shadow: none;
}

.bcfc-pill-nav__search-input::placeholder {
  color: var(--bcfc-text-light);
  opacity: 0.6;
}

.bcfc-pill-nav__search-input:focus-visible {
  box-shadow: inset 0 0 0 2px var(--bcfc-primary);
}

.bcfc-pill-nav__search-submit {
  width: 48px;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  border-radius: 0;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary));
  cursor: pointer;
  transition: color 0.2s ease;
  flex-shrink: 0;
}

.bcfc-pill-nav__search-submit:hover {
  color: var(--bcfc-dark-ink-brand, var(--bcfc-primary-dark));
}
/* ==========================================================================
   BCFC · Sahel App Band v2 (.bcfc-appshow)
   Compact upgrade of .bcfc-app-band: lifestyle image + copy, live phone
   in the centre that breaks out of the top border, ambient motion.
   Default theme = Sahel green. Add .bcfc-appshow--conventional for blue.
   ========================================================================== */

.bcfc-appshow {
  --as-stage: #002719;
  --as-stage-2: #0b3a2a;
  --as-accent: #a9dbc8;
  --as-accent-2: #f0e06c;
  --as-line: rgba(169, 219, 200, .16);
  --as-ink: #fff;
  --as-ink-muted: rgba(255, 255, 255, .78);
  --as-btn-bg: #f0e06c;
  --as-btn-ink: #002719;
  --as-pw: clamp(128px, 11vw, 148px);     /* phone width */
  --as-lift: 0px;                           /* space reserved above the band */
  --as-radius: 24px;
  --as-ease: cubic-bezier(.22, 1, .36, 1);

  position: relative;
  margin-block: 40px;
  padding-top: var(--as-lift);
  font-family: var(--bcfc-ff-primary, "Almarai", Arial, sans-serif);
}

.bcfc-appshow--conventional {
  --as-stage: #062a63;
  --as-stage-2: #0f4fa8;
  --as-accent: #a9c7f0;
  --as-accent-2: #f3db6e;
  --as-line: rgba(169, 199, 240, .2);
  --as-btn-bg: #fff;
  --as-btn-ink: #062a63;
}

/* IMTIAZ card pages: inherit the page's own card colour (--gold / --gold-deep) */
.bcfc-appshow--card {
  --as-stage: var(--gold-deep, #062a63);
  --as-stage-2: var(--gold, #083b8a);
  --as-accent: color-mix(in srgb, var(--gold, #083b8a) 30%, #fff);
  --as-accent-2: #f3db6e;
  --as-line: rgba(255, 255, 255, .16);
  --as-btn-bg: #fff;
  --as-btn-ink: var(--gold-deep, #062a63);
}

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

/* ---------- Stage ---------- */
.bcfc-appshow__stage {
  position: relative;
  isolation: isolate;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  align-items: center;
  min-height: 360px;
  border-radius: var(--as-radius);
  color: var(--as-ink);
}

/* Everything that must stay inside the rounded border */
.bcfc-appshow__clip {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  border-radius: inherit;
  background: linear-gradient(150deg, var(--as-stage-2) 0%, var(--as-stage) 60%);
  pointer-events: none;
}
.bcfc-appshow__glow {
  position: absolute;
  aspect-ratio: 1;
  border-radius: 50%;
  will-change: transform;
}
.bcfc-appshow__glow--a {
  width: 55%;
  inset-block-start: -45%;
  inset-inline-start: 20%;
  background: radial-gradient(closest-side, color-mix(in srgb, var(--as-accent) 30%, transparent), transparent);
  animation: as-drift-a 22s ease-in-out infinite alternate;
}
.bcfc-appshow__glow--b {
  width: 45%;
  inset-block-end: -55%;
  inset-inline-start: -8%;
  background: radial-gradient(closest-side, color-mix(in srgb, var(--as-accent-2) 16%, transparent), transparent);
  animation: as-drift-b 28s ease-in-out infinite alternate;
}

/* Orbit rings — confined to the copy side, radiating from the seam */
.bcfc-appshow__orbit {
  position: absolute;
  inset-block: 0;
  inset-inline-start: 0;
  width: 50%;
  overflow: hidden;
}
.bcfc-appshow__rings {
  position: absolute;
  top: 50%;
  inset-inline-end: 0;
  width: 0;
  height: 0;
}
.bcfc-appshow__ring {
  position: absolute;
  top: 0;
  left: 0;
  aspect-ratio: 1;
  border: 1px solid var(--as-line);
  border-radius: 50%;
  transform: translate(-50%, -50%);
  animation: as-spin 70s linear infinite;
}
.bcfc-appshow__ring::before {
  content: "";
  position: absolute;
  top: -4px;
  left: calc(50% - 4px);
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--as-accent-2);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--as-accent-2) 16%, transparent);
}
.bcfc-appshow__ring--1 { width: calc(var(--as-pw) * 1.75); }
.bcfc-appshow__ring--2 { width: calc(var(--as-pw) * 2.6); animation-duration: 100s; animation-direction: reverse; }
.bcfc-appshow__ring--2::before { background: var(--as-accent); box-shadow: 0 0 0 5px color-mix(in srgb, var(--as-accent) 16%, transparent); }
.bcfc-appshow__ring--3 { width: calc(var(--as-pw) * 3.6); animation-duration: 140s; }
.bcfc-appshow__ring--3::before { opacity: .55; }

/* Lifestyle image — fills the inline-end half, fades into the stage at the seam */
.bcfc-appshow__media {
  position: absolute;
  inset-block: 0;
  inset-inline-end: 0;
  width: 50%;
  margin: 0;
}
.bcfc-appshow__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 26%);
  mask-image: linear-gradient(to right, transparent 0, #000 26%);
}
.bcfc-appshow[dir="rtl"] .bcfc-appshow__media img {
  -webkit-mask-image: linear-gradient(to left, transparent 0, #000 26%);
  mask-image: linear-gradient(to left, transparent 0, #000 26%);
}

/* ---------- Copy ---------- */
.bcfc-appshow__copy {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  padding-block: 44px;
  padding-inline: clamp(28px, 4vw, 56px) calc(var(--as-pw) * .5 + 28px);
}
.bcfc-appshow .bcfc-appshow__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  margin: 0;
  color: var(--as-accent);
  font-size: .875rem;
  font-weight: 700;
  line-height: 1.4;
}
.bcfc-appshow__eyebrow::before {
  content: "";
  flex: none;
  width: 28px;
  height: 2px;
  background: currentColor;
}
.bcfc-appshow .bcfc-appshow__title {
  margin: 14px 0 0;
  color: var(--as-ink);
  font-size: clamp(1.75rem, 1.05rem + 1.7vw, 2.5rem);
  font-weight: 800;
  line-height: 1.15;
  letter-spacing: -.02em;
  text-wrap: balance;
}
.bcfc-appshow[dir="rtl"] .bcfc-appshow__title { letter-spacing: normal; }
.bcfc-appshow .bcfc-appshow__lead {
  margin: 14px 0 0;
  max-width: 40ch;
  color: var(--as-ink-muted);
  font-size: 1rem;
  line-height: 1.75;
}

/* Single CTA → Sahel page */
.bcfc-appshow .bcfc-appshow__btn {
  position: relative;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 26px;
  padding: .9rem 1.75rem;
  border-radius: 999px;
  background: var(--as-btn-bg);
  color: var(--as-btn-ink);
  font-size: .96875rem;
  font-weight: 800;
  line-height: 1.2;
  text-decoration: none;
  transform: translate(var(--mx, 0px), var(--my, 0px));
  transition: transform .35s var(--as-ease), box-shadow .35s var(--as-ease);
}
.bcfc-appshow__btn svg { width: 1.15em; height: 1.15em; flex: none; }
.bcfc-appshow__btn::after {          /* shine on hover */
  content: "";
  position: absolute;
  inset-block: 0;
  left: 0;
  width: 55%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .55) 50%, transparent);
  transform: translateX(-120%) skewX(-14deg);
  pointer-events: none;
}
.bcfc-appshow .bcfc-appshow__btn:hover,
.bcfc-appshow .bcfc-appshow__btn:focus-visible {
  transform: translate(var(--mx, 0px), calc(var(--my, 0px) - 3px));
  box-shadow: 0 16px 30px -12px rgba(0, 0, 0, .55);
  color: var(--as-btn-ink);
}
.bcfc-appshow__btn:hover::after,
.bcfc-appshow__btn:focus-visible::after {
  transform: translateX(260%) skewX(-14deg);
  transition: transform 1s cubic-bezier(.3, 0, .2, 1);
}
.bcfc-appshow__btn:focus-visible { outline: 2px solid var(--as-accent); outline-offset: 3px; }

/* ---------- Phone (centred on the seam, breaks out of the top) ---------- */
.bcfc-appshow__device {
  --as-px: 0;
  --as-py: 0;
  position: absolute;
  z-index: 3;
  top: 50%;                                 /* vertically centred in the band */
  left: 50%;
  width: var(--as-pw);
  margin-top: calc(var(--as-pw) * -1.083);
  margin-left: calc(var(--as-pw) * -.5);
  perspective: 1200px;
  pointer-events: none;
}
.bcfc-appshow__tilt {
  transform-style: preserve-3d;
  transform: rotateX(calc(var(--as-py) * -7deg)) rotateY(calc(var(--as-px) * 10deg));
  transition: opacity 1s var(--as-ease) .2s, translate 1.1s var(--as-ease) .2s;
}
.bcfc-appshow__float {
  animation: as-float 7s ease-in-out infinite;
  will-change: transform;
}
.bcfc-appshow__phone {
  position: relative;
  width: var(--as-pw);
  aspect-ratio: 9 / 19.5;
  padding: calc(var(--as-pw) * .035);
  border-radius: calc(var(--as-pw) * .17);
  background: linear-gradient(145deg, #2f3533 0%, #0e1110 38%, #1c201e 100%);
  box-shadow:
    inset 0 0 0 1.5px rgba(255, 255, 255, .16),
    inset 0 0 0 3px #050706,
    0 40px 70px -24px rgba(0, 0, 0, .7),
    0 16px 30px -18px rgba(0, 0, 0, .55);
}
.bcfc-appshow__phone::before,
.bcfc-appshow__phone::after {
  content: "";
  position: absolute;
  width: 2px;
  border-radius: 2px;
  background: #262b29;
}
.bcfc-appshow__phone::before { right: -1.5px; top: 24%; height: 11%; }
.bcfc-appshow__phone::after  { left: -1.5px;  top: 20%; height: 7%; }
.bcfc-appshow__screen {
  position: relative;
  height: 100%;
  overflow: hidden;
  direction: ltr;
  border-radius: calc(var(--as-pw) * .137);
  background: #f4f5f4;
}
.bcfc-appshow__island {
  position: absolute;
  z-index: 3;
  top: 2.1%;
  left: 34.5%;
  width: 31%;
  height: 3.7%;
  border-radius: 99px;
  background: #050706;
}
.bcfc-appshow__track {
  --as-i: 0;
  display: flex;
  height: 100%;
  transform: translateX(calc(var(--as-i) * -100%));
  transition: transform .9s cubic-bezier(.65, 0, .35, 1);
  will-change: transform;
}
.bcfc-appshow__track.is-jump { transition: none; }
.bcfc-appshow__slide { flex: 0 0 100%; height: 100%; }
.bcfc-appshow__slide img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
}
.bcfc-appshow__screen::after {   /* glass sweep */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background: linear-gradient(105deg, transparent 38%, rgba(255, 255, 255, .34) 49%, transparent 60%);
  transform: translateX(-130%);
  animation: as-sweep 9s ease-in-out 1.5s infinite;
}

/* ---------- Entrance (only when JS runs) ---------- */
.bcfc-appshow [data-as-reveal] { transition: opacity .8s var(--as-ease), translate .9s var(--as-ease); }
.bcfc-appshow.js-ready:not(.is-in) [data-as-reveal] { opacity: 0; translate: 0 16px; }
.bcfc-appshow.js-ready:not(.is-in) .bcfc-appshow__tilt { opacity: 0; translate: 0 36px; }
.bcfc-appshow.is-in [data-as-reveal]:nth-child(2) { transition-delay: .1s; }
.bcfc-appshow.is-in [data-as-reveal]:nth-child(3) { transition-delay: .2s; }
.bcfc-appshow.is-in [data-as-reveal]:nth-child(4) { transition-delay: .3s; }

/* Pause loops while off-screen */
.bcfc-appshow.is-paused *,
.bcfc-appshow.is-paused *::before,
.bcfc-appshow.is-paused *::after { animation-play-state: paused !important; }

/* ---------- Keyframes ---------- */
@keyframes as-float {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(-1.5deg); }
  50%      { transform: translate3d(0, -10px, 0) rotate(.8deg); }
}
@keyframes as-sweep {
  0%, 72% { transform: translateX(-130%); }
  100%    { transform: translateX(130%); }
}
@keyframes as-spin {
  from { transform: translate(-50%, -50%) rotate(0deg); }
  to   { transform: translate(-50%, -50%) rotate(360deg); }
}
@keyframes as-drift-a {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to   { transform: translate3d(-10%, 12%, 0) scale(1.12); }
}
@keyframes as-drift-b {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(14%, -10%, 0); }
}

/* ---------- Responsive ---------- */
@media (max-width: 960px) {
  .bcfc-appshow { --as-pw: 120px; }
  .bcfc-appshow__stage { min-height: 320px; }
}

@media (max-width: 760px) {
  /* Phone docks where the photo meets the text: it only overlaps the faded
     bottom of the photo, and the copy wraps around it. */
  .bcfc-appshow {
    --as-pw: 116px;
    --as-lift: 0px;
    --as-media-h: 230px;
    --as-phone-top: calc(var(--as-media-h) * .82);   /* phone starts in the last ~18% of the photo */
    --as-gutter: 22px;
    --as-radius: 20px;
    margin-block: 28px;
  }
  .bcfc-appshow__stage { display: block; min-height: 0; }
  .bcfc-appshow__media { inset-block: 0 auto; inset-inline: 0; width: 100%; height: var(--as-media-h); }
  .bcfc-appshow__media img,
  .bcfc-appshow[dir="rtl"] .bcfc-appshow__media img {
    -webkit-mask-image: linear-gradient(to bottom, #000 60%, transparent);
    mask-image: linear-gradient(to bottom, #000 60%, transparent);
  }

  .bcfc-appshow__copy {
    display: block;
    padding: calc(var(--as-media-h) + 10px) var(--as-gutter) 26px;
  }
  /* invisible float the text wraps around (height = part of phone below the photo) */
  .bcfc-appshow__copy::before {
    content: "";
    float: right;
    width: calc(var(--as-pw) + 14px);
    height: calc(var(--as-phone-top) + var(--as-pw) * 2.167 - var(--as-media-h) - 10px);
  }
  .bcfc-appshow[dir="rtl"] .bcfc-appshow__copy::before { float: left; }
  .bcfc-appshow .bcfc-appshow__eyebrow { display: flex; }
  .bcfc-appshow .bcfc-appshow__title { margin-top: 10px; font-size: 1.625rem; }
  .bcfc-appshow .bcfc-appshow__lead { max-width: none; font-size: .9375rem; line-height: 1.7; }
  .bcfc-appshow .bcfc-appshow__btn {
    display: flex;
    clear: both;
    justify-content: center;
    width: 100%;
    margin-top: 20px;
  }

  .bcfc-appshow__device {
    top: var(--as-phone-top);
    left: auto;
    margin-top: 0;
    margin-left: 0;
    inset-inline-end: var(--as-gutter);
  }
  .bcfc-appshow__orbit { inset-block: var(--as-media-h) 0; width: 100%; }
  .bcfc-appshow__rings {
    top: calc(var(--as-phone-top) + var(--as-pw) * 1.083 - var(--as-media-h));
    inset-inline-end: calc(var(--as-gutter) + var(--as-pw) * .5);
  }
}

@media (max-width: 360px) {
  .bcfc-appshow { --as-pw: 104px; --as-media-h: 210px; --as-gutter: 18px; }
  .bcfc-appshow .bcfc-appshow__title { font-size: 1.5rem; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .bcfc-appshow *,
  .bcfc-appshow *::before,
  .bcfc-appshow *::after { animation: none !important; transition: none !important; }
  .bcfc-appshow [data-as-reveal],
  .bcfc-appshow .bcfc-appshow__tilt { opacity: 1 !important; translate: none !important; }
  .bcfc-appshow__device { --as-px: 0 !important; --as-py: 0 !important; }
}

@charset "UTF-8";
/* ============================================================
   Reusable "Apply now" band (bcfc-apply-band)
   Rendered by Views/Partials/PagePatterns/_ApplyBand.cshtml.

   These are DEFAULTS ONLY. Every class name in ApplyBandModel is a
   parameter, so a comp that passes its own names (the finance detail
   pages pass .apply / .apply-copy / .apply-form) never matches any rule
   here and keeps its own CSS untouched.

   Tokens come from bcfc-comp.css / _variables.scss with literal
   fallbacks, so the band still renders correctly if a page opts in
   without being wrapped in .bcfc-comp.
   ============================================================ */
.bcfc-apply-band {
  margin: 44px auto 0;
  max-width: var(--comp-wrap, 1200px);
  padding-inline: var(--comp-gutter, 1.5rem);
}

.bcfc-apply-band__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(24px, 3vw, 44px);
  align-items: start;
  padding: clamp(26px, 3vw, 44px);
  background: var(--bcfc-surface-raised, var(--bcfc-surface, #fff));
  border: 1px solid var(--bcfc-border, #e7edf3);
  border-radius: 20px;
  box-shadow: 0 4px 18px rgba(20, 45, 70, 0.06);
}

/* Three columns only when an editor has actually uploaded an image — the
   two-column shape stays the default so adding the field to a doctype
   changes no existing page. */
.bcfc-apply-band__grid.has-media {
  grid-template-columns: 1fr minmax(0, 0.8fr) 1fr;
}

.bcfc-apply-band__copy > :first-child {
  margin-top: 0;
}

.bcfc-apply-band__copy p {
  color: var(--bcfc-ink, var(--bcfc-text-muted, #48515b));
  line-height: 1.7;
}

/* ---- numbered steps ---- */
.bcfc-apply-band__steps {
  list-style: none;
  margin: 22px 0 0;
  padding: 0;
  display: grid;
  gap: 14px;
}

.bcfc-apply-band__steps li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 0.96875rem;
  line-height: 1.6;
  color: var(--bcfc-ink, var(--bcfc-text, #232a31));
}

.bcfc-apply-band__steps .n {
  flex: 0 0 auto;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 0.875rem;
  font-weight: 800;
  background: var(--bcfc-blue, #004a98);
  color: #fff;
}

/* ---- image column ---- */
.bcfc-apply-band__media {
  align-self: stretch;
  min-height: 220px;
  border-radius: 16px;
  overflow: hidden;
  background: var(--bcfc-surface-sunken, var(--bcfc-surface-alt, #f4f7fa));
}

.bcfc-apply-band__media img {
  width: 100%;
  height: 100%;
  min-height: 220px;
  object-fit: cover;
  display: block;
}

/* ---- CTA fallback, when the band renders buttons instead of a form ---- */
.bcfc-apply-band__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-self: center;
}

/* ---- responsive ----
   The image is the first thing to go: on a phone it pushes the form below
   two screens of scroll, and the form is the point of the band. */
@media (max-width: 1024px) {
  .bcfc-apply-band__grid.has-media {
    grid-template-columns: 1fr 1fr;
  }
  .bcfc-apply-band__grid.has-media .bcfc-apply-band__media {
    display: none;
  }
}
@media (max-width: 768px) {
  .bcfc-apply-band__grid,
  .bcfc-apply-band__grid.has-media {
    grid-template-columns: 1fr;
  }
}
/* ============================================================
   Shared eyebrow label, then THE HERO.

   The .bcfc-page-hero skin that used to sit here is GONE as of 2026-08-19. It was the
   second inner-page hero treatment on the site: _PageHero emitted it for its 11-element
   tuple callers (14 pages - Apply, Vision & Mission, CSR, Branches, Fees, IR Policy and
   Shareholders, Support detail, Profile listing, the forms) while every other caller got
   .bcfc-hero below. Two skins meant two type scales, two scrims and two button treatments
   for the same box, which is the thing the unification exists to end - so the tuple path
   now emits .bcfc-hero too and those pages default to its `compact` height.

   .bcfc-eyebrow survives the removal because it is NOT hero-only: ProfileListing,
   VisionMission, _InvestorLandingStitch and _IRBahrainBourse all use it for section heads.
   The hero has its own .bcfc-hero__eyebrow, which carries the comp's treatment.
   ============================================================ */
/* .bcfc-eyebrow now lives in scss/components/_eyebrow.scss (compiled into style.css / style-ar.css). */


/* ============================================================================
   THE UNIFIED HERO  —  .bcfc-hero
   ============================================================================
   The ONE skin Views/Partials/Shared/_PageHero.cshtml emits, for every caller and every
   model shape - node, hero block, dictionary, or the legacy 11-element tuple.

   It lives in this file rather than a new one on purpose: bcfc-page-hero.css is
   already listed in BOTH the bundle-main and bundle-main-rtl lists in Program.cs, and
   adding a stylesheet means editing Program.cs — which is C#, and needs a
   stop-rebuild-restart. This is the shared-hero stylesheet; the shared hero belongs in
   it.

   THE DESIGN IS THE ABOUT PAGE'S, as of 2026-08-19. Every value below that used to be an
   invention of this file — the scrim ramp, the accent, the type scale, the kicker rule,
   the backdrop focal point, the block padding — is now the one from
   docs/design-source/misc/about-us-2026-08-18-final.html, which is the approved comp and
   the look the site standardised on. .bcfc-abt__hero* in AboutRevamp.css and the
   per-section hero partials it stood alongside are retired; this is the only inner-page
   header treatment on the site.

   FOUR VARIANTS, set by heroVariant on bcfcHeroDesignComposition2:
     --banner   full-bleed photograph, copy in a start-aligned column   (the default)
     --split    copy on one side, artwork / device / card stage on the other
     --centred  copy centred in the band, for landing pages
     --minimal  no photograph, a tight title band for utility pages

   TONE is --dark (default) or --light. HEIGHT is --h-compact|standard|tall|full, and it
   is the ONE knob that answers "how big is this hero" — see the block below it.
   ============================================================================ */
.bcfc-hero {
    /* ---- inks ------------------------------------------------------------------
       Local tokens, so a page retints the whole band by setting one of these on
       .bcfc-hero instead of overriding a dozen rules. The three white alphas are the
       comp's --abt-on-navy / --abt-on-navy-dim; --hero-accent is its
       --abt-on-navy-accent, a pale blue rather than the site's yellow --bcfc-accent,
       because the accent here sits on navy and has to stay legible on a photograph. */
    --hero-ink: #fff;
    --hero-ink-muted: rgba(255, 255, 255, .82);
    --hero-ink-dim: rgba(255, 255, 255, .62);
    --hero-accent: #8fbff0;
    --hero-surface: var(--bcfc-primary-dark, #00346a);

    /* The scrim's own colour, SEPARATE from --hero-surface. The comp lifts the scrim off
       the near-black navy the band is painted in onto a lighter, bluer one, so the
       photograph still reads through the fade — two different colours doing two different
       jobs, which is why this is not just var(--hero-surface). heroSurfaceColour from the
       backoffice sets both, so an editor retinting a hero still gets a matching scrim
       without having to know this distinction exists. */
    --hero-scrim: #0a3a73;

    /* ---- measure ---------------------------------------------------------------
       900px / 560px, widened from the comp's 640px/560px on 2026-09-01: a long
       headline (a full sentence, not a short title) wrapped to 7 lines at 640px and
       read as a paragraph rather than a title. px rather than ch on purpose: the
       headline and the lead are set at different sizes, so a ch measure would give them
       different physical widths and the block would not read as one column.
       heroTextMaxWidth overrides the first. */
    --hero-copy-width: 900px;
    --hero-lead-width: 560px;

    /* ---- the type scale, and why it is tokens ----------------------------------
       These step with the HEIGHT class below. A single fixed scale cannot serve one
       partial that draws both a flagship landing band and a 300px utility header: the
       comp's 92px headline overflows a compact band, and the old 52px cap made a
       full-height hero look empty. So "how much size" moves the band AND its type
       together, which is what the choice actually means to whoever picks it.
       Standard's cap dropped 64px -> 48px on 2026-09-01 alongside the width widening
       above — at 64px an unusually long headline wrapped tall enough to dominate the
       band even at the wider measure. */
    --hero-title-size: clamp(32px, 4.4vw, 48px);
    --hero-title-mt: 20px;
    --hero-lead-size: clamp(17px, 1.5vw, 19px);
    --hero-lead-lh: 1.6;
    --hero-support-size: 16px;

    --hero-min-h: 460px;
    /* Asymmetric, per the comp: a tight 44px above the copy because the site header's
       height is already reserved below, and a generous end padding so the CTA row does
       not sit flush on the band's bottom edge (measured 0px before this, ~98px in the
       comp). clamp() rather than a flat 96px so the band does not eat a phone viewport. */
    /* 24px, not the comp's 44px. The comp measured this gap from the top of the band to its COPY,
       but the band now opens with the breadcrumb trail, so 44px pushed the trail well clear of the
       header and the copy further still. The trail's own padding is zeroed inside the hero
       (bcfc-inline-partials.css) for the same reason — the two used to stack. */
    --hero-pad-start: 24px;
    --hero-pad-end: clamp(48px, 6vw, 96px);

    position: relative;
    display: flex;
    align-items: center;
    min-height: var(--hero-min-h);
    overflow: hidden;
    background: var(--hero-surface);
    color: var(--hero-ink);

    /* Full-bleed out of the page's centred column. margin-inline, not margin-left, so
       it behaves the same in Arabic. */
    /* Minus the scrollbar: 100vw counts a classic one, which put the band half a scrollbar
       off-centre (L-7 / R1359 at 1366px). --bcfc-scrollbar-w is set in _RootLayout.cshtml. */
    width: calc(100vw - var(--bcfc-scrollbar-w, 0px));
    margin-inline: calc(50% - 50vw + var(--bcfc-scrollbar-w, 0px) / 2);

    /* The hero is the page header, and _HeroChrome stands the global breadcrumb banner
       down — but that banner was also what pushed content clear of the position:fixed
       site header. Without this the trail lands underneath it (measured at y=49 under a
       104px header on Sahel). The fallback is load-bearing:
       --bcfc-total-header-height reaches the page only via bundle-critical.css, and an
       unresolvable var() inside a calc() invalidates the whole declaration. */
    /* HEADER CLEARANCE IS A MARGIN, NOT PADDING, AS OF 2026-08-23 — changed on request:
       "Template must start after the nav bar."

       It used to be `padding-block-start: max(72px, var(--bcfc-total-header-height, 104px))`. That
       reserved the nav's strip INSIDE the band, so the hero's painted surface still began at y=0 and
       ran underneath the position:fixed glass nav — the nav floated on the hero artwork. Measured on
       /en/about-bcfc/ before this change: .bcfc-hero top=0, height=651, padding-top=104px, painted
       rgb(0,52,106), i.e. 104px of navy sitting behind the header.

       As a margin the reserved strip sits OUTSIDE the band, so the hero now BEGINS below the nav and
       the nav renders against the page background instead of over the artwork. Copy lands in exactly
       the same place relative to the band; the page simply gets that strip back as real flow, so
       everything below shifts down by the header height.

       THE SIZE RULE IS UNCHANGED AND STILL LOAD-BEARING. Never let it reach 0: the nav is
       position:fixed, so this is the only thing keeping the hero out from under it, and every
       "the hero is under the navigation" report traces back to this one declaration being defeated.
       max() holds a hard 72px floor (the mobile header height) in case the variable resolves smaller
       than the real header, and the fallback inside --bcfc-total-header-height stops the calc going
       invalid — that variable reaches the page only via bundle-critical.css, and an unresolvable
       var() inside a calc() kills the whole declaration.

       If a design ever genuinely needs artwork to reach the top edge again, this is the one line to
       revisit — put it back as padding rather than zeroing it. */
    margin-block-start: max(72px, var(--bcfc-total-header-height, 104px));
}

/* AND THE OTHER HALF OF THAT CHANGE: nothing else may reserve the header's height as well.

   Now that the clearance is a margin OUTSIDE the band, any body padding-top stacks with it
   instead of being absorbed by it. bcfc-inline-partials.css sets `body { padding-top:
   var(--bcfc-total-header-height) }` and zeroes it again for `.bcfc-page-has-breadcrumb`, which
   is most pages — but a page that draws a hero and gets NO breadcrumb class kept the padding and
   the hero then started at 2x the header height, with a strip of dead page background above it.
   Measured at 1440px on 2026-08-24: the three /en/support/ form pages sat at y=222 under a 104px
   header. (site.css's own `body:not(...)` rule was the bigger contributor there and now excludes
   hero pages too.)

   :has() rather than a body class, because the class list is computed in _RootLayout before the
   hero has rendered, so the layout cannot know. Specificity is (0,1,1) — `body` plus the
   argument's `.bcfc-hero` — which is what it takes to beat the (0,0,1) base rule.

   This deliberately does NOT match the home page or the other `bcfc-hero-page` templates: those
   draw the multi-slide banner (`.bcfc-home__hero` / `.bcfc-home-hero-slider`), not `.bcfc-hero`,
   and their own offset is what holds THAT clear of the nav. Should a page ever carry both, the
   `body.bcfc-hero-page:not(.bcfc-hero-scrolled)` rule in bcfc-inline-partials.css is (0,2,0) and
   still wins over this — which is the right way round, since that class is an explicit statement
   by the page. */
body:has(.bcfc-hero) { padding-top: 0; }

/* THE TAB STRIP IS NOT A CLAIMANT. It renders INSIDE the band (Shared/_HeroChrome.cshtml, per
   Bahaa 2026-08-16: "if the hero is there put inside"), so it is behind this margin, not beside it.

   Two rules briefly lived here on 2026-08-24, while the strip was being trialled in the chrome
   ahead of the hero — `body:has(.bcfc-page-tabs__list) .bcfc-hero { margin-block-start: 0 }` and a
   companion zeroing the strip's bottom margin. Both are DELETED and must not come back while the
   strip is in-hero: the first would zero the hero's nav clearance on every page that has a tab set,
   which is precisely the failure the block above exists to prevent. */

/* ============================================================================
   HEIGHT — the size knob (heroHeight)
   ============================================================================
   Set TOKENS, never the height property, so heroMinHeight (an inline custom property)
   still composes over the preset instead of fighting a declaration.

   Each step moves the band's floor AND its type scale together, so the four presets are
   four real sizes rather than four crop heights on one design:

     compact   300px     utility headers — a title band, no photograph worth reading
     standard  460px     the default. Section and detail pages.
     tall      620px     the comp's own size. Flagship pages (About, hubs, landings).
     full      viewport  a hero that IS the first screen.

   tall and full share a type scale deliberately: `full` is a statement about the BAND's
   height, not about the headline, and stepping the type again at full would give a
   1200px-tall band a headline that overflows a laptop viewport.
   ============================================================================ */
.bcfc-hero--h-compact {
    --hero-min-h: 300px;
    /* Trimmed 28-42px -> 24-36px on 2026-09-01 alongside standard and tall/full, per
       Bahaa: headings read too big across the hero pages generally. */
    --hero-title-size: clamp(24px, 3.6vw, 36px);
    --hero-title-mt: 14px;
    --hero-lead-size: 16px;
    --hero-support-size: 15px;
    --hero-pad-start: 28px;
    --hero-pad-end: clamp(32px, 4vw, 56px);
}
.bcfc-hero--h-standard {
    --hero-min-h: 460px;
}
.bcfc-hero--h-tall,
.bcfc-hero--h-full {
    /* Was the comp's values exactly (52-92px). Trimmed to 44-72px on 2026-09-01 alongside
       compact and standard, per Bahaa: headings read too big across the hero pages
       generally, flagship pages included. */
    --hero-title-size: clamp(44px, 5.6vw, 72px);
    --hero-title-mt: 26px;
    --hero-lead-size: 21px;
    --hero-lead-lh: 1.55;
    --hero-support-size: 16.5px;
}
.bcfc-hero--h-tall { --hero-min-h: 620px; }
.bcfc-hero--h-full { --hero-min-h: calc(100vh - var(--bcfc-total-header-height, 104px)); }
/* dvh only where it parses. Custom property values are NOT parse-validated, so a bare
   --hero-min-h: calc(100dvh - …) would be ACCEPTED and then collapse the band to nothing
   on a browser without dvh support. */
@supports (height: 100dvh) {
    .bcfc-hero--h-full { --hero-min-h: calc(100dvh - var(--bcfc-total-header-height, 104px)); }
}

/* TONE. Light means dark ink on a pale band — the minimal variant, and any hero over
   pale artwork. --hero-scrim moves with it, or a light hero keeps a navy fade. */
.bcfc-hero--light {
    /* RE-ANCHOR THE AMBIENT SURFACE INK. bcfc-surface-map.css claims `.bcfc-hero` as a DARK
       surface unconditionally, so --bcfc-ink-link resolves to #fff for everything inside the band —
       including on THIS variant, where the band is light. Measured on /en/about-bcfc/careers/: the
       breadcrumb trail is `color: inherit` from `.bcfc-breadcrumbs ol`, which reads
       var(--bcfc-ink-link, …), so "About BCFC" rendered WHITE on a near-white hero at 1.08:1.

       Fixing the tokens here rather than the breadcrumb fixes every descendant that reads them at
       once — the trail, the page tabs, any prose link a template drops in the band — instead of one
       component at a time. Values are the light-surface set from bcfc-surface-map.css, so a light
       hero now matches any other light container on the site. */
    --bcfc-ink: var(--bcfc-navy, #071b33);
    --bcfc-ink-strong: var(--bcfc-navy, #071b33);
    --bcfc-ink-muted: var(--bcfc-gray-600, #475467);
    --bcfc-ink-link: var(--bcfc-primary, #004a98);
    --bcfc-ink-link-hover: var(--bcfc-primary-dark, #00346a);

    --hero-ink: var(--bcfc-text-dark, #071b33);
    --hero-ink-muted: var(--bcfc-dark-ink-muted, var(--bcfc-text-muted, #5c6670));
    --hero-ink-dim: var(--bcfc-dark-ink-muted, var(--bcfc-text-muted, #5c6670));
    --hero-accent: var(--bcfc-blue, #004a98);
    --hero-surface: var(--bcfc-surface-sunken, var(--bcfc-nav-hover-bg, #f3f7fb));
    --hero-scrim: var(--bcfc-nav-hover-bg, #f3f7fb);
}

/* DARK THEME. A light hero is "dark ink on a pale band"; on the dark canvas the band must go dark and
   the ink light together, or the lead renders pale-on-pale (measured 2.0:1 on /en/imtiaz-cards/points-to-a-trip/).
   The band colour can be an editor's inline --hero-surface (heroSurfaceColour), which outranks any
   stylesheet, hence !important: a pale fill has no meaning on a dark page. Theme-scoped, light mode untouched. */
[data-bcfc-theme="dark"] .bcfc-hero--light {
    --bcfc-ink: var(--bcfc-dark-ink);
    --bcfc-ink-strong: var(--bcfc-dark-ink);
    --bcfc-ink-muted: var(--bcfc-dark-ink-muted);
    --bcfc-ink-link: var(--bcfc-dark-ink-brand);
    --bcfc-ink-link-hover: var(--bcfc-dark-ink-brand);
    --hero-ink: var(--bcfc-dark-ink);
    --hero-ink-muted: var(--bcfc-dark-ink-muted);
    --hero-ink-dim: var(--bcfc-dark-ink-muted);
    --hero-accent: var(--bcfc-dark-ink-brand);
    --hero-surface: var(--bcfc-surface-sunken) !important;
    --hero-scrim: var(--bcfc-surface-sunken) !important;
}

.bcfc-hero--minimal {
    --hero-min-h: 260px;
    --hero-pad-start: 28px;
    --hero-pad-end: clamp(28px, 3vw, 52px);
}

/* ---- backdrop ---------------------------------------------------------------------- */
.bcfc-hero__bg {
    position: absolute;
    inset: 0;
    /* The gradient fallback sits on the WRAPPER, so it covers both failure modes: no
       image picked, and an image that 404s (its onerror removes the <img> and this shows
       through). */
    background: var(--hero-surface);
}
.bcfc-hero__bg-img,
.bcfc-hero__bg-video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border: 0;
}
/* The backdrop's own caption chip — a date pill plus a bold line, e.g. "February 2026 —
   Newest" over "King Hamad Youth Empowerment Award…". Pinned to the backdrop layer, not the
   copy column, because it describes the PHOTOGRAPH rather than the page — a hero with a photo
   collage or a rotating gallery would want a caption per image, not one caption for the whole
   band. Both lines are optional and independent, so the flex column collapses to whichever is
   present. */
.bcfc-hero__bg-caption {
    position: absolute;
    inset-inline: 0;
    inset-block-end: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 64px 24px 22px;
    /* Its own scrim, distinct from .bcfc-hero__scrim: that one buys contrast for the COPY
       column and stops well short of the image's own edge; this one only has to darken the
       strip the caption sits on. */
    background: linear-gradient(to top, rgba(0, 0, 0, .55), transparent);
    color: #fff;
    pointer-events: none;
}
.bcfc-hero__bg-caption-date {
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--hero-accent);
}
.bcfc-hero__bg-caption-title {
    font-size: 1.0625rem;
    font-weight: 700;
    line-height: 1.3;
}

/* A YouTube backdrop is an iframe, which object-fit cannot touch — it has to be scaled
   to cover by hand. pointer-events:none so it cannot swallow a click meant for a CTA. */

/* A DIAGONAL scrim, not a flat one: a flat overlay cannot promise legibility over
   whatever photograph an editor picks, and it dims the entire image to buy contrast in
   the one corner that needs it. Solid behind the copy, clear at the far edge.

   RAMP RE-CUT 2026-08-30, and it is STRICTLY MORE legible than the version it replaces,
   not a trade. The old stops were 1 / 1 / .85 / .50 / .12 at 0 / 24 / 42 / 64 / 100%.
   The fully-opaque plateau ran to 24% of the band, but the copy column starts at ~20%
   and runs to ~51% (measured on /en/.../vehicle-finance/ at 1900px: h1 x=374..962 of
   1900). So the plateau sat almost entirely where NO TEXT IS - it bought nothing for
   contrast and read as a hard vertical edge with the photograph "cropped" behind it,
   which is how it was reported. The budget is now spent where the text actually sits:
   the plateau is halved to 12% and the MID stops are raised (.94@30 / .82@48 / .56@66
   against .85@42 / .50@64).
   Measured over the real backdrop (3915x1641 JPEG, object-fit:cover, WCAG AA, worst
   pixel per element): h1 6.01 -> 7.13, lead 5.88 -> 6.44, strip 7.57 -> 8.41, eyebrow
   5.54 -> 5.42 (needs 4.5). Against worst-case WHITE artwork the OLD ramp FAILED - lead
   4.21 and strip 4.47 against a 4.5 threshold - so the comment's promise below was not
   actually being kept; the new ramp passes that case at 5.00 and 5.49.
   Two extra stops exist to kill the slope discontinuity at the end of the plateau, which
   is what made the boundary read as a seam rather than a fade.

   Built from --hero-scrim with color-mix() per stop rather than from five hardcoded
   rgba() values. That is what makes heroSurfaceColour actually work: the old version
   ramped literal rgba(0,52,106,…) stops, so an editor who retinted a hero got their
   colour on the band and the old navy on the scrim over it. */
.bcfc-hero__scrim {
    position: absolute;
    inset: 0;
    background-image: linear-gradient(100deg,
        var(--hero-scrim) 0%,
        var(--hero-scrim) 12%,
        color-mix(in srgb, var(--hero-scrim) 94%, transparent) 30%,
        color-mix(in srgb, var(--hero-scrim) 82%, transparent) 48%,
        color-mix(in srgb, var(--hero-scrim) 56%, transparent) 66%,
        color-mix(in srgb, var(--hero-scrim) 26%, transparent) 84%,
        color-mix(in srgb, var(--hero-scrim) 8%, transparent) 100%);
}
/* The RTL angle is the LTR one mirrored across the vertical axis (360 - 100), so the
   solid end stays behind the copy when the copy moves to the right. */
[dir="rtl"] .bcfc-hero__scrim {
    background-image: linear-gradient(260deg,
        var(--hero-scrim) 0%,
        var(--hero-scrim) 12%,
        color-mix(in srgb, var(--hero-scrim) 94%, transparent) 30%,
        color-mix(in srgb, var(--hero-scrim) 82%, transparent) 48%,
        color-mix(in srgb, var(--hero-scrim) 56%, transparent) 66%,
        color-mix(in srgb, var(--hero-scrim) 26%, transparent) 84%,
        color-mix(in srgb, var(--hero-scrim) 8%, transparent) 100%);
}
/* A pale band needs a shorter, gentler ramp — the same five stops at these alphas would
   wash the photograph out completely rather than fading off it. */
.bcfc-hero--light .bcfc-hero__scrim {
    background-image: linear-gradient(100deg,
        var(--hero-scrim) 0%,
        var(--hero-scrim) 30%,
        color-mix(in srgb, var(--hero-scrim) 60%, transparent) 68%,
        color-mix(in srgb, var(--hero-scrim) 5%, transparent) 100%);
}

/* ---- the ornament layer ------------------------------------------------------------
   Shared/_HeroRings.cshtml, selected by heroOrnament or ViewData["Hero:OrnamentPartial"].
   These names were .bcfc-abt__* in AboutRevamp.css, which is a PAGE sheet — so the
   ornament rendered as invisible markup on every page but About. They live here now, with
   the hero they decorate.

   Purely decorative, hence aria-hidden in the markup and no layout role here: the
   container is a 0x0 anchor point so the rings can be centred on it with
   translate(-50%,-50%) without ever affecting the hero's own box.

   inset-inline-end (not right) so the cluster mirrors to the other side in Arabic and
   stays opposite the copy rather than behind it.

   Sizes and per-ring durations live on the elements in the partial, because they are six
   different values on six siblings; only what is SHARED is here.
   ----------------------------------------------------------------------------------- */
.bcfc-hero__rings {
    position: absolute;
    top: 50%;
    inset-inline-end: 8%;
    width: 0;
    height: 0;
    pointer-events: none;
}
.bcfc-hero__ring,
.bcfc-hero__orbit {
    position: absolute;
    top: 50%;
    left: 50%;
    border-radius: 50%;
    transform: translate(-50%, -50%);
    animation-name: bcfc-hero-spin;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}
/* 2px, not the comp's 1.5px: Chrome floors a 1.5px border to a 1px hairline, and at 50%
   alpha that vanished entirely over a busy photograph — the comp was drawn over a bright
   low-detail lounge wall. Same hue, enough weight to survive whatever image an editor
   picks, which is the same reasoning the diagonal scrim above already applies to the
   headline.

   WEIGHT WAS NOT ENOUGH ON ITS OWN — 2026-09-09. The inks here are pale on purpose (the
   accent is a light blue at 62%, the dashed ring white at 52%) because the About comp puts
   them on dark navy. Put the same cluster on artwork that is BRIGHT where the cluster sits
   and it vanishes. Measured off the RENDERED PIXELS of all ten ring pages on beta, scanning
   a radial window across each stroke and taking its contrast against its own immediate
   surround — the fraction of each ring's visible arc coming out below 1.15:1, i.e. not
   there:

                                      inner ring        with the hairline
     /en/commercial-sme/              66% of its arc          2%
     /en/finance/conventional-services/  66%                  2%
     /en/bcfc-group/                     63%                  6%
     /en/investor-relations/              61%                  2%
     /en/services/                        60%                  2%
     /en/news/sahel-ai/                   41%                  2%
     /en/about-bcfc/  (the comp's own)     2%                  1%

   Those five are the same white-building-under-pale-sky artwork, and the inner ring's
   median contrast on them was 1.11:1 — the stroke the same colour as the sky behind it.
   So this was never a CSME bug; CSME is just the one that got looked at.

   The fix is a dark hairline just inside and just outside each stroke. Same trick as the
   2px above: buy legibility in the ornament rather than ask every editor to pick artwork
   that suits it, or retint one hero at a time from the backoffice and still leave the next
   bright photograph broken. It costs the dark pages nothing — black at 20% over navy moves
   About's inner ring 1.41 -> 1.47:1 and no page's numbers go backwards. */
.bcfc-hero__ring {
    border: 2px solid color-mix(in srgb, var(--hero-accent) 62%, transparent);
    box-shadow: 0 0 0 1px rgba(0, 0, 0, .2), inset 0 0 0 1px rgba(0, 0, 0, .2);
}
/* The middle ring is dashed and in the ink colour so the three do not read as one
   gradient. A modifier, not the comp's :nth-of-type(2) — that selector counts SPANS and
   would follow the markup order. */
.bcfc-hero__ring--dashed {
    border-style: dashed;
    border-color: color-mix(in srgb, var(--hero-ink) 52%, transparent);
}
/* THE TRAVELLING DOT, AND WHY ITS RESTING POINT IS NOT 12 O'CLOCK — 2026-09-09.
   It used to sit at `top: -6px; left: 50%`, i.e. the top of its orbit. That is only ever
   seen for an instant while the orbit spins, so it looked arbitrary and harmless — until
   the freeze below stopped the spin. Then all three dots parked on that one point, which
   sits R px ABOVE the cluster's centre; the cluster's centre is the band's vertical middle,
   so for R=260 and R=360 the parked dot is 260px / 360px above a band that is only 230px
   from middle to top, and `overflow: hidden` on .bcfc-hero clipped both away. Measured on
   beta, /en/about-bcfc/: inner dot 100% visible, middle 34%, outer 0% — two of the three
   dots the comp draws were simply not on the page, on every hero carrying a photograph and
   for every reduced-motion visitor.

   So each orbit now rests at its OWN point, all three inside the band at every height preset
   and on the arc facing the band's CENTRE, so they read as a cluster rather than a stack and
   never sit off the edge:

     --outer  9 o'clock                    0 px above/below the middle
     --mid    13.5deg below horizontal   +61 px
     --inner  21deg above horizontal     -61 px

   The angles are shallow, which is deliberate: it is the DISTANCE FROM THE MIDDLE that has to
   survive a short band, and the three radii already spread the dots 160/253/360px apart
   horizontally, so the cluster reads as an arc without needing much vertical travel. At +/-61px
   the dots stay inside any band down to ~135px tall — which covers the 300px compact preset with
   room to spare, and covers `--no-overlay`, where pre-composed artwork sets the height and there
   is no floor at all.

   The percentages are exact points on each circle: inline 50%(1 - cos a), block
   50%(1 -/+ sin a) of the orbit's own 2R box. LOGICAL properties, not top/left, so the
   cluster mirrors with the rest of the hero on /ar — `inset-inline-end: 8%` already puts it
   on the left there, and a physical `left` would have parked every dot OUTSIDE the band on
   the wrong side (measured: outer dot 0% visible on /ar/about-bcfc/ too).

   Nothing about the animation changes: the spin is a full 360deg loop, so a different start
   angle is the same journey with a different phase. */
.bcfc-hero__orbit i {
    position: absolute;
    inset-block-start: var(--hero-orbit-dot-block, 50%);
    inset-inline-start: var(--hero-orbit-dot-inline, 0%);
    width: 13px;
    height: 13px;
    /* Centre the dot ON its point rather than hanging it off the corner. Both are logical:
       a negative margin-inline-start shifts toward inline-start, which is left in LTR and
       right in RTL — the same mirroring the inset above relies on. */
    margin-block-start: -6.5px;
    margin-inline-start: -6.5px;
    border-radius: 50%;
    /* The glow first, then the same dark hairline the ring above carries and for the same
       reason — a 13px pale dot on a white building is invisible without it. Later shadows
       paint behind earlier ones, so the hairline sits under the glow at the dot's edge. */
    box-shadow: 0 0 22px var(--hero-accent), 0 0 0 1px rgba(0, 0, 0, .28);
}
.bcfc-hero__orbit--inner { --hero-orbit-dot-inline: 3.321%; --hero-orbit-dot-block: 32.082%; }
.bcfc-hero__orbit--mid { --hero-orbit-dot-inline: 1.381%; --hero-orbit-dot-block: 61.673%; }
.bcfc-hero__orbit--outer { --hero-orbit-dot-inline: 0%; --hero-orbit-dot-block: 50%; }
.bcfc-hero__pulse {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 340px;
    height: 340px;
    margin: -170px 0 0 -170px;
    border-radius: 50%;
    background: radial-gradient(circle,
        color-mix(in srgb, var(--hero-accent) 34%, transparent) 0%,
        color-mix(in srgb, var(--hero-accent) 0%, transparent) 70%);
    /* THE RESTING STATE IS THE QUIET END OF THE CYCLE, not the peak — 2026-09-09.
       bcfc-hero-breathe carries both the scale and the opacity in its keyframes, so with the
       animation off the element fell back to its OWN values: full size, full opacity, i.e.
       bigger and brighter than it ever looked while moving. The freeze below had restated
       these two lines for itself; the reduced-motion query had not, so a reduced-motion
       visitor got the peak on every hero. Stating them here fixes both at once and lets the
       freeze rule below drop its copy. Centring is done by the negative margin above, so a
       transform here is free to carry the scale alone. */
    transform: scale(.9);
    opacity: .55;
    animation: bcfc-hero-breathe 7s ease-in-out infinite;
}
@keyframes bcfc-hero-spin { to { transform: translate(-50%, -50%) rotate(360deg); } }
@keyframes bcfc-hero-breathe {
    0%, 100% { transform: scale(.9); opacity: .55; }
    50% { transform: scale(1.12); opacity: 1; }
}
/* The comp drops the cluster entirely below 820px: at that width it would sit under the
   copy rather than beside it, and a 720px circle on a 400px viewport is just noise.

   900px, not the comp's 820px — 2026-09-09. 900px is where the hero itself changes shape:
   the responsive query below sets `.bcfc-hero__copy { max-width: none }` AND
   `.bcfc-hero { --hero-min-h: auto }` at exactly that width. The first is the comp's own
   reason for hiding the cluster arriving 80px earlier than the comp's number — from 900px down
   the copy is already full-bleed, so the cluster is already behind it rather than beside it.
   The second is why the 80px window mattered: with no height floor the band is whatever the
   copy makes it, so a short headline there could leave a band too shallow to hold the parked
   dots, and the ornament went back to looking half-drawn in that one strip. Hiding it on the
   same breakpoint the layout uses removes both at once. */
@media (max-width: 900px) {
    .bcfc-hero__rings { display: none; }
}

/* ---- NO ORNAMENT MOTION OVER A PHOTOGRAPH — 2026-09-03, REVERSED 2026-09-13 ------
   Bahaa, 2026-09-13: "never make the rings stop." The freeze this note used to justify is
   removed below (kept as history, not as a rule) — the rings and orbit dots now spin
   unconditionally whenever a hero carries the ornament, photograph or not. Only
   `prefers-reduced-motion` still stops them, which is an accessibility setting, not a
   design choice, and is left alone.

   Bahaa, on the converted pages: "the images in the banner have a zoom movement."
   Measured in headless Chrome on /en/loyalty-programme/: seven animations running on top of the
   hero photo — three `bcfc-hero__ring` and three `bcfc-hero__orbit` spinning (16s/22s/30s and
   14s/20s/26s), plus `bcfc-hero__pulse` on `bcfc-hero-breathe`, a 340px radial glow scaling
   .9 -> 1.12 every 7 seconds. That last one IS the reported zoom: it sits at the centre of the
   band with the photo behind it, so what moves reads as the PICTURE breathing, not as a decoration.

   The ornament is not deleted — it is the approved decoration on a FLAT band, where there is no
   image for it to be mistaken for. It is frozen only when the hero actually carries a photograph,
   which `:has(.bcfc-hero__bg-img)` states directly rather than inferring from a variant class.
   (`bcfc-hero--banner` looks like it would work and does NOT: `heroVariant` defaults to "banner"
   for every hero, with or without an image — see _PageHero.cshtml line 748.)

   `animation: none`, not `display: none`: the rings, the orbit dots and the glow all still paint,
   so the band keeps the depth the design gives it and only the movement stops.

   THAT LAST CLAIM WAS FALSE FOR TWO OF THE THREE DOTS UNTIL 2026-09-09, and it is worth spelling
   out because the failure is invisible from here. Freezing an animation drops the element back to
   its own resting values, and every orbit's dot rested at 12 o'clock — R px above the cluster's
   centre, which is the band's vertical middle. For the 520px and 720px orbits that point is above
   the band's own top edge, so `overflow: hidden` clipped those two dots away entirely. The
   ornament looked half-drawn on every hero with a photograph, which is all ten of them. Fixed
   where it belongs — each orbit now RESTS at a point inside the band (see the dot rule above) —
   rather than here, so the reduced-motion query gets the same repair for free.

   A VIDEO backdrop is in the selector too. It was not, and it is the stronger case of the two:
   moving footage under a scaling glow reads as the footage zooming even more readily than a still
   photograph does.

   Not keyed on a variant class: `bcfc-hero--banner` looks like it would work and does NOT —
   `heroVariant` defaults to "banner" for every hero, with or without an image (_PageHero.cshtml
   line 748). And note the corollary of keying on the ELEMENT: `_PageHero` gives the backdrop
   `onerror="this.remove()"`, so an image that 404s takes the `<img>` with it and the ornament
   starts moving again. That is correct — there is no photograph left to mistake it for — but it
   means LOCAL is not a place to verify this rule: media 404s on a dev machine, so all ten pages
   measure as spinning there and as frozen on beta.
   ----------------------------------------------------------------------------------- */
/* Freeze rule removed 2026-09-13 — "never make the rings stop" (Bahaa). The rings and
   orbit dots now keep spinning over a photograph or video backdrop as well. */

/* ---- the pattern ornament ----------------------------------------------------------
   Shared/_HeroPattern.cshtml. Was .bcfc-islamic-{landing,product}__hero-pattern — the same
   single rule duplicated in two page sheets, with a mint stroke baked into the SVG data URI.

   Drawn as a MASK, not a background-image, so the colour is a token: a data URI cannot read a
   CSS variable, which is exactly why the original could not be reused on a hero with a
   different accent. --hero-pattern-ink falls back to --hero-accent, so one knob retints the
   eyebrow rule, the accent clause and this together.
   ----------------------------------------------------------------------------------- */
.bcfc-hero__pattern {
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    opacity: .5;
    background-color: var(--hero-pattern-ink, var(--hero-accent));
    -webkit-mask-image: var(--hero-pattern-tile);
    mask-image: var(--hero-pattern-tile);
    -webkit-mask-size: 88px 88px;
    mask-size: 88px 88px;
}
.bcfc-hero {
    /* The tile: a 44px square, the same square rotated 45deg, and a centred circle. Stroke is
       black at 10% because a MASK reads ALPHA only — the colour comes from background-color
       above, so this value is opacity, not ink. 0.10 x the .5 element opacity reproduces the
       original .bcfc-islamic-*__hero-pattern exactly (it painted a 10%-alpha stroke at .5). */
    --hero-pattern-tile: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2788%27%20height%3D%2788%27%20viewBox%3D%270%200%2088%2088%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271%27%20stroke-opacity%3D%270.10%27%3E%3Crect%20x%3D%2722%27%20y%3D%2722%27%20width%3D%2744%27%20height%3D%2744%27/%3E%3Crect%20x%3D%2722%27%20y%3D%2722%27%20width%3D%2744%27%20height%3D%2744%27%20transform%3D%27rotate%2845%2044%2044%29%27/%3E%3Ccircle%20cx%3D%2744%27%20cy%3D%2744%27%20r%3D%277%27/%3E%3C/g%3E%3C/svg%3E");
}

/* ---- inner ------------------------------------------------------------------------- */
.bcfc-hero__inner {
    position: relative;
    /* Above the ornament slot. Ornaments are emitted BEFORE this box so the copy paints
       over them; the alternative — emitting them last for paint order — makes a screen
       reader and a keyboard user reach the decoration before the headline. */
    z-index: 1;
    width: 100%;
    max-width: 1200px;
    margin-inline: auto;
    padding-inline: 24px;
    padding-block: var(--hero-pad-start) var(--hero-pad-end);
}

/* Guaranteed breathing room BELOW the hero band. Padding inside the band only makes the
   band taller - the next block still touches its edge (measured on the Bourse
   Announcements page: card top == hero bottom). The gap has to be outside it.
   OPT-IN, default 0: many pages pull their first band UP over the hero with a negative margin
   (Real Estate hub path cards, home finance card, ...) and a default gap pushed those down.
   A page whose first block sits flush against the hero sets --bcfc-hero-gap on its own
   wrapper, e.g. .bcfc-ir-ann-page { --bcfc-hero-gap: clamp(1rem, 2vw, 1.75rem); }. */
.bcfc-hero {
    margin-block-end: var(--bcfc-hero-gap, 0);
}
.bcfc-hero--split .bcfc-hero__inner {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, .85fr);
    gap: clamp(24px, 4vw, 64px);
    align-items: center;
}
/* The chrome row spans both columns and stays at the top: the breadcrumb belongs on the
   site grid, not indented into the copy column.

   THE TAB STRIP IS PART OF THAT ROW. _HeroChrome emits `.bcfc-hero-chrome__trail` and then a BARE
   `.bcfc-page-tabs` nav as siblings inside .bcfc-hero__inner, so in `split` the nav is a THIRD grid
   item. Without this it took cell (2,1), pushed .bcfc-hero__copy into column 2 and shoved the
   visual slot down to row 3 — measured on /en/sahel-islamic/: the strip sat alone mid-left, the
   copy rendered in the right column and the arch photo fell below the fold. Any split hero on a
   page with two or more "Tab Pages" had the same layout, so this is fixed here rather than on the
   page. Both selectors, so the two chrome boxes stack as one column each spanning the full width. */
.bcfc-hero--split .bcfc-hero-chrome__trail,
.bcfc-hero--split .bcfc-hero__inner > .bcfc-page-tabs { grid-column: 1 / -1; }

/* image-left: the visual takes the first column and the narrower track moves with it. The chrome
   row is pulled ahead with `order` so auto-placement still gives it row 1 across both columns.
   It is the COPY that moves back, not the visual: a page can hand the hero its own visual
   partial (Sahel's `.arch`), which carries no `.bcfc-hero__visual` class to hang an order on.
   Source order is untouched, so screen readers and the phone stack keep copy first. */
.bcfc-hero--split-left .bcfc-hero__inner { grid-template-columns: minmax(0, .85fr) minmax(0, 1fr); }
.bcfc-hero--split-left .bcfc-hero-chrome__trail,
.bcfc-hero--split-left .bcfc-hero__inner > .bcfc-page-tabs { order: -2; }
.bcfc-hero--split-left .bcfc-hero__copy { order: 1; }

.bcfc-hero__copy { max-width: var(--hero-copy-width); }
.bcfc-hero--centred .bcfc-hero__inner { text-align: center; }
.bcfc-hero--centred .bcfc-hero__copy { margin-inline: auto; }
.bcfc-hero--centred .bcfc-hero__cta-row,
.bcfc-hero--centred .bcfc-hero__strip { justify-content: center; }

/* ---- copy -------------------------------------------------------------------------- */
/* THE LOGO LOCKUP SITS ON A PLATE, AS OF 2026-08-24 — changed on request: "Logo need for BG
   and to be bigger."

   It used to be a bare 190x46 <img> straight onto the band. Every hero logo this partial ever
   renders is a full-colour mark drawn for white paper — the Tas'heelat Real Estate Services
   lockup is navy type plus the red diamond, and the ~103 IMTIAZ merchant marks are every format
   under the sun — while the band underneath is a navy photograph. So the mark read at about a
   third of the headline's weight and its reds died into the scrim. `.lofd-brand__logo` in
   LoyaltyOfferDetailV2.css already reached the same conclusion for the in-page partner lockup
   ("Sits on a white plate because partner logos arrive in every possible format"); this is that
   treatment, in the hero, for all 105 pages that draw a hero logo.

   TWO ELEMENTS, AND THE SPLIT IS LOAD-BEARING. The plate is the wrapper's background, never
   padding on the <img>. Padding-on-the-img was tried first and page sheets defeat it: measured
   with CSS.getMatchedStylesForNode on /en/real-estate/evaluation-services/, RealEstateV2.css's
   `.re-v2 * { box-sizing: border-box }` (0,1,0, and later in the cascade) and `.re-v2 img
   { max-width: 100% }` (0,1,1) both out-rank a bare `.bcfc-hero__logo` (0,1,0) — so the img
   computed border-box and max-width:100%, the padding ate the artwork from the inside and the
   mark came out SMALLER than before. A wrapper sizes from its content, so nothing a page sheet
   says about `img` or `*` can reach it.

   The sizing rule below is deliberately `.bcfc-hero img.bcfc-hero__logo` (0,2,1) for the same
   reason — it has to survive `.<page-prefix> img { max-width: 100% }`, which is in at least
   RealEstateV2.css and is a common page-sheet reset.

   The hairline ring, not just the shadow, because heroTone=light paints the band in a pale
   surface and a white plate on it would otherwise have no edge at all.

   Every value is a token so a page whose logo is ALREADY a reversed/white-out mark can switch
   the plate off with `--hero-logo-plate: transparent` on the band instead of out-specifying
   these rules. No live page needs that today: all 105 hero logos measured on 2026-08-24 are
   full-colour marks. SahelIslamic.css sets --hero-logo-max-h through the same door. */
.bcfc-hero__logo-plate {
    /* flex + fit-content, NOT inline-flex: the eyebrow directly below is itself an inline-flex
       <span>, so an inline plate and the kicker would share a line. This is a block-level box
       that still hugs the mark rather than stretching to the copy column's 640px. */
    display: flex;
    width: fit-content;
    max-width: 100%;
    align-items: center;
    justify-content: center;
    padding: var(--hero-logo-pad, clamp(10px, 1.1vw, 15px));
    background: var(--hero-logo-plate, var(--bcfc-surface-raised, var(--bcfc-white, #fff)));
    border: 1px solid var(--hero-logo-ring, rgba(7, 27, 51, .08));
    border-radius: var(--hero-logo-radius, var(--bcfc-radius-md, 12px));
    box-shadow: var(--hero-logo-shadow, 0 10px 28px rgba(3, 22, 47, .22));
    /* The old site's .offer-inner-white-layer: .9 on the WHOLE plate, so a hint of the photo shows
       through and the logo softens with its backing (there they were one layer). On the element,
       not an rgba background, precisely so the <img> fades too. */
    opacity: var(--hero-logo-plate-opacity, .9);
    margin-block: 2px 24px;
}
.bcfc-hero--centred .bcfc-hero__logo-plate { margin-inline: auto; }

.bcfc-hero img.bcfc-hero__logo {
    display: block;
    width: auto;
    max-width: var(--hero-logo-max-w, clamp(196px, 21vw, 268px));
    max-height: var(--hero-logo-max-h, clamp(54px, 5.4vw, 74px));
    object-fit: contain;
    margin: 0;
}
/* LOGO ASIDE — heroLogoPlacement = "aside" (template-only; the IMTIAZ offer hero, 2026-10-12).
   The plate leaves the copy column for its own end column, larger, and comes back FIRST once the
   row stacks. A flex row rather than a grid track so the inline direction mirrors it: /ar puts the
   logo on the left with no RTL rule. order -1 below 900px is what keeps it on top — in source it
   follows the copy so a screen reader meets the headline first. 900px is the hero's own collapse
   point (see the visual-column rule above). */
.bcfc-hero__layout {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 40px;
}
.bcfc-hero__layout > .bcfc-hero__copy {
    flex: 1 1 420px;
    min-width: 0;
}
.bcfc-hero__logo-col {
    flex: 0 0 auto;
    /* to the band's end edge, into the empty column, not hard against the copy */
    margin-inline-start: auto;
    /* min() so the row still fits beside the copy between 900px and ~1300px instead of
       wrapping the logo underneath it. */
    --hero-logo-max-w: min(440px, 32vw);
    --hero-logo-max-h: 160px;
}
.bcfc-hero__logo-col > .bcfc-hero__logo-plate { margin-block: 0; }

@media (max-width: 900px) {
    .bcfc-hero__layout {
        flex-direction: column;
        align-items: flex-start;
        gap: 24px;
    }
    .bcfc-hero__layout > .bcfc-hero__copy { flex: 0 1 auto; width: 100%; }
    .bcfc-hero__logo-col {
        order: -1;
        margin-inline-start: 0;
        --hero-logo-max-w: 220px;
        --hero-logo-max-h: 78px;
    }
}

/* The plate is a physical object in the band, so it does not want to be the full 268px on a
   phone — at 390px that is two thirds of the viewport width and it competes with the headline. */
/* THE TAS'HEELAT REAL ESTATE MARK, MIRRORED FOR RTL — reported live 2026-09-23 on
   /ar/bcfc-group/real-estate/evaluation-services: "the logo is not RTL".

   This one hero logo (used by every real-estate hero: V2 detail, V3 hub, V4 Properties for
   Sale — all three feed heroLogoUrl into this same plate) is not a simple mark: it is ONE
   flattened PNG with the Arabic label, the English label and the "Real Estate" ribbon icon
   all baked into fixed pixels, [text-block][icon] left to right. .bcfc-hero__logo-plate
   already mirrors POSITION correctly via logical properties (it sits top-left on /en,
   top-right on /ar) — the bug is that the pixels INSIDE the image never reorder with it, so
   the icon stays stuck on the same physical side regardless of direction.

   Flipping the whole bitmap (`transform: scaleX(-1)`) is not a fix: it would reposition the
   icon but also mirror the Arabic AND English glyphs into backwards, unreadable text. There
   is no per-culture override uploaded in the CMS either (heroLogo supports one; nothing has
   been picked yet — see the bcfc-tresco-logo-rtl-mirror-needs-new-artwork task).

   So this slices the ONE existing asset into its two zones with two background-image
   pseudo-elements — pure CSS, no new artwork, no Razor change — and reorders THOSE, leaving
   every pixel of text sitting exactly as drawn. Source PNG is 2000x432; measured its
   fully-transparent columns to find the boundary: opaque content runs 70-1494 (the text
   block) then a 1494-1579 gap then 1580-1974 (the icon). :has() with a `src*=` match keys
   this to the exact file, so it stays silently inert (falls back to the plain unmirrored
   image) if that media item is ever replaced by a properly-drawn RTL asset - remove this
   block once bcfc-tresco-logo-rtl-mirror-needs-new-artwork ships that asset. Scoped to
   [dir="rtl"] only; /en is untouched. */
.bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"]) {
    --tresco-logo-h: var(--hero-logo-max-h, clamp(54px, 5.4vw, 74px));
}
[dir="rtl"] .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"]) {
    gap: calc(var(--tresco-logo-h) * 30 / 432);
}
[dir="rtl"] .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"]) > img.bcfc-hero__logo {
    display: none;
}
[dir="rtl"] .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"])::before,
[dir="rtl"] .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"])::after {
    content: "";
    display: block;
    flex-shrink: 0;
    height: var(--tresco-logo-h);
    background-image: url("/media/5f00121833834588888d46c1937463ff/b646ca8fe4694fc2a48ad4dc1aa64a53/file.png");
    background-repeat: no-repeat;
    background-size: calc(var(--tresco-logo-h) * 2000 / 432) var(--tresco-logo-h);
}
/* ::before renders first, so it is the plate's first flex item — the flex row's main-start
   edge, which under dir="rtl" is the RIGHT. That is the text block: same edge it already
   occupies relative to the icon in the source artwork, just now the box it sits in is on the
   opposite physical side of the page from /en. ::after (the icon) lands at the far end, the
   LEFT — mirrored from the source's right-hand placement, exactly the flip this fixes. */
[dir="rtl"] .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"])::before {
    width: calc(var(--tresco-logo-h) * 1424 / 432);
    background-position: calc(-1 * var(--tresco-logo-h) * 70 / 432) 0;
}
[dir="rtl"] .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"])::after {
    width: calc(var(--tresco-logo-h) * 394 / 432);
    background-position: calc(-1 * var(--tresco-logo-h) * 1580 / 432) 0;
}

@media (max-width: 520px) {
    .bcfc-hero__logo-plate { padding: var(--hero-logo-pad, 9px); }
    .bcfc-hero__logo-plate:has(> img[src*="5f00121833834588888d46c1937463ff"]) {
        --tresco-logo-h: var(--hero-logo-max-h, 50px);
    }
    .bcfc-hero img.bcfc-hero__logo {
        max-width: var(--hero-logo-max-w, 176px);
        max-height: var(--hero-logo-max-h, 50px);
    }
}
/* THE KICKER. The comp replaced the older smoked-glass pill badge (and its verified_user
   icon) with a bare 36x2 accent rule plus a letterspaced label. The rule is a ::before
   rather than a <span> so the markup carries only the words; because the flex row follows
   dir, it lands on the right automatically in RTL with no separate rule. currentcolor, so
   the rule and the label can never drift apart when a hero is retinted. */
.bcfc-hero__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 14px;
    color: var(--hero-accent);
    font-size: 0.84375rem;
    font-weight: var(--bcfc-fw-bold, 700);
    letter-spacing: .18em;
    text-transform: uppercase;
}
.bcfc-hero__eyebrow::before {
    content: "";
    flex: none;
    width: 36px;
    height: 2px;
    background: currentcolor;
}
/* Arabic is cursive: letter-spacing pulls the glyphs apart at the joins, and uppercase is
   a no-op on it. Both are dropped rather than tuned. */
[dir="rtl"] .bcfc-hero__eyebrow { letter-spacing: normal; text-transform: none; }

/* Both the class and a bare-tag selector, deliberately: rte.css ships the only unscoped
   heading scale on the site and index.css is Bootstrap, so a descendant .bcfc-hero h1
   at (0,1,1) was losing to them. Naming the class raises it to (0,2,1) and gives the
   element a hook no global tag rule can capture. */
.bcfc-hero h1,
.bcfc-hero__title {
    font-family: 'Almarai', system-ui, -apple-system, sans-serif;
    color: var(--hero-ink);
    font-size: var(--hero-title-size);
    font-weight: var(--bcfc-fw-extrabold, 800);
    letter-spacing: -.03em;
    line-height: 1.1;
    margin-block: var(--hero-title-mt) 0;
    text-wrap: balance;
}
/* The accent clause. font-style:normal because <em> is the correct ELEMENT for a stressed
   clause, but italics are not the design. */
/* Both the class and a BARE <em> inside the headline. The class is what _PageHero emits for its
   *emphasis* markers and its accent clause; the bare tag is what a caller's own markup contains when
   the headline comes through heroTitleHtml — the designs that let marketing tint part of the line
   write plain <em>. Without the tag selector every such page had to re-tag the element in its view
   just to pick up the treatment, which is the kind of per-page workaround the shared hero exists to
   remove. font-style:normal because <em> is the right ELEMENT for a stressed clause but italics are
   not the design. */
.bcfc-hero__accent,
.bcfc-hero h1 em,
.bcfc-hero__title em {
    font-style: normal;
    color: var(--hero-accent);
}
.bcfc-hero__lead {
    max-width: var(--hero-lead-width);
    color: var(--bcfc-dark-ink-muted, var(--hero-ink-muted));
    font-size: var(--hero-lead-size);
    line-height: var(--hero-lead-lh);
    margin-block: 22px 0;
    text-wrap: pretty;
}
/* News/media article headlines carry the full quoted press-release sentence as the h1 (there is
   no separate lead field — see Views/MediaCentreDetail.cshtml), so on long articles it can run to
   5-6 lines and push the CTAs/date out of the band. Scoped to heroCssClass="bcfc-media-hero--*"
   (MediaCentreDetail's own hero) rather than the shared .bcfc-hero__title, which every other hero
   on the site also uses. */
[class*="bcfc-media-hero--"] .bcfc-hero__title {
    /* Smaller ceiling than the old 2.75rem, and a 3rd line, so a full press-release
       sentence has room to fit without hitting the ellipsis below on ordinary titles —
       the line-clamp stays only as a safety net for the rare title long enough to
       overrun even 3 lines at this size. */
    font-size: clamp(1.15rem, 2.6vw, 2.25rem);
    line-height: 1.3;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.bcfc-hero__support {
    max-width: var(--hero-lead-width);
    color: var(--bcfc-dark-ink-muted, var(--hero-ink-dim));
    font-size: var(--hero-support-size);
    line-height: 1.65;
    margin-block: 18px 0;
    text-wrap: pretty;
}

/* ---- --byline: a SIGNED hero ---------------------------------------------------------
   Opt in per page with the `heroCssClass` field set to `bcfc-hero--byline`, and put the two
   lines in `heroSupport` separated by a newline: name first, role second.

   WHY A MODIFIER AND NOT TWO NEW FIELDS. This is the CEO's Message signature — a bold name over
   a smaller role, against a vertical brand rule (`.ceo-sign` / `.nm` / `.rl` / `.bar` in the
   approved design). Of the five About baselines it appears on exactly ONE page, and
   `bcfcHeroCopyComposition` is shared by every hero on 62 doctypes: adding `heroBylineName` +
   `heroBylineRole` there would put two permanently-empty fields in front of every editor on the
   site, plus a schema write on a live element type and a preview regeneration, to serve one page.
   A modifier costs nothing anywhere else.

   The two tiers come from `::first-line`, which is why no extra markup is needed — font-weight,
   colour and font-size are all properties it accepts. `white-space: pre-line` is what makes the
   authored newline a real line break, and it changes nothing for the other 8 nodes that use
   `heroSupport`, because none of them contains one.

   The rule is painted as a background rather than a `::before`, deliberately: a `::before` box
   joins the first formatted line and would drag `::first-line` onto it instead of the name. */
.bcfc-hero--byline .bcfc-hero__support {
    white-space: pre-line;
    color: var(--bcfc-dark-ink-muted, var(--hero-ink-muted));
    margin-block-start: 28px;
    padding-inline-start: 17px;
    background-image: linear-gradient(var(--bcfc-yellow), var(--bcfc-green));
    background-repeat: no-repeat;
    background-size: 3px 46px;
    background-position-y: top;
}

/* The rule sits on the READING edge, and background-position-x has no logical form, so the two
   directions are spelled out rather than left at a physical `left`. */
[dir="ltr"] .bcfc-hero--byline .bcfc-hero__support {
    background-position-x: left;
}

[dir="rtl"] .bcfc-hero--byline .bcfc-hero__support {
    background-position-x: right;
}

.bcfc-hero--byline .bcfc-hero__support::first-line {
    color: var(--hero-ink);
    font-size: 1.1rem;
    font-weight: 800;
}

/* ---- CTAs -------------------------------------------------------------------------- */
.bcfc-hero__cta-row {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    margin-block-start: 38px;
}
.bcfc-hero__cta-primary,
.bcfc-hero__cta-secondary {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    padding: .95rem 1.7rem;
    border-radius: 12px;
    font-weight: 800;
    font-size: 1rem;
    /* THE HERO CANNOT RELY ON A PAGE SCOPE. Bootstrap (/css/index.css) sets
       a { text-decoration: underline } site-wide, and the page sheets that cancel it do so
       under their own scope class — .bcfc-comp a for the comp pages, and so on. The hero used
       to sit INSIDE that wrapper because each template drew its own; rendered from
       Navigation/Breadcrumbs.cshtml it is emitted BEFORE the page body and is therefore inside
       no page scope at all, so both CTAs came out underlined. Declared here, and restated on
       :hover below, because the global a:hover rules are the ones that have to be beaten. */
    text-decoration: none;
    /* A matching-width transparent border is reserved in the base state, so the hover
       border does not change the button's size. */
    border: 1.5px solid transparent;
    /* These two exist for a <button> in a slot. The row normally renders <a> elements, and a
       button inherits neither the page font nor a pointer cursor from its ancestors — a dialog
       trigger that cannot be a link (RealEstate's specialist popup, Financing's apply dialog)
       otherwise renders in the UA's default form font. */
    font-family: inherit;
    cursor: pointer;
    transition: transform .25s, box-shadow .25s, background .25s, border-color .25s, color .25s;
}
.bcfc-hero__cta-primary .material-icons-outlined,
.bcfc-hero__cta-secondary .material-icons-outlined { font-size: 1.1875rem; }

.bcfc-hero__cta-primary {
    background: var(--hero-ink);
    color: var(--hero-scrim);
}

/* THE INK IS PINNED AT (0,2,0), AND THIS IS A READABILITY FIX, NOT A TIDY-UP.
   The rule above is (0,1,0). Page sheets reset their anchors with a PAGE-SCOPED, zero-weight
   selector — CareersTemplate.css has `.bcfc-careers-template :where(a) { color: inherit }` — and
   because :where() contributes NO specificity that selector is also (0,1,0). It TIES, and the page
   sheet loads after the bundle, so source order hands it the win. The CTA then inherits the page's
   body colour.
   Measured on /en/about-bcfc/careers/: ink rgb(7,27,51) on fill rgb(7,27,51) — the button is a
   solid navy slab and "Submit your application" is invisible. Contrast 1.00, and it is the REST
   state, not hover.

   Fixing it here rather than exempting each page is the point: the same reset pattern exists in
   several page sheets (bcfc-app-band.css documents the identical trap for its own button and
   solves it the same way), so a per-page fix would be a list that grows every time a template is
   added. Adding the .bcfc-hero ancestor makes these (0,2,0) — above every page-scoped anchor reset
   and still below anything a page deliberately aims at the CTA itself.

   The CTA is always inside .bcfc-hero (.bcfc-hero__inner > __copy > __cta-row > a) on both the
   partial path and the block path, so the ancestor is always there to match. */
.bcfc-hero .bcfc-hero__cta-primary {
    color: var(--hero-scrim);
}

.bcfc-hero .bcfc-hero__cta-secondary {
    color: var(--hero-ink);
}
/* Hover restates BOTH the fill and the ink. A hover rule that recolours only one of the
   two is how this site ended up with dark ink on a dark fill in 40 places — and the
   global a:hover it has to beat is exactly that kind of rule. */
.bcfc-hero__cta-primary:hover,
.bcfc-hero__cta-primary:focus-visible {
    text-decoration: none;
    transform: translateY(-2px);
    /* The `box-shadow: 0 12px 28px rgba(0,0,0,.25)` that used to sit here was overridden by the
       `box-shadow: none` at the END of this same block - added when the CTA became an outline on
       hover (2026-09-06, see below) - so it has not rendered since. Removed, no visual change. */
    /* THE FILL HAS TO ACTUALLY MOVE. This used to restate `background: var(--hero-ink)` — the
       SAME value as rest — so the button had no colour change whatsoever: measured on /en/finance/
       and /en/islamic-finance/, rest and hover both rgb(10,58,115) on rgb(255,255,255), and the
       shadow is near-invisible against a dark band. The lift was the only feedback.

       Mixing 12% of --hero-scrim INTO --hero-ink, rather than naming a hover colour, is what makes
       this safe on every tone at once. The two tokens are always the button's fill and its ink, so
       the mix always moves the fill 12% TOWARD its own text and never past it:
         dark hero  — ink #fff + 12% navy  -> a faint blue-grey tint, navy label, ~9:1
         light hero — ink #071b33 + 12% #f3f7fb -> a touch lighter, near-white label, still high
       A named colour (or --hero-accent, the obvious choice) would have inverted on the light tone:
       a pale accent under the light hero's near-white ink is white-on-pale.

       The INK is deliberately unchanged — "neither recolours the text" in the both-or-neither
       rule. Contrast can only fall by the 12% mix, never invert. */

    /* SUPERSEDED 2026-09-06: THE HERO CTA NOW INVERTS TO AN OUTLINE, on the owner's ruling that
       every body call-to-action is solid at rest and an outline on hover.

       The 12% color-mix above was solving the right problem the hard way. It existed because a
       NAMED hover colour is unsafe here: the hero flips tone, so any fixed colour is wrong on one
       of the two. The inversion has that property for free, and more cleanly — because
       --hero-ink IS the button's own fill and --hero-scrim IS its own label, dropping the fill and
       promoting --hero-ink to the border AND the label works on both tones without naming a
       colour at all:
         dark hero  — --hero-ink #fff    -> transparent face, white border, white label on a dark band
         light hero — --hero-ink #071b33 -> transparent face, navy border, navy label on a light band
       It can never invert to low contrast, because the ink it adopts is the colour that was
       already legible against that band as the fill.

       The shadow goes with the fill: `0 12px 28px rgba(0,0,0,.25)` under a transparent face casts
       from nothing. The lift stays — that is motion, not colour. */
    background: transparent;
    border-color: var(--hero-ink);
    box-shadow: none;
}
/* Same pin for the hover states — a page anchor reset written `:where(a):hover` would be (0,2,0)
   and tie the single-class hover rules above in exactly the same way. */
/* THE INVERTED LABEL HAS TO BE DECLARED HERE, not only in the (0,1,0) hover rule above.
   This pin is (0,2,0) and exists to outrank page-scoped `:where(a):hover` resets — which means it
   also outranks the hover rule above. Left saying `--hero-scrim`, it would have pinned the RESTING
   label colour onto the inverted face: --hero-scrim is the fill's counterpart, so on a dark hero
   that is navy-on-transparent over a dark band, i.e. an invisible label. The ink and the fill are
   one decision and both halves live at the specificity that actually wins. */
.bcfc-hero .bcfc-hero__cta-primary:hover,
.bcfc-hero .bcfc-hero__cta-primary:focus-visible {
    color: var(--hero-ink);
}
.bcfc-hero .bcfc-hero__cta-secondary:hover,
.bcfc-hero .bcfc-hero__cta-secondary:focus-visible {
    color: var(--hero-ink);
}

/* THE LIGHT-TONE "KEEP A FILL" EXCEPTION IS REMOVED, owner's reversal 2026-10-01. It existed
   because the 2026-09-07 ruling ("if background is not white the text cannot be black so it
   should be white") read the inversion's navy-on-pale-band result as a violation — correctly, by
   that ruling's letter, even though it measured 16:1 and was fully legible. The owner now wants
   every primary CTA, light hero or dark, to invert the same way (matching .bcfc-btn--primary's
   own 2026-10-01 reversal in bcfc-button.css), so this override is gone and the base
   `.bcfc-hero__cta-primary:hover` rule above — transparent face, --hero-ink border, --hero-ink
   label — now applies on BOTH tones:
     DARK hero  — --hero-ink #fff    -> transparent face, white border, white label. UNCHANGED.
     LIGHT hero — --hero-ink #071b33 -> transparent face, navy border, navy label. Was overridden
                  to a deepened fill before this change; now matches the dark-hero pattern. */
/* The comp's ghost button: a 30% rule, not 60% — at 60% it reads as a second filled
   button next to the primary rather than as the quieter of the pair. */
.bcfc-hero__cta-secondary {
    border-color: color-mix(in srgb, var(--hero-ink) 30%, transparent);
    color: var(--hero-ink);
    background: transparent;
}
.bcfc-hero__cta-secondary:hover,
.bcfc-hero__cta-secondary:focus-visible {
    text-decoration: none;
    transform: translateY(-2px);
    border-color: color-mix(in srgb, var(--hero-ink) 55%, transparent);
    background: color-mix(in srgb, var(--hero-ink) 10%, transparent);
    color: var(--hero-ink);
}

/* ---- the stat / credential strip --------------------------------------------------- */
.bcfc-hero__strip {
    display: flex;
    flex-wrap: wrap;
    gap: clamp(20px, 3vw, 48px);
    margin-block: 34px 0;
    padding-block-start: 26px;
    border-block-start: 1px solid color-mix(in srgb, var(--hero-ink) 22%, transparent);
}
.bcfc-hero__strip-value {
    font-family: 'Almarai', system-ui, sans-serif;
    font-size: clamp(1.375rem, 2.4vw, 1.875rem);
    font-weight: 800;
    line-height: 1.1;
    color: var(--hero-ink);
}
/* statValue standing in for a phrase with no statLabel: drop to pill-sized type instead of the
   big hero-stat digits, so a workaround entry doesn't read as a giant misplaced number. */
.bcfc-hero__strip-value--no-label {
    font-size: clamp(0.875rem, 1.3vw, 1rem);
    font-weight: 700;
    line-height: 1.35;
}
/* The optional icon chip on a strip value. Sits INSIDE the dt (a dl permits only dt/dd), so it is
   an inline-grid rather than a block. */
.bcfc-hero__strip-icon {
    display: inline-grid;
    place-items: center;
    width: 34px;
    height: 34px;
    margin-inline-end: 10px;
    border-radius: 10px;
    vertical-align: middle;
    background: color-mix(in srgb, var(--hero-ink) 12%, transparent);
    color: var(--hero-accent);
}
.bcfc-hero__strip-icon .material-icons-outlined { font-size: 1.1875rem; }
.bcfc-hero__strip-label {
    margin: 6px 0 0;
    font-size: 0.875rem;
    line-height: 1.45;
    color: var(--bcfc-dark-ink-muted, var(--hero-ink-dim));
    max-width: 22ch;
}

/* ---- the visual column ------------------------------------------------------------- */
.bcfc-hero__visual { position: relative; }
.bcfc-hero__visual-img {
    display: block;
    width: 100%;
    height: auto;
    /* NOT object-fit:cover by default. Card artwork here is 2000x3091 PORTRAIT (ratio
       .647), and a cover fit inside a landscape box crops it to a black strip. */
    object-fit: contain;
}

/* ---- image slides: the backdrop stack and the image-column carousel --------------------
   Driven by wwwroot/js/bcfc-hero-slides.js, which only toggles `.on`. The first slide is `.on`
   in the server markup, so with scripts off the hero is one finished picture.

   BACKDROP: the stack fills the .bcfc-hero__bg wrapper and the slides are stacked absolutely,
   so the band keeps the height its preset gives it whatever the pictures' own ratios are.
   COLUMN: the slides share ONE grid cell, so the column is as tall as the tallest picture and
   nothing jumps when they cross-fade. */
.bcfc-hero__slides { position: relative; }
.bcfc-hero__bg > .bcfc-hero__slides {
    position: absolute;
    inset: 0;
}
.bcfc-hero__slide {
    opacity: 0;
    transition: opacity 1.2s ease;
}
.bcfc-hero__slide.on { opacity: 1; }
.bcfc-hero__bg .bcfc-hero__slide {
    position: absolute;
    inset: 0;
}
.bcfc-hero__slide-dots {
    position: absolute;
    inset-inline: 0;
    inset-block-end: 0.75rem;
    display: flex;
    justify-content: center;
    gap: 0.5rem;
    z-index: 1;
}
.bcfc-hero__slide-dot {
    inline-size: 0.625rem;
    block-size: 0.625rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--hero-ink-dim);
    cursor: pointer;
}
.bcfc-hero__slide-dot[aria-current="true"] { background: var(--hero-ink); }
.bcfc-hero__slide-dot:focus-visible {
    outline: 2px solid var(--hero-ink);
    outline-offset: 2px;
}

/* ---- responsive -------------------------------------------------------------------- */
@media (max-width: 900px) {
    .bcfc-hero { --hero-min-h: auto; }
    .bcfc-hero--split .bcfc-hero__inner { grid-template-columns: minmax(0, 1fr); }
    /* Copy first on a phone, whatever the source order says. */
    .bcfc-hero--split .bcfc-hero__visual { order: 2; }
    .bcfc-hero--split-left .bcfc-hero__inner { grid-template-columns: minmax(0, 1fr); }
    .bcfc-hero--split-left .bcfc-hero__copy { order: 0; }
    .bcfc-hero--split-left .bcfc-hero__inner > :not(.bcfc-hero__copy):not(.bcfc-hero-chrome__trail):not(.bcfc-page-tabs) { order: 2; }
    .bcfc-hero__copy { max-width: none; }
}
/* The comp's phone step: the headline gets PROPORTIONALLY larger on a narrow viewport
   (9vw against 6.4vw) because it is the only thing on the screen, and the lead grows with
   it. Only the two large presets — a compact utility header has no room for it. */
@media (max-width: 720px) {
    .bcfc-hero--h-tall,
    .bcfc-hero--h-full {
        /* Trimmed 40-60px -> 36-52px on 2026-09-01, in step with the desktop cut above. */
        --hero-title-size: clamp(36px, 8vw, 52px);
        --hero-lead-size: 18px;
    }
}

/* PHONE CTA STEP (2026-10-15, owner: "huge buttons on mobile"). The desktop pill — 16px type,
   .95rem/1.7rem padding, 56px tall — took ~70% of a 360px screen per button and wrapped a
   two-word label onto a second line as soon as the phone's text size was raised. Smaller type
   and padding only; min-height stays at the 44px touch floor, and labels still wrap at spaces
   (never mid-word) if they must. */
@media (width < 576px) {
    .bcfc-hero__cta-row {
        gap: 10px;
        margin-block-start: 26px;
    }
    .bcfc-hero__cta-primary,
    .bcfc-hero__cta-secondary {
        gap: 7px;
        padding: .7rem 1.15rem;
        font-size: .875rem;
        border-radius: 10px;
    }
    .bcfc-hero__cta-primary .material-icons-outlined,
    .bcfc-hero__cta-secondary .material-icons-outlined { font-size: 1.0625rem; }
}

@media (prefers-reduced-motion: reduce) {
    .bcfc-hero * { transition: none !important; }
    /* The rings still SHOW — only the motion stops — because they are part of the
       composition, not an entrance effect. Both halves of "stops correctly" live on the base
       rules rather than here, so this query cannot drift out of step with the over-a-photograph
       freeze: each orbit's dot RESTS at a point inside the band (.bcfc-hero__orbit--*), and the
       glow rests at the quiet end of its cycle (.bcfc-hero__pulse). Before 2026-09-09 neither
       was true here — a reduced-motion visitor lost two of the three dots off the top edge and
       got the glow frozen at its peak. */
    .bcfc-hero__ring,
    .bcfc-hero__orbit,
    .bcfc-hero__pulse { animation: none; }
    .bcfc-hero__cta-primary:hover,
    .bcfc-hero__cta-secondary:hover { transform: none; }
}

/* ============================================================================
   COMPOSITION-DRIVEN KNOBS
   ============================================================================
   Everything an editor can change about a hero from the backoffice lands here, and
   it all lands as a TOKEN or a MODIFIER CLASS — never as a new rule. That is the
   whole reason the layer above is written token-first: a new customisation option
   on bcfcHeroDesignComposition2 should need a field and a line in the partial, not CSS.

   Set by _PageHero.cshtml as inline custom properties on the band, each emitted only
   when the editor actually filled the field in:

     heroSurfaceColour     -> --hero-surface + --hero-scrim   band, scrim, primary CTA ink
     heroAccentColour      -> --hero-accent         accent clause, kicker rule, ornament
     heroInkColour         -> --hero-ink            copy
     heroOverlayStrength   -> --hero-overlay-alpha  0-100, scrim opacity
     heroMinHeight         -> --hero-min-h          overrides heroHeight's floor
     heroBackgroundFocus   -> --hero-bg-pos         object-position of the photograph
     heroTextMaxWidth      -> --hero-copy-width     copy column measure

   An inline custom property beats every rule above without !important and without
   raising specificity anywhere, so none of this fights the cascade.
   ============================================================================ */
.bcfc-hero {
    --hero-overlay-alpha: 1;
    /* THE TWO AXES ARE SEPARATE PROPERTIES, and that is load-bearing. The horizontal one is
       mirrored in Arabic and the vertical one is not, so a page that needs to move the crop
       UP cannot do it by redeclaring `--hero-bg-pos` — that would also freeze the X at one
       direction's value and put the subject back behind the other direction's copy. Only ever
       override the axis you mean. `--hero-bg-pos` is still the single property the editor
       field writes, so a hand-picked heroBackgroundFocus keeps beating both. */
    --hero-bg-pos-x: 72%;
    --hero-bg-pos-y: center;
    /* The comp's focal point: the copy occupies the start edge, so the photograph is
       pulled toward the far one and the subject stays out from behind the text. */
    --hero-bg-pos: var(--hero-bg-pos-x) var(--hero-bg-pos-y);
}
.bcfc-hero__bg-img,
.bcfc-hero__bg-video { object-position: var(--hero-bg-pos); }
/* Mirrored in Arabic, where the copy moves to the other edge — otherwise the subject ends
   up directly behind the headline. Overridden by heroBackgroundFocus when an editor sets
   one, which is correct: a hand-picked focal point is a deliberate answer to this. */
[dir="rtl"] .bcfc-hero { --hero-bg-pos-x: 28%; }

/* A `center` VERTICAL anchor decapitates a wide portrait, and every BCFC people photograph is
   one. Measured on CEO-Banner.jpg (2000×1037, head top at y≈90): a `standard` band is 460px
   tall, so at a 1440px viewport `object-fit: cover` scales the file by 0.72 to 747px and
   discards 287px of it — 143px off the top with `center`, which is source y≈199, i.e. below
   the subject's eyes. The head was cut off in both cultures.

   So the vertical anchor is a MODIFIER, not a new default: heroes whose artwork has its
   subject in the middle (most of the estate) are unchanged, and a hero whose subject stands
   in the upper band opts in. These set Y only, so the Arabic X mirroring above survives. An
   editor who wants a different point still overrides both axes with heroBackgroundFocus. */
.bcfc-hero--focus-top { --hero-bg-pos-y: top; }
.bcfc-hero--focus-upper { --hero-bg-pos-y: 12%; }
.bcfc-hero--focus-lower { --hero-bg-pos-y: 88%; }
.bcfc-hero--focus-bottom { --hero-bg-pos-y: bottom; }

/* The CEO's Message signature carries one, because the byline treatment and the standing
   portrait it is designed around arrive together — the modifier is set on exactly that one
   page (see the note above .bcfc-hero--byline). A second page adopting the byline with a
   centred photograph should drop this by setting heroBackgroundFocus on its own hero. */
.bcfc-hero--byline { --hero-bg-pos-y: 12%; }

/* THE PORTRAIT IS MIRRORED IN ARABIC, and the X anchor above cannot do this job. That anchor
   only bites when the photograph is WIDER than its box: CEO-Banner.jpg is 1.93:1 in a 3.1:1
   band, so `cover` scales it by width and there is no horizontal slack to slide — `28%` and
   `72%` compute to the same pixels at every desktop width. Measured on beta: the subject
   stands in the right third, Arabic copy occupies the right, and he sat behind the headline
   while the left half of the frame showed empty lobby. Approved by the product owner
   2026-09-21 in preference to commissioning a second, left-weighted Arabic artwork.

   Scoped to the byline hero rather than applied to every RTL backdrop: flipping a photograph
   of a real person moves the ghutra and the shoulder drape to the other side, which is a
   decision per image, not a site-wide rule. The scrim, the copy and the ornaments are NOT
   flipped — only the <img> — so nothing legible is reversed. */
[dir="rtl"] .bcfc-hero--byline .bcfc-hero__bg-img { transform: scaleX(-1); }

/* ARABIC, ALL WIDTHS: marketing has since given Arabic its OWN artwork (ceo-banner-02.jpg, the
   CEO already standing on the left, clear of the right-hand Arabic copy), so the mirror above would
   flip it back behind the headline. Dropped everywhere. On a phone the photo is scaled by height,
   so only the X anchor matters: 42% seats his face in the free left side of the one band. */
@media (min-width: 768px) {
  [dir="rtl"] .bcfc-hero--byline .bcfc-hero__bg-img { transform: none; }
}
@media (width < 768px) {
  [dir="rtl"] .bcfc-hero--byline .bcfc-hero__bg-img { transform: none; object-position: 42% 0%; }
}

/* Scrim strength as OPACITY rather than as alpha inside the gradient stops: the
   gradient is a five-stop ramp, so making it editor-adjustable stop-by-stop would need
   five more color-mix() calls and would still not be adjustable as one number. Opacity is
   one value and it composes with the tone variants for free. */
.bcfc-hero__scrim { opacity: var(--hero-overlay-alpha); }

/* COPY ALIGNMENT, independent of the variant — a banner hero can still centre its copy
   without becoming the centred variant (which also centres the visual column). */
.bcfc-hero--align-start .bcfc-hero__copy { margin-inline: 0 auto; text-align: start; }
.bcfc-hero--align-centre .bcfc-hero__copy { margin-inline: auto; text-align: center; }
.bcfc-hero--align-centre .bcfc-hero__cta-row,
.bcfc-hero--align-centre .bcfc-hero__strip { justify-content: center; }
.bcfc-hero--align-end .bcfc-hero__copy { margin-inline: auto 0; text-align: end; }
.bcfc-hero--align-end .bcfc-hero__cta-row,
.bcfc-hero--align-end .bcfc-hero__strip { justify-content: flex-end; }

/* PRE-COMPOSED ARTWORK. The single most important option here, and the one an editor
   will reach for most on this site: BCFC banner artwork ships with the headline already
   baked into the image. A scrim over one of those only dims the designer's work, and a
   copy column on top of it double-prints the headline. heroShowOverlay=false omits the
   scrim in the partial; this rule also drops the band's own colour so the artwork is
   shown exactly as supplied, and lets it set the height instead of being cropped to a
   min-height. */
.bcfc-hero--no-overlay {
    background: transparent;
    --hero-min-h: auto;
}
.bcfc-hero--no-overlay .bcfc-hero__bg { position: relative; background: transparent; }
.bcfc-hero--no-overlay .bcfc-hero__bg-img { height: auto; object-fit: contain; }
/* With the backdrop in flow, the copy has to be lifted back over it. */
.bcfc-hero--no-overlay .bcfc-hero__inner {
    position: absolute;
    inset-block: 0;
    inset-inline: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
/* …and when there is no copy at all — the normal case for baked-in artwork — the band is
   just the picture, at its own aspect ratio.

   IT KEEPS ITS HEADER CLEARANCE. This rule used to set `padding-block-start: 0` so the picture ran
   to the very top of the page, and that is precisely the case where it hurts most: BCFC banner
   artwork ships with the headline baked into the image, so the top ~104px of it — the headline —
   ended up behind the position:fixed glass nav. A full-bleed picture is still full-bleed to the
   left, right and bottom; the only thing reserved is the strip the nav occupies. */
.bcfc-hero--no-overlay:not(:has(.bcfc-hero__title)):not(:has(.bcfc-hero__lead)) {
    display: block;
}

/* ----------------------------------------------------------------------------
   CYCLE CHIPS — the optional pill row under the lead, one chip per line of the
   heroChips Textarea. Added 2026-09-09 for the approved Strategic Review hero,
   whose design draws two labelled pills ("2023–2025 · Delivered" /
   "2026–2030 · Next cycle"). Every other page leaves heroChips empty and emits
   nothing, so no existing hero moves.

   Inks come from the hero's own scoped tokens (--hero-ink / --hero-ink-dim /
   --hero-accent), NOT from :root and not from hex literals, so a chip follows
   the hero's tone the same way the eyebrow and support lines already do — and
   it stays legible on the light tone as well as the dark one.

   Logical properties throughout (margin-block, padding-inline, border-inline)
   so the Arabic hero needs no RTL override: this file is bundled into both
   bundle-main and bundle-main-rtl.
   ---------------------------------------------------------------------------- */


/* The approved comp draws a small status dot before each label (its .ct > .dot).
   Emitted as a pseudo-element rather than a nested span so the CMS value stays
   plain text -- one chip per line, no markup for an editor to get wrong.
   The comp tints .ct.past and .ct.next differently; one Textarea cannot express
   which chip is which, so both dots take the hero accent. That is the one
   deliberate simplification against the design here. */

/* A chip mixes Latin year ranges with Arabic words, so it may need to wrap on a
   narrow screen even though the desktop design never does. */

@charset "UTF-8";
/* ==================================================================================================
   BCFC SECTION SNAP — one flick, one band.

   The reusable form of the section snapping that was written inline in pages/Home.css. Opt a page
   in by putting `bcfc-snap` on the element that wraps the bands; every direct-child band then
   becomes a snap target. Nothing here is page-specific, and nothing applies without that class.

       <div class="bcfc-home bcfc-snap bcfc-snap--panels">   ... bands ...   </div>

   ── WHY THE PANEL SIZING IS THE WHOLE TRICK ────────────────────────────────────────────────────
   Measured on nmc.com.bh (the reference marketing asked for) from a saved copy of its home page:
   it runs fullPage.js — `overflow:hidden` on <html>, the document scroll destroyed, five panels
   each `height:1033px` (the viewport to the pixel) swapped by `transform:translateY()`. The
   decisive feel does NOT come from the library. It comes from every panel being exactly one
   viewport tall, so exactly one snap point is ever in play. The library only enforces that.

   Home's own bands measured 645 / 672 / 730 / 900 / 828 / 609 / 757 / 688 / 748 px at 1440x900 —
   all under the viewport, so with `proximity` two snap points sat on screen at once and the nearer
   one won, which reads as arbitrary. `--panels` is what closes that gap, and it is why `--decisive`
   is safe to turn on afterwards.

   fullPage.js is deliberately NOT used: it takes the scrollbar away from the visitor, breaks
   keyboard and assistive-tech scrolling, needs a commercial licence for a site like ours, and
   parks inactive panels at `left:-9999px` — the exact pattern that has already broken RTL here
   once (wwwroot/css/... see the offscreen-left note in rtl-ar.css).

   ── THE MODIFIERS, AND THE ORDER TO ADOPT THEM ─────────────────────────────────────────────────
   `bcfc-snap` alone is the conservative base: `y proximity`, targets aligned to `start`, nothing
   resized. Safe on any page.

   * `bcfc-snap--panels`   Grows every band to one viewport (less the fixed chrome) and centres its
                           content. ADOPT THIS FIRST. `min-height`, never `height`: a band whose
                           content genuinely exceeds one screen still scrolls normally, so nothing
                           can trap the reader mid-band — which is the failure mode that kept the
                           original Home block on `proximity`.

   * `bcfc-snap--decisive` `y mandatory` + `scroll-snap-stop: always`, i.e. one gesture advances
                           exactly one band and a fast flick cannot fly past three. This is most of
                           what people mean by "good snapping". ONLY VALID TOGETHER WITH `--panels`
                           — mandatory on bands that are not viewport-sized is how you trap a
                           reader inside a tall band, so the rule below requires both classes.

   ── THE PER-BAND ATTRIBUTE ─────────────────────────────────────────────────────────────────────
   A direct child that is a `<section>` is a band automatically. The attribute is for the ones that
   are not, and for the exceptions:

     data-snap="band"    Treat this non-`<section>` child as a band: snap target AND panel sizing.
     data-snap="align"   Snap target, but leave its height alone. This is what the HERO wants — it
                         already shrinks itself by the header height in bcfc-hero-banner.css, and it
                         owns an internal absolute-positioned slider that has no business being
                         re-centred by us.
     data-snap="skip"    Out of everything. For a band that is inherently long — a feed, a footer,
                         a table — where forcing a snap point at its top means the visitor has to
                         fight the pull to read it.

   Each value also has a class alias — `bcfc-snap-band` / `bcfc-snap-align` / `bcfc-snap-skip` —
   because several bands here are rendered by shared partials that accept a CLASS string from the
   caller (`_ElfsightFeed.cshtml`'s `SectionClass`, for one) and have no way to pass an attribute
   through. The two spellings are interchangeable; pick whichever the call site can express.

   ── FOUR THINGS THAT ARE LOAD-BEARING ──────────────────────────────────────────────────────────
   * `scroll-snap-type` goes on <html>, not <body>. Only the ROOT element propagates snapping to
     the viewport; the identical declaration on body does nothing at all. `:has()` is what lets a
     class on the page wrapper reach the root without a body class or a Razor change in the layout.

   * `scroll-padding-top` is set here too, and it is not decoration. `.bcfc-header` is
     `position: fixed`, so a band snapped to the scrollport start would sit ~104px UNDER it. It
     also fixes plain anchor jumps landing under the header on any page that opts in.

   * The panel height DEDUCTS that same inset. Snapping aligns to the SNAPPORT start — the
     scrollport inset by `scroll-padding-top` — so a band at a flat `100svh` always overhangs the
     bottom of the scrollport by the header's height, and the next flick then either stalls or
     carries past into the following band's zone. Both terms come from `--bcfc-snap-inset` so they
     cancel exactly.

   * `align-content: center` centres the content WITHOUT touching `display`. That is the point:
     switching these bands to flex or grid would re-plumb the internal layout of nine partials.
     Modern engines honour `align-content` on a block container, and where they do not it simply
     top-aligns, which is today's behaviour — so this degrades to a no-op rather than a bug.

   `overflow-x: hidden` on <html>/<body> SILENTLY DISABLES ALL OF THIS — measured in real Chrome:
   with `hidden` a gesture ending 80px from a snap point stayed put, with `clip` it snapped.
   bcfc-responsive-fixes.css already serves `clip` behind `@supports` for the same reason sticky
   needs it. If snapping ever stops working on a page, check that rule before touching anything here.

   Gated to >=961px and no-reduced-motion. Below that the bands stack far taller than the screen
   and snapping fights ordinary reading; under reduced motion, snap animation is exactly the kind of
   movement the setting asks us to stop.

   NOT the Sahel product-story snap (pages/Sahel.css). That one snaps invisible 1px targets inside a
   pinned stage to land a flick on a step, which is a different mechanism with different arithmetic
   — do not try to fold it into this component.
   ================================================================================================ */
.bcfc-snap {
  /* The fixed chrome to keep clear at the top of the scrollport. Both the scroll padding and the
       panel height read this, so they always cancel. Override per page if a page carries extra
       fixed chrome. */
  --bcfc-snap-inset: calc(var(--bcfc-header-height, 104px) + var(--bcfc-rail-height, 0px) + 16px);
}

@media (width > 960px) and (prefers-reduced-motion: no-preference) {
  /* Base: pull to a band edge, but never refuse to rest between two. */
  html:has(.bcfc-snap) {
    scroll-snap-type: y proximity;
    scroll-padding-top: calc(var(--bcfc-header-height, 104px) + var(--bcfc-rail-height, 0px) + 16px);
  }
  /* Mandatory ONLY when the bands have been sized to the viewport. Both classes required — see
       the modifier note above. */
  html:has(.bcfc-snap--panels.bcfc-snap--decisive) {
    scroll-snap-type: y mandatory;
  }
  /* `> section` plus an explicit opt-in hook, rather than `> *`: a bare `> *` would also
       snap-align the wrapper div a future band happens to arrive in, or a script tag's container. */
  .bcfc-snap > section,
  .bcfc-snap > [data-snap=band],
  .bcfc-snap > [data-snap=align],
  .bcfc-snap > .bcfc-snap-band,
  .bcfc-snap > .bcfc-snap-align {
    scroll-snap-align: start;
  }
  /* Note the absence of the `align` spellings — that value is target-only by definition. */
  /* An `align` band keeps its own height, so it must beat the `> section` sizing rule above when
       it happens to be a <section>. Same specificity, so ORDER is what decides — this stays below. */
  .bcfc-snap > [data-snap=align],
  .bcfc-snap > .bcfc-snap-align {
    min-height: 0;
    align-content: normal;
  }
  /* The escape hatch. Last, so it beats every rule above whatever the band's tag. */
  .bcfc-snap > [data-snap=skip],
  .bcfc-snap > .bcfc-snap-skip {
    scroll-snap-align: none;
    scroll-snap-stop: normal;
    min-height: 0;
    align-content: normal;
  }
}
@charset "UTF-8";
/* ==================================================================================================
   BCFC CAROUSEL — one behaviour for every horizontal scroll-snap rail on the site.

   Owner, 2026-10-13: every carousel gets < > arrows, swipes (touch AND mouse drag) and shows NO
   native scrollbar. Each page had grown its own thin scrollbar, its own arrows or neither.

   The behaviour lives in /js/bcfc-carousel.js, which finds every scroll-snap-x scroller on its own and
   adds the `.bcfc-carousel` class — nothing here is opt-in per page. Opt OUT with
   `data-bcfc-carousel="off"` (tab rows, section nav and chip filters are scrollers, not carousels).

   Specificity is doubled on purpose (`.bcfc-carousel.bcfc-carousel`): the page sheets set
   `scrollbar-width: thin` with one class, and this sheet's job is to win that argument everywhere.

   SHADOWS ARE NEVER CROPPED. A scroller clips whatever leaves its padding box, so a card shadow needs
   padding to live in. That padding belongs on each track (it is the track's own gutter) — this file
   owns the arrow chrome and the scrollbar only.
   ================================================================================================== */
.bcfc-carousel.bcfc-carousel {
  scrollbar-width: none;
  -ms-overflow-style: none;
  overscroll-behavior-x: contain;
}

.bcfc-carousel.bcfc-carousel::-webkit-scrollbar {
  width: 0;
  height: 0;
  display: none;
}

/* The mouse-drag state: snapping is switched off while the pointer holds the rail, otherwise the
   browser fights every pixel of the drag, and a dragged link must not select its text or image. */
.bcfc-carousel.bcfc-carousel.is-dragging {
  scroll-snap-type: none;
  scroll-behavior: auto;
  cursor: grabbing;
  user-select: none;
}

.bcfc-carousel.is-dragging a,
.bcfc-carousel.is-dragging img {
  pointer-events: none;
}

@media (hover: hover) and (pointer: fine) {
  .bcfc-carousel.bcfc-carousel {
    cursor: grab;
  }
}
.bcfc-carousel-host {
  position: relative;
}

/* UW-373: no prev/next arrows on any rail, any viewport. The buttons stay in the markup because
   bcfc-carousel.js queries them (removing them would be a null error); a rail still swipes, drags
   and scrolls with trackpad or keyboard. The phone arrow row and its `has-arrows` bottom margin went
   with them - that margin only added empty space under every rail once the arrows were hidden. */
.bcfc-carousel__arrow {
  display: none !important;
}
@charset "UTF-8";
/* ============================================================
   Form privacy notice — the PDPL notice at the point of collection.

   Rendered by Views/Partials/Shared/_FormPrivacyNotice.cshtml, which sits inside every form
   that submits personal data to BCFC. Compliance's review (ref 3, 2026-08-27) found the only
   notice on those forms was Google's reCAPTCHA attribution, which says nothing about BCFC as
   controller.

   Ink is read through the surface tokens WITH literal fallbacks, so the notice stays legible
   whether the form sits on a white card (most) or inside a dark panel (the enquiry bands):
   outside a surface the token is undefined and the literal applies; inside data-surface="dark"
   the same declaration computes to white with no extra rule.

   Logical properties throughout, so RTL mirrors with no second rule. This sheet is registered
   in BOTH the LTR and RTL main bundles in Program.cs - in only one, Arabic loses it entirely.
   ============================================================ */
.bcfc-form-privacy {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  /* A BOTTOM margin, not 0. The submit button is the next element in all 18 forms that render
       this notice (the shared _LeadCaptureForm puts them adjacent by construction), and with no
       bottom margin the two boxes touched - measured 0px between the notice and a 468px-wide
       primary button on /bcfc-group in both cultures, which reads as the notice belonging to the
       button rather than to the fields above it. */
  margin-block: 14px 18px;
  font-size: 0.84375rem;
  line-height: 1.6;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500, #667085));
}

/* ONE icon column for both notices, 18px wide, so the two paragraphs start on exactly the same
   x when they are stacked - which they are on every form that shows both. The glyphs are
   different sizes on purpose (16px legal notice, 15px attribution), and left to their own
   intrinsic widths that 1px difference shifted the captcha paragraph one pixel out from the
   privacy paragraph. Fixing the BOX rather than equalising the font sizes keeps the deliberate
   size step and makes the text edge independent of the glyph. */
.bcfc-form-privacy__icon,
.bcfc-form-captcha__icon {
  inline-size: 18px;
  /* inline-BLOCK, not inline-flex: these spans render a Material Icons ligature, and a flex
       container puts the glyph name in a flex item whose text run the font is not guaranteed to
       ligate - the failure mode is the WORD "verified_user" appearing in the notice. */
  display: inline-block;
  text-align: start;
}

.bcfc-form-privacy__icon {
  flex: none;
  font-size: 1rem;
  margin-block-start: 1px;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500, #667085));
}

.bcfc-form-privacy p {
  margin: 0;
  /* The site-wide `p { text-align: justify }` in site.css would produce rivers in a column
       this narrow, and a component sheet's own paragraph rule is the documented way to opt out.
       `start`, not `left`, so RTL follows. */
  text-align: start;
}

/* Both halves of the link pair are pinned. Recolouring the text without the underline - or
   relying on a bare global `a:hover` - is how these notices lose their affordance. */
.bcfc-form-privacy a {
  color: var(--bcfc-ink-link, var(--bcfc-blue, #004a98));
  text-decoration: underline;
  text-underline-offset: 2px;
  font-weight: 700;
}

.bcfc-form-privacy a:hover,
.bcfc-form-privacy a:focus-visible {
  color: var(--bcfc-ink-link-hover, var(--bcfc-blue-dark, #00346a));
  text-decoration: underline;
}

.bcfc-form-privacy a:focus-visible {
  outline: 2px solid var(--bcfc-ink-link, var(--bcfc-blue, #004a98));
  outline-offset: 2px;
  border-radius: 2px;
}

/* ============================================================
   Captcha attribution — Google's required reCAPTCHA notice.

   Rendered by Views/Partials/Shared/_FormCaptchaNotice.cshtml, stacked directly above the PDPL
   notice above. It lives in THIS sheet rather than a new one on purpose: the two notices are one
   visual unit at the foot of every form, they share every token, and a second file would be a
   second entry to keep in step across both bundles in Program.cs — the exact bookkeeping that
   loses Arabic a stylesheet.

   Same ink, icon size and link treatment as .bcfc-form-privacy, one step smaller, because this
   is attribution rather than a legal notice the reader has to act on.
   ============================================================ */
.bcfc-form-captcha {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 8px;
  margin-block: 12px 0;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500, #667085));
}

.bcfc-form-captcha__icon {
  flex: none;
  font-size: 1rem;
  margin-block-start: 1px;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500, #667085));
}

.bcfc-form-captcha p {
  margin: 0;
  /* Opting out of the site-wide `p { text-align: justify }` in site.css, for the same reason
       .bcfc-form-privacy does: a column this narrow justifies into rivers. `start`, not `left`,
       so RTL follows. */
  text-align: start;
}

/* The "security check could not load" line (UW-356), un-hidden by bcfc-forms-busy.js. Its own
   row under the notice; danger ink from the token, no literal. */
.bcfc-form-captcha .bcfc-form-captcha__error {
  flex-basis: 100%;
  font-weight: 600;
  color: var(--fb-danger, var(--bcfc-danger));
}

.bcfc-form-captcha .bcfc-form-captcha__error[hidden] {
  display: none;
}

/* Pinned exactly as the privacy notice's links are. Relying on the global `a:hover` is how a
   notice like this loses its affordance — and that global rule is (0,4,1) once its
   :not() chain is counted, so it out-ranks any single component class that tries to fix it
   afterwards. */
.bcfc-form-captcha a {
  color: var(--bcfc-ink-link, var(--bcfc-blue, #004a98));
  text-decoration: underline;
  text-underline-offset: 2px;
  font-weight: 600;
  /* Keeps the label and its external-link glyph on one line together. */
  white-space: nowrap;
}

.bcfc-form-captcha a:hover,
.bcfc-form-captcha a:focus-visible {
  color: var(--bcfc-ink-link-hover, var(--bcfc-blue-dark, #00346a));
  text-decoration: underline;
}

.bcfc-form-captcha a:focus-visible {
  outline: 2px solid var(--bcfc-ink-link, var(--bcfc-blue, #004a98));
  outline-offset: 2px;
  border-radius: 2px;
}

/* The divider between the two policy links. Muted below the links so it reads as punctuation
   and not as a third target. */
.bcfc-form-captcha__sep {
  margin-inline: 2px;
  opacity: 0.55;
}

/* ==============================================================================================
   THE ISLAMIC WINDOW. Colour only.

   Both notices resolve their link ink from --bcfc-ink-link, so this is a token remap and needs
   no new rule on the anchors themselves — the pinned pairs above keep their underline and
   weight, which is the whole point of their being pinned.

   SCOPED TO THE TWO NOTICES, NOT TO THE PAGE. Setting --bcfc-ink-link on html or body would
   recolour every link on an Islamic page from one line here, which is a site-wide change wearing
   a component's clothes; the header, breadcrumb and pattern links already have their own Islamic
   rules and would then be fighting this one. Scoping to .bcfc-form-privacy / .bcfc-form-captcha
   keeps the blast radius to the markup these two partials emit.

   Contrast: #113e35 on the notices' white/gray-50 surface is 10.5:1, and the hover #0c2d27 is
   darker still, so both sides of each pinned pair stay AA at the 12.5px these notices use. */
html[data-islamic=true] .bcfc-form-privacy,
html[data-islamic=true] .bcfc-form-captcha,
html[data-islamic-palette=true] .bcfc-form-privacy,
html[data-islamic-palette=true] .bcfc-form-captcha {
  --bcfc-ink-link: var(--bcfc-green-dark, #113e35);
  --bcfc-ink-link-hover: var(--bcfc-green-darker, #0c2d27);
}
@charset "UTF-8";
/* ==============================================================================================
   Lead-capture form chrome — the vocabulary Views/Partials/Shared/_LeadCaptureForm.cshtml OWNS.

   WHY THIS FILE EXISTS. That partial is THE one real lead form on this site (31 call sites), and
   five of the class names it emits are hardcoded in it rather than passed in by the caller:

       .contact-form__message  (+ --success / --error / -title / -body)   the AJAX result boxes
       .lf-sub                                                            the form subtitle
       .field-optional                                                    the "— optional" hint

   Every OTHER class it emits is a caller parameter (FormClass / FieldClass / PairClass /
   ConsentClass / SubmitClass), so each design styles its own. These five are not, so a caller has
   no way to point them at its own sheet — and eight page stylesheets each ended up re-implementing
   them under their own page scope:

       .cx18 .cx18-applyband__form .contact-form__message      pages/CardsV18.css
       :where(.ins-v2) .lead-form .lf-sub                      pages/InsuranceV2.css
       .html-landing-page .contact-form__message-body          pages/HtmlLanding.css
       .bcfc-svc .contact-form__message-body                   pages/ServicesRevamp.css
       .financing-landing .apply-form .field-optional          pages/FinancingLanding.css
       .bcfc-islamic-product__apply-form .contact-form__message  pages/IslamicProductDetail.css
       .fm-scope .contact-form__message                        pages/ComplaintsFormFinal.css
       .contact-form__message                                  pages/Contact.css  (unscoped)

   The ninth design never did. `bcfcReCallbackBlock` and `bcfcReLeadCaptureBlock` link
   pages/RealEstateV2.css, whose 332 rules are all prefixed `.re-v2` and which defines NONE of
   these five names — so on the real-estate pages a completed submission showed its confirmation as
   unstyled body text, and the "— optional" hint rendered at the label's own weight. Linking one of
   the sheets above cannot fix it: each of those chains needs a companion class from that page's own
   form markup, which these blocks do not emit. Verify with
   `node tools/block-previews/explain-class.mjs bcfcReCallbackBlock contact-form__message-body`.

   So the shared partial gets a shared sheet, exactly as _FormPrivacyNotice.cshtml has
   bcfc-form-privacy.css. Registered in BOTH the LTR and RTL main bundles in Program.cs — in only
   one, Arabic loses the whole sheet. Also listed in ALREADY_LOADED in
   tools/block-previews/derive-preview-css.mjs, because bundle-main is attached to every backoffice
   block preview and the derivation must know that.

   THE EIGHT PAGE COPIES ARE DELIBERATELY LEFT ALONE, and this file is written so it cannot disturb
   them, in two independent ways:

     1. The scope is `:where(form[data-lead-form])`, which contributes ZERO specificity. So every
        rule here is (0,1,0) — the weakest form a class rule can take. `.contact-form__message` in
        Contact.css is also (0,1,0) and everything else above is (0,2,0) or (0,3,0).
     2. bundle-main is linked in _RootLayout's <head>; page stylesheets land in the BODY through
        `@section Styles` (see Views/Layouts/_Layout.cshtml:7). So a page sheet is always LATER in
        document order and wins any tie on top of that.

   `[data-lead-form]` is the right boundary rather than a bare selector: the partial emits it
   unconditionally on its own <form> and nothing else on the site does, except
   Shared/_RawHtmlLeadFormRescue.cshtml which stamps it onto a rescued rawHtml form on purpose.
   A bare `.contact-form__message` here would also repaint the Contact page's and the complaints
   form's hand-written boxes, which are not this partial's markup.

   Logical properties throughout, so RTL mirrors with no second rule.
   ============================================================================================== */
/* ---- the AJAX result boxes -----------------------------------------------------------------
   Contact.ts (via `data-contact-form`) toggles the `hidden` CLASS on these two divs; the copy
   inside is optional, so a caller that passes no SuccessHeading/SuccessText still renders the
   empty boxes it always did. */
:where(form[data-lead-form]) .contact-form__message {
  border-radius: var(--bcfc-radius-md, 12px);
  padding: 14px 16px;
  margin-block-end: 18px;
  font-size: 0.96875rem;
  line-height: 1.55;
}

/* THE `.hidden` GUARD IS NOT BELT-AND-BRACES — it is why the success box stays hidden.
   The only `.hidden { display: none }` on this site is inside Tailwind's `@layer utilities`, and
   ANY unlayered author rule beats a layered one regardless of specificity. This project has
   already shipped a bug where `classList.add('hidden')` was a site-wide no-op for that reason.
   pages/HtmlLanding.css restates it for the same purpose; do not delete either copy. Restating it
   here is also what makes it safe for this sheet to ever declare `display` on these boxes. */
:where(form[data-lead-form]) .contact-form__message.hidden {
  display: none;
}

/* Tokenised rather than hand-mixed, and modelled on pages/HtmlLanding.css, which is the one
   existing copy already written entirely in tokens. There is no "success" role in the palette
   (--bcfc-success #65c3a0 is a chart/serie colour, --bcfc-green-dark is the Islamic window), so the
   confirmation reads as a neutral navy wash with a green hairline rather than inventing a green
   surface. Errors are the palette's one unambiguous role: --bcfc-danger. Both fills are light, and
   both selectors are already in the LIGHT list of the generated bcfc-surface-map.css, so
   --bcfc-ink* resolve to light-surface ink inside them with no extra rule. */
:where(form[data-lead-form]) .contact-form__message--success {
  background: var(--bcfc-navy-tint, rgba(7, 27, 51, 0.06));
  border: 1px solid var(--bcfc-green, #65c3a0);
  color: var(--bcfc-dark-ink, var(--bcfc-gray-800, #1d2939));
}

:where(form[data-lead-form]) .contact-form__message--error {
  background: var(--bcfc-danger-tint, rgba(216, 18, 34, 0.08));
  border: 1px solid var(--bcfc-danger, #d81222);
  color: var(--bcfc-dark-ink-red, var(--bcfc-danger-dark, #b00e1c));
}

/* A <strong> and a <span>, so both need to be blocks to stack. No colour: they inherit the box's,
   which is what keeps the pair legible on whichever of the two fills above is showing. */
:where(form[data-lead-form]) .contact-form__message-title {
  display: block;
  margin-block-end: 4px;
  font-weight: 800;
}

:where(form[data-lead-form]) .contact-form__message-body {
  display: block;
}

/* ---- the form subtitle ----------------------------------------------------------------------
   Rendered only when the caller passes Subtitle. Sits directly under the form's <h3>, so the
   margin closes up to the heading and opens to the first field. */
:where(form[data-lead-form]) .lf-sub {
  margin: 0 0 18px;
  font-size: 0.90625rem;
  line-height: 1.55;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500, #667085));
  text-wrap: pretty;
}

/* ---- the "— optional" hint ------------------------------------------------------------------
   Inside the field's own <label>, so it inherits that design's label type. Only the two properties
   all three tokenised page copies agree on are set: step the weight back down and mute the ink, so
   the hint reads as secondary to the question. Nothing about case or tracking — CardsV18 uppercases
   and tracks its labels and resets both itself, and doing it here would reach into designs whose
   labels are sentence case already. */
:where(form[data-lead-form]) .field-optional {
  font-weight: 400;
  color: var(--bcfc-ink-muted, var(--bcfc-gray-500, #667085));
}
@charset "UTF-8";
/* ==========================================================================================
   EDITORIAL OFFER CARD — ONE HEIGHT, EVERYWHERE
   ==========================================================================================
   Views/Partials/Loyalty/_OfferCard.cshtml in its "editorial" variant is rendered from four
   places (the /imtiaz-offers listing, the IMTIAZ card detail page's offers carousel, the
   /cards offers strip and the loyalty programme page) and each of those hosts styles the same
   class names in its OWN sheet — LoyaltyOffers.cshtml injects them into <head>, the others come
   from pages/CardsV18.css, pages/ImtiazCardDetail.css and pages/Home.css. So "make the cards the
   same height" could not be fixed in any one of them without leaving the other three uneven.
   This sheet is registered in bundle-main AND bundle-main-rtl for the same reason
   bcfc-lead-form.css is: a shared partial needs a shared sheet, and in only one bundle /ar
   loses it.

   WHY A GRID DOES NOT ALREADY DO THIS. The listing is a CSS grid, so rows already stretch to
   their own tallest card — but each ROW stretches independently, so row 1 came out 461px and
   rows 2 and 3 came out 480px (measured on beta 2026-09-21, /ar/imtiaz-offers/). Equal heights
   across ALL cards means reserving the space every variable part can take, which is what the
   min-heights below do. Each one is a LINE COUNT, not a pixel guess: `lh` is the element's own
   line-height, so the reserve follows the type scale through every breakpoint instead of going
   stale the next time a font-size changes. The `em` line above each is the fallback for an
   engine without `lh` — min-height only ever RESERVES space, never clips, so a fallback that
   under-reserves degrades to today's behaviour rather than truncating an offer.

   The four measured sources of variance, and what answers each:
     1. the title (the merchant name since 2026-10-08) is nearly always 1 line; a long name
        still wraps to 2 (-webkit-line-clamp: 2) and only that card grows a line       -> 1 line
     2. the description is 1 or 2 lines                                               -> 2 lines
     3. the date block carries "from" AND "valid until", or only one of them         -> 2 lines
   The merchant eyebrow that used to sit above the title is gone: the title IS the merchant name
   (marketing ticket, 2026-10-08), and a 2-line reserve under a 1-line name left a blank line between
   the name and the description. _OfferCard renders the description as an EMPTY element in the
   editorial variant rather than omitting it, so 2 has a box to reserve against.

   Scoped to .bcfc-loyalty-card--editorial throughout. The home page strip renders the same
   partial in its DEFAULT variant, which never had an eyebrow and is not part of this ask.
   ========================================================================================== */
/* The card is the grid/flex item; the wrapper has to fill it or the footer's margin-top:auto
   has nothing to push against. Both are already set by three of the four host sheets — stated
   here so the fourth cannot be the one that quietly breaks the alignment. */
.bcfc-loyalty-card--editorial .bcfc-loyalty-card__link-wrapper {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.bcfc-loyalty-card--editorial .bcfc-loyalty-card__body {
  flex: 1 1 auto;
}

.bcfc-loyalty-card--editorial .bcfc-loyalty-card__title {
  min-height: 1.3em;
  min-height: 1lh;
}

.bcfc-loyalty-card--editorial .bcfc-loyalty-card__desc {
  min-height: 3em;
  min-height: 2lh;
}

/* +2px is .bcfc-loyalty-card__dates' own row gap, which sits between the two date lines and so
   is part of the two-line reserve. */
.bcfc-loyalty-card--editorial .bcfc-loyalty-card__dates {
  min-height: calc(3em + 2px);
  min-height: calc(2lh + 2px);
}

/* Keeps the divider and the "View details" link on the bottom edge once the reserves above have
   made every card the same height. */
.bcfc-loyalty-card--editorial .bcfc-loyalty-card__footer {
  margin-top: auto;
}

/* ------------------------------------------------------------------------------------------
   RTL: THE "VIEW DETAILS" ARROW IS A DIRECTION, NOT AN ORNAMENT
   ------------------------------------------------------------------------------------------
   _OfferCard.cshtml emits the label then the arrow, so the flex row already puts the arrow at
   the INLINE END in both directions — measured on beta 2026-09-21 on /ar/, the <svg> sits 14px
   (the padding) from the LEFT edge of the pill in all twelve home-strip cards, i.e. after the
   Arabic label. What was wrong is the glyph itself: its path points right, so on /ar it pointed
   back INTO the label instead of onward, which reads as the arrow being before the text.

   Not scoped to --editorial, unlike the height reserves above: the home strip renders the
   DEFAULT variant and has the same arrow. The two hover nudges that exist for this element
   (pages/CardsV18.css, pages/ImtiazCardDetail.css) restate this scaleX because they set
   `transform` themselves and would otherwise drop the flip for as long as the card is hovered.
   ------------------------------------------------------------------------------------------ */
[dir=rtl] .bcfc-loyalty-card__link-arrow {
  transform: scaleX(-1);
}
@charset "UTF-8";
/* ── CONTENT AUDIO TOOLBAR: SHARE / TEXT SIZE / LISTEN ────────────────────────────────────────
   One inline row above a page's body — share, an "Aa" reader text-size control, and a Listen
   button that expands the audio panel.
   Markup:    Views/Partials/Shared/_ContentAudioToolbar.cshtml
   Behaviour: wwwroot/js/pages/MediaCentreArticle.js
   Pipeline:  Services/ContentAudio/ContentAudioService.cs

   SHARED, not page-scoped, and that is the whole point of this file. It lived in
   pages/MediaCentre.css while the feature was news-only, and every colour read a --bcfc-media-*
   token scoped to .bcfc-media-article — so the moment the toolbar was placed on any other page it
   rendered with no colours at all. Each colour now reads the media token FIRST and falls back to
   the global one, so a media-centre article looks exactly as it did and every other page inherits
   the site palette.

   No :root block and no raw hex: the CSS estate gate fails a new file that writes :root tokens,
   and every value here resolves through tokens that already exist. */
.bcfc-article-tools {
  display: flex;
  align-items: center;
  gap: 4px;
  margin: 0 0 18px;
  padding: 6px 4px;
  border-block: 1px solid var(--bcfc-media-line, var(--bcfc-line));
}

/* The row is a horizontal rule with controls on it, so it has no background of its own and the
   buttons carry the whole affordance. */
.bcfc-article-tools__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-width: 40px;
  min-height: 40px;
  padding: 0 10px;
  border: 0;
  border-radius: 10px;
  background: none;
  color: var(--bcfc-ink, var(--bcfc-media-heading, var(--bcfc-ink-strong, var(--bcfc-ink))));
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.90625rem;
  font-weight: 700;
  cursor: pointer;
  transition: background 0.2s, color 0.2s;
}

.bcfc-article-tools__btn:hover {
  background: var(--bcfc-surface-sunken);
  color: var(--bcfc-dark-ink-brand, var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink))));
}

/* Pressed state for the two toggles, so the open panel and its button agree. aria-expanded is the
   single source of truth for that — styling the attribute rather than a parallel class means the
   two cannot drift apart. */
.bcfc-article-tools__btn[aria-expanded=true] {
  background: var(--bcfc-surface-sunken);
  color: var(--bcfc-dark-ink-brand, var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink))));
}

.bcfc-article-tools__btn .material-icons-outlined {
  font-size: 1.3125rem;
}

/* "Aa" is set in the article font at two sizes to read as a type-size control rather than as the
   word "Aa". Not an icon, because no Material glyph says "text size" unambiguously. */
.bcfc-article-tools__aa {
  font-family: var(--bcfc-media-font, inherit);
  font-size: 1.125rem;
  font-weight: 700;
  line-height: 1;
}

.bcfc-article-tools__aa::after {
  content: "a";
  font-size: 0.8125rem;
  font-weight: 700;
}

.bcfc-article-tools__rule {
  width: 1px;
  height: 22px;
  margin: 0 6px;
  background: var(--bcfc-line, var(--bcfc-media-line, var(--bcfc-line)));
}

.bcfc-article-tools__meta {
  color: var(--bcfc-dark-ink-muted, var(--bcfc-media-muted, var(--bcfc-ink-muted)));
  font-weight: 400;
}

/* The duration is hidden from assistive tech in the markup and re-announced on the button's own
   label, so a screen reader hears "Listen to this article, 2 minutes" once rather than twice. */
.bcfc-article-tools__listen-label {
  white-space: nowrap;
}

/* ---------- Text-size popover ---------- */
.bcfc-article-textsize {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 18px;
  padding: 12px 16px;
  border: 1px solid var(--bcfc-media-line, var(--bcfc-line));
  border-radius: 12px;
  background: var(--bcfc-surface-raised);
  box-shadow: var(--bcfc-media-shadow, none);
}

.bcfc-article-textsize__label {
  margin: 0;
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.8125rem;
  font-weight: 700;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-media-muted, var(--bcfc-ink-muted)));
}

.bcfc-article-textsize__step {
  min-width: 38px;
  min-height: 34px;
  border: 1px solid var(--bcfc-media-line, var(--bcfc-line));
  border-radius: 8px;
  background: var(--bcfc-surface-raised);
  color: var(--bcfc-ink, var(--bcfc-media-heading, var(--bcfc-ink-strong, var(--bcfc-ink))));
  font-family: var(--bcfc-media-font, inherit);
  font-weight: 700;
  cursor: pointer;
  transition: border-color 0.2s, color 0.2s;
}

.bcfc-article-textsize__step:hover:not(:disabled) {
  border-color: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  color: var(--bcfc-dark-ink-brand, var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink))));
}

/* A step button at the end of its range is disabled rather than hidden, so the row does not
   reflow under the pointer as the reader clicks through the sizes. */
.bcfc-article-textsize__step:disabled {
  opacity: 0.45;
  cursor: default;
}

.bcfc-article-textsize__value {
  min-width: 4ch;
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.8125rem;
  font-weight: 700;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink))));
  text-align: center;
}

/* ---------- Audio panel ---------- */
/* UW-405: an inline panel that is part of the layout. It takes the full row (basis 100%) wherever
   the toolbar's parent is a flex row (.bcfc-news-bar), so it opens BELOW the share / Aa / Listen
   controls instead of squeezing in beside them as a floating card. Every dimension is a logical
   property or rem, so /ar mirrors with no second rule. */
.bcfc-article-audio {
  flex: 1 1 100%;
  min-inline-size: 0;
  margin: 0 0 24px;
  padding: 0.75rem 1.25rem 1.25rem;
  border: 1px solid var(--bcfc-media-line, var(--bcfc-line));
  border-radius: 14px;
  background: var(--bcfc-surface-raised);
  box-shadow: var(--bcfc-media-shadow, none);
}

.bcfc-article-audio__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-block-end: 0.75rem;
  padding-block-end: 0.25rem;
  border-block-end: 2px solid var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
}

.bcfc-article-audio__title {
  margin: 0;
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.9375rem;
  font-weight: 800;
  color: var(--bcfc-dark-ink-brand, var(--bcfc-media-heading, var(--bcfc-ink-strong, var(--bcfc-ink))));
}

/* The element carries the source and the clock only; the transport is drawn by the markup around
   it, so it never shows. */
.bcfc-article-audio__player {
  display: none;
}

.bcfc-article-audio__close,
.bcfc-article-audio__play,
.bcfc-article-audio__speed {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  cursor: pointer;
  font-family: var(--bcfc-media-font, inherit);
  transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.bcfc-article-audio__close {
  inline-size: 2.75rem;
  block-size: 2.75rem;
  border-radius: 50%;
  background: none;
  color: var(--bcfc-media-muted, var(--bcfc-ink-muted));
}

.bcfc-article-audio__close:hover {
  background: var(--bcfc-surface-sunken);
  color: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
}

.bcfc-article-audio__transport {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

/* 3.25rem = 52px, comfortably over the 44px touch target. Solid brand fill with white glyph. */
.bcfc-article-audio__play {
  flex: none;
  inline-size: 3.25rem;
  block-size: 3.25rem;
  border-radius: 50%;
  background: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  color: var(--bcfc-white);
}

.bcfc-article-audio__play:hover {
  background: var(--bcfc-dark-ink-brand, var(--bcfc-media-heading, var(--bcfc-ink)));
  color: var(--bcfc-white);
}

.bcfc-article-audio__play .material-icons-outlined {
  font-size: 2rem;
}

/* Digits are always left-to-right, so "1:05" never reads "5:01" on the Arabic page. */
.bcfc-article-audio__time {
  flex: none;
  min-inline-size: 3.25ch;
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.875rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--bcfc-media-muted, var(--bcfc-ink-muted));
  direction: ltr;
  unicode-bidi: isolate;
  text-align: center;
}

/* The bar. The visible track is a span filled from the INLINE-START edge, so it grows right to
   left on /ar and left to right on /en; the transparent range input above it takes the pointer,
   touch and keyboard and is 2.75rem tall so the whole strip is a comfortable target. */
.bcfc-article-audio__bar {
  position: relative;
  flex: 1 1 auto;
  min-inline-size: 0;
  block-size: 2.75rem;
  display: flex;
  align-items: center;
}

.bcfc-article-audio__track {
  position: absolute;
  inset-inline: 0;
  inset-block-start: 50%;
  block-size: 0.5rem;
  translate: 0 -50%;
  border-radius: 999px;
  background: var(--bcfc-surface-sunken);
  box-shadow: inset 0 0 0 1px var(--bcfc-media-line, var(--bcfc-line));
  overflow: hidden;
}

.bcfc-article-audio__fill {
  display: block;
  block-size: 100%;
  inline-size: calc(var(--bcfc-audio-progress, 0) * 1%);
  border-radius: inherit;
  background: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
}

.bcfc-article-audio__seek {
  position: absolute;
  inset: 0;
  inline-size: 100%;
  block-size: 100%;
  margin: 0;
  opacity: 0;
  cursor: pointer;
}

.bcfc-article-audio__bar:focus-within {
  outline: 2px solid var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  outline-offset: 2px;
  border-radius: 8px;
}

.bcfc-article-audio__speeds {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-block-start: 0.75rem;
}

.bcfc-article-audio__speeds-label {
  margin-inline-end: 0.25rem;
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.8125rem;
  font-weight: 700;
  color: var(--bcfc-media-muted, var(--bcfc-ink-muted));
  white-space: nowrap;
}

.bcfc-article-audio__speed {
  min-inline-size: 3rem;
  min-block-size: 2.75rem;
  padding: 0 0.75rem;
  border: 1px solid var(--bcfc-media-line, var(--bcfc-line));
  border-radius: 999px;
  background: var(--bcfc-surface-raised);
  color: var(--bcfc-ink, var(--bcfc-media-heading, var(--bcfc-ink-strong)));
  font-size: 0.875rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  /* "1.5×" is a number and a sign, not Arabic text: keep it left-to-right so /ar does not
     show "×1.5". */
  direction: ltr;
  unicode-bidi: isolate;
}

.bcfc-article-audio__speed:hover {
  border-color: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  color: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
}

/* aria-pressed is the single source of truth for the chosen speed, like aria-expanded above. */
.bcfc-article-audio__speed[aria-pressed=true] {
  border-color: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  background: var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  color: var(--bcfc-white);
}

.bcfc-article-audio__close:focus-visible,
.bcfc-article-audio__play:focus-visible,
.bcfc-article-audio__speed:focus-visible {
  outline: 2px solid var(--bcfc-media-blue, var(--bcfc-ink-link, var(--bcfc-ink)));
  outline-offset: 2px;
}

.bcfc-article-audio__hint {
  margin: 10px 0 0;
  font-family: var(--bcfc-media-font, inherit);
  font-size: 0.8125rem;
  color: var(--bcfc-dark-ink-muted, var(--bcfc-media-muted, var(--bcfc-ink-muted)));
}

@media (max-width: 768px) {
  /* The label is the first thing to go at phone width: the headphones icon already carries the
       meaning, and the duration is the part a reader is actually deciding on. */
  .bcfc-article-tools__listen-label {
    display: none;
  }
  .bcfc-article-tools {
    gap: 2px;
  }
  .bcfc-article-textsize {
    flex-wrap: wrap;
  }
  .bcfc-article-audio {
    padding-inline: 1rem;
  }
  /* Phone: play, times and bar stay on one line (the bar takes what is left, about 150px at 390),
     and the speeds share one row under their label, each growing to fill it. */
  .bcfc-article-audio__transport {
    gap: 0.5rem;
  }
  .bcfc-article-audio__speeds-label {
    flex-basis: 100%;
  }
  .bcfc-article-audio__speed {
    flex: 1 1 0;
    min-inline-size: 0;
    padding-inline: 0.25rem;
  }
}
/* ---------- Reader text size steps ----------
   Set by wwwroot/js/pages/MediaCentreArticle.js as data-article-text on .bcfc-media-article, and
   consumed by the calc() font-size rules on .bcfc-media-article__body further up this file.

   FOUR STEPS, AND LEVEL 0 HAS NO RULE ON PURPOSE. The authored size is the absence of the
   attribute, so an article nobody has touched carries no marker and computes exactly as it always
   did — which is what makes this safe to add to a live template.

   The top step is 1.4, not higher: past that the 1200px article column holds too few words per
   line to read comfortably, and a reader who needs more than 140% is better served by the
   browser's own page zoom, which scales the images and the layout with the text. */
[data-article-text="1"] {
  --bcfc-article-scale: 1.12;
}

[data-article-text="2"] {
  --bcfc-article-scale: 1.25;
}

[data-article-text="3"] {
  --bcfc-article-scale: 1.4;
}
@charset "UTF-8";
/* ============================================================================
   TITLE CASE FOR BUTTON-SHAPED LABELS
   ----------------------------------------------------------------------------
   Buttons, CTAs, tabs, pills, chips and pagination controls render Title Case.
   Prose does not. This sheet is the ONLY place that decides that, so a new
   button gets it for free and no component has to remember.

   WHY THIS IS NOT `button, .btn { text-transform: capitalize }`
   -------------------------------------------------------------
   Measured against all 284 EN pages on UAT (2026-08-31). A blanket rule on the
   `button` element or on `[class*="btn"]` breaks three things that are really on
   this site, and each one was found by rendering, not by reading:

   1. 89 FAQ / accordion questions are `<button>`s. Sentence-case prose ending in
      "?" — "How do I earn points?" would render "How Do I Earn Points?". This is
      the same class of bug that pages/CardsV18.css:132 and
      bcfc-inline-partials.css:3450 already document for headings.
   2. The header Sahel Login button splits its label into ONE `<span>` PER LETTER
      for the staggered reveal (`--i`/`--r` custom properties). Every letter is
      then the first letter of its own text run, so `capitalize` renders
      "SAHEL LOGIN". That button is on all 284 pages.
   3. Card-shaped `<a>`s and band containers whose class merely CONTAINS a button
      word — `ir-legal-cta__title`, `cardx-ctable__rowlabel` (yes, "ctable"
      contains "cta"), `btn-row`, `btn-group`. `text-transform` inherits, so
      matching a container title-cases everything inside it.

   So the selector is INCLUSIVE ON ELEMENT + ROLE and only falls back to class
   matching for `<a>`, where it must. Restricting the class-matched arm to `a`
   is what makes (3) unexpressible: a band container is a `div`, never an anchor.

   Coverage, measured: 249 of the 256 distinct visible button labels on the EN
   site, 4109 element occurrences, with ZERO prose and ZERO letter-split false
   positives. The 7 uncovered are all `.bcfc-ai__chip` — AI-assistant suggestion
   prompts ("I want a car loan", "How does Murabaha work?"), which are
   conversational sentences, not labels, and are excluded on purpose.

   HOW ACCORDIONS ARE EXCLUDED
   ---------------------------
   By `[aria-expanded]`, not by class name. Every accordion trigger on the site
   carries it, and it is the one signal that means "this is a disclosure, its
   text is prose". Class-name guessing was tried and is worse: `[class*="faq"]`
   also matches `.faq-category-btn` and `.faq-page__btn`, which ARE buttons, and
   `[class*="-head"]` matches every `bcfc-header__*` class through "bcfc-header".

   SPECIFICITY IS DELIBERATELY ZERO
   --------------------------------
   The whole selector is wrapped in `:where()`, including the `:not()` argument
   (a bare `:not(.foo)` would leak .foo's specificity and make this 0,1,0). At
   0,0,0 the rule means "title case where nothing else has an opinion":
     - the ~345 deliberate `text-transform: uppercase` buttons keep uppercase;
     - any `text-transform: none` opt-out already in a component keeps winning;
     - no component ever has to fight this sheet, and no `!important` is needed.
   Verified there are no bare-element `text-transform` rules in first-party CSS
   (0 found), which is what would otherwise silently beat a 0,0,0 rule.

   NOT COVERED, ON PURPOSE
   -----------------------
   Headings, eyebrows/kickers and body copy — those are the editor's sentence
   case and title-casing them is the documented bug above. `<label>` is also out:
   the live corpus mixes short field labels ("Full name") with sentence-case
   questions ("Anything we should know? - optional", "What can we help with? -
   optional") and a placeholder-style label used on 284 pages ("Ask me
   anything..."), and CSS cannot tell them apart.

   ESCAPE HATCH
   ------------
   Add `bcfc-tc-off` to any control whose label must keep its authored case —
   a brand lockup, a legal string, an intentionally lowercase wordmark.

   NOTE ON WHAT CSS CAN AND CANNOT DO
   ----------------------------------
   `capitalize` capitalises EVERY word. Real title case lowercases short
   articles and prepositions, so 48 of the 250 English labels render slightly
   over-capitalised ("Apply For This Card", not "Apply for This Card"). CSS has
   no way to skip minor words; only a render-side title-caser could. Acronyms
   and camelCase brand names are safe either way — `capitalize` only touches a
   word's first letter, so BCFC, IMTIAZ, TISCO, LinkedIn and WhatsApp are
   unchanged, and the corpus contains zero lowercase-first-then-uppercase words
   (eKYC, iOS) that would be mangled.
   ============================================================================ */
:where(button,
input[type=submit],
input[type=button],
input[type=reset],
[role=button],
[role=tab],
a[class*=btn],
a[class*=button],
a[class~=cta],
a[class*=__cta],
a[class*=-cta],
a[class*=tab],
a[class*=pill],
a[class*=chip]):not(:where([aria-expanded],
[data-bs-toggle=collapse],
.blm-row,
.sig__card,
.bcfc-ai__chip,
.bcfc-header__login-btn,
.bcfc-header__login-text,
.bcfc-tc-off)) {
  text-transform: capitalize;
}

/* Defence in depth for the letter-split label. The exclusion above already
   spares it, but this hazard is on every page and the markup (a span per
   letter) is not obviously dangerous to whoever next edits the header, so the
   protection is stated where they will see it rather than only as a :not(). */
.bcfc-header__login-text,
.bcfc-header__login-text > span {
  text-transform: none;
}
@charset "UTF-8";
/* ============================================================
   External-link affordance — MANDATORY, and driven from CSS alone.

   Every link that leaves bcfc.bh renders the "box with an arrow leaving it" glyph after its
   label. There is no JavaScript and no per-link markup requirement: the rule matches on the
   `href` itself, so a link an editor pastes into the RTE next month is covered the moment it
   is published. Marketing asked for the gov.bh treatment; this is that treatment on our
   tokens.

   WHY A MASK AND NOT AN ICON FONT. The site loads Material Symbols, and `content: "open_in_new"`
   would be the short way to do this - but it is a LIGATURE font, so during the webfont's load
   window the pseudo-element renders the literal words "open in new" next to every external
   link. A masked SVG has no load window, and `background-color: currentColor` makes the glyph
   take the link's own colour, so it stays legible on navy bands and inside a dark surface
   without a second rule.

   WHY `display: inline-block` IS LOAD-BEARING. A parent's text-decoration is PROPAGATED to
   inline descendants and cannot be switched off by them - `text-decoration: none` on the
   pseudo-element does nothing, which is why the gov sheet needed `!important` and still drew a
   line under the glyph. Atomic inline-level boxes are excluded from that propagation by spec,
   so making the pseudo-element an inline-block is what actually keeps the underline off it.

   HOW "EXTERNAL" IS DECIDED. Only absolute http(s) and protocol-relative hrefs can be
   external, so the match starts there; `mailto:`, `tel:`, `#anchor`, `/path` and `?query` never
   match in the first place. Our own hosts are then excluded by substring. That is deliberately
   a substring and not an origin parse: CSS cannot parse a URL, so
   `https://example.com/?ref=bcfc.bh` would miss the icon. For a decorative affordance that is
   the right trade - the alternative is a JS pass that arrives after first paint and makes the
   glyph pop in. Where it matters, put `bcfc-is-external` on the anchor and the icon is
   unconditional.

   Registered in BOTH the LTR and the RTL main bundles in Program.cs. In only one, Arabic loses
   the icon entirely - the same trap bcfc-form-privacy.css records.
   ============================================================ */
/* On the anchor, not :root: only the ::after below reads it, and it inherits from its anchor. */
:where(a) {
  /* Feather's external-link, stroked. The stroke colour inside the data URI is irrelevant -
       a mask reads only the alpha channel - so it must simply be opaque. */
  --bcfc-icon-external: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h5.5'/%3E%3Cpath d='M15 3h6v6'/%3E%3Cpath d='M10 14 20.5 3.5'/%3E%3C/svg%3E");
}

a.bcfc-is-external::after,
a[href^="http://"]:not([href*="bcfc.bh"]):not([href*="bahraincredit.com.bh"]):not([href*=localhost])::after,
a[href^="https://"]:not([href*="bcfc.bh"]):not([href*="bahraincredit.com.bh"]):not([href*=localhost])::after,
a[href^="//"]:not([href*="bcfc.bh"]):not([href*="bahraincredit.com.bh"]):not([href*=localhost])::after {
  content: "";
  /* Atomic inline-level box: this is what keeps the ancestor's underline off the glyph. */
  display: inline-block;
  inline-size: 0.72em;
  block-size: 0.72em;
  /* Logical, so RTL needs no second margin rule. */
  margin-inline-start: 0.3em;
  /* Lifts the box off the baseline onto the cap height of the label beside it. */
  vertical-align: 0.02em;
  background-color: currentColor;
  -webkit-mask: var(--bcfc-icon-external) no-repeat center/contain;
  mask: var(--bcfc-icon-external) no-repeat center/contain;
  /* The glyph is decoration for a fact the anchor states in its own aria-label; it must never
       reach the accessibility tree as content. */
  speak: never;
  /* Inherited transitions on the anchor would animate the mask box on hover. */
  transition: none;
}

/* The arrow leaves toward the reading direction's far corner, so it mirrors in Arabic. Without
   this it points into the text it belongs to. */
[dir=rtl] a.bcfc-is-external::after,
[dir=rtl] a[href^="http://"]:not([href*="bcfc.bh"]):not([href*="bahraincredit.com.bh"]):not([href*=localhost])::after,
[dir=rtl] a[href^="https://"]:not([href*="bcfc.bh"]):not([href*="bahraincredit.com.bh"]):not([href*=localhost])::after,
[dir=rtl] a[href^="//"]:not([href*="bcfc.bh"]):not([href*="bahraincredit.com.bh"]):not([href*=localhost])::after {
  transform: scaleX(-1);
}

/* ------------------------------------------------------------
   SUPPRESSION

   Kept in rules of their own, AFTER the rule above and deliberately not folded into its
   `:not()` chain. `:has()` in the middle of that chain would make the whole selector invalid
   in any engine that does not support it, and the icon would then appear NOWHERE - a mandatory
   affordance failing silently and globally. Split like this, an engine without `:has()` simply
   drops the media rule and over-draws a handful of icons instead.

   EVERY ONE OF THEM NEEDS `!important`, and that is not laziness. The match rule above carries
   three `:not()` attribute tests, so it computes to (0,4,1); a suppression written as
   `a[href$=".pdf"]::after` is (0,1,1) and a `:has()` one is around (0,0,3). Both LOSE to it and
   the icon keeps drawing - measured, not assumed: before this the app-store badges and every
   .pdf link still had a glyph. Source order does not help when specificity differs.
   ------------------------------------------------------------ */
/* The explicit opt-out. Use it where the icon cannot work rather than stripping the class chain
   or hardcoding a `content: none` next to the component. */
a.bcfc-no-external-icon::after {
  content: none !important;
}

/* A link whose label IS an image or an icon glyph - the footer app-store badges, the social
   row, a logo, a merchant mark. There is no text for the icon to follow, so it lands on top of
   artwork. */
a:has(> img):not(:has(> :is(span, strong, em, p, h1, h2, h3, h4, h5, h6)))::after,
a:has(> svg):not(:has(> :is(span, strong, em, p, h1, h2, h3, h4, h5, h6)))::after,
a:has(> picture)::after,
a:has(> :is(div, span, figure, picture) > :is(img, picture, svg, video)):not(:has(:is(p, strong, em, h1, h2, h3, h4, h5, h6)))::after,
a:has(> :is(i, span)[class*=material-icons]:only-child)::after,
a:has(> :is(i, span)[class*=material-symbols]:only-child)::after {
  content: none !important;
}

/* A LINK THAT ALREADY DRAWS ITS OWN open_in_new — added 2026-09-03. Ours lands as the SECOND
   IDENTICAL glyph 30px from the first. Live on /en/loyalty-programme/airport-travel-passes/: the
   "Mastercard Travel Pass App" row ends in `<span class="dl-go">open_in_new</span>`, and this sheet
   painted a blue copy of the same icon right beside it. Confirmed in a 2x screenshot, not inferred.

   That row lives in the inline <style> of a rawHtml landing node, and rawHtml nodes are a red line
   here — so the fix has to be a rule in THIS file, keyed on the markup the node already emits.

   NAMED, NOT GENERALISED, and that choice is measured. The obvious generalisation is "any anchor
   whose last child is an icon", i.e. `:last-child` instead of the `:only-child` rule above. Audited
   across all 291 sitemap URLs first: that would also catch SEVEN Sahel hand-off buttons
   (`.p2t__cta--sahel` x4, `.ppc__cta` x3 — "Redeem In The Sahel By BCFC App") whose trailing mark is
   a plain forward ARROW, not an external-link glyph. Screenshotted one: arrow + leaving-the-site
   mark reads fine and the two say DIFFERENT things, so suppressing there would delete a mandatory
   affordance to fix a duplication that does not exist. An arrow is not an open_in_new.

   Same reason `.blm-btn` on /en/about-bcfc/branches/ is untouched: its icon LEADS ("◇ Directions ↗")
   and it was checked in a screenshot too, because the metric alone could not tell me. */
a:has(> .dl-go)::after {
  content: none !important;
}

/* A download is not a navigation. `[download]` saves a file, and bcfc-pdf-viewer.js intercepts
   both `[data-pdf-url]` triggers and any `<a href="….pdf">` into an in-page modal - so those
   links never leave the site at all and the leaving-the-site glyph would be a lie. */
a[download]::after,
a[data-pdf-url]::after,
a[href$=".pdf"]::after,
a[href*=".pdf?"]::after,
a[href*=".pdf#"]::after {
  content: none !important;
}

/* A THIRD-PARTY EMBED, whose internals we do not author and cannot lay out. Every Elfsight widget
   on the site renders through ~/Views/Partials/Shared/_ElfsightFeed.cshtml into a
   `<div class="elfsight-app-{guid}">`, and platform.js builds the whole widget INSIDE that div in
   light DOM - no iframe and no shadow root - so this sheet reaches it and was drawing the glyph on
   links the widget positions itself.

   Measured on /en/cards/ (IMTIAZ Instagram feed), all three cases live at once:
     - the profile name "IMTIAZ Card" and the handle "@imtiazcard" are 94px-wide anchors, so the
       0.72em box plus its 0.3em margin did not fit and WRAPPED - each one rendered 44px and 34px
       tall, i.e. two lines, with a bare icon sitting alone on the second line under the text. That
       is the broken, ragged profile header, and no amount of centring fixes it while the glyph is
       there.
     - `.eapps-instagram-feed-posts-item-link` (every post tile) already carries the widget's own
       `::after` with `display: block`, and our `content: ""` switched that pseudo-element ON -
       painting a currentColor masked box over the photograph.

   Suppressed rather than reshaped because the affordance is not lost: the widget writes
   `target="_blank" rel="noopener noreferrer nofollow" aria-description="opens in a new tab"` on
   these anchors itself, so the fact still reaches assistive technology - which is where the base
   rule's own comment says the fact belongs. The band is visibly an Instagram/LinkedIn feed, so a
   sighted visitor is not being misled about leaving the site either.

   Scoped to `elfsight-app-` and not to `eapps-`: the former is OUR class, emitted by our own
   partial, so it cannot be renamed by a vendor bundle update. The widget root carries both
   (measured: `elfsight-app-<guid> eapps-instagram-feed es-widget`) and every eapps- node is a
   descendant of it, so one selector covers the feed, the header and the tiles.

   `!important` for the reason the section header gives: this computes to (0,1,2) against the match
   rule's (0,4,1) and would otherwise lose outright. */
[class^=elfsight-app-] a::after {
  content: none !important;
}
@charset "UTF-8";
/* ============================================================================
  bcfc-comp — the comp primitives layer
  ============================================================================
  Every approved design comp in the 2026-08-04 pack shares one vocabulary:
  .wrap, .eyebrow, .sec-head, .hero, .btn / .btn-primary / .btn-ghost, .rev.
  `.hero` is byte-identical across Real Estate Services, Personal_Services_Landing
  and IMTIAZ_Loyalty_Program; `.wrap` and `.btn` agree across four comps.

  Until this file existed, every conversion re-implemented all of it inside its own
  page stylesheet — which is why there are 86 files under wwwroot/css/pages/, and why
  pages/Sahel.css ships bare global `.btn` / `.wrap` rules that then apply to any
  shared partial rendered inside that page.

  HOW TO USE
  ----------
  Page view wraps its content in `.bcfc-comp` plus a page scope class:

      <div class="bcfc-comp imtiaz-elite" dir="@(isArabic ? "rtl" : "ltr")">

  Then DELETE the comp's own copies of the selectors below from the page stylesheet,
  and keep only what is genuinely unique to that page.

  WHY EVERYTHING IS SCOPED UNDER .bcfc-comp
  -----------------------------------------
  1. Nothing leaks. A bare `.btn` in the global bundle would hit every page.
  2. Specificity. `.bcfc-comp .btn` is (0,2,0), which beats Bootstrap's `.btn-primary`
     and Tailwind's single-class utilities regardless of load order — and /css/index.css
     (which IS Bootstrap) loads AFTER the bundles, so source order alone loses.
  3. `myblockgridlayout.css` puts a bare `.hero{display:flex}` in the global bundle.
     `.bcfc-comp .hero` outranks it, and re-states display explicitly rather than
     inheriting a layout it didn't ask for.

  THE ALIAS TOKENS BELOW ARE DELIBERATE
  -------------------------------------
  The comps use generic names (--brand, --heading, --body, --muted, --line, --wrap).
  Declaring those on `.bcfc-comp` — never on :root — means a conversion keeps working
  without a find-and-replace, while the leak is gone. 11 page stylesheets currently
  declare `--ink` in :root and 16 declare `--wrap`, each with a different value; this
  is the fix for that, not a repeat of it.

  Bundled in BOTH /css/bundle-main.css and /css/bundle-main-rtl.css, so it costs no
  extra request and Arabic does not silently lose it. Uses logical properties
  throughout (margin-inline / padding-inline / inset-inline-start) so RTL is free.

  NOT IN HERE, ON PURPOSE
  -----------------------
  `.band`. In the new comps `.band` + `.band-text` + `.band-media` is the yellow
  "download Sahel" promo — which already exists as Views/Partials/Shared/_SahelAppBand.cshtml
  with shared/components/bcfc-app-band.css. Use the partial and delete the comp's copy.
  pages/Sahel.css uses `.band` to mean something completely different (a full-bleed
  section), so the name has two meanings and is not safe to hoist. For section rhythm
  use `.section` below.
  ============================================================================ */
/* ----------------------------------------------------------------------------
   1. Scope + alias tokens
   ---------------------------------------------------------------------------- */
.bcfc-comp {
  /* Layout */
  --comp-wrap: 1200px;
  --comp-gutter: var(--bcfc-space-6, 1.5rem);
  --comp-band-y: clamp(60px, 7vw, 92px);
  --comp-ease: cubic-bezier(0.16, 1, 0.3, 1);
  /* Comp-named aliases onto the canonical tokens. Literal fallbacks are required:
       a component rendered outside .bcfc-comp would otherwise get an invalid var(). */
  --brand: var(--bcfc-primary, #004a98);
  --brand-dark: var(--bcfc-primary-dark, #00346a);
  --blue: var(--bcfc-blue, #004a98);
  --accent: var(--bcfc-yellow, #f3db6e);
  --red: var(--bcfc-navy, #071b33);
  --heading: var(--bcfc-dark-ink, var(--bcfc-navy, #071b33));
  --body: var(--bcfc-gray-600, #475467);
  --muted: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500, #667085));
  --line: var(--bcfc-border, #d9e4ef);
  --bg: var(--bcfc-surface-raised, var(--bcfc-white, #fff));
  --panel: var(--bcfc-surface-raised, var(--bcfc-white, #fff));
  --font: var(--bcfc-ff-primary, "Almarai", Arial, sans-serif);
  --wrap: var(--comp-wrap);
  /* NOT aliased on purpose: --shadow / --shadow-lg. Tailwind declares --shadow-lg on
       :root,:host in the CRITICAL bundle, and its .shadow-lg utility reads it — redefining
       it here would silently change every Tailwind shadow utility inside a .bcfc-comp page.
       Use var(--bcfc-shadow-sm|md|lg|xl) instead. */
  font-family: var(--bcfc-ff-primary, "Almarai", Arial, sans-serif);
  color: var(--bcfc-ink, var(--body));
}

/* Bootstrap (/css/index.css) sets a{text-decoration:underline} site-wide and loads
   after the bundles. Two classes to outrank it; components opt back in explicitly. */
.bcfc-comp a,
.bcfc-comp a:hover,
.bcfc-comp a:focus {
  text-decoration: none;
}

.bcfc-comp :where(h1, h2, h3, h4) {
  color: var(--bcfc-ink-strong, var(--heading));
  font-weight: var(--bcfc-fw-extrabold, 800);
}

/* ----------------------------------------------------------------------------
   2. .wrap — the content column
   Consensus across 4 comps: max-width 1200px, centred, 24px gutter.
   ---------------------------------------------------------------------------- */
.bcfc-comp .wrap {
  width: 100%;
  max-width: var(--comp-wrap);
  margin-inline: auto;
  padding-inline: var(--comp-gutter);
}

/* ----------------------------------------------------------------------------
   3. .section — vertical band rhythm
   One value drives every band, as pages/Sahel.css does with --band-y.
   ---------------------------------------------------------------------------- */
.bcfc-comp .section {
  padding-block: var(--comp-band-y);
}

.bcfc-comp .section--flush-top {
  padding-block-start: 0;
}

.bcfc-comp .section--flush-bottom {
  padding-block-end: 0;
}

.bcfc-comp .section--tint {
  background: var(--bcfc-surface-raised, var(--bcfc-gray-50, #f9fafb));
}

/* ----------------------------------------------------------------------------
   4. .eyebrow — uppercase kicker
   Present in 6/6 comps. Colour is the only thing that varied, so it inherits
   from --brand and a page can override on its own scope class.
   ---------------------------------------------------------------------------- */
/* .eyebrow is now an alias of the .bcfc-eyebrow component (scss/components/_eyebrow.scss). */
/* ----------------------------------------------------------------------------
   5. .sec-head — eyebrow + h2 + lede cluster
   Present in 5/6 comps. Structure agreed; only margins and the clamp ceiling
   differed, so those stay overridable.
   ---------------------------------------------------------------------------- */
.bcfc-comp .sec-head {
  text-align: center;
  max-width: 56rem;
  margin-inline: auto;
  margin-block: 0 var(--bcfc-space-8, 2rem);
}

.bcfc-comp .sec-head .eyebrow {
  justify-content: center;
}

.bcfc-comp .sec-head h2 {
  font-size: var(--sec-head-h2-size, clamp(1.625rem, 3.2vw, 2.375rem));
  line-height: var(--sec-head-h2-lh, 1.15);
  letter-spacing: var(--sec-head-h2-ls, -0.01em);
  margin-block: var(--sec-head-h2-mt, 14px) var(--sec-head-h2-mb, 12px);
}

.bcfc-comp .sec-head p {
  max-width: var(--sec-head-p-max, 52rem);
  margin-inline: auto;
  color: var(--bcfc-ink, var(--muted));
  font-size: var(--sec-head-p-size, 0.96875rem);
  line-height: var(--sec-head-p-lh, var(--bcfc-lh-relaxed, 1.65));
}

.bcfc-comp .sec-head--start {
  text-align: start;
  margin-inline: 0;
}

.bcfc-comp .sec-head--start .eyebrow {
  justify-content: flex-start;
}

.bcfc-comp .sec-head--start p {
  margin-inline: 0;
}

/* ----------------------------------------------------------------------------
   6. .hero — opening band
   Byte-identical in Real Estate Services / Personal_Services_Landing /
   IMTIAZ_Loyalty_Program. `display` and `align-items` are re-stated because the
   global bare `.hero{display:flex}` would otherwise apply.
   ---------------------------------------------------------------------------- */
.bcfc-comp .hero {
  display: block;
  align-items: initial;
  position: relative;
  overflow: hidden;
  padding-block: 70px 78px;
  background: radial-gradient(120% 120% at 85% -10%, var(--bcfc-surface-sunken, #eef4fc) 0%, var(--bcfc-surface-raised, #fff) 55%);
}

.bcfc-comp .hero h1 {
  max-width: 15ch;
  margin-block: 18px 20px;
  font-size: clamp(2.25rem, 4.8vw, 3.625rem);
  line-height: 1.06;
  letter-spacing: -0.02em;
}

/* Comps use <em> inside h1 as a colour accent, not for emphasis. */
.bcfc-comp .hero h1 em {
  font-style: normal;
  color: var(--bcfc-dark-ink-brand, var(--brand));
}

.bcfc-comp .hero .lead,
.bcfc-comp .lead {
  max-width: 34rem;
  margin-block: 0 30px;
  color: var(--bcfc-ink-strong, var(--body));
  font-size: 1.03125rem;
  line-height: 1.75;
}

.bcfc-comp .hero-grid {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  align-items: center;
  gap: var(--bcfc-space-10, 2.5rem);
}

/* ----------------------------------------------------------------------------
   7. Buttons
   `.btn` agreed across 4 comps. `.btn.btn-primary` is (0,3,0) here, which is how
   it survives Bootstrap's `.btn.btn-primary` rule that otherwise renders primary
   buttons transparent.
   ---------------------------------------------------------------------------- */
.bcfc-comp .btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  padding: 0.95rem 1.7rem;
  border: 0;
  border-radius: var(--bcfc-radius-full, 9999px);
  font-family: inherit;
  font-size: 0.96875rem;
  font-weight: var(--bcfc-fw-extrabold, 800);
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
  transition: transform 0.25s var(--comp-ease), box-shadow 0.25s var(--comp-ease), background-color 0.25s, border-color 0.25s, color 0.25s;
}

.bcfc-comp .btn .material-icons-outlined {
  font-size: 1.1875rem;
}

.bcfc-comp .btn:hover {
  transform: translateY(-2px);
}

.bcfc-comp .btn:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
}

.bcfc-comp .btn.btn-primary {
  background: var(--brand);
  color: #fff;
  box-shadow: 0 6px 20px rgba(0, 74, 152, 0.26);
}

/* THE INK IS A TOKEN WITH A WHITE DEFAULT — not a hardcoded #fff, and not omitted either.
   Both of the other two options were measured wrong:
     - `color: #fff` (the original) overrode any page that rethemed the button. On
       /en/islamic-finance/islamic-services/commodity-murabaha-financing/ — a rawHtml page whose own
       CSS repaints this as a mint face with dark-green ink — rest read ~9:1 and hover forced WHITE
       onto #b6dbd0: 1.5:1.
     - Omitting `color` did NOT make it keep the rest ink, which is what I assumed. A lower rule then
       won the hover state and put #071b33 on #00346a — measured 1.4:1 on
       /en/real-estate/properties-available-for-sale/, i.e. worse than before.
   The token restores the safe white default everywhere while leaving one door open: a page that
   rethemes this button sets --btn-ink alongside its fill, the same pair .bcfc-btn uses. */
/* INVERTS TO AN OUTLINE (owner's call 2026-09-06) instead of darkening --brand to --brand-dark.

   THE OUTLINE IS AN INSET box-shadow, NOT A BORDER, and that is deliberate. `.bcfc-comp .btn` sets
   `border: 0` and 44 views lay out against that box; adding a 1.5px border on hover would grow
   every comp button by 3px and nudge whatever sits beside it, and adding it at rest would move the
   layout on all 44. An inset ring paints inside the padding box, so it is pixel-identical to a
   border and costs no geometry.

   THE INK IS --brand, i.e. the button's own resting FILL — the one colour already proven legible
   against this band, since it was the fill a moment ago. That is what makes this safe on the six
   page sheets that retint --brand (AwardsRecognition #005189, FinanceProductDetailV3 / InsuranceV2
   #004790, RealEstateV2, SahelIslamic --si-green, ImtiazCardLive's gold): each inverts to its own
   brand rather than to a hardcoded navy.

   `--btn-ink` is dropped from the hover on purpose. It was the door for a page to re-ink a
   RETHEMED FILL, and there is no fill here any more; a page that needs a different inverted ink
   should aim at the CTA itself. Checked before removing: none of the four sheets that set
   --btn-ink (ImtiazCardDetail, IrSustainability, LoyaltyLanding, LoyaltyProgram) is an ancestor of
   a live .bcfc-comp .btn.btn-primary — they set that name on unrelated pill classes. */
/* AMENDED 2026-09-07 — THE FILL STAYS, DEEPENED, AND THE LABEL KEEPS ITS RESTING INK. Owner:
   *"if background is not white the text cannot be black so it should be white."* The inversion
   described above put `--brand` on a transparent face, i.e. on whatever the band paints — and
   `.bcfc-comp .section--tint` bands, gradients and photos are not white, so the label was dark on
   a coloured surface.

   `color-mix` on --brand, not --brand-dark: the six sheets that retint --brand (AwardsRecognition,
   FinanceProductDetailV3 / InsuranceV2, RealEstateV2, SahelIslamic, ImtiazCardLive's gold) then
   darken their OWN colour, which is what the inversion was chosen for and is kept.

   `--btn-ink` IS read again, with a white default — the retint door the note above describes as
   closed. It has to be: a page that repaints this button with a LIGHT face keeps a dark ink at
   rest, and forcing #fff here is the measured 1.5:1 mint-button bug. The ink and the fill are one
   decision and both are stated. */
.bcfc-comp .btn.btn-primary:hover {
  background: color-mix(in srgb, var(--brand) 86%, black);
  color: var(--btn-ink, #fff);
  box-shadow: 0 10px 26px rgba(0, 74, 152, 0.3);
}

/* THE ISLAMIC MINT BUTTONS ARE NOT .bcfc-comp BUTTONS — measured, after three wrong guesses.
   `.btn.btn-primary` on the Islamic tree lives in rawHtml content OUTSIDE any .bcfc-comp wrapper:
   --brand and --brand-dark both read (unset) on it, so every rule above is irrelevant to it. Its
   mint face and dark ink come from the page's own CSS, which sets the rest state only — leaving the
   hover to whatever wins, and that was WHITE on #b6dbd0: 1.5:1.

   Scanned the whole Islamic tree before writing this: exactly TWO such buttons exist
   (/commodity-murabaha-financing/ "Notify me at launch" and /islamic/murabaha-form/ "Apply for an
   Islamic Finance"), both outside .bcfc-comp, both the same mint face rgb(165,209,197) with ink
   rgb(11,43,36). There is no white-on-dark .btn.btn-primary on the tree for this to break.

   Bounded by html[data-islamic], which covers the rawHtml pages that have no repo-side scope class
   — and which only became a usable hook once SitePageResolver.IsIslamicPage was fixed to answer
   from the page's own segments (2026-08-24). Deliberately NOT under .bcfc-comp: that is the mistake
   this rule replaces. */
html[data-islamic=true] .btn.btn-primary:hover,
html[data-islamic=true] .btn.btn-primary:focus-visible {
  color: var(--bcfc-green-darker, #0c2d27);
}

/* AND IT HAS TO BE FENCED OFF FROM THE COMP BUTTON, as of the 2026-09-07 amendment above.
   That rule is (0,4,1); `.bcfc-comp .btn.btn-primary:hover` is (0,4,0). So on an Islamic page it
   WINS, and now that the amended hover keeps a deepened brand fill instead of going transparent,
   it would land dark green ink on a dark green face — the vanishing-button bug, in a new place.
   It is only ever meant for the two rawHtml MINT buttons, which are outside .bcfc-comp entirely
   (measured; see the note above), so the pair is restated here at (0,5,1) for comp buttons and the
   mint rule keeps the tree it was written for. */
html[data-islamic=true] .bcfc-comp .btn.btn-primary:hover,
html[data-islamic=true] .bcfc-comp .btn.btn-primary:focus-visible {
  background: color-mix(in srgb, var(--brand) 86%, black);
  color: var(--btn-ink, #fff);
}

/* ==============================================================================================
   BOOTSTRAP'S .btn.btn-primary:hover IS BROKEN, AND IT CANNOT BE FIXED GLOBALLY. index.css carries

       .btn.btn-primary:hover { background: var(--bs-btn-primary-hover-bg);
                                color:      var(--bs-btn-primary-hover-color); }

   and neither token is defined anywhere, so both declarations are invalid at computed-value time:
   `background` falls back to transparent, `color` to inherit. On a filled primary button that means
   the fill disappears on hover while the ink stays — measured 1.08:1 on the "Apply on this estimate"
   CTA at /en/finance/conventional-services/vehicle-finance/, which sits on the WHITE calculator card
   inside the dark hero. The CTA vanished under the cursor.

   THREE GLOBAL FIXES WERE TRIED AND ALL THREE WERE MEASURED WRONG ACROSS 379 PAGES. Recorded so the
   fourth attempt is not made:
     1. Define BOTH tokens (fill navy + ink white). Pages give the hover a light fill from their OWN
        css — some of it embedded in rawHtml, e.g. `.bc-hero .btn-primary:hover{background:#eaf1fb}`,
        which no repo-side grep can enumerate. White ink landed on #eaf1fb: 1.14:1, two pages.
     2. Define the INK only. A page's light fill then keeps a dark rest ink, but every filled button
        whose page sets no hover ink took white — and separately this needed a companion rule for the
        mint faces, whose two attempts at a CSS hook both misfired (see the html[data-islamic] note).
     3. Define the FILL only. The exact mirror of (1): wherever the rest ink is DARK — because the
        rest fill is light or transparent — a navy hover fill kills it. Measured 1.04:1 and 1.4:1 on
        seven buttons across /finance/conventional-services/* and /investor-relations/
        corporate-social-responsibility/, i.e. it BROKE more buttons than it fixed.

   The fill and the ink are one decision. Supplied apart, one of them is always wrong for some page,
   because the other half comes from CSS this file cannot see. So they are set TOGETHER, on the one
   component that was actually measured broken, and nowhere else. Any future case gets its own
   narrow rule with both halves — never another global token. */
.bcfc-hero .calc .btn.btn-primary:hover,
.bcfc-hero .calc .btn.btn-primary:focus-visible {
  background: var(--bcfc-primary-dark, #00346a);
  color: var(--bcfc-white, #fff);
}

.bcfc-comp .btn.btn-ghost {
  background: transparent;
  color: var(--bcfc-dark-ink-brand, var(--brand));
  border: 1.5px solid var(--line);
}

.bcfc-comp .btn.btn-ghost:hover {
  background: rgba(0, 74, 152, 0.06);
  border-color: var(--brand);
}

/* On a dark band. */
.bcfc-comp .btn.btn-light {
  background: var(--bcfc-surface-raised, #fff);
  color: var(--bcfc-dark-ink-brand, var(--brand));
}

/* INVERTS TO A WHITE OUTLINE, not to --brand. This variant is the one that sits ON A DARK BAND
   (see the comment above it), so it is the one case where inverting to the resting fill's own
   colour is wrong in the other direction: --brand on a transparent face over a dark band is
   navy-on-navy. It takes WHITE for both the ring and the label instead — the same asymmetry
   `.bcfc-btn--on-dark` makes in bcfc-button.css, and for the same reason.
   Inset ring rather than a border for the geometry reason given above. */
.bcfc-comp .btn.btn-light:hover {
  background: transparent;
  color: var(--bcfc-white, #fff);
  box-shadow: inset 0 0 0 1.5px var(--bcfc-white, #fff);
}

.bcfc-comp .btn-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bcfc-space-3, 0.75rem);
}

/* ----------------------------------------------------------------------------
   8. Grids
   ---------------------------------------------------------------------------- */
.bcfc-comp .grid-2,
.bcfc-comp .grid-3,
.bcfc-comp .grid-4 {
  display: grid;
  gap: var(--bcfc-space-6, 1.5rem);
}

.bcfc-comp .grid-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.bcfc-comp .grid-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.bcfc-comp .grid-4 {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

/* ----------------------------------------------------------------------------
   9. .rev — reveal-on-scroll, deliberately a no-op by default
   A comp's inline observer script is dropped during conversion, so `.rev` must not
   carry a hidden state: an observer that never fires would leave the whole page at
   opacity 0. This is a real failure mode we have already shipped once.

   To actually animate, there are now TWO sanctioned options and this is no longer
   just `io-animate`:

     1. `io-animate fadeInUp` on the element — bcfc-intersection.ts adds `.io-animated`,
        and the base class is not hidden, so it is failsafe by construction. Still the
        right choice for a one-off element or a page doing nothing else.

     2. BCFC MOTION, for a page that wants the richer treatment: per-word headline
        builds, seam-seated bands, pinned scroll stages. Put `data-bcfc-motion` on the
        page's scope element and mark elements `data-motion-rv`; run headings through
        Views/Partials/Shared/_WordBlocks.cshtml. See
        shared/components/bcfc-motion.css — it solves the failure mode above with a
        `html.bcfc-motion-ready` gate set synchronously in <head>, rather than by
        refusing to hide anything.

   Do NOT put both on one element: two observers would animate it and fight over its
   opacity. And do not repurpose `.rev` for either — it stays a no-op, because comps
   keep arriving with it already in their markup.
   `.rev.is-revealed` is here only for markup that already carries `.rev`.
   ---------------------------------------------------------------------------- */
.bcfc-comp .rev {
  opacity: 1;
}

@media (prefers-reduced-motion: no-preference) {
  .bcfc-comp .rev.is-revealed {
    animation: bcfc-comp-rise 0.6s var(--comp-ease) both;
  }
}
@keyframes bcfc-comp-rise {
  from {
    opacity: 0;
    transform: translateY(14px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
/* ----------------------------------------------------------------------------
   10. Responsive
   Breakpoints match $breakpoint-* in wwwroot/scss/_variables.scss.
   ---------------------------------------------------------------------------- */
@media (max-width: 1024px) {
  .bcfc-comp .grid-4 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 768px) {
  .bcfc-comp {
    --comp-gutter: var(--bcfc-space-4, 1rem);
  }
  .bcfc-comp .hero {
    padding-block: 48px 52px;
  }
  .bcfc-comp .hero h1 {
    max-width: none;
  }
  .bcfc-comp .hero-grid,
  .bcfc-comp .grid-2,
  .bcfc-comp .grid-3,
  .bcfc-comp .grid-4 {
    grid-template-columns: minmax(0, 1fr);
  }
  .bcfc-comp .sec-head {
    margin-block-end: var(--bcfc-space-6, 1.5rem);
  }
  .bcfc-comp .btn {
    inline-size: 100%;
  }
  .bcfc-comp .btn-row {
    flex-direction: column;
  }
}
/* ----------------------------------------------------------------------------
   11. RTL
   Logical properties cover layout. These are the cases they don't.
   ---------------------------------------------------------------------------- */
[dir=rtl] .bcfc-comp .hero {
  background: radial-gradient(120% 120% at 15% -10%, var(--bcfc-surface-sunken, #eef4fc) 0%, var(--bcfc-surface-raised, #fff) 55%);
}

/* ----------------------------------------------------------------------------
   12. Shared honeypot field
   Clip-based hiding, never left:-9999px (LTR-only, caused an /ar horizontal
   overflow). Shared by _ApplyFormPartial.cshtml and _LeadCaptureForm.cshtml.
   ---------------------------------------------------------------------------- */
.bcfc-form-honeypot {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  opacity: 0;
  pointer-events: none;
}
@charset "UTF-8";
/* ─────────────────────────────────────────────────────────────────────────────────────────────
   FAQ QUESTION HEADINGS

   An FAQ question is now a real heading (<h3>) inside its <summary>, across every FAQ band on the
   site. WHY: a question that is only <summary> text is not in the document's heading outline, so
   an AI answer engine has nothing to pair an answer with, and a screen-reader user cannot reach it
   from the headings list. Measured on beta 2026-09-23: 465 of 560 URLs had no extractable Q&A
   section for exactly this reason, while the FAQPage JSON-LD on the same pages was correct — the
   content was there, the structure was not.

   THIS FILE EXISTS SO THE CHANGE IS INVISIBLE. <summary> already carries the whole look of a
   question — its font, colour, weight and spacing come from each band's own sheet — so the heading
   must contribute nothing of its own or every FAQ on the site would suddenly render at browser
   default h3 size with h3 margins.

   display:inline is the one non-obvious declaration and it is required for BOTH layouts in use:
     · a <summary> laid out as normal flow (Finances, Islamic) holds the question text next to an
       inline icon span, so a BLOCK heading would push that icon onto its own line;
     · a <summary> laid out as flex (ImtiazCorporate, RealEstate) blockifies its children anyway,
       which overrides this and is correct there.
   Setting it is therefore safe in the flex case and necessary in the flow case.

   SPECIFICITY IS 0,0,2 AND THAT IS THE MINIMUM THAT WORKS. The first cut wrote this as
   `:where(summary) > :where(h2, h3, h4, h5)`, which is specificity ZERO — so it lost to the bare
   `h3 { font-size: var(--bcfc-fs-2xl) }` in bundle-main (0,0,1) and the questions rendered at 26px
   instead of the summary's 19.4px. Measured in a browser, not reasoned about. `summary > h3` is
   0,0,2, which beats every bare-element rule whatever the source order — including the forked
   Bootstrap's `h3, .h3` in index.css, a separate <link> whose order relative to the bundle is not
   ours to rely on — while still losing to any class-based rule a band wants to add on top. That
   escape hatch is deliberate.
   ───────────────────────────────────────────────────────────────────────────────────────────── */
summary > h2,
summary > h3,
summary > h4,
summary > h5 {
  display: inline;
  margin: 0;
  padding: 0;
  font: inherit;
  letter-spacing: inherit;
  line-height: inherit;
  color: inherit;
  text-transform: inherit;
}
@charset "UTF-8";
/* ============================================================================
   BCFC FORM BAND — the brand skin for Umbraco Forms
   ============================================================================

   WHY THIS IS CSS AND NOT A FORMS THEME FOLDER.
   Umbraco Forms 18 ships its theme views compiled into a Razor Class Library
   (Umbraco.Forms.Web.dll) — there is not a single .cshtml in any of the six
   umbraco.forms.* packages, so a `Views/Partials/Forms/Themes/Bcfc/` override
   would be written blind against a model contract nobody here can read. The
   class contract, by contrast, IS readable and is stable: it is enumerated in
   full by the package's own assets/themes/default/style.css. So we keep the
   `default` theme and re-skin it from the band wrapper.

   Consequence: every rule below is scoped to `.bcfc-formband`, so this sheet
   cannot touch a form anywhere else on the site (the six bespoke forms still
   live in ContactPage/ComplaintsForm/etc. and keep their own CSS untouched).

   THE DEFAULT THEME FIGHTS BACK WITH `!important`. Five of its declarations are
   flagged important and beat any amount of specificity we add:
       .umbraco-forms-caption   font-size + line-height
       label.umbraco-forms-label  background
       input.text / textarea    max-width
       span.contourError        color + background
       .umbraco-forms-hidden    display
   Each is answered below with `!important` of its own and a comment saying so.
   Do not "tidy" those away — the rule they beat is in a NuGet package.

   RTL: there are no `[dir=rtl]` blocks on purpose. Everything uses logical
   properties (padding-inline, inset-inline-start, text-align:start), so Arabic
   is correct from the same rules. This sheet therefore has to be in BOTH
   bundle-main.css and bundle-main-rtl.css — in only one, /ar loses the whole
   skin. See Program.cs.
   ============================================================================ */
/* BOX MODEL, STATED RATHER THAN INHERITED.
   Every control below is `width: 100%` with 1rem of horizontal padding and a 1px
   border. Under content-box that is 100% + 34px, and the input overflows the card
   — measured in real Chrome against the real markup, 753px of input inside a 720px
   card, breaking out on the right in LTR and on the left in RTL.
   The live site does not show it, because Tailwind's preflight in bundle-critical
   sets `box-sizing: border-box` on everything. That is exactly why it is stated
   here: this sheet must not depend on another sheet's reset to lay out correctly,
   or removing Tailwind silently breaks every form on the site. */
.bcfc-formband,
.bcfc-formband *,
.bcfc-formband *::before,
.bcfc-formband *::after {
  box-sizing: border-box;
}

.bcfc-formband {
  /* Local knobs. Kept on the band, never on :root — a light-filled control
       must take its OWN component token, or the ambient --bcfc-ink* wins and
       you get white-on-white. */
  --fb-surface: var(--bcfc-surface-raised, var(--bcfc-white, #fff));
  --fb-surface-alt: var(--bcfc-surface-raised, var(--bcfc-gray-50, #f9fafb));
  --fb-border: var(--bcfc-border, #d9e4ef);
  /* THE ACCENT IS A COMPONENT TOKEN, not a direct --bcfc-blue read. It has to be,
       because this band is the ONE form chrome shared by every section including the
       Islamic one, and a direct brand read is unretargetable: the Umbraco Forms submit
       button here rendered #004a98 on the green Islamic apply pages for exactly that
       reason, while the surrounding panel, stepper and headings were correctly green.
       There was no token for html[data-islamic] to remap, so no Islamic rule could
       reach it. Defaults below are byte-identical to the blues they replace. */
  --fb-accent: var(--bcfc-blue, #004a98);
  --fb-accent-dark: var(--bcfc-blue-dark, #00346a);
  --fb-accent-deep: var(--bcfc-navy, #071b33);
  --fb-accent-rgb: 0, 74, 152;
  --fb-border-strong: var(--fb-accent);
  --fb-ink: var(--bcfc-dark-ink, var(--bcfc-gray-900, #101828));
  --fb-ink-muted: var(--bcfc-dark-ink-muted, var(--bcfc-gray-500, #667085));
  --fb-label: var(--bcfc-dark-ink-muted, var(--bcfc-gray-700, #344054));
  --fb-danger: var(--bcfc-danger, #d81222);
  --fb-danger-tint: var(--bcfc-danger-tint, rgba(216, 18, 34, 0.08));
  --fb-ring: rgba(var(--fb-accent-rgb), 0.18);
  --fb-radius: var(--bcfc-radius-md, 12px);
  --fb-gap: var(--bcfc-space-5, 1.25rem);
  --fb-max: 720px;
}

/* Band shell. `.section` and `.wrap` come from bcfc-comp.css, which is why the
   band markup must sit inside `.bcfc-comp` — see _FormBandItem.cshtml. */
.bcfc-formband .bcfc-formband__card {
  max-width: var(--fb-max);
  margin-inline: auto;
  padding: clamp(1.25rem, 3.5vw, 2.5rem);
  background: var(--fb-surface);
  border: 1px solid var(--bcfc-border-light, #e2e8f0);
  border-radius: var(--bcfc-radius-2xl, 24px);
  box-shadow: var(--bcfc-shadow-md, 0 8px 24px rgba(0, 74, 152, 0.12));
}

.bcfc-formband--flush .bcfc-formband__card {
  padding: 0;
  background: none;
  border: 0;
  box-shadow: none;
}

.bcfc-formband--wide {
  --fb-max: 960px;
}

/* Bootstrap underlines every <a> site-wide (see bcfc-bootstrap.css), which on
   the hero cost us two underlined CTAs before it was caught. A form band
   carries consent and privacy links, so neutralise it here too. */
.bcfc-formband a:where(:not([class*=btn])) {
  text-decoration: none;
  color: var(--bcfc-ink-link, var(--fb-accent));
  font-weight: var(--bcfc-fw-semibold, 600);
}

/* ---------------------------------------------------------------------------
   DARK THEME: keep the ACCENT, lifted.                        (phase 5 exception)

   `color: var(--bcfc-ink-link, var(--fb-accent))` reads as "the accent, unless a
   surface overrides it". In DARK mode bcfc-theme-dark.css defines the ink tokens at
   the root, so the ink always wins and the accent is never seen — the element goes
   generic ink and loses its identity. (Legible, just wrong; see section 3.8 of
   docs/design-system/08-surface-vocabulary.md, which lists this as one of four.)

   Fixed by overriding the DECLARATION under the theme attribute rather than by
   reordering the chain. Reordering is the house fix for this shape — see the long
   note on .bcfc-pattern-page-meta__list in bcfc-page-patterns.css — but it only
   works when the accent and the ink resolve to the same colour anyway, and --fb-accent
   is not brand blue.

   `color-mix` with `white`, NOT a hardcoded lift, because --fb-accent is CONTEXTUAL:
   it is brand blue by default, --bcfc-green-dark on the Islamic pages and
   --sahel-chrome-accent on Sahel. Mixing lifts whatever it resolves to in that
   scope. 65% was measured: at 55% the Sahel green lands at 4.13:1 on
   --bcfc-surface-inverse, below AA. At 65% every accent in the estate clears AA on
   every tier (worst 5.36:1).

   `white` rather than #ffffff on purpose — a raw hex here would raise this file's
   frozen count in gate 8 for no reason.

   Light mode cannot reach this rule: the attribute is absent, so the selector does
   not match. --------------------------------------------------------------------- */
:root[data-bcfc-theme=dark] .bcfc-formband a:where(:not([class*=btn])) {
  color: color-mix(in srgb, white 65%, var(--fb-accent));
}

.bcfc-formband a:where(:not([class*=btn])):hover {
  text-decoration: underline;
}

/* BAND HEADER ALIGNMENT, STATED EXPLICITLY.
   `.bcfc-comp .sec-head` already sets `text-align: center`, and the h2 obeys it —
   but the intro paragraph does not, and goes justified. Cause: site.css carries a
   deliberate site-wide `p { text-align: justify }` at (0,0,1), and A DIRECT
   DECLARATION ALWAYS BEATS AN INHERITED VALUE regardless of specificity. That file
   knows this and re-inherits — but only inside a class whose name contains
   "center", and `.sec-head` does not qualify. So the heading centres and the
   sentence under it does not, which reads as a bug in the band.
   Fixed here rather than in site.css or bcfc-comp.css on purpose: this is a
   site-wide condition affecting every comp section head, and widening the
   re-inherit rule would silently re-align copy on pages nobody asked me to touch.
   Reported instead; the band fixes itself. */
.bcfc-formband .sec-head,
.bcfc-formband .sec-head p {
  text-align: center;
}

/* ---------------------------------------------------------------- form shell */
.bcfc-formband .umbraco-forms-form {
  padding: 0; /* default theme: 10px 0 */
  margin: 0;
  color: var(--bcfc-dark-ink, var(--fb-ink));
  font-family: var(--bcfc-ff-primary, "Almarai", Arial, sans-serif);
}

/* The form's own caption is suppressed: the band already renders a heading from
   the block, and showing both gives every form two titles. The default theme
   forces 2em/2em with !important, so display:none needs it too. */
.bcfc-formband .umbraco-forms-form fieldset {
  /* default theme: padding 1em 1em 0 0 / margin 0 0 1.5em / border none!important */
  padding: 0;
  margin: 0;
  border: 0;
  display: grid;
  gap: var(--fb-gap);
}

.bcfc-formband .umbraco-forms-form legend {
  padding: 0;
  margin-block-end: var(--bcfc-space-2, 0.5rem);
  color: var(--bcfc-dark-ink, var(--fb-ink));
  font-size: var(--bcfc-fs-lg, 1.25rem);
  font-weight: var(--bcfc-fw-bold, 700);
  line-height: var(--bcfc-lh-tight, 1.25);
}

/* ------------------------------------------------------------------- a field */
.bcfc-formband .umbraco-forms-field {
  clear: none; /* default theme floats things; we use grid */
  display: grid;
  gap: var(--bcfc-space-2, 0.5rem);
  margin: 0;
}

.bcfc-formband label.umbraco-forms-label {
  display: block;
  background: transparent !important; /* beats the default theme's !important */
  color: var(--bcfc-dark-ink-muted, var(--fb-label));
  font-size: var(--bcfc-fs-sm, 0.875rem);
  font-weight: var(--bcfc-fw-semibold, 600);
  line-height: var(--bcfc-lh-normal, 1.5);
  text-align: start;
}

/* Umbraco Forms marks a mandatory field by appending a *. Give it the brand red
   rather than inheriting the label colour, so it reads as a requirement. */
.bcfc-formband .umbraco-forms-label .umbraco-forms-indicator,
.bcfc-formband .umbraco-forms-indicator {
  color: var(--bcfc-dark-ink-red, var(--fb-danger));
  font-weight: var(--bcfc-fw-bold, 700);
  margin-inline-start: 2px;
}

/* Help text under a field. */
.bcfc-formband .umbraco-forms-form small,
.bcfc-formband .umbraco-forms-tooltip {
  display: block;
  float: none; /* default theme floats + pads 200px */
  clear: none;
  padding: 0;
  color: var(--bcfc-dark-ink-muted, var(--fb-ink-muted));
  font-size: var(--bcfc-fs-xs, 0.75rem);
  line-height: var(--bcfc-lh-normal, 1.5);
}

/* ------------------------------------------- what the markup ACTUALLY looks like

   Everything above this point was written against the class contract the package
   documents in its own assets/themes/default/style.css. That contract is real but
   INCOMPLETE — the rendered form emits four more wrappers that appear in no
   stylesheet anywhere, found by rendering a real form through the block-preview API
   and reading the HTML back (2026-08-30). The full class list is:

     umbraco-forms-page  umbraco-forms-caption  umbraco-forms-fieldset
     row-fluid  umbraco-forms-container  col-md-12
     umbraco-forms-field  umbraco-forms-label  umbraco-forms-field-wrapper
     field-validation-valid  umbraco-forms-hidden  umbraco-forms-navigation
     text  btn  next  shortanswer  dataconsent  mandatory  alternating

   Two of those cost real defects, both fixed here.

   1. THE GAP NEVER APPLIED. `fieldset { display: grid; gap }` gaps only its DIRECT
      children, and the fieldset's only child is a single `.row-fluid`; the fields
      are grandchildren inside `.umbraco-forms-container`. So every field sat flush
      against the next. The grid has to be declared on the element that actually
      holds the fields.

   2. A BARE CHECKBOX HAS NO WRAPPER. The documented `span.checkbox` /
      `.checkboxlist` wrappers exist only for LIST fields. A single Data Consent
      checkbox renders as a naked `<input type="checkbox">` followed by a sibling
      `<label>` inside `.umbraco-forms-field-wrapper`, so none of the checkbox rules
      above matched it and the label dropped onto its own line.

   `.row-fluid` / `.col-md-12` are Bootstrap-2/3 grid names that this site's CSS
   defines NOWHERE (checked across all 190 sheets), so they currently inherit
   nothing. They are still neutralised below: the markup is asking for a grid we do
   not want, and a future Bootstrap addition would silently indent every field. */
/* SCOPED TO THE FIELDSET, and that scoping is load-bearing.
   `.row-fluid` and `.col-md-12` appear TWICE in the markup: once around the fields
   (inside `.umbraco-forms-fieldset`) and once around the buttons (on
   `.umbraco-forms-navigation`, a SIBLING of the fieldset). An earlier version of
   this rule matched both and then special-cased the navigation back to flex — which
   quietly broke the mobile full-width button, because
   `.umbraco-forms-navigation.row-fluid` is (0,4,0) and the media query at the
   bottom of this file is (0,3,0), so the override lost on specificity while looking
   correct. Measured in Chrome at 500px: nav went to column as intended but its
   child stayed 86px wide and centred.
   Scoping to the fieldset means the navigation is never matched at all and nothing
   has to be undone. */
.bcfc-formband .umbraco-forms-fieldset .row-fluid,
.bcfc-formband .umbraco-forms-fieldset .umbraco-forms-container,
.bcfc-formband .umbraco-forms-fieldset .col-md-12 {
  display: grid;
  gap: var(--fb-gap);
  width: auto;
  max-width: none;
  margin: 0;
  padding: 0;
  float: none;
}

/* The buttons sit inside `.umbraco-forms-navigation > .col-md-12`, so that wrapper
   would otherwise be the flex item and shrink to its content — leaving the button
   86px wide and centred even where the layout asks for full width. `display:
   contents` removes the wrapper from layout entirely, making the buttons direct
   flex children of the navigation row, which is what every rule below assumes. */
.bcfc-formband .umbraco-forms-navigation > .col-md-12 {
  display: contents;
}

.bcfc-formband .umbraco-forms-page,
.bcfc-formband .umbraco-forms-fieldset {
  display: grid;
  gap: var(--fb-gap);
  margin: 0;
  padding: 0;
  border: 0;
}

/* The per-input wrapper. A grid so the control, its inline label and the validation
   message stack predictably whatever the field type turns out to be. */
.bcfc-formband .umbraco-forms-field-wrapper {
  display: grid;
  gap: var(--bcfc-space-2, 0.5rem);
  min-width: 0;
}

/* ---- the bare single checkbox / radio (Data Consent and friends) ---------------
   Base rules first, so this is correct without :has(). */
.bcfc-formband .umbraco-forms-field-wrapper > input[type=checkbox],
.bcfc-formband .umbraco-forms-field-wrapper > input[type=radio] {
  display: inline-block !important;
  vertical-align: text-top;
  /* NO margin here. The generic checkbox rule further down sets `margin: .15rem 0 0`
       at IDENTICAL specificity (0,3,1) and, being later in the file, would win and
       silently reset it — leaving the box flush against its label. The gap lives on
       the label instead, where nothing competes for it. */
}

.bcfc-formband .umbraco-forms-field-wrapper > input[type=checkbox] ~ label,
.bcfc-formband .umbraco-forms-field-wrapper > input[type=radio] ~ label {
  display: inline;
  margin: 0;
  margin-inline-start: 0.5rem;
  color: var(--bcfc-dark-ink, var(--fb-ink));
  font-size: var(--bcfc-fs-sm, 0.875rem);
  font-weight: var(--bcfc-fw-normal, 400);
  line-height: var(--bcfc-lh-normal, 1.5);
  cursor: pointer;
}

/* Then the enhancement: a real flex row, so a label that wraps onto two lines
   aligns against the box instead of under it. Ignored by anything without :has(). */
.bcfc-formband .umbraco-forms-field-wrapper:has(> input[type=checkbox]),
.bcfc-formband .umbraco-forms-field-wrapper:has(> input[type=radio]) {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 0;
}

.bcfc-formband .umbraco-forms-field-wrapper:has(> input[type=checkbox]) > label,
.bcfc-formband .umbraco-forms-field-wrapper:has(> input[type=radio]) > label {
  flex: 1 1 12rem;
  min-width: 0;
}

/* ---- Data Consent: the box belongs BESIDE the sentence, not under it ----------
   The rules above only align a checkbox against a label that is its own SIBLING,
   inside `.umbraco-forms-field-wrapper`. That is the shape Umbraco Forms produces
   when the field's `AcceptCopy` setting is filled — and ten of the twelve live
   forms leave it EMPTY and carry the consent sentence in the field CAPTION
   instead, which the container renders as `label.umbraco-forms-label`, a sibling
   of the wrapper. So the sentence and the box were in two different grid rows of
   `.umbraco-forms-field` and the box dropped underneath:

     .umbraco-forms-field.dataconsent
        label.umbraco-forms-label          "I accept the Terms & Conditions … *"
        .umbraco-forms-field-wrapper
           input[type=checkbox]
           span.field-validation-valid

   `display: contents` on the wrapper is what makes this fixable in CSS alone: it
   lifts the input and the validation span out of their wrapper and into the
   field's own grid, so all three can be placed in one two-column row. Rewriting
   the markup was the alternative, and it is not available — the caption, the `*`
   indicator and the validation span are all emitted by the PACKAGE's container
   view, which docs/umbraco-forms.md section 3 says we do not override (the one
   exception, FieldType.DataConsent.cshtml, exists for a submission-blocking bug,
   not for layout).

   `div` IS LOAD-BEARING in every selector below. Forms copies the field's class
   list onto the INPUT as well — the live checkbox renders with
   `class="umbraco-forms-field dataconsent mandatory"`, measured on
   /en/support/ — so a bare `.umbraco-forms-field.dataconsent` matches the
   checkbox itself and would put `display: grid` on a replaced element.

   This is the BASE, so the common case is correct with no :has() at all. */
.bcfc-formband div.umbraco-forms-field.dataconsent {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: start;
  column-gap: 0.5rem;
  row-gap: var(--bcfc-space-1, 0.25rem);
}

.bcfc-formband div.umbraco-forms-field.dataconsent > .umbraco-forms-field-wrapper {
  /* Beats the `:has(> input[type=checkbox]) { display: flex }` rule above on
       specificity — (0,4,0) against (0,3,1) — so there is nothing to undo. */
  display: contents;
}

.bcfc-formband div.umbraco-forms-field.dataconsent > .umbraco-forms-field-wrapper > input[type=checkbox] {
  grid-column: 1;
  grid-row: 1;
  /* The generic checkbox rule later in this file sets `margin: .15rem 0 0` at
       (0,3,1); this selector is (0,5,1) and wins, which is why the nudge onto the
       sentence's first-line baseline can live here. `em` so it tracks the caption's
       font-size rather than the root's. */
  margin: 0.2em 0 0;
}

/* The consent sentence is a sentence, so it gets the same treatment as a sibling
   checkbox label — not the semibold field-caption treatment, which read as a
   heading with a stray box under it. */
.bcfc-formband div.umbraco-forms-field.dataconsent > label.umbraco-forms-label {
  grid-column: 2;
  grid-row: 1;
  color: var(--bcfc-dark-ink, var(--fb-ink));
  font-size: var(--bcfc-fs-sm, 0.875rem);
  font-weight: var(--bcfc-fw-normal, 400);
  line-height: var(--bcfc-lh-normal, 1.5);
  cursor: pointer;
}

/* TAP TARGET (2026-10-14). The box is 18x18 (1.15rem) and stays that size; what grows is the
   LABEL, which is `for=` the box, so tapping it toggles the box. It spans BOTH columns — padded
   past the box at its start — and is at least 2.5rem (40px) tall, so the whole row, box included,
   is one 40px target. The box sits above it (z-index), so a tap on the box itself still lands on
   the box and toggles once. The 0.5rem padding-block is matched on the box's top margin so the box
   stays on the sentence's first line. */
.bcfc-formband div.umbraco-forms-field.dataconsent > label.umbraco-forms-label,
.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > .umbraco-forms-field-wrapper > label {
  grid-column: 1/-1;
  min-height: 2.5rem;
  padding-block: 0.5rem;
  padding-inline-start: 1.65rem;
}

.bcfc-formband div.umbraco-forms-field.dataconsent > .umbraco-forms-field-wrapper > input[type=checkbox] {
  position: relative;
  z-index: 1;
  margin-block-start: calc(0.5rem + 0.2em);
}

/* The caption-as-heading variant keeps its heading un-padded. */
.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > label.umbraco-forms-label {
  min-height: 0;
  padding: 0;
}

/* With the wrapper at `display: contents` the validation span is a grid item too,
   and must take a full row of its own rather than being squeezed into the
   checkbox's auto-width column. */
.bcfc-formband div.umbraco-forms-field.dataconsent > .umbraco-forms-field-wrapper > span[data-valmsg-for],
.bcfc-formband div.umbraco-forms-field.dataconsent > .umbraco-forms-field-wrapper > span[class*=field-validation] {
  grid-column: 1/-1;
  grid-row: 2;
}

/* The OTHER two forms — demo and Card Signup — do fill `AcceptCopy`, so their
   wrapper carries its own label and the caption really is a heading. Put it back
   above, and move the box and its copy down to row 2. Enhancement only: without
   :has() those two degrade to the layout above, which is tidy rather than wrong. */
.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > label.umbraco-forms-label {
  grid-column: 1/-1;
  grid-row: 1;
  color: var(--bcfc-dark-ink-muted, var(--fb-label));
  font-weight: var(--bcfc-fw-semibold, 600);
  cursor: default;
}

.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > .umbraco-forms-field-wrapper > input[type=checkbox] {
  grid-row: 2;
}

.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > .umbraco-forms-field-wrapper > label {
  grid-column: 2;
  grid-row: 2;
  flex: none;
  margin-inline-start: 0;
}

.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > .umbraco-forms-field-wrapper > span[data-valmsg-for],
.bcfc-formband div.umbraco-forms-field.dataconsent:has(> .umbraco-forms-field-wrapper > label) > .umbraco-forms-field-wrapper > span[class*=field-validation] {
  grid-row: 3;
}

/* The validation message always takes its own full-width row. */
.bcfc-formband .umbraco-forms-field-wrapper > span[data-valmsg-for] {
  flex-basis: 100%;
}

/* `.field-validation-valid` is the EMPTY placeholder span Forms renders next to
   every field and swaps to `-error` on failure. It must not reserve space. */
.bcfc-formband .umbraco-forms-form span.field-validation-valid:empty {
  display: none;
}

/* ------------------------------------------------------------------- controls */
.bcfc-formband .umbraco-forms-form input.text,
.bcfc-formband .umbraco-forms-form input.title,
.bcfc-formband .umbraco-forms-form input[type=text],
.bcfc-formband .umbraco-forms-form input[type=email],
.bcfc-formband .umbraco-forms-form input[type=tel],
.bcfc-formband .umbraco-forms-form input[type=url],
.bcfc-formband .umbraco-forms-form input[type=number],
.bcfc-formband .umbraco-forms-form input[type=date],
.bcfc-formband .umbraco-forms-form input[type=password],
.bcfc-formband .umbraco-forms-form textarea,
.bcfc-formband .umbraco-forms-form select {
  /* max-width:400px and width:95% are !important in the default theme */
  display: block;
  width: 100% !important;
  max-width: none !important;
  margin: 0;
  padding: 0.75rem 1rem;
  background: var(--fb-surface);
  color: var(--bcfc-dark-ink, var(--fb-ink));
  border: 1px solid var(--fb-border);
  border-radius: var(--fb-radius);
  font-family: inherit;
  font-size: var(--bcfc-fs-base, 1rem);
  line-height: var(--bcfc-lh-normal, 1.5);
  text-align: start;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
  -webkit-appearance: none;
  appearance: none;
}

.bcfc-formband .umbraco-forms-form textarea {
  height: auto; /* default theme hard-sets 250px */
  min-height: 8.5rem;
  resize: vertical;
}

/* A select needs its chevron back once appearance is stripped. background-image
   is set with a logical position so RTL puts the chevron on the left. */
.bcfc-formband .umbraco-forms-form select {
  padding-inline-end: 2.5rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%23667085'%3E%3Cpath d='M5.5 7.5 10 12l4.5-4.5' stroke='%23667085' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-size: 1.15rem;
  background-position: right 1rem center;
}

.bcfc-formband:dir(rtl) .umbraco-forms-form select,
[dir=rtl] .bcfc-formband .umbraco-forms-form select {
  background-position: left 1rem center;
}

/* Addresses and numbers are left-to-right text. Typed into an RTL field they reorder (a leading "+"
   or trailing "?" jumps to the wrong end), so the control itself is LTR and pinned to the start edge
   of the row with text-align:right. An email field authored as a plain Short answer carries its
   validation pattern, which is the only hook it has. */
[dir=rtl] .bcfc-formband .umbraco-forms-form input[type=email],
[dir=rtl] .bcfc-formband .umbraco-forms-form input[type=tel],
[dir=rtl] .bcfc-formband .umbraco-forms-form input[type=url],
[dir=rtl] .bcfc-formband .umbraco-forms-form input[data-val-regex-pattern*="@"] {
  direction: ltr;
  text-align: right;
}

.bcfc-formband .umbraco-forms-form input::placeholder,
.bcfc-formband .umbraco-forms-form textarea::placeholder {
  color: var(--bcfc-dark-ink-muted, var(--fb-ink-muted));
  opacity: 1;
}

.bcfc-formband .umbraco-forms-form input.text:focus,
.bcfc-formband .umbraco-forms-form input.title:focus,
.bcfc-formband .umbraco-forms-form input:focus,
.bcfc-formband .umbraco-forms-form textarea:focus,
.bcfc-formband .umbraco-forms-form select:focus {
  outline: none;
  border-color: var(--fb-border-strong);
  box-shadow: 0 0 0 3px var(--fb-ring);
}

/* Keyboard users must still get a visible ring even where a mouse focus ring is
   suppressed — bcfc-accessibility.css sets the site-wide policy, this matches it. */
.bcfc-formband .umbraco-forms-form :focus-visible {
  outline: 2px solid var(--fb-border-strong);
  outline-offset: 2px;
}

.bcfc-formband .umbraco-forms-form input.fileupload,
.bcfc-formband .umbraco-forms-form input[type=file] {
  height: auto !important;
  width: 100% !important;
  padding: 0.65rem 0.75rem;
  background: var(--bcfc-surface-raised, var(--fb-surface-alt));
  border: 1px dashed var(--fb-border);
  border-radius: var(--fb-radius);
  font-size: var(--bcfc-fs-sm, 0.875rem);
}

/* -------------------------------------------------- checkboxes & radio lists */
.bcfc-formband .umbraco-forms-form .checkboxlist,
.bcfc-formband .umbraco-forms-form .radiobuttonlist,
.bcfc-formband .umbraco-forms-form span.checkbox {
  display: grid; /* default theme: block + float:left + 10px */
  float: none;
  gap: var(--bcfc-space-2, 0.5rem);
  padding: 0;
}

.bcfc-formband .umbraco-forms-form .checkboxlist label,
.bcfc-formband .umbraco-forms-form .radiobuttonlist label,
.bcfc-formband .umbraco-forms-form span.checkbox label {
  float: none; /* default theme floats these left */
  clear: none;
  display: inline-flex;
  align-items: flex-start;
  gap: 0.55rem;
  color: var(--bcfc-dark-ink, var(--fb-ink));
  font-size: var(--bcfc-fs-sm, 0.875rem);
  font-weight: var(--bcfc-fw-normal, 400);
  line-height: var(--bcfc-lh-normal, 1.5);
  cursor: pointer;
}

.bcfc-formband .umbraco-forms-form .checkboxlist input,
.bcfc-formband .umbraco-forms-form .radiobuttonlist input,
.bcfc-formband .umbraco-forms-form .checkbox input,
.bcfc-formband .umbraco-forms-form input[type=checkbox],
.bcfc-formband .umbraco-forms-form input[type=radio] {
  /* the default theme sets width/height/border/display with !important */
  width: 1.15rem !important;
  height: 1.15rem !important;
  max-width: none !important;
  margin: 0.15rem 0 0;
  padding: 0;
  flex: 0 0 auto;
  accent-color: var(--fb-border-strong);
  border: 1px solid var(--fb-border) !important;
  border-radius: 4px;
  display: inline-block !important;
  cursor: pointer;
}

.bcfc-formband .umbraco-forms-form input[type=radio] {
  border-radius: 50%;
}

/* DARK: a native checkbox ignores `border` and follows the light-scheme accent grey,
   so it read as a flat grey square. `color-scheme: dark` gives the control its light
   edge; the checked fill takes the brand ink (green on Islamic pages, never the
   generic blue there). Declarations only, so the layout/margin rules above stay put. */
:root[data-bcfc-theme=dark] .bcfc-formband .umbraco-forms-form input[type=checkbox],
:root[data-bcfc-theme=dark] .bcfc-formband .umbraco-forms-form input[type=radio] {
  color-scheme: dark;
  accent-color: var(--bcfc-dark-ink-brand, var(--fb-accent));
}

:root[data-bcfc-theme=dark][data-islamic=true] .bcfc-formband .umbraco-forms-form input[type=checkbox],
:root[data-bcfc-theme=dark][data-islamic=true] .bcfc-formband .umbraco-forms-form input[type=radio] {
  accent-color: var(--bcfc-dark-ink-green, var(--fb-accent));
}

/* ----------------------------------------------------------------- validation */
.bcfc-formband .umbraco-forms-form input.contourError,
.bcfc-formband .umbraco-forms-form textarea.contourError,
.bcfc-formband .umbraco-forms-form select.contourError,
.bcfc-formband .umbraco-forms-form input.input-validation-error,
.bcfc-formband .umbraco-forms-form textarea.input-validation-error,
.bcfc-formband .umbraco-forms-form select.input-validation-error {
  background: var(--fb-danger-tint);
  border-color: var(--fb-danger);
}

.bcfc-formband .umbraco-forms-form input.input-validation-error:focus,
.bcfc-formband .umbraco-forms-form textarea.input-validation-error:focus,
.bcfc-formband .umbraco-forms-form select.input-validation-error:focus {
  box-shadow: 0 0 0 3px var(--bcfc-danger-ring, rgba(216, 18, 34, 0.14));
}

/* The default theme sets colour AND background with !important on both of these. */
.bcfc-formband .umbraco-forms-form span.contourError,
.bcfc-formband .umbraco-forms-form span.field-validation-error,
.bcfc-formband .umbraco-forms-form .field-validation-error {
  display: block;
  padding: 0; /* default theme: padding-left 5px */
  color: var(--bcfc-dark-ink-red, var(--fb-danger)) !important;
  background: transparent !important;
  font-size: var(--bcfc-fs-xs, 0.75rem);
  font-weight: var(--bcfc-fw-semibold, 600);
  line-height: var(--bcfc-lh-normal, 1.5);
  text-align: start;
}

/* UW-368: every error showed twice - once in Umbraco Forms' stock summary list at the top of the
   page wrapper and again under the field. The summary is not wanted (owner, 2026-10-22), on every
   Umbraco Form, so it is NOT scoped to .bcfc-formband. The per-field spans keep role="alert", so
   each error is still announced. */
.umbraco-forms-page > [data-valmsg-summary=true] {
  display: none;
}

/* ------------------------------------------------------------------ navigation */
.bcfc-formband .umbraco-forms-form .umbraco-forms-navigation {
  display: flex;
  flex-wrap: wrap;
  gap: var(--bcfc-space-3, 0.75rem);
  align-items: center;
  padding: var(--bcfc-space-2, 0.5rem) 0 0;
  margin: 0;
}

/* Buttons. The hover must recolour BOTH fill and text — a hover that changes
   only the fill is how this site produced dark-ink-on-navy at 1.36:1. */
.bcfc-formband .umbraco-forms-button,
.bcfc-formband .umbraco-forms-form input[type=submit],
.bcfc-formband .umbraco-forms-form button[type=submit] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  min-height: 46px;
  width: auto !important;
  max-width: none !important;
  margin: 0;
  padding: 0.75rem 1.75rem;
  background: linear-gradient(135deg, var(--fb-accent) 0%, var(--fb-accent-dark) 100%);
  color: var(--bcfc-white, #fff);
  border: none;
  border-radius: var(--bcfc-radius-full, 9999px);
  font-family: inherit;
  font-size: var(--bcfc-fs-sm, 0.875rem);
  font-weight: var(--bcfc-fw-bold, 700);
  line-height: var(--bcfc-lh-tight, 1.25);
  cursor: pointer;
  transition: background 0.24s ease, color 0.24s ease, transform 0.24s ease, box-shadow 0.24s ease;
}

.bcfc-formband .umbraco-forms-button:hover,
.bcfc-formband .umbraco-forms-form input[type=submit]:hover,
.bcfc-formband .umbraco-forms-form button[type=submit]:hover {
  background: linear-gradient(135deg, var(--fb-accent-dark) 0%, var(--fb-accent-deep) 100%);
  color: var(--bcfc-white, #fff);
  transform: translateY(-1px);
  box-shadow: var(--bcfc-shadow-md, 0 8px 24px rgba(0, 74, 152, 0.12));
}

/* Prev on a multi-page form is secondary. Forms names it "Previous"; the theme
   emits it as a button inside the same navigation block, so target by value. */
.bcfc-formband .umbraco-forms-navigation input[type=submit][name*=prev i],
.bcfc-formband .umbraco-forms-navigation button[name*=prev i] {
  background: transparent;
  color: var(--fb-accent);
  border: 1.5px solid rgba(var(--fb-accent-rgb), 0.25);
}

.bcfc-formband .umbraco-forms-navigation input[type=submit][name*=prev i]:hover,
.bcfc-formband .umbraco-forms-navigation button[name*=prev i]:hover {
  background: rgba(var(--fb-accent-rgb), 0.06);
  color: var(--bcfc-dark-ink-brand, var(--fb-accent-dark));
  border-color: rgba(var(--fb-accent-rgb), 0.4);
}

/* --------------------------------------------------------- paging & summary */
.bcfc-formband .umbraco-forms-page > h4,
.bcfc-formband .umbraco-forms-pagedetails {
  margin: 0 0 var(--bcfc-space-4, 1rem);
  color: var(--bcfc-dark-ink-muted, var(--fb-ink-muted));
  font-size: var(--bcfc-fs-xs, 0.75rem);
  font-weight: var(--bcfc-fw-bold, 700);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.bcfc-formband .umbraco-forms-hidden,
.bcfc-formband .umbraco-forms-form .hiddenfield {
  display: none !important;
}

/* ------------------------------------------------------------ success state */
.bcfc-formband__done {
  max-width: var(--fb-max);
  margin-inline: auto;
  padding: clamp(1.5rem, 4vw, 2.75rem);
  background: var(--fb-surface);
  border: 1px solid var(--bcfc-border-light, #e2e8f0);
  border-inline-start: 4px solid var(--bcfc-success, #65c3a0);
  border-radius: var(--bcfc-radius-2xl, 24px);
  box-shadow: var(--bcfc-shadow-md, 0 8px 24px rgba(0, 74, 152, 0.12));
  text-align: start;
}

/* ------------------------------------------------------------------- preview */
/* Shown only in the backoffice block preview, where rendering a live form would
   need an antiforgery token and a published request. */
.bcfc-formband__placeholder {
  display: grid;
  gap: var(--bcfc-space-3, 0.75rem);
  padding: clamp(1.25rem, 3vw, 2rem);
  background: var(--bcfc-surface-raised, var(--fb-surface-alt));
  border: 1px dashed var(--fb-border);
  border-radius: var(--fb-radius);
  text-align: start;
}

.bcfc-formband__placeholder-name {
  color: var(--fb-accent);
  font-size: var(--bcfc-fs-md, 1.125rem);
  font-weight: var(--bcfc-fw-bold, 700);
}

.bcfc-formband__placeholder-hint {
  color: var(--bcfc-dark-ink-muted, var(--fb-ink-muted));
  font-size: var(--bcfc-fs-sm, 0.875rem);
  line-height: var(--bcfc-lh-relaxed, 1.65);
}

.bcfc-formband__placeholder-bar {
  height: 42px;
  background: var(--fb-surface);
  border: 1px solid var(--fb-border);
  border-radius: var(--fb-radius);
}

.bcfc-formband__placeholder-bar--short {
  max-width: 45%;
}

.bcfc-formband__placeholder-bar--tall {
  height: 96px;
}

.bcfc-formband__placeholder-bar--button {
  max-width: 168px;
  height: 46px;
  background: linear-gradient(135deg, var(--fb-accent) 0%, var(--fb-accent-dark) 100%);
  border: 0;
  border-radius: var(--bcfc-radius-full, 9999px);
}

/* An editor who has not picked a form yet needs to be told, not shown a blank. */
.bcfc-formband__empty {
  padding: 1rem 1.25rem;
  background: var(--fb-danger-tint);
  color: var(--bcfc-dark-ink-red, var(--fb-danger));
  border: 1px dashed var(--bcfc-danger-ring, rgba(216, 18, 34, 0.35));
  border-radius: var(--fb-radius);
  font-size: var(--bcfc-fs-sm, 0.875rem);
  font-weight: var(--bcfc-fw-semibold, 600);
}

@media (width < 576px) {
  .bcfc-formband .umbraco-forms-form .umbraco-forms-navigation {
    flex-direction: column;
    align-items: stretch;
  }
  .bcfc-formband .umbraco-forms-button,
  .bcfc-formband .umbraco-forms-form input[type=submit] {
    width: 100% !important;
  }
}
/* ── BCFC — Complaint category field ────────────────────────────────────────────────────────────
   The three dependent dropdowns of BcfcComplaintCategoryField
   (Views/Partials/Forms/Themes/default/Fieldtypes/FieldType.BcfcComplaintCategory.cshtml).

   Only the stacked sub-labels are new. The `select` elements themselves are already dressed by the
   rules above — `.bcfc-formband .umbraco-forms-form select` covers the border, radius, focus ring and
   the RTL chevron flip — so there is deliberately nothing here that restyles a control.

   The sub-labels are NOT `.umbraco-forms-label`: that class is the field's own caption, which Forms
   renders once above this whole group. Reusing it would give the group four labels at the same visual
   weight and no indication that the three dropdowns are one answer. */
.bcfc-formband__cascade {
  display: grid;
  gap: var(--bcfc-space-2, 0.5rem);
}

.bcfc-formband__cascade-label {
  display: block;
  color: var(--bcfc-dark-ink-muted, var(--fb-label));
  font-size: var(--bcfc-fs-xs, 0.8125rem);
  font-weight: var(--bcfc-fw-medium, 500);
  line-height: var(--bcfc-lh-normal, 1.5);
}

/* A dropdown that cannot be used yet has to LOOK unusable, or a visitor reads "Choose the option
   above first" as a broken form rather than as an instruction. */
.bcfc-formband .umbraco-forms-form .bcfc-formband__cascade select:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

/* Each dropdown after the first gets a little air, so the three read as a sequence. */
.bcfc-formband__cascade-label + select {
  margin-block-end: var(--bcfc-space-1, 0.25rem);
}

/* ============================================================================
   DESIGN OPTIONS — workstream B1
   ============================================================================
   The editor-chosen options on bcfcFormBlock, honoured entirely from the ONE
   markup file (Views/Partials/Forms/_FormBandItem.cshtml), so the live page and
   the backoffice preview cannot drift:

       backgroundTone   Surface (default) / Tinted / Navy
       arrangement      Full width (default) / Beside copy / Beside image
       asideImage       the picture for "Beside image"
       asideCopy        the rich text for "Beside copy"
       introHtml        a rich-text intro, in place of the plain `intro`
       successHeading   the after-submit panel
       successBody
       footnote         a legal / regulatory note under the form

   WHAT IS DELIBERATELY *NOT* HERE, because the primitives layer already has it:

     * TINTED is `.section--tint` from bcfc-comp.css. Not one new declaration.
     * A start-aligned section head is `.sec-head--start`, also from bcfc-comp.css.
       Only the text-align re-assert below is ours, and it is needed because this
       file force-centres `.sec-head` (see the long note further up: site.css
       justifies every <p> and a direct declaration beats an inherited value).
     * LEGIBLE INK on the Navy tone is `data-surface="dark"` from bcfc-surface.css,
       and the white card inside it re-anchors with `data-surface="light"`. No
       colour is repainted here — the ink tokens invert by inheritance.
   ============================================================================ */
/* ------------------------------------------------------------ background tone */
/* Painted on the band ROOT rather than on `.section`, so the fill and the
   `data-surface="dark"` declaration that makes its ink legible sit on the same
   element and cannot be separated by a later edit.

   Registering it in wwwroot/scss/build-surface-map.js is NOT required and was
   not done: that generated map exists to retro-fit bands which paint a fill and
   carry no `data-surface`. This one carries it explicitly, which is the case the
   design language says to write by hand. */
.bcfc-formband--navy {
  background: var(--bcfc-navy, #071b33);
}

/* NAVY IGNORES "FLUSH", AND THAT IS A DESIGN DECISION, NOT AN OVERSIGHT.
   `--flush` removes the white panel so the controls sit on the page background.
   On navy that puts every one of Umbraco Forms' own state colours onto a #071b33
   fill, and they are all --fb-danger #d81222: the mandatory asterisk, the inline
   validation message and the error summary. That measures about 2.1:1, and
   re-tinting them to --bcfc-yellow (the house rule for marks on navy) would make
   an INVALID FIELD look like a decoration. Field labels, help text and checkbox
   labels have the same problem in the opposite direction, because --fb-ink is
   also the input TEXT colour and the inputs stay white-filled — so one knob
   cannot serve both.
   So _FormBandItem.cshtml does not emit `--flush` when the tone is Navy; the
   form keeps its white card, which is the house shape for a form on a dark band
   anyway. This selector is the belt-and-braces half of that decision, for the
   case where the class pair arrives by some other route. */
.bcfc-formband--navy.bcfc-formband--flush .bcfc-formband__card {
  padding: clamp(1.25rem, 3.5vw, 2.5rem);
  background: var(--fb-surface);
  border: 1px solid var(--bcfc-border-light, #e2e8f0);
  box-shadow: var(--bcfc-shadow-md, 0 8px 24px rgba(0, 74, 152, 0.12));
}

/* --------------------------------------------------------------- arrangement */
/* The split arrangements. `--fb-max` is the band's own width knob, already read
   by the card and by the success panel, so releasing it here widens all of them
   to the column in one declaration instead of three overrides.
   THIS RULE MUST STAY AFTER `.bcfc-formband--wide` in the file: both are (0,1,0),
   so a Wide + Beside-image band would otherwise cap the card at 960px inside a
   half-width column. */
.bcfc-formband--split {
  --fb-max: none;
}

/* THE TWO WRAPPERS ARE UNCONDITIONAL IN THE MARKUP AND NEUTRAL HERE, which is
   what lets _FormBandItem.cshtml carry ONE markup shape for both arrangements
   instead of an `@if` that duplicates the head cluster and the card. See the long
   note above the markup in that file.

   `display: contents` on the aside is the whole mechanism: in the full-width
   arrangement it removes itself from layout, so the head cluster is a direct
   child of `.wrap` exactly as it was before B1 and every existing rule in this
   sheet keeps matching. Nothing about the default band changed. */
.bcfc-formband__grid {
  display: block;
}

.bcfc-formband__aside {
  display: contents;
}

/* the softer white this panel eyebrow always had; the look is .bcfc-eyebrow */
.bcfc-formband__eyebrow {
  --eyebrow-ink: color-mix(in srgb, var(--bcfc-white) 75%, transparent);
  line-height: 1.5;
}

.bcfc-formband__main {
  display: grid;
  gap: var(--bcfc-space-5, 1.25rem);
  /* min-width:0 is load-bearing once this becomes a grid TRACK: without it one
       long unbroken string — a URL in the legal note, an Arabic compound with no
       break opportunity — makes the track wider than its share and the form
       column overflows `.wrap`. */
  min-width: 0;
  align-content: start;
}

.bcfc-formband--split .bcfc-formband__grid {
  display: grid;
  /* The form column is the wider one. Same intent as `.hero-grid`'s
       1.05fr/.95fr, tipped a little further because a form is taller than the
       copy beside it. */
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
  gap: clamp(1.75rem, 4vw, 3rem);
  align-items: start;
}

.bcfc-formband--split .bcfc-formband__aside {
  display: grid;
  gap: var(--bcfc-space-5, 1.25rem);
  min-width: 0;
  align-content: start;
}

/* Re-assert the start alignment the comp primitive asks for. `.bcfc-formband
   .sec-head p` earlier in this file is (0,2,1) and centres it; this is (0,2,1)
   too and wins only because it is LATER — so do not move this above that rule. */
.bcfc-formband .sec-head--start,
.bcfc-formband .sec-head--start p {
  text-align: start;
}

/* In a column the head cluster's 2rem bottom margin is redundant — the grid's own
   gap already separates it from the copy under it. Scoped to the split so the
   full-width band keeps the primitive's rhythm untouched. */
.bcfc-formband--split .sec-head {
  margin-block-end: 0;
}

/* --------------------------------------------------------------- the picture */
.bcfc-formband__media {
  margin: 0;
}

.bcfc-formband__media img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--bcfc-radius-2xl, 24px);
}

/* ----------------------------------------------------------- rich-text prose */
/* ONE treatment for all four rich-text slots: the intro, the copy beside the
   form, the success body and the legal note. An RTE emits <p>/<ul>/<ol>/<strong>
   and nothing else in this sheet defines them — writing markup whose classes no
   stylesheet defines is the failure this project carries 47 opted-out previews
   from, and an RTE's tags are the same hazard by another route.

   Colour reads the surface token WITH the band's own knob as the fallback, which
   is the house pattern: undefined outside a surface, so it stays --fb-ink; white
   inside `data-surface="dark"`, so the Navy tone inverts with no extra rule. */
.bcfc-formband__prose {
  color: var(--bcfc-ink, var(--fb-ink));
  font-size: 0.96875rem;
  line-height: var(--bcfc-lh-relaxed, 1.65);
  text-align: start;
}

.bcfc-formband__prose > :first-child {
  margin-block-start: 0;
}

.bcfc-formband__prose > :last-child {
  margin-block-end: 0;
}

.bcfc-formband__prose p {
  margin-block: 0 0.85rem;
  /* site.css justifies every <p> at (0,0,1), and a DIRECT declaration beats an
       inherited value however specific the ancestor — the same trap the section
       head hit further up this file. */
  text-align: start;
}

/* Bullets: `padding-inline-start`, never `padding-left`, so the indent mirrors
   in Arabic. A bare `ul` with no indent rule puts its markers outside the
   content box in RTL on this site. */
.bcfc-formband__prose ul,
.bcfc-formband__prose ol {
  margin-block: 0 0.85rem;
  padding-inline-start: 1.25rem;
}

.bcfc-formband__prose li {
  margin-block-end: 0.35rem;
}

/* Margins only. The type SCALE for headings inside rich text belongs to rte.css
   and is deliberately not restated here. */
.bcfc-formband__prose h2,
.bcfc-formband__prose h3,
.bcfc-formband__prose h4 {
  margin-block: 1.25rem 0.5rem;
}

/* The rich-text intro sits inside `.sec-head`, so it inherits that cluster's
   centring in the full-width arrangement and its start alignment in a split —
   which is why the paragraph rule above has to be relaxed back to `inherit`
   there, and why the measure is restated to match `.sec-head p`. */
.bcfc-formband .sec-head .bcfc-formband__prose {
  max-width: 52rem;
  margin-inline: auto;
}

.bcfc-formband .sec-head--start .bcfc-formband__prose {
  margin-inline: 0;
}

.bcfc-formband .sec-head .bcfc-formband__prose p {
  text-align: inherit;
}

/* ------------------------------------------------------------ the legal note */
.bcfc-formband__footnote {
  max-width: var(--fb-max);
  margin-inline: auto;
  color: var(--bcfc-ink-muted, var(--fb-ink-muted));
  font-size: var(--bcfc-fs-xs, 0.75rem);
  line-height: var(--bcfc-lh-normal, 1.5);
}

/* ---------------------------------------------- the after-submit panel, fed */
/* `.bcfc-formband__done` is declared further up this file and, until B1, was
   emitted by NOTHING — dead CSS waiting for this. It is the panel the band shows
   once Umbraco Forms has accepted a submission, carrying the editor's own
   heading and body with Forms' configured message underneath it. */
.bcfc-formband__done-title {
  margin: 0 0 0.65rem;
  color: var(--bcfc-ink-strong, var(--fb-ink));
  font-size: clamp(1.25rem, 2.4vw, 1.625rem);
  font-weight: var(--bcfc-fw-extrabold, 800);
  line-height: var(--bcfc-lh-tight, 1.25);
}

.bcfc-formband__done-message {
  margin-block-start: var(--bcfc-space-4, 1rem);
}

/* Preview only: the panel is drawn in the backoffice so an editor can see the
   copy she typed, and dashed so it does not read as "this always shows". The
   label above it comes from a Dictionary item and the element is omitted when
   that item is unseeded, so it can never render as a blank strip. */
.bcfc-formband__done--preview {
  border-style: dashed;
}

.bcfc-formband__preview-label {
  display: block;
  margin-block-end: var(--bcfc-space-2, 0.5rem);
  color: var(--bcfc-dark-ink-muted, var(--fb-ink-muted));
  font-size: var(--bcfc-fs-xs, 0.75rem);
  font-weight: var(--bcfc-fw-bold, 700);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* ---------------------------------------------------------------- responsive */
/* 768px is the primitives layer's fold — `.grid-2` and `.hero-grid` collapse at
   exactly this width, so a form band beside a comp band folds with it. */
@media (max-width: 768px) {
  .bcfc-formband--split .bcfc-formband__grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
/* ============================================================================
   --inslot : the band drawn INSIDE a page's own designed grid
   ============================================================================
   Set by a page that renders _FormBandItem itself rather than letting
   _FormBands.cshtml do it from _Layout. ContactPage is the first: its .cu-grid
   is a 1.5fr/1fr two-column layout whose first column is the form, so the band
   has to become a grid CHILD instead of a full-width section further down the
   document.

   Why `display: contents` rather than a second markup path: the band's Razor
   deliberately has one fixed element tree, and every arrangement it supports is
   done in CSS (see the structure note in _FormBandItem.cshtml, and `--split`
   above, which works the same way). Collapsing the four wrappers hands the host
   page's grid the __main element directly, with no branch and nothing to drift.

   __main is deliberately left as a normal block, NOT contents: it carries the
   card, the success panel and the footnote, and they must stay stacked in one
   grid cell rather than becoming three separate cells.

   These rules are LAST in the file on purpose. They tie on specificity with the
   `--split` rules above (0,2,0), so source order is what makes --inslot win when
   an editor has also chosen a "Beside…" arrangement - which in a page slot there
   is no room for. */
.bcfc-formband--inslot,
.bcfc-formband--inslot > .section,
.bcfc-formband--inslot .wrap,
.bcfc-formband--inslot .bcfc-formband__grid {
  display: contents;
}

/* The host page already supplies the heading and the copy beside the form - that
   is what its own grid column is for - so the band's aside would duplicate it. */
.bcfc-formband--inslot .bcfc-formband__aside {
  display: none;
}

/* The card is centred inside a max-width band by default. In a slot it fills the
   column it was given, and the page's own card metrics take over. */
.bcfc-formband--inslot .bcfc-formband__main {
  display: block;
  min-width: 0;
}

.bcfc-formband--inslot .bcfc-formband__card {
  max-width: none;
  margin-inline: 0;
}

/* ============================================================================
   2026 FORM DESIGN REFRESH
   ============================================================================
   Brings the band in line with the seven approved comps in Downloads/Forms
   (finance / imtiaz / tisco x2 share one stylesheet; CSME and the two TRESCO
   forms are supersets of it). Applied as a retune at the END of this file so it
   wins on source order over the equal-specificity rules above, which is the same
   technique the --inslot block below/above uses.

   WHY THIS IS A RETUNE AND NOT A REWRITE. The comps use this project's own
   vocabulary - .wrap, .eyebrow, .btn-primary, .field, .two, .phone .cc,
   .consent, Almarai, Material icons - and their radii are EXACTLY our tokens
   (24 / 16 / 12 = --bcfc-radius-2xl / -lg / -md). So the work is metrics, not
   colour.

   THE PALETTE IS DELIBERATELY *NOT* COPIED. The comps use #004790 / #00335f /
   #e7edf3; this site's brand is --bcfc-blue #004a98, --bcfc-blue-dark #00346a,
   --bcfc-border-light #e2e8f0. Those differ by rounding, not intent, and
   /bcfc-design-language is explicit that a second brand blue is a regression -
   so the comps' structure and spacing are adopted and the site's tokens are
   kept. If the near-miss hexes were deliberate, that is a design decision to
   take once, globally, not per component.
   ============================================================================ */
.bcfc-formband {
  /* Softer hairline and a calmer field fill, both straight off the comps. */
  --fb-border: var(--bcfc-border-light, #e2e8f0);
  --fb-field-bg: var(--bcfc-surface-raised, var(--bcfc-gray-50, #f9fafb));
  /* 4px focus halo at a lower alpha than the old 3px/.18 - the comps lean on
       the ring rather than on a heavier border. */
  --fb-ring: rgba(var(--fb-accent-rgb), 0.13);
}

/* ---- labels: smaller, heavier, tracked out, and in heading ink --------------
   The comps set 13px/800/.02em against the heading colour rather than the muted
   label grey, which is what makes a long form scan as a sequence of steps. */
.bcfc-formband label.umbraco-forms-label {
  /* --fb-ink, not a new --bcfc-heading: that token does not exist on this site,
       so naming it would have silently shipped the comp's raw hex as a fallback. */
  color: var(--bcfc-dark-ink, var(--fb-ink));
  font-size: var(--bcfc-fs-xs, 0.8125rem);
  font-weight: var(--bcfc-fw-extrabold, 800);
  letter-spacing: 0.02em;
}

/* ---- text controls: tinted fill, 1.5px border, 4px ring --------------------
   A filled control on a white card is the single biggest visual difference from
   what shipped before, where inputs were white-on-white and read as absent
   until focused. Listed explicitly rather than with a bare `input` selector so
   checkboxes and radios (styled above) are not caught. */
.bcfc-formband .umbraco-forms-field input[type=text],
.bcfc-formband .umbraco-forms-field input[type=email],
.bcfc-formband .umbraco-forms-field input[type=tel],
.bcfc-formband .umbraco-forms-field input[type=number],
.bcfc-formband .umbraco-forms-field input[type=date],
.bcfc-formband .umbraco-forms-field input[type=password],
.bcfc-formband .umbraco-forms-field select,
.bcfc-formband .umbraco-forms-field textarea {
  background: var(--bcfc-surface-raised, var(--fb-field-bg));
  border: 1.5px solid var(--fb-border);
  border-radius: var(--bcfc-radius-md, 12px);
}

.bcfc-formband .umbraco-forms-field input[type=text]:focus,
.bcfc-formband .umbraco-forms-field input[type=email]:focus,
.bcfc-formband .umbraco-forms-field input[type=tel]:focus,
.bcfc-formband .umbraco-forms-field input[type=number]:focus,
.bcfc-formband .umbraco-forms-field input[type=date]:focus,
.bcfc-formband .umbraco-forms-field input[type=password]:focus,
.bcfc-formband .umbraco-forms-field select:focus,
.bcfc-formband .umbraco-forms-field textarea:focus {
  background: var(--fb-surface);
  border-color: var(--fb-border-strong);
  box-shadow: 0 0 0 4px var(--fb-ring);
  outline: none;
}

/* ---- the submit: FULL WIDTH ONLY. Radius and colour are deliberately not touched.
   The comps draw a 16px-radius button, and this rule pointedly does not. The
   submit renders as `<input class="btn primary">`, so it is governed by
   wwwroot/css/shared/components/bcfc-button.css, which is the ONE global button
   file and forces `border-radius: var(--bcfc-btn-radius) !important`. That file
   also matches `.bcfc-formband__placeholder-bar--button` on purpose, so the
   loading skeleton and the real button share a shape - and it records that
   squaring a form submit was a real regression on /en/real-estate/. Restyling
   the radius here would fork the button system for one component and desync the
   skeleton. If 16px is wanted it is a global decision, taken once, in that file.
   Colour is left alone for the same reason: `.btn primary` already resolves to
   the brand fill and its hover, so re-declaring it here would be a second source
   of truth for the same pixel.

   Width IS ours: it is layout, not the button's identity, and the band already
   sets `width: 100% !important` at <=575px (line ~686), so this only extends an
   accepted shape to every width. `!important` because `.btn` is itself
   important-heavy and the mobile rule above had to do the same. */
.bcfc-formband .umbraco-forms-navigation button,
.bcfc-formband .umbraco-forms-navigation input[type=submit] {
  width: 100% !important;
  justify-content: center;
}

/* ---- the two-column comp shape, for a STANDALONE band only ----------------
   The comps join the copy column and the form column inside ONE bordered,
   rounded, clipped card with a divider between them - not two floating panels.
   `--split` is the arrangement that already puts the aside in its own column,
   so this attaches there and nowhere else.

   SCOPED AWAY FROM --inslot ON PURPOSE. In slot the band is drawn inside a
   host page's own grid (ContactPage's .cu-grid), its wrappers are collapsed to
   `display: contents` and its aside is hidden - so a border and radius here
   would draw a stray box around a page that already supplies its own card. The
   field, label and button rules above still apply in slot, which is what makes
   the two paths look like one design. */
.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__grid {
  background: var(--fb-surface);
  border: 1px solid var(--fb-border);
  border-radius: var(--bcfc-radius-2xl, 24px);
  overflow: hidden;
}

.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__grid {
  /* STRETCH, or the tint stops where the copy stops. The aside is a grid item
       whose content is shorter than the form beside it, so without this its
       background and divider end mid-card and the "one card" reading collapses -
       measured, not theorised. The comps set align-items:stretch on .apply for
       exactly this. */
  align-items: stretch;
}

.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__aside {
  background: var(--bcfc-surface-sunken, var(--bcfc-blue-tint, #eef3f7));
  border-inline-end: 1px solid var(--fb-border);
  padding: clamp(2rem, 4vw, 3.5rem) clamp(1.5rem, 3vw, 3rem);
  /* The comps left-align the copy column and centre nothing. `start` rather
       than `left` so Arabic mirrors from the same rule - this sheet carries no
       [dir=rtl] blocks on purpose. */
  text-align: start;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__aside .sec-head,
.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__aside h2,
.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__aside p {
  text-align: start;
  margin-inline: 0;
}

.bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__card {
  /* The card's own frame is redundant once the grid carries one. */
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  padding: clamp(2rem, 4vw, 3.25rem) clamp(1.5rem, 3vw, 3rem);
}

/* 768px, because that is where --split ACTUALLY folds to one column (the media
   query at line ~990). Matching it is not cosmetic: at 960 the divider would
   swap to the block edge while the grid was still two columns, drawing a
   horizontal line across a vertical split between 768 and 960. */
@media (max-width: 768px) {
  .bcfc-formband--split:not(.bcfc-formband--inslot) .bcfc-formband__aside {
    border-inline-end: 0;
    border-block-end: 1px solid var(--fb-border);
  }
}
/* ---- Split panel: dark gradient copy panel beside the white form card ----------
   The "Talk to a specialist" shape from the Tas'heelat Insurance pages. It is the
   `--split` card above with the aside repainted, so the grid, the border, the
   radius, the stretch and the 768px fold are all inherited and not repeated.
   Fill and ink travel together: the gradient runs from the accent tokens (so the
   Islamic window remaps it for free) and every ink is set here, never inherited.
   Logical properties only, so Arabic mirrors from the same rules. */
.bcfc-formband--panel:not(.bcfc-formband--inslot) .bcfc-formband__aside {
  background: linear-gradient(160deg, var(--fb-accent), var(--fb-accent-deep));
  border-inline-end: 0;
  color: var(--bcfc-white);
}

.bcfc-formband--panel:not(.bcfc-formband--inslot) .bcfc-formband__aside h2 {
  color: var(--bcfc-white);
}

.bcfc-formband--panel:not(.bcfc-formband--inslot) .bcfc-formband__aside p,
.bcfc-formband--panel:not(.bcfc-formband--inslot) .bcfc-formband__aside .bcfc-formband__prose {
  color: color-mix(in srgb, var(--bcfc-white) 82%, transparent);
}

.bcfc-formband--panel:not(.bcfc-formband--inslot) .bcfc-formband__aside a {
  color: var(--bcfc-yellow);
}

.bcfc-formband__points {
  list-style: none;
  margin: 1.25rem 0 0;
  padding: 0;
}

.bcfc-formband__points li {
  align-items: flex-start;
  display: flex;
  gap: 0.75rem;
  padding-block: 0.5rem;
}

.bcfc-formband__points .material-icons-outlined {
  color: var(--bcfc-yellow);
  flex-shrink: 0;
  font-size: 1.25rem;
  margin-block-start: 0.125rem;
}

.bcfc-formband__points b {
  color: var(--bcfc-white);
  display: block;
  font-size: 0.96875rem;
}

.bcfc-formband__points li > span:last-child > span {
  color: color-mix(in srgb, var(--bcfc-white) 80%, transparent);
  font-size: 0.875rem;
}

/* ==============================================================================================
   THE ISLAMIC WINDOW. Colour only — one token remap, no geometry, no new selectors on the
   controls themselves. This is the whole reason the accent above is a token.

   Keyed on html[data-islamic="true"], matching the convention in bcfc-comp.css and
   bcfc-page-patterns.css, and on the palette-only hook for the two pages that carry Islamic
   content while sitting outside the Islamic route (islamic-fees-and-charges,
   islamic-finance-window) and so answer IsIslamicPalettePage but not IsIslamicPage.

   FILL AND INK TOGETHER, per the house rule recorded in bcfc-comp.css: the ink on these
   controls is already --bcfc-white and the greens below are both dark enough to keep it
   (#113e35 on white is 10.5:1), so the existing colour declarations stay correct and only the
   fill moves. Nothing here touches a non-Islamic page, because every declaration is inside the
   attribute scope and the defaults above are unchanged. */
html[data-islamic=true] .bcfc-formband,
html[data-islamic-palette=true] .bcfc-formband {
  --fb-accent: var(--bcfc-green-dark, #113e35);
  --fb-accent-dark: var(--bcfc-green-darker, #0c2d27);
  --fb-accent-deep: var(--bcfc-green-darker, #0c2d27);
  --fb-accent-rgb: 17, 62, 53;
}

/* ---- In-slot: the card FILLS its column, and sits FLUSH inside a host frame (UW-323) ----------
   Two defects, one shape. (1) `__main` is the host grid's item and stretches, but the card inside
   it was only as tall as its content - fine while the form is the taller column, wrong once a
   submit replaces it with a one-line thank-you: a short white strip over the host's bare frame.
   A flex column with the card at flex:1 fills it in both states. (2) The band skin gives every
   card a 24px radius, border and shadow at (0,2,0), which beats the hosts' own (0,1,0) panel
   rules. Where the host already draws the rounded frame and clips it (.leadcap, .cx18-applyband
   __grid, the Islamic product apply card, the IMTIAZ apply grid), that put rounded inner corners
   against the navy panel's square edge. Those slots are listed by their slot class; Contact
   (.cu-grid) and IR (.bcfc-ir-queries__grid) keep a standalone rounded card because their hosts
   leave a gap around it. */
.bcfc-formband--inslot .bcfc-formband__main {
  display: flex;
  flex-direction: column;
}

.bcfc-formband--inslot .bcfc-formband__card {
  flex: 1 1 auto;
}

.bcfc-formband--inslot .bcfc-formband__card:is(.lead-form, .apply-fields, .cx18-applyband__form, .bcfc-islamic-product__apply-form) {
  border: 0;
  border-radius: 0;
  box-shadow: none;
}

/* After a submit without editor success copy the card holds only Forms' "message on submit":
   centre it in the column it now fills, in every arrangement. */
.bcfc-formband__card--submitted {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.bcfc-formband--split .bcfc-formband__main {
  align-content: stretch;
}

/* Some hosts wrap the slot in a plain BLOCK column (.apply-form on the IMTIAZ detail pages): the
   column stretches, but with the band's wrappers at display:contents `__main` is a block child of
   it and cannot. Only once submitted, turn that host into a flex column so the thank-you fills it
   too; the form state, and every other child of the host, is left exactly as it was. Named, not
   generic: an unscoped :has() also turned GRID hosts (.lead-grid, .cu-grid) into a flex column. */
.apply-form:has(> .bcfc-formband--inslot .bcfc-formband__card--submitted) {
  display: flex;
  flex-direction: column;
}

.bcfc-formband--inslot .bcfc-formband__main:has(> .bcfc-formband__card--submitted) {
  flex: 1 1 auto;
}

/* ---- Submitting state (UW-325) ------------------------------------------------------------
   Set by bcfc-forms-busy.js once Forms' own validation has let the post through. Forms' submit
   is an <input type="submit">, which cannot carry a ::before/::after, so the spinner is an
   animated SVG layered over the button's own gradient - restated here because setting
   background-image replaces the whole layer list. The ink is the `white` keyword, matching
   --bcfc-white on these buttons, not a hex literal. It sits at the physical right in both
   cultures: background-position has no logical form and this sheet carries no [dir] blocks.
   The width is pinned by the script before the label changes, so nothing reflows. */
.bcfc-formband .umbraco-forms-form input[type=submit].is-submitting,
.bcfc-formband .umbraco-forms-form button[type=submit].is-submitting {
  cursor: progress;
  padding-inline: 2.75rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9' fill='none' stroke='white' stroke-opacity='.35' stroke-width='3'/%3E%3Cpath d='M21 12a9 9 0 0 0-9-9' fill='none' stroke='white' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='.7s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E"), linear-gradient(135deg, var(--fb-accent) 0%, var(--fb-accent-dark) 100%);
  background-repeat: no-repeat;
  background-position: right 1.1rem center, 0 0;
  background-size: 1.15rem 1.15rem, 100% 100%;
  transform: none;
  box-shadow: none;
}

/* Disabled on the next task (never during the submit event - see the script). It dims rather
   than greys out: the browser's [disabled] default reads as "broken", not "working". */
.bcfc-formband .umbraco-forms-form input[type=submit].is-submitting:disabled,
.bcfc-formband .umbraco-forms-form button[type=submit].is-submitting:disabled {
  opacity: 0.9;
}

/* Reduced motion slows the spinner and never removes it: it is the only sign anything is
   happening. Same SVG, longer `dur`. */
@media (prefers-reduced-motion: reduce) {
  .bcfc-formband .umbraco-forms-form input[type=submit].is-submitting,
  .bcfc-formband .umbraco-forms-form button[type=submit].is-submitting {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='9' fill='none' stroke='white' stroke-opacity='.35' stroke-width='3'/%3E%3Cpath d='M21 12a9 9 0 0 0-9-9' fill='none' stroke='white' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2.2s' repeatCount='indefinite'/%3E%3C/path%3E%3C/svg%3E"), linear-gradient(135deg, var(--fb-accent) 0%, var(--fb-accent-dark) 100%);
  }
}
/* In flight the fields stop taking input: a value edited now is not the one being posted. */
.bcfc-formband form.is-submitting :is(input, select, textarea):not([type=submit]) {
  pointer-events: none;
}

/* ---------------------------------------------------------------- SECTIONED FORMS (UW-378)
   A form whose fieldsets carry a caption (Umbraco Forms renders it as a <legend>) is a long
   application form, not a short enquiry: the card widens and each section lays its fields out in
   a responsive grid, with the long answer, the upload and the consent spanning the full row.
   Scoped with :has() on the LEGEND so every existing single-fieldset form is untouched. */
.bcfc-formband .bcfc-formband__card:has(.umbraco-forms-fieldset > legend) {
  max-width: 60rem;
}

.bcfc-formband .umbraco-forms-fieldset:has(> legend) {
  gap: var(--bcfc-space-4, 1rem);
  padding-block-end: var(--bcfc-space-6, 1.5rem);
}

.bcfc-formband .umbraco-forms-fieldset > legend {
  inline-size: 100%;
  padding-block-end: var(--bcfc-space-2, 0.5rem);
  border-block-end: 2px solid var(--fb-accent);
}

.bcfc-formband .umbraco-forms-fieldset:has(> legend) .umbraco-forms-container {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  column-gap: var(--bcfc-space-5, 1.25rem);
}

.bcfc-formband .umbraco-forms-fieldset:has(> legend) .umbraco-forms-field.longanswer,
.bcfc-formband .umbraco-forms-fieldset:has(> legend) .umbraco-forms-field.fileupload,
.bcfc-formband .umbraco-forms-fieldset:has(> legend) .umbraco-forms-field.dataconsent {
  grid-column: 1/-1;
}
