/*
 * Base funnel styles. NO hard-coded brand colours — everything references the
 * per-brand CSS custom properties emitted by DesignTokens.ToCssVariables()
 * (--brand-color-*, --brand-type-*, --brand-layout-*). Fallbacks keep it usable
 * if a token is turned off for a brand.
 */
:root {
    --_accent: var(--brand-color-accent, #4338ca);
    --_accent-contrast: var(--brand-color-accent-contrast, #ffffff);
    --_bg: var(--brand-color-background, #f7f7fb);
    --_surface: var(--brand-color-surface, #ffffff);
    --_text: var(--brand-color-text, #1a1523);
    --_muted: var(--brand-color-muted, #6b6577);
    --_font: var(--brand-type-font-family-base, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);

    /* Borders and subtle fills. Defaults are black-alpha (fine on light backgrounds);
       DARK brands MUST set colors.border + colors.subtle or these vanish. */
    --_border: var(--brand-color-border, rgba(0, 0, 0, .12));
    --_subtle: var(--brand-color-subtle, rgba(0, 0, 0, .06));

    /* Buttons and inputs are styled independently: a brand may use full pill buttons
       (border-radius: 300px) while keeping inputs only slightly rounded. */
    --_btn-radius: var(--brand-layout-button-radius, 8px);
    --_input-radius: var(--brand-layout-input-radius, 8px);
}

* { box-sizing: border-box; }

/* The colour scheme is brand-driven (tokens.colorScheme), set on <html> by the layout.
   Pinning it stops mobile dark mode restyling form controls behind the brand's back. */

/* Inputs must take the brand surface, not the UA scheme's default field colour
   (which is grey in dark mode and ignores the brand palette entirely). */
button, input, select, textarea { color: var(--_text); }
input, select, textarea { background: var(--_surface); }
input::placeholder { color: var(--_muted); opacity: 1; }

body {
    margin: 0;
    font-family: var(--_font);
    color: var(--_text);
    background: var(--_bg);
    line-height: 1.5;
    /* Column layout so the footer sits at the BOTTOM of a short page instead of ending
       mid-screen with page background below it. The content region (.retail-main or
       .pshell) takes the slack. */
    display: flex;
    flex-direction: column;
    min-height: 100dvh;
}

.retail-header {
    padding: 1rem 1.5rem;
    background: var(--_surface);
    border-bottom: 1px solid var(--_border);
}
.retail-logo { height: var(--brand-layout-logo-height, 40px); }
.retail-wordmark { font-weight: 700; font-size: 1.1rem; }

.retail-main {
    max-width: 640px;
    margin: 0 auto;
    padding: 2rem 1.5rem;
    flex: 1 0 auto;
    width: 100%;
}

.retail-footer {
    text-align: center;
    color: var(--_muted);
    padding: 2rem 1.5rem;
    display: flex;
    flex-direction: column;
    gap: .5rem;
}
.retail-footer a { color: var(--_muted); }
.retail-footer__contact { display: flex; gap: 1.25rem; justify-content: center; flex-wrap: wrap; }
.retail-header__home { display: inline-block; line-height: 0; }

h1 {
    font-size: 1.6rem;
    margin: 0 0 .5rem;
    color: var(--brand-color-heading, inherit);
    font-family: var(--brand-type-font-family-heading, inherit);
}
h2 { color: var(--brand-color-heading, inherit); }
.lede { color: var(--_muted); margin-top: 0; }
.muted { color: var(--_muted); }

.product-grid {
    display: grid;
    gap: 1rem;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    margin: 1.5rem 0;
}
.product-card {
    display: flex;
    flex-direction: column;
    gap: .5rem;
    padding: 1.25rem;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: var(--brand-layout-radius, 12px);
    text-decoration: none;
    color: inherit;
}
.product-card__title { font-weight: 600; }
.product-card__cta { color: var(--_accent); font-weight: 600; }

/* Step content: centred column — headings/straplines centred, forms centred as blocks
   (labels stay left-aligned inside them). */
.retail-main h1,
.retail-main .lede,
.retail-main .notice { text-align: center; }
.step--confirmation { text-align: center; }

.availability-form {
    display: flex;
    flex-direction: column;
    gap: .5rem;
    max-width: 360px;
    margin: 0 auto;
    text-align: left;
}
.availability-form input {
    padding: .6rem .75rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
}

.btn {
    display: inline-block;
    padding: .6rem 1rem;
    border: none;
    border-radius: var(--_btn-radius);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
    color: var(--_text);
    background: var(--_subtle);
}
.btn--primary { background: var(--_accent); color: var(--_accent-contrast); }

.notice {
    padding: .6rem .9rem;
    /* Bottom margin only, and on .notice itself rather than at each call site: it had none at
       all, so anywhere a notice preceded a card it sat flush against it — most visibly the
       billing message that lands on the lines page. Bottom-only because the space above comes
       from whatever the notice follows, and none of the 27 usages sit in a gap-based flex
       container where this would double up. */
    margin: 0 0 1rem;
    background: color-mix(in srgb, var(--_accent) 8%, var(--_surface));
    border: 1px solid color-mix(in srgb, var(--_accent) 25%, transparent);
    border-radius: 8px;
}

.availability-form select {
    padding: .6rem .75rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
    background: var(--_surface);
}

.address-list {
    margin: 1.5rem auto 0;
    display: flex;
    flex-direction: column;
    gap: .4rem;
    max-width: 480px;
}
.address-list h2 { font-size: 1.1rem; margin: 0 0 .25rem; text-align: center; }
.address-option {
    width: 100%;
    text-align: left;
    padding: .6rem .9rem;
    background: var(--_surface);
    color: var(--_text);
    border: 1px solid var(--_border);
    border-radius: 8px;
    font: inherit;
    cursor: pointer;
}
.address-option:hover { border-color: var(--_accent); }

.offer-list,
.offer-grid { display: flex; flex-direction: column; gap: .75rem; margin: 1.25rem 0; }

/* Streaming availability results */
.carrier-status {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .6rem;
    padding: .55rem .9rem;
    margin: 0 auto;
    max-width: 480px;
    border-radius: 999px;
    background: color-mix(in srgb, var(--_accent) 8%, var(--_surface));
    border: 1px solid color-mix(in srgb, var(--_accent) 22%, transparent);
    font-size: .92rem;
}
.carrier-status--done {
    background: color-mix(in srgb, var(--brand-color-success, #16a34a) 10%, var(--_surface));
    border-color: color-mix(in srgb, var(--brand-color-success, #16a34a) 30%, transparent);
}
.carrier-status__spinner {
    width: 14px; height: 14px;
    border: 2px solid color-mix(in srgb, var(--_accent) 30%, transparent);
    border-top-color: var(--_accent);
    border-radius: 50%;
    animation: spin .8s linear infinite;
    flex: none;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* [hidden] must always win — several of these elements have display:flex. */
[hidden] { display: none !important; }

/* Busy state for submit buttons (postcode/address + number search) */
.btn--busy {
    opacity: .85;
    pointer-events: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
}
.btn__spinner {
    width: 14px; height: 14px;
    border: 2px solid color-mix(in srgb, currentColor 35%, transparent);
    border-top-color: currentColor;
    border-radius: 50%;
    animation: spin .8s linear infinite;
    flex: none;
}

/* Dynamic result filters (appear only when >1 network or >1 term) */
.offer-filters {
    display: flex;
    gap: 1.5rem;
    flex-wrap: wrap;
    justify-content: center;
    margin: 1rem auto 0;
    padding: .75rem 1rem;
    max-width: 560px;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: var(--brand-layout-radius, 12px);
}
.filter-group {
    display: flex;
    align-items: center;
    gap: .75rem;
    flex-wrap: wrap;
    border: none;
    margin: 0;
    padding: 0;
}
.filter-group__label {
    font-size: .78rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--_muted);
    padding: 0;
}
.filter-option {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    font-size: .88rem;
    cursor: pointer;
    user-select: none;
}
.filter-option input { accent-color: var(--_accent); width: 15px; height: 15px; cursor: pointer; }

.carrier-group { display: flex; flex-direction: column; gap: .75rem; }
.carrier-group__head {
    text-align: left;
    font-size: .82rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--_muted);
    margin-top: .5rem;
}
.offer-group--enter { animation: rise .35s ease-out; }
.offer-card--enter { animation: rise .35s ease-out; }
@keyframes rise {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: none; }
}

.offer-card__chips { display: flex; gap: .4rem; flex-wrap: wrap; margin: .2rem 0; }
.chip {
    font-size: .72rem;
    font-weight: 600;
    padding: .15rem .55rem;
    border-radius: 999px;
    white-space: nowrap;
}
.chip--carrier {
    background: color-mix(in srgb, var(--brand-color-heading, var(--_accent)) 10%, var(--_surface));
    color: var(--brand-color-heading, var(--_text));
    border: 1px solid color-mix(in srgb, var(--brand-color-heading, var(--_accent)) 25%, transparent);
}
.chip--term {
    background: var(--_subtle);
    color: var(--_muted);
    border: 1px solid var(--_border);
}

/* Skeleton placeholders while the first carrier responds */
.offer-card--skeleton { min-height: 84px; align-items: stretch; }
.offer-card--skeleton .skeleton-line {
    height: 12px;
    border-radius: 6px;
    margin: .35rem 0;
    background: linear-gradient(90deg, var(--_subtle) 25%, var(--_border) 50%, var(--_subtle) 75%);
    background-size: 200% 100%;
    animation: shimmer 1.4s infinite;
}
.skeleton-line.w60 { width: 60%; }
.skeleton-line.w40 { width: 40%; }
.skeleton-line.w30 { width: 30%; }
@keyframes shimmer { to { background-position: -200% 0; } }
.offer-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1rem 1.25rem;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: var(--brand-layout-radius, 12px);
}
.offer-card__body { display: flex; flex-direction: column; gap: .15rem; }
.offer-card__title { font-weight: 600; }
.offer-card__subtitle { color: var(--_muted); font-size: .9rem; }
.offer-card__price { font-weight: 600; color: var(--_accent); }
.offer-card__price small { font-weight: 400; color: var(--_muted); }

.summary-card {
    display: flex;
    flex-direction: column;
    gap: .2rem;
    padding: .9rem 1.1rem;
    max-width: 420px;
    margin: 0 auto 1.25rem;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 8px;
}
.summary-card__title { font-weight: 600; }

/* Profile "Sign-in & security" section (passkey management) */
.section-title {
    margin: 2.5rem auto .25rem;
    max-width: 420px;
    padding-top: 1.5rem;
    border-top: 1px solid var(--_border);
}
.passkey-list {
    list-style: none;
    padding: 0;
    margin: 0 0 1rem;
}
.passkey-list .summary-card { margin-bottom: .75rem; }
.passkey-list .summary-card form { margin-top: .35rem; }
.passkey-list a.summary-card__title { color: inherit; }

/* Support ticket conversation */
.ticket-thread {
    display: flex;
    flex-direction: column;
    gap: .75rem;
    max-width: 560px;
    margin: 0 auto 1.5rem;
}
.ticket-msg {
    padding: .8rem 1rem;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 10px;
    text-align: left;
    margin-right: 2.5rem;
}
.ticket-msg--you {
    margin-right: 0;
    margin-left: 2.5rem;
    border-left: 3px solid var(--_accent);
}
.ticket-msg__meta {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: .3rem;
    font-size: .85rem;
}
.ticket-msg__author { font-weight: 600; }
.ticket-msg__body { white-space: pre-wrap; }

.details-form {
    display: flex;
    flex-direction: column;
    gap: .5rem;
    max-width: 420px;
    margin: 0 auto;
    text-align: left;
}
.details-form label { margin-top: .4rem; }
.details-form input:not([type="checkbox"]):not([type="radio"]),
.details-form select,
.details-form textarea {
    padding: .6rem .75rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
    background: var(--_surface);
    color: inherit;
    width: 100%;
    box-sizing: border-box;
}
.details-form select {
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23666' d='M6 8 0 0h12z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right .75rem center;
    padding-right: 2.25rem;
}
.details-form textarea { resize: vertical; }
.details-form button { margin-top: 1rem; align-self: stretch; }

/* Back link aligned to the centred form rather than the page edge */
.step-back { max-width: 420px; margin: 1rem auto 0; }

/* Order type (new install vs migration) + addon options on the details step */
.order-type {
    display: flex;
    flex-direction: column;
    gap: .4rem;
    border: none;
    margin: 0 0 1.25rem;
    padding: 0;
}
.order-type .addon-section__title { margin-bottom: .35rem; padding: 0; }

.addon-section { display: flex; flex-direction: column; gap: 1rem; margin-bottom: .75rem; }
.addon-section__title { font-size: 1.05rem; margin: 0; text-align: left; }
.addon-group { border: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .4rem; }
.addon-group__name {
    font-size: .82rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--_muted);
    padding: 0;
}
.addon-group__desc { margin: 0; font-size: .85rem; }
.addon-option {
    display: flex;
    align-items: center;
    gap: .65rem;
    padding: .6rem .8rem;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 10px;
    cursor: pointer;
}
.addon-option:has(input:checked) {
    border-color: var(--_accent);
    box-shadow: 0 0 0 1px var(--_accent);
}
.addon-option input { accent-color: var(--_accent); flex: none; }
.addon-option__body { display: flex; flex-direction: column; flex: 1; }
.addon-option__name { font-weight: 600; font-size: .92rem; }
.addon-option__desc { font-size: .8rem; }
.addon-option__price { font-weight: 600; font-size: .9rem; text-align: right; color: var(--_accent); }
.addon-option__price small { color: var(--_muted); font-weight: 400; }
.addon-option__setup { display: block; font-size: .75rem; font-weight: 400; }

.order-summary__row { display: flex; justify-content: space-between; gap: 1rem; }
.order-summary__total { font-weight: 700; border-top: 1px solid var(--_border); padding-top: .4rem; margin-top: .2rem; }

/* ── In-life portal ─────────────────────────────────────────────────────── */
.portal-lines { display: flex; flex-direction: column; gap: 1rem; }
.portal-lines .summary-card { text-decoration: none; color: inherit; }
.summary-card--unread { border-left: 4px solid var(--_accent); }
.portal-lines__actions { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: .75rem; }
.portal-footer-links { margin-top: 1.5rem; }
.portal-table { width: 100%; border-collapse: collapse; }
.portal-table th, .portal-table td { text-align: left; padding: .5rem .75rem; border-bottom: 1px solid var(--_muted-border, #e5e5ef); }
.portal-table__row--missed td { color: var(--_muted); }
.checkbox-label { display: flex; align-items: center; gap: .5rem; margin: .25rem 0; }
.checkbox-label--inline { display: inline-flex; margin-right: .5rem; }
.closed-hours-slot { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; padding: .5rem 0; border-bottom: 1px dashed var(--_muted-border, #e5e5ef); }
.closed-hours-slot__days { display: flex; flex-wrap: wrap; gap: .25rem; }


/* ── Portal navigation (signed-in customers) ────────────────────────────── */
.portal-nav {
    background: var(--_surface);
    border-bottom: 1px solid var(--_border);
}
.portal-nav__inner {
    max-width: 640px;
    margin: 0 auto;
    padding: 0 1.5rem;
    display: flex;
    align-items: center;
    gap: .25rem;
    flex-wrap: wrap;
}
.portal-nav__link {
    display: inline-block;
    padding: .65rem .6rem;
    color: var(--_muted);
    text-decoration: none;
    font-size: .95rem;
    border-bottom: 2px solid transparent;
}
.portal-nav__link:hover { color: var(--_text); }
.portal-nav__link--active {
    color: var(--_accent);
    font-weight: 600;
    border-bottom-color: var(--_accent);
}
.portal-nav__signout { margin-left: auto; }
.portal-nav__link--button {
    background: none;
    border: none;
    border-bottom: 2px solid transparent;
    cursor: pointer;
    font: inherit;
    font-size: .95rem;
}

/* ── DN-style funnel: hero, number finder, number grid, checkout ─────────── */
/* Full-bleed marketing hero — geometry measured from digitalnumbers.com:
   full viewport band, padding 48px 0, 1320px inner container, 56px left-aligned
   headline in a half-width column, light CTA (8px 48px, 20px), phone glyph right. */
.brand-hero {
    background: var(--_accent);
    color: var(--_accent-contrast);
    padding: 48px 0;
    width: 100%;
}
.brand-hero__inner {
    max-width: var(--brand-layout-header-max-width, 1320px);
    margin: 0 auto;
    padding: 0 12px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 2rem;
}
.brand-hero__copy { max-width: 640px; text-align: left; }
.brand-hero__pill {
    display: inline-block;
    background: var(--_accent-contrast);
    color: var(--_accent);
    font-weight: 700;
    font-size: .85rem;
    padding: .35rem .9rem;
    border-radius: 300px;
    margin-bottom: 1rem;
}
.brand-hero__headline {
    font-size: clamp(2.2rem, 4vw, 3.5rem);
    font-weight: 700;
    margin: 0 0 .5rem;
    line-height: 1.15;
}
.brand-hero__subline { margin: 0 0 1.25rem; opacity: .92; max-width: 420px; }
.brand-hero__cta {
    display: inline-block;
    background: #f8f9fa;
    color: #000;
    font-size: 1.25rem;
    padding: 8px 48px;
    border-radius: var(--_btn-radius);
    text-decoration: none;
    font-weight: 500;
}
.brand-hero__cta:hover { background: #e9ecef; }
.brand-hero__ticks {
    list-style: none;
    display: flex;
    gap: 1.25rem;
    flex-wrap: wrap;
    padding: 0;
    margin: 1rem 0 0;
    font-size: .9rem;
    opacity: .95;
}
.brand-hero__ticks li::before { content: "✓ "; }
.brand-hero__art { opacity: .25; flex: 0 0 auto; transform: rotate(-8deg); }
@media (max-width: 800px) {
    .brand-hero__art { display: none; }
    .brand-hero__copy { max-width: none; }
}
html { scroll-behavior: smooth; }

.finder__title { text-align: center; font-size: 1.6rem; margin: 2rem 0 .25rem; }
.finder-card {
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 12px;
    box-shadow: 0 8px 24px var(--_subtle);
    padding: 1.5rem;
    display: flex;
    flex-direction: column;
    gap: .6rem;
    text-align: left;
    margin-top: 1rem;
}
.finder-card__hint { text-align: center; margin: 0; font-size: .85rem; }
.btn--block { display: block; width: 100%; text-align: center; }
.btn--large { padding: .9rem 1rem; font-size: 1.05rem; }
.btn--outline {
    background: transparent;
    border: 1px solid var(--_accent);
    color: var(--_accent);
}
.btn--outline:hover { background: var(--_subtle); }

/* Searchable area-code combo */
.combo { position: relative; }
.combo__input {
    width: 100%;
    padding: .6rem .75rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
    background: var(--_surface);
    box-sizing: border-box;
}
.combo__list {
    position: absolute;
    z-index: 30;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    max-height: 300px;
    overflow-y: auto;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    box-shadow: 0 12px 28px rgba(0, 0, 0, .12);
    list-style: none;
    margin: 0;
    padding: .25rem;
}
.combo__option {
    padding: .5rem .6rem;
    border-radius: 6px;
    cursor: pointer;
}
.combo__option:hover { background: var(--_subtle); }
.combo__option-title { font-weight: 500; }

/* Number selection grid (DN style) */
.numbers__count { text-align: center; }
.numbers__banner { max-width: 640px; margin: .75rem auto 1.25rem; }
.notice--info {
    background: var(--_subtle);
    border: 1px solid var(--_border);
    color: var(--_text);
}
.number-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: .9rem;
    margin: 0 0 1.25rem;
}
.number-card {
    position: relative;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 10px;
    padding: 1rem .9rem .9rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .3rem;
    text-align: center;
}
.number-card__flag { position: absolute; top: .5rem; right: .6rem; font-size: .9rem; }
.number-card__icon { color: var(--_accent); }
.number-card__number { font-weight: 700; font-size: 1.05rem; }
.number-card__area { font-size: .8rem; }
.number-card__select { margin-top: .4rem; width: 100%; font-size: .85rem; padding: .45rem .5rem; }

/* Checkout (DN "Complete Your Order") */
.number-showcase {
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 12px;
    padding: 1.75rem 1rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .35rem;
    margin: 1rem 0 1.25rem;
}
.number-showcase__icon { color: var(--_accent); }
.number-showcase__label { font-weight: 600; font-size: 1.05rem; }
.number-showcase__number {
    color: var(--_accent);
    font-weight: 800;
    font-size: 2.4rem;
    letter-spacing: .5px;
    line-height: 1.1;
}
.checkout-panel {
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 12px;
    padding: 1.5rem;
    display: flex;
    flex-direction: column;
    gap: .9rem;
    text-align: left;
}
.checkout-panel__heading { font-size: 1.05rem; margin: .25rem 0 0; }
.checkout-account { display: flex; flex-direction: column; gap: .4rem; }
.checkout-account input[type="email"] {
    padding: .6rem .75rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
}
.checkout-account--signedin {
    background: rgba(25, 135, 84, .12);
    border: 1px solid rgba(25, 135, 84, .25);
    border-radius: 8px;
    padding: .7rem .9rem;
}
.plan-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: .9rem;
}
.plan-card {
    position: relative;
    border: 1px solid var(--_border);
    border-radius: 10px;
    padding: 1rem;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    gap: .3rem;
}
.plan-card:has(input:checked) {
    border-color: var(--_accent);
    box-shadow: 0 0 0 1px var(--_accent);
}
.plan-card input[type="radio"] { position: absolute; top: 1rem; left: 1rem; }
.plan-card__name { font-weight: 600; margin-left: 1.6rem; }
.plan-card__price { font-size: 1.5rem; font-weight: 800; }
.plan-card__price small { font-size: .85rem; font-weight: 400; color: var(--_muted); }
.plan-card__badge {
    position: absolute;
    top: -.6rem;
    right: .75rem;
    background: #198754;
    color: #fff;
    font-size: .72rem;
    font-weight: 700;
    padding: .2rem .6rem;
    border-radius: 300px;
}
.plan-card__features {
    list-style: none;
    padding: 0;
    margin: .25rem 0 0;
    font-size: .85rem;
    color: var(--_muted);
    display: flex;
    flex-direction: column;
    gap: .25rem;
}
.plan-card__features li::before { content: "✓ "; color: #198754; }

/* Trial toggle switch */
.trial-toggle {
    display: flex;
    align-items: flex-start;
    gap: .75rem;
    border: 1px solid var(--_border);
    background: var(--_subtle);
    border-radius: 10px;
    padding: .8rem .9rem;
    cursor: pointer;
}
.trial-toggle__input { position: absolute; opacity: 0; }
.trial-toggle__switch {
    flex: 0 0 auto;
    width: 40px;
    height: 22px;
    border-radius: 300px;
    background: var(--_border);
    position: relative;
    transition: background .15s;
    margin-top: .15rem;
}
.trial-toggle__switch::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 2px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--_surface);
    transition: left .15s;
}
.trial-toggle:has(input:checked) .trial-toggle__switch { background: var(--_accent); }
.trial-toggle:has(input:checked) .trial-toggle__switch::after { left: 20px; }
.trial-toggle__body { display: flex; flex-direction: column; gap: .15rem; font-size: .9rem; }
.trial-toggle__title { font-weight: 600; }

.promo-expander summary {
    cursor: pointer;
    color: var(--_accent);
    font-size: .9rem;
    text-align: center;
    list-style: none;
}
.promo-expander summary::-webkit-details-marker { display: none; }
.promo-expander input {
    margin-top: .6rem;
    width: 100%;
    padding: .6rem .75rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
    box-sizing: border-box;
}
.checkout-trust, .checkout-methods { text-align: center; margin: 0; font-size: .85rem; }
.whats-next {
    background: var(--_subtle);
    border-radius: 10px;
    padding: 1rem 1.25rem;
    margin-top: 1.25rem;
    text-align: left;
}
.whats-next ol { margin: .5rem 0 0; padding-left: 1.25rem; display: flex; flex-direction: column; gap: .35rem; }

/* ── Full brand chrome (header nav + marketing-site footer) ─────────────── */
.retail-header__inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
}
.retail-header--full { padding: .75rem 1.5rem; } /* 67px tall like DN's navbar */
.retail-header--full .retail-header__inner {
    /* Matches a Bootstrap .container (DN's marketing site): 1320px + 12px gutters */
    max-width: var(--brand-layout-header-max-width, 1320px);
    margin: 0 auto;
    padding: 0 12px;
}
.site-nav { display: flex; align-items: center; gap: .25rem; flex-wrap: wrap; }
.site-nav__link {
    padding: 8px;
    color: var(--brand-color-nav-link, rgba(0, 0, 0, .65));
    text-decoration: none;
    font-size: 1rem;
    border-radius: 6px;
}
.site-nav__link:hover { background: var(--_subtle); }
.site-nav__link--account { color: var(--_accent); font-weight: 600; }

.site-footer {
    background: var(--brand-color-footer-background, #212529);
    color: var(--brand-color-footer-text, #ffffff);
    padding: 2.5rem 1.5rem;
    margin-top: 2rem;
}
/* The account shell already ends in a rule (the sidebar border), so no gap above. */
.site-footer--portal { margin-top: 0; }
.site-footer__inner {
    max-width: var(--brand-layout-header-max-width, 1320px);
    margin: 0 auto;
    display: flex;
    flex-wrap: wrap;
    gap: 2rem;
}
.site-footer__brand { flex: 2 1 260px; }
.site-footer__col { flex: 1 1 140px; }
.site-footer__logo { height: 40px; margin-bottom: .75rem; }
.site-footer__tagline {
    color: var(--brand-color-footer-muted, rgba(255, 255, 255, .65));
    font-size: .9rem;
    margin: 0;
    max-width: 280px;
}
.site-footer__col { display: flex; flex-direction: column; gap: .5rem; }
.site-footer__col-title { font-weight: 700; margin-bottom: .25rem; }
.site-footer__col a {
    color: var(--brand-color-footer-muted, rgba(255, 255, 255, .75));
    text-decoration: none;
    font-size: .92rem;
}
.site-footer__col a:hover { color: var(--brand-color-footer-text, #ffffff); text-decoration: underline; }

/* Optional footer call to action — outlined, filling with the brand accent on hover, so it
   reads as secondary to the page's own primary action. */
.site-footer__cta-col { display: flex; align-items: flex-start; }
.site-footer__cta {
    display: inline-block;
    padding: .7rem 1.35rem;
    border: 2px solid var(--brand-color-footer-text, rgba(255, 255, 255, .85));
    border-radius: var(--_btn-radius);
    color: var(--brand-color-footer-text, #ffffff);
    text-decoration: none;
    font-weight: 600;
    white-space: nowrap;
}
.site-footer__cta:hover {
    background: var(--_accent);
    border-color: var(--_accent);
    color: var(--_accent-contrast);
}

/* Separated from the columns by a hairline in the footer's own palette rather than a
   hard-coded grey, so it works on a light footer as well as a dark one. Same max-width as
   __inner so the rule lines up with the columns above it instead of floating inside them. */
.site-footer__legal {
    max-width: var(--brand-layout-header-max-width, 1320px);
    margin: 2rem auto 0;
    padding: 1rem 0 0;
    border-top: 1px solid var(--brand-color-footer-muted, rgba(255, 255, 255, .18));
    color: var(--brand-color-footer-muted, rgba(255, 255, 255, .6));
    font-size: .82rem;
    text-align: right;
}
@media (max-width: 640px) {
    .site-footer__inner { flex-direction: column; gap: 1.25rem; }
    /* Stacked, the flex-basis on these becomes a HEIGHT (260px/140px), which padded the
       mobile footer out with big empty bands. Let them size to their content. */
    .site-footer__brand, .site-footer__col, .site-footer__cta-col { flex: 0 0 auto; }
    .site-nav { display: none; } /* full nav collapses on small screens; logo remains */
}

/* ═══════════════════════════════════════════════════════════════════════════
   Account portal shell — sidebar on desktop, bottom tab bar on mobile.
   Everything derives from brand tokens; the "number plate" is the signature
   motif (numbers are the product). Funnel/checkout keep the centred column.
   ═══════════════════════════════════════════════════════════════════════════ */

:root { --_ok: var(--brand-color-success, #1c8a53); }

input[type="checkbox"], input[type="radio"] { accent-color: var(--_accent); }

.pshell {
    display: flex;
    width: 100%;
    max-width: 1160px;
    margin: 0 auto;
    flex: 1 0 auto;
    align-items: stretch;
}

/* Left rail */
.pshell__nav {
    width: 212px;
    flex: 0 0 212px;
    padding: 1.5rem .9rem;
    border-right: 1px solid var(--_border);
    display: flex;
    flex-direction: column;
    gap: .15rem;
}
.pnav__item {
    display: flex;
    align-items: center;
    gap: .65rem;
    padding: .55rem .8rem;
    border-radius: 9px;
    color: var(--_muted);
    text-decoration: none;
    font-size: .95rem;
    font-weight: 500;
    transition: background .12s, color .12s;
}
.pnav__item:hover { background: var(--_subtle); color: var(--_text); }
.pnav__item--active {
    background: color-mix(in srgb, var(--_accent) 10%, transparent);
    color: var(--_accent);
    font-weight: 600;
}
.pnav__item:focus-visible { outline: 2px solid var(--_accent); outline-offset: 2px; }
.pnav__icon { width: 19px; height: 19px; flex: 0 0 19px; }
/* Fixed gap rather than margin-top:auto — the shell now stretches to the viewport so the
   footer can sit at the bottom, and an auto margin would strand Sign out far below the
   rest of the nav. */
.pnav__signout {
    margin-top: .75rem;
    padding-top: .75rem;
    border-top: 1px solid var(--_border);
}
.pnav__item--button {
    width: 100%;
    background: none;
    border: none;
    font: inherit;
    font-size: .95rem;
    font-weight: 500;
    cursor: pointer;
    text-align: left;
}

/* Content column */
.pshell__main {
    flex: 1;
    min-width: 0;
    padding: 1.75rem 2rem 3rem;
    text-align: left;
}
.pshell__main h1, .pshell__main h2, .pshell__main .lede, .pshell__main .notice { text-align: left; }

/* Page header: eyebrow (place) + title + optional action */
.ppage__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin: 0 0 1.4rem;
}
.ppage__eyebrow {
    display: block;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--_muted);
    margin-bottom: .3rem;
}
.ppage__eyebrow a { color: inherit; text-decoration: none; }
.ppage__eyebrow a:hover { color: var(--_accent); }
.ppage__head h1 { margin: 0; font-size: 1.55rem; line-height: 1.2; }

/* Cards + responsive card grid */
.pcard {
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 12px;
    padding: 1.15rem 1.3rem;
    text-align: left;
}
.pcard + .pcard { margin-top: 1rem; }
.pcard__title { margin: 0 0 .2rem; font-size: 1rem; font-weight: 650; }
.pcard__hint { margin: 0 0 .9rem; font-size: .85rem; color: var(--_muted); }
.pgrid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(272px, 1fr));
    gap: 1rem;
}
.pgrid .pcard + .pcard { margin-top: 0; }

/* The number plate — the product, front and centre */
.plate__area {
    display: block;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--_muted);
}
.plate__num {
    font-size: 1.45rem;
    font-weight: 700;
    letter-spacing: .015em;
    font-variant-numeric: tabular-nums;
    color: var(--_text);
    line-height: 1.25;
}
.plate__label { display: block; font-size: .85rem; color: var(--_muted); margin-top: .1rem; }
.plate--hero .plate__num { font-size: 2.1rem; }

/* Status dot + text */
.pstatus {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    font-size: .82rem;
    font-weight: 500;
    color: var(--_muted);
}
.pstatus__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--_muted); flex: 0 0 8px; }
.pstatus--ok .pstatus__dot { background: var(--_ok); }
.pstatus--ok { color: var(--_ok); }
.pstatus--warn .pstatus__dot { background: #c77d0a; }
.pstatus--warn { color: #a36806; }

/* Line-page tab strip: Overview / Settings / Calls / Voicemail */
.ptabs {
    display: flex;
    gap: .15rem;
    border-bottom: 1px solid var(--_border);
    margin: 0 0 1.4rem;
    overflow-x: auto;
}
.ptabs a {
    padding: .5rem .95rem .6rem;
    color: var(--_muted);
    text-decoration: none;
    font-size: .92rem;
    font-weight: 500;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    white-space: nowrap;
}
.ptabs a:hover { color: var(--_text); }
.ptabs a.ptabs--active {
    color: var(--_accent);
    border-bottom-color: var(--_accent);
    font-weight: 600;
}

/* Definition rows inside cards (label left, value right) */
.pkv { display: flex; justify-content: space-between; gap: 1rem; padding: .45rem 0; font-size: .92rem; }
.pkv + .pkv { border-top: 1px solid var(--_subtle); }
.pkv dt { color: var(--_muted); margin: 0; }
.pkv dd { margin: 0; text-align: right; font-weight: 500; }

/* Toggle rows for settings forms */
.prow {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    padding: .6rem 0;
    font-size: .94rem;
    cursor: pointer;
}
.prow + .prow, .prow + .prow-field, .prow-field + .prow { border-top: 1px solid var(--_subtle); }
.prow input[type="checkbox"] { width: 18px; height: 18px; flex: 0 0 18px; }
.prow__text small { display: block; color: var(--_muted); font-size: .8rem; margin-top: .1rem; }
.prow-field { padding: .6rem 0; }
.prow-field label { display: block; font-size: .88rem; margin-bottom: .3rem; }

/* Two-column field grid (profile) */
.pform__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 1.25rem; }
.pform__grid .prow-field { border-top: none; }

/* Tables inside the shell */
.pshell .portal-table { width: 100%; border-collapse: collapse; text-align: left; font-size: .92rem; }
.pshell .portal-table th {
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--_muted);
    padding: .5rem .75rem;
    border-bottom: 1px solid var(--_border);
}
.pshell .portal-table td { padding: .6rem .75rem; border-bottom: 1px solid var(--_subtle); font-variant-numeric: tabular-nums; }
.pshell .portal-table__row--missed td { color: #a33; }

/* List rows (voicemails, support tickets) */
.plist { display: flex; flex-direction: column; gap: .6rem; }
.plist__item {
    display: block;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: 10px;
    padding: .8rem 1.05rem;
    text-decoration: none;
    color: inherit;
    text-align: left;
    transition: border-color .12s;
}
a.plist__item:hover { border-color: var(--_accent); }
.plist__item--unread { border-left: 3px solid var(--_accent); }
.plist__top { display: flex; justify-content: space-between; gap: 1rem; align-items: baseline; }
.plist__title { font-weight: 600; font-size: .95rem; }
.plist__meta { font-size: .8rem; color: var(--_muted); white-space: nowrap; }
.plist__sub { font-size: .85rem; color: var(--_muted); margin-top: .25rem; }

/* Destructive actions and error notices (brand-overridable, like --_ok above) */
:root { --_danger: var(--brand-color-danger, #b42318); }

.notice--error {
    background: color-mix(in srgb, var(--_danger) 8%, var(--_surface));
    border-color: color-mix(in srgb, var(--_danger) 30%, transparent);
    color: var(--_danger);
}

/* Outline rather than solid: destructive, but not the loudest thing on the page */
.btn--danger {
    background: transparent;
    border-color: color-mix(in srgb, var(--_danger) 40%, transparent);
    color: var(--_danger);
}
.btn--danger:hover { background: color-mix(in srgb, var(--_danger) 8%, transparent); }

/* Voicemail detail: audio player + action row */
.vmplayer { margin: .9rem 0 0; }
.vmplayer__audio { display: block; width: 100%; border-radius: 8px; }

.vmactions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .5rem;
    margin-top: 1rem;
    padding-top: .9rem;
    border-top: 1px solid var(--_subtle);
}
/* Keep Delete away from Download/Mark so it is not fat-fingered */
.vmactions__danger { margin-left: auto; }
@media (max-width: 640px) {
    .vmactions__danger { margin-left: 0; }
}

/* Trial upsell strip */
.ptrial {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    background: color-mix(in srgb, var(--_accent) 7%, var(--_surface));
    border: 1px solid color-mix(in srgb, var(--_accent) 30%, transparent);
    border-radius: 12px;
    padding: .9rem 1.2rem;
    margin-bottom: 1rem;
}
.ptrial__text { font-size: .92rem; }
.ptrial__text strong { display: block; }

/* Add-a-line card */
.pcard--add {
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    border-style: dashed;
    color: var(--_muted);
    text-decoration: none;
    font-weight: 550;
    min-height: 132px;
    transition: color .12s, border-color .12s;
}
.pcard--add:hover { color: var(--_accent); border-color: var(--_accent); }

/* ── Mobile: bottom tab bar ── */
@media (max-width: 899px) {
    .pshell { display: block; }
    .pshell__nav {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 60;
        width: auto;
        flex: none;
        flex-direction: row;
        justify-content: space-around;
        gap: 0;
        padding: .3rem .5rem calc(.3rem + env(safe-area-inset-bottom));
        background: var(--_surface);
        border-right: none;
        border-top: 1px solid var(--_border);
    }
    .pnav__item { flex-direction: column; gap: .15rem; padding: .3rem .45rem; font-size: .66rem; }
    .pnav__signout { margin: 0; padding: 0; display: contents; }
    .pnav__item--button { width: auto; text-align: center; }
    .pshell__main { padding: 1.25rem 1rem 5.5rem; }
    .plate--hero .plate__num { font-size: 1.7rem; }
    .pform__grid { grid-template-columns: 1fr; }
    .retail-footer--portal, .site-footer--portal { padding-bottom: 5.5rem; }
}

/* Portal-shell odds and ends */
.pshell dl { margin: 0 0 .8rem; }
.ppager { display: flex; gap: .5rem; margin-top: 1rem; }
.psection-title { font-size: 1.05rem; margin: 1.6rem 0 .7rem; }
.pform .pcard + .pcard { margin-top: 1rem; }
.pform > .btn { margin-top: 1rem; }
.profile-signout { margin-top: 1.1rem; padding-top: 1rem; border-top: 1px solid var(--_subtle); }
.pshell .ticket-thread { max-width: none; margin: 0 0 1rem; }
.pshell input, .pshell select, .pshell textarea {
    padding: .55rem .7rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    font: inherit;
}
.pshell input[type="checkbox"] { padding: 0; }
.ptabs { scrollbar-width: none; }
.ptabs::-webkit-scrollbar { display: none; }

/* App store badges */
.appstore-row { display: flex; gap: .8rem; flex-wrap: wrap; }
.appstore-badge {
    display: inline-flex;
    align-items: center;
    gap: .6rem;
    padding: .55rem 1.1rem;
    border-radius: 10px;
    background: var(--_text);
    color: var(--_bg);
    text-decoration: none;
    line-height: 1.15;
}
.appstore-badge:hover { opacity: .88; }
.appstore-badge svg { width: 22px; height: 22px; flex: none; }
.appstore-badge small { display: block; font-size: .62rem; font-weight: 400; opacity: .8; }
.appstore-badge span { font-weight: 650; font-size: .95rem; }

/* Beacon provisioning (line Apps tab) */
.provision { display: flex; gap: 1.4rem; align-items: flex-start; flex-wrap: wrap; }
.provision__qr { border: 1px solid var(--_border); border-radius: 10px; background: #fff; flex: none; }
.provision__info { flex: 1; min-width: 240px; display: flex; flex-direction: column; gap: .55rem; align-items: flex-start; }
.provision__linkrow { display: flex; gap: .5rem; width: 100%; }
.provision__linkrow input { flex: 1; min-width: 0; font-size: .82rem; color: var(--_muted); }

/* Official store badge images: Apple's SVG has no outer padding while Google's PNG
   carries its own — equalise visual height and strip the PNG's built-in margin. */
.appstore-official { display: inline-block; line-height: 0; }
.appstore-official img { height: 48px; width: auto; display: block; }
.appstore-official img[src*="googleplay"] { height: 71px; margin: -11.5px -14px; }

/* ──────────────────────────────────────────────────────────────────────────
   Account pages (sign in / register / password reset)

   ONE layout for every brand — only the colours, the logo and which social
   providers appear differ, and all three come from brand config rather than
   from anything here. Everything below references the --brand-* tokens.

   The single exception is the provider marks: Google, Facebook and Apple all
   require their own colours and, for Apple, a black button. Those are the
   providers' brand assets, not ours, so they are the one place a literal
   colour is correct.
   ────────────────────────────────────────────────────────────────────────── */

.auth {
    /* Centre the card in whatever height the chrome leaves, without collapsing
       on short screens — hence min-height + auto margins rather than a fixed vh. */
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: min(72vh, 640px);
    padding: 2rem 1rem 3rem;
}

.auth__card {
    width: 100%;
    max-width: 27rem;
    padding: 2rem 2rem 1.75rem;
    background: var(--_surface);
    border: 1px solid var(--_border);
    border-radius: var(--brand-layout-card-radius, 16px);
    /* Two-stop shadow: a tight contact shadow plus a wide soft one reads as a
       raised card without the muddy grey of a single large blur. */
    box-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 12px 32px -12px rgba(0, 0, 0, .18);
}

.auth__head { text-align: center; margin-bottom: 1.5rem; }

.auth__logo {
    height: var(--brand-layout-logo-height, 40px);
    width: auto;
    margin: 0 auto .9rem;
    display: block;
}
.auth__wordmark {
    display: block;
    font-weight: 700;
    font-size: 1.35rem;
    margin-bottom: .9rem;
    color: var(--_accent);
}

.auth__title {
    margin: 0 0 .25rem;
    font-size: 1.5rem;
    line-height: 1.25;
    font-weight: 700;
    font-family: var(--brand-type-font-family-heading, var(--_font));
    color: var(--brand-color-heading, var(--_text));
}
.auth__sub { margin: 0; color: var(--_muted); font-size: .95rem; }

.auth__form { display: flex; flex-direction: column; gap: 1rem; }

.auth__field { display: flex; flex-direction: column; gap: .4rem; }

.auth__label-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: .75rem;
}
.auth__label { font-size: .875rem; font-weight: 600; }
.auth__label-link { font-size: .825rem; text-decoration: none; color: var(--_accent); }
.auth__label-link:hover { text-decoration: underline; }

/* Icon sits inside the field; the input carries the padding so the caret never
   overlaps it and the whole control remains one hit target. */
.auth__control { position: relative; display: flex; align-items: center; }
.auth__control-icon {
    position: absolute;
    left: .8rem;
    width: 1.05rem;
    height: 1.05rem;
    color: var(--_muted);
    pointer-events: none;
}
.auth__input {
    width: 100%;
    padding: .7rem .85rem .7rem 2.5rem;
    border: 1px solid var(--_border);
    border-radius: var(--_input-radius);
    background: var(--_surface);
    color: var(--_text);
    font: inherit;
}
.auth__input--revealable { padding-right: 2.9rem; }
.auth__input:focus-visible {
    outline: none;
    border-color: var(--_accent);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--_accent) 22%, transparent);
}

.auth__reveal {
    position: absolute;
    right: .35rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.1rem;
    height: 2.1rem;
    padding: 0;
    border: none;
    border-radius: calc(var(--_input-radius) - 2px);
    background: transparent;
    color: var(--_muted);
    cursor: pointer;
}
.auth__reveal:hover { color: var(--_text); background: var(--_subtle); }
.auth__reveal svg { width: 1.1rem; height: 1.1rem; }

.auth__remember {
    display: flex;
    align-items: center;
    gap: .5rem;
    font-size: .9rem;
    cursor: pointer;
}
.auth__remember input { accent-color: var(--_accent); width: 1rem; height: 1rem; }

.auth__submit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    width: 100%;
    padding: .8rem 1rem;
    border: none;
    border-radius: var(--_btn-radius);
    background: var(--_accent);
    color: var(--_accent-contrast);
    font: inherit;
    font-weight: 600;
    font-size: 1rem;
    cursor: pointer;
}
.auth__submit:hover { background: color-mix(in srgb, var(--_accent) 88%, #000); }
.auth__submit svg { width: 1.05rem; height: 1.05rem; }

/* Hairline either side of a centred label, built from the rule itself so it
   stays aligned however wide the label's text is. */
.auth__divider {
    display: flex;
    align-items: center;
    gap: .75rem;
    margin: 1.4rem 0 1rem;
    color: var(--_muted);
    font-size: .825rem;
}
.auth__divider::before,
.auth__divider::after {
    content: "";
    flex: 1;
    height: 1px;
    background: var(--_border);
}

/* Lead-in above the providers when they are the FAST path rather than the fallback
   (checkout). On the account pages there is no heading and this never renders. */
.auth__lead { display: flex; flex-direction: column; gap: .2rem; margin-bottom: .9rem; }
.auth__lead-title { font-weight: 700; font-size: 1.05rem; }
.auth__lead .muted { font-size: .875rem; }

/* Checkout leads with the providers, so the divider that follows them needs less room
   above than the account pages' one needs below their form. */
.checkout-panel .auth__divider { margin: 1rem 0 .9rem; }

/* Capped at 400px because that is Google Identity Services' maximum button width — it
   renders its own fixed-width iframe, so a wider column leaves Google narrower than the
   buttons beside it. Constraining the column instead makes every provider the same width. */
.auth__providers {
    display: flex;
    flex-direction: column;
    gap: .6rem;
    /* width:100% is load-bearing — checkout's panel is a flex column, where the auto inline
       margins below would otherwise cancel the default stretch and collapse this to its
       content width (Google's 200px floor). */
    width: 100%;
    max-width: 400px;
    margin-inline: auto;
}

.auth__provider {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .6rem;
    width: 100%;
    padding: .7rem 1rem;
    border: 1px solid var(--_border);
    border-radius: var(--_btn-radius);
    background: var(--_surface);
    color: var(--_text);
    font: inherit;
    font-weight: 600;
    font-size: .95rem;
    cursor: pointer;
    text-decoration: none;
}
.auth__provider:hover { background: var(--_subtle); }
.auth__provider svg, .auth__provider img { width: 1.15rem; height: 1.15rem; flex: none; }

/* Apple require a solid black (or white) button and their own mark. */
.auth__provider--apple {
    background: #000;
    border-color: #000;
    color: #fff;
}
.auth__provider--apple:hover { background: #1a1a1a; }

.auth__foot {
    margin: 1.4rem 0 0;
    text-align: center;
    font-size: .9rem;
    color: var(--_muted);
}
.auth__foot a { color: var(--_accent); font-weight: 600; text-decoration: none; }
.auth__foot a:hover { text-decoration: underline; }

.auth__legal {
    margin: 1rem 0 0;
    text-align: center;
    font-size: .8rem;
    color: var(--_muted);
}
.auth__legal a { color: inherit; text-decoration: underline; }

.auth__notice { margin-bottom: 1rem; }

/* Google's own button (rendered by their script) has to sit in the same column
   as ours; their iframe is fixed-width so it is centred rather than stretched. */
.auth__gsi { display: flex; justify-content: center; }

@media (max-width: 24rem) {
    .auth { padding: 1rem .75rem 2rem; }
    .auth__card { padding: 1.5rem 1.25rem 1.25rem; }
}

@media (prefers-reduced-motion: no-preference) {
    .auth__card { animation: auth-rise .28s ease-out both; }
    @keyframes auth-rise {
        from { opacity: 0; transform: translateY(6px); }
        to { opacity: 1; transform: none; }
    }
}
