/* =========================================================================
   Bakazi Foundation — custom theme
   Built on Bootstrap 5.3.8. Everything below is deliberately namespaced with
   a `bf-` prefix so Bootstrap upgrades never collide with the theme.

   Contents
     1.  Tokens
     2.  Base & typography
     3.  Buttons, badges, section headings
     4.  Splash screen
     5.  Header & navigation
     6.  Hero carousel
     7.  Sections: intro, programmes, stats, support, stories
     8.  Sponsor page: donation, children, modal
     9.  About page: timeline, values, team, governance
     10. Contact page: channels, form, map, FAQ
     11. Footer & back-to-top
     12. Animation & motion preferences
   ========================================================================= */

/* ── 1. Tokens ─────────────────────────────────────────────────────────── */

:root {
    /* Brand palette */
    --ink-black:      #03071e;
    --night-bordeaux: #370617;
    --black-cherry:   #6a040f;
    --oxblood:        #9d0208;
    --brick-ember:    #d00000;
    --red-ochre:      #dc2f02;
    --cayenne-red:    #e85d04;
    --deep-saffron:   #f48c06;
    --orange:         #faa307;
    --amber-flame:    #ffba08;

    /* Surfaces */
    --bf-white:     #ffffff;
    --bf-cream:     #fffaf4;
    --bf-sand:      #fdf3e7;
    --bf-line:      rgba(3, 7, 30, .08);
    --bf-line-warm: rgba(157, 2, 8, .12);

    /* Text */
    --bf-text:   #1b1f33;
    --bf-muted:  #5d6377;
    --bf-faint:  #8b91a4;

    /* Gradients */
    --bf-grad-primary: linear-gradient(135deg, #9d0208, #e85d04, #ffba08);
    --bf-grad-deep:    linear-gradient(135deg, #370617, #9d0208);
    --bf-grad-warm:    linear-gradient(135deg, #e85d04, #ffba08);
    --bf-grad-soft:    linear-gradient(135deg, rgba(232, 93, 4, .12), rgba(255, 186, 8, .12));

    /* Shape & depth */
    --bf-radius-sm: 12px;
    --bf-radius:    18px;
    --bf-radius-lg: 24px;
    --bf-shadow-sm: 0 4px 16px rgba(3, 7, 30, .06);
    --bf-shadow:    0 12px 32px rgba(3, 7, 30, .09);
    --bf-shadow-lg: 0 24px 60px rgba(3, 7, 30, .14);
    --bf-shadow-warm: 0 16px 36px rgba(157, 2, 8, .18);

    --bf-ease: cubic-bezier(.22, .8, .3, 1);
    --bf-header-h: 82px;

    /* Bootstrap overrides */
    --bs-primary: #9d0208;
    --bs-body-color: var(--bf-text);
    --bs-body-font-family: 'Lato', system-ui, -apple-system, 'Segoe UI', sans-serif;
    --bs-border-radius: var(--bf-radius-sm);
}

/* ── 2. Base & typography ──────────────────────────────────────────────── */

* { scroll-margin-top: calc(var(--bf-header-h) + 16px); }

html { scroll-behavior: smooth; }

body.bf-page {
    font-family: 'Lato', system-ui, -apple-system, 'Segoe UI', sans-serif;
    color: var(--bf-text);
    background: var(--bf-white);
    font-size: 1.0625rem;
    line-height: 1.7;
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
}

/* Long addresses and email addresses must wrap instead of widening a phone
   viewport. Individual card/grid children are also allowed to shrink. */
.bf-page main,
.bf-page footer,
.bf-page .row > *,
.bf-page [class*="__content"] { min-width: 0; }
.bf-page address,
.bf-page .bf-footer__contact,
.bf-page .bf-offcanvas__contact { overflow-wrap: anywhere; }

h1, h2, h3, h4, h5, h6 {
    font-weight: 900;
    letter-spacing: -.02em;
    line-height: 1.15;
    color: var(--ink-black);
}

h1 { font-size: clamp(2.2rem, 5.2vw, 3.75rem); }
h2 { font-size: clamp(1.85rem, 3.6vw, 2.75rem); }
h3 { font-size: clamp(1.25rem, 2.2vw, 1.6rem); }

p { margin-bottom: 1rem; }

a { color: var(--oxblood); text-decoration: none; transition: color .25s var(--bf-ease); }
a:hover { color: var(--cayenne-red); }

img { max-width: 100%; }

::selection { background: var(--amber-flame); color: var(--ink-black); }

:focus-visible {
    outline: 3px solid var(--cayenne-red);
    outline-offset: 3px;
    border-radius: 4px;
}

.bf-skip-link {
    position: absolute;
    top: -100px;
    left: 1rem;
    z-index: 3000;
    padding: .75rem 1.25rem;
    background: var(--oxblood);
    color: #fff;
    border-radius: 0 0 var(--bf-radius-sm) var(--bf-radius-sm);
    font-weight: 700;
    transition: top .25s var(--bf-ease);
}
.bf-skip-link:focus { top: 0; color: #fff; }

/* Section rhythm */
.bf-section { padding: clamp(4rem, 8vw, 7rem) 0; position: relative; }
.bf-section--tight { padding: clamp(3rem, 5vw, 4.5rem) 0; }
.bf-section--cream { background: var(--bf-cream); }
.bf-section--sand {
    background: linear-gradient(180deg, var(--bf-white), var(--bf-sand) 45%, var(--bf-white));
}

.bf-lead {
    font-size: clamp(1.05rem, 1.6vw, 1.2rem);
    color: var(--bf-muted);
    line-height: 1.8;
}

.bf-measure { max-width: 62ch; }

/* ── 3. Buttons, badges, section headings ──────────────────────────────── */

.bf-btn {
    --bf-btn-pad: .85rem 1.9rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .55rem;
    padding: var(--bf-btn-pad);
    border: 0;
    border-radius: 999px;
    font-weight: 700;
    font-size: .98rem;
    letter-spacing: .01em;
    line-height: 1.2;
    cursor: pointer;
    position: relative;
    isolation: isolate;
    overflow: hidden;
    transition: transform .3s var(--bf-ease), box-shadow .3s var(--bf-ease), color .3s var(--bf-ease);
}

.bf-btn--sm { --bf-btn-pad: .62rem 1.35rem; font-size: .92rem; }
.bf-btn--lg { --bf-btn-pad: 1rem 2.35rem; font-size: 1.05rem; }

.bf-btn--primary {
    background: var(--bf-grad-primary);
    background-size: 200% 100%;
    color: #fff;
    box-shadow: var(--bf-shadow-warm);
}
.bf-btn--primary:hover,
.bf-btn--primary:focus-visible {
    color: #fff;
    background-position: 100% 0;
    transform: translateY(-3px);
    box-shadow: 0 20px 44px rgba(157, 2, 8, .3);
}

.bf-btn--deep {
    background: var(--bf-grad-deep);
    color: #fff;
    box-shadow: 0 14px 30px rgba(55, 6, 23, .28);
}
.bf-btn--deep:hover { color: #fff; transform: translateY(-3px); }

.bf-btn--outline {
    background: transparent;
    color: var(--oxblood);
    box-shadow: inset 0 0 0 2px rgba(157, 2, 8, .35);
}
.bf-btn--outline:hover {
    color: #fff;
    background: var(--bf-grad-deep);
    box-shadow: 0 14px 30px rgba(55, 6, 23, .24);
    transform: translateY(-3px);
}

.bf-btn--ghost {
    background: rgba(255, 255, 255, .14);
    color: #fff;
    backdrop-filter: blur(10px);
    box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, .55);
}
.bf-btn--ghost:hover {
    color: var(--ink-black);
    background: #fff;
    transform: translateY(-3px);
}

.bf-btn__icon { transition: transform .3s var(--bf-ease); }
.bf-btn:hover .bf-btn__icon { transform: translateX(4px); }

/* Section label chip */
.bf-label {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    padding: .42rem 1.05rem;
    border-radius: 999px;
    background: var(--bf-grad-soft);
    color: var(--black-cherry);
    font-size: .78rem;
    font-weight: 900;
    letter-spacing: .14em;
    text-transform: uppercase;
    margin-bottom: 1.1rem;
    box-shadow: inset 0 0 0 1px var(--bf-line-warm);
}
.bf-label::before {
    content: "";
    width: 20px;
    height: 3px;
    border-radius: 2px;
    background: var(--bf-grad-primary);
}
.bf-label--light {
    background: rgba(255, 255, 255, .16);
    color: var(--amber-flame);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .28);
    backdrop-filter: blur(8px);
}
.bf-label--light::before { background: var(--amber-flame); }

.bf-heading-block { max-width: 46rem; }
.bf-heading-block--center { margin-inline: auto; text-align: center; }

.bf-grad-text {
    background: var(--bf-grad-primary);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.bf-badge {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    padding: .32rem .8rem;
    border-radius: 999px;
    font-size: .74rem;
    font-weight: 900;
    letter-spacing: .06em;
    text-transform: uppercase;
}
.bf-badge--open {
    background: linear-gradient(135deg, #08783f 0%, #18a85f 100%);
    color: #fff;
    box-shadow: 0 7px 18px rgba(8, 120, 63, .28);
}
.bf-badge--partial { background: rgba(255, 186, 8, .22); color: #7a4a00; }
.bf-badge--full    { background: rgba(20, 120, 70, .13); color: #14663f; }

/* Glass card base */
.bf-card {
    position: relative;
    background: rgba(255, 255, 255, .78);
    backdrop-filter: blur(14px);
    border: 1px solid var(--bf-line);
    border-radius: var(--bf-radius-lg);
    box-shadow: var(--bf-shadow-sm);
    transition: transform .4s var(--bf-ease), box-shadow .4s var(--bf-ease), border-color .4s var(--bf-ease);
    height: 100%;
}
.bf-card:hover {
    transform: translateY(-8px);
    box-shadow: var(--bf-shadow-lg);
    border-color: var(--bf-line-warm);
}

.bf-icon-badge {
    display: grid;
    place-items: center;
    width: 62px;
    height: 62px;
    border-radius: var(--bf-radius);
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 1.6rem;
    box-shadow: var(--bf-shadow-warm);
    flex: 0 0 auto;
}
.bf-icon-badge--soft {
    background: var(--bf-grad-soft);
    color: var(--oxblood);
    box-shadow: inset 0 0 0 1px var(--bf-line-warm);
}

/* Media frames keep every image on a fixed ratio */
.bf-media {
    position: relative;
    overflow: hidden;
    border-radius: var(--bf-radius);
    background: var(--bf-sand);
}
.bf-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .8s var(--bf-ease);
}
.bf-media--4x3 { aspect-ratio: 4 / 3; }
.bf-media--1x1 { aspect-ratio: 1 / 1; }
.bf-media--3x4 { aspect-ratio: 3 / 4; }
.bf-media--16x9 { aspect-ratio: 16 / 9; }
a:hover .bf-media img,
.bf-card:hover .bf-media img { transform: scale(1.07); }

/* ── 4. Splash screen ──────────────────────────────────────────────────── */

.bf-splash {
    position: fixed;
    inset: 0;
    z-index: 4000;
    display: grid;
    place-items: center;
    background: radial-gradient(circle at 50% 40%, #370617 0%, #03071e 70%);
    transition: opacity .6s var(--bf-ease), visibility .6s var(--bf-ease);
}
.bf-splash.is-hidden { opacity: 0; visibility: hidden; pointer-events: none; }

.bf-splash__inner { text-align: center; padding: 2rem; }

.bf-splash__logo {
    width: min(190px, 52vw);
    height: auto;
    margin: 0 auto 1.5rem;
    display: block;
    animation: bfMarkPulse 2.4s var(--bf-ease) infinite;
}

.bf-splash__tagline {
    color: rgba(255, 255, 255, .62);
    font-size: .95rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    margin-bottom: 2rem;
    animation: bfFadeUp .8s .15s var(--bf-ease) both;
}
.bf-splash__bar {
    width: 210px;
    height: 4px;
    margin: 0 auto;
    border-radius: 999px;
    background: rgba(255, 255, 255, .12);
    overflow: hidden;
}
/* A real 0-100% progress fill. The width is driven from JavaScript rather than
   a CSS keyframe, so it reports actual elapsed loading time and still runs when
   the prefers-reduced-motion rules below neutralise CSS animations. */
.bf-splash__bar span {
    display: block;
    height: 100%;
    width: 0;
    border-radius: 999px;
    background: var(--bf-grad-primary);
}

@keyframes bfMarkPulse {
    0%, 100% { transform: scale(1); opacity: 1; }
    50%      { transform: scale(1.08); opacity: .85; }
}

/* ── 5. Header & navigation ────────────────────────────────────────────── */

.bf-header {
    position: sticky;
    top: 0;
    z-index: 1030;
    background: rgba(255, 255, 255, .82);
    backdrop-filter: blur(16px);
    border-bottom: 1px solid transparent;
    transition: box-shadow .35s var(--bf-ease), background .35s var(--bf-ease), border-color .35s var(--bf-ease);
}
.bf-header.is-scrolled {
    background: rgba(255, 255, 255, .94);
    border-bottom-color: var(--bf-line);
    box-shadow: 0 8px 30px rgba(3, 7, 30, .08);
}

.bf-navbar { padding-block: .85rem; min-height: var(--bf-header-h); }

.bf-brand {
    display: inline-flex;
    align-items: center;
    gap: .8rem;
    padding: 0;
}
/* Real logo. The full lockup is portrait and its wordmark would be illegible
   in an 82px header bar, so the header uses the emblem only and keeps the
   organisation name as live text beside it. */
.bf-brand__logo {
    height: 46px;
    width: auto;
    display: block;
    flex: 0 0 auto;
    transition: transform .4s var(--bf-ease);
}
.bf-brand:hover .bf-brand__logo { transform: rotate(-4deg) scale(1.05); }
.bf-brand__logo--sm { height: 34px; }

.bf-brand__text { display: flex; flex-direction: column; line-height: 1.15; }
.bf-brand__name {
    font-weight: 900;
    font-size: 1.16rem;
    color: var(--ink-black);
    letter-spacing: -.02em;
}
.bf-brand__tagline {
    font-size: .66rem;
    letter-spacing: .17em;
    text-transform: uppercase;
    color: var(--bf-faint);
    font-weight: 700;
}

.bf-nav { gap: .35rem; }
.bf-nav__link {
    position: relative;
    padding: .55rem 1.05rem !important;
    font-weight: 700;
    font-size: .98rem;
    color: var(--bf-text) !important;
    border-radius: 999px;
    transition: color .3s var(--bf-ease), background .3s var(--bf-ease);
}
.bf-nav__link::after {
    content: "";
    position: absolute;
    left: 1.05rem;
    right: 1.05rem;
    bottom: .3rem;
    height: 3px;
    border-radius: 2px;
    background: var(--bf-grad-primary);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .35s var(--bf-ease);
}
.bf-nav__link:hover::after,
.bf-nav__link:focus-visible::after { transform: scaleX(1); }
.bf-nav__link:hover { color: var(--oxblood) !important; }
.bf-nav__link.active {
    color: var(--oxblood) !important;
    background: var(--bf-grad-soft);
}
.bf-nav__link.active::after { transform: scaleX(1); }

.bf-toggler {
    border: 0;
    padding: .55rem;
    display: flex;
    flex-direction: column;
    gap: 5px;
    box-shadow: none !important;
}
.bf-toggler__bar {
    display: block;
    width: 26px;
    height: 2.5px;
    border-radius: 2px;
    background: var(--ink-black);
    transition: transform .3s var(--bf-ease), opacity .3s var(--bf-ease);
}
.bf-toggler:hover .bf-toggler__bar:nth-child(1) { transform: translateX(3px); }
.bf-toggler:hover .bf-toggler__bar:nth-child(3) { transform: translateX(-3px); }

/* Offcanvas */
.bf-offcanvas { width: min(360px, 88vw); border: 0; background: var(--bf-cream); }
.bf-offcanvas .offcanvas-header { padding: 1.4rem 1.5rem; border-bottom: 1px solid var(--bf-line); }
.bf-offcanvas__title {
    display: flex;
    align-items: center;
    gap: .7rem;
    font-size: 1.06rem;
    font-weight: 900;
    margin: 0;
}
.bf-offcanvas .offcanvas-body { padding: 1.5rem; }

.bf-offcanvas__nav { gap: .2rem; }
.bf-offcanvas__link {
    display: flex !important;
    align-items: center;
    justify-content: space-between;
    padding: .9rem 1.1rem !important;
    border-radius: var(--bf-radius-sm);
    font-weight: 700;
    color: var(--bf-text) !important;
    transition: background .3s var(--bf-ease), color .3s var(--bf-ease), transform .3s var(--bf-ease);
}
.bf-offcanvas__link i { font-size: .8rem; opacity: .4; transition: transform .3s var(--bf-ease); }
.bf-offcanvas__link:hover { background: #fff; transform: translateX(4px); }
.bf-offcanvas__link:hover i { transform: translateX(3px); opacity: 1; }
.bf-offcanvas__link.active {
    background: var(--bf-grad-primary);
    color: #fff !important;
    box-shadow: var(--bf-shadow-warm);
}
.bf-offcanvas__link.active i { opacity: 1; }

.bf-offcanvas__contact {
    margin-top: 2.25rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--bf-line);
    display: flex;
    flex-direction: column;
    gap: .55rem;
}
.bf-offcanvas__label {
    font-size: .72rem;
    font-weight: 900;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--bf-faint);
    margin-bottom: .3rem;
}
.bf-offcanvas__contact a { color: var(--bf-muted); font-size: .95rem; font-weight: 600; }
.bf-offcanvas__contact a:hover { color: var(--oxblood); }
.bf-offcanvas__socials { display: flex; gap: .5rem; margin-top: .9rem; }
.bf-offcanvas__socials a {
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    border-radius: 12px;
    background: #fff;
    color: var(--oxblood);
    box-shadow: var(--bf-shadow-sm);
    transition: transform .3s var(--bf-ease), background .3s var(--bf-ease), color .3s var(--bf-ease);
}
.bf-offcanvas__socials a:hover {
    background: var(--bf-grad-primary);
    color: #fff;
    transform: translateY(-3px);
}

/* ── 6. Hero carousel ──────────────────────────────────────────────────── */

.bf-hero { position: relative; }
.bf-hero__carousel { position: relative; }

.bf-hero__slide {
    position: relative;
    min-height: clamp(560px, 82vh, 820px);
    display: flex;
    align-items: center;
}
.bf-hero__media { position: absolute; inset: 0; overflow: hidden; }
.bf-hero__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Never sit at exactly 1 — a hair of scale hides sub-pixel edge gaps.
       Matches the starting frame of bfKenBurnsIn so there is no jump. */
    transform: scale(1.03);
}

/* ── Ken Burns: the slow zoom across each still image ──────────────────
   Slides alternate direction so the motion never feels repetitive: odd
   slides push in, even slides pull back. Swap the two keyframe names below
   to reverse that, or set both to the same one for a uniform direction.

   The animation is attached to the incoming slide (`carousel-item-next`)
   as well as the active one. With carousel-fade Bootstrap only adds
   `.active` AFTER the crossfade finishes, so keying it to `.active` alone
   would leave the image frozen for the whole fade and then jerk into
   motion. Because all three selectors resolve to the same animation, the
   class change mid-flight does not restart it. */
.bf-hero__carousel .carousel-item                 { --bf-ken-burns: bfKenBurnsIn; }
.bf-hero__carousel .carousel-item:nth-child(even) { --bf-ken-burns: bfKenBurnsOut; }

.bf-hero__carousel .carousel-item.active .bf-hero__media img,
.bf-hero__carousel .carousel-item-next .bf-hero__media img,
.bf-hero__carousel .carousel-item-prev .bf-hero__media img {
    /* Written as longhands, not the `animation` shorthand: one unresolved
       var() in a shorthand invalidates the WHOLE declaration and the effect
       silently disappears. The fallback keeps it running regardless. */
    animation-name: var(--bf-ken-burns, bfKenBurnsIn);

    /* Matched to how long a slide is actually on screen — 6s interval plus
       the 0.9s crossfade — so the image is still moving at the handover
       instead of sitting frozen for the back half of every slide. */
    animation-duration: 7s;

    /* LINEAR is the whole trick. Any eased curve front-loads the travel and
       then crawls, and a crawl across a full-bleed photo with no reference
       edge reads as a still image. Constant speed stays perceptible. */
    animation-timing-function: linear;
    animation-fill-mode: forwards;
}

/* Scale travel + a small pan. Panning is far more noticeable than scaling
   alone, because the image moves against the fixed edges of the frame.
   Tune the effect here: raise 1.20 for more zoom, lower it for less. */
@keyframes bfKenBurnsIn {
    from { transform: scale(1.03) translate3d(0, 0, 0); }
    to   { transform: scale(1.20) translate3d(-2%, -1.2%, 0); }
}
@keyframes bfKenBurnsOut {
    from { transform: scale(1.20) translate3d(2%, 1.2%, 0); }
    to   { transform: scale(1.03) translate3d(0, 0, 0); }
}

.bf-hero__overlay {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(100deg, rgba(3, 7, 30, .93) 0%, rgba(55, 6, 23, .78) 38%, rgba(106, 4, 15, .38) 66%, rgba(157, 2, 8, .12) 100%),
        linear-gradient(0deg, rgba(3, 7, 30, .58), transparent 55%);
}
.bf-hero__overlay::after {
    content: "";
    position: absolute;
    inset: 0;
    background: radial-gradient(60% 70% at 82% 30%, rgba(255, 186, 8, .22), transparent 70%);
    mix-blend-mode: screen;
}

.bf-hero__content {
    position: relative;
    z-index: 2;
    max-width: 41rem;
    padding-block: 6rem 7rem;
    color: #fff;
}
.bf-hero__title {
    color: #fff;
    margin-bottom: 1.15rem;
    text-shadow: 0 6px 34px rgba(3, 7, 30, .45);
}
.bf-hero__title em {
    font-style: normal;
    background: linear-gradient(120deg, var(--amber-flame), var(--cayenne-red));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.bf-hero__text {
    font-size: clamp(1.03rem, 1.5vw, 1.2rem);
    color: rgba(255, 255, 255, .87);
    max-width: 34rem;
    margin-bottom: 2rem;
}
.bf-hero__actions { display: flex; flex-wrap: wrap; gap: .85rem; }

/* Staggered text entrance, replayed on every slide change */
.bf-hero__anim { opacity: 0; transform: translateY(26px); }
.carousel-item.active .bf-hero__anim {
    animation: bfHeroIn .9s var(--bf-ease) forwards;
}
.carousel-item.active .bf-hero__anim:nth-child(1) { animation-delay: .18s; }
.carousel-item.active .bf-hero__anim:nth-child(2) { animation-delay: .3s; }
.carousel-item.active .bf-hero__anim:nth-child(3) { animation-delay: .42s; }
.carousel-item.active .bf-hero__anim:nth-child(4) { animation-delay: .54s; }

@keyframes bfHeroIn { to { opacity: 1; transform: translateY(0); } }

/* Crossfade instead of slide.
   Bootstrap fades the incoming slide in on top while holding the outgoing one
   at full opacity underneath, then drops it instantly via
   `.carousel-fade .active.carousel-item-start { transition: opacity 0s .6s }`.
   Both halves must use the SAME duration — override only the incoming side and
   the outgoing slide disappears part-way through the fade, flashing the page
   background and making the carousel look stuck. */
.bf-hero__carousel .carousel-item {
    transition-property: opacity;
    transition-duration: .9s;
    transition-timing-function: var(--bf-ease);
}
.bf-hero__carousel .active.carousel-item-start,
.bf-hero__carousel .active.carousel-item-end {
    transition: opacity 0s .9s;
}

.bf-hero__nav {
    width: 54px;
    height: 54px;
    top: auto;
    bottom: 2.6rem;
    opacity: 1;
    border-radius: 50%;
    background: rgba(255, 255, 255, .12);
    backdrop-filter: blur(10px);
    border: 1.5px solid rgba(255, 255, 255, .38);
    display: grid;
    place-items: center;
    transition: background .3s var(--bf-ease), transform .3s var(--bf-ease), border-color .3s var(--bf-ease);
}
.bf-hero__nav:hover {
    background: var(--bf-grad-primary);
    border-color: transparent;
    transform: scale(1.08);
}
.bf-hero__nav i { font-size: 1.35rem; color: #fff; }
.carousel-control-prev.bf-hero__nav { left: auto; right: 6.4rem; }
.carousel-control-next.bf-hero__nav { right: 2.6rem; }

/* The indicator row is also a .container, so it lines up with the hero copy */
.bf-hero__indicators {
    bottom: 3.4rem;
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
    justify-content: flex-start;
    gap: .5rem;
    padding-left: calc(var(--bs-gutter-x, 1.5rem) * .5);
    padding-right: calc(var(--bs-gutter-x, 1.5rem) * .5);
}
.bf-hero__indicators button {
    width: 42px;
    height: 4px;
    border-radius: 999px;
    background: rgba(255, 255, 255, .3);
    border: 0;
    opacity: 1;
    overflow: hidden;
    position: relative;
    transition: width .35s var(--bf-ease);
}
.bf-hero__indicators button.active { width: 76px; background: rgba(255, 255, 255, .28); }
.bf-hero__indicators button.active::after {
    content: "";
    position: absolute;
    inset: 0;
    background: var(--bf-grad-warm);
    border-radius: 999px;
    transform-origin: left;
    animation: bfIndicator 6s linear forwards;
}
.bf-hero__carousel.is-paused .bf-hero__indicators button.active::after { animation-play-state: paused; }

@keyframes bfIndicator { from { transform: scaleX(0); } to { transform: scaleX(1); } }

/* Floating stat strip beneath the hero */
.bf-hero__strip {
    position: relative;
    z-index: 5;
    margin-top: -3.5rem;
}
.bf-hero__strip-inner {
    background: rgba(255, 255, 255, .9);
    backdrop-filter: blur(18px);
    border: 1px solid var(--bf-line);
    border-radius: var(--bf-radius-lg);
    box-shadow: var(--bf-shadow-lg);
    padding: 1.75rem clamp(1.25rem, 3vw, 2.5rem);
}
.bf-hero__strip-item { display: flex; align-items: center; gap: .95rem; }
.bf-hero__strip-item i {
    font-size: 1.65rem;
    background: var(--bf-grad-primary);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.bf-hero__strip-value { font-size: 1.5rem; font-weight: 900; line-height: 1.1; color: var(--ink-black); }
.bf-hero__strip-label { font-size: .82rem; color: var(--bf-muted); font-weight: 700; }

/* ── 7. Sections ───────────────────────────────────────────────────────── */

/* Intro / mission */
.bf-intro__visual { position: relative; }
.bf-intro__media {
    width: 62.25%;
    margin-inline: auto;
    border: 1px solid rgba(255, 255, 255, .8);
    border-radius: var(--bf-radius-lg);
    box-shadow: 0 30px 65px rgba(3, 7, 30, .18), 0 8px 20px rgba(3, 7, 30, .1);
}
.bf-intro__media img { height: auto; }

@media (min-width: 992px) {
    .bf-intro__visual-column {
        position: relative;
        min-height: 0;
    }
    .bf-intro__visual {
        position: absolute;
        inset-block: 0;
        left: 50%;
        height: 100%;
        width: auto;
        aspect-ratio: 2 / 3;
        transform: translateX(-50%);
    }
    .bf-intro__media {
        width: 100%;
        height: 100%;
        margin-inline: 0;
    }
    .bf-intro__media img {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
}

.bf-intro__badge {
    position: absolute;
    right: -.5rem;
    bottom: -1.5rem;
    background: var(--bf-grad-deep);
    color: #fff;
    border-radius: var(--bf-radius);
    padding: 1.15rem 1.4rem;
    box-shadow: var(--bf-shadow-lg);
    display: flex;
    align-items: center;
    gap: .85rem;
    max-width: 15rem;
}
.bf-intro__badge i { font-size: 1.8rem; color: var(--amber-flame); }
.bf-intro__badge strong { display: block; font-size: 1.4rem; line-height: 1.1; }
.bf-intro__badge span { font-size: .8rem; color: rgba(255, 255, 255, .72); }

.bf-mission-list { list-style: none; padding: 0; margin: 1.75rem 0 0; display: grid; gap: 1rem; }
.bf-mission-list li { display: flex; gap: .9rem; align-items: flex-start; }
.bf-mission-list i {
    color: var(--cayenne-red);
    font-size: 1.15rem;
    margin-top: .28rem;
    flex: 0 0 auto;
}
.bf-mission-list strong { display: block; color: var(--ink-black); }
.bf-mission-list span { color: var(--bf-muted); font-size: .96rem; }

/* Programmes */
.bf-program {
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
.bf-program__media { aspect-ratio: 16 / 10; border-radius: 0; }
.bf-program__media::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 40%, rgba(3, 7, 30, .72));
}
.bf-program__icon {
    position: absolute;
    left: 1.25rem;
    bottom: 1.25rem;
    z-index: 2;
    width: 52px;
    height: 52px;
    border-radius: 15px;
    display: grid;
    place-items: center;
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 1.35rem;
    box-shadow: var(--bf-shadow-warm);
}
.bf-program__stat {
    position: absolute;
    right: 1.25rem;
    bottom: 1.45rem;
    z-index: 2;
    color: #fff;
    font-size: .82rem;
    font-weight: 900;
    letter-spacing: .04em;
    text-shadow: 0 2px 10px rgba(0, 0, 0, .5);
}
.bf-program__body { padding: 1.6rem 1.5rem 1.75rem; display: flex; flex-direction: column; flex: 1; }
.bf-program__title { font-size: 1.3rem; margin-bottom: .55rem; }
.bf-program__text { color: var(--bf-muted); font-size: .97rem; margin-bottom: 1.1rem; }
.bf-program__points { list-style: none; padding: 0; margin: 0 0 1.25rem; display: grid; gap: .45rem; }
.bf-program__points li {
    display: flex;
    gap: .55rem;
    align-items: flex-start;
    font-size: .92rem;
    color: var(--bf-muted);
}
.bf-program__points i { color: var(--deep-saffron); font-size: .85rem; margin-top: .33rem; }
.bf-program__link {
    margin-top: auto;
    font-weight: 800;
    font-size: .92rem;
    display: inline-flex;
    align-items: center;
    gap: .4rem;
}
.bf-program__link i { transition: transform .3s var(--bf-ease); }
.bf-program__link:hover i { transform: translateX(4px); }

/* Impact statistics */
.bf-impact {
    position: relative;
    background: var(--bf-grad-deep);
    color: #fff;
    overflow: hidden;
}
.bf-impact::before,
.bf-impact::after {
    content: "";
    position: absolute;
    border-radius: 50%;
    filter: blur(70px);
    pointer-events: none;
}
.bf-impact::before {
    width: 480px; height: 480px;
    top: -180px; right: -120px;
    background: radial-gradient(circle, rgba(255, 186, 8, .28), transparent 68%);
}
.bf-impact::after {
    width: 420px; height: 420px;
    bottom: -200px; left: -140px;
    background: radial-gradient(circle, rgba(232, 93, 4, .3), transparent 68%);
}
.bf-impact .container { position: relative; z-index: 2; }
.bf-impact h2 { color: #fff; }
.bf-impact .bf-lead { color: rgba(255, 255, 255, .74); }

.bf-stat {
    text-align: center;
    padding: 2rem 1.25rem;
    border-radius: var(--bf-radius-lg);
    background: rgba(255, 255, 255, .06);
    border: 1px solid rgba(255, 255, 255, .12);
    backdrop-filter: blur(12px);
    height: 100%;
    transition: transform .4s var(--bf-ease), background .4s var(--bf-ease);
}
.bf-stat:hover { transform: translateY(-8px); background: rgba(255, 255, 255, .1); }
.bf-stat__icon {
    font-size: 1.9rem;
    background: var(--bf-grad-warm);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    margin-bottom: .65rem;
    display: block;
}
.bf-stat__value {
    /* The vw term matters: these counters hold unbreakable strings like
       "184,000+" and sit two-up on phones. A fixed 2.1rem floor overflowed
       the card at every phone width. */
    font-size: clamp(1.375rem, 6.5vw, 2.9rem);
    font-weight: 900;
    line-height: 1;
    letter-spacing: -.03em;
    background: linear-gradient(120deg, #fff 30%, var(--amber-flame));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.bf-stat__label {
    margin-top: .55rem;
    font-size: .9rem;
    color: rgba(255, 255, 255, .72);
    font-weight: 700;
    letter-spacing: .03em;
}
.bf-stat--light {
    background: rgba(255, 255, 255, .75);
    border-color: var(--bf-line);
    box-shadow: var(--bf-shadow-sm);
}
.bf-stat--light .bf-stat__value {
    background: var(--bf-grad-primary);
    -webkit-background-clip: text;
    background-clip: text;
}
.bf-stat--light .bf-stat__label { color: var(--bf-muted); }
.bf-stat--light .bf-stat__icon { background: var(--bf-grad-primary); -webkit-background-clip: text; background-clip: text; }

.bf-impact-gallery { position: relative; padding-bottom: 3.25rem; }
.bf-impact-gallery__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(.65rem, 2vw, 1.4rem);
}
.bf-impact-gallery__frame {
    position: relative;
    overflow: hidden;
    aspect-ratio: 3 / 2;
    margin: 0;
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: var(--bf-radius-lg);
    background: rgba(255, 255, 255, .08);
    box-shadow: 0 24px 55px rgba(3, 7, 30, .3);
}
.bf-impact-gallery__frame::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 65%, rgba(3, 7, 30, .2));
    pointer-events: none;
}
.bf-impact-gallery__frame img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: cover;
    transition: opacity .32s var(--bf-ease), transform .45s var(--bf-ease);
}
.bf-impact-gallery__frame.is-changing img { opacity: 0; transform: scale(.985); }
.bf-impact-gallery__toggle {
    position: absolute;
    left: 50%;
    bottom: 0;
    transform: translateX(-50%);
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    padding: .55rem .9rem;
    border: 1px solid rgba(255, 255, 255, .2);
    border-radius: 999px;
    background: rgba(255, 255, 255, .1);
    color: rgba(255, 255, 255, .86);
    font: inherit;
    font-size: .78rem;
    font-weight: 800;
    backdrop-filter: blur(12px);
    transition: background .25s var(--bf-ease), color .25s var(--bf-ease);
}
.bf-impact-gallery__toggle:hover,
.bf-impact-gallery__toggle:focus-visible { background: #fff; color: var(--oxblood); }

@media (prefers-reduced-motion: reduce) {
    .bf-impact-gallery__frame img { transition: none; }
}

/* Support cards */
.bf-support {
    padding: 2rem 1.6rem;
    text-align: left;
    position: relative;
    overflow: hidden;
}
.bf-support::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 4px;
    background: var(--bf-grad-primary);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .45s var(--bf-ease);
}
.bf-support:hover::before { transform: scaleX(1); }
.bf-support__amount {
    font-size: 2.1rem;
    font-weight: 900;
    letter-spacing: -.03em;
    background: var(--bf-grad-primary);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    line-height: 1;
}
.bf-support__title { font-size: 1.1rem; margin: .9rem 0 .5rem; }
.bf-support__text { font-size: .94rem; color: var(--bf-muted); margin: 0; }
.bf-support__icon { font-size: 1.5rem; color: var(--deep-saffron); margin-bottom: 1rem; display: block; }

/* Stories */
.bf-story { overflow: hidden; display: flex; flex-direction: column; }
.bf-story__media { border-radius: 0; aspect-ratio: 4 / 3; }
.bf-story__tag {
    position: absolute;
    top: 1rem;
    left: 1rem;
    z-index: 2;
    background: rgba(255, 255, 255, .92);
    backdrop-filter: blur(8px);
    color: var(--black-cherry);
    padding: .35rem .85rem;
    border-radius: 999px;
    font-size: .74rem;
    font-weight: 900;
    letter-spacing: .05em;
    text-transform: uppercase;
}
.bf-story__body { padding: 1.6rem 1.5rem 1.75rem; display: flex; flex-direction: column; flex: 1; }
.bf-story__name { font-size: 1.25rem; margin-bottom: .1rem; }
.bf-story__meta { font-size: .84rem; color: var(--bf-faint); font-weight: 700; margin-bottom: .85rem; }
.bf-story__intro { color: var(--bf-muted); font-size: .97rem; margin-bottom: 1.1rem; }
.bf-story__outcome {
    display: flex;
    gap: .6rem;
    align-items: flex-start;
    padding: .8rem 1rem;
    border-radius: var(--bf-radius-sm);
    background: var(--bf-grad-soft);
    font-size: .9rem;
    font-weight: 700;
    color: var(--black-cherry);
    margin-bottom: 1.25rem;
}
.bf-story__outcome i { margin-top: .18rem; color: var(--cayenne-red); }
.bf-story__btn { margin-top: auto; align-self: flex-start; }

/* Story modal */
.bf-story-modal__hero { position: relative; aspect-ratio: 21 / 9; overflow: hidden; }
.bf-story-modal__hero img { width: 100%; height: 100%; object-fit: cover; }
.bf-story-modal__hero::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 30%, rgba(3, 7, 30, .85));
}
.bf-story-modal__hero-text {
    position: absolute;
    left: clamp(1.25rem, 4vw, 2.25rem);
    bottom: clamp(1.25rem, 3vw, 1.75rem);
    z-index: 2;
    color: #fff;
}
.bf-story-modal__hero-text h3 { color: #fff; font-size: clamp(1.5rem, 3vw, 2.1rem); margin: .4rem 0 0; }
.bf-story-modal__body { padding: clamp(1.5rem, 4vw, 2.4rem); }
.bf-story-modal__body p { color: var(--bf-muted); }
.bf-story-modal__body p:first-of-type {
    font-size: 1.1rem;
    color: var(--bf-text);
    font-weight: 400;
}

/* CTA band */
.bf-cta {
    position: relative;
    overflow: hidden;
    border-radius: var(--bf-radius-lg);
    background: var(--bf-grad-deep);
    color: #fff;
    padding: clamp(2.5rem, 6vw, 4.25rem);
}
.bf-cta::before {
    content: "";
    position: absolute;
    width: 520px; height: 520px;
    top: -220px; right: -120px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 186, 8, .32), transparent 68%);
    filter: blur(60px);
}
.bf-cta::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        radial-gradient(circle at 18% 82%, rgba(232, 93, 4, .26), transparent 46%);
}
.bf-cta > * { position: relative; z-index: 2; }
.bf-cta h2 { color: #fff; }
.bf-cta p { color: rgba(255, 255, 255, .8); }

.bf-cta--image {
    background:
        linear-gradient(105deg, rgba(3, 7, 30, .94) 0%, rgba(106, 4, 15, .82) 52%, rgba(157, 2, 8, .55) 100%),
        var(--bf-cta-image, none) center / cover no-repeat;
}

/* ── 8. Sponsor page ───────────────────────────────────────────────────── */

/* Compact page hero used by inner pages */
.bf-pagehero {
    position: relative;
    overflow: hidden;
    color: #fff;
    padding: clamp(5rem, 12vw, 8.5rem) 0 clamp(3.5rem, 7vw, 5.5rem);
}
.bf-pagehero__media { position: absolute; inset: 0; }
.bf-pagehero__media img { width: 100%; height: 100%; object-fit: cover; }
.bf-pagehero__media::after {
    content: "";
    position: absolute;
    inset: 0;
    background:
        linear-gradient(100deg, rgba(3, 7, 30, .95) 0%, rgba(55, 6, 23, .84) 45%, rgba(157, 2, 8, .45) 100%),
        radial-gradient(70% 90% at 88% 20%, rgba(255, 186, 8, .24), transparent 70%);
}
.bf-pagehero__content { position: relative; z-index: 2; max-width: 44rem; }
.bf-pagehero h1 { color: #fff; }
.bf-pagehero p { color: rgba(255, 255, 255, .84); }
.bf-pagehero .breadcrumb { margin-bottom: 1.25rem; }
.bf-pagehero .breadcrumb-item,
.bf-pagehero .breadcrumb-item a { color: rgba(255, 255, 255, .68); font-size: .88rem; font-weight: 700; }
.bf-pagehero .breadcrumb-item a:hover { color: var(--amber-flame); }
.bf-pagehero .breadcrumb-item.active { color: var(--amber-flame); }
.bf-pagehero .breadcrumb-item + .breadcrumb-item::before { color: rgba(255, 255, 255, .35); }

/* Donation panel */
.bf-donate-panel {
    background: #fff;
    border: 1px solid var(--bf-line);
    border-radius: var(--bf-radius-lg);
    box-shadow: var(--bf-shadow-lg);
    overflow: hidden;
}
.bf-donate-panel__head { padding: 1.5rem clamp(1.25rem, 3vw, 2rem) 0; }

.bf-tabs { border: 0; gap: .5rem; background: var(--bf-sand); padding: .4rem; border-radius: 999px; }
.bf-tabs .nav-link {
    flex: 1;
    border: 0;
    border-radius: 999px;
    padding: .72rem 1.25rem;
    font-weight: 800;
    font-size: .95rem;
    color: var(--bf-muted);
    transition: all .35s var(--bf-ease);
}
.bf-tabs .nav-link:hover { color: var(--oxblood); }
.bf-tabs .nav-link.active {
    background: var(--bf-grad-primary);
    color: #fff;
    box-shadow: var(--bf-shadow-warm);
}

.bf-amounts { display: grid; grid-template-columns: repeat(2, 1fr); gap: .75rem; }
@media (min-width: 576px) { .bf-amounts { grid-template-columns: repeat(4, 1fr); } }

.bf-amount { position: relative; }
.bf-amount input { position: absolute; opacity: 0; width: 0; height: 0; }
.bf-amount label {
    display: block;
    width: 100%;
    padding: 1rem .6rem;
    text-align: center;
    border-radius: var(--bf-radius);
    border: 2px solid var(--bf-line);
    background: #fff;
    cursor: pointer;
    font-weight: 900;
    font-size: 1.3rem;
    color: var(--ink-black);
    transition: all .3s var(--bf-ease);
}
.bf-amount label small {
    display: block;
    font-size: .7rem;
    font-weight: 700;
    color: var(--bf-faint);
    letter-spacing: .04em;
    text-transform: uppercase;
    margin-top: .2rem;
}
.bf-amount label:hover { border-color: rgba(232, 93, 4, .45); transform: translateY(-3px); }
.bf-amount input:checked + label {
    border-color: transparent;
    background: var(--bf-grad-primary);
    color: #fff;
    box-shadow: var(--bf-shadow-warm);
}
.bf-amount input:checked + label small { color: rgba(255, 255, 255, .82); }
.bf-amount input:focus-visible + label { outline: 3px solid var(--cayenne-red); outline-offset: 3px; }

.bf-amount-note {
    margin-top: 1rem;
    padding: .95rem 1.15rem;
    border-radius: var(--bf-radius-sm);
    background: var(--bf-grad-soft);
    color: var(--black-cherry);
    font-weight: 700;
    font-size: .94rem;
    display: flex;
    gap: .65rem;
    align-items: flex-start;
}
.bf-amount-note i { margin-top: .2rem; }

/* Donation summary */
.bf-summary {
    position: sticky;
    top: calc(var(--bf-header-h) + 1.5rem);
    border-radius: var(--bf-radius-lg);
    background: var(--bf-grad-deep);
    color: #fff;
    padding: clamp(1.5rem, 3vw, 2rem);
    box-shadow: var(--bf-shadow-lg);
    overflow: hidden;
}
.bf-summary::before {
    content: "";
    position: absolute;
    width: 300px; height: 300px;
    top: -140px; right: -100px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 186, 8, .35), transparent 70%);
    filter: blur(50px);
}
.bf-summary > * { position: relative; z-index: 2; }
.bf-summary h3 { color: #fff; font-size: 1.2rem; }
.bf-summary__row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
    padding: .72rem 0;
    border-bottom: 1px dashed rgba(255, 255, 255, .16);
    font-size: .95rem;
}
.bf-summary__row span:first-child { color: rgba(255, 255, 255, .66); }
.bf-summary__row span:last-child { font-weight: 800; text-align: right; }
.bf-summary__total {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin: 1.15rem 0 1.5rem;
}
.bf-summary__total-label { color: rgba(255, 255, 255, .7); font-weight: 700; }
.bf-summary__total-value {
    font-size: 2.3rem;
    font-weight: 900;
    letter-spacing: -.03em;
    background: var(--bf-grad-warm);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.bf-summary__note {
    font-size: .8rem;
    color: rgba(255, 255, 255, .55);
    margin: 1rem 0 0;
    display: flex;
    gap: .5rem;
    align-items: flex-start;
    line-height: 1.55;
}

/* Payment methods */
.bf-methods { display: grid; grid-template-columns: repeat(2, 1fr); gap: .7rem; }
@media (min-width: 768px) { .bf-methods { grid-template-columns: repeat(4, 1fr); } }
.bf-method { position: relative; }
.bf-method input { position: absolute; opacity: 0; width: 0; height: 0; }
.bf-method label {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .45rem;
    padding: 1rem .5rem;
    border-radius: var(--bf-radius);
    border: 2px solid var(--bf-line);
    background: #fff;
    cursor: pointer;
    font-weight: 700;
    font-size: .86rem;
    color: var(--bf-muted);
    text-align: center;
    transition: all .3s var(--bf-ease);
}
.bf-method label i { font-size: 1.4rem; color: var(--bf-faint); transition: color .3s var(--bf-ease); }
.bf-method label:hover { border-color: rgba(232, 93, 4, .45); transform: translateY(-3px); }
.bf-method input:checked + label {
    border-color: var(--cayenne-red);
    color: var(--oxblood);
    background: var(--bf-grad-soft);
}
.bf-method input:checked + label i { color: var(--cayenne-red); }
.bf-method input:focus-visible + label { outline: 3px solid var(--cayenne-red); outline-offset: 3px; }

/* Forms */
.bf-field { margin-bottom: 1.15rem; }
.bf-field label,
.form-label {
    font-weight: 800;
    font-size: .86rem;
    color: var(--ink-black);
    margin-bottom: .42rem;
    letter-spacing: .01em;
}
.form-control, .form-select {
    border-radius: var(--bf-radius-sm);
    border: 1.5px solid var(--bf-line);
    padding: .78rem 1rem;
    font-size: .97rem;
    background: #fff;
    transition: border-color .3s var(--bf-ease), box-shadow .3s var(--bf-ease);
}
.form-control:focus, .form-select:focus {
    border-color: var(--cayenne-red);
    box-shadow: 0 0 0 4px rgba(232, 93, 4, .13);
}
.form-control::placeholder { color: var(--bf-faint); }
.was-validated .form-control:valid,
.was-validated .form-select:valid { border-color: #2f9e6b; background-image: none; }
.was-validated .form-control:invalid,
.was-validated .form-select:invalid { border-color: var(--brick-ember); background-image: none; }
.invalid-feedback { font-size: .82rem; font-weight: 700; }

.bf-honeypot {
    position: absolute !important;
    left: -10000px !important;
    width: 1px !important;
    height: 1px !important;
    overflow: hidden !important;
}

.bf-privacy-note {
    display: flex;
    gap: .65rem;
    align-items: flex-start;
    padding: .9rem 1.05rem;
    border: 1px solid rgba(8, 120, 63, .22);
    border-radius: var(--bf-radius-sm);
    background: rgba(24, 168, 95, .08);
    color: #12633b;
    font-size: .88rem;
    font-weight: 700;
    line-height: 1.55;
}
.bf-privacy-note i { margin-top: .15rem; flex: 0 0 auto; }

.bf-input-group { position: relative; }
.bf-input-group__prefix {
    position: absolute;
    left: 1rem;
    top: 50%;
    transform: translateY(-50%);
    font-weight: 900;
    color: var(--oxblood);
    pointer-events: none;
}
.bf-input-group .form-control { padding-left: 2.2rem; }

/* Child cards */
.bf-child {
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    height: 100%;
    color: inherit;
    text-decoration: none;
}
.bf-child:hover { color: inherit; }
.bf-child:focus-visible {
    outline: 3px solid var(--cayenne-red);
    outline-offset: 4px;
}
.bf-child__media { border-radius: 0; aspect-ratio: 4 / 5; }
.bf-child__media::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 45%, rgba(3, 7, 30, .78));
}
.bf-child__status { position: absolute; top: 1rem; left: 1rem; z-index: 2; }
.bf-child__overlay {
    position: absolute;
    left: 1.25rem;
    right: 1.25rem;
    bottom: 1.1rem;
    z-index: 2;
    color: #fff;
}
.bf-child__name { color: #fff; font-size: 1.45rem; margin: 0; line-height: 1.1; }
.bf-child__meta {
    font-size: .85rem;
    color: rgba(255, 255, 255, .82);
    font-weight: 700;
    display: flex;
    flex-wrap: wrap;
    gap: .2rem .7rem;
    margin-top: .3rem;
}
.bf-child__body { padding: 1.35rem 1.35rem 1.5rem; display: flex; flex-direction: column; flex: 1; }
.bf-child__summary {
    color: var(--bf-muted);
    font-size: .94rem;
    line-height: 1.65;
    margin: 0 0 1.15rem;
}
.bf-child__read {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    margin-top: auto;
    color: var(--oxblood);
    font-size: .88rem;
    font-weight: 900;
}
.bf-child__read i { transition: transform .3s var(--bf-ease); }
.bf-child:hover .bf-child__read i { transform: translateX(5px); }
.bf-child__placeholder {
    width: 100%;
    height: 100%;
    min-height: inherit;
    display: grid;
    place-content: center;
    justify-items: center;
    gap: .75rem;
    background: var(--bf-grad-deep);
    color: rgba(255, 255, 255, .78);
    text-align: center;
}
.bf-child__placeholder i { font-size: clamp(3rem, 8vw, 5rem); color: var(--deep-saffron); }
.bf-child__placeholder span {
    font-size: .78rem;
    font-weight: 900;
    letter-spacing: .08em;
    text-transform: uppercase;
}
.bf-child__row {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    font-size: .88rem;
    padding: .42rem 0;
    border-bottom: 1px solid var(--bf-line);
}
.bf-child__row:last-of-type { border-bottom: 0; }
.bf-child__row dt { color: var(--bf-faint); font-weight: 700; margin: 0; }
.bf-child__row dd { color: var(--ink-black); font-weight: 800; margin: 0; text-align: right; }
.bf-child__tags { display: flex; flex-wrap: wrap; gap: .35rem; margin: .85rem 0 1.1rem; }
.bf-child__tag {
    font-size: .74rem;
    font-weight: 800;
    padding: .28rem .7rem;
    border-radius: 999px;
    background: var(--bf-sand);
    color: var(--bf-muted);
}
.bf-child__foot {
    margin-top: auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    padding-top: 1rem;
    border-top: 1px solid var(--bf-line);
}
.bf-child__price { line-height: 1.1; }
.bf-child__price strong {
    font-size: 1.3rem;
    font-weight: 900;
    background: var(--bf-grad-primary);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.bf-child__price span { display: block; font-size: .74rem; color: var(--bf-faint); font-weight: 700; }

.bf-child.is-hidden { display: none; }

/* Filter bar */
.bf-filters {
    background: #fff;
    border: 1px solid var(--bf-line);
    border-radius: var(--bf-radius-lg);
    box-shadow: var(--bf-shadow-sm);
    padding: 1.25rem;
}
.bf-filters__count { font-size: .9rem; color: var(--bf-muted); font-weight: 700; }
.bf-filters__count strong { color: var(--oxblood); }

.bf-empty {
    text-align: center;
    padding: 3.5rem 1.5rem;
    border-radius: var(--bf-radius-lg);
    background: var(--bf-sand);
    color: var(--bf-muted);
}
.bf-empty i { font-size: 2.4rem; color: var(--deep-saffron); margin-bottom: .75rem; display: block; }

/* Progress */
.bf-progress {
    height: 10px;
    border-radius: 999px;
    background: var(--bf-sand);
    overflow: hidden;
}
.bf-progress__bar {
    height: 100%;
    border-radius: 999px;
    background: var(--bf-grad-primary);
    width: 0;
    transition: width 1.4s var(--bf-ease);
}
.bf-progress-label {
    display: flex;
    justify-content: space-between;
    font-size: .82rem;
    font-weight: 800;
    margin-bottom: .4rem;
}
.bf-progress-label span:last-child { color: var(--oxblood); }

/* Modals */
.modal-content {
    border: 0;
    border-radius: var(--bf-radius-lg);
    overflow: hidden;
    box-shadow: var(--bf-shadow-lg);
}
.modal-backdrop.show { opacity: .62; background: var(--ink-black); }
.modal.fade .modal-dialog { transform: translateY(28px) scale(.97); transition: transform .45s var(--bf-ease); }
.modal.show .modal-dialog { transform: none; }

.bf-modal__close {
    position: absolute;
    top: 1rem;
    right: 1rem;
    z-index: 10;
    width: 44px;
    height: 44px;
    border: 0;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(255, 255, 255, .9);
    backdrop-filter: blur(8px);
    color: var(--ink-black);
    font-size: 1.1rem;
    box-shadow: var(--bf-shadow);
    transition: transform .3s var(--bf-ease), background .3s var(--bf-ease), color .3s var(--bf-ease);
}
.bf-modal__close:hover { background: var(--bf-grad-primary); color: #fff; transform: rotate(90deg); }

.bf-child-modal__media { position: relative; height: 100%; min-height: 420px; background: var(--ink-black); }
.bf-child-modal__media img { width: 100%; height: 100%; object-fit: cover; }
.bf-child-gallery { height: 100%; min-height: inherit; }
.bf-child-gallery .carousel-control-prev,
.bf-child-gallery .carousel-control-next {
    width: 3.25rem;
    margin: auto .75rem;
    height: 3.25rem;
    top: 50%;
    bottom: auto;
    transform: translateY(-50%);
    border-radius: 50%;
    background: rgba(3, 7, 30, .58);
    opacity: 1;
}
.bf-child-gallery .carousel-indicators [data-bs-target] {
    width: 8px;
    height: 8px;
    border: 2px solid #fff;
    border-radius: 50%;
    background: transparent;
    opacity: .85;
}
.bf-child-gallery .carousel-indicators .active { background: #fff; }
.bf-child__placeholder--modal { min-height: 420px; }
.bf-child-modal__body { padding: clamp(1.5rem, 3.5vw, 2.25rem); }
.bf-child-modal__section { margin-bottom: 1.4rem; }
.bf-child-modal__section h4 {
    font-size: .78rem;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--oxblood);
    margin-bottom: .45rem;
    font-weight: 900;
}
.bf-child-modal__section p { color: var(--bf-muted); margin: 0 0 .8rem; font-size: .97rem; }
.bf-child-modal__section p:last-child { margin-bottom: 0; }
.bf-child-modal__needs { list-style: none; padding: 0; margin: 0; display: grid; gap: .45rem; }
.bf-child-modal__needs li { display: flex; gap: .55rem; align-items: flex-start; font-size: .95rem; color: var(--bf-muted); }
.bf-child-modal__needs i { color: var(--cayenne-red); margin-top: .3rem; font-size: .8rem; }

/* Success animation used in confirmation modals */
.bf-success { text-align: center; padding: clamp(2rem, 5vw, 3rem); }
.bf-success__mark {
    width: 92px;
    height: 92px;
    margin: 0 auto 1.5rem;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 2.6rem;
    box-shadow: var(--bf-shadow-warm);
    animation: bfPop .6s var(--bf-ease) both;
}
.bf-success__mark i { animation: bfCheck .5s .25s var(--bf-ease) both; }
.bf-success h3 { margin-bottom: .6rem; }
.bf-success p { color: var(--bf-muted); }

@keyframes bfPop {
    0%   { transform: scale(.4); opacity: 0; }
    60%  { transform: scale(1.08); opacity: 1; }
    100% { transform: scale(1); }
}
@keyframes bfCheck {
    from { transform: scale(0) rotate(-25deg); opacity: 0; }
    to   { transform: scale(1) rotate(0); opacity: 1; }
}

/* Sponsor steps */
.bf-step { position: relative; padding: 2rem 1.5rem; text-align: center; }
.bf-step__num {
    position: absolute;
    top: 1rem;
    right: 1.25rem;
    font-size: 3.2rem;
    font-weight: 900;
    line-height: 1;
    color: rgba(157, 2, 8, .07);
    letter-spacing: -.05em;
}
.bf-step__icon {
    width: 64px;
    height: 64px;
    margin: 0 auto 1.15rem;
    border-radius: var(--bf-radius);
    display: grid;
    place-items: center;
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 1.6rem;
    box-shadow: var(--bf-shadow-warm);
}
.bf-step h3 { font-size: 1.15rem; margin-bottom: .5rem; }
.bf-step p { font-size: .94rem; color: var(--bf-muted); margin: 0; }

/* ── 9. About page ─────────────────────────────────────────────────────── */

.bf-director-section {
    background:
        radial-gradient(circle at 10% 15%, rgba(255, 186, 8, .13), transparent 30%),
        linear-gradient(135deg, var(--bf-cream), #fff 58%, var(--bf-sand));
}
.bf-director {
    overflow: hidden;
    background: #fff;
    border: 1px solid var(--bf-line-warm);
    border-radius: var(--bf-radius-lg);
    box-shadow: var(--bf-shadow-lg);
}
.bf-director__portrait {
    min-height: 100%;
    height: 100%;
    background: var(--bf-sand);
}
.bf-director__portrait img { width: 100%; height: 100%; display: block; object-fit: cover; object-position: center top; }
.bf-director__content { padding: clamp(2rem, 5vw, 4rem); }
.bf-director__content h2 { margin-bottom: 1.25rem; }
.bf-director__intro {
    margin-bottom: 2rem;
    padding-left: 1.25rem;
    border-left: 4px solid var(--cayenne-red);
    color: var(--black-cherry);
    font-size: clamp(1.12rem, 2vw, 1.35rem);
    font-weight: 800;
    line-height: 1.55;
}
.bf-director__story { display: grid; gap: 1.25rem; }
.bf-director__story h3 { margin-bottom: .4rem; font-size: 1.05rem; }
.bf-director__story p { margin: 0; color: var(--bf-muted); font-size: .97rem; }
.bf-director__faith {
    display: flex;
    gap: .9rem;
    align-items: flex-start;
    margin-top: 2rem;
    padding: 1.15rem 1.25rem;
    border: 1px solid var(--bf-line-warm);
    border-radius: var(--bf-radius-sm);
    background: var(--bf-grad-soft);
}
.bf-director__faith i { margin-top: .22rem; color: var(--oxblood); flex: 0 0 auto; }
.bf-director__faith p { margin: 0; color: var(--black-cherry); font-size: .94rem; }

@media (max-width: 991.98px) {
    .bf-director__portrait { height: auto; aspect-ratio: 4 / 5; }
}

.bf-timeline { position: relative; padding-left: 0; list-style: none; margin: 0; }
.bf-timeline::before {
    content: "";
    position: absolute;
    left: 27px;
    top: 12px;
    bottom: 12px;
    width: 3px;
    border-radius: 2px;
    background: linear-gradient(180deg, var(--oxblood), var(--cayenne-red), var(--amber-flame));
    opacity: .28;
}
.bf-timeline__item {
    position: relative;
    padding-left: 4.75rem;
    padding-bottom: 2.25rem;
}
.bf-timeline__item:last-child { padding-bottom: 0; }
.bf-timeline__dot {
    position: absolute;
    left: 0;
    top: 0;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: #fff;
    border: 3px solid transparent;
    background-image: linear-gradient(#fff, #fff), var(--bf-grad-primary);
    background-origin: border-box;
    background-clip: padding-box, border-box;
    font-weight: 900;
    font-size: .8rem;
    color: var(--oxblood);
    box-shadow: var(--bf-shadow-sm);
}
.bf-timeline__title { font-size: 1.18rem; margin-bottom: .35rem; }
.bf-timeline__text { color: var(--bf-muted); font-size: .97rem; margin: 0; }

@media (min-width: 992px) {
    .bf-timeline::before { left: 50%; transform: translateX(-50%); }
    .bf-timeline__item { width: 50%; padding-left: 0; padding-right: 4.5rem; text-align: right; }
    .bf-timeline__item:nth-child(even) {
        margin-left: 50%;
        padding-right: 0;
        padding-left: 4.5rem;
        text-align: left;
    }
    .bf-timeline__dot { left: auto; right: -28px; }
    .bf-timeline__item:nth-child(even) .bf-timeline__dot { right: auto; left: -28px; }
}

.bf-value { padding: 1.85rem 1.6rem; }
.bf-value__icon {
    width: 54px;
    height: 54px;
    border-radius: 15px;
    display: grid;
    place-items: center;
    background: var(--bf-grad-soft);
    color: var(--oxblood);
    font-size: 1.35rem;
    margin-bottom: 1.1rem;
    box-shadow: inset 0 0 0 1px var(--bf-line-warm);
    transition: all .4s var(--bf-ease);
}
.bf-card:hover .bf-value__icon { background: var(--bf-grad-primary); color: #fff; box-shadow: var(--bf-shadow-warm); }
.bf-value h3 { font-size: 1.1rem; margin-bottom: .5rem; }
.bf-value p { font-size: .94rem; color: var(--bf-muted); margin: 0; }

/* ── 10. Contact page ──────────────────────────────────────────────────── */

.bf-channel { padding: 1.75rem 1.5rem; height: 100%; }
.bf-channel__icon {
    width: 52px;
    height: 52px;
    border-radius: 15px;
    display: grid;
    place-items: center;
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 1.3rem;
    margin-bottom: 1.05rem;
    box-shadow: var(--bf-shadow-warm);
}
.bf-channel h3 { font-size: 1.05rem; margin-bottom: .55rem; }
.bf-channel p, .bf-channel a { font-size: .94rem; color: var(--bf-muted); margin: 0 0 .18rem; display: block; }
.bf-channel a:hover { color: var(--oxblood); }

.bf-map {
    position: relative;
    border-radius: var(--bf-radius-lg);
    overflow: hidden;
    min-height: 340px;
    height: 100%;
    background:
        radial-gradient(circle at 30% 30%, rgba(255, 186, 8, .14), transparent 55%),
        linear-gradient(145deg, #fdf3e7, #fff);
    border: 1px solid var(--bf-line);
    box-shadow: var(--bf-shadow-sm);
    display: grid;
    place-items: center;
}
/* Stylised street grid so the placeholder reads as a map, not a broken image */
.bf-map::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(rgba(157, 2, 8, .07) 1.5px, transparent 1.5px),
        linear-gradient(90deg, rgba(157, 2, 8, .07) 1.5px, transparent 1.5px),
        linear-gradient(rgba(157, 2, 8, .04) 1px, transparent 1px),
        linear-gradient(90deg, rgba(157, 2, 8, .04) 1px, transparent 1px);
    background-size: 120px 120px, 120px 120px, 30px 30px, 30px 30px;
}
.bf-map::after {
    content: "";
    position: absolute;
    left: -10%;
    top: 62%;
    width: 130%;
    height: 46px;
    background: linear-gradient(90deg, rgba(232, 93, 4, .14), rgba(255, 186, 8, .2));
    transform: rotate(-7deg);
}
.bf-map__pin {
    position: relative;
    z-index: 3;
    text-align: center;
    background: rgba(255, 255, 255, .93);
    backdrop-filter: blur(10px);
    border-radius: var(--bf-radius);
    padding: 1.5rem 1.85rem;
    box-shadow: var(--bf-shadow-lg);
    max-width: 20rem;
}
.bf-map__marker {
    width: 60px;
    height: 60px;
    margin: 0 auto .9rem;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 1.6rem;
    box-shadow: var(--bf-shadow-warm);
    animation: bfPin 2.4s var(--bf-ease) infinite;
}
.bf-map__pin h3 { font-size: 1.05rem; margin-bottom: .35rem; }
.bf-map__pin p { font-size: .9rem; color: var(--bf-muted); margin: 0; }

@keyframes bfPin {
    0%, 100% { transform: translateY(0); box-shadow: var(--bf-shadow-warm); }
    50%      { transform: translateY(-8px); box-shadow: 0 22px 34px rgba(157, 2, 8, .26); }
}

/* FAQ accordion */
.bf-accordion .accordion-item {
    border: 1px solid var(--bf-line);
    border-radius: var(--bf-radius) !important;
    margin-bottom: .75rem;
    overflow: hidden;
    background: #fff;
    box-shadow: var(--bf-shadow-sm);
}
.bf-accordion .accordion-button {
    font-weight: 800;
    font-size: 1.02rem;
    padding: 1.15rem 1.35rem;
    color: var(--ink-black);
    background: #fff;
    box-shadow: none;
}
.bf-accordion .accordion-button:not(.collapsed) {
    color: var(--oxblood);
    background: var(--bf-grad-soft);
}
.bf-accordion .accordion-button:focus { box-shadow: none; }
.bf-accordion .accordion-button::after {
    background-image: none;
    content: "\F64D"; /* bi-plus-lg */
    font-family: 'bootstrap-icons';
    font-size: .95rem;
    display: grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--bf-sand);
    color: var(--oxblood);
    transition: transform .35s var(--bf-ease), background .35s var(--bf-ease), color .35s var(--bf-ease);
}
.bf-accordion .accordion-button:not(.collapsed)::after {
    transform: rotate(135deg);
    background: var(--bf-grad-primary);
    color: #fff;
}
.bf-accordion .accordion-body { padding: 0 1.35rem 1.35rem; color: var(--bf-muted); font-size: .97rem; }

/* ── 11. Footer & back-to-top ──────────────────────────────────────────── */

.bf-footer {
    position: relative;
    background: linear-gradient(160deg, #03071e 0%, #370617 100%);
    color: rgba(255, 255, 255, .74);
    padding-top: clamp(2.75rem, 5.5vw, 4rem);
    overflow: hidden;
}
.bf-footer__glow {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background:
        radial-gradient(46% 60% at 88% 8%, rgba(255, 186, 8, .16), transparent 68%),
        radial-gradient(40% 50% at 4% 92%, rgba(157, 2, 8, .42), transparent 66%);
}
.bf-footer .container { position: relative; z-index: 2; }
.bf-footer__main { padding-bottom: 2.25rem; }

.bf-footer__brand { display: block; flex: 0 0 auto; }
.bf-footer__identity {
    display: flex;
    align-items: center;
    gap: 1.35rem;
}
.bf-footer__logo {
    width: 122px;
    height: auto;
    display: block;
    transition: transform .4s var(--bf-ease);
}
.bf-footer__brand:hover .bf-footer__logo { transform: scale(1.04); }
.bf-footer__tagline {
    display: block;
    margin-bottom: 1rem;
    font-size: .72rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    font-weight: 700;
    line-height: 1.5;
    color: rgba(255, 255, 255, .52);
}


.bf-footer__socials { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 0; }
.bf-footer__socials a {
    display: grid;
    place-items: center;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    background: rgba(255, 255, 255, .07);
    border: 1px solid rgba(255, 255, 255, .12);
    color: rgba(255, 255, 255, .82);
    transition: all .35s var(--bf-ease);
}
.bf-footer__socials a:hover {
    background: var(--bf-grad-primary);
    border-color: transparent;
    color: #fff;
    transform: translateY(-4px);
}

.bf-footer__heading {
    font-size: .78rem;
    font-weight: 900;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--amber-flame);
    margin-bottom: .85rem;
}

.bf-footer__contact {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: 1fr;
    gap: .7rem 1.75rem;
}
@media (min-width: 768px) {
    .bf-footer__contact { grid-template-columns: 1.4fr 1fr 1.2fr; }
}
@media (max-width: 767.98px) {
    .bf-footer__identity { flex-direction: column; align-items: flex-start; gap: 1rem; }
    .bf-footer__logo { width: 108px; }
}
.bf-footer__contact li { display: flex; gap: .75rem; align-items: flex-start; font-size: .95rem; }
.bf-footer__contact i { color: var(--deep-saffron); margin-top: .28rem; }
.bf-footer__contact a { color: rgba(255, 255, 255, .74); }
.bf-footer__contact a:hover { color: var(--amber-flame); }


.bf-footer__bottom {
    border-top: 1px solid rgba(255, 255, 255, .1);
    padding: 1.25rem 0 1.75rem;
    display: flex;
    flex-wrap: wrap;
    gap: .85rem 1rem;
    align-items: center;
    justify-content: space-between;
}
.bf-footer__copy { margin: 0; font-size: .88rem; color: rgba(255, 255, 255, .55); }
.bf-footer__legal { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 1.25rem; }
.bf-footer__legal a { font-size: .86rem; color: rgba(255, 255, 255, .55); }
.bf-footer__legal a:hover { color: var(--amber-flame); }

.bf-to-top {
    position: fixed;
    right: clamp(1rem, 3vw, 2rem);
    bottom: clamp(1rem, 3vw, 2rem);
    z-index: 1040;
    width: 52px;
    height: 52px;
    border: 0;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: var(--bf-grad-primary);
    color: #fff;
    font-size: 1.2rem;
    box-shadow: var(--bf-shadow-warm);
    opacity: 0;
    visibility: hidden;
    transform: translateY(18px) scale(.85);
    transition: all .4s var(--bf-ease);
}
.bf-to-top.is-visible { opacity: 1; visibility: visible; transform: none; }
.bf-to-top:hover { transform: translateY(-5px) scale(1.06); }
.bf-to-top i { animation: none; }
.bf-to-top:hover i { animation: bfArrowUp .7s var(--bf-ease) infinite; }

@keyframes bfArrowUp {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-4px); }
}

/* Toasts */
.bf-toast-region { z-index: 2000; }
.bf-toast {
    border: 0;
    border-radius: var(--bf-radius);
    box-shadow: var(--bf-shadow-lg);
    background: #fff;
    overflow: hidden;
    min-width: min(24rem, 92vw);
}
.bf-toast__bar { height: 4px; background: var(--bf-grad-primary); }
.bf-toast__body { display: flex; gap: .85rem; align-items: flex-start; padding: 1rem 1.15rem; }
.bf-toast__icon {
    width: 38px;
    height: 38px;
    border-radius: 11px;
    display: grid;
    place-items: center;
    background: var(--bf-grad-soft);
    color: var(--oxblood);
    font-size: 1.1rem;
    flex: 0 0 auto;
}
.bf-toast__title { font-weight: 900; font-size: .96rem; color: var(--ink-black); margin: 0 0 .1rem; }
.bf-toast__text { font-size: .87rem; color: var(--bf-muted); margin: 0; line-height: 1.5; }

/* ── 12. Animation & motion preferences ────────────────────────────────── */

.bf-js [data-reveal] {
    opacity: 0;
    transform: translateY(34px);
    transition: opacity .8s var(--bf-ease), transform .8s var(--bf-ease);
    will-change: opacity, transform;
}
.bf-js [data-reveal="left"]  { transform: translateX(-34px); }
.bf-js [data-reveal="right"] { transform: translateX(34px); }
.bf-js [data-reveal="zoom"]  { transform: scale(.94); }
.bf-js [data-reveal].is-revealed { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }

    *,
    *::before,
    *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
        scroll-behavior: auto !important;
    }

    [data-reveal] { opacity: 1 !important; transform: none !important; }
    .bf-hero__anim { opacity: 1; transform: none; }
    /* `animation: ... forwards` would otherwise hold the image at its
       zoomed end state, so the animation itself has to be cancelled. */
    .bf-hero__media img { animation: none !important; transform: scale(1.03) !important; }
    .bf-card:hover, .bf-stat:hover, .bf-btn:hover { transform: none; }
}

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

@media (max-width: 991.98px) {
    :root { --bf-header-h: 74px; }
    .bf-brand__tagline { display: none; }
    .bf-hero__slide { min-height: clamp(520px, 76vh, 680px); }
    .bf-hero__content { padding-block: 5rem 8rem; }
    .bf-summary { position: static; }
    .bf-intro__media { width: min(86%, 28rem); }
    .bf-intro__badge { position: static; margin-top: 1.25rem; max-width: none; }
}

@media (max-width: 767.98px) {
    body.bf-page { font-size: 1rem; }
    .bf-section { padding: 3.25rem 0; }
    .bf-pagehero { padding: 4.25rem 0 3.5rem; }
    .bf-pagehero__content { max-width: none; }
    .bf-hero__nav { width: 46px; height: 46px; bottom: 1.75rem; }
    .carousel-control-prev.bf-hero__nav { right: 5.2rem; }
    .carousel-control-next.bf-hero__nav { right: 1.25rem; }
    .bf-hero__indicators { bottom: 2.4rem; }
    .bf-hero__indicators button { width: 30px; }
    .bf-hero__indicators button.active { width: 54px; }
    .bf-hero__strip { margin-top: -1.5rem; }
    .bf-hero__actions .bf-btn { width: 100%; }
    .bf-director__content { padding: 2rem 1.5rem; }
    .bf-story-modal__hero { aspect-ratio: 16 / 10; }
    .bf-footer__bottom { flex-direction: column; align-items: flex-start; }
    .bf-child-modal__media { min-height: 220px; aspect-ratio: 16 / 10; }
}

/* Phones. Everything below is two-up at this width, so the tight cases are
   long unbreakable strings (counters) and icon-plus-text rows. */
@media (max-width: 575.98px) {
    :root { --bf-header-h: 66px; }

    .bf-navbar { padding-block: .62rem; }
    .bf-brand { gap: .55rem; margin-right: .5rem; }
    .bf-brand__logo { height: 40px; }
    .bf-brand__name { font-size: 1rem; }
    .bf-toggler { padding: .45rem; }

    .bf-pagehero { padding: 3.75rem 0 3rem; }
    .bf-pagehero h1 { font-size: clamp(2rem, 10vw, 2.55rem); }
    .bf-pagehero .breadcrumb { margin-bottom: .9rem; }

    .bf-hero__slide { min-height: 650px; }
    .bf-hero__content { padding-block: 3.5rem 10rem; }
    .bf-hero__title { font-size: clamp(2rem, 10vw, 2.55rem); }
    .bf-hero__text { font-size: .98rem; line-height: 1.6; margin-bottom: 1.5rem; }
    .bf-hero__actions { gap: .65rem; }
    .bf-hero__actions .bf-btn--lg { --bf-btn-pad: .88rem 1.25rem; font-size: .98rem; }

    /* Reclaim horizontal room for the counters. */
    .bf-stat { padding: 1.5rem .75rem; }

    /* The hero strip is icon + number side by side in a half-width column. */
    .bf-hero__strip-inner  { padding: 1.25rem 1rem; }
    .bf-hero__strip-item   { gap: .5rem; }
    .bf-hero__strip-item i { font-size: 1.15rem; }
    .bf-hero__strip-value  { font-size: 1.05rem; }
    .bf-hero__strip-label  { font-size: .72rem; line-height: 1.35; }
    /* Numbers must never be the thing that forces a scrollbar. */
    .bf-hero__strip-value,
    .bf-stat__value { overflow-wrap: anywhere; }

    /* Preserve the requested 2x2 gallery while giving each photo enough
       vertical area to remain legible on a narrow screen. */
    .bf-impact-gallery { padding-bottom: 3rem; }
    .bf-impact-gallery__grid { gap: .55rem; }
    .bf-impact-gallery__frame {
        aspect-ratio: 1 / 1;
        border-radius: 14px;
        box-shadow: 0 12px 28px rgba(3, 7, 30, .24);
    }

    .bf-cta { padding: 1.85rem 1.25rem; border-radius: var(--bf-radius); }
    .bf-cta .bf-btn { width: 100%; }
    .bf-support { padding: 1.6rem 1.25rem; }
    .bf-director__content { padding: 1.75rem 1.2rem; }
    .bf-director__intro { padding-left: .9rem; font-size: 1.05rem; }
    .bf-director__faith { padding: 1rem; gap: .7rem; }

    .bf-timeline::before { left: 21px; }
    .bf-timeline__item { padding-left: 3.7rem; padding-bottom: 1.8rem; }
    .bf-timeline__dot { width: 44px; height: 44px; font-size: .7rem; }

    .bf-map { min-height: 290px; }
    .bf-map__pin { width: calc(100% - 2rem); padding: 1.25rem 1rem; }
    .bf-accordion .accordion-button { padding: 1rem; font-size: .96rem; }
    .bf-accordion .accordion-body { padding: 0 1rem 1rem; font-size: .94rem; }
    .bf-accordion .accordion-button::after { width: 28px; height: 28px; flex: 0 0 auto; }

    .form-control,
    .form-select { min-height: 48px; font-size: 1rem; }

    .bf-footer__contact li { min-width: 0; }
    .bf-footer__contact li > :last-child { min-width: 0; overflow-wrap: anywhere; }
    .bf-to-top { width: 46px; height: 46px; }

    /* Long section headings should not hyphenate into a narrow ribbon. */
    .bf-heading-block { max-width: none; }
}

@media (max-width: 374.98px) {
    .bf-brand__logo { height: 36px; }
    .bf-brand__name { font-size: .9rem; }
    .bf-toggler__bar { width: 24px; }

    .bf-hero__slide { min-height: 690px; }
    .bf-hero__title { font-size: 1.95rem; }
    .bf-hero__nav { width: 42px; height: 42px; }
    .carousel-control-prev.bf-hero__nav { right: 4.55rem; }
    .carousel-control-next.bf-hero__nav { right: .85rem; }
    .bf-hero__indicators { padding-left: .75rem; }
    .bf-hero__indicators button { width: 24px; }
    .bf-hero__indicators button.active { width: 38px; }

    .bf-label { padding-inline: .8rem; letter-spacing: .1em; }
    .bf-btn { --bf-btn-pad: .8rem 1.15rem; }
    .bf-offcanvas { width: 92vw; }
    .bf-offcanvas .offcanvas-header,
    .bf-offcanvas .offcanvas-body { padding-inline: 1rem; }
}

/* The carousel indicators are 4px tall by design — far too thin to tap.
   This gives them a 32px hit area without changing how they look. */
.bf-hero__indicators button::before {
    content: "";
    position: absolute;
    inset: -14px 0;
}
