/* /Components/Layout/MainLayout.razor.rz.scp.css */
.site-shell[b-gfr5op5rfo] {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.site-main[b-gfr5op5rfo] {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
}
/* /Components/Pages/Home.razor.rz.scp.css */
/* Built-for-delivery section: full-width layout for the animated
   "Conducted Line" diagram (CodeFactory). The diagram spans the whole
   row under a centred intro, with the proof line and bullets/CTA below.
   Scoped to Home.razor; the diagram itself is self-contained in
   CodeFactory.razor. app.css is intentionally left untouched. */

.delivery[b-v1rzc637zw] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2.25rem;
}

.delivery-head[b-v1rzc637zw] {
    text-align: center;
    max-width: 760px;
}

.delivery-head .section-eyebrow[b-v1rzc637zw] {
    display: inline-block;
    margin-bottom: 1rem;
}

.delivery-title[b-v1rzc637zw] {
    font-size: clamp(1.875rem, 2.8vw, 2.5rem);
    font-weight: 900;
    color: var(--gapfy-ink);
    letter-spacing: -0.03em;
    line-height: 1.1;
    margin: 0 0 1.25rem;
}

.delivery-text[b-v1rzc637zw] {
    color: var(--gapfy-muted);
    font-size: var(--gapfy-text-lg);
    line-height: 1.55;
    margin: 0;
}

/* The stage mirrors the Stripe-style media frame from app.css (coloured
   halo behind, soft shadow, rounded clip) but at the diagram's wide
   aspect ratio, full width. */
.delivery-stage[b-v1rzc637zw] {
    position: relative;
    width: 100%;
    border-radius: var(--gapfy-radius-lg);
    background: var(--gapfy-bg-elevated);
    border: 1px solid var(--gapfy-line);
    box-shadow: 0 30px 60px rgba(9, 30, 66, 0.12);
    aspect-ratio: 1200 / 540;
    overflow: hidden;
    isolation: isolate;
}

.delivery-stage[b-v1rzc637zw]::before {
    content: "";
    position: absolute;
    inset: -20% -10%;
    z-index: -1;
    background:
        radial-gradient(38% 55% at 24% 38%, var(--gapfy-accent-sky) 0%, transparent 64%),
        radial-gradient(38% 55% at 78% 74%, var(--gapfy-accent-violet) 0%, transparent 64%);
    filter: blur(60px);
    opacity: 0.35;
    pointer-events: none;
}

.delivery-stage > svg[b-v1rzc637zw] {
    width: 100%;
    height: 100%;
    display: block;
}

.delivery-caption[b-v1rzc637zw] {
    margin: 0;
    text-align: center;
    color: var(--gapfy-muted);
    font-size: var(--gapfy-text-base);
}

.delivery-foot[b-v1rzc637zw] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1.75rem;
}

.delivery-list[b-v1rzc637zw] {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.75rem 2rem;
}

.delivery-list li[b-v1rzc637zw] {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    color: var(--gapfy-ink-soft);
    font-size: var(--gapfy-text-base);
}

.delivery-list .material-symbols-outlined[b-v1rzc637zw] {
    color: var(--gapfy-primary);
    font-size: 20px;
    flex-shrink: 0;
}

:root.theme-dark .delivery-stage[b-v1rzc637zw]::before {
    opacity: 0.30;
}

@media (prefers-color-scheme: dark) {
    :root:not(.theme-light):not(.theme-dark) .delivery-stage[b-v1rzc637zw]::before {
        opacity: 0.30;
    }
}

@media (max-width: 720px) {
    .delivery[b-v1rzc637zw] {
        gap: 1.75rem;
    }

    .delivery-list[b-v1rzc637zw] {
        flex-direction: column;
        align-items: flex-start;
        gap: 0.625rem;
    }
}
/* /Components/Shared/BrandName.razor.rz.scp.css */
/* "Gapfy <Product>" composite mark with the reveal / collapse flourish.

   Default state = the full mark. That is intentional: it is the first paint
   and the no-JS / reduced-motion fallback, so the registered mark is what
   renders when nothing else runs. brand-reveal.js adds .is-ready, sets
   --brand-full to the measured prefix width, then toggles
   [data-state="collapsed"]. */

.brand-mark[b-ytbdmbudpw] {
    display: inline-flex;
    align-items: baseline;
    white-space: nowrap;
}

.brand-mark__prefix[b-ytbdmbudpw] {
    display: inline-block;
    overflow: hidden;
    white-space: pre;
    max-width: var(--brand-full, 6em);
    opacity: 1;
}

.brand-mark__name[b-ytbdmbudpw] {
    display: inline-block;
}

/* Transitions only after JS hands over, so the first paint never animates
   from a guessed width before --brand-full has been measured. */
.brand-mark.is-ready .brand-mark__prefix[b-ytbdmbudpw] {
    transition: max-width var(--brand-dur, 900ms) var(--gapfy-ease-in-out),
                opacity calc(var(--brand-dur, 900ms) * 0.6) ease;
}

.brand-mark.is-ready .brand-mark__name[b-ytbdmbudpw] {
    transition: transform var(--brand-dur, 900ms) var(--gapfy-ease-in-out);
}

.brand-mark[data-state="collapsed"][b-ytbdmbudpw] {
    cursor: pointer;
}

/* "Gapfy" recedes right-to-left (overflow clips from the right edge) while
   the product name slides left into its place. The mask softens the wiping
   edge; it lives only on the collapsed state so the resting full mark stays
   crisp. */
.brand-mark[data-state="collapsed"] .brand-mark__prefix[b-ytbdmbudpw] {
    max-width: 0;
    opacity: 0;
    -webkit-mask-image: linear-gradient(to right, #000 78%, transparent 100%);
    mask-image: linear-gradient(to right, #000 78%, transparent 100%);
}

/* Hover teases the return: the name nudges right, opening a void where
   "Gapfy" would sit -- but it does not come back until the user clicks. */
.brand-mark[data-state="collapsed"]:hover .brand-mark__name[b-ytbdmbudpw] {
    transform: translateX(var(--brand-nudge, 0.28em));
}
