@import '_content/Microsoft.FluentUI.AspNetCore.Components/Microsoft.FluentUI.AspNetCore.Components.lcdo7z9xd2.bundle.scp.css';

/* /Components/Layout/BareBonesLayout.razor.rz.scp.css */
/* Spec 017 warm pass: this layout hosts brief transitional moments (post-login routing on
   MyAccount, auto-logout). The default empty FluentHeader renders as a bright accent slab —
   quiet everything to the warm cream so these screens read as part of one calm page flow. */

.barebones[b-sx8z76rug5]  .header { background: #FAF7F2; }
.barebones[b-sx8z76rug5]  .body-content { background: #FAF7F2; }
.barebones[b-sx8z76rug5]  .content { background: #FAF7F2; }
/* /Components/Layout/PersonalLayout.razor.rz.scp.css */
/* The header moved to the shared CommonHeader component (nav consistency, owner 2026-06-19); its
   styles live in CommonHeader.razor.css. Only the warm content-region paint stays scoped here. */

/* Paint the whole content region warm so no transparent container shows the white <body>
   beneath a short page (fixes the white strip above the footer). Scoped to this layout, so
   MainLayout's identical .content (admin) is untouched. */
.content[b-qj6sboq17z] {
    background: #FAF7F2;
}
/* /Components/Layout/StaticLayout.razor.rz.scp.css */
/* The marketing header moved to the shared CommonHeader component (nav consistency, owner
   2026-06-19); its styles now live in CommonHeader.razor.css. Only the <main> min-height stays. */

.mkt-main[b-jvhqedp9vp] {
    min-height: 60vh;
}
/* /Components/Layout/StaticPersonalLayout.razor.rz.scp.css */
/* The header moved to the shared CommonHeader component (nav consistency, owner 2026-06-19); its
   styles now live in CommonHeader.razor.css. Only the warm content-region paint stays scoped here. */

/* paint the content region warm so no gap ever shows the white body (mirrors PersonalLayout) */
.content[b-5x7mx0z84l] {
    background: #FAF7F2;
}
/* /Components/Pages/AccountHomeUser.razor.rz.scp.css */
/* Spec 017 — Personal UX redesign pilot: new-person Account home.
   Warm, calm, mobile-first. Scoped to this component. Returning-state layout
   (FluentGrid cards) is untouched and not styled here. */

.acct-new[b-etwvevz687] {
    background: #FAF7F2;
    margin: -24px;            /* bleed past the page content padding so the warm field fills */
    padding: 40px 24px 64px;
    min-height: calc(100vh - 120px);
}

.acct-new .hero[b-etwvevz687] {
    max-width: 660px;
    margin: 0 auto;
    color: #25324B;
}

.acct-new .greeting[b-etwvevz687] {
    font-size: 17px;
    color: #5A6478;
    margin: 0 0 4px;
}
.acct-new .greeting b[b-etwvevz687] { color: #25324B; font-weight: 600; }

.acct-new h1[b-etwvevz687] {
    font-size: 34px;
    font-weight: 600;
    letter-spacing: -0.01em;
    line-height: 1.2;
    margin: 6px 0 18px;
}

/* your part / our part */
.acct-new .parts[b-etwvevz687] { display: flex; gap: 16px; margin: 0 0 30px; }
.acct-new .part[b-etwvevz687] {
    flex: 1;
    background: #FFFFFF;
    border: 1px solid #ECE7DE;
    border-radius: 14px;
    padding: 18px 20px;
}
.acct-new .plabel[b-etwvevz687] {
    font-size: 13.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase;
    display: flex; align-items: center; gap: 8px; margin-bottom: 9px;
}
.acct-new .part.you .plabel[b-etwvevz687] { color: #2C4A7E; }
.acct-new .part.us .plabel[b-etwvevz687] { color: #B07A12; }
.acct-new .ptext[b-etwvevz687] { font-size: 18px; color: #25324B; line-height: 1.45; }
.acct-new .badge[b-etwvevz687] {
    width: 30px; height: 30px; border-radius: 9px;
    display: flex; align-items: center; justify-content: center; flex: 0 0 auto;
}
.acct-new .part.you .badge[b-etwvevz687] { background: #E7EDF6; color: #2C4A7E; }
.acct-new .part.us .badge[b-etwvevz687] { background: #FBF3E2; color: #B07A12; }
.acct-new .badge svg[b-etwvevz687] { width: 17px; height: 17px; }

/* steps */
.acct-new .steps-intro[b-etwvevz687] { font-size: 16px; color: #5A6478; margin: 0 0 12px; }
.acct-new .steps[b-etwvevz687] { display: flex; flex-direction: column; gap: 12px; margin: 0 0 30px; }
.acct-new .step[b-etwvevz687] { display: flex; align-items: center; gap: 12px; font-size: 18px; color: #25324B; }
.acct-new .step .num[b-etwvevz687] {
    flex: 0 0 auto; width: 28px; height: 28px; border-radius: 50%;
    background: #E7EDF6; color: #2C4A7E; font-size: 16px; font-weight: 600;
    display: flex; align-items: center; justify-content: center;
}
.acct-new .step .soft[b-etwvevz687] { color: #5A6478; }

/* primary CTA — a bespoke warm control on this welcome surface (semantic button: focusable,
   keyboard-activatable). Form-heavy screens still use FluentUI controls per the charter. */
.acct-new .cta[b-etwvevz687] {
    display: inline-flex; align-items: center; gap: 10px;
    background: #2C4A7E; color: #fff; border: none; cursor: pointer;
    font-size: 19.5px; font-weight: 600; font-family: inherit;
    padding: 15px 26px; border-radius: 10px;
    box-shadow: 0 1px 2px rgba(37,50,75,.18);
    transition: background .15s ease;
}
.acct-new .cta:hover[b-etwvevz687] { background: #213A66; }
.acct-new .cta:focus-visible[b-etwvevz687] { outline: 2px solid #2C4A7E; outline-offset: 2px; }
.acct-new .cta .chev[b-etwvevz687] { width: 18px; height: 18px; }

.acct-new .reassure[b-etwvevz687] { font-size: 16px; color: #5A6478; margin: 14px 0 0; }

.acct-new .footlink[b-etwvevz687] {
    margin-top: 40px; padding-top: 20px; border-top: 1px solid #ECE7DE;
    font-size: 16px; color: #5A6478;
}

/* breathing room above + below the bottom support link (owner 2026-06-24) */
.footlink[b-etwvevz687] { margin-top: 40px; margin-bottom: 32px; }

@media (max-width: 560px) {
    .acct-new .parts[b-etwvevz687] { flex-direction: column; }
    .acct-new h1[b-etwvevz687] { font-size: 29.5px; }
}

/* ============ returning Account home — progress-tracker cards (spec 017) ============ */
.acct-ret[b-etwvevz687] {
    background: #FAF7F2;
    margin: -24px;
    padding: 32px 24px 56px;
    min-height: calc(100vh - 120px);
}
.acct-ret .ret[b-etwvevz687] { max-width: 760px; margin: 0 auto; }

.ret-head[b-etwvevz687] { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.ret-title[b-etwvevz687] { font-size: 29.5px; font-weight: 600; letter-spacing: -0.01em; margin: 2px 0 0; color: #25324B; }
.btn-new[b-etwvevz687] {
    display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
    background: #fff; color: #2C4A7E; border: 1.5px solid #C9D4E6; cursor: pointer;
    font-size: 17px; font-weight: 600; font-family: inherit; padding: 10px 16px; border-radius: 9px;
    transition: border-color .15s;
}
.btn-new:hover[b-etwvevz687] { border-color: #2C4A7E; }
.btn-new svg[b-etwvevz687] { width: 18px; height: 18px; }

/* The call-time pill moved to the shared TimePill component (TimePill.razor.css). */

/* The interview card list itself (.ivw / .track / .status / …) now lives in the shared
   InterviewProgressList component's scoped CSS, so Account home and /Interviews stay identical. */

@media (max-width: 560px) {
    .ret-head[b-etwvevz687] { flex-direction: column; }
}

/* the quiet put-away reveal line (owner 2026-06-12): statement + flip link, conditional */
.putaway-line[b-etwvevz687] { margin-top: 12px; font-size: 15.5px; color: #5A6478; display: flex; gap: 6px; align-items: baseline; }
.puta-link[b-etwvevz687] { background: none; border: none; padding: 0; font: inherit; font-size: 15.5px;
             color: #2C4A7E; cursor: pointer; }
.puta-link:hover[b-etwvevz687] { text-decoration: underline; }

/* spec 022 — shared meta row: time pill left, invite affordance right; wraps on narrow screens */
.meta-row[b-etwvevz687] { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.invite-line[b-etwvevz687] { position: relative; margin-left: auto; font-size: 15.5px; color: #5A6478; display: flex; gap: 7px; align-items: center; }
.invite-line svg[b-etwvevz687] { width: 15px; height: 15px; color: #B07A12; flex: 0 0 auto; }
@media (max-width: 560px) {
    .invite-line[b-etwvevz687] { margin-left: 0; }
}

/* spec 022 — the invite popover: a little anchored panel under the link. The transparent
   fixed backdrop sits just beneath it so any click outside dismisses; clicks inside don't. */
.invite-pop[b-etwvevz687] {
    position: absolute; top: calc(100% + 8px); right: 0; z-index: 30;
    width: 520px; max-width: 92vw;
    border-radius: 14px;
    box-shadow: 0 10px 28px rgba(37, 50, 75, .18);
}
.invite-backdrop[b-etwvevz687] { position: fixed; inset: 0; z-index: 29; background: transparent; }
@media (max-width: 560px) {
    .invite-pop[b-etwvevz687] { right: auto; left: 0; }
}
/* /Components/Pages/ConnectInterview.razor.rz.scp.css */
/* Sticky header for ConnectInterview — mirrors NormalInterview's pattern but
   doesn't include a time-remaining indicator (the connection flow is too short
   to be worth tracking). */

.connect-page-header[b-iufmdgff49] {
    display: flex;
    align-items: center;
    gap: 1.5rem;
    padding: 0.75rem 1.25rem;
    border-bottom: 1px solid #e0e0e0;
    background: #fafafa;
    position: sticky;
    top: 0;
    z-index: 50;
}

.connect-page-header-volume[b-iufmdgff49] {
    flex: 1;
    min-width: 0;
}

/* "Call ending" full-page state — replaces the inline ProgressRing rendering
   that used to live where the carousel now is. */
.connect-page-ending[b-iufmdgff49] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 3rem;
    min-height: 40vh;
    gap: 1rem;
}

/* Sticky bottom bar with the Cancel button. Always available while the connect
   flow is in progress so the user can abort at any time. */
.connect-page-bottom-bar[b-iufmdgff49] {
    position: sticky;
    bottom: 0;
    background: #fafafa;
    border-top: 1px solid #e0e0e0;
    padding: 1rem;
    display: flex;
    justify-content: center;
    z-index: 40;
}

/* "Taking longer than expected" hint inside the active connect-step card.
   Refers the user to the existing Cancel button at the bottom of the page
   rather than offering a redundant escape-hatch button here. */
.connect-page-overdue-hint[b-iufmdgff49] {
    margin-top: 0.5rem;
    padding: 0.6rem 1rem;
    border-radius: 6px;
    background: #fff8e1;
    border: 1px solid #ffe082;
    color: #5d4400;
    font-size: 0.95rem;
    max-width: 28rem;
    text-align: center;
}
/* /Components/Pages/Home.razor.rz.scp.css */
/* Scoped styles for the redesigned marketing home page. Mobile-first; widens at ≥760px.
   Colors/fonts come from the design tokens in app.css (:root). "Warmer, tempered" palette:
   warm gradient bookends (hero + final CTA), parchment + white section rhythm, gold accents. */

/* ---------- shared primitives ---------- */

.section-inner[b-ddkv2dagp6] {
    max-width: var(--dti-maxw);
    margin: 0 auto;
    padding: 72px 24px;
}

.section-inner.narrow[b-ddkv2dagp6] {
    max-width: 720px;
}

.center[b-ddkv2dagp6] {
    text-align: center;
}

.section-head[b-ddkv2dagp6] {
    max-width: 620px;
    margin: 0 auto 44px;
}

.section-title[b-ddkv2dagp6] {
    font-size: 2rem;
    line-height: 1.2;
    margin: 0 0 12px;
}

.section-lead[b-ddkv2dagp6] {
    font-size: 1.1rem;
    color: var(--dti-muted);
    line-height: 1.6;
    margin: 0;
}

.section-lead.center-lead[b-ddkv2dagp6] {
    margin-left: auto;
    margin-right: auto;
}

/* ---------- buttons ---------- */

.btn[b-ddkv2dagp6] {
    display: inline-block;
    padding: 13px 26px;
    border-radius: 999px;
    text-decoration: none;
    font-weight: 500;
    font-size: 1rem;
    border: 1px solid transparent;
    cursor: pointer;
    transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;
}

.btn:hover[b-ddkv2dagp6] {
    transform: translateY(-1px);
    box-shadow: 0 8px 20px rgba(43, 58, 91, 0.16);
}

.btn-primary[b-ddkv2dagp6] {
    background: var(--dti-blue);
    color: #fff;
}

.btn-primary:hover[b-ddkv2dagp6] {
    background: var(--dti-blue-hover);
}

.btn-ghost[b-ddkv2dagp6] {
    background: transparent;
    color: #fff;
    border-color: rgba(255, 255, 255, 0.6);
}

.btn-ghost:hover[b-ddkv2dagp6] {
    background: rgba(255, 255, 255, 0.14);
}

.btn-large[b-ddkv2dagp6] {
    padding: 16px 34px;
    font-size: 1.05rem;
}

/* On the dark gradient bands (hero + final CTA), the primary button flips to a
   high-contrast white pill so it pops against the blue/gold. */
.hero .btn-primary[b-ddkv2dagp6],
.final-cta .btn-primary[b-ddkv2dagp6] {
    background: #fff;
    color: var(--dti-ink);
}

.hero .btn-primary:hover[b-ddkv2dagp6],
.final-cta .btn-primary:hover[b-ddkv2dagp6] {
    background: var(--dti-tint-blue);
}

.cta-row[b-ddkv2dagp6] {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
}

.cta-row.center[b-ddkv2dagp6] {
    justify-content: center;
}

.cta-subnote[b-ddkv2dagp6] {
    width: 100%;
    margin: 14px 0 0;
    font-size: 0.95rem;
    color: var(--dti-muted);
}

.cta-subnote a[b-ddkv2dagp6] {
    color: inherit;
    font-weight: 500;
    text-decoration: underline;
}

/* ---------- hero ---------- */

.hero[b-ddkv2dagp6] {
    background: var(--dti-grad-warm);
    color: #fff;
    padding: 32px 0 36px;
    text-align: center;
    /* Same fixed hero height as every occasion page (OccasionPage's .occ-hero — keep in
       sync): centered content in one calm band instead of height bouncing page to page. */
    min-height: 380px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden; /* the photo layer is scaled slightly past the edges */
}

/* Photo pass 2 (owner 2026-07-05): the grandmother mid-call as the home hero. Near-sharp like
   the occasion heroes, saturation nudged up so the golden light and leaves keep their warmth. */
.hero-photo[b-ddkv2dagp6] {
    position: absolute;
    inset: 0;
    z-index: 0;
    background-image: url('images/home-hero.jpg');
    background-size: cover;
    background-position: center 30%;
    filter: blur(0.5px) saturate(1.08);
    transform: scale(1.01); /* hide blur edge fringing */
}

/* Directional scrim — full strength under the left-seated copy, falling away so her side of
   the frame glows through (the flat scrim muted the photo's warmth; owner 2026-07-05). */
.hero-tone[b-ddkv2dagp6] {
    position: absolute;
    inset: 0;
    z-index: 1;
    background: linear-gradient(90deg,
        rgba(43, 58, 91, 0.62) 0%, rgba(43, 58, 91, 0.44) 38%,
        rgba(43, 58, 91, 0.16) 66%, rgba(43, 58, 91, 0.05) 100%);
}

/* Copy hugged hard left — she sits right-of-center, the open trees carry the words. No nav
   chevrons on the home hero, so this goes tighter than the occasion pages' .tight (72px). */
.hero-inner[b-ddkv2dagp6] {
    max-width: 560px;
    margin-left: max(32px, 3vw);
    margin-right: auto;
    padding: 0 24px;
    position: relative;
    z-index: 2;
    text-align: left;
}

.hero .cta-row[b-ddkv2dagp6] {
    justify-content: flex-start;
}

/* Below the side-anchor breakpoint (same 760px as the occasion pages) recenter the copy —
   and since centered copy would land on her face at the centered crop, slide the crop so she
   stands right of the words again, and flatten the fade to an even scrim (the gradient's clear
   end would leave the recentered copy's right words unprotected). */
@media (max-width: 760px) {
    .hero-photo[b-ddkv2dagp6] {
        background-position: 24% 30%;
    }

    .hero-tone[b-ddkv2dagp6] {
        background: rgba(43, 58, 91, 0.5);
    }

    .hero-inner[b-ddkv2dagp6] {
        margin: 0 auto;
        text-align: center;
    }

    .hero .cta-row[b-ddkv2dagp6] {
        justify-content: center;
    }

    /* .hero-scoped so this wins over the base .hero-sub rule that appears LATER in the file
       (equal specificity would lose on order). */
    .hero .hero-sub[b-ddkv2dagp6] {
        margin-left: auto;
        margin-right: auto;
    }
}

.eyebrow[b-ddkv2dagp6] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 0.85rem;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.85);
    margin: 0 0 12px;
}

.eyebrow-dot[b-ddkv2dagp6] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--dti-gold-soft);
}

.hero-headline[b-ddkv2dagp6] {
    font-size: 2.6rem;
    line-height: 1.1;
    color: #fff;
    margin: 0 0 16px;
}

.hero-sub[b-ddkv2dagp6] {
    font-size: 1.2rem;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.93);
    max-width: 660px;
    margin: 0 0 24px; /* left-anchored with the copy block (recentered under 760px below) */
}

.hero-trust[b-ddkv2dagp6] {
    margin: 16px 0 0;
    font-size: 0.9rem;
    color: rgba(255, 255, 255, 0.8);
}

@media (min-width: 760px) {
    .hero-headline[b-ddkv2dagp6] {
        font-size: 3.4rem;
    }
    .hero-sub[b-ddkv2dagp6] {
        font-size: 1.32rem;
    }
}

/* ---------- the teaching strip (photo pass 2, owner 2026-07-05) ----------
   Three tiles that teach the shape of the thing at a glance; each tile cycles through its few
   photos — slow slide-and-settle driven by js/dti-cycle.js, dots showing where you are, hover
   holds, reduced-motion keeps the server-rendered first frame. */

.teach[b-ddkv2dagp6] {
    background: #fff; /* white band so the parchment occasions section below keeps its edge */
}

.teach-grid[b-ddkv2dagp6] {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 22px;
}

@media (max-width: 860px) {
    .teach-grid[b-ddkv2dagp6] {
        grid-template-columns: 1fr;
        max-width: 480px;
        margin: 0 auto;
    }
}

.teach-card[b-ddkv2dagp6] {
    background: #fff;
    border: 1px solid var(--dti-line);
    border-radius: var(--dti-radius-lg);
    overflow: hidden;
}

.teach-cycle[b-ddkv2dagp6] {
    position: relative;
    aspect-ratio: 16 / 11;
    overflow: hidden;
}

.teach-cycle img[b-ddkv2dagp6] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0;
    transform: translateX(26px);
    transition: opacity 1.1s ease, transform 1.1s ease;
}

.teach-cycle img.on[b-ddkv2dagp6] {
    opacity: 1;
    transform: translateX(0);
}

.teach-cycle img.leaving[b-ddkv2dagp6] {
    opacity: 0;
    transform: translateX(-18px);
}

.teach-dots[b-ddkv2dagp6] {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 9px;
    display: flex;
    gap: 6px;
    justify-content: center;
    z-index: 2;
}

.teach-dots i[b-ddkv2dagp6] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.55);
    box-shadow: 0 0 4px rgba(43, 58, 91, 0.4);
}

.teach-dots i.on[b-ddkv2dagp6] {
    background: #fff;
}

@media (prefers-reduced-motion: reduce) {
    .teach-cycle img[b-ddkv2dagp6] {
        transition: none;
        transform: none;
    }
}

.teach-body[b-ddkv2dagp6] {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    padding: 16px 18px 18px;
}

.teach-step[b-ddkv2dagp6] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--dti-blue);
    color: #fff;
    font-size: 0.85rem;
    font-weight: 600;
    flex: 0 0 auto;
}

.teach-body h3[b-ddkv2dagp6] {
    font-size: 1.12rem;
    margin: 1px 0 5px;
}

.teach-body p[b-ddkv2dagp6] {
    margin: 0;
    font-size: 0.92rem;
    color: var(--dti-muted);
    line-height: 1.5;
}

/* ---------- occasions (teasers → entry pages) ---------- */

.occasions[b-ddkv2dagp6] {
    background: var(--dti-parchment);
}

/* Title-only section head (no lead paragraph) — pull it closer to the keepsakes bar above. */
.occasions .section-inner[b-ddkv2dagp6] {
    padding-top: 40px;
}

/* Flex (not grid) so an odd count centers its last row instead of leaving an orphan. */
.occasion-grid[b-ddkv2dagp6] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 14px;
}

.occasion-card[b-ddkv2dagp6] {
    position: relative;
    flex: 1 1 300px;
    max-width: 380px;
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 0.5px solid var(--dti-line);
    border-radius: var(--dti-radius);
    padding: 20px 20px 22px;
    text-decoration: none;
    color: inherit;
    transition: transform 130ms ease, box-shadow 130ms ease, border-color 130ms ease;
}

.occasion-card:hover[b-ddkv2dagp6] {
    transform: translateY(-3px);
    box-shadow: 0 12px 26px rgba(43, 58, 91, 0.12);
    border-color: rgba(43, 58, 91, 0.2);
}

.occasion-icon[b-ddkv2dagp6] {
    display: inline-flex;
    width: 46px;
    height: 46px;
    border-radius: 12px;
    align-items: center;
    justify-content: center;
    margin-bottom: 14px;
}

.occasion-card.warm .occasion-icon[b-ddkv2dagp6] {
    background: var(--dti-tint-gold);
    color: #b07d3c;
}

.occasion-card.calm .occasion-icon[b-ddkv2dagp6] {
    background: var(--dti-tint-blue);
    color: var(--dti-blue);
}

.occasion-icon svg[b-ddkv2dagp6] {
    width: 23px;
    height: 23px;
}

.occasion-name[b-ddkv2dagp6] {
    font-family: var(--dti-font-head);
    font-weight: 600;
    font-size: 1.15rem;
    color: var(--dti-ink);
    margin-bottom: 5px;
}

.occasion-line[b-ddkv2dagp6] {
    font-size: 0.95rem;
    line-height: 1.5;
    color: var(--dti-muted);
}

.occasion-go[b-ddkv2dagp6] {
    position: absolute;
    top: 20px;
    right: 18px;
    font-size: 1.1rem;
    color: var(--dti-blue);
    opacity: 0;
    transform: translateX(-4px);
    transition: opacity 130ms ease, transform 130ms ease;
}

.occasion-card:hover .occasion-go[b-ddkv2dagp6] {
    opacity: 1;
    transform: translateX(0);
}

/* ---------- how it works: shared HowItWorksSection component (own scoped CSS) ---------- */

/* ---------- what you get ---------- */

.what[b-ddkv2dagp6] {
    background: var(--dti-parchment);
}

.stories-showcase[b-ddkv2dagp6] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
    max-width: 960px;
    margin: 0 auto;
}

.story-clip[b-ddkv2dagp6] {
    margin: 0;
    background: #fff;
    border: 0.5px solid var(--dti-line);
    border-radius: var(--dti-radius-lg);
    overflow: hidden;
    box-shadow: 0 16px 36px rgba(43, 58, 91, 0.14);
}

.story-video[b-ddkv2dagp6] {
    display: block;
    width: 100%;
    aspect-ratio: 16 / 9;
    background: var(--dti-ink);
    object-fit: cover;
}

.story-caption[b-ddkv2dagp6] {
    padding: 14px 18px;
    font-family: var(--dti-font-head);
    font-style: italic;
    font-size: 1.08rem;
    color: var(--dti-ink);
    text-align: center;
}

/* stack the two clips on phones/small tablets (760px is the page's primary breakpoint) */
@media (max-width: 760px) {
    .stories-showcase[b-ddkv2dagp6] {
        grid-template-columns: 1fr;
        max-width: 520px;
        gap: 20px;
    }
}

/* ---------- grace moment (you haven't waited too late) ---------- */

.grace[b-ddkv2dagp6] {
    background: #fff;
}

.grace-card[b-ddkv2dagp6] {
    background: var(--dti-parchment);
    border: 0.5px solid var(--dti-line);
    border-radius: var(--dti-radius-lg);
    padding: 44px 36px;
    text-align: center;
}

.grace-icon[b-ddkv2dagp6] {
    display: inline-flex;
    width: 54px;
    height: 54px;
    border-radius: 50%;
    background: var(--dti-tint-gold);
    color: #b07d3c;
    align-items: center;
    justify-content: center;
    margin-bottom: 18px;
}

.grace-icon svg[b-ddkv2dagp6] {
    width: 26px;
    height: 26px;
}

.grace-title[b-ddkv2dagp6] {
    font-size: 1.55rem;
    font-style: italic;
    color: var(--dti-ink);
    margin: 0 0 14px;
}

.grace-copy[b-ddkv2dagp6] {
    font-size: 1.08rem;
    line-height: 1.7;
    color: var(--dti-ink);
    margin: 0;
}

/* ---------- final CTA ---------- */

.final-cta[b-ddkv2dagp6] {
    background: var(--dti-grad-warm);
    color: #fff;
    text-align: center;
}

.final-cta h2[b-ddkv2dagp6] {
    font-size: 2rem;
    line-height: 1.25;
    color: #fff;
    margin: 0 0 14px;
}

.final-cta p[b-ddkv2dagp6] {
    font-size: 1.1rem;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.92);
    margin: 0 0 28px;
}

.final-cta .cta-subnote[b-ddkv2dagp6] {
    color: rgba(255, 255, 255, 0.85);
}

@media (min-width: 760px) {
    .final-cta h2[b-ddkv2dagp6] {
        font-size: 2.4rem;
    }
}
/* /Components/Pages/Interviews/Index.razor.rz.scp.css */
/* Spec 017 — My Interviews list, warm shell to match Account home. The card list itself is the
   shared InterviewProgressList component (its own scoped CSS). */

.myiv[b-17byf7wbwk] {
    background: #FAF7F2;
    margin: -24px;
    padding: 32px 24px 56px;
    min-height: calc(100vh - 120px);
}

.myiv-head[b-17byf7wbwk] {
    max-width: 760px; margin: 0 auto 18px;
    display: flex; align-items: flex-start; justify-content: space-between; gap: 16px;
}
.myiv-title[b-17byf7wbwk] { font-size: 29.5px; font-weight: 600; letter-spacing: -0.01em; margin: 0; color: #25324B; }
.myiv-sub[b-17byf7wbwk] { font-size: 16px; color: #5A6478; margin: 6px 0 0; max-width: 520px; }

.btn-new[b-17byf7wbwk] {
    display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
    background: #fff; color: #2C4A7E; border: 1.5px solid #C9D4E6; cursor: pointer;
    font-size: 17px; font-weight: 600; font-family: inherit; padding: 10px 16px; border-radius: 9px;
    transition: border-color .15s;
}
.btn-new:hover[b-17byf7wbwk] { border-color: #2C4A7E; }
.btn-new svg[b-17byf7wbwk] { width: 18px; height: 18px; }

/* InterviewProgressList renders centered to the same 760px column */
.myiv[b-17byf7wbwk]  .ivw-list { max-width: 760px; margin: 0 auto; }

.myiv-empty[b-17byf7wbwk] {
    max-width: 760px; margin: 0 auto;
    background: #fff; border: 1px solid #ECE7DE; border-radius: 14px;
    padding: 36px 24px; text-align: center;
}
.myiv-empty-title[b-17byf7wbwk] { font-size: 20.5px; font-weight: 600; color: #25324B; }
.myiv-empty-sub[b-17byf7wbwk] { font-size: 16px; color: #5A6478; margin: 6px 0 18px; }
.myiv-empty .btn-new[b-17byf7wbwk] { display: inline-flex; }

.myiv-inactive[b-17byf7wbwk] {
    max-width: 760px; margin: 20px auto 0;
    display: flex; align-items: center; gap: 8px;
    font-size: 15.5px; color: #5A6478;
}
/* /Components/Pages/Interviews/StoryCutBoard.razor.rz.scp.css */
/* Spec 028 — the chapter lists + answer rows (moved verbatim from StoryMovie.razor.css in the
   compile-unit split; scoped CSS follows its markup). */

.sm-group[b-8v0960m9d5] { border: 1px solid #ECE7DE; border-radius: 12px; margin: 0 0 16px; overflow: hidden; background: #fff; }
.sm-q[b-8v0960m9d5] { background: #25324B; color: #F5EFE7; padding: 13px 16px; font-weight: 500; font-size: 17.5px;
        display: flex; align-items: center; gap: 10px; }
/* the chapter's number (owner 2026-07-08): a quiet badge — re-numbers live as chapters drag */
.sm-q-num[b-8v0960m9d5] { flex: none; width: 24px; height: 24px; border-radius: 50%; background: rgba(245,239,231,.16);
            color: #F5EFE7; font-size: 13.5px; font-weight: 600;
            display: inline-flex; align-items: center; justify-content: center; }
.sm-q-text[b-8v0960m9d5] { flex: 1; }
/* touch-action none: the grip is a drag handle, never a scroll surface (the dti-sortable lesson) */
.sm-grip[b-8v0960m9d5] { opacity: .45; cursor: grab; letter-spacing: 2px; touch-action: none; }
.sm-grip:active[b-8v0960m9d5] { cursor: grabbing; }
.sm-q-voice[b-8v0960m9d5] { opacity: .7; font-weight: 400; font-size: .92em; }
/* full-bleed rows (owner 2026-07-08): the slabs run edge-to-edge under the chapter header —
   no white gutter beside them; a thin white seam separates stacked slabs */
.sm-answers[b-8v0960m9d5] { padding: 0; }
.sm-answers > * + *[b-8v0960m9d5] { border-top: 3px solid #fff; }

/* answer ROW UNIT (owner 2026-07-08): grip/dot = a full-height left column, vertically centered
   against the text line + filmstrip together; dividers sit BETWEEN units (on the drag wrapper),
   never inside one. The text line NEVER wraps — the question/name ellipsizes instead, so duration
   and ✕ hold their corner at any width. */
.sm-rowunit[b-8v0960m9d5] { display: flex; align-items: center; gap: clamp(6px, 1.5%, 12px); }
.sm-rowbody[b-8v0960m9d5] { flex: 1 1 auto; min-width: 0; }
.sm-ans[b-8v0960m9d5] { display: flex; align-items: center; gap: clamp(5px, 1.5%, 10px); }
.sm-name[b-8v0960m9d5] { font-weight: 600; color: #25324B; font-size: 16.5px; flex: 0 1 auto; min-width: 0;
           white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* the action cluster (✕): one unbreakable unit, always inline right */
.sm-ans-controls[b-8v0960m9d5] { display: inline-flex; align-items: center; gap: 10px; flex: none; }
/* single-voice collapse: the rows ARE the chapters, so they wear the numbers (owner 2026-07-08) —
   the header badge's quiet parchment twin */
.sm-row-num[b-8v0960m9d5] { flex: none; width: 24px; height: 24px; border-radius: 50%; background: #EDE4D2;
              color: #6b625a; font-size: 13.5px; font-weight: 600;
              display: inline-flex; align-items: center; justify-content: center; }

/* chapters cut: the row carries the question — it WRAPS in its own column (owner 2026-07-08,
   revised from ellipsis: never hide the words); duration and ✕ sit beside it, vertically
   centered against however many lines it takes */
.sm-ansq[b-8v0960m9d5] { flex: 1 1 0; min-width: 0; color: #25324B; font-size: 16.5px; line-height: 1.35; }
.sm-tag[b-8v0960m9d5] { color: #5A6478; font-size: 15px; flex: 0 1 auto; min-width: 0;
          white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sm-rowunit.self .sm-name[b-8v0960m9d5], .sm-rowunit.self .sm-tag[b-8v0960m9d5] { color: #B07A12; }
.sm-rowunit.self .sm-tag[b-8v0960m9d5] { font-weight: 600; }
@media (max-width: 560px) {
    /* the tag is desktop warmth; the ellipsized name/question carries the phone row */
    .sm-tag[b-8v0960m9d5] { display: none; }
    /* the voice-chapter header's relationship (NOT the tails' speaker name, which stays) */
    .sm-q-rel[b-8v0960m9d5] { display: none; }
    .sm-strip-th img[b-8v0960m9d5] { width: 52px; height: 52px; }
}
.sm-len[b-8v0960m9d5] { margin-left: auto; color: #5A6478; font-size: 14.5px; flex: none; }

/* the ✕ (the 📷 pin button left the rows 2026-07-08 — the filmstrip carries the photo story) */
.sm-drop[b-8v0960m9d5] { border: 0; background: none; color: #B7A995; cursor: pointer; font-size: 1.05rem;
           padding: 6px 8px; margin-left: clamp(0px, 1.5%, 10px); }
.sm-drop:hover[b-8v0960m9d5] { color: #8a4f3d; }

/* the FILMSTRIP (owner 2026-07-08, movie-at-a-glance one level up): what will actually play under
   this answer. One whole-strip button — a calm doorway into the matching room at this answer.
   Lives inside .sm-rowbody, so it aligns under the text and the grip centers against both. */
.sm-strip[b-8v0960m9d5] { display: flex; align-items: center; gap: 6px; margin: 8px 0 2px; padding: 0;
            border: 0; background: none; cursor: pointer; flex-wrap: wrap; row-gap: 6px; }
.sm-strip-th[b-8v0960m9d5] { position: relative; flex: none; }
.sm-strip-th img[b-8v0960m9d5] { display: block; width: 64px; height: 64px; object-fit: cover; border-radius: 8px;
                   border: 1px solid #ECE7DE; }
.sm-strip:hover .sm-strip-th img[b-8v0960m9d5] { border-color: #C9D4E6; }
/* 📌 corner = placed on purpose (holds through reorders); bare = the spread's deal for this order.
   Big enough to READ as a pushpin (owner 2026-07-08), on a white chip so it pops off any photo */
.sm-strip-th.pinned[b-8v0960m9d5]::after { content: "📌"; position: absolute; top: -9px; right: -9px;
                             font-size: 16px; line-height: 1; background: rgba(255,255,255,.95);
                             border-radius: 999px; padding: 3px;
                             box-shadow: 0 1px 3px rgba(37,50,75,.3); }
.sm-strip-more[b-8v0960m9d5] { font-size: 13px; color: #6a5424; background: #F5EDDC; border-radius: 999px;
                 padding: 3px 10px; flex: none; }

/* each row is a soft contained SLAB (owner 2026-07-08: "rows should feel like units", then
   "many vertical lines are disorienting") — fill only, NO border: by this depth the row sits
   inside the rail + stop card + chapter card, and a fourth outline just adds parallel lines.
   The fill carries the unit; the width nearly reaches the chapter's edge so the two edges don't
   read as separate verticals. */
.sm-answers > .sm-ans-dragwrap[b-8v0960m9d5],
.sm-answers > .sm-rowunit[b-8v0960m9d5] {
    background: #F6F1E9;
    padding: 12px 16px; margin: 0;
}
.sm-answers > .sm-ans-dragwrap > .sm-rowunit[b-8v0960m9d5] { background: none; padding: 0; margin: 0; }

/* row reorder (owner 2026-07-07: drag-only, chevrons ditched): the grip replaces the dot and
   keeps its silent self-accent — gold = the subject's own voice. SortableJS since 2026-07-08:
   hold-to-drag works on Android AND iOS now (HTML5 drag left Android out). */
.sm-ans-grip[b-8v0960m9d5] { cursor: grab; letter-spacing: 2px; color: #C3B39C; flex: none; touch-action: none; }
.sm-ans-grip:active[b-8v0960m9d5] { cursor: grabbing; }
.sm-rowunit.self .sm-ans-grip[b-8v0960m9d5] { color: #B07A12; }

/* SortableJS drag states (names wired in dti-cutboard-sortable.js). The fallback clone is parked
   on <body> but keeps this file's scope attribute, so these scoped rules still reach it. */
.sm-drag-ghost[b-8v0960m9d5] { opacity: .35; }
.sm-drag-chosen[b-8v0960m9d5] { cursor: grabbing; }
.sm-drag-fallback[b-8v0960m9d5] { box-shadow: 0 10px 26px rgba(37,50,75,.20); opacity: .97; cursor: grabbing; }

.sm-reset[b-8v0960m9d5] { color: #5A6478; font-size: 15px; }
.sm-reset a[b-8v0960m9d5] { color: #2C4A7E; text-decoration: underline dotted; cursor: pointer; }
/* /Components/Pages/Interviews/StoryMovie.razor.rz.scp.css */
/* Spec 028 — the story storyboard. Warm-card language from the account home (.ivw family) +
   the spec-017 hub tokens; the include pill (.iv-q-keep) comes from app.css unchanged.
   Compile-unit split: the chapter lists, pin picker, and render panel each carry their own
   scoped CSS (StoryCutBoard/StoryPinPicker/StoryRenderPanel .razor.css) — this file keeps only
   what the page itself renders (header, route/stops, voices, cut switcher, nudge). */

.sm-wrap[b-xab3uxu7t9] { max-width: 720px; margin: 0 auto; padding: 4px 16px 64px; }

/* the standard story header: pill + "A story about <subject>…" on one line (owner 2026-07-03) */
.sm-shead[b-xab3uxu7t9] { display: flex; align-items: center; gap: 12px; margin: 6px 0 22px; }
.sm-title[b-xab3uxu7t9] { font-size: 1.6rem; font-weight: 600; color: #25324B; margin: 0; }
.sm-soft[b-xab3uxu7t9] { font-weight: 400; color: #5A6478; }

/* ---- the route (owner 2026-07-03): the storyboard is the last stretch of the home card's road,
   in the story card's EXACT language — each stop is a CARD, and the line curves in to dock at the
   card's left edge (station on the edge), then curves back out down to the next card. Docked at a
   fixed y near the card's top (≈ where a home row's mid-height lands) since these cards are tall. ---- */
.sm-route[b-xab3uxu7t9] { position: relative; }
.sm-stop[b-xab3uxu7t9] { position: relative; padding-left: 46px; margin-bottom: 14px; }
.sm-stop:last-child[b-xab3uxu7t9] { margin-bottom: 0; }
/* each stop's body wears the STORY CARD's clothes (owner 2026-07-03: match the landing page —
   the home-row parchment fill disappeared against this page's background); gold terminus keeps
   the doorway's warm face. */
.sm-stop-body[b-xab3uxu7t9] { background: #fff; border: 1px solid #ECE7DE; border-radius: 12px; padding: 14px 18px;
                transition: border-color .15s; }
.sm-stop-body:hover[b-xab3uxu7t9] { border-color: #d8d0c2; }
.sm-stop-gold .sm-stop-body[b-xab3uxu7t9] { background: #FBF3E2; border-color: #E3CF9E; }
/* the IN curve: from the rail's x, right, docking at the card edge */
.sm-stop[b-xab3uxu7t9]::before { content: ''; position: absolute; left: 13px; top: -9px; height: 35px; width: 33px;
                   border-left: 2px solid #DDD6C8; border-bottom: 2px solid #DDD6C8;
                   border-bottom-left-radius: 16px; }
/* the first curve reaches up through the header gap so the road hangs from the occasion pill */
.sm-stop:first-child[b-xab3uxu7t9]::before { top: -26px; height: 52px; }
/* the OUT curve (the terminus has none — the road ends there) */
.sm-stop:not(:last-child)[b-xab3uxu7t9]::after { content: ''; position: absolute; left: 13px; top: 26px; bottom: -9px;
                   width: 33px; border-left: 2px solid #DDD6C8; border-top: 2px solid #DDD6C8;
                   border-top-left-radius: 16px; }
/* the station rides the card's edge, centered on the dock point (46px, 26px) where both road curves
   meet — exactly like the story card. Bigger circle + numeral/▶ (owner 2026-07-08): left/top are
   DERIVED as dock − radius (46−14=32, 26−14=12) so the center stays put and the road still docks. */
.sm-station[b-xab3uxu7t9] { position: absolute; left: 32px; top: 12px; width: 28px; height: 28px; border-radius: 50%;
              background: #fff; border: 2px solid #DDD6C8; color: #5A6478; font-size: 15px;
              font-weight: 600; display: flex; align-items: center; justify-content: center; z-index: 1; }
.sm-station svg[b-xab3uxu7t9] { width: 14px; height: 14px; }
.sm-stop-title[b-xab3uxu7t9] { font-weight: 600; font-size: 20px; color: #25324B; margin: 0 0 16px; }
.sm-stop-gold .sm-station[b-xab3uxu7t9] { background: #B07A12; border-color: #B07A12; color: #fff; }
/* the album count: a whisper directly under the stop title, with air before the doorway links */
.sm-photos-count[b-xab3uxu7t9] { color: #9aa2b1; font-size: 14.5px; margin: -13px 0 14px; }
/* the occasion pill leads with its icon, exactly like the story card (owner 2026-07-03) */
.sm-occ[b-xab3uxu7t9] {
    display: inline-flex; align-items: center; gap: 7px;
    background: #E8EEF7; border: 1px solid #DBE4F1; color: #2C4A7E;
    font-size: 14px; font-weight: 500; padding: 6px 12px; border-radius: 999px; white-space: nowrap;
}
.sm-occ[b-xab3uxu7t9]  svg { display: block; flex: 0 0 auto; width: 16px; height: 16px; }
/* the album's quiet doorways — a bulleted pair with air above and between (owner 2026-07-08) */
.sm-photos-links[b-xab3uxu7t9] { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
.sm-photos-link[b-xab3uxu7t9] { color: #2C4A7E; font-size: 16px; text-decoration: none; width: fit-content; }
.sm-photos-link[b-xab3uxu7t9]::before { content: "•"; color: #b9a58d; margin-right: 9px; }
.sm-photos-link:hover[b-xab3uxu7t9] { text-decoration: underline; }

/* ---- THE cut switcher (owner 2026-07-03: the one clear place to change how the film threads) ---- */
.sm-cutswitch[b-xab3uxu7t9] { display: flex; gap: 0; margin: 0 0 14px; border: 1.5px solid #C9D4E6; border-radius: 12px;
                overflow: hidden; background: #fff; }
.sm-cut[b-xab3uxu7t9] { flex: 1 1 0; padding: 12px 10px; font-size: 16.5px; font-weight: 600; font-family: inherit;
          background: #fff; color: #5A6478; border: 0; cursor: pointer; transition: background .15s, color .15s;
          display: inline-flex; align-items: center; justify-content: center; gap: 9px; }
.sm-cut svg[b-xab3uxu7t9] { width: 17px; height: 17px; flex: 0 0 auto; }
/* the quiet line under the switcher: says what picking does without shouting */
.sm-cuthint[b-xab3uxu7t9] { margin: -8px 0 24px; text-align: center; color: #8a93a5; font-size: 14.5px; }
.sm-cut + .sm-cut[b-xab3uxu7t9] { border-left: 1.5px solid #C9D4E6; }
.sm-cut:hover[b-xab3uxu7t9] { color: #2C4A7E; }
.sm-cut.active[b-xab3uxu7t9] { background: #2C4A7E; color: #fff; }
.sm-voices[b-xab3uxu7t9] { display: flex; gap: 10px; flex-wrap: wrap; margin: 0 0 26px; }
.sm-voice[b-xab3uxu7t9] { margin-left: 0; padding: 9px 15px; font-size: 16px; }
.sm-voice-name[b-xab3uxu7t9] { font-weight: 700; }
.sm-voice-rel[b-xab3uxu7t9] { font-weight: 400; opacity: .85; }
/* an unfinalized voice: present but not checkable — the tooltip carries the nudge */
.sm-voice-locked[b-xab3uxu7t9] { opacity: .55; cursor: default; }

.sm-nudge[b-xab3uxu7t9] {
    border-left: 4px solid #B07A12; background: #FBF3E2; border-radius: 8px;
    padding: 10px 16px; color: #6a5424; display: flex; align-items: center; gap: 12px;
    margin-bottom: 26px; font-size: 15.5px;
}
.sm-nudge button[b-xab3uxu7t9] { margin-left: auto; }

/* StoryPinPicker's foot "Done" carries its own copy of this — keep the two in step */
.sm-btn-quiet[b-xab3uxu7t9] {
    background: #fff; border: 1px solid #ECE7DE; border-radius: 10px;
    padding: 8px 16px; cursor: pointer; color: #25324B;
}
/* /Components/Pages/Interviews/StoryPhotos.razor.rz.scp.css */
/* Spec 028 increment 5 — the story album page. Same calm column the storyboard uses.
   This screen does ONE thing (owner 2026-07-08): upload and delete. Pinning lives on the
   storyboard's matching room — the tiles only wear a passive 📌 badge reporting it. */

.sp-wrap[b-w4hi7x1l47] { max-width: 720px; margin: 0 auto; display: flex; flex-direction: column; gap: 14px; padding-bottom: 40px; }
.sp-title[b-w4hi7x1l47] { font-size: 28px; margin: 0; color: #25324B; }
.sp-sub[b-w4hi7x1l47] { color: #5A6478; font-size: 15.5px; line-height: 1.45; }
.sp-h3[b-w4hi7x1l47] { font-size: 17px; margin: 18px 0 0; color: #25324B; }
.sp-empty[b-w4hi7x1l47] { color: #5A6478; font-size: 15.5px; padding: 26px 0; text-align: center; }

.sp-actions[b-w4hi7x1l47] { display: flex; align-items: center; gap: 16px; }
/* the rare bulk-destructive lives FAR RIGHT, away from Add (owner 2026-07-08); danger tint on hover only */
.sp-removeall[b-w4hi7x1l47] { margin-left: auto; background: none; border: none; color: #8a93a5; font-size: 14.5px;
                cursor: pointer; padding: 6px 4px;
                display: inline-flex; align-items: center; gap: 6px; }
.sp-removeall svg[b-w4hi7x1l47] { width: 15px; height: 15px; flex: 0 0 auto; }
.sp-removeall span[b-w4hi7x1l47] { text-decoration: underline dotted; }
.sp-removeall:hover:not(:disabled)[b-w4hi7x1l47] { color: #8a4f3d; }
.sp-removeall:disabled[b-w4hi7x1l47] { opacity: .4; cursor: default; }
.sp-add-btn[b-w4hi7x1l47] { display: inline-block; padding: 9px 16px; background: var(--iv-accent, #2C4A7E); color: #fff;
              border-radius: 8px; cursor: pointer; font-size: 15.5px; font-weight: 600; user-select: none; }
.sp-add-btn:hover[b-w4hi7x1l47] { filter: brightness(1.08); }
.sp-add-btn.sp-disabled[b-w4hi7x1l47] { opacity: .4; cursor: not-allowed; pointer-events: none; }

.sp-grid[b-w4hi7x1l47] { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
.sp-cell[b-w4hi7x1l47] { border: 1px solid #ECE7DE; border-radius: 8px; overflow: hidden; background: #FAF7F2; }
.sp-cell img[b-w4hi7x1l47] { display: block; width: 100%; height: 120px; object-fit: cover; }
/* just the quiet delete under each photo — nothing else (owner 2026-07-08: super simple) */
.sp-toolbar[b-w4hi7x1l47] { display: flex; justify-content: flex-end; padding: 1px 4px; }
/* /Components/Pages/Interviews/StoryPinPicker.razor.rz.scp.css */
/* Kenny feedback rework (2026-07-08) — the pin picker grew into the MATCHING ROOM: full-screen,
   answer (with audio) sticky up top, the album below. Scoped CSS follows its markup. */

/* z-index above the site header's sticky 100 — the room's own top row lived under it otherwise */
/* IN-PAGE room (owner 2026-07-08: the page swaps the board out and renders THIS instead — no
   overlay, no z-index games; the page's own scrollbar scrolls the room) */
.sm-pinroom[b-qqxhnwb7ki] { display: flex; flex-direction: column; padding-top: 6px; }

/* the answer stays on screen (and audible) while the album scrolls — sticky, painted the PAGE's
   warm color so it sits flat (no white slab); the border only says "content slides under here" */
.sm-pinroom-head[b-qqxhnwb7ki] { position: sticky; top: 0; z-index: 5;
                   padding: 12px 0 16px; border-bottom: 1px solid #ECE7DE;
                   background: #FAF7F2; display: flex; flex-direction: column; gap: 10px; }
.sm-pinroom-meta[b-qqxhnwb7ki] { display: flex; align-items: center; gap: 10px; }
/* type scale matches the storyboard rows (owner 2026-07-08: we upped sizes app-wide — new
   surfaces keep that scale, never drift smaller) */
/* the title carries the counter (owner 2026-07-08: pill retired, Previous/Next became chevrons) */
.sm-pinroom-job[b-qqxhnwb7ki] { margin: 0; color: #25324B; font-size: 21px; font-weight: 600; flex: 1 1 auto; }

/* circular chevron buttons flanking the answer block (owner 2026-07-08) — the walk's whole controls */
.sm-pinroom-answerrow[b-qqxhnwb7ki] { display: flex; align-items: center; gap: 10px; }
.sm-pinroom-chev[b-qqxhnwb7ki] { flex: none; width: 48px; height: 48px; border: 1px solid #ECE7DE; border-radius: 50%;
                   background: #fff; color: #2C4A7E; font-size: 26px; line-height: 1; cursor: pointer;
                   display: flex; align-items: center; justify-content: center; padding-bottom: 4px;
                   box-shadow: 0 1px 4px rgba(37,50,75,.08); }
.sm-pinroom-chev:hover:not(:disabled)[b-qqxhnwb7ki] { border-color: #C9D4E6; background: #F7FAFF; }
.sm-pinroom-chev:disabled[b-qqxhnwb7ki] { opacity: .3; cursor: default; box-shadow: none; }

/* the ANSWER BLOCK — the storyboard row's contained slab, live in the room: question + duration,
   the small player, the strip of what ACTUALLY plays right now, and one honest state line */
.sm-pinroom-answer[b-qqxhnwb7ki] { background: #F6F1E9; border-radius: 10px; padding: 12px 16px;
                     display: flex; flex-direction: column; gap: 10px; flex: 1 1 auto; min-width: 0; }
.sm-pinroom-answer-line[b-qqxhnwb7ki] { display: flex; align-items: center; gap: 10px; }
.sm-pinroom-q[b-qqxhnwb7ki] { flex: 1 1 0; min-width: 0; color: #25324B; font-size: 16.5px; font-weight: 600; }
.sm-pinroom-voice[b-qqxhnwb7ki] { color: #5A6478; font-size: 15px; flex: 0 1 auto; min-width: 0;
                    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sm-pinroom-voice.self[b-qqxhnwb7ki] { color: #B07A12; }
.sm-pinroom-len[b-qqxhnwb7ki] { margin-left: auto; color: #5A6478; font-size: 14.5px; flex: none;
                  font-variant-numeric: tabular-nums; }
.sm-pinroom-audio[b-qqxhnwb7ki] { width: min(400px, 100%); height: 32px; }
.sm-pinroom-strip[b-qqxhnwb7ki] { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; row-gap: 6px; }
.sm-strip-th[b-qqxhnwb7ki] { position: relative; flex: none; }
.sm-strip-th img[b-qqxhnwb7ki] { display: block; width: 64px; height: 64px; object-fit: cover; border-radius: 8px;
                   border: 1px solid #ECE7DE; }
.sm-strip-th.pinned[b-qqxhnwb7ki]::after { content: "📌"; position: absolute; top: -9px; right: -9px;
                             font-size: 16px; line-height: 1; background: rgba(255,255,255,.95);
                             border-radius: 999px; padding: 3px;
                             box-shadow: 0 1px 3px rgba(37,50,75,.3); }
.sm-strip-more[b-qqxhnwb7ki] { font-size: 13px; color: #6a5424; background: #F5EDDC; border-radius: 999px;
                 padding: 3px 10px; flex: none; }
.sm-pinroom-state[b-qqxhnwb7ki] { color: #8a7a55; font-size: 14px; }

.sm-pinroom-body[b-qqxhnwb7ki] { padding-top: 18px; padding-bottom: 14px; }
.sm-pinroom-avail[b-qqxhnwb7ki] { margin: 0 0 12px; color: #25324B; font-size: 16.5px; font-weight: 600; }
.sm-pinroom-avail-sub[b-qqxhnwb7ki] { color: #8a93a5; font-size: 14.5px; font-weight: 400; }

.sm-pinpicker-head[b-qqxhnwb7ki] { display: flex; align-items: baseline; gap: 10px; color: #25324B; }
.sm-pinpicker-close[b-qqxhnwb7ki] { background: none; border: none; font-size: 16px;
                      color: #8a93a5; cursor: pointer; flex: 0 0 auto; }
.sm-pinpicker-close:hover[b-qqxhnwb7ki] { color: #b3402f; }
.sm-pinpicker-grid[b-qqxhnwb7ki] { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: 10px; }
.sm-pinphoto[b-qqxhnwb7ki] { position: relative; border: 2px solid #ECE7DE; border-radius: 8px; overflow: hidden;
               padding: 0; cursor: pointer; background: #FAF7F2; }
.sm-pinphoto img[b-qqxhnwb7ki] { display: block; width: 100%; height: 116px; object-fit: cover; }
.sm-pinphoto:hover[b-qqxhnwb7ki] { border-color: #C9D4E6; }
.sm-pinphoto.here[b-qqxhnwb7ki] { border-color: #B07A12; }
/* one pin language everywhere (owner 2026-07-08): 16px pushpin on a white circular chip */
.sm-pinmark[b-qqxhnwb7ki] { position: absolute; top: 5px; right: 5px; font-size: 16px; line-height: 1;
              background: rgba(255,255,255,.95); border-radius: 999px; padding: 3px;
              box-shadow: 0 1px 3px rgba(37,50,75,.3); }
.sm-pinpicker-foot[b-qqxhnwb7ki] { display: flex; align-items: center; gap: 12px; color: #5A6478; font-size: 14.5px;
                     padding-top: 12px; margin-bottom: 30px; border-top: 1px solid #ECE7DE; }
.sm-pinpicker-foot span[b-qqxhnwb7ki] { flex: 1 1 auto; }
.sm-pinpicker-foot .sm-btn-quiet[b-qqxhnwb7ki] { flex: 0 0 auto; }

/* phones: same in-page room; the tall answer block would eat a sticky phone screen, so it
   scrolls normally there; full-size touch targets */
@media (max-width: 560px) {
    .sm-pinroom-head[b-qqxhnwb7ki] { position: static; }
    .sm-pinroom-meta[b-qqxhnwb7ki] { flex-wrap: wrap; row-gap: 6px; }
    /* the question gets its own full line (the byline was strangling it into one-word-per-line);
       voice + duration follow as a calm second line */
    .sm-pinroom-answer-line[b-qqxhnwb7ki] { flex-wrap: wrap; row-gap: 2px; }
    .sm-pinroom-q[b-qqxhnwb7ki] { flex-basis: 100%; font-size: 15.5px; }
    .sm-pinroom-answerrow[b-qqxhnwb7ki] { gap: 6px; }
    .sm-pinroom-answer[b-qqxhnwb7ki] { padding: 10px 12px; }
    .sm-strip-th img[b-qqxhnwb7ki] { width: 48px; height: 48px; }
    .sm-pinpicker-grid[b-qqxhnwb7ki] { grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); gap: 8px; }
    .sm-pinphoto img[b-qqxhnwb7ki] { height: 96px; }
}

/* deliberate copy of the page's .sm-btn-quiet — scoped CSS can't reach across the split, and the
   nudge on the page still needs its own copy. Keep the two in step. */
.sm-btn-quiet[b-qqxhnwb7ki] {
    background: #fff; border: 1px solid #ECE7DE; border-radius: 10px;
    padding: 8px 16px; cursor: pointer; color: #25324B;
}
.sm-btn-quiet:disabled[b-qqxhnwb7ki] { opacity: .45; cursor: default; }
/* /Components/Pages/Interviews/StoryRenderPanel.razor.rz.scp.css */
/* Spec 028 — the gold stop's player + actions (moved from StoryMovie.razor.css in the compile-unit
   split). The panel only ever renders inside the page's .sm-stop-gold card, so the monolith's
   ".sm-stop .sm-card / .sm-stop .sm-actions" contextual overrides are FLATTENED in here — a child's
   scoped CSS can't see the parent's .sm-stop, and the standalone-card base values were dead inside
   the stop anyway. */

/* the finished movie, playable right in the gold stop */
.sm-player[b-ei4bv6bk4e] { display: block; width: 100%; border-radius: 10px; background: #000; margin: 0 0 14px; }

/* was .sm-card + .sm-stop .sm-card: inside a stop card the standalone chrome collapses */
.sm-card[b-ei4bv6bk4e] { background: transparent; border: none; border-radius: 12px; padding: 0; margin-bottom: 0; }
/* was .sm-actions (margin-top: 30px) + .sm-stop .sm-actions (margin-top: 4px — the winner here) */
.sm-actions[b-ei4bv6bk4e] { display: flex; align-items: center; gap: 16px; margin-top: 4px; }

.sm-btn-primary[b-ei4bv6bk4e] {
    background: #2C4A7E; color: #fff; border: 0; border-radius: 10px;
    padding: 12px 26px; font-size: 1rem; cursor: pointer;
    display: inline-flex; align-items: center; gap: 9px;
}
.sm-btn-primary:disabled[b-ei4bv6bk4e] { opacity: .5; cursor: default; }
.sm-btn-primary svg[b-ei4bv6bk4e] { width: 18px; height: 18px; flex: 0 0 auto; }
.sm-download[b-ei4bv6bk4e] { font-weight: 600; color: #B07A12; display: inline-flex; align-items: center; gap: 7px; }
.sm-download svg[b-ei4bv6bk4e] { width: 17px; height: 17px; flex: 0 0 auto; }
.sm-failed[b-ei4bv6bk4e] { color: #8a2e2e; font-size: .9rem; }
.sm-stopped[b-ei4bv6bk4e] { color: #5A6478; font-size: .9rem; }

.sm-progress[b-ei4bv6bk4e] { flex: 1; }
.sm-bar[b-ei4bv6bk4e] { height: 8px; border-radius: 4px; background: #ECE7DE; overflow: hidden; }
.sm-bar > div[b-ei4bv6bk4e] { height: 100%; background: #2C4A7E; transition: width .4s ease; }
.sm-step[b-ei4bv6bk4e] { color: #5A6478; font-size: .95rem; margin-top: 8px; }
/* the calm "you can walk away" aside — a coffee cup beside it, quieter than the live step line.
   The three parts (step · coffee line · stop) each get real breathing room (owner 2026-07-08:
   they were jammed). align-items:flex-start keeps the cup on the first line when the text wraps. */
.sm-wait-hint[b-ei4bv6bk4e] {
    display: flex; align-items: flex-start; gap: 11px;
    color: #5A6478; font-size: 1rem; line-height: 1.45; margin-top: 18px;
}
.sm-wait-hint svg[b-ei4bv6bk4e] { width: 26px; height: 26px; flex: 0 0 auto; margin-top: 1px; }

/* the quiet in-flight escape — link-weight on purpose (accidental clicks started this;
   the way out shouldn't invite its own) */
.sm-cancel[b-ei4bv6bk4e] {
    margin-top: 18px; padding: 0; border: none; background: none;
    color: #5A6478; font-size: .9rem; cursor: pointer;
    text-decoration: underline; text-underline-offset: 3px;
}
.sm-cancel:hover[b-ei4bv6bk4e] { color: #2C4A7E; }
.sm-cancel:disabled[b-ei4bv6bk4e] { opacity: .5; cursor: default; }
/* /Components/Pages/MyAccount.razor.rz.scp.css */
/* Spec 017 — warm pass on the post-login router page. The routing state is deliberately
   near-empty: it matches the account-home cream so a fast redirect reads as one page load,
   and the wait message only fades in when the wait is long enough to notice (cold start). */

.myacct[b-0sv90yga1p] {
    background: #FAF7F2;
    margin: -8px -24px;            /* bleed past app.css .content padding (0.5rem 1.5rem) */
    padding: 40px 24px 64px;
    min-height: calc(100vh - 110px);
    color: #25324B;
}

.myacct .inner[b-0sv90yga1p] { max-width: 660px; margin: 0 auto; }

.myacct .greeting[b-0sv90yga1p] { font-size: 17px; color: #5A6478; margin: 0 0 4px; }
.myacct .greeting b[b-0sv90yga1p] { color: #25324B; font-weight: 600; }

.myacct h1[b-0sv90yga1p] {
    font-size: 34px;
    font-weight: 600;
    letter-spacing: -0.01em;
    line-height: 1.2;
    margin: 6px 0 14px;
}

.myacct .lede[b-0sv90yga1p] { font-size: 18px; color: #5A6478; line-height: 1.5; margin: 0 0 26px; }

.myacct .qcard[b-0sv90yga1p] {
    background: #FFFFFF;
    border: 1px solid #ECE7DE;
    border-radius: 14px;
    padding: 18px 20px;
    margin: 0 0 14px;
}
.myacct .qlabel[b-0sv90yga1p] { display: block; font-size: 16px; font-weight: 600; color: #25324B; margin-bottom: 8px; }

/* primary CTA — mirrors the bespoke warm control on Account home (.acct-new .cta) */
.myacct .cta[b-0sv90yga1p] {
    display: inline-flex; align-items: center; gap: 10px; margin-top: 14px;
    background: #2C4A7E; color: #fff; border: none; cursor: pointer;
    font-size: 19.5px; font-weight: 600; font-family: inherit;
    padding: 15px 26px; border-radius: 10px;
    box-shadow: 0 1px 2px rgba(37,50,75,.18);
    transition: background .15s ease;
}
.myacct .cta:hover[b-0sv90yga1p] { background: #213A66; }
.myacct .cta:focus-visible[b-0sv90yga1p] { outline: 2px solid #2C4A7E; outline-offset: 2px; }
.myacct .cta .chev[b-0sv90yga1p] { width: 18px; height: 18px; }

/* routing (waiting) state */
.myacct.routing[b-0sv90yga1p] { display: flex; align-items: center; justify-content: center; }
.myacct .wait[b-0sv90yga1p] {
    text-align: center;
    opacity: 0;
    animation: myacct-reveal-b-0sv90yga1p .5s ease .6s forwards;   /* invisible unless the wait is real */
}
.myacct .wait-msg[b-0sv90yga1p] { font-size: 19.5px; color: #5A6478; margin: 0; }
/* the SAME ring spinner as the paused page (SessionPaused.razor .sp-spinner), so a paused-idle resume
   reads as one continuous "waking up" rather than spinner-then-dots */
.myacct .wait-spinner[b-0sv90yga1p] {
    width: 44px; height: 44px; margin: 0 auto 22px;
    border: 4px solid rgba(44, 62, 94, 0.18);   /* faint navy ring */
    border-top-color: #2C4A7E;                   /* the button navy — reads as "this is working" */
    border-radius: 50%;
    animation: myacct-spin-b-0sv90yga1p 0.9s linear infinite;
}
/* resuming from the paused page → the cold-silo wait is expected, so show it immediately (no fade delay)
   so there's no empty beat between the paused page's spinner and this one */
.myacct .wait.resuming[b-0sv90yga1p] { opacity: 1; animation: none; }

@keyframes myacct-reveal-b-0sv90yga1p { to { opacity: 1; } }
@keyframes myacct-spin-b-0sv90yga1p { to { transform: rotate(360deg); } }

/* a frozen ring reads as broken — drop it under reduced-motion and let the message carry the state */
@media (prefers-reduced-motion: reduce) {
    .myacct .wait-spinner[b-0sv90yga1p] { display: none; }
}

@media (max-width: 560px) {
    .myacct h1[b-0sv90yga1p] { font-size: 29.5px; }
}
/* /Components/Pages/NormalInterview.razor.rz.scp.css */
/* Scoped styles for NormalInterview.razor — the in-call interview page.
   Reference: PrototypeInterviewD.razor (spike branch) for the visual pattern. */

/* Sticky top header — keeps CurrentCallVolume + time-remaining + screen-reader
   announcer visible while the carousel scrolls underneath. */
.interview-page-header[b-to82oso5q1] {
    display: flex;
    align-items: center;
    gap: 1.5rem;
    padding: 0.75rem 1.25rem;
    border-bottom: 1px solid #ECE7DE;
    background: #FCFAF6;
    position: sticky;
    top: 0;
    z-index: 50;
}

.interview-page-header-time[b-to82oso5q1] {
    color: #25324B;
}

.interview-page-header-volume[b-to82oso5q1] {
    flex: 1;
    min-width: 0;
}

.interview-page-header-time[b-to82oso5q1] {
    font-size: 1.1rem;
    font-weight: 500;
    white-space: nowrap;
}

.interview-page-header-time-warning[b-to82oso5q1] {
    color: #d32f2f;
    font-weight: 700;
}

/* Proactive in-call top-up nudge (spec 018 in-call top-up increment). A calm strip under the sticky
   header — non-blocking, offers more time before the balance hits the hard cutoff. Warm-aligned with the
   header (same paper background family); escalates to a warmer amber-red at the ~2 min mark. */
.interview-topup-nudge[b-to82oso5q1] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.6rem 1.25rem;
    background: #FBF3E4;
    border-bottom: 1px solid #EAD9B0;
    color: #4A3F2A;
}

.interview-topup-nudge-urgent[b-to82oso5q1] {
    background: #FBE7DF;
    border-bottom-color: #E7B7A3;
    color: #7A3B26;
}

.interview-topup-nudge-text[b-to82oso5q1] {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    min-width: 0;
}

.interview-topup-nudge-head[b-to82oso5q1] {
    font-size: 0.98rem;
    font-weight: 600;
    line-height: 1.25;
}

.interview-topup-nudge-sub[b-to82oso5q1] {
    font-size: 0.82rem;
    opacity: 0.8;
    line-height: 1.25;
}

.interview-topup-nudge-actions[b-to82oso5q1] {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    flex-shrink: 0;
}

/* Warm-gold CTA — matches the pre-call LowBalanceNudge so both top-up surfaces read as one family
   (rather than the site-accent blue clashing with the amber/salmon strip). */
.interview-topup-nudge-btn[b-to82oso5q1] {
    background: #B4832B;
    color: #fff;
    border: none;
    cursor: pointer;
    font-size: 0.9rem;
    font-weight: 600;
    font-family: inherit;
    padding: 0.5rem 0.9rem;
    border-radius: 8px;
    white-space: nowrap;
}

.interview-topup-nudge-btn:hover:not(:disabled)[b-to82oso5q1] {
    background: #9E7124;
}

.interview-topup-nudge-btn:disabled[b-to82oso5q1] {
    opacity: 0.6;
    cursor: default;
}

.interview-topup-nudge-dismiss[b-to82oso5q1] {
    background: transparent;
    border: none;
    cursor: pointer;
    font-size: 1.25rem;
    line-height: 1;
    color: inherit;
    opacity: 0.55;
    padding: 0.15rem 0.4rem;
    border-radius: 6px;
}

.interview-topup-nudge-dismiss:hover[b-to82oso5q1] {
    opacity: 1;
    background: rgba(0, 0, 0, 0.06);
}

/* Liveness cue next to the time-remaining clock (tester feedback) — a constant sign of life so the header
   never reads as frozen at a glance. RECORDING: a red pulsing dot. PAUSED (between questions): a gently
   pulsing pause icon — still alive, but unambiguously paused (amber, matching the card's standby strip).
   Both honor reduced-motion. */
.interview-page-live-dot[b-to82oso5q1] {
    display: inline-block;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    margin-right: 4px;
    vertical-align: middle;
    background: #d32f2f;
    animation: ipl-live-pulse-b-to82oso5q1 1.4s ease-in-out infinite;
}

.interview-page-live-pause[b-to82oso5q1] {
    display: inline-flex;
    align-items: center;
    margin-right: 4px;
    vertical-align: middle;
    color: #BA7517;
    animation: ipl-live-fade-b-to82oso5q1 1.9s ease-in-out infinite;
}

@keyframes ipl-live-pulse-b-to82oso5q1 {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.3; transform: scale(0.6); }
}

@keyframes ipl-live-fade-b-to82oso5q1 {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.4; }
}

@media (prefers-reduced-motion: reduce) {
    .interview-page-live-dot[b-to82oso5q1],
    .interview-page-live-pause[b-to82oso5q1] { animation: none; }
}

/* Pending-server transition state — server round-trip in flight; primary action
   buttons are disabled and a busy indicator is visible. */
.interview-page-busy-overlay[b-to82oso5q1] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 3rem;
    min-height: 40vh;
}

.interview-page-busy-message[b-to82oso5q1] {
    margin-top: 1rem;
    font-size: 1.1rem;
}

.interview-page-busy-overdue-hint[b-to82oso5q1] {
    margin-top: 1.5rem;
    padding: 0.6rem 1rem;
    border-radius: 6px;
    background: #fff8e1;
    border: 1px solid #ffe082;
    color: #5d4400;
    font-size: 0.95rem;
    max-width: 30rem;
    text-align: center;
}

/* Full-page completion state — replaces the previous modal-dialog popup. Warmed for the moment
   (spec 017): a soft gold keepsake badge, a gentle headline + a sentence about what they captured. */
.interview-page-complete[b-to82oso5q1] {
    padding: 4.5rem 2rem;
    text-align: center;
    max-width: 540px;
    margin: 0 auto;
}

/* Gold "keepsake" badge — gold is the journey's movie/output colour, and this is the moment right
   before the movie. */
.ipc-badge[b-to82oso5q1] {
    width: 84px;
    height: 84px;
    border-radius: 50%;
    background: #FBF3E2;
    color: #B07A12;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 1.25rem;
}

.ipc-headline[b-to82oso5q1] {
    font-size: 2.1rem;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: #25324B;
    margin: 0;
}

.ipc-sub[b-to82oso5q1] {
    font-size: 1.15rem;
    line-height: 1.5;
    color: #5A6478;
    margin: 0.75rem auto 0;
    max-width: 26rem;
}

.ipc-count[b-to82oso5q1] {
    font-size: 0.95rem;
    color: #8A93A3;
    margin-top: 1.25rem;
}

/* Ended-early variant: same calm layout, a muted badge instead of celebratory gold. */
.interview-page-complete.ipc-ended .ipc-badge[b-to82oso5q1] {
    background: #EEF0F3;
    color: #5A6478;
}

.interview-page-complete-action[b-to82oso5q1] {
    margin-top: 1.75rem;
}

/* Graceful end-of-call wrap-up hold — same calm, centered layout as the completion state, with a live
   countdown to the server-enforced auto-end and a deliberate "end now" action. Shown after the last question
   while the line is briefly held for goodbyes. */
.interview-page-wrapup[b-to82oso5q1] {
    padding: 4rem 2rem;
    text-align: center;
    max-width: 540px;
    margin: 0 auto;
}

.ipw-badge[b-to82oso5q1] {
    width: 84px;
    height: 84px;
    border-radius: 50%;
    background: #FBF3E2;
    color: #B07A12;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 1.25rem;
}

.ipw-headline[b-to82oso5q1] {
    font-size: 2.1rem;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: #25324B;
    margin: 0;
}

.ipw-sub[b-to82oso5q1] {
    font-size: 1.15rem;
    line-height: 1.5;
    color: #5A6478;
    margin: 0.6rem auto 0;
    max-width: 26rem;
}

.ipw-saygoodbye[b-to82oso5q1] {
    font-size: 1rem;
    color: #5A6478;
    margin: 1.5rem auto 0;
    max-width: 26rem;
}

.ipw-countdown[b-to82oso5q1] {
    margin-top: 1rem;
    font-size: 1rem;
    color: #8A93A3;
}

.ipw-countdown strong[b-to82oso5q1] {
    color: #25324B;
    font-variant-numeric: tabular-nums;
}

/* Last 10s — gently draw the eye to the closing clock without alarm. */
.ipw-countdown-critical strong[b-to82oso5q1] {
    color: #d32f2f;
}

.interview-page-wrapup-action[b-to82oso5q1] {
    margin-top: 1.75rem;
}

/* "Saying goodbye…" hold — shown once the close is underway (button pressed or window elapsed), until the
   server confirms the call ended and the completion state takes over. */
.ipw-closing[b-to82oso5q1] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.75rem;
    margin-top: 2rem;
    color: #5A6478;
    font-size: 1.05rem;
}
/* /Components/Shared/BrandLogo.razor.rz.scp.css */
/* Scoped styles for BrandLogo.razor. The wordmark font is also set globally by
   .dti-marketing .dti-wordmark (app.css); these add the lockup layout + sizing. */

.dti-logo[b-tqefnnqz4o] {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
    line-height: 1;
}

.dti-logo-mark[b-tqefnnqz4o] {
    display: block;
    flex: none;
}

.dti-wordmark[b-tqefnnqz4o] {
    font-family: 'Fraunces', Georgia, serif;
    font-weight: 600;
    font-size: 1.25rem;
    letter-spacing: -0.01em;
    color: var(--dti-ink);
    white-space: nowrap;
}

.dti-logo:hover .dti-wordmark[b-tqefnnqz4o] {
    color: var(--dti-blue);
}
/* /Components/Shared/CommonFooter.razor.rz.scp.css */
/* Scoped styles for CommonFooter.razor.
   The site-level <footer> base styling (background, link colors, hover) lives in
   app.css and still applies. These styles add the multi-column layout on top. */

.footer-grid[b-x80yogv3jm] {
    width: 100%;
    max-width: 1100px;
    margin: 0 auto;
    padding: 32px 24px 24px;
    display: grid;
    grid-template-columns: 1fr;
    gap: 32px;
}

@media (min-width: 720px) {
    .footer-grid[b-x80yogv3jm] {
        grid-template-columns: 1.6fr 1fr 1fr 1fr;
        gap: 40px;
    }
}

.footer-brand[b-x80yogv3jm] {
    line-height: 1.5;
}

.footer-lockup[b-x80yogv3jm] {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 10px;
}

.brand-name[b-x80yogv3jm] {
    font-weight: 700;
    font-size: 1.15rem;
}

.brand-tagline[b-x80yogv3jm] {
    font-style: italic;
    font-size: 0.95rem;
    opacity: 0.85;
    margin: 0 0 12px;
}

.brand-copy[b-x80yogv3jm] {
    font-size: 0.85rem;
    opacity: 0.7;
    margin: 0;
}

.footer-col h4[b-x80yogv3jm] {
    font-size: 0.95rem;
    font-weight: 600;
    margin: 0 0 12px;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    opacity: 0.85;
}

.footer-col ul[b-x80yogv3jm] {
    list-style: none;
    padding: 0;
    margin: 0;
}

    .footer-col ul li[b-x80yogv3jm] {
        margin-bottom: 8px;
    }

    .footer-col ul a[b-x80yogv3jm] {
        font-size: 0.95rem;
        opacity: 0.9;
    }

        .footer-col ul a:hover[b-x80yogv3jm] {
            opacity: 1;
        }
/* /Components/Shared/CommonHeader.razor.rz.scp.css */
/* Shared site header (nav consistency, owner 2026-06-19). Sticky, light, brand-forward — one bar
   across the app, admin, static-personal, and marketing layouts. Uses the global --dti-* tokens
   (app.css :root), so it renders identically wherever it's dropped. Adapted from the original
   StaticLayout .mkt-header rules. */

.dti-hdr[b-oy9fc513dc] {
    position: sticky;
    top: 0;
    z-index: 100;
    background: rgba(255, 255, 255, 0.92);
    -webkit-backdrop-filter: saturate(180%) blur(8px);
    backdrop-filter: saturate(180%) blur(8px);
    border-bottom: 0.5px solid var(--dti-line);
}

.dti-hdr-inner[b-oy9fc513dc] {
    max-width: var(--dti-maxw);
    margin: 0 auto;
    padding: 14px 24px;
    display: flex;
    align-items: center;
    gap: 18px;
}

.dti-hdr-nav[b-oy9fc513dc] {
    display: flex;
    align-items: center;
    gap: 22px;
    margin-left: 16px;
}

.dti-hdr-nav a[b-oy9fc513dc] {
    font-size: 0.95rem;
    color: var(--dti-muted);
    text-decoration: none;
    transition: color 120ms ease;
}

.dti-hdr-nav a:hover[b-oy9fc513dc] {
    color: var(--dti-ink);
}

.dti-hdr-auth[b-oy9fc513dc] {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 14px;
}

/* "Log in" (anonymous) and "My account" (signed-in app) read as the same subtle text link.
   nowrap: at phone widths flex shrinking would otherwise fold "My account" into two clipped
   lines behind the Feedback button (owner's iPhone screenshots, 2026-07-05). */
.dti-hdr-login[b-oy9fc513dc],
.dti-hdr-link[b-oy9fc513dc] {
    font-size: 0.95rem;
    color: var(--dti-muted);
    text-decoration: none;
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    transition: color 120ms ease;
}

/* The trio's icon halves (person / speech bubble / exit — the Feedback one lives inside the
   child FluentButton, hence the ::deep twin). Words at desktop, glyphs at phone widths. */
.dti-hdr-ico[b-oy9fc513dc],
.dti-hdr-auth[b-oy9fc513dc]  .dti-hdr-ico {
    display: none;
    width: 20px;
    height: 20px;
    flex: 0 0 auto;
}

.dti-hdr-login:hover[b-oy9fc513dc],
.dti-hdr-link:hover[b-oy9fc513dc] {
    color: var(--dti-ink);
}

/* "Sign up free" (anonymous) and "My account" (signed-in marketing) — the rounded blue CTA. */
.dti-hdr-cta[b-oy9fc513dc] {
    display: inline-block;
    background: var(--dti-blue);
    color: #fff;
    font-size: 0.95rem;
    font-weight: 500;
    padding: 9px 18px;
    border-radius: 999px;
    text-decoration: none;
    white-space: nowrap;
    transition: background 120ms ease, transform 120ms ease;
}

.dti-hdr-cta:hover[b-oy9fc513dc] {
    background: var(--dti-blue-hover);
    transform: translateY(-1px);
}

/* Log off — a plain text link matching "Feedback" / "My account" (rendered directly here, not via
   LogOutUser, whose icon-only FluentButton can't be recolored). */
.dti-hdr-logout[b-oy9fc513dc] {
    margin: 0;
    display: inline-flex;
    align-items: center;
}

.dti-hdr-logout-btn[b-oy9fc513dc] {
    background: none;
    border: none;
    padding: 0;
    font-family: inherit;
    font-size: 0.95rem;
    color: var(--dti-muted);
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    cursor: pointer;
    transition: color 120ms ease;
}

.dti-hdr-logout-btn:hover[b-oy9fc513dc] {
    color: var(--dti-ink);
}

/* Only the reused child control — FeedbackWidget's stealth button — needs recoloring to the calm
   muted ink. Scope this to ::deep button ONLY: a broader ::deep a would also match our own anchors
   (and out-specify .dti-hdr-cta), washing the white "My account" / "Sign up free" pill to gray.
   FluentUI v4 renders plain HTML, so ::deep reaches the button. */
.dti-hdr-auth[b-oy9fc513dc]  button {
    color: var(--dti-muted);
    font-size: 0.95rem;
}

.dti-hdr-auth[b-oy9fc513dc]  button:hover {
    color: var(--dti-ink);
}

.dti-hdr-auth[b-oy9fc513dc]  .nav-item {
    margin: 0 !important;
    padding: 0 !important;
    display: flex;
    align-items: center;
}

/* On narrow screens drop the inline nav + the subtle login/link text; the logo and the primary
   CTA still anchor the bar. */
@media (max-width: 680px) {
    .dti-hdr-nav[b-oy9fc513dc],
    .dti-hdr-login[b-oy9fc513dc] {
        display: none;
    }

    .dti-hdr-inner[b-oy9fc513dc] {
        padding: 12px 18px;
        gap: 12px;
    }
}

/* Phone widths: the signed-in trio (Feedback / My account / Log off) plus the full wordmark is
   wider than an iPhone — the trio collapses to ICON glyphs (owner 2026-07-05, replacing the
   earlier hide-the-wordmark fallback: the company name stays at every width). title/aria-label
   on each control keep the words for hover and screen readers. Marketing pages never carry the
   trio, so nothing changes for them. */
@media (max-width: 560px) {
    .dti-hdr-inner.is-app[b-oy9fc513dc] {
        gap: 10px;
    }

    .dti-hdr-inner.is-app .dti-hdr-auth[b-oy9fc513dc] {
        gap: 12px;
    }

    .dti-hdr-inner.is-app .dti-hdr-lbl[b-oy9fc513dc],
    .dti-hdr-inner.is-app .dti-hdr-auth[b-oy9fc513dc]  .dti-hdr-lbl {
        display: none;
    }

    .dti-hdr-inner.is-app .dti-hdr-ico[b-oy9fc513dc],
    .dti-hdr-inner.is-app .dti-hdr-auth[b-oy9fc513dc]  .dti-hdr-ico {
        display: block;
    }
}
/* /Components/Shared/Connect/ConnectStatusCard.razor.rz.scp.css */
/* Layout/colors specific to connect-step cards. Base scroll-snap + transform-origin
   + default scale/opacity + transition are shared with all other DTI carousels via
   the `.dti-carousel-item` rule in wwwroot/app.css. */

.connect-step-card[b-mossswk0x9] {
    margin: 0.75rem auto;
    max-width: 620px;
}

.connect-step-card-inner[b-mossswk0x9] {
    background: white;
    border: 1px solid #d8d8d8;
    border-radius: 10px;
    padding: 2rem 2.5rem;
    text-align: center;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
    min-height: 8rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
}

.connect-step-active .connect-step-card-inner[b-mossswk0x9] {
    border: 2px solid #6082b6;
    background: #f4f7fb;
}

.connect-step-done .connect-step-card-inner[b-mossswk0x9] {
    background: #f5f9f5;
    border-color: #c5e1c5;
}

.connect-step-icon[b-mossswk0x9] {
    /* Reserve space for the icon/spinner so the card height doesn't jump
       between Done / Active / Upcoming states. */
    min-height: 3.25rem;
    display: flex;
    align-items: center;
    justify-content: center;
}

.connect-step-title[b-mossswk0x9] {
    font-size: 1.25rem;
    font-weight: 600;
    color: #1a1a1a;
}

.connect-step-done .connect-step-title[b-mossswk0x9] {
    color: #6c757d;
}

.connect-step-subtitle[b-mossswk0x9] {
    font-size: 0.95rem;
    color: #555;
}

.connect-step-busy-message[b-mossswk0x9] {
    font-size: 0.95rem;
    color: #555;
    font-style: italic;
    margin-top: 0.25rem;
}

.connect-step-action[b-mossswk0x9] {
    margin-top: 1rem;
}

.connect-step-escape-action[b-mossswk0x9] {
    margin-top: 0.75rem;
}
/* /Components/Shared/Connect/ConnectStatusCarousel.razor.rz.scp.css */
/* The connect-status carousel is a bit shorter than the interview-question
   carousel because the connect flow is short-lived (a few seconds typically)
   and has only 4 steps. */

.connect-status-carousel[b-7pmd0yrn8i] {
    height: calc(100vh - 220px);
    min-height: 320px;
    max-height: 560px;
    overflow-y: auto;
    scroll-snap-type: y mandatory;
    scroll-padding: 50% 0;
    padding: 0 1rem;
    background: #f7f7f8;
    scrollbar-width: thin;
}

/* Empty spacers above the first card and below the last card so first/last
   can be centered via scroll-snap-align: center on the cards. */
.connect-status-carousel-spacer[b-7pmd0yrn8i] {
    height: 40vh;
    max-height: 240px;
    min-height: 140px;
    scroll-snap-align: none;
    pointer-events: none;
}
/* /Components/Shared/ContentPage.razor.rz.scp.css */
/* Scoped styles for ContentPage.razor. The article body comes from the consumer page
   (a different scope), so its elements are styled via ::deep. Headings inherit Fraunces
   from .dti-marketing (app.css); these add sizing + rhythm. */

.cp-head[b-aa79xxc0fq] {
    background: var(--dti-parchment);
    border-bottom: 0.5px solid var(--dti-line);
}

.cp-inner[b-aa79xxc0fq] {
    max-width: 760px;
    margin: 0 auto;
    padding: 56px 24px;
}

/* No lead paragraph → the tall band reads as empty space; tighten it to a slim strip. */
.cp-head--slim .cp-inner[b-aa79xxc0fq] {
    padding-top: 30px;
    padding-bottom: 26px;
}

.cp-title[b-aa79xxc0fq] {
    font-size: 2.2rem;
    line-height: 1.15;
    margin: 0;
}

.cp-lead[b-aa79xxc0fq] {
    font-size: 1.15rem;
    line-height: 1.55;
    color: var(--dti-muted);
    margin: 14px 0 0;
}

.cp-body[b-aa79xxc0fq] {
    background: #fff;
}

.cp-article[b-aa79xxc0fq] {
    padding-top: 44px;
    padding-bottom: 76px;
}

.cp-article[b-aa79xxc0fq]  h2 {
    font-size: 1.4rem;
    line-height: 1.3;
    margin: 34px 0 12px;
}

.cp-article[b-aa79xxc0fq]  h2:first-child {
    margin-top: 0;
}

.cp-article[b-aa79xxc0fq]  h3 {
    font-size: 1.12rem;
    margin: 26px 0 8px;
}

.cp-article[b-aa79xxc0fq]  p {
    font-size: 1.05rem;
    line-height: 1.7;
    color: var(--dti-ink);
    margin: 0 0 16px;
}

.cp-article[b-aa79xxc0fq]  ul,
.cp-article[b-aa79xxc0fq]  ol {
    margin: 0 0 16px;
    padding-left: 22px;
}

/* Numbered "we've got you" steps (About) — warm gold numerals, roomy lines. */
.cp-article[b-aa79xxc0fq]  .cp-steps li::marker {
    color: var(--dti-gold);
    font-weight: 600;
}

.cp-article[b-aa79xxc0fq]  li {
    font-size: 1.05rem;
    line-height: 1.6;
    margin-bottom: 8px;
}

.cp-article[b-aa79xxc0fq]  a {
    color: var(--dti-blue);
    font-weight: 500;
}

.cp-article[b-aa79xxc0fq]  .cp-cta {
    display: inline-block;
    margin-top: 12px;
    background: var(--dti-blue);
    color: #fff;
    font-weight: 500;
    padding: 12px 24px;
    border-radius: 999px;
    text-decoration: none;
    transition: background 120ms ease;
}

.cp-article[b-aa79xxc0fq]  .cp-cta:hover {
    background: var(--dti-blue-hover);
}

/* "…is that promise, kept." — the brand lockup speaks the payoff line (About page). */
.cp-article[b-aa79xxc0fq]  .cp-promise-kept {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 1.15rem;
}

/* A spoken promise set off as a warm pull-quote (About page). */
.cp-article[b-aa79xxc0fq]  .cp-promise {
    margin: 20px 0 18px;
    padding: 18px 24px;
    background: var(--dti-tint-gold);
    border-left: 3px solid var(--dti-gold);
    border-radius: var(--dti-radius);
    font-family: var(--dti-font-head);
    font-style: italic;
    font-size: 1.18rem;
    line-height: 1.6;
    color: var(--dti-ink);
}

.cp-article[b-aa79xxc0fq]  .cp-note {
    font-size: 0.95rem;
    line-height: 1.6;
    color: var(--dti-muted);
    background: var(--dti-parchment);
    border: 0.5px solid var(--dti-line);
    border-radius: var(--dti-radius);
    padding: 14px 16px;
    margin: 4px 0 18px;
}
/* /Components/Shared/ConversationRow.razor.rz.scp.css */
/* THE conversation row — the one stylesheet for the row both surfaces render (story-card stops +
   wizard roster rows). Home redesign 2026-07-03 ("stops on a route", mockup
   specs/028-story-movie/mockups/home-one-lit-lantern.html): the dots/track are gone — the row is
   name + one calm sentence + (while something needs the user) the one lit verb. */

.ivw-conv[b-seqctenpsp] { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; background: #FAF7F2; border: 1px solid #ECE7DE;
            border-radius: 10px; padding: 12px 16px; text-decoration: none; color: inherit;
            transition: border-color .15s; }
.ivw-conv:hover[b-seqctenpsp] { border-color: #d8d0c2; }
.ivw-conv.is-inactive[b-seqctenpsp] { opacity: .62; }
.inactive-tag[b-seqctenpsp] { font-size: 12.5px; font-weight: 600; color: #8a93a5; background: #F0EDE7;
                border-radius: 999px; padding: 1px 8px; margin-left: 8px; vertical-align: middle; }
/* the subject's own voice — a quiet green pill setting the self row apart from the circle */
.self-tag[b-seqctenpsp] { font-size: 12.5px; font-weight: 600; color: #2E6B45; background: #E6F1E9;
            border-radius: 999px; padding: 1px 8px; margin-left: 8px; vertical-align: middle; }

/* the roster's per-row avatar (story-card rows hang under the card's own header instead) */
.avatar[b-seqctenpsp] { width: 34px; height: 34px; border-radius: 50%; background: #E7EDF6; color: #2C4A7E;
          display: flex; align-items: center; justify-content: center; font-weight: 600;
          font-size: 15.5px; flex: 0 0 auto; }

.ivw-body[b-seqctenpsp] { flex: 999 1 260px; min-width: 0; }
.ivw-cwho[b-seqctenpsp] { font-weight: 600; font-size: 16.5px; color: #25324B; }
/* the quiet "Talk with" guide words — the card is the noun ("A story about…"), rows are verbs */
.ivw-prefix[b-seqctenpsp] { font-weight: 400; color: #5A6478; }
/* the one calm sentence: where things stand, plain words, never a diagram */
.ivw-sub[b-seqctenpsp] { font-size: 13.5px; color: #9aa2b1; margin-top: 4px; }
/* a resting (finalized) row's sentence reads a touch warmer than an upcoming hint */
.ivw-conv.is-done[b-seqctenpsp] { background: #fff; }
.ivw-conv.is-done .ivw-sub[b-seqctenpsp] { color: #5A6478; }

/* ---- the lit verb: "Keep going" grown into words (owner 2026-07-03) ----
   One per story card carries the glint (.glint — the card's lantern); other in-flight rows keep
   the verb quiet so the eye has exactly one place to go. */
.go-btn[b-seqctenpsp] { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 7px;
          border: 2px solid #2C4A7E; color: #2C4A7E; background: #fff;
          font-size: 15px; font-weight: 600; padding: 9px 16px; border-radius: 999px;
          white-space: nowrap; position: relative; overflow: hidden; }
.go-btn svg[b-seqctenpsp] { width: 13px; height: 13px; flex: 0 0 auto; }

/* the glint: the same beloved passing shine, now riding the worded verb — the eye's cue that
   this is the story's unfinished business. Dwells ~80% of the cycle so it winks, not nags.
   LIGHT, not dark (owner 2026-07-03): a bright white core that flashes across the navy text —
   the passing-reflection look — inside a faint cool halo so the sweep stays visible on the
   button's white face. */
.glint[b-seqctenpsp]::after { content: ''; position: absolute; top: -6px; bottom: -6px; width: 26px; left: -34px;
                background: linear-gradient(105deg, transparent,
                    rgba(199, 216, 242, .55) 35%, rgba(255, 255, 255, .95) 50%,
                    rgba(199, 216, 242, .55) 65%, transparent);
                transform: skewX(-20deg); pointer-events: none;
                animation: tglint-b-seqctenpsp 3.2s ease-in-out infinite; }
@keyframes tglint-b-seqctenpsp {
    0%, 70% { left: -26px; }
    88%, 100% { left: calc(100% + 12px); }
}
@media (prefers-reduced-motion: reduce) {
    .glint[b-seqctenpsp]::after { animation: none; content: none; }
}
/* /Components/Shared/CurrentCallVolume.razor.rz.scp.css */
/* Bars are laid out side-by-side rather than stacked, so the component fits
   cleanly inside a single docked header row alongside other indicators (time
   remaining). On narrow viewports the flex container wraps to two lines. */
.volume-meters[b-ya0rwv3muq] {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0.5rem 1rem;
    align-items: center;
    width: 100%;
}

.volume-meters.disabled[b-ya0rwv3muq] {
    opacity: 0.5;
    pointer-events: none;
}

.volume-row[b-ya0rwv3muq] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex: 1 1 12rem;
    min-width: 10rem;
}

.volume-label[b-ya0rwv3muq] {
    flex: 0 0 auto;
    font-weight: 600;
    white-space: nowrap;
}

.volume-bar-track[b-ya0rwv3muq] {
    flex: 1 1 auto;
    height: 1rem;
    background-color: #e5e5e5;
    border: 1px solid #c7c7c7;
    border-radius: 4px;
    overflow: hidden;
}

.volume-bar-fill[b-ya0rwv3muq] {
    height: 100%;
    /* short transition keeps the bar smooth between the 500ms updates without lagging behind */
    transition: width 0.2s linear, background-color 0.2s linear;
}

.volume-bar-fill-yellow[b-ya0rwv3muq] {
    background-color: #f5c518;
}

.volume-bar-fill-green[b-ya0rwv3muq] {
    background-color: #2ea44f;
}

.volume-bar-fill-red[b-ya0rwv3muq] {
    background-color: #d73a49;
}

/* "Quiet" state: a track delivering no frames for a sustained run (the other party simply isn't speaking,
   is muted, or briefly on hold). This is BENIGN and non-actionable, so it's intentionally CALM — no warning
   stripes, no alarm colour, no full-bar takeover. Just a soft italic label over the empty track that gently
   breathes, so it reads as "listening, quiet" rather than "frozen" or "something's wrong". Distinguished
   from a live-but-silent (0) bar only by the label. Honors reduced-motion. */
.volume-bar-noaudio[b-ya0rwv3muq] {
    height: 100%;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.3rem;
    font-size: 0.72rem;
    font-style: italic;
    color: #9aa0a6;
    background-color: transparent;
    animation: volume-quiet-breathe-b-ya0rwv3muq 2.6s ease-in-out infinite;
}

.volume-bar-noaudio-icon[b-ya0rwv3muq] {
    font-size: 0.85rem;
    line-height: 1;
    font-style: normal;
}

@keyframes volume-quiet-breathe-b-ya0rwv3muq {
    0%, 100% { opacity: 0.5; }
    50% { opacity: 0.9; }
}

@media (prefers-reduced-motion: reduce) {
    .volume-bar-noaudio[b-ya0rwv3muq] {
        animation: none;
        opacity: 0.75;
    }
}

.volume-value[b-ya0rwv3muq] {
    flex: 0 0 4.5rem;
    text-align: right;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}
/* /Components/Shared/HowItWorksSection.razor.rz.scp.css */
/* Scoped styles for the shared "How it works" section (home + occasion pages).
   Tokens from app.css. Dimensions follow the home page's section rhythm; the
   .parchment variant only swaps the band background so each host page keeps its
   own white/parchment alternation. */

.hiw[b-s21z1bh5gy] {
    background: #fff;
}

.hiw.parchment[b-s21z1bh5gy] {
    background: var(--dti-parchment);
}

.hiw-inner[b-s21z1bh5gy] {
    max-width: var(--dti-maxw);
    margin: 0 auto;
    padding: 72px 24px;
}

/* On occasion pages (the parchment variant) the section sits right under the keepsakes bar —
   tighten the gap so "How it works" doesn't float. Home keeps the full 72px rhythm. */
.hiw.parchment .hiw-inner[b-s21z1bh5gy] {
    padding-top: 36px;
}

.hiw-head[b-s21z1bh5gy] {
    max-width: 620px;
    margin: 0 auto 44px;
    text-align: center;
}

.hiw-title[b-s21z1bh5gy] {
    font-size: 2rem;
    line-height: 1.2;
    margin: 0 0 12px;
}

.hiw-lead[b-s21z1bh5gy] {
    font-size: 1.1rem;
    color: var(--dti-muted);
    line-height: 1.6;
    margin: 0;
}

.hiw-steps[b-s21z1bh5gy] {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: 1fr;
    gap: 30px;
}

@media (min-width: 760px) {
    .hiw-steps[b-s21z1bh5gy] {
        grid-template-columns: repeat(3, 1fr);
        gap: 36px;
    }
}

.hiw-step[b-s21z1bh5gy] {
    text-align: center;
}

.hiw-step-icon[b-s21z1bh5gy] {
    width: 68px;
    height: 68px;
    margin: 0 auto 16px;
    border-radius: 50%;
    background: var(--dti-tint-blue);
    color: var(--dti-blue);
    display: flex;
    align-items: center;
    justify-content: center;
}

.hiw-step-icon svg[b-s21z1bh5gy] {
    width: 34px;
    height: 34px;
}

.hiw-step-h[b-s21z1bh5gy] {
    font-size: 1.2rem;
    margin: 0 0 8px;
}

.hiw-step-p[b-s21z1bh5gy] {
    font-size: 0.98rem;
    line-height: 1.6;
    color: var(--dti-muted);
    margin: 0;
}

/* spec 029 owner review — step 1 is a you/we/you DUET: pill labels make OUR part visible
   (the "do I have to write the questions?" relief) while the you-lines keep the agency.
   Left-aligned inside the centered card, hugged to the column so lines don't sprawl. */
.hiw-duet[b-s21z1bh5gy] {
    list-style: none;
    padding: 0;
    margin: 0 auto;
    max-width: 300px;
    display: flex;
    flex-direction: column;
    gap: 12px;
    font-size: 0.98rem;
    line-height: 1.55;
    color: var(--dti-muted);
    text-align: left;
}

/* pill + text as a row: wrapped lines hang under the TEXT, never fold back beneath the pill */
.hiw-duet li[b-s21z1bh5gy] {
    display: flex;
    align-items: first baseline;
    gap: 9px;
}

.hiw-duet-t[b-s21z1bh5gy] {
    flex: 1;
}

.hiw-who[b-s21z1bh5gy] {
    flex: 0 0 auto;
    min-width: 42px;
    padding: 2px 9px;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    text-align: center;
    color: var(--dti-blue);
    background: var(--dti-tint-blue);
}

/* our line pops a shade harder — that's the part they didn't know we'd do */
.hiw-who-us[b-s21z1bh5gy] {
    background: var(--dti-blue);
    color: #fff;
}

.hiw-cta[b-s21z1bh5gy] {
    text-align: center;
    margin-top: 38px;
}

/* Same navy pill as the marketing .btn-primary — both host bands are light, so no
   white-pill flip is needed here. */
.hiw-btn[b-s21z1bh5gy] {
    display: inline-block;
    padding: 13px 26px;
    border-radius: 999px;
    text-decoration: none;
    font-weight: 500;
    font-size: 1rem;
    border: 1px solid transparent;
    background: var(--dti-blue);
    color: #fff;
    transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;
}

.hiw-btn:hover[b-s21z1bh5gy] {
    transform: translateY(-1px);
    box-shadow: 0 8px 20px rgba(43, 58, 91, 0.16);
    background: var(--dti-blue-hover);
}
/* /Components/Shared/Interview/InterviewQuestionCard.razor.rz.scp.css */
/* Scoped styles for InterviewQuestionCard. Layout/colors taken from the
   spike prototype (PrototypeInterviewD.razor's .proto-d-item-inner block)
   and adapted for production. */

/* Sizing and layout specific to interview-question cards. Base scroll-snap +
   transform-origin + default scale/opacity + transition are shared with all
   other DTI carousels via the `.dti-carousel-item` rule in wwwroot/app.css. */
.interview-q-card[b-4rw6su3f9w] {
    margin: 0.75rem auto;
    max-width: 720px;
}

.interview-q-card-inner[b-4rw6su3f9w] {
    background: #fff;
    border: 1px solid #ECE7DE; /* warm line, matches the rest of the journey */
    border-radius: 14px;
    overflow: hidden; /* clip the full-bleed status strip to the rounded top */
    box-shadow: 0 2px 8px rgba(37, 50, 75, 0.06);
}

.interview-q-card-active .interview-q-card-inner[b-4rw6su3f9w] {
    /* the focal (non-recording) card: a calm accent ring, warm white fill */
    border-color: #2C4A7E;
    background: #FBFAF7;
    box-shadow: 0 0 0 3px rgba(44, 74, 126, 0.08), 0 2px 10px rgba(37, 50, 75, 0.08);
}

.interview-q-card-recording .interview-q-card-inner[b-4rw6su3f9w] {
    border: 4px solid #d32f2f;
    background: #fff5f5;
}

/* Padding lives on the body so it stays constant regardless of border width
   (the recording card's 4px border no longer needs padding compensation). */
.interview-q-body[b-4rw6su3f9w] {
    padding: 2rem 2.5rem;
    text-align: center;
}

/* ---- Status strip: the always-look-here "are we recording?" banner ---- */
.interview-q-status[b-4rw6su3f9w] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.5rem 1.1rem;
    font-size: 0.85rem;
    font-weight: 600;
}

.interview-q-status-left[b-4rw6su3f9w] {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
}

.interview-q-status-counter[b-4rw6su3f9w] {
    font-weight: 400;
    font-size: 0.8rem;
}

/* "Last question" signpost — keepsake gold (the journey's output colour) ties it to the wrap-up moment, and
   reads on both the amber standby strip and the red recording strip. Tells the interviewer that finishing
   this one wraps up the conversation. */
.interview-q-lastpill[b-4rw6su3f9w] {
    display: inline-block;
    vertical-align: middle;
    margin-right: 0.45em;
    padding: 0.1em 0.55em;
    border-radius: 999px;
    background: #B07A12;
    color: #fff;
    font-weight: 700;
    font-size: 0.7rem;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    white-space: nowrap;
}

/* Standby = amber + pause icon: "NOT RECORDING → paused for your review". */
.interview-q-status-standby[b-4rw6su3f9w] {
    background: #FAEEDA;
    color: #854F0B;
}

.interview-q-status-standby .interview-q-status-counter[b-4rw6su3f9w] {
    color: #BA7517;
}

/* Recording = red + blinking dot: "RECORDING → go ahead…ASK NOW". */
.interview-q-status-recording[b-4rw6su3f9w] {
    background: #d32f2f;
    color: #fff;
    font-size: 0.9rem;
}

.interview-q-status-recording .interview-q-status-counter[b-4rw6su3f9w] {
    color: #ffd3d3;
}

/* Shared strip emphasis — the SHOUTED words (color inherits from each strip). */
.interview-q-strip-emph[b-4rw6su3f9w] {
    font-weight: 800;
    letter-spacing: 0.04em;
}

.interview-q-strip-arrow[b-4rw6su3f9w] {
    margin: 0 0.35em;
    font-weight: 700;
    opacity: 0.85;
}

.interview-q-strip-ellipsis[b-4rw6su3f9w] {
    margin: 0 0.2em 0 0.02em;
    letter-spacing: 0.15em;
}

.interview-q-rec-dot[b-4rw6su3f9w] {
    display: inline-block;
    width: 11px;
    height: 11px;
    border-radius: 50%;
    background: #fff;
    animation: interviewRecBlink-b-4rw6su3f9w 1s infinite;
}

@keyframes interviewRecBlink-b-4rw6su3f9w {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.3; }
}

/* ---- Card body ---- */
.interview-q-meta[b-4rw6su3f9w] {
    font-size: 0.8rem;
    color: #8A93A3;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin-bottom: 0.5rem;
}

.interview-q-text[b-4rw6su3f9w] {
    font-size: 1.5rem;
    line-height: 1.4;
    color: #25324B; /* warm ink */
    font-weight: 500;
}

/* Soften the question on the not-yet-recording card — it's for calm review,
   not the assertive focus the recording card needs. */
.interview-q-card-active:not(.interview-q-card-recording) .interview-q-text[b-4rw6su3f9w] {
    font-weight: 400;
    color: #5A6478;
}

/* Primary action sits inside the focal card with breathing room above so the
   question and the call-to-action read as one block. */
.interview-q-primary-action[b-4rw6su3f9w] {
    margin-top: 1.75rem;
}

.interview-q-card:not(.interview-q-card-recording) .interview-q-primary-action[b-4rw6su3f9w] {
    margin-top: 1.5rem;
}

.interview-q-card:not(.interview-q-card-recording) .interview-q-primary-action[b-4rw6su3f9w]  fluent-button::part(control) {
    height: 48px;
    padding-inline: 26px;
    font-size: 1.1rem;
    font-weight: 600;
}

/* Chevrons flanking the Start button that brighten in sequence from the outside
   in — a "flow" that pulls the eye onto the button. */
.interview-q-primary-action-focus[b-4rw6su3f9w] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
}

.interview-q-waves[b-4rw6su3f9w] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
}

.interview-q-waves i[b-4rw6su3f9w] {
    width: 13px;
    height: 13px;
    border-style: solid;
    border-color: #1f8a4c; /* match the green button — "go here" */
    opacity: 0.15;
    animation: interviewWaveFlow-b-4rw6su3f9w 1.15s ease-in-out infinite;
}

.interview-q-waves-left i[b-4rw6su3f9w] { border-width: 3px 3px 0 0; transform: rotate(45deg); }   /* › toward button */
.interview-q-waves-right i[b-4rw6su3f9w] { border-width: 0 0 3px 3px; transform: rotate(45deg); }  /* ‹ toward button */

.interview-q-waves-left i:nth-child(1)[b-4rw6su3f9w] { animation-delay: 0s; }
.interview-q-waves-left i:nth-child(2)[b-4rw6su3f9w] { animation-delay: 0.14s; }
.interview-q-waves-left i:nth-child(3)[b-4rw6su3f9w] { animation-delay: 0.28s; }
.interview-q-waves-right i:nth-child(1)[b-4rw6su3f9w] { animation-delay: 0.28s; }
.interview-q-waves-right i:nth-child(2)[b-4rw6su3f9w] { animation-delay: 0.14s; }
.interview-q-waves-right i:nth-child(3)[b-4rw6su3f9w] { animation-delay: 0s; }

@keyframes interviewWaveFlow-b-4rw6su3f9w {
    0%, 100% { opacity: 0.12; }
    50% { opacity: 0.95; }
}

@media (prefers-reduced-motion: reduce) {
    /* Text + color carry the signal; drop the motion. */
    .interview-q-rec-dot[b-4rw6su3f9w] { animation: none; }
    .interview-q-waves i[b-4rw6su3f9w] { animation: none; opacity: 0.5; }
}
/* /Components/Shared/Interview/InterviewQuestionCarousel.razor.rz.scp.css */
/* Scroll-snap container for the question carousel. The big top/bottom
   "spacer" siblings (inside the markup) absorb the room needed for the first
   and last cards to be centered by scroll-snap. We do NOT use percentage
   padding on the container itself because percentage padding-top/bottom
   resolves against parent WIDTH, not height (CSS spec). */

.interview-q-carousel[b-o6vcvkuuiu] {
    height: calc(100vh - 260px);
    min-height: 360px;
    max-height: 640px;
    overflow-y: auto;
    scroll-snap-type: y mandatory;
    scroll-padding: 50% 0;
    padding: 0 1rem;
    background: #F6F3EE; /* warm cream so the white cards lift off it */
    scrollbar-width: thin;
}

/* Empty spacers above the first card and below the last card. Sized so the
   first/last card has enough room to be centered via scroll-snap-align: center
   on the cards. aria-hidden in the markup keeps them out of the a11y tree. */
.interview-q-carousel-spacer[b-o6vcvkuuiu] {
    height: 45vh;
    max-height: 280px;
    min-height: 160px;
    scroll-snap-align: none;
    pointer-events: none;
}
/* /Components/Shared/Interview/InterviewSecondaryActionBar.razor.rz.scp.css */
.interview-secondary-bar[b-nf6vzzstqc] {
    position: sticky;
    bottom: 0;
    background: #fafafa;
    border-top: 1px solid #e0e0e0;
    padding: 1rem;
    z-index: 40;
}

/* Vertical divider between Skip/Restart Question and the destructive End Call. */
.interview-secondary-bar-divider[b-nf6vzzstqc] {
    width: 1px;
    height: 1.75rem;
    background: #d0d0d0;
    margin: 0 0.5rem;
}

.interview-secondary-bar-hint[b-nf6vzzstqc] {
    text-align: center;
    font-size: 0.8rem;
    color: #777;
    margin-top: 0.5rem;
    font-style: italic;
}
/* /Components/Shared/InterviewProgressList.razor.rz.scp.css */
/* Spec 017/021/028 — shared story-card list (Account home + /Interviews). Home redesign 2026-07-03
   ("stops on a route", mockup specs/028-story-movie/mockups/home-one-lit-lantern.html): one line
   runs down the card and curves in/out of every row — each conversation a stop, the movie the
   terminus. The rows themselves are the shared ConversationRow (its own scoped stylesheet). */

.ivw-list[b-jmqeh8p8r0] { display: flex; flex-direction: column; gap: 22px; }

.ivw[b-jmqeh8p8r0] {
    display: flex; flex-direction: column;
    background: #fff; border: 1px solid #ECE7DE; border-radius: 12px;
    padding: 14px 18px 18px; transition: border-color .15s;
}
.ivw:hover[b-jmqeh8p8r0] { border-color: #d8d0c2; }

/* ---- header: the noun ("A story about Sarah & Tom") ---- */
.ivw-shead[b-jmqeh8p8r0] { display: flex; align-items: center; gap: 14px; }
/* the quiet guide words — soft, so the names keep the weight */
.ivw-prefix[b-jmqeh8p8r0] { font-weight: 400; color: #5A6478; }

.avatar[b-jmqeh8p8r0] {
    width: 42px; height: 42px; border-radius: 50%; flex: 0 0 auto;
    background: #E7EDF6; color: #2C4A7E; display: flex; align-items: center; justify-content: center;
    font-weight: 600; font-size: 18px;
}
.who[b-jmqeh8p8r0] { font-weight: 600; font-size: 18px; color: #25324B; min-width: 0; }
/* a quiet pencil after the subject → the Story screen, where the subject's "about" is edited */
.ivw-shead-pen[b-jmqeh8p8r0] { color: var(--iv-accent, #2C4A7E); text-decoration: none; font-size: 19px; margin-left: 8px; opacity: .65; }
.ivw-shead-pen:hover[b-jmqeh8p8r0] { opacity: 1; }

/* add-a-voice: worded, quiet (owner 2026-07-03 — replaced the unlabeled +🗣 icon pair). A growth
   affordance, not the next step, so it never glows. */
.ivw-addvoice[b-jmqeh8p8r0] { margin-left: auto; flex: 0 0 auto; color: #2C4A7E; font-size: 15px;
                text-decoration: none; white-space: nowrap; opacity: .85; }
.ivw-addvoice:hover[b-jmqeh8p8r0] { text-decoration: underline; opacity: 1; }

/* spec 027 (owner, 2026-06-29): the occasion pill heads the card in place of the meaningless P/A/S
   initial. Accent-tinted so it reads as the heading; the icon is the same OccasionIcons glyph used
   by the wizard grid + letterhead. */
.ivw-occ[b-jmqeh8p8r0] { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 7px;
           background: #E8EEF7; border: 1px solid #DBE4F1; color: var(--iv-accent, #2C4A7E);
           font-size: 14px; font-weight: 500; line-height: 1; letter-spacing: .01em;
           padding: 8px 13px; border-radius: 999px; white-space: nowrap; }
.ivw-occ[b-jmqeh8p8r0]  svg { display: block; flex: 0 0 auto; width: 16px; height: 16px; }

/* ---- THE ROUTE: one line that threads in and out of every row — each row is a stop ---- */
.ivw-route[b-jmqeh8p8r0] { margin-top: 14px; display: flex; flex-direction: column; gap: 12px; padding-left: 34px; }
.ivw-stop[b-jmqeh8p8r0] { position: relative; }
/* the IN curve: the line arrives from above at the rail's x, curves right, and docks
   at the row's left edge at mid-height */
.ivw-stop[b-jmqeh8p8r0]::before { content: ''; position: absolute; left: -24px; top: -7px; bottom: 50%; width: 24px;
                    border-left: 2px solid #DDD6C8; border-bottom: 2px solid #DDD6C8;
                    border-bottom-left-radius: 16px; }
/* the OUT curve: the line leaves the row's edge, curves left, and heads down to the next stop */
.ivw-stop:not(:last-child)[b-jmqeh8p8r0]::after { content: ''; position: absolute; left: -24px; top: 50%; bottom: -7px;
                    width: 24px; border-left: 2px solid #DDD6C8; border-top: 2px solid #DDD6C8;
                    border-top-left-radius: 16px; }
/* the first stop's line begins just under the story header */
.ivw-stop:first-child[b-jmqeh8p8r0]::before { top: -12px; }

/* the STATION marker: a circle pinned where the line touches the row */
.ivw-station[b-jmqeh8p8r0] { position: absolute; left: -11px; top: 50%; transform: translateY(-50%); z-index: 2;
               width: 22px; height: 22px; border-radius: 50%; background: #fff;
               border: 2px solid #DDD6C8; display: flex; align-items: center; justify-content: center; }
.ivw-station svg[b-jmqeh8p8r0] { width: 11px; height: 11px; }
.ivw-stop.is-done .ivw-station[b-jmqeh8p8r0] { background: #2C4A7E; border-color: #2C4A7E; color: #fff; }
.ivw-stop.is-live .ivw-station[b-jmqeh8p8r0] { border-color: #2C4A7E; }
.ivw-stop.is-live .ivw-station i[b-jmqeh8p8r0] { width: 8px; height: 8px; border-radius: 50%; background: #2C4A7E; display: block; }
.ivw-stop.is-gold .ivw-station[b-jmqeh8p8r0] { background: #B07A12; border-color: #B07A12; color: #fff; }

/* management mode: the row plus its controls share a line; the row keeps the room */
.ivw-conv-line[b-jmqeh8p8r0] { display: flex; align-items: center; gap: 8px; }
.ivw-conv-line[b-jmqeh8p8r0]  .ivw-conv { flex: 1; min-width: 0; }

/* the personal hub's quiet verb beside a revealed put-away row */
.ivw-bring[b-jmqeh8p8r0] { background: none; border: none; padding: 0; font: inherit; font-size: 15.5px;
             color: #2C4A7E; cursor: pointer; white-space: nowrap; flex: 0 0 auto; }
.ivw-bring:hover[b-jmqeh8p8r0] { text-decoration: underline; }

/* the row's controls stack vertically so the icon pair (or verb + trash) keeps a narrow footprint
   and doesn't crowd the row's own button at phone widths (owner 2026-06-22) */
.ivw-actions[b-jmqeh8p8r0] { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }

/* management controls (inactivate / reactivate / delete) — only rendered in ShowManagement mode */
.ivw-mgmt[b-jmqeh8p8r0] {
    flex: 0 0 auto; width: 34px; height: 34px; border-radius: 8px;
    border: 1px solid #E2DCD0; background: #fff; color: #8a93a5; cursor: pointer;
    display: flex; align-items: center; justify-content: center; transition: color .15s, border-color .15s;
}
.ivw-mgmt:hover[b-jmqeh8p8r0] { color: #2C4A7E; border-color: #C9D4E6; }
.ivw-mgmt svg[b-jmqeh8p8r0] { width: 18px; height: 18px; }

/* ---- the TERMINUS: the movie as a full row, weighted by state (spec 028 / 2026-07-03) ---- */
.ivw-term[b-jmqeh8p8r0] { display: flex; align-items: center; gap: 14px; border-radius: 10px; padding: 12px 16px;
            text-decoration: none; color: inherit; }
.ivw-term-body[b-jmqeh8p8r0] { flex: 1; min-width: 0; }
.ivw-term-name[b-jmqeh8p8r0] { font-weight: 600; font-size: 16.5px; }
.ivw-term-sub[b-jmqeh8p8r0] { font-size: 13.5px; margin-top: 4px; }
/* not yet earned / voices still coming: present (the destination is never a mystery) but
   plainly "not yet" — dashed, quiet */
.ivw-stop.is-next .ivw-term[b-jmqeh8p8r0] { background: #fff; border: 1px dashed #DDD6C8; }
.ivw-stop.is-next .ivw-term-name[b-jmqeh8p8r0] { color: #5A6478; }
.ivw-stop.is-next .ivw-term-sub[b-jmqeh8p8r0] { color: #9aa2b1; }
a.ivw-term:hover[b-jmqeh8p8r0] { border-color: #d8d0c2; }
/* earned by every active voice: the terminus inherits the lantern — the row goes gold */
.ivw-stop.is-gold .ivw-term[b-jmqeh8p8r0] { background: #FBF3E2; border: 1px solid #E3CF9E; }
.ivw-stop.is-gold .ivw-term:hover[b-jmqeh8p8r0] { background: #F7EBCF; border-color: #D8BD80; }
.ivw-stop.is-gold .ivw-term-name[b-jmqeh8p8r0] { color: #B07A12; }
.ivw-stop.is-gold .ivw-term-sub[b-jmqeh8p8r0] { color: #5A6478; }
.ivw-movie-btn[b-jmqeh8p8r0] { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 8px;
                 background: #fff; color: #B07A12; border: 2px solid #E3CF9E;
                 font-size: 15px; font-weight: 600; padding: 9px 18px; border-radius: 999px;
                 white-space: nowrap; position: relative; overflow: hidden; }

/* the glint, gold-keyed for the terminus (scoped CSS means ConversationRow's .glint can't reach
   this component's markup — same animation, one place per component). LIGHT like the verb glint
   (owner 2026-07-03): bright white core flashing the gold text, faint warm halo for the white face. */
.glint[b-jmqeh8p8r0]::after { content: ''; position: absolute; top: -6px; bottom: -6px; width: 26px; left: -34px;
                background: linear-gradient(105deg, transparent,
                    rgba(236, 214, 164, .6) 35%, rgba(255, 255, 255, .95) 50%,
                    rgba(236, 214, 164, .6) 65%, transparent);
                transform: skewX(-20deg); pointer-events: none;
                animation: sglint-b-jmqeh8p8r0 3.2s ease-in-out infinite; }
@keyframes sglint-b-jmqeh8p8r0 {
    0%, 70% { left: -26px; }
    88%, 100% { left: calc(100% + 12px); }
}
@media (prefers-reduced-motion: reduce) {
    .glint[b-jmqeh8p8r0]::after { animation: none; content: none; }
}

/* ---- phone widths (owner's iPhone screenshots, 2026-07-05): the card header and the terminus
   were built as single flex rows; at ~390px the fixed-width pieces (occasion pill, "＋ Add a
   voice", the worded movie pill) starved the flexible text into one-word-per-line columns and
   pushed past the viewport. Let each row wrap instead. ---- */
@media (max-width: 560px) {
    /* header wraps: pill/avatar left + add-a-voice right on the first line, the story title on
       its own full line beneath — names keep their room */
    .ivw-shead[b-jmqeh8p8r0] { flex-wrap: wrap; gap: 10px 14px; }
    .who[b-jmqeh8p8r0] { order: 3; flex: 1 1 100%; }

    /* terminus wraps: the words above, the movie pill on its own full line below the sub */
    .ivw-term[b-jmqeh8p8r0] { flex-wrap: wrap; }
    .ivw-movie-btn[b-jmqeh8p8r0] { flex: 1 1 100%; justify-content: center; text-align: center; white-space: normal; }

    /* the card hugs a phone a little closer so the route keeps its room */
    .ivw[b-jmqeh8p8r0] { padding: 14px 14px 16px; }
}
/* /Components/Shared/InviteFriendCard.razor.rz.scp.css */
/* Spec 022 — invite card, matched to the Account-home palette (cream page, white cards,
   navy text, #2C4A7E accent, gold warmth) */

.invite-card[b-b08vrm3o55] {
    background: #FFFFFF;
    border: 1px solid #EAE2D5;
    border-radius: 14px;
    padding: 18px 20px;
    margin-top: 22px;
}

/* hosted under the compact invite line — the host page's .invite-expand wrapper owns the
   indent + rail, so the card itself just drops its standalone top margin */
.invite-card.attached[b-b08vrm3o55] {
    margin-top: 0;
}

.ihead[b-b08vrm3o55] { display: flex; gap: 12px; align-items: flex-start; }

.iglyph[b-b08vrm3o55] {
    flex: 0 0 auto;
    width: 30px; height: 30px; border-radius: 9px;
    display: inline-flex; align-items: center; justify-content: center;
    background: #FBF3E2; color: #B07A12;
}
.iglyph svg[b-b08vrm3o55] { width: 16px; height: 16px; }

.ititle[b-b08vrm3o55] { font-size: 18px; font-weight: 600; color: #25324B; }
.isub[b-b08vrm3o55] { font-size: 15.5px; color: #5A6478; margin-top: 2px; line-height: 1.45; }

.ilink[b-b08vrm3o55] {
    margin-top: 12px;
    font-size: 15.5px; color: #2C4A7E;
    background: #EEF2F8; border-radius: 8px;
    padding: 8px 12px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.iactions[b-b08vrm3o55] { display: flex; gap: 14px; align-items: baseline; margin-top: 12px; }

.iprimary[b-b08vrm3o55] {
    background: #2C4A7E; color: #fff; border: none; cursor: pointer;
    font-size: 16px; font-weight: 600; font-family: inherit;
    padding: 9px 16px; border-radius: 9px;
    transition: background .15s ease;
}
.iprimary:hover[b-b08vrm3o55] { background: #213A66; }

.iquiet[b-b08vrm3o55] {
    background: none; border: none; padding: 0; cursor: pointer;
    font: inherit; font-size: 15.5px; color: #2C4A7E; text-decoration: none;
}
.iquiet:hover[b-b08vrm3o55] { text-decoration: underline; }

.icount[b-b08vrm3o55] { margin-top: 12px; font-size: 15.5px; color: #B07A12; }
.iparty[b-b08vrm3o55] { margin-right: 4px; }
/* /Components/Shared/KeepsakesBar.razor.rz.scp.css */
/* Scoped styles for KeepsakesBar.razor. The track auto-drifts AND swipes via scrollLeft
   (wwwroot/js/dti-marquee.js) — no CSS animation, so the two never fight. */

.km-bar[b-9j90tfsmsp] {
    background: var(--dti-parchment);
    border-bottom: 0.5px solid var(--dti-line);
    overflow: hidden;
}

.km-inner[b-9j90tfsmsp] {
    max-width: var(--dti-maxw);
    margin: 0 auto;
    padding: 12px 24px;
    display: flex;
    align-items: center;
    gap: 12px;
}

.km-here[b-9j90tfsmsp] {
    flex: none;
    display: inline-flex;
    align-items: center;
    white-space: nowrap;
    background: var(--dti-tint-gold);
    border: 0.5px solid rgba(200, 155, 90, 0.5);
    border-radius: 999px;
    padding: 7px 15px;
    font-size: 0.85rem;
    font-weight: 500;
    color: #b07d3c;
}

.km-track[b-9j90tfsmsp] {
    flex: 1;
    min-width: 0;
    display: flex;
    gap: 10px;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;          /* Firefox */
    -ms-overflow-style: none;       /* old Edge */
    -webkit-mask-image: linear-gradient(to right, transparent, #000 6%, #000 94%, transparent);
    mask-image: linear-gradient(to right, transparent, #000 6%, #000 94%, transparent);
}

.km-track[b-9j90tfsmsp]::-webkit-scrollbar {
    display: none;                  /* Chrome / Safari */
}

.km-chip[b-9j90tfsmsp] {
    flex: none;
    display: inline-flex;
    align-items: center;
    white-space: nowrap;
    background: #fff;
    border: 0.5px solid var(--dti-line);
    border-radius: 999px;
    padding: 7px 15px;
    font-size: 0.85rem;
    color: var(--dti-muted);
    text-decoration: none;
    transition: color 120ms ease, border-color 120ms ease;
}

.km-chip:hover[b-9j90tfsmsp] {
    color: var(--dti-ink);
    border-color: rgba(43, 58, 91, 0.28);
}
/* /Components/Shared/OccasionGrid.razor.rz.scp.css */
/* Spec 027 — occasion grid tiles (warm iv- door aesthetic) + the SHELL chrome. Tiles are top-aligned so a
   clicked tile can grow in place to center stage; the grown tile's interior is supplied by a flow component
   (OccasionPeopleBuilder for honoring-a-life / family-history) or the simple inline answer below. */

.oc-grid[b-vpwenxcutn] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 12px;
    margin-top: 14px;
    align-items: start;
}

.oc-tile[b-vpwenxcutn] {
    background: #fff;
    border: 1px solid var(--iv-line);
    border-radius: 14px;
    transition: border-color .15s ease, box-shadow .2s ease, opacity .2s ease;
}

.oc-tile:hover[b-vpwenxcutn],
.oc-tile-open[b-vpwenxcutn] { border-color: var(--iv-accent); }

/* when one tile is center-stage, the others recede (but brighten on hover so they stay tappable) */
.oc-grid.oc-has-open .oc-tile:not(.oc-tile-open)[b-vpwenxcutn] { opacity: .45; }
.oc-grid.oc-has-open .oc-tile:not(.oc-tile-open):hover[b-vpwenxcutn] { opacity: 1; }

/* the chosen occasion takes center stage — full row, others tuck around it */
.oc-tile-open[b-vpwenxcutn] {
    grid-column: 1 / -1;
    box-shadow: 0 6px 22px rgba(46, 64, 99, 0.10);
    position: relative;   /* anchor the close "×" */
}

/* small close affordance on the grown card (top-right) — collapse if they changed their mind */
.oc-close[b-vpwenxcutn] {
    position: absolute;
    top: 10px;
    right: 12px;
    z-index: 2;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    cursor: pointer;
    font-size: 22px;
    line-height: 1;
    color: #9aa0ad;
}
.oc-close:hover[b-vpwenxcutn] { color: var(--iv-accent); background: #F3F4F8; }

.oc-tile-head[b-vpwenxcutn] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    width: 100%;
    text-align: left;
    padding: 16px 18px;
    background: none;
    border: none;
    cursor: pointer;
    font-family: inherit;
    /* uniform card height regardless of 1- vs 2-line label/subline (owner: every card the same height) */
    min-height: 150px;
    box-sizing: border-box;
}

/* an open tile drops the fixed height — the grown card sizes to its flow component */
.oc-tile-open .oc-tile-head[b-vpwenxcutn] { min-height: 0; }

.oc-tile-icon[b-vpwenxcutn] { color: var(--iv-accent); margin-bottom: 6px; }
.oc-tile-label[b-vpwenxcutn] { font-size: 18px; font-weight: 600; color: var(--iv-ink); line-height: 1.35; }
.oc-tile-whom[b-vpwenxcutn] { font-size: 14px; color: var(--iv-ink-soft); }
.oc-tile-quiet .oc-tile-label[b-vpwenxcutn] { color: var(--iv-ink-soft); }

/* an open people-builder tile lets its flow component own the spacing below the head */
.oc-tile-open .oc-tile-head[b-vpwenxcutn] { padding-bottom: 4px; }

/* —— simple inline answer (non-people-builder occasions: name the subject) —— */
.oc-tile-answer[b-vpwenxcutn] {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 12px;
    padding: 0 18px 18px;
    animation: oc-answer-in-b-vpwenxcutn .3s ease both .06s;
}

.oc-answer-field[b-vpwenxcutn] { flex: 1; }

@keyframes oc-answer-in-b-vpwenxcutn { from { opacity: 0; } to { opacity: 1; } }
/* /Components/Shared/OccasionPage.razor.rz.scp.css */
/* Scoped styles for OccasionPage.razor (the occasion entry-page template). Tokens from app.css.
   Mirrors the home page's rhythm; "occ-" prefixed so it never collides with Home's scoped CSS. */

.occ-inner[b-vy68lxkved] {
    max-width: var(--dti-maxw);
    margin: 0 auto;
    padding: 64px 24px;
}

.occ-inner.narrow[b-vy68lxkved] {
    max-width: 720px;
}

.center[b-vy68lxkved] {
    text-align: center;
}

.occ-head[b-vy68lxkved] {
    max-width: 600px;
    margin: 0 auto 36px;
}

/* ---------- hero ---------- */

.occ-hero[b-vy68lxkved] {
    position: relative;
    color: #fff;
    padding: 32px 0 36px;
    text-align: center;
    /* One height for EVERY hero band (all occasion pages + home — keep in sync with Home's
       .hero): fixed min-height with centered content, sized just over the tallest copy, so
       shorter pages pick up calm air instead of the bands bouncing page to page. */
    min-height: 380px;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden; /* the photo layer is scaled slightly past the edges */
}

/* The occasion photo as the hero itself (owner decision 2026-07-03): near-sharp — just enough
   blur to soften digital edges — with the navy scrim below carrying text contrast. */
.occ-hero-photo[b-vy68lxkved] {
    position: absolute;
    inset: 0;
    z-index: 0;
    background-size: cover;
    background-position: center 30%;
    filter: blur(0.5px) saturate(1.0);
    transform: scale(1.01); /* hide blur edge fringing */
}

.occ-hero-scrim[b-vy68lxkved] {
    position: absolute;
    inset: 0;
    z-index: 1;
    background: rgba(43, 58, 91, 0.55);
}

/* Photo pass 2 (owner 2026-07-05): directional scrim for side-anchored heroes — full strength
   under the copy, falling away so the photo's own light glows through on the subject's side.
   fade-right = copy sits LEFT (scrim fades toward the right), and vice versa. */
.occ-hero-scrim.fade-right[b-vy68lxkved] {
    background: linear-gradient(90deg,
        rgba(43, 58, 91, 0.62) 0%, rgba(43, 58, 91, 0.44) 38%,
        rgba(43, 58, 91, 0.16) 66%, rgba(43, 58, 91, 0.05) 100%);
}

.occ-hero-scrim.fade-left[b-vy68lxkved] {
    background: linear-gradient(270deg,
        rgba(43, 58, 91, 0.62) 0%, rgba(43, 58, 91, 0.44) 38%,
        rgba(43, 58, 91, 0.16) 66%, rgba(43, 58, 91, 0.05) 100%);
}

/* Below 760px the side-anchored copy recenters (see .occ-hero-inner rules) — a fading scrim
   would leave the centered copy's far words unprotected, so fall back to the flat scrim. */
@media (max-width: 760px) {
    .occ-hero-scrim.fade-right[b-vy68lxkved],
    .occ-hero-scrim.fade-left[b-vy68lxkved] {
        background: rgba(43, 58, 91, 0.55);
    }
}

/* prev/next chevrons that step through the occasions (catalog order, wrapping) */
.occ-nav[b-vy68lxkved] {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    color: #fff;
    background: rgba(255, 255, 255, 0.12);
    border: 1px solid rgba(255, 255, 255, 0.35);
    transition: background 120ms ease;
    z-index: 2;
}

.occ-nav:hover[b-vy68lxkved] {
    background: rgba(255, 255, 255, 0.24);
}

.occ-nav svg[b-vy68lxkved] {
    width: 22px;
    height: 22px;
}

.occ-nav-prev[b-vy68lxkved] {
    left: 20px;
}

.occ-nav-next[b-vy68lxkved] {
    right: 20px;
}

/* On phones the hero is too narrow for edge chevrons — the swipeable bar covers nav there. */
@media (max-width: 600px) {
    .occ-nav[b-vy68lxkved] {
        display: none;
    }
}

.occ-hero.warm[b-vy68lxkved] {
    background: var(--dti-grad-warm);
}

.occ-hero.calm[b-vy68lxkved] {
    background: var(--dti-grad-calm);
}

.occ-hero-inner[b-vy68lxkved] {
    max-width: 760px;
    margin: 0 auto;
    padding: 0 24px;
    position: relative;
    z-index: 2; /* copy rides above the photo + scrim layers */
}

/* HeroSide: anchor the copy block to one side so a center-of-frame face stays visible.
   The wide margin clears the nav chevron; below 760px there's no room to dodge, so recenter. */
.occ-hero-inner.side-left[b-vy68lxkved],
.occ-hero-inner.side-right[b-vy68lxkved] {
    text-align: left;
    max-width: 560px;
}

.occ-hero-inner.side-left[b-vy68lxkved] {
    margin-left: max(84px, 9vw);
    margin-right: auto;
}

.occ-hero-inner.side-right[b-vy68lxkved] {
    margin-right: max(84px, 9vw);
    margin-left: auto;
}

/* Photo pass 2 (owner 2026-07-05): "tight" hugs the copy to its edge harder when the photo's
   open side is truly empty. 72px still clears the nav chevron (20px in + 44px wide); the home
   hero, which has no chevrons, goes tighter still in Home's own stylesheet. */
.occ-hero-inner.side-left.tight[b-vy68lxkved] {
    margin-left: max(72px, 7vw);
}

.occ-hero-inner.side-right.tight[b-vy68lxkved] {
    margin-right: max(72px, 7vw);
    /* the 560px block's LEFT edge is what drifts onto a center-frame face (graduation) —
       a tight right anchor also narrows the block so the whole column sits further right */
    max-width: 470px;
}

.occ-hero-inner.side-left .occ-sub[b-vy68lxkved],
.occ-hero-inner.side-right .occ-sub[b-vy68lxkved] {
    margin-left: 0;
    margin-right: 0;
}

.occ-hero-inner.side-left .occ-cta-row[b-vy68lxkved],
.occ-hero-inner.side-right .occ-cta-row[b-vy68lxkved] {
    justify-content: flex-start;
}

@media (max-width: 760px) {
    .occ-hero-inner.side-left[b-vy68lxkved],
    .occ-hero-inner.side-right[b-vy68lxkved] {
        margin: 0 auto;
        text-align: center;
    }

    .occ-hero-inner.side-left .occ-cta-row[b-vy68lxkved],
    .occ-hero-inner.side-right .occ-cta-row[b-vy68lxkved] {
        justify-content: center;
    }
}

/* The gold dot, promoted along with the occasion name from the retired eyebrow. */
.occ-headline-dot[b-vy68lxkved] {
    display: inline-block;
    width: 10px;
    height: 10px;
    margin: 0 10px 4px 0;
    border-radius: 50%;
    background: var(--dti-gold-soft);
}

.occ-headline[b-vy68lxkved] {
    font-size: 2.3rem;
    line-height: 1.12;
    color: #fff;
    margin: 0 0 14px;
}

.occ-sub[b-vy68lxkved] {
    font-size: 1.15rem;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.93);
    max-width: 660px;
    margin: 0 auto 22px;
}

.occ-cta-row[b-vy68lxkved] {
    display: flex;
    gap: 12px;
    justify-content: center;
    flex-wrap: wrap;
}

@media (min-width: 760px) {
    .occ-headline[b-vy68lxkved] {
        font-size: 3rem;
    }
}

/* ---------- buttons ---------- */

.occ-btn[b-vy68lxkved] {
    display: inline-block;
    padding: 13px 26px;
    border-radius: 999px;
    text-decoration: none;
    font-weight: 500;
    font-size: 1rem;
    border: 1px solid transparent;
    transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;
}

.occ-btn:hover[b-vy68lxkved] {
    transform: translateY(-1px);
    box-shadow: 0 8px 20px rgba(43, 58, 91, 0.18);
}

/* On the dark hero/final bands the primary is a white pill for contrast. */
.occ-btn-primary[b-vy68lxkved] {
    background: #fff;
    color: var(--dti-ink);
}

.occ-btn-primary:hover[b-vy68lxkved] {
    background: var(--dti-tint-blue);
}

.occ-btn-ghost[b-vy68lxkved] {
    background: transparent;
    color: #fff;
    border-color: rgba(255, 255, 255, 0.6);
}

.occ-btn-ghost:hover[b-vy68lxkved] {
    background: rgba(255, 255, 255, 0.14);
}

.occ-btn-large[b-vy68lxkved] {
    padding: 16px 34px;
    font-size: 1.05rem;
}

/* ---------- feature image ---------- */

/* ---------- intro ---------- */

.occ-intro[b-vy68lxkved] {
    background: #fff;
}

.occ-h2[b-vy68lxkved] {
    font-size: 1.8rem;
    line-height: 1.25;
    margin: 0 0 16px;
}

.occ-intro .occ-h2[b-vy68lxkved] {
    font-style: italic;
}

.occ-p[b-vy68lxkved] {
    font-size: 1.08rem;
    line-height: 1.7;
    color: var(--dti-ink);
    margin: 0 0 16px;
}

.occ-p:last-child[b-vy68lxkved] {
    margin-bottom: 0;
}

/* ---------- questions ---------- */

.occ-questions[b-vy68lxkved] {
    background: var(--dti-parchment);
}

.occ-lead[b-vy68lxkved] {
    font-size: 1.05rem;
    color: var(--dti-muted);
    margin: 0;
}

.occ-q-list[b-vy68lxkved] {
    list-style: none;
    padding: 0;
    margin: 0 auto;
    max-width: 820px;
    display: grid;
    gap: 12px;
}

@media (min-width: 680px) {
    .occ-q-list[b-vy68lxkved] {
        grid-template-columns: 1fr 1fr;
    }
}

.occ-q-list li[b-vy68lxkved] {
    position: relative;
    background: #fff;
    border: 0.5px solid var(--dti-line);
    border-radius: var(--dti-radius);
    padding: 16px 18px 16px 44px;
    font-size: 1rem;
    line-height: 1.5;
    color: var(--dti-ink);
}

.occ-q-mark[b-vy68lxkved] {
    position: absolute;
    left: 15px;
    top: 13px;
    font-family: var(--dti-font-head);
    font-size: 1.7rem;
    line-height: 1;
    color: var(--dti-gold);
}

/* ---------- how it works: shared HowItWorksSection component (own scoped CSS) ---------- */

/* ---------- grace note (optional) ---------- */

.occ-grace[b-vy68lxkved] {
    background: #fff;
}

.occ-grace-card[b-vy68lxkved] {
    background: var(--dti-tint-blue);
    border-radius: var(--dti-radius-lg);
    padding: 32px;
    text-align: center;
}

.occ-grace-copy[b-vy68lxkved] {
    font-size: 1.08rem;
    line-height: 1.7;
    font-style: italic;
    color: var(--dti-ink);
    margin: 0;
}

/* The "more keepsakes" bar moved to its own component — see KeepsakesBar.razor(.css). */

/* ---------- final CTA ---------- */

.occ-final[b-vy68lxkved] {
    color: #fff;
    text-align: center;
}

.occ-final.warm[b-vy68lxkved] {
    background: var(--dti-grad-warm);
}

.occ-final.calm[b-vy68lxkved] {
    background: var(--dti-grad-calm);
}

.occ-final-h2[b-vy68lxkved] {
    font-size: 2rem;
    line-height: 1.25;
    color: #fff;
    margin: 0 0 14px;
}

.occ-final-p[b-vy68lxkved] {
    font-size: 1.1rem;
    color: rgba(255, 255, 255, 0.92);
    margin: 0 0 26px;
}

.occ-subnote[b-vy68lxkved] {
    width: 100%;
    margin: 14px 0 0;
    font-size: 0.95rem;
    color: rgba(255, 255, 255, 0.85);
}

.occ-subnote a[b-vy68lxkved] {
    color: inherit;
    font-weight: 500;
    text-decoration: underline;
}

@media (min-width: 760px) {
    .occ-final-h2[b-vy68lxkved] {
        font-size: 2.3rem;
    }
}
/* /Components/Shared/RotatingExamples.razor.rz.scp.css */
/* Spec 021 — the breathing example span: crossfade only (never slides). The transition is also
   neutralized under reduced motion as a belt-and-braces alongside the component's JS check. */
.rx-example[b-u1va52cbz7] { display: inline-block; font-style: italic; opacity: 1; transition: opacity .7s ease; }
.rx-example.rx-fading[b-u1va52cbz7] { opacity: 0; }

@media (prefers-reduced-motion: reduce) {
    .rx-example[b-u1va52cbz7] { transition: none; }
}
/* /Components/Shared/SubjectLifeExamples.razor.rz.scp.css */
/* Spec 027 — the shared scrolling "lives" examples (create beat 2 + the details edit screen). Continuous,
   edge-faded vertical scroll that pauses on hover. The track holds two copies of the list and animates to
   -50% so it loops seamlessly. */

.sle-exhead[b-wkiih2nu7w] { font-size: 12.5px; color: #8a8f9a; margin: 2px 0 2px; }

.sle-scrollwin[b-wkiih2nu7w] {
    height: 104px; overflow: hidden; position: relative;
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 20%, #000 80%, transparent 100%);
            mask-image: linear-gradient(to bottom, transparent 0, #000 20%, #000 80%, transparent 100%);
}
.sle-scrolltrack[b-wkiih2nu7w] { position: absolute; left: 0; right: 0; top: 0; animation: sle-scroll-b-wkiih2nu7w 60s linear infinite; }
.sle-scrollwin:hover .sle-scrolltrack[b-wkiih2nu7w] { animation-play-state: paused; }
.sle-ex[b-wkiih2nu7w] { font-size: 13.5px; font-style: italic; color: #6b7488; line-height: 1.55; padding: 9px 0; margin: 0; }

@keyframes sle-scroll-b-wkiih2nu7w { from { transform: translateY(0); } to { transform: translateY(-50%); } }

@media (prefers-reduced-motion: reduce) {
    .sle-scrolltrack[b-wkiih2nu7w] { animation: none; }
    .sle-scrollwin[b-wkiih2nu7w] { height: auto; -webkit-mask-image: none; mask-image: none; }
}
/* /Components/Shared/Templates/TemplateQuestionCard.razor.rz.scp.css */
/* Mirrors InterviewQuestionCard.razor.css for visual continuity between
   authoring a template and conducting the interview. Same white card, same
   border + radius, same typography for the question text. Differences:
     - no scroll-snap or scale-by-distance (authoring is a static list)
     - actions row at the bottom with reorder + remove buttons
     - no "active" or "recording" variants */

.template-q-card[b-3350vy7r1o] {
    margin: 0.75rem auto;
    max-width: 720px;
}

.template-q-card-inner[b-3350vy7r1o] {
    background: white;
    border: 1px solid #d8d8d8;
    border-radius: 10px;
    padding: 1.5rem 2rem 1rem;
    text-align: center;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
}

.template-q-meta[b-3350vy7r1o] {
    font-size: 0.8rem;
    color: #777;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin-bottom: 0.5rem;
}

.template-q-text[b-3350vy7r1o] {
    font-size: 1.5rem;
    line-height: 1.4;
    color: #1a1a1a;
    font-weight: 500;
    margin-bottom: 1rem;
}

.template-q-actions[b-3350vy7r1o] {
    display: flex;
    align-items: center;
    gap: 4px;
    padding-top: 0.5rem;
    border-top: 1px solid #ececec;
}
/* /Components/Shared/TimePill.razor.rz.scp.css */
/* The call-time balance chip. Colors match the app tokens shared across the account home and the
   get-ready screen (#EEF2F8 pill, #5A6478 body, #25324B emphasis). Vertical margin lives here so the
   pill sits with consistent rhythm wherever it's dropped. */
.timepill[b-f4wl7l5z8z] {
    display: inline-flex; align-items: center; gap: 8px;
    background: #EEF2F8; color: #5A6478; border-radius: 999px;
    padding: 7px 14px; font-size: 15.5px; margin: 14px 0 20px;
}

.timepill b[b-f4wl7l5z8z] { color: #25324B; font-weight: 600; }

.timepill svg[b-f4wl7l5z8z] { width: 16px; height: 16px; opacity: .7; }
