/*
 Theme Name:   Hello Elementor Child
 Theme URI:    https://wdbc.io
 Description:  Child theme for Hello Elementor - WDBC customizations
 Author:       WDBC
 Author URI:   https://wdbc.io
 Template:     hello-elementor
 Version:      1.0.0
 License:      GNU General Public License v2 or later
 License URI:  https://www.gnu.org/licenses/gpl-2.0.html
 Text Domain:  hello-elementor-child
*/

/* ==========================================================================
   WDBC Custom Styles
   ========================================================================== */

/* Add your custom CSS below this line */

/* ==========================================================================
   WDBC Brand Kit v2 — design tokens (single source of truth for the palette + type)
   Full kit: claude.ai/code/artifact/a36b8d78-a6df-4100-a1d0-ba97baa99c62
   Usage: navy + gold lead everywhere; on DARK grounds, Gold + Signal Cyan are the
   high-contrast accents. Quantum Indigo is a chart/pillar-coding accent only — never
   small text on navy. For gold TEXT on light grounds use --wdbc-gold-deep (not --wdbc-gold).
   ========================================================================== */
:root {
    --wdbc-navy:        #16233F;   /* primary ink / dark ground */
    --wdbc-navy-deep:   #0E1728;
    --wdbc-gold:        #FFC24B;   /* primary accent */
    --wdbc-gold-deep:   #96690C;   /* accessible gold for text on light grounds */
    --wdbc-cream:       #FBF3DE;   /* warm light surface */
    --wdbc-cyan:        #19C5B4;   /* Signal Cyan — codes pillar 1: Innovation & Opportunity */
    --wdbc-indigo:      #6D5AE6;   /* Quantum Indigo — codes pillar 2: Consumer Protection & Trust */
    /* The two pillar colours were drawn for the navy ground, where they sing:
       cyan is 7.2:1 on navy and indigo 3.16:1. On cream they collapse — cyan
       measures 1.96:1, which fails even the 3:1 floor for a non-text UI mark,
       so it cannot carry the pillar distinction on a light page at all, and
       indigo lands at 4.46:1, just under AA for body text. These are the same
       hues darkened until they clear AA on cream (4.71:1 and 5.08:1), for use
       anywhere the pillar colour appears on a light surface. Use the bright
       pair above on navy and this pair on cream — not interchangeably. */
    --wdbc-cyan-deep:   #0C7A6F;   /* Signal Cyan for light grounds   — 4.71:1 on cream */
    --wdbc-indigo-deep: #6350DE;   /* Quantum Indigo for light grounds — 5.08:1 on cream */
    --wdbc-cool:        #F4F6FA;   /* cool neutral surface */
    --wdbc-ink:         #16233F;
    --wdbc-font-display:"Space Grotesk","Aeonik","Segoe UI",system-ui,-apple-system,Arial,sans-serif;
    --wdbc-font-body:   "Inter","Lato","Segoe UI",system-ui,-apple-system,Arial,sans-serif;
    --wdbc-font-mono:   "IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
}

/* ==========================================================================
   Accessibility — visible keyboard focus, skip link, reduced motion (WCAG 2.2 AA)
   ========================================================================== */

/* Two-tone focus ring: gold outline + navy edge → clears 3:1 on BOTH cream and navy. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible,
.wbbc-filter-btn:focus-visible,
.wbbc-sort-btn:focus-visible,
.wbbc-nav-list a:focus-visible,
.wbbc-header-btn:focus-visible,
.wbbc-cta-btn:focus-visible,
.wbbc-dash-btn:focus-visible,
.wbbc-about-card-link:focus-visible {
    outline: 3px solid #FFC24B !important;
    outline-offset: 2px !important;
    box-shadow: 0 0 0 1px #16233F, 0 0 0 6px rgba(22, 35, 63, .35) !important;
    border-radius: 3px;
}

/* Ensure a keyboard-visible ring on form fields even where outline was reset. */
.ur-frontend-form input:focus-visible,
.ur-frontend-form select:focus-visible,
.ur-frontend-form textarea:focus-visible,
.wbbc-form input:focus-visible,
.wbbc-form select:focus-visible,
.wbbc-form textarea:focus-visible {
    outline: 3px solid #FFC24B !important;
    outline-offset: 1px !important;
}

/* Skip link: hidden until focused, then a clear navy chip top-left. */
.skip-link.screen-reader-text:focus,
a.skip-link:focus {
    position: fixed !important;
    top: 12px;
    left: 12px;
    z-index: 100000;
    width: auto !important;
    height: auto !important;
    clip: auto !important;
    clip-path: none !important;
    margin: 0 !important;
    padding: 10px 18px;
    background: #16233F;
    color: #FBF3DE;
    font-weight: 700;
    border: 2px solid #FFC24B;
    border-radius: 6px;
    text-decoration: none;
}

/* Respect users who ask for less motion. */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
        scroll-behavior: auto !important;
    }
}

/* ==========================================================================
   WDBC page furniture — pricing ladder, people cards, event timeline,
   and the engraved section plates. Original SVG art (no stock photography
   is licensed for this site); each plate is a themed line engraving that
   sits behind a section heading.
   ========================================================================== */

/* ---------- Engraved section plate ---------- */
.wdbc-plate {
    position: relative;
    border-radius: 14px;
    overflow: hidden;
    background: linear-gradient(135deg, var(--wdbc-navy) 0%, var(--wdbc-navy-deep) 100%);
    color: #F2EEE2;
    padding: 44px 34px;
    margin: 34px 0;
    isolation: isolate;
}
.wdbc-plate::after {           /* gold hairline, echoes the struck-coin rim */
    content: "";
    position: absolute;
    inset: 10px;
    border: 1px solid rgba(255, 194, 75, .32);
    border-radius: 8px;
    pointer-events: none;
}
.wdbc-plate-art {
    position: absolute;
    inset: 0;
    z-index: -1;
    opacity: .3;
    background-repeat: no-repeat;
    background-position: right -40px center;
    background-size: auto 150%;
}
.wdbc-plate h2, .wdbc-plate h3 { color: #FFC24B; margin: 0 0 .5rem; }
.wdbc-plate p { color: #D6DEEC; margin: 0; max-width: 60ch; }
.wdbc-plate .wdbc-plate-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: rgba(255, 194, 75, .8);
    margin-bottom: .5rem;
}
/* Source line for licensed art — CC BY requires the credit to be visible. */
.wdbc-plate .wdbc-plate-credit {
    font-family: var(--wdbc-font-mono);
    font-size: .6rem; letter-spacing: .06em; line-height: 1.7;
    color: rgba(214, 222, 236, .55);
    margin-top: 1.1rem; max-width: 64ch;
}
.wdbc-plate .wdbc-plate-credit a { color: inherit; text-decoration-color: rgba(214,222,236,.35); }
/* A photographic/raster art layer needs less presence than the line engravings. */
.wdbc-plate-art-photo { opacity: .42; background-position: right -80px center; background-size: auto 190%; }

/* ---------- Pricing ladder ---------- */
.wdbc-tiers {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 16px;
    margin: 26px 0;
}
.wdbc-tier {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid #E3DCCA;
    border-radius: 12px;
    padding: 24px 22px;
    box-shadow: 0 1px 2px rgba(22, 35, 63, .05), 0 10px 24px rgba(22, 35, 63, .06);
}
.wdbc-tier-featured {
    border: 2px solid var(--wdbc-gold);
    box-shadow: 0 1px 2px rgba(22, 35, 63, .05), 0 14px 34px rgba(22, 35, 63, .12);
}
.wdbc-tier-name {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--wdbc-gold-deep);
    margin-bottom: .55rem;
}
.wdbc-tier-price {
    font-size: 2.1rem;
    font-weight: 800;
    line-height: 1;
    color: var(--wdbc-navy);
    letter-spacing: -.02em;
}
.wdbc-tier-price span { font-size: .82rem; font-weight: 500; color: #5A6884; letter-spacing: 0; }
.wdbc-tier-for { font-size: .88rem; color: #4A5568; margin: .7rem 0 .9rem; }
.wdbc-tier ul { margin: 0 0 1.1rem; padding-left: 1.1rem; }
.wdbc-tier li { font-size: .86rem; color: #4A5568; margin-bottom: .34rem; }
.wdbc-tier .wdbc-tier-cta {
    margin-top: auto;
    display: inline-block;
    text-align: center;
    padding: 11px 16px;
    border-radius: 8px;
    font-weight: 700;
    font-size: .9rem;
    text-decoration: none;
    background: var(--wdbc-navy);
    color: #fff;
    transition: background .15s ease;
}
.wdbc-tier .wdbc-tier-cta:hover { background: #223357; }
.wdbc-tier-featured .wdbc-tier-cta { background: var(--wdbc-gold); color: var(--wdbc-navy); }
.wdbc-tier-featured .wdbc-tier-cta:hover { background: #FFB01F; }

/* ---------- People ---------- */
.wdbc-people { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 18px; margin: 22px 0; }
.wdbc-person {
    background: #fff;
    border: 1px solid #E3DCCA;
    border-radius: 12px;
    padding: 22px;
    text-align: center;
}
.wdbc-person img,
.wdbc-person .wdbc-person-initials {
    width: 96px; height: 96px;
    border-radius: 50%;
    object-fit: cover;
    margin: 0 auto .9rem;
    display: flex; align-items: center; justify-content: center;
    border: 3px solid var(--wdbc-gold);
    background: var(--wdbc-navy);
    color: var(--wdbc-gold);
    font-size: 1.7rem; font-weight: 700; letter-spacing: .02em;
}
.wdbc-person h3 { margin: 0 0 .2rem; font-size: 1.02rem; }
.wdbc-person .wdbc-person-role {
    font-family: var(--wdbc-font-mono);
    font-size: .66rem; letter-spacing: .12em; text-transform: uppercase;
    color: var(--wdbc-gold-deep); margin-bottom: .6rem;
}
.wdbc-person p { font-size: .87rem; color: #4A5568; margin: 0; text-align: left; }

/* ---------- Event timeline ---------- */
.wdbc-events { position: relative; margin: 26px 0; padding-left: 26px; }
.wdbc-events::before {
    content: ""; position: absolute; left: 6px; top: 8px; bottom: 8px;
    width: 2px; background: linear-gradient(180deg, var(--wdbc-gold), rgba(25, 197, 180, .5));
}
.wdbc-event { position: relative; margin-bottom: 26px; }
.wdbc-event::before {
    content: ""; position: absolute; left: -26px; top: 6px;
    width: 12px; height: 12px; border-radius: 50%;
    background: var(--wdbc-gold); border: 2px solid #fff;
    box-shadow: 0 0 0 2px var(--wdbc-gold);
}
.wdbc-event-date {
    font-family: var(--wdbc-font-mono); font-size: .68rem; letter-spacing: .14em;
    text-transform: uppercase; color: var(--wdbc-gold-deep);
}
.wdbc-event h3 { margin: .25rem 0 .3rem; font-size: 1.06rem; }
.wdbc-event p { font-size: .9rem; color: #4A5568; margin: 0 0 .4rem; }
.wdbc-event-meta { font-size: .82rem; color: #5A6884; }
.wdbc-event-meta strong { color: var(--wdbc-navy); }

@media (max-width: 600px) {
    .wdbc-plate { padding: 32px 22px; }
    .wdbc-plate-art { opacity: .18; }
}

/* ==========================================================================
   Full-width page layout
   wbbc-core sets .wbbc-page-wrap to 960px, which reads as a narrow box on a
   modern display and stacked the value cards one per row. The column is wider
   here, the navy furniture (hero, CTA) runs edge to edge like the photo bands,
   and the cards share the width instead of queueing down it. Running text is
   still capped — the page goes full width, the prose does not.
   ========================================================================== */
.wbbc-page-wrap {
    max-width: 1240px;
    padding: 0 clamp(20px, 4vw, 48px) clamp(48px, 6vw, 72px);
}
/* Bands escape to the viewport edge. A grid `full` track cannot do this job:
   the wrap sits inside Hello Elementor's .page-content, which is itself only
   ~1140px wide, so a track-based bleed stops at that box rather than the
   window. The viewport unit is what actually clears both containers. */
.wbbc-page-wrap > .wbbc-page-hero,
.wbbc-page-wrap > .wbbc-cta-banner,
.wbbc-page-wrap > .wdbc-split,
.wbbc-page-wrap > .wdbc-priority,
.wbbc-page-wrap > .wdbc-band {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    border-radius: 0;
}
.wbbc-page-wrap > *:first-child { margin-top: 0; }
/* A page that opens with body copy rather than a bleeding band still needs air
   under the sticky header. */
.wbbc-page-wrap > *:first-child:not(.wbbc-page-hero):not(.wbbc-cta-banner):not(.wdbc-split):not(.wdbc-band):not(.wdbc-plate) {
    margin-top: clamp(32px, 4vw, 48px);
}

/* Page hero: a full-bleed band, not a rounded card floating in the column. */
.wbbc-page-wrap .wbbc-page-hero {
    margin-bottom: clamp(40px, 5vw, 64px);
    border-radius: 0;
    padding: clamp(56px, 7vw, 92px) clamp(24px, 5vw, 40px);
}
.wbbc-page-wrap .wbbc-page-hero h1 {
    font-size: clamp(2rem, 4.2vw, 3rem);
    line-height: 1.1;
    letter-spacing: -.02em;
    text-wrap: balance;
    max-width: 22ch;
    margin-inline: auto;
}
.wbbc-page-wrap .wbbc-page-hero p {
    font-size: clamp(1rem, 1.45vw, 1.15rem);
    line-height: 1.6;
    max-width: 62ch;
}

/* Closing CTA gets the same edge-to-edge treatment. */
.wbbc-page-wrap .wbbc-cta-banner {
    margin-top: clamp(48px, 6vw, 72px);
    margin-bottom: 0;
    border-radius: 0;
    padding: clamp(48px, 6vw, 76px) clamp(24px, 5vw, 40px);
}
.wbbc-page-wrap .wbbc-cta-banner h2 { font-size: clamp(1.5rem, 2.8vw, 2.15rem); }

/* Value sections: cards share the row instead of stacking. Everything that is
   not a card spans the full grid, so headings, lists, people grids and pricing
   ladders keep behaving like block content. */
.wbbc-value-section {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
    gap: clamp(16px, 1.6vw, 22px);
    align-items: stretch;
    margin-bottom: clamp(40px, 5vw, 64px);
}
.wbbc-value-section > * { grid-column: 1 / -1; }
.wbbc-value-section > .wbbc-value-card { grid-column: auto; margin-bottom: 0; }

/* ---------- Cards that lead with a photograph ----------
   The base card is a row of [icon][copy] with its own padding. A card that
   also carries a picture becomes a column — photo, then that same row — so
   the photograph can run to the card's edges while the text keeps its inset.
   Hence the padding moves from the card to .wdbc-card-body.

   The pictures are documentary rather than decorative: the committee whose
   bills the tracker follows, testimony on our own bill, the people at the
   close of a forum. They are the argument the copy is making. */
.wbbc-value-card.wdbc-card-illustrated {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 0;
    overflow: hidden;   /* clip the photo to the card's radius */
}
.wdbc-card-photo {
    margin: 0;
    background: var(--wdbc-navy-deep);
    border-bottom: 1px solid rgba(22, 35, 63, .10);
}
/* The ratio is set on the image, not the figure. On the figure it competes
   with the img's own intrinsic ratio — the two 16:9 stills came out 207px tall
   and the 3:2 group shot 222px, so the three cards' text started at different
   heights. Constraining the image itself makes every card's photo the same
   shape whatever was shot. */
.wdbc-card-photo img {
    width: 100%;
    aspect-ratio: 16 / 10;
    height: auto;
    object-fit: cover;
    display: block;
}
/* A portrait frame cropped to 16:10 from the centre cuts heads off. This
   pulls the visible slice up for the tall source among the three; the value
   was chosen by sweeping the offset against the actual photograph rather than
   guessed. */
.wdbc-card-photo .wdbc-photo-focus-high { object-position: center 20%; }
.wdbc-card-body {
    display: flex;
    align-items: flex-start;
    gap: 20px;
    padding: 22px 24px 24px;
}
/* The card lifts on hover already; the photograph should read as part of that
   rather than sitting still behind it. */
.wdbc-card-illustrated .wdbc-card-photo img {
    transition: transform .45s ease;
}
.wdbc-card-illustrated:hover .wdbc-card-photo img { transform: scale(1.03); }
@media (prefers-reduced-motion: reduce) {
    .wdbc-card-illustrated .wdbc-card-photo img { transition: none; }
    .wdbc-card-illustrated:hover .wdbc-card-photo img { transform: none; }
}
.wbbc-value-section > h2 { font-size: clamp(1.45rem, 2.5vw, 2rem); }
.wbbc-value-section > p { max-width: 68ch; margin-inline: auto; }

/* ---------- Pillar colour coding ----------
   The agenda is one agenda in two halves, and until now the page said so only
   in prose: the two halves were styled identically, so the structure the whole
   organisation is built on was invisible at a glance.

   Each half sets a --pillar colour once, and the parts below read from it, so
   the mapping lives in exactly two declarations rather than being restated on
   every rule. The deep variants are used because these sections sit on the
   light page; see the token block for why the bright pair cannot be used here.

   Colour is never the only carrier. Each half is also labelled in words
   ("Pillar 01 · Growth"), which is what actually does the work for a reader
   who does not see the hue, or who is scanning rather than reading. */
.wdbc-pillar-growth { --pillar: var(--wdbc-cyan-deep); }
.wdbc-pillar-trust  { --pillar: var(--wdbc-indigo-deep); }

.wbbc-value-section > p.wdbc-pillar-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--pillar);
    margin: 0 0 6px;
    text-align: center;
    /* The 68ch cap on sibling paragraphs is a measure limit for body copy. In
       mono at .72rem it computes to 470px, and since a grid item is placed at
       the start of its track rather than centred by an auto inline margin, the
       label ended up centred inside a 470px box at the left of a 1044px row —
       reading as left-aligned against a centred heading. It is a two-word
       label, so it has no measure to protect. */
    max-width: none;
}

/* A short rule under the heading, in the pillar colour. Centred to match the
   heading, and sized in ch so it stays proportional to the type rather than
   to the viewport. */
.wdbc-pillar > h2 { margin-bottom: 10px; }
.wdbc-pillar > h2::after {
    content: "";
    display: block;
    width: 4ch;
    height: 3px;
    margin: 10px auto 0;
    border-radius: 2px;
    background: var(--pillar);
}

/* The card's own tie back to its pillar. A top rule rather than a left spine:
   these cards lead with a 48px icon chip, and a spine immediately beside it
   read as clutter. */
.wdbc-pillar .wbbc-value-card {
    border-top: 3px solid var(--pillar);
}

/* The icon chip was a fixed amber wash (rgba(255,191,0,.1)) with an orange
   glyph — a leftover that belonged to neither pillar and to no current brand
   colour. Inside a pillar it now takes that pillar's hue. The flat rgba
   fallback is declared first for anything without color-mix. */
.wdbc-pillar .wbbc-value-card-icon {
    background: rgba(22, 35, 63, .06);
    background: color-mix(in srgb, var(--pillar) 11%, transparent);
}
.wdbc-pillar .wbbc-value-card-icon svg { color: var(--pillar); }

/* ==========================================================================
   Grouped primary navigation
   Ten flat top-level items crowded the header and wrapped on tablet. The menu
   is now four groups; each parent is a real page link and the chevron beside
   it is a separate disclosure button, so a click on the label still navigates.
   ========================================================================== */
.wbbc-nav-list > li.menu-item-has-children {
    display: flex;
    align-items: center;
    position: relative;
}
.wbbc-nav-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px; height: 24px;
    margin-left: -10px;
    padding: 0; border: 0; background: none;
    color: var(--wbbc-navy, #16233F);
    cursor: pointer;
}
.wbbc-nav-toggle svg { width: 11px; height: 11px; transition: transform .18s ease; }
.wbbc-nav-list > li.is-open > .wbbc-nav-toggle svg { transform: rotate(180deg); }

.wbbc-nav-list .sub-menu {
    position: absolute;
    top: 100%; left: 0;
    min-width: 15rem;
    margin: 0; padding: 8px 0;
    list-style: none;
    background: var(--wdbc-cream, #FBF3DE);
    border: 1px solid rgba(22, 35, 63, .14);
    border-top: 3px solid var(--wdbc-navy, #16233F);
    border-radius: 0 0 10px 10px;
    box-shadow: 0 18px 40px rgba(22, 35, 63, .18);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-6px);
    transition: opacity .16s ease, transform .16s ease, visibility .16s;
    z-index: 100;
}
.wbbc-nav-list > li.menu-item-has-children:hover > .sub-menu,
.wbbc-nav-list > li.menu-item-has-children:focus-within > .sub-menu,
.wbbc-nav-list > li.menu-item-has-children.is-open > .sub-menu {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}
.wbbc-nav-list .sub-menu li a {
    padding: 9px 18px;
    font-size: 14.5px;
    font-weight: 500;
    white-space: nowrap;
}
.wbbc-nav-list .sub-menu li a::after { display: none; }  /* the sweep rule belongs to the top row only */
.wbbc-nav-list .sub-menu li a:hover,
.wbbc-nav-list .sub-menu li.current-menu-item a { background: rgba(22, 35, 63, .07); }

@media (max-width: 767px) {
    /* In the open mobile panel the submenu is an indented list, not an overlay. */
    .wbbc-nav-list > li.menu-item-has-children { flex-wrap: wrap; justify-content: center; }
    .wbbc-nav-list .sub-menu {
        display: none;
        position: static;
        opacity: 1; visibility: visible; transform: none;
        flex: 0 0 100%;
        min-width: 0;
        margin: 2px 0 8px;
        padding: 4px 0;
        background: none;
        border: 0;
        border-left: 2px solid rgba(22, 35, 63, .18);
        border-radius: 0;
        box-shadow: none;
    }
    .wbbc-nav-list > li.menu-item-has-children.is-open > .sub-menu { display: block; }
    .wbbc-nav-list .sub-menu li a { white-space: normal; text-align: left; padding-left: 22px; }
}

/* ==========================================================================
   Full-bleed photography
   .wbbc-page-wrap caps content at 960px; photo bands are meant to run to the
   viewport edge, so they break out of that column with the same technique the
   particle hero already uses. Text inside a bleeding band is re-constrained to
   a readable column — bleeding the picture is the point, bleeding a paragraph
   to 1920px is not.
   ========================================================================== */
/* Escape hatch for content that sits OUTSIDE .wbbc-page-wrap and so has no
   `full` grid track to occupy — currently only the particle hero. */
.wdbc-bleed {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    border-radius: 0;
}
/* Safety net for those vw-based bleeds only: 100vw counts the scrollbar, so
   they overhang by its width. `clip` trims that without making body a scroll
   container the way `hidden` would, which would break the sticky header.
   In-wrap bands use grid tracks and never rely on this. */
body { overflow-x: clip; }

/* ---------- Photo split band: picture one side, panel the other ---------- */
.wdbc-split {
    display: grid;
    /* The media column is capped in pixels, not left as a bare fraction. These
       are portrait photographs shown whole (see below), so the column's width
       is what sets the band's height — on a 1920px window an unbounded 36%
       column would run the band past 1000px tall. */
    grid-template-columns: minmax(0, min(38%, 460px)) minmax(0, 1fr);
    gap: 0;
    overflow: hidden;
    margin: 48px 0;
    background: linear-gradient(135deg, var(--wdbc-navy) 0%, var(--wdbc-navy-deep) 100%);
    color: #F2EEE2;
}
.wdbc-split-media {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
}
/* The photograph runs at its own aspect ratio instead of filling a fixed box.
   object-fit: cover on a portrait shot of the Capitol always sacrificed one end
   of it — either the gilded figure on the dome or Forward at the foot of the
   steps, which are the two things that make it this building. In flow the image
   sets the band's height; if the copy beside it ever runs longer, the row grows
   and the photo simply centres in it. */
.wdbc-split-media img {
    position: static;
    display: block;
    width: 100%;
    height: auto;
}
.wdbc-split-media::after {          /* navy wash so the photo joins the panel */
    content: "";
    position: absolute; inset: 0;
    background: linear-gradient(90deg, rgba(22,35,63,.30) 0%, rgba(22,35,63,0) 45%, rgba(22,35,63,.62) 100%);
}
/* Picture on the right instead — alternate down a long page. */
.wdbc-split-flip .wdbc-split-media { order: 2; }
.wdbc-split-flip .wdbc-split-media::after {
    background: linear-gradient(270deg, rgba(22,35,63,.30) 0%, rgba(22,35,63,0) 45%, rgba(22,35,63,.62) 100%);
}
.wdbc-split-body {
    align-self: center;
    /* Centred in its half: left-aligned copy this narrow against a full-bleed
       panel otherwise leaves a conspicuous void on the outer edge. */
    margin-inline: auto;
    padding: clamp(36px, 5vw, 72px) clamp(24px, 4vw, 56px);
    max-width: 40rem;
}
.wdbc-split-body .wdbc-plate-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem; letter-spacing: .2em; text-transform: uppercase;
    color: rgba(255, 194, 75, .85); margin-bottom: .5rem;
}
.wdbc-split-body h2, .wdbc-split-body h3 { color: var(--wdbc-gold); margin: 0 0 .6rem; }
.wdbc-split-body p { color: #D6DEEC; margin: 0 0 .8rem; max-width: 54ch; }
.wdbc-split-body p:last-child { margin-bottom: 0; }
.wdbc-split-credit {
    font-family: var(--wdbc-font-mono);
    font-size: .6rem; letter-spacing: .06em;
    color: rgba(214, 222, 236, .5);
}
.wdbc-split-credit a { color: inherit; text-decoration-color: rgba(214,222,236,.35); }
@media (max-width: 780px) {
    .wdbc-split { grid-template-columns: 1fr; margin: 32px 0; }
    /* Stacked, an edge-to-edge 2:3 portrait would run ~600px tall on a phone and
       push the copy entirely below the fold. Inset it as a plate instead — the
       whole photograph, just not the whole screen. */
    .wdbc-split-media { padding: 32px 24px 0; }
    .wdbc-split-media img { max-width: 300px; margin-inline: auto; }
    .wdbc-split-media::after { display: none; }   /* a side-to-side wash reads wrong once the photo is inset */
    .wdbc-split-flip .wdbc-split-media { order: 0; }
    .wdbc-split-body { padding: 30px 24px; }
}

/* ---------- Cinematic band: landscape photograph, copy laid over it ---------- */
.wdbc-band {
    position: relative;
    display: grid;
    align-items: end;
    overflow: hidden;
    margin: 48px 0;
    min-height: clamp(340px, 56vh, 580px);
    background: var(--wdbc-navy-deep);
}
/* The image is wrapped rather than a direct child: wpautop wraps a bare <img>
   on its own line in a <p>, which would break a child selector here. */
.wdbc-band-media { position: absolute; inset: 0; }
.wdbc-band-media img,
.wdbc-band-media video {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    object-position: center 50%;
    display: block;
}

/* Video ground. A <video> dropped into .wdbc-band-media alongside the <img>
   covers the band identically — the rule above covers both. The video sits
   after the image in the markup, and two positioned siblings with no z-index
   paint in document order, so it already covers the still: the image acts as
   the poster while the file loads and as the fallback if it never does.

   Do NOT give the video a z-index to "make sure" it wins. It is a positioned
   descendant of .wdbc-band-media, which creates no stacking context of its
   own, so a positive z-index there is resolved against the band — and lifts
   the video above .wdbc-band::after, the scrim. The result is a video playing
   over the top of the layer that is supposed to be darkening it, which is
   invisible as a bug because the still underneath still looks correct.

   Motion here is decorative: it carries no information the copy does not. So
   when the reader has asked for less of it, the video is hidden outright and
   the still underneath is what remains, rather than a frozen first frame. */
@media (prefers-reduced-motion: reduce) {
    .wdbc-band-media video { display: none; }
}
.wdbc-band::after {                 /* scrim: dark enough at the foot to hold type */
    content: "";
    position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(14,23,40,.34) 0%, rgba(14,23,40,.10) 38%, rgba(14,23,40,.88) 100%);
}
.wdbc-band-body {
    position: relative; z-index: 2;
    width: 100%; max-width: 1120px;
    margin: 0 auto;
    padding: clamp(32px, 5vw, 64px) clamp(24px, 4vw, 40px);
    color: #EAF0FA;
}
.wdbc-band-body .wdbc-plate-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem; letter-spacing: .2em; text-transform: uppercase;
    color: var(--wdbc-gold); margin: 0 0 .5rem;
}
.wdbc-band-body h2 {
    color: #FFFFFF; margin: 0 0 .6rem;
    font-size: clamp(1.6rem, 3.2vw, 2.5rem);
    line-height: 1.12; letter-spacing: -.02em; text-wrap: balance;
    max-width: 22ch;
}
.wdbc-band-body p { color: #D6DEEC; margin: 0 0 .6rem; max-width: 58ch; }
.wdbc-band-body p:last-child { margin-bottom: 0; }
.wdbc-band-credit {
    font-family: var(--wdbc-font-mono);
    font-size: .6rem; letter-spacing: .06em;
    color: rgba(214, 222, 236, .55);
}
.wdbc-band-credit a { color: inherit; text-decoration-color: rgba(214,222,236,.35); }

/* ---------- The band as the page's closing ask ----------
   The homepage used to end with this photograph and then a separate navy CTA
   panel immediately below it, two full-bleed sections making overlapping
   points. The ask now lives inside the photograph, so the last thing on the
   page is one section rather than two competing ones. */
/* Lead-in above, button below, both flush with the left edge of the headline
   and the body copy. The button used to sit beside the lead-in, vertically
   centred against a two-line paragraph, which put it at no particular
   horizontal position — it read as floating in the middle of the frame rather
   than belonging to the text column. One column, one edge. */
.wdbc-band-cta {
    margin: 1.3rem 0 1.5rem;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 1rem;
}
.wdbc-band-cta-line {
    margin: 0;
    max-width: 46ch;
    color: #EAF0FA;
    font-size: clamp(.95rem, 1.15vw, 1.05rem);
}
.wdbc-band-body .wdbc-band-cta-line { margin-bottom: 0; }

/* The closing ask is the only control in the section, so it is allowed to be
   the loudest thing in it. Scoped to this band rather than changing
   .wbbc-cta-btn everywhere, since the same class is a quieter button on other
   pages. Gold on navy text measures 9.7:1.

   The shadow is doing real work here, not decoration: a flat gold rectangle on
   a photograph reads as part of the image, and the drop separates it from the
   landscape as something you press. */
.wdbc-band-cta .wbbc-cta-btn {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    padding: 16px 32px;
    font-size: 1.05rem;
    font-weight: 700;
    letter-spacing: .01em;
    border-radius: 4px;
    box-shadow: 0 12px 30px rgba(14, 23, 40, .5);
    transition: transform .18s ease, box-shadow .18s ease, background-color .18s ease;
}
/* Decorative: the label already says what happens, so the arrow is hidden from
   assistive technology rather than read out as punctuation. */
.wdbc-band-cta .wbbc-cta-btn::after {
    content: "\2192";
    font-size: 1.1em;
    line-height: 1;
    transition: transform .18s ease;
}
.wdbc-band-cta .wbbc-cta-btn:hover,
.wdbc-band-cta .wbbc-cta-btn:focus-visible {
    background: #FFD277;
    transform: translateY(-2px);
    box-shadow: 0 16px 38px rgba(14, 23, 40, .58);
}
.wdbc-band-cta .wbbc-cta-btn:hover::after,
.wdbc-band-cta .wbbc-cta-btn:focus-visible::after { transform: translateX(3px); }
/* A focus ring that survives being over a photograph: the light halo is what
   carries it where the frame happens to be dark. */
.wdbc-band-cta .wbbc-cta-btn:focus-visible {
    outline: 3px solid var(--wdbc-navy);
    outline-offset: 3px;
    box-shadow: 0 0 0 6px rgba(251, 243, 222, .85), 0 16px 38px rgba(14, 23, 40, .58);
}
@media (prefers-reduced-motion: reduce) {
    .wdbc-band-cta .wbbc-cta-btn,
    .wdbc-band-cta .wbbc-cta-btn::after { transition: none; }
    .wdbc-band-cta .wbbc-cta-btn:hover,
    .wdbc-band-cta .wbbc-cta-btn:focus-visible { transform: none; }
}

/* Closing band runs to the footer with no cream seam between them. Zeroing the
   band's own margin is not enough: the wrap carries a clamp(48px, 6vw, 72px)
   bottom padding for pages that end in body copy, and with a full-bleed band
   as the last child that padding renders as a cream stripe between two navy
   surfaces. :has() lets the wrap drop it only in that case — every other page
   keeps the breathing room it was written for. */
.wbbc-page-wrap > .wdbc-band-close { margin-bottom: 0; }
.wbbc-page-wrap:has(> .wdbc-band-close:last-child) { padding-bottom: 0; }
/* Taller than the mid-page bands: this one carries an eyebrow, a two-line
   headline, a paragraph, a lead-in and a button, and it is the last thing on
   the page, so it can take the room. Still capped in px so it does not become
   absurd on a tall desktop window. */
.wdbc-band-close { min-height: clamp(520px, 80vh, 820px); }
/* Type sits over the busiest part of a landscape here, and it now has a button
   to hold as well, so the foot of the scrim is carried further up the frame.

   Two gradients rather than one. The still this band was built for happened to
   be dark where the copy sits; the video is not — measured across the loop the
   copy was landing on a background of about RGB(107,97,78), which is 4.5:1
   against the body colour. That is the AA line exactly, with nothing left for
   the brighter patches within the frame.

   Since the copy is left-aligned, the fix is to darken the side it occupies
   rather than dim the whole landscape: the horizontal layer weights the left,
   fades out by two thirds across, and leaves the right of the frame reading as
   a photograph. The vertical layer still carries the foot. */
.wdbc-band-close::after {
    background:
        linear-gradient(90deg, rgba(14,23,40,.74) 0%, rgba(14,23,40,.56) 40%, rgba(14,23,40,0) 72%),
        linear-gradient(180deg, rgba(14,23,40,.42) 0%, rgba(14,23,40,.18) 30%, rgba(14,23,40,.86) 100%);
}
/* Narrow screens have no "side" — the copy runs the full width, so the
   horizontal weighting is dropped and the vertical layer does all the work. */
@media (max-width: 780px) {
    .wdbc-band-close::after {
        background: linear-gradient(180deg, rgba(14,23,40,.50) 0%, rgba(14,23,40,.34) 22%, rgba(14,23,40,.90) 100%);
    }
}

/* ---------- Priority band: the one ask the rest of the agenda serves ---------- */
.wdbc-priority {
    background: linear-gradient(135deg, var(--wdbc-navy) 0%, var(--wdbc-navy-deep) 100%);
    color: #D6DEEC;
    padding: clamp(48px, 6vw, 84px) clamp(24px, 5vw, 40px);
    /* Longhand deliberately: a `margin: X 0` shorthand here would reset the
       negative left/right margins the full-bleed rule above depends on. */
    margin-top: clamp(40px, 5vw, 64px);
    margin-bottom: clamp(40px, 5vw, 64px);
}
.wdbc-priority-inner { max-width: 62ch; margin-inline: auto; }
/* The eyebrow's gold is scoped to .wdbc-plate, so it needs restating here. */
.wdbc-priority .wdbc-plate-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem; letter-spacing: .2em; text-transform: uppercase;
    color: rgba(255, 194, 75, .85);
    margin: 0 0 .5rem;
}
.wdbc-priority h2 {
    color: var(--wdbc-gold);
    font-size: clamp(1.6rem, 3vw, 2.3rem);
    line-height: 1.15;
    letter-spacing: -.015em;
    text-wrap: balance;
    margin: 0 0 .8rem;
}
.wdbc-priority p { margin: 0 0 .9rem; line-height: 1.65; }
.wdbc-priority p:last-child { margin-bottom: 0; }
.wdbc-priority a { color: var(--wdbc-gold); text-decoration-thickness: 1px; text-underline-offset: 3px; }

/* ---------- Position record: what we backed, and what became of it ---------- */
.wdbc-record { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 14px; }
.wdbc-record-item {
    display: grid;
    grid-template-columns: minmax(0, 12rem) minmax(0, 1fr);
    gap: clamp(14px, 2.4vw, 36px);
    padding: clamp(20px, 2.4vw, 30px);
    background: #fff;
    border: 1px solid rgba(22, 35, 63, .10);
    /* A gold rule down the supported side. The record is more persuasive, not
       less, for showing three bills that lost — so the marker records the
       position taken, never the outcome. */
    border-left: 4px solid var(--wdbc-gold);
    text-align: left;
}
.wdbc-record-bill {
    font-family: var(--wdbc-font-mono);
    font-size: .82rem; font-weight: 600; letter-spacing: .03em;
    color: var(--wdbc-navy);
    margin: 0 0 .2rem;
}
.wdbc-record-session {
    font-family: var(--wdbc-font-mono);
    font-size: .64rem; letter-spacing: .12em; text-transform: uppercase;
    color: rgba(22, 35, 63, .5);
    margin: 0 0 .7rem;
}
.wdbc-record-chip {
    display: inline-block;
    font-family: var(--wdbc-font-mono);
    font-size: .62rem; letter-spacing: .12em; text-transform: uppercase;
    color: #6B4E00;
    background: rgba(255, 194, 75, .22);
    border: 1px solid rgba(255, 194, 75, .55);
    padding: .22em .6em;
    margin: 0;
}
.wdbc-record-main h3 { margin: 0 0 .25rem; font-size: 1.15rem; color: var(--wdbc-navy); }
.wdbc-record-clause {
    font-style: italic;
    font-size: .88rem;
    color: rgba(22, 35, 63, .62);
    margin: 0 0 .6rem;
}
.wdbc-record-main > p { margin: 0 0 .7rem; line-height: 1.6; }
.wdbc-record-foot {
    display: grid;
    gap: .3rem;
    font-size: .78rem;
    line-height: 1.5;
    color: rgba(22, 35, 63, .6);
    margin: 0;
    padding-top: .7rem;
    border-top: 1px solid rgba(22, 35, 63, .08);
}
.wdbc-record-foot a { color: var(--wdbc-navy); text-underline-offset: 2px; }
.wdbc-record-note {
    font-size: .92rem;
    line-height: 1.6;
    color: rgba(22, 35, 63, .68);
    max-width: 62ch;
    margin: clamp(18px, 2vw, 26px) auto 0;
}
@media (max-width: 700px) {
    /* Stacked, the bill number reads as a label above the entry rather than a
       column beside it. */
    .wdbc-record-item { grid-template-columns: 1fr; gap: 12px; }
    .wdbc-record-session { margin-bottom: .45rem; }
}

/* ---------- The 2027 lanes: three fights, stated concretely ---------- */
.wdbc-lanes { list-style: none; margin: 8px 0 0; padding: 0; display: contents; }
.wdbc-lane {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid rgba(22, 35, 63, .10);
    border-top: 4px solid var(--wdbc-navy);
    padding: clamp(22px, 2.4vw, 30px);
    text-align: left;
}
.wdbc-lane-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .64rem; letter-spacing: .16em; text-transform: uppercase;
    color: var(--wdbc-gold-deep);
    margin: 0 0 .45rem;
}
.wdbc-lane h3 { margin: 0 0 .5rem; font-size: 1.18rem; color: var(--wdbc-navy); line-height: 1.25; }
/* The status line is the load-bearing detail: it says where the fight actually
   stands, which is the thing no other Wisconsin site publishes. */
.wdbc-lane-status {
    font-family: var(--wdbc-font-mono);
    font-size: .72rem; line-height: 1.5;
    color: rgba(22, 35, 63, .58);
    border-left: 2px solid rgba(255, 194, 75, .8);
    padding-left: .6rem;
    margin: 0 0 .8rem;
}
.wdbc-lane > p { margin: 0 0 .8rem; line-height: 1.6; font-size: .95rem; }
.wdbc-lane-role {
    margin: auto 0 0;
    padding-top: .8rem;
    border-top: 1px solid rgba(22, 35, 63, .08);
    font-size: .88rem;
    color: var(--wdbc-navy);
    font-weight: 600;
}

/* ---------- Brief: a pillar-coded section that is prose, not cards ----------
   .wbbc-value-section centres its direct <p> children, which is right for the
   one-line intro above a card grid and wrong for several paragraphs of
   argument. So a section that carries prose uses this wrapper instead and
   keeps the pillar token classes purely for colour.

   Text stays left-aligned at a real measure; only the block is centred. */
.wdbc-brief {
    max-width: 68ch;
    margin-inline: auto;
    margin-bottom: clamp(40px, 5vw, 64px);
    text-align: left;
}
.wdbc-brief > p {
    text-align: left;
    margin: 0 0 1.05rem;
    line-height: 1.65;
}
.wdbc-brief > p.wdbc-pillar-eyebrow {
    font-family: var(--wdbc-font-mono);
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--pillar);
    margin: 0 0 .5rem;
    max-width: none;
}
.wdbc-brief > h2 {
    text-align: left;
    margin: 0 0 10px;
}
/* The pillar rule under a heading is centred inside a card section; here the
   heading is left-aligned, so the rule has to be too. */
.wdbc-brief > h2::after {
    content: "";
    display: block;
    width: 4ch;
    height: 3px;
    margin: 12px 0 0;
    border-radius: 2px;
    background: var(--pillar);
}
/* Inside the brief's 68ch measure the default 15rem track only fits two
   columns, which strands the third figure on its own row. Narrower tracks
   keep all three side by side at the measure instead of dragging the
   scoreboard out of it with negative margins. */
.wdbc-brief > .wdbc-scoreboard {
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
}

/* ---------- Scoreboard: three figures that carry an argument ----------
   Used where a comparison IS the point and prose would bury it. The figures
   are deliberately not equal-weight decoration: each carries its own source
   in the note beneath, because an unattributed number on a policy page is
   worth less than no number at all.

   Ordered largest-to-smallest reads as a ranking the page never claimed, so
   the order here is narrative (them, us, the prize) and the type size is
   uniform. The contrast does the work; the styling does not editorialise. */
.wdbc-scoreboard {
    list-style: none;
    margin: clamp(22px, 3vw, 32px) 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
    gap: clamp(14px, 2vw, 22px);
}
.wdbc-scoreboard > li {
    padding: 18px 20px;
    background: var(--wdbc-cool);
    border-top: 3px solid var(--pillar, var(--wdbc-cyan-deep));
    border-radius: 2px;
    /* Column + auto top margin on the source pins every attribution to the
       card's bottom edge, so the three read as one row even when one label
       runs two lines longer than its neighbours. */
    display: flex;
    flex-direction: column;
}
.wdbc-scoreboard .wdbc-score-figure {
    display: block;
    font-family: var(--wdbc-font-display);
    font-size: clamp(1.75rem, 3.4vw, 2.4rem);
    line-height: 1.05;
    color: var(--wdbc-navy);
    font-variant-numeric: tabular-nums;
    margin: 0 0 .35rem;
}
.wdbc-scoreboard .wdbc-score-label {
    display: block;
    font-size: .93rem;
    line-height: 1.5;
    color: var(--wdbc-navy);
    margin: 0 0 .5rem;
}
.wdbc-scoreboard .wdbc-score-source {
    display: block;
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: rgba(22, 35, 63, .62);
    margin: auto 0 0;
    padding-top: .6rem;
}
.wdbc-scoreboard a { color: inherit; }

/* ---------- Interim study committees ---------- */
.wdbc-committees {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
    gap: 14px;
    margin: 8px 0 0;
    padding: 0;
    list-style: none;
}
.wdbc-committee {
    background: var(--wdbc-cool);
    border: 1px solid rgba(22, 35, 63, .10);
    padding: clamp(20px, 2.2vw, 26px);
    text-align: left;
}
.wdbc-committee h3 { margin: 0 0 .5rem; font-size: 1.05rem; color: var(--wdbc-navy); line-height: 1.3; }
.wdbc-committee-chairs {
    font-size: .86rem;
    color: rgba(22, 35, 63, .72);
    margin: 0 0 .6rem;
}
.wdbc-committee-charge {
    font-size: .88rem;
    line-height: 1.6;
    color: rgba(22, 35, 63, .68);
    margin: 0;
    padding-top: .6rem;
    border-top: 1px solid rgba(22, 35, 63, .08);
}
.wdbc-committee-charge strong { color: var(--wdbc-navy); font-weight: 600; }

/* A committee that has started taking evidence is a different object from one
   that is merely scheduled, and the page should not make the reader work that
   out from the prose. The gold spine marks the ones that are running now. */
.wdbc-committee-live { border-left: 3px solid var(--wdbc-gold); }

.wdbc-committee-status {
    font-size: .88rem;
    line-height: 1.6;
    color: rgba(22, 35, 63, .8);
    margin: .7rem 0 0;
    padding: .65rem .8rem;
    background: rgba(255, 194, 75, .16);
    border-radius: 3px;
}
.wdbc-committee-status strong { color: var(--wdbc-navy); font-weight: 700; }

/* Who is in the room, and who is not. Set smaller than the charge because it
   is supporting detail, but not so small it reads as a disclaimer. */
.wdbc-committee-note {
    font-size: .82rem;
    line-height: 1.62;
    color: rgba(22, 35, 63, .66);
    margin: .7rem 0 0;
}

/* The primary sources, listed rather than buried in a sentence. A reader who
   wants to check the claim should not have to hunt for the document, and a
   committee that publishes on a schedule will keep adding to this list. */
.wdbc-committee-docs {
    margin: .9rem 0 0;
    padding: .7rem 0 0;
    border-top: 1px solid rgba(22, 35, 63, .10);
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: .3rem;
}
.wdbc-committee-docs a {
    font-family: var(--wdbc-font-mono);
    font-size: .76rem;
    letter-spacing: .01em;
    color: var(--wdbc-gold-deep);
    text-decoration: none;
    border-bottom: 1px solid rgba(150, 105, 12, .3);
}
.wdbc-committee-docs a:hover,
.wdbc-committee-docs a:focus-visible {
    color: var(--wdbc-navy);
    border-bottom-color: var(--wdbc-navy);
}

/* ==========================================================================
   News index \u2014 one lead item, then a card grid. Every card carries art:
   a featured image where one exists, otherwise the deterministic plate from
   WBBC_News::placeholder_art, so the grid never reads half-broken.
   ========================================================================== */
.wbbc-news-cover {
    position: relative;
    overflow: hidden;
    background: var(--wdbc-navy-deep);
    aspect-ratio: 16 / 9;
}
.wbbc-news-cover > svg,
.wbbc-news-cover .wbbc-news-cover-img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* ---------- Lead item ---------- */
.wbbc-news-lead {
    display: grid;
    grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
    gap: clamp(20px, 3vw, 40px);
    align-items: center;
    text-decoration: none;
    color: inherit;
    padding-bottom: clamp(28px, 4vw, 44px);
    margin-bottom: clamp(28px, 4vw, 44px);
    border-bottom: 1px solid rgba(22, 35, 63, .14);
}
.wbbc-news-cover-lead { aspect-ratio: 3 / 2; }
.wbbc-news-lead-body { text-align: left; }
.wbbc-news-lead-title {
    margin: 0 0 .5rem;
    font-size: clamp(1.5rem, 3vw, 2.2rem);
    line-height: 1.15;
    letter-spacing: -.02em;
    text-wrap: balance;
    color: var(--wdbc-navy);
}
.wbbc-news-lead:hover .wbbc-news-lead-title,
.wbbc-news-lead:focus-visible .wbbc-news-lead-title { text-decoration: underline; text-underline-offset: 3px; }
.wbbc-news-more {
    display: inline-block;
    margin-top: .9rem;
    font-family: var(--wdbc-font-mono);
    font-size: .7rem; letter-spacing: .14em; text-transform: uppercase;
    color: var(--wdbc-gold-deep);
    border-bottom: 2px solid var(--wdbc-gold);
    padding-bottom: .2em;
}

/* ---------- Card grid ---------- */
.wbbc-news-grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 19rem), 1fr));
    gap: clamp(20px, 2.6vw, 32px);
}
.wbbc-news-card { display: flex; }
.wbbc-news-card-link {
    display: flex;
    flex-direction: column;
    width: 100%;
    text-decoration: none;
    color: inherit;
    background: #fff;
    border: 1px solid rgba(22, 35, 63, .10);
    transition: transform .18s ease, box-shadow .18s ease;
}
.wbbc-news-card-link:hover,
.wbbc-news-card-link:focus-visible {
    transform: translateY(-2px);
    box-shadow: 0 10px 28px rgba(22, 35, 63, .12);
}
@media (prefers-reduced-motion: reduce) {
    .wbbc-news-card-link { transition: none; }
    .wbbc-news-card-link:hover, .wbbc-news-card-link:focus-visible { transform: none; }
}
.wbbc-news-card-body { padding: clamp(16px, 1.8vw, 22px); text-align: left; }
.wbbc-news-title { margin: 0 0 .35rem; font-size: 1.08rem; line-height: 1.3; color: var(--wdbc-navy); }
.wbbc-news-card-link:hover .wbbc-news-title { text-decoration: underline; text-underline-offset: 3px; }

/* ---------- Shared meta line ---------- */
.wbbc-news-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .45rem .7rem;
    font-family: var(--wdbc-font-mono);
    font-size: .66rem;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: rgba(22, 35, 63, .55);
    margin: 0 0 .45rem;
}
.wbbc-news-type { color: var(--wdbc-gold-deep); }
/* The era badge states a fact about the record, not a downgrade \u2014 so it reads
   as a quiet label rather than a warning. */
.wbbc-news-archived {
    color: rgba(22, 35, 63, .6);
    background: rgba(22, 35, 63, .06);
    border: 1px solid rgba(22, 35, 63, .16);
    padding: .16em .5em;
    letter-spacing: .12em;
}
.wbbc-news-excerpt { color: #4A5568; }
.wbbc-news-excerpt p { margin: 0; line-height: 1.55; font-size: .92rem; }
.wbbc-news-lead .wbbc-news-excerpt p { font-size: 1rem; line-height: 1.6; }
.wbbc-news-empty { color: #4A5568; }

@media (max-width: 760px) {
    .wbbc-news-lead { grid-template-columns: 1fr; }
}

/* ==========================================================================
   News post — sections authored in Awen Client's composer format, rendered
   by WBBC_News::render_section when the plugin's own renderer is absent.
   Everything is measured from one readable column; only media and the
   accent blocks are allowed to break out of it.
   ========================================================================== */
.single-news .entry-content > * { max-width: 68ch; margin-inline: auto; }

/* Full-bleed hero: art behind, title over it. .entry-content is inside the
   theme's constrained container, so the bleed uses the same viewport-unit
   technique the page bands do rather than a grid track. */
.wbbc-np-hero {
    position: relative;
    max-width: 100vw !important;
    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    margin-bottom: clamp(32px, 4.5vw, 56px);
    min-height: clamp(340px, 52vh, 520px);
    display: grid;
    align-items: end;
    overflow: hidden;
    background: var(--wdbc-navy-deep);
    isolation: isolate;
}
.wbbc-np-hero-media { position: absolute; inset: 0; z-index: -1; }
.wbbc-np-hero-media > svg,
.wbbc-np-hero-media .wbbc-news-cover-img {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    display: block;
}
/* Scrim, two layers. The vertical one alone was tuned against the dark
   generated plates; over a bright photograph the headline sat on a pale wall
   and lost contrast. The horizontal layer guarantees a dark ground under
   left-aligned type whatever the picture behind it. */
.wbbc-np-hero::after {
    content: "";
    position: absolute; inset: 0;
    z-index: -1;
    background:
        linear-gradient(90deg, rgba(14,23,40,.88) 0%, rgba(14,23,40,.55) 42%, rgba(14,23,40,.05) 78%),
        linear-gradient(180deg, rgba(14,23,40,.34) 0%, rgba(14,23,40,.14) 40%, rgba(14,23,40,.90) 100%);
}
.wbbc-np-hero-inner {
    position: relative;
    width: 100%;
    max-width: 1120px;
    margin: 0 auto;
    padding: clamp(36px, 5vw, 72px) clamp(24px, 5vw, 48px);
    text-align: left;
}
.wbbc-np-hero-badge {
    display: inline-block;
    font-family: var(--wdbc-font-mono);
    font-size: .64rem; letter-spacing: .14em; text-transform: uppercase;
    color: #F2EEE2;
    border: 1px solid rgba(242, 238, 226, .45);
    padding: .2em .6em;
    margin: 0 0 .8rem;
}
.wbbc-np-hero h1 {
    max-width: 20ch;
    margin: 0 0 .6rem;
    font-size: clamp(2rem, 4.6vw, 3.2rem);
    line-height: 1.06;
    letter-spacing: -.025em;
    text-wrap: balance;
    color: #FBF3DE;
}
.wbbc-np-sub {
    max-width: 56ch;
    margin: 0;
    font-size: clamp(1rem, 1.6vw, 1.22rem);
    line-height: 1.5;
    color: rgba(214, 222, 236, .92);
}
.wbbc-np-hero-date {
    margin: 1.1rem 0 0;
    font-family: var(--wdbc-font-mono);
    font-size: .7rem; letter-spacing: .12em; text-transform: uppercase;
    color: rgba(214, 222, 236, .7);
}

.wbbc-np-body { line-height: 1.7; }
.wbbc-np-body h2 { margin: 2em 0 .5rem; font-size: clamp(1.3rem, 2.2vw, 1.65rem); color: var(--wdbc-navy); }
.wbbc-np-body p { margin: 0 0 1.05rem; }
.wbbc-np-body a { color: var(--wdbc-gold-deep); text-underline-offset: 2px; }

.wbbc-np-figure { max-width: 900px !important; margin: clamp(28px, 4vw, 44px) auto; }
.wbbc-np-figure img { width: 100%; height: auto; display: block; }
.wbbc-np-figure figcaption {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem; letter-spacing: .06em; line-height: 1.6;
    color: rgba(22, 35, 63, .58);
    margin-top: .6rem;
}
/* Keep embeds 16:9 without depending on the provider's inline attributes. */
.wbbc-np-video-frame { position: relative; aspect-ratio: 16 / 9; }
.wbbc-np-video-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

.wbbc-np-callout {
    background: var(--wdbc-cool);
    border-left: 4px solid var(--wdbc-gold);
    padding: clamp(20px, 2.4vw, 28px);
    margin: clamp(26px, 3.4vw, 40px) auto;
}
.wbbc-np-callout h2 { margin: 0 0 .5rem; font-size: 1.1rem; color: var(--wdbc-navy); }
.wbbc-np-callout p { margin: 0 0 .7rem; line-height: 1.6; }
.wbbc-np-callout p:last-child { margin-bottom: 0; }

.wbbc-np-quote {
    margin: clamp(30px, 4vw, 48px) auto;
    padding: 0 0 0 clamp(18px, 2vw, 26px);
    border-left: 3px solid var(--wdbc-gold);
}
.wbbc-np-quote p {
    margin: 0;
    font-size: clamp(1.15rem, 2.2vw, 1.5rem);
    line-height: 1.35;
    letter-spacing: -.01em;
    color: var(--wdbc-navy);
    text-wrap: balance;
}
.wbbc-np-quote cite {
    display: block;
    margin-top: .7rem;
    font-family: var(--wdbc-font-mono);
    font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; font-style: normal;
    color: rgba(22, 35, 63, .6);
}

.wbbc-np-event, .wbbc-np-cta {
    background: linear-gradient(135deg, var(--wdbc-navy) 0%, var(--wdbc-navy-deep) 100%);
    color: #D6DEEC;
    padding: clamp(26px, 3.2vw, 40px);
    margin: clamp(30px, 4vw, 48px) auto;
}
.wbbc-np-event h2, .wbbc-np-cta h2 { margin: 0 0 .5rem; color: var(--wdbc-gold); font-size: 1.3rem; line-height: 1.25; }
.wbbc-np-event p, .wbbc-np-cta p { margin: 0 0 .9rem; line-height: 1.6; }
.wbbc-np-event p:last-child, .wbbc-np-cta p:last-child { margin-bottom: 0; }
.wbbc-np-event-meta { font-family: var(--wdbc-font-mono); font-size: .74rem; letter-spacing: .06em; color: rgba(214, 222, 236, .75); }
.wbbc-np-btn {
    display: inline-block;
    background: var(--wdbc-gold);
    color: var(--wdbc-navy);
    font-weight: 700;
    padding: .7em 1.4em;
    text-decoration: none;
    border: 2px solid var(--wdbc-gold);
}
.wbbc-np-btn:hover, .wbbc-np-btn:focus-visible { background: transparent; color: var(--wdbc-gold); }

.wbbc-np-rule { border: 0; border-top: 1px solid rgba(22, 35, 63, .14); margin: clamp(30px, 4vw, 48px) auto; }

/* Hello Elementor's theme.css carries `.page-content a { text-decoration: underline }`
   at (0,1,1). A single class on the card link loses to that and every line of
   the card — meta, title, excerpt — inherits the underline. These selectors
   match at (0,2,1) rather than reaching for !important. Body links inside an
   article are left underlined on purpose; that rule is correct there. */
.wbbc-page-wrap a.wbbc-news-lead,
.wbbc-news-grid a.wbbc-news-card-link,
.page-content a.wbbc-news-lead,
.page-content a.wbbc-news-card-link { text-decoration: none; }

/* Same leak, same fix, for anything shaped like a button. A control that
   already reads as a button through its fill, border and padding does not also
   need an underline — on the gold primary CTA the line cuts through the label
   and makes a solid button look like a text link someone styled by accident.
   Kept separate from the card rule above so the reason each exists stays
   legible. Genuine inline links (photo credits, citations) are untouched and
   stay underlined, which is what that Hello Elementor rule is for. */
.wbbc-page-wrap a.wdbc-btn,
.wbbc-page-wrap a.wbbc-cta-btn,
.page-content a.wdbc-btn,
.page-content a.wbbc-cta-btn { text-decoration: none; }

/* ---------- Footer link colour ----------
   Hello Elementor's reset ships `a { color: #c36 }` — a magenta-pink with no
   place in this palette. The Elementor footer template sets no link colour of
   its own, so the utility row (Team · About · Contact · Terms · Privacy) was
   inheriting it against navy: off-brand and only ~2.6:1 on that ground. */
.elementor-location-footer a { color: #D6DEEC; }
.elementor-location-footer a:hover,
.elementor-location-footer a:focus-visible { color: var(--wdbc-gold); }
/* The DBA / tax-status block is body copy, not links. */
.elementor-location-footer p { color: inherit; }

/* ---------- News post: photo gallery + self-hosted video ---------- */
.wbbc-np-gallery { max-width: 1120px !important; margin: clamp(30px, 4vw, 48px) auto; }
.wbbc-np-gallery-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
    gap: clamp(8px, 1vw, 14px);
}
.wbbc-np-gallery-item {
    display: block;
    position: relative;
    aspect-ratio: 3 / 2;
    overflow: hidden;
    background: var(--wdbc-navy-deep);
}
.wbbc-np-gallery-item img {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .3s ease;
}
.wbbc-np-gallery-item:hover img,
.wbbc-np-gallery-item:focus-visible img { transform: scale(1.03); }
@media (prefers-reduced-motion: reduce) {
    .wbbc-np-gallery-item img { transition: none; }
    .wbbc-np-gallery-item:hover img { transform: none; }
}
.wbbc-np-gallery figcaption {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem; letter-spacing: .06em; line-height: 1.6;
    color: rgba(22, 35, 63, .58);
    margin-top: .7rem;
}
.wbbc-np-video video { width: 100%; height: auto; display: block; background: #000; }

/* Video that has not finished processing at the provider falls back to a link. */
.wbbc-np-video-pending {
    margin: 0;
    padding: clamp(20px, 2.4vw, 28px);
    background: var(--wdbc-cool);
    border-left: 4px solid var(--wdbc-gold);
    font-weight: 600;
}

/* Links inside news sections other than body copy were still inheriting Hello
   Elementor's `a { color: #c36 }` — only .wbbc-np-body had been given a brand
   colour. Cover every section that can contain a link. */
.wbbc-np-callout a,
.wbbc-np-figure a,
.wbbc-np-quote a,
.wbbc-np-video-pending a { color: var(--wdbc-gold-deep); text-underline-offset: 2px; }
.wbbc-np-event a:not(.wbbc-np-btn),
.wbbc-np-cta a:not(.wbbc-np-btn) { color: var(--wdbc-gold); }


/* ==========================================================================
   Pricing ladder — 2027 structure

   Seven rungs rather than five, so the grid needs a column cap: auto-fit alone
   put five cards on one row at desk widths and left two orphans below, which
   read as a second, lesser group. Capped at four, the ladder breaks 4 + 3.
   ========================================================================== */

.wdbc-tiers {
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
}
@media (min-width: 1100px) {
    .wdbc-tiers { grid-template-columns: repeat(4, 1fr); }
}

/* A rung can carry a flag above its name — "most companies start here", or the
   scarcity note on the underwriter seat. */
.wdbc-tier-flag {
    font-family: var(--wdbc-font-mono);
    font-size: .62rem;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--wdbc-navy);
    background: var(--wdbc-gold);
    align-self: flex-start;
    margin: 0 0 .8rem;
    padding: .3rem .6rem;
    border-radius: 999px;
}
.wdbc-tier-flag-scarce {
    background: transparent;
    color: var(--wdbc-gold-deep);
    border: 1px solid rgba(150, 105, 12, .45);
}

/* How the rung is billed today. Rendered from the record by [wdbc_tier_pay],
   never typed into the page, so it cannot go stale when a gateway is switched. */
.wdbc-tier-pay {
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: #5A6884;
    margin: .5rem 0 0;
}
.wdbc-tier-pay-card { color: var(--wdbc-gold-deep); }

/* The CTA now carries a second line naming the step and the plan, so the click
   target says where it goes instead of just "Join". */
.wdbc-tier .wdbc-tier-cta {
    display: flex;
    flex-direction: column;
    gap: .18rem;
    line-height: 1.25;
}
.wdbc-tier-cta-sub {
    font-family: var(--wdbc-font-mono);
    font-size: .6rem;
    font-weight: 400;
    letter-spacing: .1em;
    text-transform: uppercase;
    opacity: .78;
}

/* Members already on a rung get a static chip, not a link into a checkout that
   would only turn them away. */
.wdbc-tier .wdbc-tier-cta-current,
.wdbc-tier-featured .wdbc-tier-cta-current {
    background: var(--wdbc-cool);
    color: #4A5568;
    border: 1px dashed rgba(22, 35, 63, .28);
    cursor: default;
}

/* ---------- "What happens when you pick a level" ---------- */
.wdbc-join-how {
    background: var(--wdbc-cool);
    border: 1px solid #E3DCCA;
    border-radius: 14px;
    padding: clamp(22px, 3vw, 34px);
    margin: 30px 0;
}
.wdbc-join-how h2 { margin-top: 0; font-size: clamp(1.25rem, 2vw, 1.6rem); }
.wdbc-join-how-steps {
    list-style: none;
    margin: 1.2rem 0 1.4rem;
    padding: 0;
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}
.wdbc-join-how-steps li {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    background: #fff;
    border: 1px solid #E3DCCA;
    border-radius: 10px;
    padding: 16px 18px;
}
.wdbc-join-how-n {
    flex: 0 0 auto;
    width: 28px; height: 28px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    background: var(--wdbc-navy);
    color: var(--wdbc-gold);
    font-family: var(--wdbc-font-mono);
    font-size: .8rem;
    font-weight: 600;
}
.wdbc-join-how-body { font-size: .9rem; line-height: 1.55; color: #4A5568; }
.wdbc-join-how-body strong { color: var(--wdbc-navy); }
.wdbc-join-how-note {
    font-size: .84rem;
    line-height: 1.6;
    color: #5A6884;
    margin: .6rem 0 0;
}
.wdbc-join-how-note strong { color: var(--wdbc-navy); }
.wdbc-join-how-note a { color: var(--wdbc-gold-deep); text-underline-offset: 2px; }


/* ==========================================================================
   Join flow chrome — the step rail, the "you're joining X" card, and the
   pinned reminder on /registration.

   These live in the theme rather than beside the form styling in wbbc-core
   because the Elementor kit sets `h1 { color: #FBF3DE }` globally and its
   stylesheet loads after the plugin's. From the plugin file the page heading
   came out cream on cream — present, sized, and invisible. The theme
   stylesheet is the last one enqueued, so it wins without needing !important.
   ========================================================================== */

/* ---------- Step rail + page head ---------- */

.wdbc-join-head {
    max-width: 760px;
    margin: 0 auto;
    padding: 8px 0 0;
}

.wdbc-join-steps {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 18px;
    list-style: none;
    margin: 0 0 18px;
    padding: 0;
}
.wdbc-join-steps li {
    display: flex;
    align-items: center;
    gap: 8px;
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: rgba(22, 35, 63, .5);
}
.wdbc-join-step-n {
    width: 22px; height: 22px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    border: 1px solid rgba(22, 35, 63, .25);
    font-size: .66rem;
}
.wdbc-join-steps li.is-current { color: var(--wdbc-navy); }
.wdbc-join-steps li.is-current .wdbc-join-step-n {
    background: var(--wdbc-navy);
    border-color: var(--wdbc-navy);
    color: var(--wdbc-gold);
}
.wdbc-join-steps li.is-done { color: var(--wdbc-gold-deep); }
.wdbc-join-steps li.is-done .wdbc-join-step-n {
    background: var(--wdbc-gold);
    border-color: var(--wdbc-gold);
    color: var(--wdbc-navy);
}

.wdbc-join-head h1 {
    font-family: var(--wdbc-font-display);
    color: var(--wdbc-navy);
    font-size: clamp(1.9rem, 4vw, 2.6rem);
    line-height: 1.1;
    margin: 0 0 .5rem;
}
.wdbc-join-lede {
    font-family: var(--wdbc-font-body);
    font-size: 1rem;
    line-height: 1.6;
    color: #4A5568;
    margin: 0 0 22px;
}

/* ---------- The "you are joining X" card ---------- */

.wdbc-join-summary {
    max-width: 760px;
    margin: 0 auto 26px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 26px;
    background: linear-gradient(135deg, #16233F 0%, #0E1728 100%);
    color: var(--wdbc-cream);
    border: 1px solid rgba(255, 194, 75, .4);
    border-radius: 14px;
    padding: 22px 26px;
    box-shadow: 0 14px 34px rgba(22, 35, 63, .16);
}
.wdbc-join-summary-main { flex: 1 1 220px; }
.wdbc-join-summary-label {
    font-family: var(--wdbc-font-mono);
    font-size: .64rem;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--wdbc-gold);
    margin: 0 0 .3rem;
}
.wdbc-join-summary-name {
    font-family: var(--wdbc-font-display);
    font-size: 1.45rem;
    font-weight: 700;
    line-height: 1.15;
    margin: 0;
}
.wdbc-join-summary-terms { flex: 1 1 240px; }
.wdbc-join-summary-price {
    font-family: var(--wdbc-font-display);
    font-size: 1.45rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--wdbc-gold);
    margin: 0;
    line-height: 1.15;
}
.wdbc-join-summary-price span {
    font-family: var(--wdbc-font-body);
    font-size: .8rem;
    font-weight: 500;
    color: rgba(251, 243, 222, .72);
}
.wdbc-join-summary-pay {
    font-size: .82rem;
    line-height: 1.5;
    color: rgba(251, 243, 222, .78);
    margin: .3rem 0 0;
}
.wdbc-join-summary-change {
    flex: 0 0 auto;
    color: var(--wdbc-gold);
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .1em;
    text-transform: uppercase;
    text-decoration: underline;
    text-underline-offset: 4px;
}
.wdbc-join-summary-change:hover { color: #fff; }

.wdbc-join-summary-empty {
    background: var(--wdbc-cool);
    color: var(--wdbc-navy);
    border: 1px dashed rgba(22, 35, 63, .28);
    box-shadow: none;
}
.wdbc-join-summary-empty .wdbc-join-summary-label { color: var(--wdbc-gold-deep); }
.wdbc-join-summary-empty .wdbc-join-summary-change { color: var(--wdbc-gold-deep); }

/* The pinned reminder. Hidden until the script relocates it onto <html> — the
   theme's `overflow-x: clip` on body would otherwise make body the containing
   block and the bar would scroll away with the page. */
.wdbc-join-ticker {
    display: flex;
    align-items: center;
    gap: 14px;
    max-width: 760px;
    margin: 0 auto 20px;
    padding: 10px 16px;
    background: var(--wdbc-navy);
    color: var(--wdbc-cream);
    border-radius: 10px;
    font-size: .86rem;
}
.wdbc-join-ticker.is-pinned {
    position: fixed;
    left: 12px;
    right: 12px;
    bottom: 12px;
    /* left/right + max-width would pin it to the left edge; auto margins keep it
       under the form it belongs to. */
    margin: 0 auto;
    z-index: 9998;
    box-shadow: 0 10px 30px rgba(14, 23, 40, .35);
    transform: translateY(140%);
    transition: transform .18s ease;
}
.wdbc-join-ticker.is-pinned.is-visible { transform: translateY(0); }
.wdbc-join-ticker-name { font-family: var(--wdbc-font-display); font-weight: 700; }
.wdbc-join-ticker-price {
    color: var(--wdbc-gold);
    font-variant-numeric: tabular-nums;
    margin-left: auto;
}
.wdbc-join-ticker-change {
    color: var(--wdbc-cream);
    text-decoration: underline;
    text-underline-offset: 3px;
    font-family: var(--wdbc-font-mono);
    font-size: .68rem;
    letter-spacing: .1em;
    text-transform: uppercase;
}

@media (prefers-reduced-motion: reduce) {
    .wdbc-join-ticker.is-pinned { transition: none; }
}

