/* ==========================================================================
   additional-v2.css - redesigned step 1 ("Enter your xID") of the Gold
   upgrade flow, matching the /buyxid redesign.

   Loaded AFTER additional-page.css so the .bxa-* rules here win over the old
   .xpal-card / .xpal-stepper treatment, which is now unused markup-wise but
   still shipped for panels 2-4. Every hook additional.js and
   additional-page.js rely on is preserved: #businessxIDInput,
   #searchBusinessxIDForm, #xIDBusinessList, #continueBtn, .removeButton,
   .additional-icon-container, .business-error-message.*, .xpal-step (x4, in
   DOM order) and .xpal-panel / #xpal-panel-N.

   The viewport shell (flex column, section gap/width tokens, footer strip)
   mirrors buyxid-v2.css. It is duplicated rather than shared because that
   file also carries the buyxid-only card/plan rules; if a third page in this
   flow needs the same shell, lift these tokens plus the .buyxid-container /
   footer-strip block into a gold-shell.css that all of them load.
   ========================================================================== */

:root {
    --bxa-bg: #000;
    --bxa-line: #1F1F1F;
    --bxa-cream: #FBF8D8;
    --bxa-gold: #D7C478;
    --bxa-text: #C8C5A6;
    --bxa-muted: rgba(255, 255, 255, 0.45);
    /* caret in the xID field - off-white rather than pure #fff */
    --bxa-offwhite: #EDEDE7;
    /* width of the Save50.png badge; its height follows the 363:258 aspect */
    --bxa-save-w: clamp(58px, min(5.2vw, 8.6vh), 88px);
    /* the flow's accent - the step ring, the filled digit underline and the
       add button; the -soft tint is the enabled Continue button */
    --bxa-accent: #4F46D6;
    /* The add button in the mockup is a DARK muted indigo disc with a LIGHT
       lavender "+" on it - not the bright accent with a white glyph. Both get
       their own tokens so the filled digit underline and the completed step
       dots can keep the brighter --bxa-accent. */
    --bxa-add-bg: #2F2A5E;
    --bxa-add-fg: #9D94F7;
    /* One source for the disc size so the glyph can be sized from it - a "+"
       only paints about 55% of its em box, so a fixed font-size left it
       looking tiny inside the circle. */
    --bxa-add-size: clamp(42px, min(3.9vw, 6.5vh), 62px);
    --bxa-accent-ring: #6C63F0;
    --bxa-accent-soft: #9D94F7;
    /* Shared with buyxid: equal breathing space above the section (header ->
       content) and below it (content -> divider), and one column width for
       the section, the divider and the legal copy. */
    --bxa-section-gap: clamp(28px, min(4.5vw, 7.2vh), 78px);
    /* The mockup gives the whole two-column block 62.4% of the canvas width
       (916 of 1467) - ours was running at 67.6%, which is what made every
       panel, field and pill inside it read as stretched. The 1:2 column split
       was already right; only the section around it was too wide. */
    --bxa-section-width: min(1220px, 136vh);
}

/* ------------------------------------------------------- viewport shell -- */
/* additional.css makes <body> a flex column and gives .buyxid-container
   "flex: 1" (i.e. flex-basis:0 and shrinkable). That combination let this
   container collapse to the viewport height while its own content was taller,
   so the site <footer> - the body's next flex item - rode up over the legal
   copy. Most visible on mobile, where the stacked layout is always taller
   than the screen. flex:none pins the container to its content height, and
   min-height keeps the full-viewport shell on desktop. */
.additional-page {
    flex: none;
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    background-color: var(--bxa-bg);
}

    .additional-page > header {
        flex: 0 0 auto;
    }

.bxa-page {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding-top: var(--bxa-section-gap);
}

    .bxa-page > .container {
        /* additional.css/checkout.css cap .container at the bootstrap xl width,
           which is narrower than the section token; widen it so .bxa-layout
           can actually reach --bxa-section-width like it does on /buyxid. */
        max-width: calc(var(--bxa-section-width) + 24px);
        flex: 1 1 auto;
        display: flex;
        flex-direction: column;
        min-height: 0;
    }

/* --------------------------------------------------------------- layout -- */
/* Left rail is roughly half the width of the panel column, matching the
   mockup's 1:2 split. Both columns stretch so the Continue button can sit on
   the section's bottom edge however tall the viewport is. */
.bxa-layout {
    flex: 1 1 auto;
    min-height: 0;
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
    gap: clamp(32px, 4.4vw, 64px);
    align-items: stretch;
    width: 100%;
    max-width: var(--bxa-section-width);
    margin-inline: auto;
}

/* ------------------------------------------------------------ left rail -- */
.bxa-side {
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.bxa-brand {
    margin-bottom: clamp(28px, 5.4vh, 58px);
}

/* Weighted toward vw rather than vh: on a short desktop viewport a vh-led
   clamp squeezed this down to ~28px, far smaller than the mockup's mark. */
.bxa-brand-mark {
    display: block;
    width: clamp(38px, min(3.4vw, 6vh), 58px);
    height: auto;
    margin-bottom: clamp(10px, 1.8vh, 18px);
}

.bxa-page .bxa-brand-title {
    margin: 0;
    font-size: clamp(15px, min(1.4vw, 2.3vh), 21px);
    font-weight: 400;
    line-height: 1.3;
    color: #fff;
}

.bxa-page .bxa-gold {
    color: var(--bxa-gold);
}

/* ------------------------------------------------------ vertical stepper -- */
.bxa-steps {
    list-style: none;
    margin: 0;
    padding: 0;
}

/* .xpal-step is styled as a centred column by additional-page.css for the old
   horizontal stepper; these two-class selectors out-specify it. */
.bxa-steps .xpal-step {
    position: relative;
    display: flex;
    /* additional-page.css sets flex-direction:column on .xpal-step for the
       old horizontal stepper - the rail is a row: dot, then label + copy. */
    flex-direction: row;
    align-items: flex-start;
    gap: 18px;
    flex: 0 0 auto;
    padding-bottom: clamp(20px, 4vh, 44px);
}

    .bxa-steps .xpal-step:last-child {
        padding-bottom: 0;
    }

    /* additional-page.css draws the OLD stepper's horizontal connector with
       .xpal-step::after - it would cut across the panel column here. */
    .bxa-steps .xpal-step::after {
        display: none;
    }

    /* Connector: from just under this step's dot to the next step's dot.
       2px wide, centred on the 15px dot (centre 7.5px). */
    .bxa-steps .xpal-step:not(:last-child)::before {
        content: "";
        position: absolute;
        left: 6.5px;
        top: 20px;
        bottom: -4px;
        width: 2px;
        background: #2B2B2B;
    }

        /* The mockup fills the completed part of the rail: a segment leaving a
           done step is purple, so only the run after the current step is grey. */
        .bxa-steps .xpal-step.done:not(:last-child)::before {
            background: var(--bxa-accent-ring);
        }

.bxa-step-dot {
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    margin-top: 3px;
    border-radius: 50%;
    border: 1px solid #454545;
    background: transparent;
    box-sizing: border-box;
}

.bxa-steps .xpal-step.active .bxa-step-dot {
    border: 2px solid var(--bxa-accent-ring);
}

/* completed steps carry a tick, as in the mockup */
.bxa-steps .xpal-step.done .bxa-step-dot {
    position: relative;
    border-color: var(--bxa-accent);
    background: var(--bxa-accent);
}

    .bxa-steps .xpal-step.done .bxa-step-dot::after {
        content: "";
        position: absolute;
        left: 4px;
        top: 3px;
        width: 4px;
        height: 7px;
        border: solid #fff;
        border-width: 0 1.5px 1.5px 0;
        transform: rotate(45deg);
    }

.bxa-step-text {
    display: block;
    min-width: 0;
}

.bxa-step-label {
    display: block;
    font-size: clamp(12.5px, min(1.1vw, 1.8vh), 15px);
    line-height: 1.3;
    color: #6E6E6E;
}

.bxa-steps .xpal-step.active .bxa-step-label,
.bxa-steps .xpal-step.done .bxa-step-label {
    color: #fff;
}

.bxa-step-desc {
    display: block;
    margin-top: 3px;
    font-size: clamp(10.5px, min(0.85vw, 1.35vh), 12px);
    line-height: 1.35;
    color: #5A5A5A;
}

/* In the mockup the current step is the brightest thing in the rail - its
   description is white, not the muted grey the other steps use. */
.bxa-steps .xpal-step.active .bxa-step-desc {
    color: #F0F0F0;
}

/* ----------------------------------------------------------- panel area -- */
.bxa-main {
    min-width: 0;
    display: flex;
    flex-direction: column;
}

/* xpalGoTo() sets .style.display to 'block'/'none' inline, so the panel itself
   has to stay a block box - the inner wrapper is what lays the content out and
   lets .bxa-actions fall to the bottom of the column. */
.bxa-main .xpal-panel {
    flex: 1 1 auto;
    min-height: 0;
    padding: 0;
    display: none;
}

    .bxa-main .xpal-panel.active {
        display: block;
    }

.bxa-panel-inner {
    display: flex;
    flex-direction: column;
    min-height: 100%;
}

.bxa-main .xpal-panel-title {
    margin: 0 0 10px;
    font-size: clamp(24px, min(2.3vw, 3.9vh), 38px);
    font-weight: 400;
    line-height: 1.2;
    color: #fff;
}

.bxa-main .xpal-panel-sub {
    margin: 0 0 clamp(26px, 6vh, 62px);
    font-size: clamp(13px, min(1.2vw, 2vh), 17px);
    line-height: 1.4;
    color: #8A8A8A;
}

/* -------------------------------------------------------- 9-digit field -- */
/* The nine .bxa-cell spans are the visible field; #businessxIDInput is laid
   over them at opacity 0 so it still receives typing, paste and focus (and
   additional.js keeps formatting/reading/clearing it untouched). The caret is
   drawn by CSS on the cell at the current digit position - see
   additional-v2.js, which mirrors the input's value onto the cells. */
.bxa-xid-field {
    position: relative;
    display: flex;
    align-items: center;
    gap: clamp(16px, 2.2vw, 32px);
    margin: 0 0 14px;
}

.bxa-cells {
    display: flex;
    gap: clamp(14px, 1.6vw, 24px);
}

.bxa-cell-group {
    display: flex;
    gap: clamp(6px, 0.7vw, 11px);
}

/* The height is pinned rather than left to the content: an empty cell has no
   inline content, so it would collapse to just padding + border and every
   empty cell would be shorter than a filled one - which is what clipped the
   caret. box-sizing:border-box means 1.15em of content box either way. */
.bxa-cell {
    position: relative;
    box-sizing: border-box;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    width: clamp(32px, min(3.1vw, 5.2vh), 54px);
    height: calc(1.15em + 10px);
    padding-bottom: 8px;
    border-bottom: 2px solid #3A3A3A;
    font-family: "Google Sans", Arial, sans-serif;
    font-size: clamp(22px, min(2.3vw, 3.9vh), 38px);
    font-weight: 400;
    line-height: 1.15;
    text-align: center;
    color: #fff;
    transition: border-color 0.15s ease;
}

    .bxa-cell.is-filled {
        border-bottom-color: var(--bxa-accent);
    }

    /* blinking insertion point on the next empty cell while the field has focus */
    .bxa-cell.is-caret {
        border-bottom-color: var(--bxa-accent);
    }

        /* Sized in em against the cell's own font-size, so it tracks the digit
           height at every viewport instead of depending on the cell box. */
        .bxa-cell.is-caret::after {
            content: "";
            position: absolute;
            left: 50%;
            top: 0.12em;
            height: 0.95em;
            width: 2px;
            transform: translateX(-50%);
            border-radius: 1px;
            background: var(--bxa-offwhite);
            animation: bxa-blink 1.1s step-end infinite;
        }

@keyframes bxa-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0; }
}

/* The real input: full-bleed over the cells, invisible but focusable. */
.bxa-xid-field #businessxIDInput {
    position: absolute;
    left: 0;
    top: 0;
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
    color: transparent;
    caret-color: transparent;
    font-size: 16px; /* >=16px so iOS Safari does not zoom on focus */
    outline: none;
    cursor: text;
    z-index: 2;
}

    /* additional-multilingual.js sets a translated placeholder on this field.
       The mockup has none - the nine underlines ARE the affordance - and it
       would otherwise print straight across the cells, so it is hidden here
       rather than by fighting the i18n call. */
    .bxa-xid-field #businessxIDInput::placeholder {
        color: transparent !important;
        opacity: 0 !important;
    }

/* The add button and the lookup spinner occupy the SAME slot: pressing + swaps
   it for the loader while the xID is validated, so nothing shifts sideways. */
.bxa-add-slot {
    position: relative;
    flex: 0 0 auto;
    z-index: 3;
    width: var(--bxa-add-size);
    height: var(--bxa-add-size);
}

    /* additional-page.css pins this container to "right:14px; top:50%" with
       !important for the old inline-input layout, and caps the spinner at
       18px. Matching that weight AND out-specifying it is the only way to
       re-seat it inside the round slot. */
    .upgrade.xpal-xid-input-wrap .xpal-xid-row .bxa-add-slot .additional-icon-container {
        position: absolute !important;
        inset: 0 !important;
        right: auto !important;
        top: auto !important;
        width: 100% !important;
        height: 100% !important;
        margin: 0 !important;
        transform: none !important;
        display: none;
        align-items: center;
        justify-content: center;
    }

    /* additional.js toggles the container's inline display; additional-v2.js
       mirrors that onto this class so the + can be hidden at the same time. */
    .bxa-add-slot.is-loading .additional-icon-container {
        display: flex !important;
    }

    .bxa-add-slot.is-loading .bxa-add {
        opacity: 0;
        pointer-events: none;
    }

    /* The spinner itself is gold.css's .loader; just scale it to the slot. */
    .upgrade.xpal-xid-input-wrap .xpal-xid-row .bxa-add-slot .loader {
        position: relative !important;
        inset: auto !important;
        width: 44% !important;
        height: 44% !important;
        margin: 0 !important;
    }

.bxa-add {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--bxa-add-bg);
    color: var(--bxa-add-fg);
    /* the glyph is drawn below, not typed - see the note on ::before */
    font-size: 0;
    line-height: 0;
    cursor: pointer;
    transition: opacity 0.15s ease, background-color 0.15s ease, transform 0.1s ease;
}

    .bxa-add:hover:not(:disabled) {
        background: #3A3475;
    }

    .bxa-add:active:not(:disabled) {
        transform: scale(0.96);
    }

/* The "+" is drawn as two bars rather than typed. A text "+" is centred by
   its line box, but its ink sits above the em-box middle, so flex centring
   left it looking high in the disc - and the offset shifts with whichever
   font actually loads. Two absolutely centred bars are exact. */
.bxa-add > span {
    display: none;
}

.bxa-add::before,
.bxa-add::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    border-radius: 1px;
    background: var(--bxa-add-fg);
}

.bxa-add::before {
    width: calc(var(--bxa-add-size) * 0.32);
    height: max(2px, calc(var(--bxa-add-size) * 0.036));
}

.bxa-add::after {
    width: max(2px, calc(var(--bxa-add-size) * 0.036));
    height: calc(var(--bxa-add-size) * 0.32);
}

    /* Only offered once a full 9-digit xID is in the field - additional-v2.js
       toggles [disabled]. Kept in the layout (not display:none) so the cells
       do not shift sideways when it appears. */
    .bxa-add:disabled {
        opacity: 0;
        pointer-events: none;
    }

.bxa-main .xpal-xid-hint {
    margin: 0 0 6px;
    font-size: clamp(12px, min(1vw, 1.7vh), 14px);
    line-height: 1.4;
    color: #6E6E6E;
}

    .bxa-main .xpal-xid-hint.err {
        color: #E06C6C;
    }

/* --------------------------------------------------------- entered xIDs -- */
/* additional.js sets #xIDBusinessList.style.display to 'block' / 'none'
   inline, which would kill the flex row - !important keeps the row intact
   either way, and an empty <ul> collapses to zero height on its own. */
/* additional-page.css gives the .xpal-xid-tags wrapper its own flex layout and
   a 24px bottom margin for the old card; neutralise it so the gap under the
   hint is set in one place (the list's margin-top). */
.bxa-main .xpal-xid-tags {
    display: block;
    margin: 0;
    min-height: 0;
}

.bxa-main #xIDBusinessList {
    display: flex !important;
    flex-wrap: wrap;
    gap: 12px;
    margin: clamp(18px, 3.4vh, 34px) 0 0 !important;
    padding: 0 !important;
    list-style: none;
}

    /* Mockup proportions: a compact pill that hugs its text, with the remove
       badge tucked close to the right edge - padding is asymmetric because the
       badge needs far less breathing room than the leading digits. */
    .bxa-main #xIDBusinessList li {
        display: flex;
        align-items: center;
        gap: clamp(9px, 0.9vw, 13px);
        padding: clamp(9px, 1.4vh, 13px) 9px clamp(9px, 1.4vh, 13px) clamp(16px, 1.3vw, 24px);
        border-radius: 999px;
        background: #232323;
        font-family: "Google Sans", Arial, sans-serif;
        font-size: clamp(14px, min(1.3vw, 2.2vh), 20px);
        letter-spacing: 0.5px;
        color: #fff;
    }

    /* assets/Cross.png is the complete badge - circle and glyph - so the button
       just renders it: no background colour, no border, and the "x" character
       additional.js puts in the button is hidden rather than removed (that
       textContent is also its accessible fallback, and buildRemoveButton() is
       shared, so the markup stays untouched).
       additional-page.css styles this same button with !important on
       background/border/border-radius/colour, so every property that has to
       beat it carries !important too. */
    .bxa-main #xIDBusinessList .removeButton {
        flex: 0 0 auto;
        width: clamp(17px, min(1.4vw, 2.3vh), 25px);
        height: clamp(17px, min(1.4vw, 2.3vh), 25px);
        padding: 0 !important;
        border: 0 !important;
        border-radius: 50% !important;
        background-color: transparent !important;
        background-image: url("../assets/Cross.png") !important;
        background-size: contain !important;
        background-position: center !important;
        background-repeat: no-repeat !important;
        /* hides the "x" glyph without dropping it from the accessibility tree */
        color: transparent !important;
        font-size: 0 !important;
        line-height: 0 !important;
        cursor: pointer;
        opacity: 0.92;
        transition: opacity 0.15s ease, transform 0.1s ease;
    }

        .bxa-main #xIDBusinessList .removeButton:hover {
            opacity: 1;
            transform: scale(1.08);
        }

/* -------------------------------------------------------------- actions -- */
/* margin-top:auto drops the button onto the bottom edge of the stretched
   panel column, level with the bottom of the left rail. */
.bxa-actions {
    margin-top: auto;
    padding-top: 32px;
}

.bxa-main #continueBtn {
    /* .xpal-btn in additional-page.css is a full-width flex block; the mockup
       has a compact pill sitting at the left edge of the panel column. */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto;
    margin: 0;
    /* The mockup pill is noticeably more compact: about 2.36 wide for its
       height, where this was running at 3.24 (136x42). Height and type are
       unchanged - only the width comes in. */
    min-width: 99px;
    padding: clamp(11px, 1.6vh, 15px) clamp(21px, 3.05vh, 30px);
    border: 0;
    border-radius: 999px;
    background-color: #232323 !important;
    color: #6E6E6E !important;
    font-size: clamp(13px, min(1.05vw, 1.7vh), 15px);
    font-weight: 400;
    cursor: not-allowed;
    transition: background-color 0.15s ease, color 0.15s ease;
}

    /* additional.js adds .enabled once at least one xID is in the list.
       .xpal-btn-purple in additional-page.css paints this same button, so both
       states are declared at !important weight to keep the pair symmetrical -
       without it the disabled grey wins and the button never lights up. */
    .bxa-main #continueBtn.enabled {
        background-color: #9D94F7 !important;
        color: #14122E !important;
        cursor: pointer;
    }

        .bxa-main #continueBtn.enabled:hover {
            background-color: #ADA5FA !important;
        }

/* ============================================ STEP 2 : Choose a Plan ==== */
/* Step 2 stacks four blocks where step 1 has one field, so its lead-in gap
   is tighter - the mockup leaves roughly a third of the column empty below
   the ticket, which only survives if this step does not use step 1's much
   larger subtitle margin. */
.bxa-main #xpal-panel-2 .xpal-panel-sub {
    margin-bottom: clamp(16px, 4.4vh, 46px);
}

/* The mockup keeps this step's controls in a column narrower than the panel
   itself, left-aligned under the heading. */
.bxa-plan-body {
    max-width: 640px;
}

/* ------------------------------------------------------ segmented switch -- */
/* One track, three segments. These nodes are the legacy .subscritionDetail
   plan cards, so additional-page.css styles them as bordered cards with
   absolutely-placed radios and badges - all of that is unwound here. */
.bxa-main .bxa-plan-switch {
    display: flex;
    align-items: stretch;
    gap: 4px;
    padding: 4px;
    border-radius: 999px;
    background: #141414;
    border: 1px solid #232323;
}

.bxa-main .bxa-plan-switch .subscritionDetail {
    flex: 1 1 0;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 8px;
    min-height: 0;
    width: auto !important;
    margin: 0 !important;
    padding: clamp(6px, 1.05vh, 11px) 10px !important;
    border: 0 !important;
    border-radius: 999px !important;
    background: transparent !important;
    box-shadow: none !important;
    cursor: pointer;
    transition: background-color 0.15s ease;
}

    .bxa-main .bxa-plan-switch .subscritionDetail:hover {
        background: #1E1E1E !important;
    }

    /* additional.js marks the chosen plan with .green */
    .bxa-main .bxa-plan-switch .subscritionDetail.green {
        background: var(--bxa-accent-soft) !important;
    }

/* Everything the old card layout rendered inside a segment is taken out of
   the visual flow, but stays in the DOM: additional.js writes prices into
   #perMonthAmount / #perYearAmount / #lifetimeAmount and reads .xpal-price
   and .subscriptionText h3 back out. display:none keeps textContent readable
   (which is all the JS needs) and beats the legacy !important sizing. */
.bxa-main .bxa-plan-switch .xpal-plan-info,
.bxa-main .bxa-plan-switch .xpal-radio,
.bxa-main .bxa-plan-switch .xpal-plan-badge,
.bxa-main .bxa-plan-switch .webCheckBox,
.bxa-main .bxa-plan-switch .mobileCheckBox {
    display: none !important;
}

    /* additional-page.css also draws a 20px radio dot as .subscritionDetail
       ::before, absolutely placed at left:16px - it sat on top of the label. */
    .bxa-main .bxa-plan-switch .subscritionDetail::before,
    .bxa-main .bxa-plan-switch .subscritionDetail::after {
        display: none !important;
        content: none !important;
    }

.bxa-seg-label {
    font-size: clamp(12px, min(1.05vw, 1.8vh), 16px);
    line-height: 1.2;
    color: #E6E6E6;
    white-space: nowrap;
}

.bxa-main .bxa-plan-switch .subscritionDetail.green .bxa-seg-label {
    color: #14122E;
}

.bxa-seg-chip {
    padding: 3px 8px;
    border-radius: 999px;
    font-size: clamp(9.5px, min(0.78vw, 1.3vh), 12px);
    line-height: 1.2;
    white-space: nowrap;
    color: #14122E;
}

.bxa-seg-chip--gold {
    background: #C7C0FB;
}

.bxa-seg-chip--green {
    background: #8BEFC1;
}

/* --------------------------------------------------------- xID summary -- */
.bxa-xid-bar {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    margin-top: clamp(10px, 1.9vh, 22px);
    padding: clamp(8px, 1.35vh, 15px) clamp(14px, 1.2vw, 22px);
    border: 1px solid #232323;
    border-radius: 28px;
    background: #0C0C0C;
}

.bxa-xid-bar-label {
    font-size: clamp(12px, min(1.05vw, 1.8vh), 16px);
    color: #CFCFCF;
}

.bxa-xid-bar-list {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

    .bxa-xid-bar-list span {
        padding: 5px clamp(10px, 0.9vw, 16px);
        border-radius: 999px;
        background: #2A2A2A;
        font-family: "Google Sans", Arial, sans-serif;
        font-size: clamp(12px, min(1.1vw, 1.9vh), 16px);
        letter-spacing: 0.5px;
        color: #fff;
    }

/* ---------------------------------------------------- membership ticket -- */
/* xpal-cost-bg.webp is the WHOLE ticket: rounded corners, the warm glow on
   both panes, and the dashed perforation between them - so it is the card's
   background, not the stub's, and nothing here draws a border, a gradient or
   a tear line of its own. The artwork puts its perforation at ~63% of the
   width, which is what fixes the column ratio below; changing one without the
   other will slide the divider off the seam in the image. */
.bxa-ticket {
    position: relative;
    display: grid;
    grid-template-columns: 63.3% minmax(0, 1fr);
    margin-top: clamp(10px, 1.9vh, 22px);
    border-radius: 18px;
    background-image: url(https://dz5tyoxl8h44g.cloudfront.net/xpal-cost-bg.webp);
    background-size: 100% 100%;
    background-position: center;
    background-repeat: no-repeat;
    /* Same hairline as the plan switch and the xID bar above, so the three
       stacked blocks read as one family. background-origin is widened to the
       border box or the artwork would sit 1px inside its own rounded edge. */
    background-origin: border-box;
    border: 1px solid #232323;
    /* NOT overflow:hidden - the Save50 badge overhangs the top-right corner,
       and the rounded corners come from the artwork itself. */
}

.bxa-ticket-main {
    padding: clamp(12px, 1.9vh, 22px) clamp(16px, 1.5vw, 26px);
}

.bxa-main .bxa-ticket-title {
    margin: 0 0 4px;
    font-size: clamp(15px, min(1.35vw, 2.3vh), 21px);
    font-weight: 400;
    line-height: 1.25;
    color: #fff;
}

.bxa-ticket-accent {
    color: var(--bxa-gold);
}

.bxa-ticket-sub {
    display: block;
    color: #fff;
}

.bxa-ticket-desc {
    margin: 0 0 clamp(9px, 1.8vh, 20px);
    max-width: 34ch;
    font-size: clamp(10px, min(0.82vw, 1.4vh), 12.5px);
    line-height: 1.35;
    color: #8A8A8A;
}

.bxa-ticket-unit-label {
    display: block;
    margin-bottom: 2px;
    font-size: clamp(10px, min(0.82vw, 1.4vh), 12.5px);
    color: #9A9A9A;
}

.bxa-main .bxa-ticket-price {
    display: flex;
    align-items: baseline;
    gap: 2px;
    margin: 0 0 clamp(8px, 1.5vh, 18px);
    color: var(--bxa-gold);
}

.bxa-ticket-amount {
    font-family: "Google Sans", Arial, sans-serif;
    font-size: clamp(26px, min(2.5vw, 4.2vh), 42px);
    font-weight: 400;
    line-height: 1;
}

.bxa-ticket-period {
    font-size: clamp(11px, min(0.95vw, 1.6vh), 15px);
}

.bxa-ticket-cta {
    display: flex;
    align-items: center;
    gap: clamp(14px, 1.6vw, 30px);
}

/* Gold "Buy Now" pill - .xpal-btn-purple in additional-page.css paints this
   node blue-violet and full width, so both are overridden at that weight. */
.bxa-main #xpal-continue-pay {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto;
    margin: 0;
    min-width: clamp(96px, 9vw, 132px);
    padding: clamp(9px, 1.5vh, 14px) clamp(16px, 1.4vw, 26px);
    border: 0;
    border-radius: 999px;
    background-color: transparent !important;
    background-image: url(https://dz5tyoxl8h44g.cloudfront.net/nu-gold-button.png) !important;
    background-size: cover !important;
    background-position: center !important;
    background-repeat: no-repeat !important;
    color: #1C1902 !important;
    font-size: clamp(11px, min(0.95vw, 1.6vh), 15px);
    font-weight: 600;
    cursor: pointer;
}

    .bxa-main #xpal-continue-pay:hover {
        filter: brightness(1.06);
    }

/* struck original price + its small SAVE chip, beside the CTA */
.bxa-ticket-was-wrap {
    position: relative;
    display: inline-flex;
    align-items: center;
}

.bxa-ticket-was {
    font-family: "Google Sans", Arial, sans-serif;
    font-size: clamp(17px, min(1.6vw, 2.7vh), 27px);
    color: #6E6A55;
    text-decoration: line-through;
    text-decoration-color: #D93636;
    text-decoration-thickness: 2px;
}

.bxa-ticket-was-save {
    position: absolute;
    top: -1.15em;
    left: 0;
    padding: 2px 7px;
    border-radius: 6px;
    font-family: Arial, sans-serif;
    font-size: clamp(8.5px, min(0.7vw, 1.15vh), 11px);
    font-weight: 700;
    line-height: 1.15;
    color: #14122E;
    white-space: nowrap;
    background: #F3C77B;
}

.bxa-ticket[data-tone="green"] .bxa-ticket-was-save {
    background: #58FFAC;
}

/* the stub ------------------------------------------------------------- */
/* Transparent - the perforation and glow come from the ticket's background
   artwork. The extra top padding keeps the first row clear of the SAVE flag. */
.bxa-ticket-stub {
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: clamp(8px, 1.6vh, 16px);
    padding: clamp(18px, 2.9vh, 34px) clamp(14px, 1.3vw, 22px) clamp(12px, 1.9vh, 22px);
    text-align: right;
}

.bxa-stub-row {
    display: block;
}

.bxa-stub-label {
    display: block;
    font-size: clamp(9px, min(0.75vw, 1.3vh), 11.5px);
    line-height: 1.3;
    color: #8F8F8F;
}

.bxa-stub-value {
    display: block;
    font-family: "Google Sans", Arial, sans-serif;
    font-size: clamp(11px, min(0.95vw, 1.6vh), 14.5px);
    line-height: 1.35;
    color: #EDEDED;
}

.bxa-main .bxa-stub-total {
    display: block;
    font-family: "Google Sans", Arial, sans-serif;
    font-size: clamp(19px, min(1.85vw, 3.1vh), 31px);
    font-weight: 400;
    line-height: 1.1;
    color: var(--bxa-gold);
}

/* big SAVE flag on the ticket's top-right corner (year / lifetime only) */
.bxa-ticket-save {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 2;
    padding: clamp(4px, 0.7vh, 7px) clamp(8px, 0.8vw, 14px);
    border-bottom-left-radius: 12px;
    font-family: Arial, sans-serif;
    font-size: clamp(10px, min(0.85vw, 1.45vh), 13px);
    font-weight: 700;
    line-height: 1.15;
    color: #14122E;
    white-space: nowrap;
    background: #F3C77B;
}

/* Lifetime uses assets/Save50.png - the stepped green badge with its own
   notched silhouette. It hangs off the ticket's top-right corner, so
   .bxa-ticket must NOT clip (its rounded corners come from the background
   artwork, not from overflow:hidden). The text stays as the accessible label
   and is hidden with font-size:0. */
.bxa-ticket[data-tone="green"] .bxa-ticket-save {
    top: 6px;
    /* almost entirely outside the card, as in the mockup - only a sliver
       overlaps, which keeps it clear of the stub rows */
    right: calc(var(--bxa-save-w) * -0.86);
    width: var(--bxa-save-w);
    aspect-ratio: 363 / 258;
    padding: 0;
    border-radius: 0;
    background-color: transparent;
    background-image: url("../assets/Save50.png");
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
    font-size: 0;
    color: transparent;
}

/* the smaller copy beside the struck price */
.bxa-ticket[data-tone="green"] .bxa-ticket-was-save {
    /* sits fully ABOVE the struck price rather than on top of it */
    top: auto;
    bottom: calc(100% + 2px);
    width: calc(var(--bxa-save-w) * 0.72);
    aspect-ratio: 363 / 258;
    padding: 0;
    border-radius: 0;
    background-color: transparent;
    background-image: url("../assets/Save50.png");
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
    font-size: 0;
    color: transparent;
}

/* ============================================== STEP 3 : Payment ======= */
/* Like step 2, this step stacks several blocks and needs a tighter lead-in
   than step 1's single field. */
.bxa-main #xpal-panel-3 .xpal-panel-sub {
    margin-bottom: clamp(12px, 3.2vh, 34px);
}

.bxa-pay-body {
    max-width: 640px;
}

/* additional.js keeps writing the plan name/total into .xpal-summary; the
   redesign shows the xID bar in its place, so the node stays but is hidden. */
.bxa-pay-body > .xpal-summary {
    display: none !important;
}

.bxa-main .bxa-pay-heading {
    margin: clamp(11px, 2vh, 24px) 0 clamp(8px, 1.3vh, 15px);
    font-size: clamp(14px, min(1.3vw, 2.2vh), 20px);
    font-weight: 400;
    line-height: 1.25;
    color: #fff;
}

/* -------------------------------------------------------- method tiles -- */
/* Four equal tiles: icon over label. #purchaseForm wraps the card button and
   is display:contents in the markup so it does not break the grid. */
/* additional-page.css styles .xpal-method-tabs as a padded #1c1c1c pill bar;
   the mockup has four free-standing tiles on the page background. */
.bxa-main .bxa-method-tiles {
    display: grid;
    /* One equal column per tile that is actually rendered. Was repeat(4),
       which left a dead 4th column when a method is not offered in the
       visitor's country (PIX outside Brazil, cards in Russia). */
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
    gap: clamp(8px, 0.9vw, 16px);
    margin: 0;
    padding: 0;
    background: transparent;
    border-radius: 0;
}

    /* the card button is wrapped in #purchaseForm; display:contents (set
       inline) drops the form box so the button lands in the grid directly */
    .bxa-main .bxa-method-tiles form {
        display: contents;
    }

.bxa-main .bxa-method-tiles .xpal-method-tab {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 100%;
    min-width: 0;
    margin: 0;
    padding: clamp(7px, 1.25vh, 14px) 6px;
    border: 1px solid #262626;
    border-radius: 12px;
    background: #101010;
    cursor: pointer;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}

    .bxa-main .bxa-method-tiles .xpal-method-tab:hover {
        border-color: #3A3A3A;
    }

    /* xpalSwitchPayTab() puts .active on the chosen tab */
    .bxa-main .bxa-method-tiles .xpal-method-tab.active {
        border-color: var(--bxa-accent-ring);
        background: rgba(79, 70, 214, 0.16);
    }

.bxa-main .bxa-method-tiles .xpal-tab-icon {
    width: clamp(20px, min(1.8vw, 3vh), 28px);
    height: auto;
    flex: 0 0 auto;
}

.bxa-main .bxa-method-tiles .xpal-tab-label {
    font-size: clamp(10.5px, min(0.9vw, 1.5vh), 13px);
    line-height: 1.2;
    color: #E4E4E4;
    text-align: center;
}

/* ---------------------------------------------------------- pay panels -- */
.bxa-main .xpal-pay-panel {
    margin-top: clamp(10px, 1.7vh, 22px);
}

.bxa-main .xpal-pix-panel {
    padding: 0;
    border: 0;
    background: transparent;
}

.bxa-main .xpal-pix-badge {
    display: none;
}

.bxa-main .xpal-pix-title {
    margin: 0 0 4px;
    font-size: clamp(13px, min(1.15vw, 2vh), 17px);
    font-weight: 500;
    color: #fff;
}

.bxa-main .xpal-pix-copy {
    margin: 0 0 clamp(12px, 2vh, 22px);
    font-size: clamp(10.5px, min(0.9vw, 1.5vh), 13px);
    line-height: 1.45;
    color: #8A8A8A;
}

.bxa-main .xpal-pix-summary {
    display: none;
}

/* PIX form: name + email share a row, tax id spans both. */
.bxa-main #pix-form-section {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: clamp(12px, 1.3vw, 24px);
    row-gap: clamp(10px, 1.7vh, 18px);
}

    .bxa-main #pix-form-section > .xpal-pix-title,
    .bxa-main #pix-form-section > .xpal-pix-copy,
    .bxa-main #pix-form-section > .xpal-pix-disclaimer,
    .bxa-main #pix-form-section > #pixPayBtn,
    .bxa-main #pix-form-section > #pix-message,
    .bxa-main #pix-form-section > .bxa-field--wide {
        grid-column: 1 / -1;
    }

.bxa-main .xpal-pix-label {
    display: block;
    margin: 0 0 6px;
    font-size: clamp(10.5px, min(0.9vw, 1.5vh), 13px);
    color: #C9C9C9;
}

.bxa-main .xpal-required-asterisk {
    color: #E06C6C;
}

.bxa-main .xpal-pix-input {
    width: 100%;
    padding: clamp(10px, 1.6vh, 15px) 14px;
    border: 1px solid #262626;
    border-radius: 10px;
    background: #101010;
    color: #fff;
    font-size: clamp(11px, min(0.95vw, 1.6vh), 14px);
    outline: none;
    transition: border-color 0.15s ease;
}

    .bxa-main .xpal-pix-input:focus {
        border-color: var(--bxa-accent-ring);
    }

.bxa-main .xpal-pix-disclaimer {
    margin: clamp(10px, 1.7vh, 18px) 0 clamp(10px, 1.7vh, 18px);
    font-size: clamp(9.5px, min(0.8vw, 1.35vh), 11.5px);
    line-height: 1.5;
    color: #7E7E7E;
}

    .bxa-main .xpal-pix-disclaimer a {
        color: #9A9A9A;
        text-decoration: underline;
    }

/* The purple action pill shared by PIX and the card form. .xpal-btn-gold /
   .xpal-btn-full in additional-page.css make these full-width blue blocks. */
.bxa-main #pixPayBtn,
.bxa-main #submit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto !important;
    justify-self: start;
    margin: 0;
    /* the mockup's pill is ~103x37 on a 1440 canvas - a compact action, not a
       full-width block like the legacy .xpal-btn-full it replaces */
    min-width: clamp(92px, 7.2vw, 118px);
    /* additional-page.css sets padding:14px and font-size:15px with
       !important on #submit, so these have to match that weight */
    padding: clamp(9px, 1.35vh, 12px) clamp(14px, 1.15vw, 22px) !important;
    border: 0;
    border-radius: 999px;
    background: var(--bxa-accent-soft) !important;
    color: #14122E !important;
    font-size: clamp(12px, min(0.95vw, 1.8vh), 14px) !important;
    line-height: 1.2 !important;
    font-weight: 500;
    cursor: pointer;
}

    /* the label span carries legacy 15px/24px of its own, so the pill kept a
       taller line box than its padding implied */
    .bxa-main #submit > span,
    .bxa-main #pixPayBtn > span {
        font-size: inherit;
        line-height: 1.2;
    }

    .bxa-main #pixPayBtn:hover,
    .bxa-main #submit:hover {
        background: #ADA5FA !important;
    }

/* PayPal keeps its own white brand pill. additional-page.css centres the
   wrapper at max-width:400px and sets the button to width:100%, which is what
   made this a wide centred block; the mockup has a compact pill on the panel's
   left edge, the same size and position as the Pay now pill on the card tab. */
.bxa-main .xpal-pp-buttons-wrap {
    width: auto;
    max-width: none;
    margin: 0;
    text-align: left;
}

.bxa-main .xpal-paypal-redirect-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: auto;
    min-width: clamp(180px, 15vw, 236px);
    padding: clamp(10px, 1.45vh, 13px) clamp(16px, 1.4vw, 26px);
    border: 0;
    border-radius: 999px;
    background: #fff;
    color: #14122E;
    font-size: clamp(12px, min(0.95vw, 1.8vh), 14px);
    line-height: 1.2;
    cursor: pointer;
}

    /* the wordmark is the brand element, so it is sized off the label rather
       than left at the 22px inline style it used to carry */
    .bxa-main .xpal-paypal-redirect-btn #paypal-redirect-btn-label {
        display: inline-flex;
        align-items: center;
        gap: 8px;
    }

    .bxa-main .xpal-paypal-redirect-btn img {
        height: clamp(13px, min(1.1vw, 1.9vh), 17px);
        width: auto;
    }

/* ------------------------------------------------------- crypto options -- */
.bxa-main .xpal-crypto-options {
    display: flex;
    flex-direction: column;
    gap: clamp(10px, 1.6vh, 18px);
}

.bxa-main .xpal-crypto-accordion {
    border: 1px solid #262626;
    border-radius: 16px;
    background: #0C0C0C;
    overflow: hidden;
}

/* "OR" in the gap between the two options: the word centred on a hairline that
   runs the full width. It is a flex item of .xpal-crypto-options, so the
   container gap already spaces it - no margin of its own. */
.bxa-main .xpal-crypto-or {
    display: flex;
    align-items: center;
    gap: 12px;
    color: #6E6E6E;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    user-select: none;
}

    .bxa-main .xpal-crypto-or::before,
    .bxa-main .xpal-crypto-or::after {
        content: "";
        flex: 1;
        height: 1px;
        background: #262626;
    }

.bxa-main .xpal-crypto-accordion-toggle {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    padding: clamp(11px, 1.8vh, 17px) clamp(14px, 1.2vw, 20px);
    border: 0;
    background: transparent;
    cursor: pointer;
    text-align: left;
}

/* additional-page.css draws these as 56px branded coins (#coinbase-main
   .xpal-crypto-option-icon, with ::before glyphs); the mockup uses a plain
   radio, so the size and the pseudo-element badge are both overridden. */
.bxa-main #coinbase-main .xpal-crypto-option-icon {
    flex: 0 0 17px;
    width: 17px;
    height: 17px;
    border-radius: 50%;
    border: 1px solid #4A4A4A;
    background: transparent;
    font-size: 0;
    color: transparent;
}

    .bxa-main #coinbase-main .xpal-crypto-option-icon::before,
    .bxa-main #coinbase-main .xpal-crypto-option-icon::after {
        content: none;
    }

/* Both options are expanded by default, so the radio can no longer be styled
   off aria-expanded - it is driven by .is-selected, which additional-page.js
   moves when a header is clicked. */
.bxa-main #coinbase-main .xpal-crypto-accordion.is-selected > .xpal-crypto-accordion-toggle .xpal-crypto-option-icon {
    border-color: #2F80ED;
    background:
        radial-gradient(circle, #fff 0 32%, transparent 33%),
        #2F80ED;
}

.bxa-main .xpal-crypto-option-copy {
    display: flex;
    align-items: baseline;
    gap: 10px;
    flex: 1 1 auto;
    min-width: 0;
}

.bxa-main .xpal-crypto-option-title {
    font-size: clamp(11.5px, min(1vw, 1.7vh), 14.5px);
    color: #EDEDED;
}

.bxa-main .xpal-crypto-option-sub {
    margin-left: auto;
    font-size: clamp(9.5px, min(0.82vw, 1.4vh), 12px);
    color: #8A8A8A;
    white-space: nowrap;
}

    /* the mockup shows only "Option 1" / "Option 2" on the right */
    .bxa-main .xpal-crypto-option-sub .option-name {
        display: none;
    }

    /* legacy uppercases these to "OPTION 1"; the mockup sets them sentence case */
    .bxa-main .xpal-crypto-option-sub .option {
        text-transform: none !important;
        font-weight: 400 !important;
        letter-spacing: 0 !important;
    }

.bxa-main .xpal-crypto-option-indicator {
    display: none;
}

.bxa-main .xpal-crypto-accordion-panel {
    padding: 0 clamp(14px, 1.2vw, 20px) clamp(14px, 2.2vh, 22px);
}

/* currency grid inside NOWPayments */
.bxa-main .np-currency-cards {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(6px, 0.8vw, 11px);
}

/* The coin tiles had no styling of their own here, so they fell through to
   nowpayments.css: ~100px tall, name and ticker stacked on separate lines, and
   the "Min:" line clipped by the card's own height. The mockup (page 11) is a
   compact pill about 46px tall - icon, then the coin name with its ticker
   alongside it on one baseline, the minimum underneath, and the radio on the
   right. Scaled off the mockup: a 220x38 tile on its 485px panel is 268x46 on
   ours. */
.bxa-main .np-currency-card {
    min-height: 0;
    padding: 0;
    border: 0;
    background: transparent;
}

.bxa-main .np-currency-card-inner {
    display: flex;
    align-items: center;
    gap: clamp(8px, 0.8vw, 12px);
    min-height: 0;
    padding: clamp(6px, 0.9vh, 9px) clamp(10px, 1vw, 15px);
    border: 1px solid #262626;
    border-radius: 999px;
    background: #101010;
    cursor: pointer;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}

    .bxa-main .np-currency-card:hover .np-currency-card-inner {
        border-color: #3A3A3A;
    }

    .bxa-main .np-currency-card.np-selected .np-currency-card-inner {
        border-color: var(--bxa-accent-ring);
        background: rgba(79, 70, 214, 0.16);
    }

.bxa-main .np-currency-info {
    display: flex;
    align-items: center;
    gap: clamp(7px, 0.7vw, 11px);
    flex: 1 1 auto;
    min-width: 0;
}

    /* the name/ticker/min column - the builder emits a bare <div> here */
    .bxa-main .np-currency-info > div {
        min-width: 0;
    }

.bxa-main .np-currency-icon {
    flex: 0 0 auto;
    width: clamp(20px, 1.8vw, 27px);
    height: auto;
}

/* name and ticker share a baseline, the way the mockup sets them */
.bxa-main .np-currency-name {
    display: inline;
    margin: 0;
    font-size: clamp(11px, min(0.92vw, 1.6vh), 13.5px);
    font-weight: 500;
    color: #F0F0F0;
}

.bxa-main .np-currency-network {
    display: inline;
    margin: 0 0 0 6px;
    font-size: clamp(8.5px, min(0.7vw, 1.2vh), 10.5px);
    color: #8A8A8A;
    white-space: nowrap;
}

/* nowpayments.js injects this with an inline font-size/opacity */
.bxa-main .np-min-amount {
    display: block;
    margin: 1px 0 0 !important;
    font-size: clamp(8.5px, min(0.7vw, 1.2vh), 10.5px) !important;
    line-height: 1.3;
    color: #7E7E7E;
    opacity: 1 !important;
}

.bxa-main .np-check-circle {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: clamp(14px, 1.25vw, 18px);
    height: clamp(14px, 1.25vw, 18px);
    border: 1px solid #4A4A4A;
    border-radius: 50%;
    background: transparent;
}

    .bxa-main .np-check-circle .np-checkmark {
        font-size: 0;
        color: transparent;
    }

    .bxa-main .np-currency-card.np-selected .np-check-circle {
        border-color: var(--bxa-accent-ring);
        background:
            radial-gradient(circle, #fff 0 34%, transparent 35%),
            var(--bxa-accent-ring);
    }

/* the accordion header states this now (it holds #np-select-crypto-label), so
   the label that used to sit above the grid would just repeat it */
.bxa-main .np-select-crypto-inline {
    display: none;
}

/* nowpayments.css makes this a full-width block; every other action on this
   step is a compact pill on the panel's left edge */
.bxa-main .enabled-button-container {
    margin-top: clamp(9px, 1.4vh, 14px) !important;
    text-align: left;
}

.bxa-main #npGenerateBtn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: auto !important;
    min-width: clamp(150px, 13vw, 210px);
    padding: clamp(9px, 1.35vh, 12px) clamp(16px, 1.4vw, 26px) !important;
    border: 0;
    border-radius: 999px;
    font-size: clamp(12px, min(0.95vw, 1.8vh), 14px) !important;
    line-height: 1.2 !important;
    font-weight: 500;
}

/* ------------------------------------------------ manual wallet cards -- */
/* One card per row, BTC above USDT. Each is: title + network on the left of a
   head row with the amount due on its right, then the address with its copy
   button, then a white QR tile with the coin mark beside it.
   (The mockup drew these two-up, but with both crypto options expanded by
   default the stacked pair reads better and each card gets the full width.) */
.bxa-main .bxa-wallet-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: clamp(8px, 1vh, 14px);
}

.bxa-main .bxa-wallet {
    display: flex;
    flex-direction: column;
    gap: clamp(5px, 0.8vh, 9px);
    margin: 0;
    padding: clamp(10px, 1.5vh, 16px) clamp(11px, 1.1vw, 18px);
    border: 1px solid #232323;
    border-radius: 14px;
    background: #101010;
}

.bxa-wallet-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
}

.bxa-main .bxa-wallet-title {
    margin: 0;
    font-size: clamp(11.5px, min(1vw, 1.75vh), 15px);
    font-weight: 500;
    color: #F4F4F4;
}

.bxa-main .bxa-wallet-network {
    margin: 1px 0 0;
    font-size: clamp(9px, min(0.75vw, 1.3vh), 11px);
    color: #8A8A8A;
}

/* the amount due, mirrored from #xpal-plan-total by additional-v2.js */
.bxa-wallet-value {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    flex: 0 0 auto;
    text-align: right;
}

.bxa-main .bxa-wallet-value-label {
    font-size: clamp(8.5px, min(0.7vw, 1.2vh), 10.5px);
    color: #8A8A8A;
}

.bxa-main .bxa-wallet-value-amount {
    font-size: clamp(13px, min(1.15vw, 2vh), 18px);
    font-weight: 500;
    color: var(--bxa-gold, #E8CE8B);
    line-height: 1.15;
}

.bxa-main .bxa-wallet-addr-label {
    margin: clamp(3px, 0.6vh, 7px) 0 0;
    font-size: clamp(9.5px, min(0.78vw, 1.35vh), 11.5px);
    font-weight: 500;
    color: #CFCFCF;
}

.bxa-wallet-addr-row {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

/* the address is 34 characters of unbreakable base58 - it has to be allowed to
   wrap or it forces the card (and with it the grid) wider than its column */
.bxa-main .bxa-wallet-addr {
    margin: 0;
    min-width: 0;
    font-size: clamp(8.5px, min(0.72vw, 1.25vh), 11px);
    line-height: 1.35;
    color: #9A9A9A;
    word-break: break-all;
}

.bxa-wallet-copy {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: clamp(20px, 1.7vw, 26px);
    height: clamp(20px, 1.7vw, 26px);
    border-radius: 7px;
    background: #1C1C1C;
    cursor: pointer;
}

    .bxa-wallet-copy img {
        width: clamp(10px, 0.85vw, 13px);
        height: auto;
    }

.bxa-main .bxa-wallet-copied {
    margin: 0;
    flex: 0 0 auto;
    font-size: clamp(8.5px, min(0.7vw, 1.2vh), 10.5px);
    color: #4CAF7D;
}

/* QR tile, its caption and the coin mark share the card's last row */
.bxa-wallet-foot {
    display: flex;
    align-items: center;
    gap: clamp(8px, 0.8vw, 13px);
    margin-top: auto;
    padding-top: clamp(4px, 0.7vh, 8px);
}

/* The QR sits at the right end of the foot row, where the white tile has the
   card edge to itself and reads as the thing to act on; the small coin mark
   takes the left, where the QR used to be. Ordered rather than re-nested -
   the source order is what additional.js and additional-page.css address
   inside .qr-scan-div. */
.bxa-main .bxa-wallet .qrImg {
    order: 3;
    flex: 0 0 auto;
    width: clamp(58px, min(5.4vw, 9.5vh), 86px);
    height: auto;
    padding: 4px;
    border-radius: 8px;
    background: #FFFFFF;
}

.bxa-main .bxa-wallet-qr-label {
    order: 2;
    margin: 0;
    flex: 1 1 auto;
    /* the words belong next to the code they point at, which is now on the right */
    text-align: right;
    min-width: 0;
    font-size: clamp(9px, min(0.75vw, 1.3vh), 11px);
    line-height: 1.3;
    color: #9A9A9A;
}

.bxa-main .bxa-wallet-coin {
    order: 1;
    flex: 0 0 auto;
    width: clamp(24px, min(2.2vw, 3.8vh), 36px);
    height: auto;
}

/* the accordion header already names this section; the paragraph inside
   repeated it word for word */
.bxa-main #manual-crypto-panel-title {
    display: none;
}

/* the mockup sets "Option 1" / "Option 2" as a pill, not loose grey text */
.bxa-main .xpal-crypto-option-sub .option {
    padding: 3px clamp(8px, 0.7vw, 12px);
    border-radius: 999px;
    background: #232323;
    color: #B5B5B5;
}

/* numbered manual-payment steps */
.bxa-main .xpal-steps {
    margin: clamp(12px, 2vh, 22px) 0 0;
    padding-left: 18px;
}

    .bxa-main .xpal-steps li {
        margin-bottom: 10px;
        font-size: clamp(10.5px, min(0.9vw, 1.5vh), 13px);
        color: #DADADA;
    }

        .bxa-main .xpal-steps li span {
            color: #8A8A8A;
        }

/* ============================================== STEP 4 : Invoice ======= */
/* Sized to hold one viewport at any height: the fixed chrome (headings, meta
   card, table head/foot, actions) is vh-scaled, and the only part that can
   grow with the data - the xID rows - scrolls inside itself. */
.bxa-invoice-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 20px;
}

.bxa-invoice-headings {
    min-width: 0;
}

.bxa-main .bxa-invoice-head .xpal-panel-title {
    margin-bottom: 4px;
}

.bxa-ok {
    color: #A6E3A1;
}

/* checkout.css styles this element as `h3.invoice-heading` (2rem, white at 50%
   opacity), which outranks a lone class - so the INVOICE word ignored the
   responsive size and the grey and fell out of step with the success heading
   next to it. Matched on the tag as well to win, and opacity reset so the grey
   is the grey it says it is. */
h3.bxa-invoice-word,
.bxa-invoice-word {
    flex: 0 0 auto;
    font-size: clamp(16px, min(1.9vw, 3.2vh), 30px);
    line-height: 1;
    letter-spacing: 0.02em;
    color: #4A4A4A;
    opacity: 1;
}

.bxa-main #xpal-panel-4 .xpal-panel-sub {
    margin-bottom: clamp(12px, 2.6vh, 30px);
}

.bxa-invoice-body {
    max-width: 640px;
}

/* meta card: 2x2 with hairline rules, like the mockup */
.bxa-invoice-meta {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    border: 1px solid #262626;
    border-radius: 10px;
    overflow: hidden;
}

.bxa-meta-cell {
    padding: clamp(9px, 1.5vh, 16px) clamp(12px, 1.1vw, 18px);
    border-right: 1px solid #262626;
    border-bottom: 1px solid #262626;
    min-width: 0;
}

    .bxa-meta-cell:nth-child(2n) {
        border-right: 0;
    }

    .bxa-meta-cell:nth-last-child(-n+2) {
        border-bottom: 0;
    }

.bxa-meta-label {
    display: block;
    margin-bottom: 3px;
    font-size: clamp(8.5px, min(0.72vw, 1.2vh), 10.5px);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #7E7E7E;
}

.bxa-meta-value {
    display: block;
    font-size: clamp(10.5px, min(0.92vw, 1.55vh), 14px);
    line-height: 1.3;
    color: #EDEDED;
    word-break: break-word;
}

/* the xID table */
.bxa-invoice-table {
    margin-top: clamp(12px, 2.2vh, 26px);
    border-radius: 10px;
    overflow: hidden;
}

.bxa-inv-row {
    display: grid;
    grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 0.7fr);
    gap: 12px;
    padding: clamp(8px, 1.35vh, 14px) clamp(12px, 1.1vw, 18px);
    font-size: clamp(10px, min(0.88vw, 1.5vh), 13.5px);
    color: #EDEDED;
}

.bxa-inv-head {
    background: #141414;
    font-size: clamp(8.5px, min(0.72vw, 1.2vh), 11px);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #8A8A8A;
}

/* Only this part grows with the data, so only this part scrolls. */
.bxa-inv-rows {
    /* 16vh keeps a 10-xID invoice inside one viewport even at ~680px tall;
       raising it re-breaks that - see the fit matrix in the commit note */
    max-height: clamp(68px, 16vh, 240px);
    overflow-y: auto;
    overscroll-behavior: contain;
}

    .bxa-inv-rows .bxa-inv-row + .bxa-inv-row {
        border-top: 1px solid #1C1C1C;
    }

.bxa-inv-foot {
    display: block;
    background: #141414;
    color: #9A9A9A;
}

/* thank-you + actions */
.bxa-invoice-actions {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    flex-wrap: wrap;
    max-width: 640px;
    margin-top: auto;
    padding-top: clamp(14px, 2.6vh, 34px);
}

.bxa-main .bxa-thanks {
    margin: 0;
    font-size: clamp(15px, min(1.7vw, 2.9vh), 27px);
    font-weight: 400;
    letter-spacing: 0.01em;
    color: #fff;
}

.bxa-invoice-btns {
    display: flex;
    align-items: center;
    gap: clamp(8px, 0.9vw, 16px);
}

.bxa-btn-ghost,
.bxa-main a.bxa-btn-gold {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: clamp(9px, 1.5vh, 14px) clamp(14px, 1.3vw, 24px);
    border: 0;
    border-radius: 999px;
    font-size: clamp(10.5px, min(0.9vw, 1.5vh), 13.5px);
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
}

.bxa-btn-ghost {
    background: #1E1E1E;
    color: #E4E4E4;
}

    .bxa-btn-ghost:hover {
        background: #2A2A2A;
    }

.bxa-main a.bxa-btn-gold {
    background-image: url(https://dz5tyoxl8h44g.cloudfront.net/nu-gold-button.png);
    background-size: cover;
    background-position: center;
    color: #1C1902;
    font-weight: 600;
}

/* ====================== /buyxid/gold/additional/checkout (real invoice) ==
   The live post-payment page is Additional/checkout.cshtml, not the step-4
   panel above - it has its own markup and loads checkout.css. These rules
   give it the same invoice treatment while leaving every hook that
   multiplecheckout.js writes into (.currentdate, .stripeInvoiceId,
   .first-xID, .payment-schedule .bottom-text, #tableContainer,
   .invoice-payment-method, .total-amount) exactly where it was. */
/* The header and site footer come from _Layout on this page, so unlike
   /buyxid/gold/additional the header is NOT inside this container. To put
   everything above the site footer on exactly one screen the section has to
   be "viewport minus header" - the header measures 45-54px depending on
   width, so checkout.cshtml sets --bxa-layout-header from the real element
   and the constant here is only a pre-load fallback. */
.bxa-checkout {
    display: flex;
    flex-direction: column;
    min-height: calc(100dvh - var(--bxa-layout-header, 54px));
}

/* checkout.css pads .xpal-invoice 50px top and bottom and gives the button
   row a 48px tail - 170px of chrome that the one-viewport goal cannot
   afford, and that the mockup does not show. */
.bxa-checkout .xpal-invoice {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    flex: 1 1 auto;
    min-height: 0;
}

.bxa-checkout .buttons-div.bxa-invoice-actions {
    min-height: 0 !important;
    height: auto !important;
    padding-bottom: 0 !important;
    margin-bottom: 0 !important;
}

.bxa-checkout .checkout-loader-wrapper {
    min-height: 0;
}

/* This page carries the header outside the section, so it has less room than
   the others - the shared section gap is trimmed to match. */
.bxa-checkout .bxa-page {
    padding-top: clamp(20px, 3.4vh, 44px);
}

.bxa-checkout .midLineSep {
    margin-top: clamp(18px, 3vh, 40px);
}

@media (min-width: 768px) {
    .bxa-checkout {
        height: calc(100dvh - var(--bxa-layout-header, 54px));
        max-height: calc(100dvh - var(--bxa-layout-header, 54px));
        overflow: hidden;
    }

    .bxa-checkout .bxa-layout {
        grid-template-rows: minmax(0, 1fr);
    }

    .bxa-checkout .bxa-main {
        min-height: 0;
    }

    .bxa-checkout .bxa-main .xpal-invoice {
        overflow-y: auto;
        overscroll-behavior: contain;
    }

        /* same slim bar as the crypto option list */
        .bxa-checkout .bxa-main .xpal-invoice::-webkit-scrollbar {
            width: 6px;
        }

        .bxa-checkout .bxa-main .xpal-invoice::-webkit-scrollbar-thumb {
            border-radius: 3px;
            background: #2B2B2B;
        }

        .bxa-checkout .bxa-main .xpal-invoice::-webkit-scrollbar-track {
            background: transparent;
        }
}

.bxa-checkout .bxa-invoice-head {
    margin-bottom: clamp(10px, 1.9vh, 22px);
}

/* Bootstrap's .container.col-md-5 centred and narrowed the invoice; inside
   the panel column it should simply fill it, left-aligned like every other
   step's content. */
.bxa-checkout .xpal-invoice .container.col-md-5 {
    width: 100%;
    max-width: 640px;
    margin-inline: 0;
    padding-inline: 0;
    flex: none;
}

.bxa-checkout .xpal-invoice .html-content > .container {
    width: 100%;
    max-width: none;
    padding-inline: 0;
    margin-inline: 0;
}

.xpal-invoice .bxa-invoice-head {
    margin-bottom: clamp(16px, 3vh, 34px);
}

.xpal-invoice .success-div h3 {
    margin: 0 0 4px;
    font-size: clamp(20px, min(2.1vw, 3.6vh), 34px);
    font-weight: 400;
    color: #fff;
}

.xpal-invoice .success-div p {
    margin: 0;
    font-size: clamp(11px, min(0.95vw, 1.6vh), 14px);
    color: #8A8A8A;
}

.xpal-invoice .bxa-invoice-word {
    margin: 0;
    font-weight: 400;
}

/* checkout.css styles .invoice_details as a table wrapper; it is a grid now */
.xpal-invoice .invoice_details.bxa-invoice-meta {
    margin: 0;
}

.xpal-invoice .bxa-meta-label,
.xpal-invoice .bxa-meta-value {
    margin: 0;
}

/* the xID table is built by multiplecheckout.js, so it is styled by element */
.xpal-invoice #tableContainer {
    margin-top: clamp(12px, 2.2vh, 26px);
}

.xpal-invoice #tableContainer .bottom-table {
    width: 100%;
    margin: 0 !important;
    border-collapse: collapse;
    color: #EDEDED;
}

    .xpal-invoice #tableContainer .bottom-table th {
        padding: clamp(8px, 1.35vh, 14px) clamp(12px, 1.1vw, 18px);
        background: #141414;
        border: 0;
        font-weight: 400;
    }

        .xpal-invoice #tableContainer .bottom-table th p {
            margin: 0;
            font-size: clamp(8.5px, min(0.72vw, 1.2vh), 11px);
            letter-spacing: 0.06em;
            text-transform: uppercase;
            color: #8A8A8A;
        }

    .xpal-invoice #tableContainer .bottom-table td {
        padding: clamp(8px, 1.35vh, 14px) clamp(12px, 1.1vw, 18px);
        border: 0;
        border-top: 1px solid #1C1C1C;
        background: transparent !important;
        font-size: clamp(10px, min(0.88vw, 1.5vh), 13.5px);
        color: #EDEDED;
    }

    /* bootstrap's .table-striped tints alternate rows; the design is flat */
    .xpal-invoice #tableContainer .bottom-table tbody tr {
        background: transparent !important;
    }

    .xpal-invoice #tableContainer .bottom-table th:last-child,
    .xpal-invoice #tableContainer .bottom-table td:last-child {
        text-align: right;
    }

    .xpal-invoice #tableContainer .bottom-table th:nth-child(2),
    .xpal-invoice #tableContainer .bottom-table td:nth-child(2) {
        text-align: center;
    }

.xpal-invoice .total-amount-div {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: clamp(9px, 1.5vh, 15px) clamp(12px, 1.1vw, 18px);
    background: #141414;
}

    .xpal-invoice .total-amount-div p {
        margin: 0;
        font-size: clamp(10px, min(0.88vw, 1.5vh), 13.5px);
        color: #9A9A9A;
    }

    .xpal-invoice .total-amount-div .total-amount {
        color: #EDEDED;
    }

.xpal-invoice .buttons-div.bxa-invoice-actions {
    margin-top: clamp(18px, 3.4vh, 40px);
    padding-top: 0;
}

.xpal-invoice .bxa-thanks {
    font-size: clamp(15px, min(1.7vw, 2.9vh), 27px);
}

/* checkout.css paints these as its own pills */
.xpal-invoice a.downloadBtn.bxa-btn-ghost,
.xpal-invoice a.continueBtn.bxa-btn-gold {
    /* checkout.css sizes these pills far taller than the mockup - together
       they were making the action row 122px for ~40px of button */
    padding: clamp(9px, 1.5vh, 14px) clamp(14px, 1.3vw, 24px) !important;
    margin: 0 !important;
    min-width: 0 !important;
    min-height: 0 !important;
    height: auto !important;
    line-height: 1.2 !important;
    font-size: clamp(10.5px, min(0.9vw, 1.5vh), 13.5px) !important;
}

.xpal-invoice a.downloadBtn.bxa-btn-ghost {
    background: #1E1E1E !important;
    color: #E4E4E4 !important;
    border: 0 !important;
}

.xpal-invoice a.continueBtn.bxa-btn-gold {
    background-image: url(https://dz5tyoxl8h44g.cloudfront.net/nu-gold-button.png) !important;
    background-size: cover !important;
    background-position: center !important;
    color: #1C1902 !important;
    border: 0 !important;
}

/* Below 992px the rail stacks above the invoice, so the invoice itself has to
   give up the difference to keep the whole page above the site footer on one
   screen. */
@media (max-width: 991px) {
    .bxa-checkout .success-div h3 {
        font-size: clamp(17px, 4.6vw, 24px);
    }

    .bxa-checkout .bxa-invoice-word {
        font-size: clamp(13px, 3.4vw, 18px);
    }

    .bxa-checkout .bxa-invoice-head {
        margin-bottom: 10px;
    }

    .bxa-checkout .bxa-meta-cell {
        padding: 8px 12px;
    }

    .bxa-checkout #tableContainer {
        margin-top: 10px;
    }

    .bxa-checkout #tableContainer .bottom-table th,
    .bxa-checkout #tableContainer .bottom-table td,
    .bxa-checkout .total-amount-div {
        padding-top: 8px;
        padding-bottom: 8px;
    }

    .bxa-checkout .buttons-div.bxa-invoice-actions {
        padding-top: 14px !important;
        margin-top: 14px !important;
    }

    .bxa-checkout .bxa-page {
        padding-top: 18px;
    }

    .bxa-checkout .midLineSep {
        margin-top: 16px;
    }
}

@media (max-width: 479px) {
    .xpal-invoice .invoice_details.bxa-invoice-meta {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* ------------------------------------------------------------- secure --
   Now a direct child of .additional-page (a sibling of the footer strip), so
   it spans the page and can centre on the viewport instead of sitting inside
   the narrower panel column. Only the payment step shows it. */
.additional-page .xpal-secure {
    display: none;
    flex: 0 0 auto;
    margin: clamp(10px, 1.7vh, 22px) auto 0;
    text-align: center;
    font-size: clamp(9.5px, min(0.82vw, 1.4vh), 12px);
    color: #6E6E6E;
}

/* --------------------------------------------------------- footer strip -- */
.additional-page .midLineSep,
.additional-page .paymentIcons,
.additional-page .cancelSubs {
    flex: 0 0 auto;
}

.additional-page .midLineSep {
    width: 100%;
    max-width: var(--bxa-section-width);
    margin: var(--bxa-section-gap) auto 0;
    border-top: 1px solid rgba(255, 255, 255, 0.16);
    opacity: 1;
}

/* Payment is the tallest panel in the flow - the Stripe Payment Element alone
   is ~130px and its height is Stripe's, not ours. The symmetric section gap
   that gives steps 1-2 their breathing room is what tips this one past the
   fold, so it is trimmed here only. additional-v2.js sets data-step. */
.additional-page[data-step="3"] .midLineSep {
    margin-top: clamp(14px, 2.2vh, 28px);
}

.additional-page[data-step="3"] .xpal-secure {
    display: block;
    margin-top: clamp(8px, 1.3vh, 16px);
}

.additional-page .paymentIcons {
    margin-top: 42px !important;
}

    /* Flex-wrap rather than a single grid row: six 73px marks need ~473px, so
       on any viewport narrower than that a fixed row forced the whole document
       wider than the screen (gold.css only re-flows them below 500px, leaving
       the 500-767 range broken). Wrapping plus a shrinking mark handles every
       width without a breakpoint. */
    .additional-page .paymentIcons .icons-container {
        display: flex;
        flex-wrap: wrap;
        gap: 7px;
        justify-content: center;
        align-items: center;
    }

    .additional-page .paymentIcons img {
        display: block;
        width: clamp(46px, 13vw, 73px);
        height: auto;
    }

.additional-page .cancelSubs {
    margin-top: 30px;
    margin-bottom: 46px;
    text-align: center;
}

    .additional-page .cancelSubs .sub {
        max-width: min(1250px, calc(var(--bxa-section-width) * 0.87));
        margin: 0 auto;
        font-size: 13px;
        line-height: 1.6;
        color: var(--bxa-text);
        opacity: 0.7;
    }

/* ------------------------------- footer strip: short-viewport compaction --
   Ported verbatim from buyxid-v2.css so the divider / payment marks / legal
   copy occupy the SAME proportion of the screen on both pages. Without these
   the strip stayed at its full-height sizing here while /buyxid compacted,
   which is why the legal paragraph read noticeably larger on this page. */
@media (min-width: 992px) and (max-height: 950px) {
    .additional-page .paymentIcons {
        margin-top: 26px !important;
    }

    .additional-page .cancelSubs {
        margin-top: 20px;
        margin-bottom: 28px;
    }
}

@media (min-width: 992px) and (max-height: 840px) {
    .additional-page .paymentIcons {
        margin-top: 20px !important;
    }

    .additional-page .paymentIcons img {
        width: 60px;
    }

    .additional-page .cancelSubs {
        margin-top: 16px;
        margin-bottom: 22px;
    }

        .additional-page .cancelSubs .sub {
            font-size: 12.5px;
        }
}

@media (min-width: 992px) and (max-height: 720px) {
    .additional-page .paymentIcons {
        margin-top: 16px !important;
    }

    .additional-page .paymentIcons img {
        width: 50px;
    }

    .additional-page .cancelSubs {
        margin-top: 12px;
        margin-bottom: 16px;
    }

        .additional-page .cancelSubs .sub {
            font-size: 11.5px;
            line-height: 1.45;
        }
}

/* On a very short desktop window the invoice's fixed chrome alone nearly
   fills the screen, so the scrolling row box has to give up more. */
@media (min-width: 992px) and (max-height: 660px) {
    .bxa-inv-rows {
        max-height: clamp(56px, 11vh, 110px);
    }

    .bxa-invoice-actions {
        padding-top: clamp(10px, 1.8vh, 20px);
    }
}

/* Mobile: the rail stacks above the panel, so the invoice gets what is left.
   Capping the row box against the viewport keeps the whole step on one
   screen instead of running under the site footer. */
@media (max-width: 991px) {
    .bxa-invoice-head {
        flex-wrap: wrap;
        gap: 6px;
    }

    .bxa-invoice-word {
        font-size: 15px;
    }

    .bxa-inv-rows {
        max-height: clamp(60px, 14vh, 150px);
    }

    .bxa-invoice-actions {
        justify-content: space-between;
        margin-top: 0;
    }

    /* The strip keeps its desktop margins on phones, where they are worth
       ~90px - enough on their own to push the invoice past one screen. */
    .additional-page .midLineSep {
        margin-top: clamp(18px, 3vh, 30px);
    }

    .additional-page .paymentIcons {
        margin-top: 18px !important;
    }

    .additional-page .cancelSubs {
        margin-top: 14px;
        margin-bottom: 20px;
    }

        .additional-page .cancelSubs .sub {
            font-size: 11.5px;
            line-height: 1.45;
        }
}

/* ----------------------------------------------------------- responsive -- */
@media (max-width: 991px) {
    .additional-page {
        display: block;
    }

    .bxa-page {
        display: block;
        padding-bottom: 8px;
    }

        .bxa-page > .container {
            display: block;
        }

    .bxa-layout {
        display: block;
        max-width: none;
    }

    /* Stacked, the four label+description blocks make the rail ~400px tall -
       on a phone that alone is over half the screen and pushed every step
       (the invoice worst of all) past one viewport. Horizontally it is ~60px:
       dots in a row, connector between them, descriptions dropped. */
    .bxa-side {
        margin-bottom: 26px;
    }

    .bxa-brand {
        margin-bottom: 16px;
    }

    .bxa-steps {
        display: flex;
        align-items: flex-start;
    }

    .bxa-steps .xpal-step {
        flex: 1 1 0;
        flex-direction: column !important;
        align-items: center !important;
        gap: 7px;
        padding-bottom: 0;
        text-align: center;
    }

        /* Connector runs sideways to the next dot, not down the column. The
           dot is 15px with a 3px top margin, so its centre is at 10.5px - a
           2px rule has to start at 9.5px to sit on that line. It was at 7px,
           which drew the rail 3.5px above the dots. */
        .bxa-steps .xpal-step:not(:last-child)::before {
            left: 50%;
            right: -50%;
            top: 9.5px;
            bottom: auto;
            width: auto;
            height: 2px;
        }

    .bxa-step-desc {
        display: none;
    }

    .bxa-step-label {
        font-size: 12px;
    }

    .bxa-panel-inner {
        min-height: 0;
    }

    .bxa-actions {
        margin-top: 28px;
        padding-top: 0;
    }
}

/* Only stack the invoice meta card on genuinely narrow phones - at tablet
   widths two columns are both readable and ~90px shorter. */
@media (max-width: 479px) {
    .bxa-invoice-meta {
        grid-template-columns: minmax(0, 1fr);
    }

    .bxa-meta-cell {
        border-right: 0;
        border-bottom: 1px solid #262626;
    }

        .bxa-meta-cell:last-child {
            border-bottom: 0;
        }
}

@media (max-width: 575px) {
    .bxa-xid-field {
        gap: 12px;
    }

    .bxa-cells {
        gap: 10px;
    }

    .bxa-cell-group {
        gap: 4px;
    }

    .bxa-cell {
        width: 26px;
        font-size: 18px;
    }

    .bxa-add {
        width: 36px;
        height: 36px;
        font-size: 19px;
    }
}

/* ------------------------------------------------------------------ RTL -- */
/* The xID is always read left to right, so the cell row keeps its direction
   even in Arabic/Farsi; only the rail and its connector mirror. */
html[dir="rtl"] .bxa-cells,
body.rtl .bxa-cells {
    direction: ltr;
}

html[dir="rtl"] .bxa-steps .xpal-step:not(:last-child)::before,
body.rtl .bxa-steps .xpal-step:not(:last-child)::before {
    left: auto;
    right: 7px;
}

/* Stripe derives the card form's layout from the width of its own container:
   wide, and it packs number/expiry/CVC onto a single row; narrower, and it
   stacks them the way the design does - number on its own row, expiry and CVC
   as halves, country as a half. 480px is the width the mockup was drawn at.
   Everything inside the iframe is styled by the `appearance` object in
   additional.js, not from here. */
.bxa-main #payment-element {
    max-width: 480px;
}

/* ============================== step 3 : fit above the fold ============= */
/* Step 3 stacks more than any other step - title, sub, xID bar, method tiles,
   the form, the action pill, then the legal strip - and the Stripe iframe in
   the middle is a fixed ~230px that no rule here can compress.

   These values are FLAT rather than vh-scaled. The rest of the page grows its
   spacing with viewport height, which is right for the shorter steps but wrong
   here: a taller window simply spent the extra height on padding, so the panel
   overflowed at 880px worse than at 791px. A fixed rhythm makes every viewport
   behave the same. Scoped to data-step="3" (set by additional-v2.js) so steps
   1, 2 and 4 keep the roomier spacing.

   The header block - title, xID bar, method heading, tiles - is what the eye
   reads first, so it keeps generous gaps; the trimming happens further down
   and in the tier below. */
.additional-page[data-step="3"] .bxa-page {
    padding-top: 22px;
}

.additional-page[data-step="3"] .bxa-main .xpal-panel-title {
    margin-bottom: 6px;
    font-size: clamp(22px, 3.1vh, 30px);
}

.additional-page[data-step="3"] .bxa-main .xpal-panel-sub {
    margin-bottom: 20px;
}

.additional-page[data-step="3"] .bxa-main .bxa-xid-bar {
    margin-top: 0;
    padding-block: 10px;
}

/* The xID bar and this heading are separate thoughts, so this gap stays
   generous even though things further down are trimmed. */
.additional-page[data-step="3"] .bxa-main .bxa-pay-heading {
    margin: 24px 0 12px;
}

.additional-page[data-step="3"] .bxa-main .bxa-method-tiles .xpal-method-tab {
    padding-block: 10px;
    gap: 7px;
}

.additional-page[data-step="3"] .bxa-main .xpal-pay-panel {
    margin-top: 16px;
}

/* checkout.css sets a flat 24px under the Stripe iframe */
.additional-page[data-step="3"] .bxa-main #payment-element {
    margin-bottom: 4px;
}

.additional-page[data-step="3"] .bxa-main #submit,
.additional-page[data-step="3"] .bxa-main #pixPayBtn {
    padding-block: 12px !important;
}

/* --- PIX carries a title, body copy, two field rows and a disclaimer on top
   of everything the card form has, and unlike the card form none of it is
   inside an iframe - so this is where PIX's extra height is paid for, rather
   than by squeezing the header block that is shared with the card panel. */
.additional-page[data-step="3"] .bxa-main #pix-main {
    margin-top: 10px;
}

.additional-page[data-step="3"] .bxa-main .xpal-pix-title {
    margin-bottom: 2px;
}

.additional-page[data-step="3"] .bxa-main .xpal-pix-copy {
    margin-bottom: 8px;
}

.additional-page[data-step="3"] .bxa-main #pix-form-section {
    row-gap: 8px;
}

.additional-page[data-step="3"] .bxa-main .xpal-pix-label {
    margin-bottom: 3px;
}

.additional-page[data-step="3"] .bxa-main .xpal-pix-input {
    padding-block: 7px;
}

.additional-page[data-step="3"] .bxa-main .xpal-pix-disclaimer {
    margin: 6px 0;
}

.additional-page[data-step="3"] .bxa-main #pixPayBtn {
    padding-block: 8px;
}

/* --- the legal strip below the panel. The paragraph under the payment marks
   is the true last element on the page; it sits outside .bxa-page, which is
   why it has to be accounted for here and not left to the panel's own rules. */
.additional-page[data-step="3"] .midLineSep {
    margin-top: 50px;
}

.additional-page[data-step="3"] .xpal-secure {
    display: block;
    margin-top: 10px;
}

.additional-page[data-step="3"] .paymentIcons {
    margin-top: 16px !important;
}

/* One tier for short windows (a 768px screen at 125% zoom, or a half-height
   window), where the fixed Stripe iframe eats a third of the viewport on its
   own. It steps the same properties down rather than introducing new ones, and
   nothing is hidden - every block on the page stays visible at every height. */
@media (max-height: 940px) {
    .additional-page[data-step="3"] .bxa-page {
        padding-top: 14px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-panel-title {
        font-size: 22px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-panel-sub {
        margin-bottom: 12px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-xid-bar {
        padding-block: 7px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-pay-heading {
        margin: 16px 0 8px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-method-tiles .xpal-method-tab {
        padding-block: 10px;
        gap: 7px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pay-panel {
        margin-top: 10px;
    }

    .additional-page[data-step="3"] .bxa-main #payment-element {
        margin-bottom: 5px;
    }

    .additional-page[data-step="3"] .bxa-main #pix-form-section {
        row-gap: 6px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-input {
        padding-block: 6px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-disclaimer {
        margin: 5px 0;
    }

    .additional-page[data-step="3"] .bxa-main #submit,
    .additional-page[data-step="3"] .bxa-main #pixPayBtn {
        padding-block: 11px !important;
    }

    .additional-page[data-step="3"] .midLineSep {
        margin-top: 20px;
    }

    .additional-page[data-step="3"] .xpal-secure {
        margin-top: 8px;
    }

    .additional-page[data-step="3"] .paymentIcons {
        margin-top: 10px !important;
    }
}

/* Second step-down for short windows. PIX is the tallest thing in the flow -
   it has a title, body copy, two field rows and a disclaimer where the card
   panel has one iframe - so most of what moves here is PIX's own. */
@media (max-height: 865px) {
    .additional-page[data-step="3"] .bxa-page {
        padding-top: 4px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-panel-sub {
        margin-bottom: 5px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-pay-heading {
        margin: 11px 0 6px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-xid-bar {
        padding-block: 4px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-method-tiles .xpal-method-tab {
        padding-block: 9px;
        gap: 6px;
    }

    .additional-page[data-step="3"] .bxa-main #pix-main {
        margin-top: 6px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-copy {
        margin-bottom: 6px;
    }

    .additional-page[data-step="3"] .bxa-main #pix-form-section {
        row-gap: 5px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-input {
        padding-block: 5px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-disclaimer {
        margin: 5px 0;
    }

    .additional-page[data-step="3"] .bxa-main #submit,
    .additional-page[data-step="3"] .bxa-main #pixPayBtn {
        padding-block: 7px !important;
    }

    .additional-page[data-step="3"] .midLineSep {
        margin-top: 8px;
    }

    .additional-page[data-step="3"] .xpal-secure {
        margin-top: 3px;
    }

    .additional-page[data-step="3"] .paymentIcons {
        margin-top: 6px !important;
    }
}

/* Genuinely short windows. Only PIX still needs anything here; the card panel
   clears the fold on its own from the tier above. */
@media (max-height: 690px) {
    .additional-page[data-step="3"] .bxa-page {
        padding-top: 2px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-panel-title {
        font-size: 20px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-panel-sub {
        margin-bottom: 4px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-pay-heading {
        margin: 6px 0 3px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-xid-bar {
        padding-block: 3px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-method-tiles .xpal-method-tab {
        padding-block: 6px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-copy {
        margin-bottom: 4px;
    }

    .additional-page[data-step="3"] .bxa-main #pix-form-section {
        row-gap: 3px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-input {
        padding-block: 4px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pix-disclaimer {
        margin: 4px 0;
    }

    .additional-page[data-step="3"] .paymentIcons {
        margin-top: 3px !important;
    }

    .additional-page[data-step="3"] .midLineSep {
        margin-top: 6px;
    }

    .additional-page[data-step="3"] .xpal-secure {
        margin-top: 1px;
    }

    .additional-page[data-step="3"] .bxa-main #submit,
    .additional-page[data-step="3"] .bxa-main #pixPayBtn {
        padding-block: 6px !important;
    }

    .additional-page[data-step="3"] .cancelSubs {
        line-height: 1.4;
    }

}

/* ---------------------------------------------- PIX pays for its own height --
   The card panel is one Stripe iframe; PIX is a title, body copy, two field
   rows and a disclaimer, roughly 120px more. Spacing the whole step for the
   taller of the two is what left the strip under the card form looking cramped
   next to step 1, so the extra compression is scoped to PIX alone via the
   data-pay flag additional-v2.js mirrors off the visible panel. Everything
   outside this block is identical for both. */
.additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-pix-copy {
    margin-bottom: 6px;
}

.additional-page[data-step="3"][data-pay="pix"] .bxa-main #pix-form-section {
    row-gap: 6px;
}

.additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-pix-input {
    padding-block: 6px;
}

.additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-pix-disclaimer {
    margin: 5px 0;
}

@media (max-height: 865px) {
    .additional-page[data-step="3"][data-pay="pix"] .bxa-page {
        padding-top: 6px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-panel-sub {
        margin-bottom: 6px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .bxa-pay-heading {
        margin: 10px 0 5px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .bxa-xid-bar {
        padding-block: 4px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .bxa-method-tiles .xpal-method-tab {
        padding-block: 8px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-pix-input {
        padding-block: 5px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main #pix-form-section {
        row-gap: 4px;
    }



}

/* PIX above the 865px tier still needed its own lead-in trim */
@media (max-height: 940px) {

}

@media (max-height: 690px) {
    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-pix-input {
        padding-block: 3px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main #pix-form-section {
        row-gap: 3px;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main .xpal-pix-disclaimer {
        margin: 3px 0;
    }



}

/* ------------------------------------------- PayPal has room to breathe --
   The PayPal panel is three short lines and a pill, so it never comes close
   to the fold - but .xpal-pix-copy is shared with PIX, which is the tightest
   panel in the flow, so PayPal was inheriting compression it does not need.
   The mockup sets the pill about two thirds of its own height below the copy;
   these values come off that ratio and are safe because this panel has ~250px
   of slack at every height the card and PIX panels have to fight for. */
.additional-page[data-step="3"][data-pay="paypal"] .bxa-main .xpal-pix-title {
    margin-bottom: 6px;
}

.additional-page[data-step="3"][data-pay="paypal"] .bxa-main .xpal-pix-copy {
    margin-bottom: clamp(16px, 2.8vh, 30px);
}

.additional-page[data-step="3"][data-pay="paypal"] .bxa-main #paypal-main {
    margin-top: clamp(12px, 1.9vh, 20px);
}

/* and the pill is not the last thing on the page - the mockup leaves air
   under it before the legal strip */
.additional-page[data-step="3"][data-pay="paypal"] .bxa-main .xpal-pp-buttons-wrap {
    margin-bottom: clamp(12px, 2.2vh, 24px);
}

/* ------------------------------------------------- crypto tab: fitting --
   The mockup (page 11) shows six coins in three rows; this build offers eight,
   which is one extra row, and it carries an accordion header the mockup does
   not. Even with the chrome squeezed the tab is taller than the fold on a
   short window, so rather than drop a payment option or push the legal strip
   off the page, the option list scrolls inside the panel: .xpal-panel is
   already a flex column, so min-height:0 lets this box take the leftover space
   and no more. On a tall window there is nothing to scroll and it behaves
   exactly like the other tabs. */
/* .additional-page is min-height:100dvh, so the column can always grow past
   the fold - which is why an inner overflow-y had nothing to shrink against.
   Capping the height for this tab is what turns the flex chain into a real
   budget. Desktop only: on narrow screens the page scrolls normally and
   clipping here would hide content. */
@media (min-width: 768px) {
    .additional-page[data-step="3"][data-pay="coinbase"] {
        height: 100dvh;
        max-height: 100dvh;
        overflow: hidden;
    }
}

/* xpalGoTo() sets display:block inline on the open panel, so the body had no
   bounded parent to shrink against - hence the !important here, which is the
   only way to beat an inline style. Scoped to this tab so the other panels
   keep the plain block flow they were built for. */
/* The grid row is auto-sized, so it grew to the panel's content height and
   the cap above never reached the panel. Pinning the row to 1fr and letting
   the column shrink is what actually hands the budget down the chain. */
/* Desktop only: on a phone the page scrolls, and bounding the panel here
   trapped the second accordion in a clipped box. */
@media (min-width: 768px) {
    .additional-page[data-step="3"][data-pay="coinbase"] .bxa-layout {
        grid-template-rows: minmax(0, 1fr);
    }

    .additional-page[data-step="3"][data-pay="coinbase"] .bxa-main {
        min-height: 0;
    }

    /* The panel itself is what scrolls, not an inner box - and nothing in this
       file may override display on .xpal-panel. xpalGoTo() hides panels with an
       inline display:none and shows one with inline display:block, and it never
       touches the .active class, so an !important display here (the only way to
       beat an inline style) forced every panel still carrying .active to paint at
       once and stacked step 1 on top of step 3. overflow-y needs no display
       change: the panel is already flex:1/min-height:0 inside .bxa-main, so the
       height cap above reaches it. */
    .additional-page[data-step="3"][data-pay="coinbase"] .bxa-main #xpal-panel-3 {
        overflow-y: auto;
        overscroll-behavior: contain;
    }

        .additional-page[data-step="3"][data-pay="coinbase"] #xpal-panel-3::-webkit-scrollbar {
            width: 6px;
        }

        .additional-page[data-step="3"][data-pay="coinbase"] #xpal-panel-3::-webkit-scrollbar-thumb {
            border-radius: 3px;
            background: #2A2A2A;
        }
}

/* the accordion header is chrome, not content - the mockup gives this row a
   single line of radio + label */
.additional-page[data-step="3"] .bxa-main .xpal-crypto-accordion-toggle {
    padding: clamp(8px, 1.2vh, 12px) clamp(12px, 1.1vw, 17px);
}

.additional-page[data-step="3"] .bxa-main .xpal-crypto-accordion-panel {
    padding: 0 clamp(12px, 1.1vw, 17px) clamp(10px, 1.5vh, 15px);
}

.additional-page[data-step="3"] .bxa-main .xpal-crypto-options {
    gap: clamp(7px, 1vh, 12px);
}

/* ============================== PDF export (all three receipts) ========= */
/* "Download Invoice" clones .html-content and rasterises it with html2canvas
   onto a white page. The redesigned receipt is deliberately light-on-dark, so
   every value came out near-white on white - the labels survived only because
   they are a mid grey. The old code worked around this by hand-painting the
   3-row meta table's cells, which no longer exists.

   This class is added to the OFF-SCREEN clone just before capture, so nothing
   here affects the page the user is looking at. html2canvas paints computed
   styles, so plain colours (no CSS variables, no gradients) are what survive
   the raster. */
.bxa-pdf,
.bxa-pdf * {
    color: #111111 !important;
    background: none !important;
    background-color: transparent !important;
    box-shadow: none !important;
    text-shadow: none !important;
}

/* the letterhead is hidden on screen and only shown in the export */
.bxa-pdf .info-container {
    padding: 0 30px;
}

    .bxa-pdf .info-container p {
        color: #444444 !important;
    }

.bxa-pdf .bxa-invoice-meta {
    border: 1px solid #DDDDDD !important;
    border-radius: 8px;
    overflow: hidden;
}

.bxa-pdf .bxa-meta-cell {
    background-color: #F7F7F7 !important;
    border-color: #FFFFFF !important;
    border-width: 3px !important;
    padding: 14px 18px !important;
}

.bxa-pdf .bxa-meta-label {
    color: #666666 !important;
}

.bxa-pdf .bxa-meta-value {
    color: #111111 !important;
    font-weight: 500;
}

.bxa-pdf #tableContainer thead th,
.bxa-pdf #tableContainer thead th p {
    background-color: #F0F0F0 !important;
    color: #333333 !important;
}

.bxa-pdf #tableContainer tbody td {
    border-bottom: 1px solid #E6E6E6 !important;
}

/* the total row is the one block that keeps a fill, so it still reads as the
   summary line rather than another table row */
.bxa-pdf .total-amount-div {
    background-color: #F0F0F0 !important;
    padding: 14px 18px !important;
}

    .bxa-pdf .total-amount-div p,
    .bxa-pdf .total-amount-div span {
        color: #111111 !important;
    }

/* ====================== PIX instructions (after the QR is issued) ======= */
/* .xpal-pix-result and its children had no styling here at all, so they fell
   through to additional-page.css: a full-bleed white QR panel, a tall
   free-resizing textarea and two full-width brand-purple buttons - none of
   which belong to this design. Everything below matches the rest of step 3:
   the same wells, the same hairline, the same pills. */
.bxa-main .xpal-pix-result {
    display: flex;
    flex-direction: column;
    gap: clamp(7px, 1.1vh, 12px);
}

.bxa-main .xpal-pix-result .xpal-pix-title {
    margin: 0;
}

.bxa-main .xpal-pix-result .xpal-pix-copy {
    margin: 0;
}

/* The QR has to stay on white to scan, but it is a tile inside the panel
   rather than a panel of its own. */
.bxa-main .xpal-pix-qr-wrap {
    align-self: flex-start;
    display: inline-flex;
    padding: clamp(7px, 1vh, 11px);
    border-radius: 12px;
    background: #FFFFFF;
}

.bxa-main .xpal-pix-qr {
    display: block;
    width: clamp(148px, min(12vw, 22vh), 178px);
    height: auto;
}

.bxa-main .xpal-pix-result .xpal-pix-label {
    margin: 0;
}

/* the Pix string is long and unbreakable - two lines, scrolling inside, and
   not user-resizable so it cannot push the panel past the fold */
.bxa-main .xpal-pix-copycode {
    width: 100%;
    height: auto;
    min-height: 0;
    padding: clamp(8px, 1.2vh, 12px) 14px;
    border: 1px solid #262626;
    border-radius: 10px;
    background: #101010;
    color: #E4E4E4;
    font-size: clamp(10px, min(0.82vw, 1.4vh), 12px);
    line-height: 1.45;
    resize: none;
    overflow-y: auto;
    field-sizing: content;
}

.bxa-main .xpal-pix-actions {
    display: flex;
    flex-wrap: wrap;
    gap: clamp(8px, 0.9vw, 14px);
    margin: 0;
}

    /* additional-page.css makes .xpal-btn full-width blocks */
    .bxa-main .xpal-pix-actions .xpal-btn {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: auto !important;
        min-width: clamp(120px, 10.5vw, 168px);
        padding: clamp(9px, 1.35vh, 12px) clamp(14px, 1.3vw, 24px) !important;
        border: 0;
        border-radius: 999px;
        font-size: clamp(11px, min(0.9vw, 1.6vh), 13.5px) !important;
        line-height: 1.2 !important;
        font-weight: 500;
        text-decoration: none;
        white-space: nowrap;
        cursor: pointer;
    }

    .bxa-main .xpal-pix-actions .xpal-btn-purple {
        background: var(--bxa-accent-soft) !important;
        color: #14122E !important;
    }

        .bxa-main .xpal-pix-actions .xpal-btn-purple:hover {
            background: #ADA5FA !important;
        }

    /* the secondary action is a link out to Stripe, not a second primary */
    .bxa-main .xpal-pix-actions .xpal-btn-gold {
        background: #1E1E1E !important;
        color: #E4E4E4 !important;
        border: 1px solid #2E2E2E !important;
    }

        .bxa-main .xpal-pix-actions .xpal-btn-gold:hover {
            background: #262626 !important;
        }

.bxa-main .xpal-pix-meta {
    margin: 0;
    font-size: clamp(9.5px, min(0.8vw, 1.35vh), 11.5px);
    line-height: 1.45;
    color: #8A8A8A;
}

/* --- and the same internal scrolling the crypto tab gets. The QR, the code
   field and two action pills make this the second-tallest tab, so it needs
   the same treatment rather than pushing the legal strip off the page. See
   the coinbase block above for why each of these four rules is needed - the
   short version is that .additional-page is min-height:100dvh, so nothing
   below it has a height to shrink against until the cap is applied, and
   .xpal-panel's display must never be overridden (xpalGoTo sets it inline). */
@media (min-width: 768px) {
    .additional-page[data-step="3"][data-pay="pix"] {
        height: 100dvh;
        max-height: 100dvh;
        overflow: hidden;
    }
}

/* Desktop only: on a phone the page scrolls, and bounding the panel here
   trapped the second accordion in a clipped box. */
@media (min-width: 768px) {
    .additional-page[data-step="3"][data-pay="pix"] .bxa-layout {
        grid-template-rows: minmax(0, 1fr);
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main {
        min-height: 0;
    }

    .additional-page[data-step="3"][data-pay="pix"] .bxa-main #xpal-panel-3 {
        overflow-y: auto;
        overscroll-behavior: contain;
    }

        .additional-page[data-step="3"][data-pay="pix"] #xpal-panel-3::-webkit-scrollbar {
            width: 6px;
        }

        .additional-page[data-step="3"][data-pay="pix"] #xpal-panel-3::-webkit-scrollbar-thumb {
            border-radius: 3px;
            background: #2A2A2A;
        }
}

/* --------------------------------- crypto accordion header (one row) ---
   additional-page.css sets `#coinbase-main .xpal-crypto-option-copy` to a
   column, and an id selector beats the class rules above - which is why the
   "Option N" pill dropped to a second line and left a tall, lopsided header.
   These selectors carry the same id so they can actually win. */
.bxa-main #coinbase-main .xpal-crypto-option-copy {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: clamp(10px, 1vw, 18px);
}

.bxa-main #coinbase-main .xpal-crypto-option-sub {
    flex: 0 0 auto;
    margin-left: 0;
}

    .bxa-main #coinbase-main .xpal-crypto-option-sub .option {
        padding: 3px clamp(8px, 0.7vw, 12px);
        border-radius: 999px;
        background: #232323;
        color: #B5B5B5;
        white-space: nowrap;
    }

/* the panel's divider carries an inline margin-bottom:20px */
.bxa-main #coinbase-main .xpal-crypto-accordion-panel hr {
    margin: 0 0 clamp(8px, 1.2vh, 14px) !important;
}


/* additional.js hides the shorter plans at load with Bootstrap's .d-none, keyed
   on the plan chosen back on /buyxid (localStorage.selectedSubscription). That
   is one class, so the display:flex !important above out-specified it and the
   load-time ladder silently stopped working when this sheet landed. */
.bxa-main .bxa-plan-switch .subscritionDetail.d-none {
    display: none !important;
}


/* ------------------------------------------- mobile: undo the height tiers --
   The [data-step="3"] max-height tiers exist to keep a DESKTOP window on one
   viewport. A phone in portrait is tall enough to trigger them too (a 740-852px
   viewport hits the 800px and 865px tiers), which squeezed the method tiles to
   4px of vertical padding even though the page scrolls freely here. These come
   last in the file so they win the specificity tie with those tiers. */
@media (max-width: 767px) {
    .additional-page[data-step="3"] .bxa-page {
        padding-top: 18px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-method-tiles .xpal-method-tab {
        padding-block: 12px;
        gap: 8px;
    }


    .additional-page[data-step="3"] .bxa-main .bxa-pay-heading {
        margin: 18px 0 10px;
    }

    .additional-page[data-step="3"] .bxa-main .bxa-xid-bar {
        padding-block: 9px;
    }

    .additional-page[data-step="3"] .bxa-main .xpal-pay-panel {
        margin-top: 14px;
    }
}

/* Two coin columns need ~180px each to hold icon + name + ticker + minimum +
   radio. At a 415px viewport they get ~150px, so the radios overflowed the card
   and .xpal-crypto-accordion's overflow:hidden cropped them. */
/* The Save50 badge deliberately overhangs the card on desktop, but on a phone
   the card reaches the screen edge, so 86% of the badge sat off-screen (its
   right edge measured 541px against a 504px viewport). Bring it inside and
   drop it into the gap between the stub rows: they sit at roughly 12-24%,
   45-57% and 77-92% of the card height, so 25% clears "Plan" above and "Cost
   Breakdown" below without covering either. */
@media (max-width: 767px) {
    .bxa-ticket[data-tone="green"] .bxa-ticket-save,
    .bxa-ticket .bxa-ticket-save {
        top: 27%;
        right: 8px;
        width: calc(var(--bxa-save-w) * 0.8);
        border-bottom-left-radius: 0;
    }
}

/* additional.css gives #stripe-main and #coinbase-main margin-top:80px below
   992px (for the pre-redesign layout). Those are id selectors, so they beat
   the .xpal-pay-panel spacing above and left ~80px of dead space between the
   method tiles and the panel - visible as a blank band above the crypto
   options. Matching that weight with the id plus two classes. */
@media (max-width: 992px) {
    .additional-page[data-step="3"] #stripe-main,
    .additional-page[data-step="3"] #coinbase-main {
        margin-top: 14px;
    }
}

@media (max-width: 575px) {
    /* nowpayments.css keeps two columns all the way down (it repeats
       grid-template-columns at its 500px and 480px breakpoints) using the ID
       #npCurrencyCards, which outranks any class selector - so this has to
       carry the id too. */
    .bxa-main #npCurrencyCards {
        grid-template-columns: minmax(0, 1fr);
    }
}
