/* Partyhelp venue app.
   The venue portal's own screens, built as an app rather than as a web form
   dressed up for phones. Every rebuilt venue page renders inside .va-app with
   markup from resources/views/components/va/*. One UI on every device: a phone
   gets it full width, a desktop gets the same thing in a centred column.

   Tokens come from the approved mockup
   (~/partyhelp-claude/mockups/room-edit-app-mockup.html). */

:root {
    --va-purple: #7c3aed;
    --va-purple-dk: #6d28d9;
    --va-purple-sf: #f3eeff;
    --va-ink: #15131c;
    --va-ink-2: #5b5668;
    --va-ink-3: #8e8a9c;
    --va-ground: #f2f0f6;
    --va-card: #ffffff;
    --va-line: #e6e3ef;
    --va-warn: #b45309;
    --va-warn-sf: #fdf3e3;
    --va-good: #15803d;
    --va-good-sf: #e9f6ee;
    --va-bad: #b91c1c;
    --va-bad-sf: #fdecec;
    --va-on-accent: #ffffff;

    --va-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
    --va-display: "Figtree", var(--va-ui);

    --va-col: 35rem;          /* the app column on wide screens */
    --va-tabbar-h: 4.25rem;
    --va-safe-t: env(safe-area-inset-top, 0px);
    --va-safe-b: env(safe-area-inset-bottom, 0px);
    --va-radius: 1rem;
}

.dark {
    --va-purple: #a78bfa;
    --va-purple-dk: #8b5cf6;
    --va-purple-sf: #2a2142;
    --va-ink: #f4f2f9;
    --va-ink-2: #b4afc4;
    --va-ink-3: #8a8599;
    --va-ground: #0e0d13;
    --va-card: #1a1822;
    --va-line: #2b2836;
    --va-warn: #fbbf24;
    --va-warn-sf: #342a16;
    --va-good: #4ade80;
    --va-good-sf: #15291c;
    --va-bad: #f87171;
    --va-bad-sf: #3a1a1c;
    --va-on-accent: #15131c;
}

/* ---------- Shell ---------------------------------------------------------- */

body.va-body {
    background: var(--va-ground);
    color: var(--va-ink);
    font-family: var(--va-ui);
    -webkit-font-smoothing: antialiased;
}

.va-app {
    max-width: var(--va-col);
    margin-inline: auto;
    min-height: 100dvh;
    padding-bottom: calc(var(--va-tabbar-h) + var(--va-safe-b) + 1.5rem);
}
.va-app.va-no-tabbar { padding-bottom: calc(var(--va-safe-b) + 1.5rem); }

/* App bar: back, title, one action. Sticky, and clear of the notch. */
.va-appbar {
    position: sticky;
    top: 0;
    z-index: 20;
    display: grid;
    grid-template-columns: minmax(6rem, max-content) 1fr minmax(6rem, max-content); /* equal floors: the title stays centred beside the logo */
    align-items: center;
    min-height: 3.25rem;
    padding: calc(var(--va-safe-t) + 0.25rem) 0.5rem 0.25rem;
    background: color-mix(in srgb, var(--va-ground) 88%, transparent);
    -webkit-backdrop-filter: saturate(1.6) blur(12px);
    backdrop-filter: saturate(1.6) blur(12px);
}
.va-appbar-title {
    text-align: center;
    font-size: 1rem;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* A screen that asks for it (x-va.screen wrap-title) wraps a long fixed title beside the logo and the balance chip instead of cutting it off. */
.va-appbar-title.is-long {
    white-space: normal;
    font-size: 0.9375rem;
    line-height: 1.15;
    text-wrap: balance;
}
/* wrap-title="clamp": a title that is a record name wraps to two lines at most, then ends in an ellipsis. */
.va-appbar-title.is-clamped {
    white-space: normal;
    font-size: 0.9375rem;
    line-height: 1.15;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
}
.va-appbar-lead, .va-appbar-trail { display: flex; align-items: center; min-width: 0; }
.va-appbar-trail { justify-content: flex-end; }
.va-appbar-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.125rem;
    min-height: 2.75rem;
    padding: 0 0.5rem;
    border: 0;
    background: none;
    font: inherit;
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--va-purple);
    text-decoration: none;
    cursor: pointer;
    white-space: nowrap;
}
.va-appbar-btn[disabled], .va-appbar-btn.is-disabled { color: var(--va-ink-3); cursor: default; }
.va-appbar-btn svg { width: 1.25rem; height: 1.25rem; flex: 0 0 auto; }
.va-appbar-brand { display: inline-flex; align-items: center; padding-left: 0.5rem; }
/* The light PNG carries its own margins (as on desktop): trimmed so the mark reads
   at the same size as the white one. */
.va-appbar-brand img { height: 2.25rem; width: auto; max-width: none; }
.va-appbar-brand img.va-logo-on-light { margin: 0 -0.45rem; }
.va-appbar-brand img.va-logo-on-dark { height: 1.55rem; }

/* Avatar button: opens the account sheet from any top-level screen. */
.va-avatar {
    width: 2.25rem;
    height: 2.25rem;
    border-radius: 50%;
    border: 0;
    background: var(--va-ink);
    color: var(--va-ground);
    font: inherit;
    font-size: 0.8125rem;
    font-weight: 700;
    cursor: pointer;
    margin-right: 0.5rem;
}

.va-content { padding: 0.25rem 1rem 0; }

/* ---------- Type ------------------------------------------------------------ */

.va-hero { padding: 0.25rem 0.25rem 1.125rem; }
.va-hero h1 {
    margin: 0 0 0.375rem;
    font-family: var(--va-display);
    font-size: 1.75rem;
    font-weight: 800;
    letter-spacing: -0.03em;
    line-height: 1.12;
    text-wrap: balance;
}
.va-hero .va-sub {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4375rem;
    color: var(--va-ink-2);
    font-size: 0.875rem;
}
.va-dot { width: 3px; height: 3px; border-radius: 50%; background: var(--va-ink-3); flex: 0 0 auto; }
.va-live { color: var(--va-good); font-weight: 600; }
.va-paused { color: var(--va-ink-3); font-weight: 600; }

/* ---------- Grouped sections ---------------------------------------------- */

.va-group { margin-bottom: 1.375rem; }
.va-group-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.5rem;
    margin: 0 0 0.5rem;
    padding-inline: 0.375rem;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--va-ink-3);
}
.va-group-head .va-hint {
    text-transform: none;
    letter-spacing: 0;
    font-weight: 500;
}
.va-card {
    background: var(--va-card);
    border-radius: var(--va-radius);
    overflow: hidden;
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.05);
}
.va-card + .va-card { margin-top: 0.625rem; }
.va-pad { padding: 0.875rem 1rem 1rem; }
.va-card-foot {
    padding: 0.75rem 1rem;
    border-top: 1px solid var(--va-line);
    color: var(--va-ink-3);
    font-size: 0.8125rem;
    line-height: 1.45;
}

/* ---------- Value rows ------------------------------------------------------ */

.va-row {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    min-height: 3.375rem;
    padding: 0.6875rem 1rem;
    border: 0;
    border-top: 1px solid var(--va-line);
    background: none;
    font: inherit;
    color: var(--va-ink);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
}
.va-row:first-child { border-top: 0; }
button.va-row:active, a.va-row:active { background: var(--va-purple-sf); }
.va-row-icon {
    flex: 0 0 auto;
    display: flex;
    width: 1.875rem;
    height: 1.875rem;
    align-items: center;
    justify-content: center;
    border-radius: 0.5rem;
    background: var(--va-purple-sf);
    color: var(--va-purple);
}
.va-row-icon svg { width: 1.0625rem; height: 1.0625rem; }
.va-row-label { flex: 0 1 auto; min-width: 0; font-size: 0.9375rem; }
.va-row-label small { display: block; color: var(--va-ink-3); font-size: 0.8125rem; margin-top: 0.0625rem; }
.va-row-value {
    flex: 1 1 auto;
    min-width: 0;
    text-align: right;
    color: var(--va-ink-2);
    font-size: 0.9375rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-variant-numeric: tabular-nums;
}
.va-row-value.is-unset { color: var(--va-warn); font-weight: 600; }
.va-row-value.is-strong { flex: none; color: var(--va-ink); font-weight: 700; }
.va-row-icon + .va-row-label { flex: 1 1 auto; }
.va-chev { flex: 0 0 auto; display: flex; color: var(--va-ink-3); }
.va-chev svg { width: 0.5rem; height: 0.8125rem; }
.va-row.is-static { cursor: default; }
.va-row.is-danger { color: var(--va-bad); font-weight: 600; justify-content: center; }
.va-row-error {
    padding: 0 1rem 0.75rem;
    margin-top: -0.25rem;
    color: var(--va-bad);
    font-size: 0.8125rem;
    font-weight: 500;
}

.va-row-action {
    display: block;
    width: 100%;
    min-height: 3rem;
    padding: 0.875rem 1rem;
    border: 0;
    border-top: 1px solid var(--va-line);
    background: none;
    font: inherit;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--va-purple);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
}
.va-row-action:active { background: var(--va-purple-sf); }

/* ---------- Switch ----------------------------------------------------------- */

.va-switch {
    position: relative;
    flex: 0 0 auto;
    width: 3.1875rem;
    height: 1.9375rem;
    border-radius: 999px;
    border: 0;
    background: var(--va-line);
    cursor: pointer;
    transition: background 0.22s ease;
}
.va-switch::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 2px;
    width: 1.6875rem;
    height: 1.6875rem;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 1px 3px rgb(0 0 0 / 0.25);
    transition: transform 0.22s cubic-bezier(0.32, 0.72, 0, 1);
}
.va-switch[aria-checked="true"] { background: var(--va-good); }
.va-switch[aria-checked="true"]::after { transform: translateX(1.25rem); }

/* ---------- Chips ----------------------------------------------------------- */

.va-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; padding: 0.875rem 1rem 1rem; }
.va-chip { position: relative; display: inline-flex; }
.va-chip input {
    position: absolute;
    inset: 0;
    opacity: 0;
    margin: 0;
    cursor: pointer;
}
.va-chip span {
    display: inline-flex;
    align-items: center;
    min-height: 2.5rem;
    padding: 0.5rem 0.875rem;
    border: 1px solid var(--va-line);
    border-radius: 999px;
    background: var(--va-card);
    color: var(--va-ink);
    font-size: 0.875rem;
    font-weight: 500;
    transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease;
}
.va-chip input:checked + span {
    background: var(--va-purple);
    border-color: var(--va-purple);
    color: var(--va-on-accent);
    font-weight: 600;
}
.va-chip input:focus-visible + span { outline: 2px solid var(--va-purple); outline-offset: 2px; }
.va-chip input:disabled + span { opacity: 0.4; }
.va-chip input:disabled { cursor: default; }

/* ---------- Capacity / number steppers -------------------------------------- */

.va-caps { display: grid; grid-template-columns: repeat(3, 1fr); }
.va-cap { padding: 0.875rem 0.375rem 1rem; text-align: center; border-left: 1px solid var(--va-line); }
.va-cap:first-child { border-left: 0; }
.va-cap-label {
    margin-bottom: 0.5rem;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--va-ink-3);
}
.va-cap-num {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: none;
    font-family: var(--va-display);
    font-size: 1.625rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    color: var(--va-ink);
    cursor: pointer;
}
.va-cap-unit { margin-top: 0.1875rem; font-size: 0.6875rem; color: var(--va-ink-3); }
.va-stepper { display: flex; justify-content: center; gap: 0.625rem; margin-top: 0.5625rem; }
.va-stepper button {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    border: 1px solid var(--va-line);
    border-radius: 50%;
    background: var(--va-card);
    color: var(--va-purple);
    font: inherit;
    font-size: 1.125rem;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
}
.va-stepper button:active { background: var(--va-purple-sf); }

/* ---------- Photos ------------------------------------------------------------ */

.va-photos { display: grid; grid-template-columns: 1fr 1fr; gap: 0.625rem; padding: 0.875rem 1rem 1rem; }
.va-tile {
    position: relative;
    aspect-ratio: 4 / 3;
    max-width: 100%;
    border-radius: 0.75rem;
    overflow: hidden;
    background: var(--va-purple-sf);
}
.va-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
.va-tile-tag {
    position: absolute;
    left: 0.5rem;
    bottom: 0.5rem;
    padding: 0.1875rem 0.4375rem;
    border-radius: 999px;
    background: rgb(20 16 40 / 0.55);
    color: #fff;
    font-size: 0.6875rem;
    font-weight: 700;
}
.va-tile-remove {
    position: absolute;
    top: 0.375rem;
    right: 0.375rem;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 1.75rem;
    height: 1.75rem;
    border: 0;
    border-radius: 50%;
    background: rgb(20 16 40 / 0.6);
    color: #fff;
    cursor: pointer;
}
.va-tile-remove svg { width: 0.875rem; height: 0.875rem; }
.va-tile-add {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
    width: 100%;
    border: 1.5px dashed var(--va-line);
    background: none;
    color: var(--va-ink-3);
    font: inherit;
    font-size: 0.8125rem;
    font-weight: 600;
    cursor: pointer;
}
.va-tile-add svg { width: 1.375rem; height: 1.375rem; }
.va-tile-add:active { border-color: var(--va-purple); color: var(--va-purple); }

/* ---------- Notices ------------------------------------------------------------ */

.va-note {
    display: flex;
    align-items: flex-start;
    gap: 0.625rem;
    margin-bottom: 1.25rem;
    padding: 0.75rem 0.875rem;
    border-radius: 0.875rem;
    background: var(--va-warn-sf);
    color: var(--va-warn);
    font-size: 0.8125rem;
    font-weight: 500;
    line-height: 1.45;
}
.va-note svg { flex: 0 0 auto; width: 1rem; height: 1rem; margin-top: 0.0625rem; }
.va-note strong { display: block; font-weight: 700; margin-bottom: 0.125rem; }
.va-note a, .va-note button.va-note-action {
    display: inline-flex;
    margin-top: 0.5rem;
    padding: 0.5rem 0.875rem;
    border: 0;
    border-radius: 0.625rem;
    background: var(--va-purple);
    color: var(--va-on-accent);
    font: inherit;
    font-size: 0.8125rem;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
}
.va-note.is-good { background: var(--va-good-sf); color: var(--va-good); }

/* ---------- Stat tiles ------------------------------------------------------------ */

.va-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 0.625rem; margin-bottom: 1.375rem; }
.va-stat {
    display: block;
    padding: 0.875rem 1rem;
    border-radius: var(--va-radius);
    background: var(--va-card);
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.05);
    color: inherit;
    text-decoration: none;
}
.va-stat-label { font-size: 0.75rem; font-weight: 600; color: var(--va-ink-3); }
.va-stat-num {
    margin-top: 0.375rem;
    font-family: var(--va-display);
    font-size: 1.5rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
    line-height: 1.05;
}
.va-stat-sub { margin-top: 0.25rem; font-size: 0.75rem; color: var(--va-ink-2); }
.va-stat.is-accent { background: var(--va-purple); color: var(--va-on-accent); }
.va-stat.is-accent .va-stat-label, .va-stat.is-accent .va-stat-sub { color: color-mix(in srgb, var(--va-on-accent) 80%, transparent); }

/* ---------- List cards (leads, rooms) --------------------------------------------- */

.va-item { padding: 0.9375rem 1rem 1rem; border-top: 1px solid var(--va-line); }
.va-item:first-child { border-top: 0; }
.va-item-head { display: flex; align-items: center; justify-content: space-between; gap: 0.625rem; }
.va-item-title {
    min-width: 0;
    margin: 0;
    font-family: var(--va-display);
    font-size: 1.0625rem;
    font-weight: 700;
    letter-spacing: -0.01em;
}
.va-item-sub { margin-top: 0.1875rem; color: var(--va-ink-2); font-size: 0.8125rem; }
.va-facts { display: grid; grid-template-columns: 1fr 1fr; gap: 0.625rem 1rem; margin: 0.875rem 0 0; }
.va-fact { display: flex; align-items: center; gap: 0.5rem; min-width: 0; font-size: 0.875rem; color: var(--va-ink); }
.va-fact svg { flex: 0 0 auto; width: 1rem; height: 1rem; color: var(--va-ink-3); }
.va-fact span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.va-item-foot { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.9375rem; }
.va-price {
    font-family: var(--va-display);
    font-size: 1.25rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
}
.va-price small { display: block; font-family: var(--va-ui); font-size: 0.6875rem; font-weight: 600; color: var(--va-ink-3); letter-spacing: 0; }

/* ---------- Pills ------------------------------------------------------------------ */

.va-pill {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
    padding: 0.1875rem 0.5rem;
    border-radius: 999px;
    background: var(--va-purple-sf);
    color: var(--va-purple);
    font-size: 0.75rem;
    font-weight: 700;
    white-space: nowrap;
}
.va-pill.is-good { background: var(--va-good-sf); color: var(--va-good); }
.va-pill.is-warn { background: var(--va-warn-sf); color: var(--va-warn); }
.va-pill.is-bad { background: var(--va-bad-sf); color: var(--va-bad); }
.va-pill.is-muted { background: color-mix(in srgb, var(--va-ink-3) 16%, transparent); color: var(--va-ink-2); }

/* ---------- Buttons ------------------------------------------------------------------ */

.va-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.4375rem;
    min-height: 3rem;
    padding: 0 1.125rem;
    border: 1px solid transparent;
    border-radius: 0.8125rem;
    background: var(--va-purple);
    color: var(--va-on-accent);
    font: inherit;
    font-size: 0.9375rem;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.va-btn svg { width: 1.125rem; height: 1.125rem; }
.va-btn:active { transform: translateY(1px); }
.va-btn.is-block { width: 100%; }
.va-btn.is-grow { flex: 1 1 auto; }
.va-btn.is-quiet { background: var(--va-card); border-color: var(--va-line); color: var(--va-ink); }
.va-btn.is-danger { background: var(--va-bad); color: #fff; }
.va-btn[disabled] { opacity: 0.55; cursor: default; }

/* ---------- Segmented control (replaces tabs) ---------------------------------------- */

.va-seg {
    display: flex;
    gap: 0.25rem;
    margin-bottom: 1.125rem;
    padding: 0.25rem;
    border-radius: 0.875rem;
    background: color-mix(in srgb, var(--va-ink-3) 14%, transparent);
    overflow-x: auto;
    scrollbar-width: none;
}
.va-seg::-webkit-scrollbar { display: none; }
.va-seg button, .va-seg a {
    flex: 1 0 auto;
    min-height: 2.5rem;
    padding: 0 0.875rem;
    border: 0;
    border-radius: 0.6875rem;
    background: none;
    color: var(--va-ink-2);
    font: inherit;
    font-size: 0.8125rem;
    font-weight: 600;
    white-space: nowrap;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
}
.va-seg .is-on { background: var(--va-card); color: var(--va-ink); box-shadow: 0 1px 3px rgb(20 16 40 / 0.12); }

/* ---------- Forms (inside sheets and simple screens) --------------------------------- */

.va-field { display: block; margin-bottom: 0.875rem; }
.va-field-label {
    display: block;
    margin-bottom: 0.375rem;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--va-ink-3);
}
.va-input {
    display: flex;
    align-items: center;
    border: 1px solid var(--va-line);
    border-radius: 0.75rem;
    background: var(--va-card);
}
.va-input:focus-within { border-color: var(--va-purple); box-shadow: 0 0 0 3px var(--va-purple-sf); }
.va-input i { padding: 0 0.125rem 0 0.8125rem; font-style: normal; font-weight: 600; color: var(--va-ink-3); }
.va-input input, .va-input textarea, .va-input select {
    flex: 1;
    min-width: 0;
    width: 100%;
    border: 0;
    background: none;
    color: var(--va-ink);
    font: inherit;
    font-size: 16px; /* under 16px, iOS zooms on focus and never zooms back */
    padding: 0.8125rem;
    outline: none;
    border-radius: 0.75rem;
    font-variant-numeric: tabular-nums;
}
.va-input textarea { min-height: 7rem; resize: vertical; font-variant-numeric: normal; line-height: 1.45; }
.va-input select { appearance: none; -webkit-appearance: none; padding-right: 2.25rem; }
.va-input.is-select { position: relative; }
.va-input.is-select::after {
    content: "";
    position: absolute;
    right: 0.9375rem;
    top: 50%;
    width: 0.4375rem;
    height: 0.4375rem;
    border-right: 2px solid var(--va-ink-3);
    border-bottom: 2px solid var(--va-ink-3);
    transform: translateY(-70%) rotate(45deg);
    pointer-events: none;
}
.va-input.has-error { border-color: var(--va-bad); }
.va-field-error { margin-top: 0.375rem; color: var(--va-bad); font-size: 0.8125rem; font-weight: 500; }
.va-field-help { margin-top: 0.375rem; color: var(--va-ink-3); font-size: 0.8125rem; line-height: 1.45; }
.va-field-help.is-block { display: block; }

/* ---------- Sheet ---------------------------------------------------------------------- */

.va-scrim {
    position: fixed;
    inset: 0;
    z-index: 40;
    background: rgb(12 10 20 / 0.45);
}
.va-sheet {
    position: fixed;
    left: 50%;
    bottom: 0;
    z-index: 41;
    width: 100%;
    max-width: var(--va-col);
    max-height: 88dvh;
    overflow-y: auto;
    transform: translateX(-50%);
    padding: 0.5rem 1rem calc(1.25rem + var(--va-safe-b));
    border-radius: 1.375rem 1.375rem 0 0;
    background: var(--va-card);
}
.va-grip { width: 2.375rem; height: 0.25rem; margin: 0.25rem auto 0.875rem; border-radius: 999px; background: var(--va-line); }
.va-sheet h2 {
    margin: 0 0 0.25rem;
    font-family: var(--va-display);
    font-size: 1.1875rem;
    font-weight: 700;
    letter-spacing: -0.02em;
}
.va-sheet-note { margin: 0 0 1rem; color: var(--va-ink-2); font-size: 0.8125rem; line-height: 1.5; }
.va-sheet-actions { display: flex; gap: 0.625rem; margin-top: 1.125rem; }
.va-sheet-actions .va-btn { flex: 1; }
.va-sheet-enter { transition: transform 0.28s cubic-bezier(0.32, 0.72, 0, 1); }
.va-sheet-from { transform: translate(-50%, 102%); }
.va-sheet-to { transform: translate(-50%, 0); }

/* ---------- Empty states -------------------------------------------------------------- */

.va-empty { padding: 2.25rem 1.5rem 2rem; text-align: center; }
.va-empty-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 3.25rem;
    height: 3.25rem;
    margin-bottom: 0.875rem;
    border-radius: 50%;
    background: var(--va-purple-sf);
    color: var(--va-purple);
}
.va-empty-icon svg { width: 1.5rem; height: 1.5rem; }
.va-empty h3 { margin: 0 0 0.375rem; font-family: var(--va-display); font-size: 1.0625rem; font-weight: 700; }
.va-empty p { margin: 0 auto; max-width: 18rem; color: var(--va-ink-2); font-size: 0.875rem; line-height: 1.5; }
.va-empty .va-btn { margin-top: 1rem; }

/* ---------- Detail key/value list -------------------------------------------------------- */

.va-kv { display: flex; align-items: center; gap: 0.75rem; min-height: 3.125rem; padding: 0.625rem 1rem; border-top: 1px solid var(--va-line); }
.va-kv:first-child { border-top: 0; }
.va-kv-label { flex: 0 0 auto; color: var(--va-ink-2); font-size: 0.875rem; }
.va-kv-value { flex: 1 1 auto; min-width: 0; text-align: right; font-size: 0.9375rem; font-weight: 600; overflow-wrap: anywhere; }
.va-kv-value a { color: var(--va-purple); text-decoration: none; }

/* Contact buttons on a purchased lead: the reason the venue paid. */
.va-contact { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.625rem; margin-bottom: 1.375rem; }
.va-contact a {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.375rem;
    padding: 0.875rem 0.5rem;
    border-radius: var(--va-radius);
    background: var(--va-card);
    color: var(--va-purple);
    font-size: 0.8125rem;
    font-weight: 600;
    text-decoration: none;
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.05);
}
.va-contact a svg { width: 1.375rem; height: 1.375rem; }

/* ---------- Tab bar (rendered by the panel's BODY_END hook) ------------------------------ */

.ph-tabbar {
    position: fixed;
    left: 50%;
    bottom: 0;
    z-index: 30;
    display: flex;
    width: 100%;
    max-width: var(--va-col);
    transform: translateX(-50%);
    padding-bottom: var(--va-safe-b);
    border-top: 1px solid var(--va-line);
    background: color-mix(in srgb, var(--va-card) 94%, transparent);
    -webkit-backdrop-filter: saturate(1.8) blur(12px);
    backdrop-filter: saturate(1.8) blur(12px);
}
@media (min-width: 36rem) {
    .ph-tabbar { border-left: 1px solid var(--va-line); border-right: 1px solid var(--va-line); border-radius: 1rem 1rem 0 0; }
}

.va-toast-space { height: 0.25rem; }

@media (prefers-reduced-motion: reduce) {
    .va-sheet-enter, .va-switch, .va-switch::after { transition: none; }
}

/* ---------- Room editor additions ------------------------------------------------------ */

[x-cloak] { display: none !important; }

.va-note.is-bad { background: var(--va-bad-sf, #fdecec); color: var(--va-bad); }

/* An error printed under a card rather than inside it. */
.va-card + .va-row-error,
.va-group > .va-row-error { margin: 0.5rem 0 0; padding: 0 1rem; }

/* A row whose content stacks under its label (styles chips). */
.va-row.is-stack { display: block; padding: 0.875rem 0 0; }
.va-row.is-stack { padding-top: 0.9375rem; }
/* Sub-heading inside a card (STYLES ... 1 of 2 chosen), as the group heads. */
.va-row.is-stack > .va-row-label {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    padding: 0 1rem;
    color: var(--va-ink-3);
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
}
.va-row.is-stack > .va-row-label small { display: inline; margin: 0; font-size: 0.75rem; font-weight: 500; letter-spacing: 0; text-transform: none; }
.va-row.is-stack > .va-chips { padding-top: 0.625rem; }

/* "Make cover" on the second photo: same pill as the Cover tag, but tappable. */
button.va-tile-tag.is-action { border: 0; font: inherit; font-size: 0.6875rem; font-weight: 700; cursor: pointer; }

/* The one primary action in the app bar (Save / Add). */
.va-appbar-btn.is-strong { font-weight: 700; }

/* ---------- Toasts ---------------------------------------------------------------------
   Filament notifications become app toasts: a dark pill centred above the tab bar,
   sliding up, instead of a white card flying in at the top right. */

.va-body .fi-no {
    inset: auto 0 calc(var(--va-tabbar-h) + var(--va-safe-b) + 0.75rem) 0 !important;
    align-items: center !important;
    flex-direction: column !important;
    justify-content: flex-end !important;
    gap: 0.5rem;
    padding: 0 1rem;
}
.va-body .va-no-tabbar ~ .fi-no,
.va-body:has(.va-no-tabbar) .fi-no { bottom: calc(var(--va-safe-b) + 1rem) !important; }
.va-body .fi-no .fi-no-notification:not(.fi-inline) {
    width: 100%;
    max-width: calc(var(--va-col) - 2rem);
    gap: 0.625rem;
    padding: 0.75rem 0.75rem 0.75rem 0.875rem;
    border-radius: 0.875rem;
    background: #1f1b2b;
    box-shadow: 0 12px 32px rgb(12 10 20 / 0.28);
    --tw-ring-shadow: 0 0 #0000;
}
.va-body .fi-no .fi-no-notification.fi-transition-enter-start { translate: 0 1rem !important; }
.va-body .fi-no .fi-no-notification-main { margin-top: 0; align-self: center; gap: 0.25rem; }
.va-body .fi-no .fi-no-notification-title { color: #fff; font-size: 0.875rem; font-weight: 600; }
.va-body .fi-no .fi-no-notification-body { color: rgb(255 255 255 / 0.72); font-size: 0.8125rem; }
.va-body .fi-no .fi-no-notification .fi-icon-btn { color: rgb(255 255 255 / 0.55); }

/* ---------- Photo library sheet --------------------------------------------------------- */

.va-library {
    position: fixed;
    inset: 0;
    z-index: 60;
    display: flex;
    align-items: flex-end;
    justify-content: center;
}
.va-library > .va-scrim { z-index: 0; }
.va-lib {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    width: 100%;
    max-width: var(--va-col);
    height: 92dvh;
    border-radius: 1.375rem 1.375rem 0 0;
    background: var(--va-ground);
    overflow: hidden;
    animation: va-lib-up 0.28s cubic-bezier(0.32, 0.72, 0, 1);
}
@keyframes va-lib-up { from { transform: translateY(100%); } }
.va-lib-bar {
    display: grid;
    grid-template-columns: 5.5rem 1fr 5.5rem;
    align-items: center;
    min-height: 3.5rem;
    padding: 0.25rem 0.5rem;
    border-bottom: 1px solid var(--va-line);
    background: var(--va-card);
}
.va-lib-bar .va-appbar-btn:last-of-type { justify-self: end; }
.va-lib-file { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.va-lib-tools { padding: 0.75rem 1rem 0.25rem; }
.va-lib-search { height: 2.5rem; }
.va-lib-search .va-i { width: 1.125rem; height: 1.125rem; color: var(--va-ink-3); flex: none; }
.va-lib-search input::-webkit-search-cancel-button { opacity: 0.5; }
.va-lib-hint { margin: 0.625rem 0.25rem 0; color: var(--va-ink-2); font-size: 0.8125rem; }
.va-lib-body { position: relative; flex: 1; min-height: 0; overflow-y: auto; padding: 0.75rem 1rem 1rem; -webkit-overflow-scrolling: touch; }
.va-lib-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.375rem; }
.va-lib-tile { position: relative; aspect-ratio: 1; border-radius: 0.625rem; overflow: hidden; background: var(--va-purple-sf); }
.va-lib-pick { display: block; width: 100%; height: 100%; padding: 0; border: 0; background: none; cursor: pointer; }
.va-lib-pick img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.15s ease; }
.va-lib-tile.is-picked .va-lib-pick img { transform: scale(0.9); border-radius: 0.5rem; }
.va-lib-tile.is-picked { background: var(--va-purple); }
.va-lib-tile.is-chosen .va-lib-pick { cursor: default; }
.va-lib-tile.is-chosen .va-lib-pick img { opacity: 0.55; }
.va-lib-num {
    position: absolute;
    top: 0.375rem;
    right: 0.375rem;
    display: grid;
    place-items: center;
    width: 1.5rem;
    height: 1.5rem;
    border: 2px solid #fff;
    border-radius: 50%;
    background: var(--va-purple);
    color: #fff;
    font-size: 0.75rem;
    font-weight: 800;
    pointer-events: none;
}
.va-lib-inroom {
    position: absolute;
    left: 0.3125rem;
    right: 0.3125rem;
    bottom: 0.3125rem;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.1875rem;
    padding: 0.25rem 0.25rem;
    border: 0;
    border-radius: 999px;
    background: var(--va-good);
    color: #fff;
    font: inherit;
    font-size: 0.6875rem;
    font-weight: 700;
    cursor: pointer;
}
.va-lib-inroom .va-i { width: 0.75rem; height: 0.75rem; stroke-width: 3; }
.va-lib-inroom span { font-weight: 500; opacity: 0.85; }
.va-lib-del {
    position: absolute;
    top: 0.375rem;
    right: 0.375rem;
    display: grid;
    place-items: center;
    width: 2rem;
    height: 2rem;
    border: 0;
    border-radius: 50%;
    background: var(--va-bad);
    color: #fff;
    cursor: pointer;
}
.va-lib-del .va-i { width: 1rem; height: 1rem; }
.va-lib-uploading {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.375rem;
    background: rgb(242 240 246 / 0.94);
    color: var(--va-ink-2);
    font-size: 0.875rem;
}
.va-lib-uploading strong { color: var(--va-ink); font-size: 0.9375rem; }
.va-spinner {
    width: 2.25rem;
    height: 2.25rem;
    margin-bottom: 0.5rem;
    border: 3px solid var(--va-line);
    border-top-color: var(--va-purple);
    border-radius: 50%;
    animation: va-spin 0.8s linear infinite;
}
@keyframes va-spin { to { transform: rotate(360deg); } }
.va-lib-foot {
    display: flex;
    gap: 0.625rem;
    padding: 0.75rem 1rem calc(0.75rem + var(--va-safe-b));
    border-top: 1px solid var(--va-line);
    background: var(--va-card);
}
.va-lib-foot .va-btn.is-quiet { flex: 0 0 auto; }
.va-lib-foot .va-btn.is-grow { flex: 1; }
label.va-btn { cursor: pointer; }
.va-lib-search .va-i { margin-left: 0.75rem; }

/* ---------- Rooms list ------------------------------------------------------------------ */

.va-rooms { display: grid; gap: 0.75rem; }
.va-card + .va-card.va-room { margin-top: 0; }
.va-room-link {
    display: grid;
    grid-template-columns: 4.75rem 1fr auto;
    align-items: center;
    gap: 0.875rem;
    padding: 0.875rem 0.75rem 0.875rem 0.875rem;
    color: inherit;
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
}
.va-room-link:active { background: var(--va-ground); }
.va-room-photo {
    display: grid;
    place-items: center;
    width: 4.75rem;
    aspect-ratio: 1;
    border-radius: 0.75rem;
    overflow: hidden;
    background: var(--va-purple-sf);
    color: var(--va-purple);
}
.va-room-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.va-room-photo .va-i { width: 1.5rem; height: 1.5rem; opacity: 0.7; }
.va-room-main { min-width: 0; }
.va-room-main .va-item-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.va-room-facts { display: flex; flex-wrap: wrap; gap: 0.25rem 0.875rem; margin-top: 0.4375rem; }
.va-room-facts .va-fact { font-size: 0.8125rem; color: var(--va-ink-2); }
.va-room-facts .va-fact svg { width: 0.9375rem; height: 0.9375rem; }
.va-room-warn {
    display: flex;
    align-items: center;
    gap: 0.4375rem;
    margin: 0 0.875rem 0.75rem;
    padding: 0.5rem 0.625rem;
    border-radius: 0.625rem;
    background: var(--va-warn-sf);
    color: var(--va-warn);
    font-size: 0.75rem;
    font-weight: 600;
}
.va-room-warn .va-i { width: 0.9375rem; height: 0.9375rem; flex: none; }
.va-room-switch { min-height: 3rem; }
.va-room-switch .va-row-label { flex: 1; font-size: 0.875rem; color: var(--va-ink-2); }
.va-add-more { margin-top: 1rem; }
.va-footnote { margin: 1rem 0.25rem 0; color: var(--va-ink-3); font-size: 0.8125rem; text-align: center; }

/* A note that carries its own call to action (Credit Card Required). */
.va-note-action > div { display: grid; gap: 0.25rem; }
.va-note-action strong { color: inherit; font-size: 0.875rem; }
.va-note-action span { color: var(--va-ink-2); }
.va-note-action .va-btn { justify-self: start; min-height: 2.5rem; margin-top: 0.5rem; padding: 0 1rem; font-size: 0.875rem; }

/* ---------- Leads ------------------------------------------------------------------------- */

.va-balance {
    display: inline-flex;
    align-items: center;
    gap: 0.3125rem;
    min-height: 2.25rem;
    padding: 0 0.6875rem;
    border-radius: 999px;
    background: var(--va-card);
    color: var(--va-ink);
    font-family: var(--va-display);
    font-size: 0.875rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    text-decoration: none;
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.08);
}
.va-balance .va-i { width: 1rem; height: 1rem; color: var(--va-purple); }
.va-lead { padding: 1rem; }
.va-card.va-lead + .va-card.va-lead { margin-top: 0.75rem; }
.va-lead-head { display: grid; grid-template-columns: auto 1fr auto; align-items: start; gap: 0.75rem; }
.va-lead-icon {
    display: grid;
    place-items: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 0.75rem;
    background: var(--va-purple-sf);
    color: var(--va-purple);
}
.va-lead-icon .va-i { width: 1.25rem; height: 1.25rem; }
.va-lead-title { min-width: 0; }
.va-lead .va-facts { margin-top: 0.9375rem; padding-top: 0.875rem; border-top: 1px solid var(--va-line); }
.va-lead-progress {
    margin-top: 0.75rem;
    padding: 0.625rem 0.75rem;
    border-radius: 0.75rem;
    background: var(--va-purple-sf);
}
.va-lead-progress strong { display: block; color: var(--va-ink); font-size: 0.8125rem; font-weight: 700; }
.va-lead-progress span { display: block; margin-top: 0.125rem; color: var(--va-ink-3); font-size: 0.6875rem; }
.va-lead-foot { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.9375rem; }
.va-lead-foot .va-price { margin-right: auto; }
.va-lead-foot .va-price s { font-weight: 500; }
.va-lead-foot .va-btn { min-width: 5.5rem; }
.va-lead-ends { display: inline-flex; align-items: center; gap: 0.25rem; color: var(--va-warn); font-size: 0.75rem; font-weight: 600; white-space: nowrap; }
.va-lead-ends .va-i { width: 0.875rem; height: 0.875rem; }
.va-sheet-sum { margin-bottom: 0.25rem; border: 1px solid var(--va-line); box-shadow: none; }
.va-kv-value.is-bad { color: var(--va-bad); }
.va-fact.is-wide { grid-column: 1 / -1; }
.va-fact.is-wide span { white-space: normal; }

/* ---------- Purchased leads -------------------------------------------------------------- */

.va-warn-text { color: var(--va-warn); font-weight: 600; }
.va-search { height: 2.75rem; margin-bottom: 0.75rem; }
.va-search .va-i { width: 1.125rem; height: 1.125rem; margin-left: 0.8125rem; color: var(--va-ink-3); flex: none; }
.va-seg em {
    margin-left: 0.3125rem;
    padding: 0 0.3125rem;
    border-radius: 999px;
    background: color-mix(in srgb, var(--va-ink-3) 18%, transparent);
    font-size: 0.6875rem;
    font-style: normal;
    font-weight: 700;
}
.va-avatar.is-soft { background: var(--va-purple-sf); color: var(--va-purple); }
.va-person { display: flex; align-items: center; border-top: 1px solid var(--va-line); }
.va-person:first-child { border-top: 0; }
.va-person-link {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex: 1;
    min-width: 0;
    padding: 0.8125rem 0.5rem 0.8125rem 1rem;
    color: inherit;
    text-decoration: none;
}
.va-person-link:active { background: var(--va-ground); }
/* A button at the row's end (Home's Approve) keeps the card's inset, as the call button does. */
.va-person > .va-btn { flex: none; margin-right: 1rem; }
.va-person-link .va-avatar { display: grid; place-items: center; flex: none; width: 2.75rem; height: 2.75rem; margin: 0; font-size: 0.9375rem; cursor: inherit; }
.va-person-main { display: grid; gap: 0.125rem; min-width: 0; justify-items: start; }
.va-person-name { font-size: 0.9375rem; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.va-person-sub { color: var(--va-ink-2); font-size: 0.8125rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.va-person-main .va-pill { margin-top: 0.25rem; }
.va-person-call {
    display: grid;
    place-items: center;
    flex: none;
    width: 2.75rem;
    height: 2.75rem;
    margin-right: 0.75rem;
    border-radius: 50%;
    background: var(--va-good-sf);
    color: var(--va-good);
}
.va-person-call .va-i { width: 1.25rem; height: 1.25rem; }
.va-contact a[aria-disabled="true"] { opacity: 0.4; pointer-events: none; }
.va-status-chips { border-bottom: 1px solid var(--va-line); }
.va-quote { margin-top: 0.75rem; padding: 0.875rem 1rem; }
.va-quote p { margin: 0.375rem 0 0; font-size: 0.9375rem; line-height: 1.5; white-space: pre-line; }
.va-row-value.is-hint { color: var(--va-ink-3); }

/* ---------- Home ------------------------------------------------------------------------- */

.va-avatar-link { display: grid; place-items: center; margin: 0; text-decoration: none; }
.va-balance-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.625rem;
    padding: 1.125rem 1.125rem 1.125rem 1.25rem;
    border-radius: var(--va-radius);
    background: linear-gradient(135deg, #7c3aed, #5b21b6);
    color: #fff;
    text-decoration: none;
    box-shadow: 0 8px 24px rgb(124 58 237 / 0.25);
}
.va-balance-card .va-stat-label, .va-balance-card .va-stat-sub { color: rgb(255 255 255 / 0.8); }
.va-balance-num {
    margin-top: 0.25rem;
    font-family: var(--va-display);
    font-size: 2.125rem;
    font-weight: 800;
    letter-spacing: -0.03em;
    line-height: 1.05;
    font-variant-numeric: tabular-nums;
}
.va-btn.is-light { flex: none; min-height: 2.5rem; background: #fff; color: var(--va-purple); }
.va-group-link { color: var(--va-purple); font-size: 0.75rem; font-weight: 600; letter-spacing: 0; text-transform: none; text-decoration: none; }
a.va-row { color: inherit; text-decoration: none; }

/* ---------- Credits --------------------------------------------------------------------- */

.va-balance-card.is-static { box-shadow: 0 8px 24px rgb(124 58 237 / 0.2); }
.va-amounts { display: grid; grid-template-columns: 1fr 1fr; gap: 0.625rem; }
.va-amount { position: relative; display: block; }
.va-amount input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.va-amount span {
    display: block;
    padding: 0.875rem 1rem;
    border: 2px solid transparent;
    border-radius: var(--va-radius);
    background: var(--va-card);
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.05);
}
.va-amount strong { display: block; font-family: var(--va-display); font-size: 1.5rem; font-weight: 800; letter-spacing: -0.02em; }
.va-amount small { color: var(--va-ink-3); font-size: 0.75rem; font-weight: 600; }
.va-amount input:checked + span { border-color: var(--va-purple); background: var(--va-purple-sf); }
.va-amount input:focus-visible + span { outline: 2px solid var(--va-purple); outline-offset: 2px; }
.va-amount-buy { margin-top: 0.875rem; }
/* In a sheet the cards are on the card colour itself: give them an edge. */
.va-sheet .va-amount span { border-color: var(--va-line); box-shadow: none; }
.va-amount-buy + .va-row-error { margin: 0; padding: 0.5rem 0 0; }
.va-buy-loading { display: grid; place-items: center; min-height: 12rem; color: var(--va-ink-3); font-size: 0.875rem; }
.va-note-close { flex: none; display: grid; place-items: center; width: 1.75rem; height: 1.75rem; padding: 0; border: 0; background: none; color: inherit; cursor: pointer; }
.va-note-close .va-i { width: 1rem; height: 1rem; }
.va-cardmark {
    display: grid;
    place-items: center;
    flex: none;
    width: 3rem;
    height: 2rem;
    border-radius: 0.375rem;
    box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.08);
    color: #fff;
    font-size: 0.5625rem;
    font-weight: 800;
    letter-spacing: 0.04em;
}
.va-cardmark svg { width: 2rem; height: 1.25rem; }
.va-row-icon.is-good { background: var(--va-good-sf); color: var(--va-good); }
.va-tx .va-row-label { flex: 1 1 auto; }
.va-tx-amt { flex: none; display: grid; justify-items: end; gap: 0.125rem; font-variant-numeric: tabular-nums; }
.va-tx-amt strong { font-size: 0.9375rem; }
.va-tx-amt small { color: var(--va-ink-3); font-size: 0.75rem; }

/* ---------- Venue details -------------------------------------------------------------- */

.va-row-icon.is-pdf { background: #fdecec; color: #dc2626; }
label.va-row-action { display: block; cursor: pointer; }
.va-row-action.is-busy { color: var(--va-ink-3); pointer-events: none; }
.va-row-action.is-danger { color: var(--va-bad); }
.va-row-sub { padding: 0 1rem 0.875rem 3.625rem; margin-top: -0.375rem; color: var(--va-ink-3); font-size: 0.75rem; line-height: 1.45; }
.va-pick-list { display: grid; max-height: 50dvh; overflow-y: auto; margin: 0 -1rem; border-top: 1px solid var(--va-line); }
.va-pick { display: flex; align-items: center; gap: 0.75rem; min-height: 3rem; padding: 0.5rem 1rem; border-bottom: 1px solid var(--va-line); cursor: pointer; }
.va-pick input { position: absolute; opacity: 0; pointer-events: none; }
.va-pick span { flex: 1; font-size: 0.9375rem; }
.va-pick .va-i { width: 1.25rem; height: 1.25rem; color: var(--va-purple); visibility: hidden; }
.va-pick input:checked ~ .va-i { visibility: visible; }
.va-pick input:checked ~ span { font-weight: 700; color: var(--va-purple); }
.va-field-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
.va-footnote.is-left { text-align: left; margin-top: 0.5rem; }
.va-pick-covers { margin: 0.75rem 0 0; }

/* ---------- Profile ------------------------------------------------------------------------ */

.va-profile-hero { padding: 1rem 0 1.5rem; text-align: center; }
.va-avatar.is-big {
    display: inline-grid;
    place-items: center;
    width: 4.5rem;
    height: 4.5rem;
    margin: 0 0 0.75rem;
    background: var(--va-purple);
    color: #fff;
    font-family: var(--va-display);
    font-size: 1.75rem;
    font-weight: 800;
    cursor: default;
}
.va-profile-hero h1 { margin: 0; font-family: var(--va-display); font-size: 1.375rem; font-weight: 800; letter-spacing: -0.02em; }
.va-profile-hero p { margin: 0.25rem 0 0; color: var(--va-ink-2); font-size: 0.875rem; }
.va-row-icon.is-bad { background: var(--va-bad-sf); color: var(--va-bad); }

/* ---------- Onboarding --------------------------------------------------------------------- */

.va-steps { display: grid; grid-template-columns: 1fr 1fr; gap: 0.375rem; margin: 0.25rem 0.25rem 0.875rem; }
.va-steps span { height: 0.25rem; border-radius: 999px; background: var(--va-line); }
.va-steps .is-done { background: color-mix(in srgb, var(--va-purple) 45%, transparent); }
.va-steps .is-on { background: var(--va-purple); }
.va-step-intro { margin: 0 0.25rem 1.25rem; color: var(--va-ink-2); font-size: 0.875rem; line-height: 1.5; }
.va-link-btn { flex: none; padding: 0.375rem 0.25rem; border: 0; background: none; color: var(--va-purple); font: inherit; font-size: 0.8125rem; font-weight: 600; cursor: pointer; }
.va-link-btn.is-danger { color: var(--va-bad); }
.va-row-label .va-pill { margin-left: 0.25rem; font-style: normal; font-size: 0.6875rem; }
.va-onboard-actions { display: grid; gap: 0.625rem; margin-top: 0.5rem; }
.va-scrim.is-closing, .va-sheet.is-closing { pointer-events: none; }
.va-empty-icon.is-good { background: var(--va-good-sf); color: var(--va-good); }
.va-done { margin-top: 1.5rem; }
.va-pad .va-field:last-child { margin-bottom: 0; }

/* ---------- Sign in, register, password reset ----------------------------------------------
   Filament's own auth pages. Empty forms are typed into, so they keep real inputs;
   these rules give them the app's ground, type, cards and buttons, in the same
   centred column as every other screen. */

.fi-simple-layout { background: var(--va-ground) !important; }
.fi-simple-main {
    width: 100% !important;
    max-width: var(--va-col) !important;
    margin: 0 auto !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    --tw-ring-shadow: 0 0 #0000;
}
.fi-simple-header-heading {
    font-family: var(--va-display);
    font-size: 1.75rem !important;
    font-weight: 800 !important;
    letter-spacing: -0.03em;
    color: var(--va-ink);
}
.fi-simple-header-subheading { color: var(--va-ink-2) !important; font-size: 0.875rem !important; }
.fi-simple-page .fi-section {
    border-radius: var(--va-radius) !important;
    background: var(--va-card) !important;
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.05) !important;
    --tw-ring-shadow: 0 0 #0000;
}
.fi-simple-page .fi-section-header-heading {
    color: var(--va-ink-3) !important;
    font-size: 0.6875rem !important;
    font-weight: 700 !important;
    letter-spacing: 0.09em;
    text-transform: uppercase;
}
.fi-simple-page .fi-fo-field-label-content { color: var(--va-ink-2); font-size: 0.8125rem; font-weight: 600; }
/* Let the control determine its wrapper height: a 48px wrapper around a
   36px input leaves empty space below the text. Mobile inputs retain their
   44px minimum height from venue-mobile.css. */
.fi-simple-page .fi-input-wrp { min-height: 0; border-radius: 0.75rem !important; background: var(--va-card) !important; }
.fi-simple-page .fi-input-wrp:focus-within { box-shadow: 0 0 0 3px var(--va-purple-sf), 0 0 0 1px var(--va-purple) !important; }
.fi-simple-page .fi-btn { min-height: 3rem; border-radius: 0.8125rem !important; font-weight: 600 !important; }
.fi-simple-page a.ph-forgot {
    display: inline-flex;
    align-items: center;
    min-height: 2.75rem;
    color: var(--va-purple);
    font-size: 1rem;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 0.18em;
}
.fi-simple-page a.ph-forgot:hover { color: var(--va-purple-dk); }

/* ---------- Tab bar items and the More sheet, at every width ------------------------------
   venue-mobile.css styles these only below 768px; the app uses them everywhere. */

.ph-tabbar { height: calc(var(--va-tabbar-h) + var(--va-safe-b)); }
.ph-tabbar-item {
    position: relative;
    flex: 1 1 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.1875rem;
    padding: 0.5rem 0 0;
    border: 0;
    background: none;
    color: var(--va-ink-3);
    font: inherit;
    font-size: 0.6875rem;
    font-weight: 600;
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
}
.ph-tabbar-item svg { width: 1.5rem; height: 1.5rem; }
.ph-tabbar-item[aria-current="page"] { color: var(--va-purple); }
.ph-tabbar-item[aria-current="page"]::after {
    content: "";
    position: absolute;
    top: 0;
    width: 1.75rem;
    height: 3px;
    border-radius: 0 0 3px 3px;
    background: var(--va-purple);
}
.ph-tabbar-item:active { background: var(--va-purple-sf); }

/* The strip is purple with white icons, in both modes, so the navigation stands
   apart from the page. The current tab is solid white with a white marker; the
   rest are white at 88% (4.5:1 on the light purple). The tablet rule's side
   borders go transparent. (nav. qualifies the selector above venue-mobile.css.) */
nav.ph-tabbar {
    border-top: 0;
    border-color: transparent;
    background: #7c3aed;
    box-shadow: 0 -1px 0 rgb(0 0 0 / 0.08);
}
.dark nav.ph-tabbar { background: #5b21b6; }
nav.ph-tabbar .ph-tabbar-item { color: rgb(255 255 255 / 0.88); }
nav.ph-tabbar .ph-tabbar-item[aria-current="page"] { color: #fff; }
nav.ph-tabbar .ph-tabbar-item[aria-current="page"]::after { background: #fff; }
nav.ph-tabbar .ph-tabbar-item:active { background: rgb(255 255 255 / 0.14); }
nav.ph-tabbar .ph-tabbar-badge { box-shadow: 0 0 0 2px #7c3aed; }
.dark nav.ph-tabbar .ph-tabbar-badge { box-shadow: 0 0 0 2px #5b21b6; }
.ph-tabbar-badge {
    position: absolute;
    top: 0.3125rem;
    left: 50%;
    margin-left: 0.3125rem;
    min-width: 1.125rem;
    height: 1.125rem;
    padding-inline: 0.25rem;
    border-radius: 999px;
    background: #dc2626;
    color: #fff;
    font-size: 0.625rem;
    line-height: 1.125rem;
    text-align: center;
}
.ph-sheet-backdrop { position: fixed; inset: 0; z-index: 31; background: rgb(12 10 20 / 0.45); }
.ph-sheet {
    position: fixed;
    left: 50%;
    bottom: 0;
    z-index: 32;
    width: 100%;
    max-width: var(--va-col);
    margin-left: calc(var(--va-col) / -2);
    padding: 0.5rem 0.75rem calc(0.75rem + var(--va-safe-b));
    border-radius: 1.375rem 1.375rem 0 0;
    background: var(--va-card);
    box-shadow: 0 -8px 30px rgb(0 0 0 / 0.18);
    transition: transform 0.22s cubic-bezier(0.32, 0.72, 0, 1);
}
@media (max-width: 35rem) { .ph-sheet { left: 0; margin-left: 0; } }
.ph-sheet-closed { transform: translateY(100%); }
.ph-sheet-grip { width: 2.375rem; height: 0.25rem; margin: 0.375rem auto 0.75rem; border-radius: 999px; background: var(--va-line); }
.ph-sheet-item {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    width: 100%;
    min-height: 3.25rem;
    padding: 0 0.75rem;
    border: 0;
    border-radius: 0.75rem;
    background: transparent;
    color: var(--va-ink);
    font: inherit;
    font-size: 1rem;
    font-weight: 500;
    text-align: left;
    text-decoration: none;
    cursor: pointer;
}
.ph-sheet-item svg { flex: none; width: 1.375rem; height: 1.375rem; color: var(--va-purple); }
.ph-sheet-item:active { background: var(--va-purple-sf); }
.ph-sheet-item-danger, .ph-sheet-item-danger svg { color: var(--va-bad); }
.ph-sheet-cancel {
    width: 100%;
    min-height: 3rem;
    margin-top: 0.5rem;
    border: 0;
    border-radius: 0.75rem;
    background: var(--va-ground);
    color: var(--va-ink-2);
    font: inherit;
    font-size: 1rem;
    font-weight: 600;
    cursor: pointer;
}
@media (prefers-reduced-motion: reduce) { .ph-sheet { transition: none; } }
.va-logo-on-dark { display: none; }
.dark .va-logo-on-light { display: none; }
.dark .va-logo-on-dark { display: block; }
.va-signout { margin-top: 1.25rem; text-align: center; }
.va-signout .va-link-btn { color: var(--va-ink-3); }
.ph-sheet-closed { pointer-events: none; }
.va-row .fi-theme-switcher { flex: none; margin-left: auto; }

/* Toasts sit above the tab bar (30) but below a sheet's scrim (40): Filament puts
   them at 50, where a toast lands on a sheet's Done button and takes the tap. */
.va-body .fi-no { z-index: 35; }

/* Location picker: the radio is invisible, so the row shows keyboard focus. */
.va-pick:focus-within { outline: 2px solid var(--va-purple); outline-offset: -2px; }

/* The More sheet sits with the other sheets, above toasts (35): a toast must
   never cover "Your profile" or "Sign out". */
.ph-sheet-backdrop { z-index: 40; }
.ph-sheet { z-index: 41; }

/* Screens without a tab bar (onboarding) leave room under the last button for a
   toast, which sits 1rem from the bottom there. */
.va-app.va-no-tabbar { padding-bottom: calc(var(--va-safe-b) + 8.5rem); }

/* Dark mode: keep button text readable (4.5:1). The light button keeps a deep
   purple label, and danger uses a darker red than the dark-mode token. */
.dark .va-btn.is-light { background: #fff; color: #5b21b6; }
.dark .va-btn.is-danger { background: #dc2626; color: #fff; }

/* ---------- Phone/tablet vs desktop (1024px) ----------------------------------------------
   Phones and tablets get this file's layout. From 1024px venue-desktop.css lays the same
   markup out as desktop pages. A few pieces exist for one side only. */

@media (max-width: 1023.98px) {
    .va-d-only, .va-topnav { display: none !important; }
}
@media (min-width: 1024px) {
    .va-m-only { display: none !important; }
}

/* Labels on lead facts are a desktop thing; the phone shows icon + value. */
.va-fact-label { display: none; }
.va-muted { color: var(--va-ink-3); }
.va-btn.is-sm { min-height: 2.125rem; padding: 0 0.875rem; font-size: 0.8125rem; border-radius: 0.5rem; }

/* Room editor on a phone: the desktop columns dissolve (display: contents) so the
   sections run in one column, photos first. */
.va-cols.is-editor { display: flex; flex-direction: column; }
.va-cols.is-editor > .va-col-main,
.va-cols.is-editor > .va-col-side { display: contents; }
.va-cols.is-editor .va-order-first { order: -1; }

/* ---------- Install the app (components/va/install-card, install-guide) -------------------- */

/* On .va-card: its surface, plus a faint purple ring. */
.va-install-card {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 0.75rem 0.875rem;
    align-items: center;
    margin-bottom: 1rem;
    padding: 0.875rem 1rem;
    box-shadow: 0 1px 2px rgb(20 16 40 / 0.05), inset 0 0 0 1px var(--va-purple-sf);
}
.va-install-icon { width: 3rem; height: 3rem; border-radius: 0.75rem; box-shadow: 0 0 0 1px var(--va-line); }
.va-install-text b { display: block; font-size: 0.9375rem; }
.va-install-text span { display: block; margin-top: 0.125rem; color: var(--va-ink-2); font-size: 0.8125rem; line-height: 1.4; }
.va-install-card .va-install-actions { grid-column: 1 / -1; display: flex; align-items: center; justify-content: flex-end; gap: 0.75rem; }

/* The guide: a title and close, progress, a picture of just the control to
   tap, what to tap (the control drawn as Safari shows it), a hint, Back/Next. */
.va-install-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }
.va-install-head h2 { margin: 0; }
.va-install-close { display: grid; place-items: center; flex: none; width: 2.25rem; height: 2.25rem; padding: 0; border: 0; border-radius: 50%; background: var(--va-ground); color: var(--va-ink-2); cursor: pointer; }
.va-install-close .va-i { width: 1.125rem; height: 1.125rem; }
.va-install-progress { display: grid; gap: 0.25rem; margin: 0.5rem 0 0.875rem; }
.va-install-progress small { color: var(--va-ink-2); font-size: 0.75rem; font-weight: 600; }
.va-install-dots { display: flex; gap: 0.125rem; margin-left: -0.375rem; }
/* 24px targets around small dots; the current step is a longer bar. */
.va-install-dots button { width: 1.5rem; height: 1.5rem; padding: 0; border: 0; background: none; cursor: pointer; display: grid; place-items: center; }
.va-install-dots button::before { content: ""; display: block; width: 0.375rem; height: 0.375rem; border-radius: 999px; background: var(--va-line); transition: width 0.2s; }
.va-install-dots button.is-on::before { width: 1.25rem; background: var(--va-purple); }
/* The pictures are of Safari, which is light: a light frame in either mode. */
.va-install-picture {
    display: grid;
    place-items: center;
    overflow: hidden;
    border: 1px solid var(--va-line);
    border-radius: 1rem;
    background: #fff;
}
/* As tall as the screen allows, so Next stays in view on a short phone or in landscape. */
.va-install-picture img { display: block; width: 100%; height: auto; max-height: 30dvh; aspect-ratio: 8 / 5; object-fit: contain; }
.va-install-say { margin: 1rem 0 0.25rem; font-family: var(--va-display); font-size: 1.0625rem; font-weight: 700; line-height: 1.6; }
.va-install-hint { margin: 0; color: var(--va-ink-2); font-size: 0.8125rem; line-height: 1.45; }
/* A control as Safari draws it: blue, on a pale blue pill. */
.va-ios-chip {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    margin: 0 0.125rem;
    padding: 0.0625rem 0.5rem;
    border-radius: 0.5rem;
    background: #e8f1ff;
    color: #0a68d8;
    font-family: -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
    font-size: 0.9375rem;
    font-weight: 600;
    white-space: nowrap;
    vertical-align: 0.0625rem;
}
.va-ios-chip .va-i { width: 1.0625rem; height: 1.0625rem; stroke-width: 2; }
.dark .va-ios-chip { background: rgb(10 132 255 / 0.2); color: #6cb4ff; }
.va-install-note { margin: 0 0 0.875rem; padding: 0.625rem 0.75rem; border-radius: 0.75rem; background: var(--va-purple-sf); font-size: 0.8125rem; line-height: 1.45; }
.va-install-actions .va-btn.is-unused { visibility: hidden; }
/* Room under the buttons for the arrow at Safari's bar. */
.va-install-sheet.has-pointer { padding-bottom: calc(4.25rem + var(--va-safe-b)); }
.va-install-pointer {
    position: fixed;
    right: 0.875rem;
    bottom: calc(0.5rem + var(--va-safe-b));
    z-index: 42;
    display: grid;
    place-items: center;
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    background: #fbbf24;
    color: #1c1b22;
    box-shadow: 0 4px 14px rgb(0 0 0 / 0.25);
    animation: va-nudge 1.1s ease-in-out infinite;
}
.va-install-pointer .va-i { width: 1.5rem; height: 1.5rem; stroke-width: 2.4; }
@keyframes va-nudge { 50% { transform: translateY(0.375rem); } }
@media (prefers-reduced-motion: reduce) { .va-install-pointer { animation: none; } }
.va-install-list { margin: 0.75rem 0 0; padding-left: 1.25rem; text-align: left; font-size: 0.9375rem; line-height: 1.5; }
.va-install-list li + li { margin-top: 0.5rem; }

/* ---------- Top up prompt (components/va/topup-nudge) ------------------------------------ */
/* An invitation rather than a warning: purple, not the amber of Credit Card Required. */
.va-note.va-topup-nudge { background: var(--va-purple-sf); color: var(--va-purple); }
.va-topup-nudge-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.5rem; }
.va-topup-nudge-actions .va-btn, .va-topup-nudge-actions .va-link-btn { margin-top: 0; }

/* Registration occasions: explicit groups, independent of text wrapping. */
.ph-occasion-groups { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; }
.ph-occasion-column { display: grid; align-content: start; gap: 1rem; }
@media (min-width: 640px) {
    .ph-occasion-groups { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---------- Booked dates (venue-app/booked-dates) ------------------------------------------- */

.va-booked-link { margin-bottom: 0.75rem; }
.va-season-day { margin: 0.875rem 0 0.375rem; }

.va-cal { padding: 0.75rem 0.75rem 0; max-width: 30rem; margin-bottom: 1.375rem; }
/* Native date inputs have a minimum width of their own, which pushes the second one out of the card. */
.va-field-pair .va-field { min-width: 0; }
.va-field-pair .va-input input[type="date"] { min-width: 0; width: 100%; }
.va-cal-head { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; padding-bottom: 0.5rem; }
.va-cal-title {
    text-align: center;
    font-family: var(--va-display);
    font-size: 1.0625rem;
    font-weight: 800;
    letter-spacing: -0.02em;
}
.va-cal-title small {
    display: block;
    font-family: var(--va-ui);
    font-size: 0.75rem;
    font-weight: 500;
    letter-spacing: 0;
    color: var(--va-ink-3);
}
.va-cal-nav {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.75rem;
    height: 2.75rem;
    border: 0;
    border-radius: 0.75rem;
    background: none;
    color: var(--va-ink);
    cursor: pointer;
}
.va-cal-nav svg { width: 1.125rem; height: 1.125rem; }
.va-cal-nav:disabled { opacity: 0.3; cursor: default; }
.va-cal-nav:not(:disabled):active { background: var(--va-purple-sf); }

.va-cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 0.25rem; }
.va-cal-grid.is-busy { opacity: 0.7; pointer-events: none; }
.va-cal-dow {
    margin-bottom: 0.25rem;
    text-align: center;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--va-ink-3);
}
.va-cal-day {
    aspect-ratio: 1;
    min-height: 2.5rem;
    border: 1px solid transparent;
    border-radius: 0.75rem;
    background: none;
    color: var(--va-ink);
    font: inherit;
    font-size: 0.9375rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
}
.va-cal-day:not(:disabled):active { background: var(--va-purple-sf); }
.va-cal-day:disabled { color: var(--va-ink-3); opacity: 0.45; cursor: default; }
.va-cal-day.is-today { border-color: var(--va-purple); }
.va-cal-day.is-booked { background: var(--va-purple); color: var(--va-on-accent); }
.va-cal-day.is-booked:not(:disabled):active { background: var(--va-purple-dk); }

.va-cal-key { display: flex; flex-wrap: wrap; gap: 0.25rem 1.25rem; margin: 0.75rem -0.75rem 0; }
.va-cal-swatch {
    display: inline-block;
    width: 0.75rem;
    height: 0.75rem;
    margin-right: 0.25rem;
    border: 1px solid var(--va-line);
    border-radius: 0.25rem;
    vertical-align: -1px;
}
.va-cal-swatch.is-booked { background: var(--va-purple); border-color: var(--va-purple); }

.va-cal-all { display: flex; align-items: center; gap: 0.625rem; margin: 0 0 0.875rem; font-size: 0.875rem; color: var(--va-ink-2); }
.va-cal-all input { flex: none; width: 1.25rem; height: 1.25rem; accent-color: var(--va-purple); }
