/* _content/Buildessa/Components/Account/Pages/AdminLanding.razor.rz.scp.css */
.admin-cta-hint[b-z5i6v87omx] {
    font-size: 13px;
    color: var(--muted);
    margin: 18px 0 0;
    line-height: 1.55;
}

.admin-cta-hint[b-z5i6v87omx]  a {
    color: var(--accent);
    text-decoration: none;
}

.admin-cta-hint[b-z5i6v87omx]  a:hover {
    text-decoration: underline;
}

.admin-links[b-z5i6v87omx] {
    list-style: none;
    padding: 0;
    margin: 0 0 20px;
}

.admin-links li[b-z5i6v87omx] {
    padding: 10px 12px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 10px;
    margin-bottom: 8px;
}

.admin-links[b-z5i6v87omx]  a {
    color: var(--accent, #c4b5fd);
    text-decoration: none;
    font-weight: 500;
}

.admin-links[b-z5i6v87omx]  a:hover {
    text-decoration: underline;
}

.back[b-z5i6v87omx] {
    text-align: center;
    margin-top: 24px;
}

.back[b-z5i6v87omx]  a {
    color: var(--muted, #8a8a8a);
    font-size: 12px;
    text-decoration: none;
}

.back[b-z5i6v87omx]  a:hover {
    color: var(--accent, #c4b5fd);
}
/* _content/Buildessa/Components/Account/Pages/Consent.razor.rz.scp.css */
.consent[b-udl38q7fqd] { max-width: 30rem; }
.consent h1[b-udl38q7fqd] { font-size: 1.5rem; font-weight: 700; margin: 0 0 10px; }
.lede[b-udl38q7fqd] { color: var(--muted, #6b7280); margin: 0 0 18px; line-height: 1.55; }

.consent-links[b-udl38q7fqd] {
    display: flex; flex-direction: column; gap: 6px;
    margin: 0 0 20px; font-size: .95rem;
}

.consent-check[b-udl38q7fqd] {
    display: flex; align-items: flex-start; gap: 10px;
    padding: 14px 16px; margin: 0 0 6px;
    border: 1px solid var(--border, #d9dfe7); border-radius: 10px;
    background: var(--card-2, #f6f8fb); cursor: pointer; line-height: 1.5;
}
.consent-check input[b-udl38q7fqd] { margin-top: 3px; width: 1rem; height: 1rem; flex: none; }

.consent-error[b-udl38q7fqd] { color: #b8362c; font-size: .88rem; display: block; margin: 4px 2px 0; }

.consent-btn[b-udl38q7fqd] {
    display: block; width: 100%; margin-top: 18px;
    border: none; border-radius: 9px; padding: 12px 16px;
    font: inherit; font-weight: 650; font-size: 1rem; cursor: pointer;
    background: var(--accent, #2557c9); color: #fff;
    transition: filter .12s ease;
}
.consent-btn:hover[b-udl38q7fqd] { filter: brightness(.95); }

.consent-foot[b-udl38q7fqd] { margin-top: 22px; font-size: .85rem; color: var(--muted, #6b7280); }
/* _content/Buildessa/Components/Account/Pages/Manage/Balance.razor.rz.scp.css */
.bal-hero[b-i4rk0n5mra] { padding: 18px 0 6px; }
.bal-num[b-i4rk0n5mra] { font-size: 2.4rem; font-weight: 700; line-height: 1.1; }
.bal-unit[b-i4rk0n5mra] { color: var(--muted, #6b7280); font-size: .95rem; }
.bal-dollars[b-i4rk0n5mra] { color: var(--muted, #6b7280); margin-top: 4px; font-variant-numeric: tabular-nums; }
.bal-table[b-i4rk0n5mra] { max-width: 560px; }
.bal-table td[b-i4rk0n5mra], .bal-table th[b-i4rk0n5mra] { font-variant-numeric: tabular-nums; }
.bal-credit[b-i4rk0n5mra] { color: #1a7f4e; }
.bal-debit[b-i4rk0n5mra] { color: #6b7280; }
/* _content/Buildessa/Components/Account/Pages/Manage/PersonalData.razor.rz.scp.css */
/* Phase 34w — Personal data page sections. Three clear cards with the
   destructive "Delete account" one visually distinct (red border). */

.pd-section[b-t95ttxbz3j] {
    margin: 24px 0;
    padding: 18px 20px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 10px;
}

.pd-section h4[b-t95ttxbz3j] {
    margin: 0 0 6px;
    font-size: 16px;
    font-weight: 600;
    color: var(--fg);
}

.pd-section .muted.small[b-t95ttxbz3j] {
    color: var(--muted);
    font-size: 12.5px;
    margin: 0 0 14px;
    line-height: 1.5;
}

.pd-actions[b-t95ttxbz3j] {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    align-items: center;
}

.pd-actions form[b-t95ttxbz3j] {
    margin: 0;
}

/* Destructive section — red border, slightly tinted background so the
   eye lands here last and treats it as the danger zone. */
.pd-danger[b-t95ttxbz3j] {
    border-color: color-mix(in srgb, var(--danger) 45%, var(--border));
    background: color-mix(in srgb, var(--danger) 5%, var(--bg-overlay));
    margin-top: 36px;
}

.pd-danger h4[b-t95ttxbz3j] {
    color: var(--danger);
}

.pd-danger p[b-t95ttxbz3j] {
    color: var(--fg-dim);
    font-size: 14px;
    line-height: 1.55;
    margin: 8px 0;
}

.pd-danger strong[b-t95ttxbz3j] {
    color: var(--fg);
}
/* _content/Buildessa/Components/Account/Pages/Manage/RecycleBin.razor.rz.scp.css */
/* Phase 34w — Recycle bin table + toolbar. */

.rb-toolbar[b-fik86m490v] {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 14px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--border);
}

.rb-table[b-fik86m490v] {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.rb-table thead th[b-fik86m490v] {
    text-align: left;
    padding: 8px 10px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--muted);
    border-bottom: 1px solid var(--border);
}

.rb-table tbody td[b-fik86m490v] {
    padding: 12px 10px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
    color: var(--fg-dim);
}

.rb-table tbody tr:last-child td[b-fik86m490v] {
    border-bottom: 0;
}

.rb-table .ta-r[b-fik86m490v] {
    text-align: right;
}

.rb-table strong[b-fik86m490v] {
    color: var(--fg);
    font-weight: 600;
}
/* _content/Buildessa/Components/Account/Pages/MasterKeyLogin.razor.rz.scp.css */
/* Wraps the <pre> + copy button so they share one bordered shell, mirroring
   the look of <CommandLine> in the setup wizard. */
.message-block-wrap[b-w9a7ewkngg] {
    display: flex;
    align-items: stretch;
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.message-block[b-w9a7ewkngg] {
    flex: 1;
    background: transparent;
    border: 0;
    border-radius: 0;
    padding: 10px 12px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 13px;
    color: var(--fg, #ececec);
    white-space: pre-wrap;
    word-break: break-all;
    margin: 0;
}

.message-copy-btn[b-w9a7ewkngg] {
    flex: 0 0 auto;
    background: transparent;
    border: 0;
    border-left: 1px solid var(--border);
    color: var(--muted, #8a8a8a);
    padding: 0 14px;
    cursor: pointer;
    font: inherit;
    font-size: 12px;
    font-weight: 600;
    white-space: nowrap;
}

.message-copy-btn:hover[b-w9a7ewkngg] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--accent, #c4b5fd);
}

.message-copy-btn.copied[b-w9a7ewkngg] {
    color: var(--success);
}

.sig-box[b-w9a7ewkngg] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    word-break: break-all;
}

.how-to[b-w9a7ewkngg] {
    margin-top: 28px;
    color: var(--fg-dim, #d0d0d0);
    font-size: 13px;
}

.how-to summary[b-w9a7ewkngg] {
    cursor: pointer;
    color: var(--accent, #c4b5fd);
    font-weight: 600;
    padding: 8px 0;
}

.how-to pre[b-w9a7ewkngg] {
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 10px 12px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    color: var(--fg, #ececec);
    overflow-x: auto;
}

.how-to .hint[b-w9a7ewkngg] {
    color: var(--muted, #8a8a8a);
    font-size: 12px;
    margin-top: 14px;
}

.back[b-w9a7ewkngg] {
    text-align: center;
    margin-top: 24px;
}

.back[b-w9a7ewkngg]  a {
    color: var(--muted, #8a8a8a);
    font-size: 12px;
    text-decoration: none;
}

.back[b-w9a7ewkngg]  a:hover {
    color: var(--accent, #c4b5fd);
}
/* _content/Buildessa/Components/Account/Shared/ManageLayout.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────
   Outer shell + header
   ───────────────────────────────────────────────────────────────── */

.manage-shell[b-k93t52l0ox] {
    min-height: 100dvh;
    background:
        radial-gradient(900px 500px at 15% 10%, rgba(196,181,253,0.06), transparent 60%),
        radial-gradient(700px 400px at 90% 90%, rgba(109,95,190,0.08), transparent 60%),
        var(--bg);
    color: var(--fg, #ececec);
    display: flex;
    flex-direction: column;
}

.manage-header[b-k93t52l0ox] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 24px;
    border-bottom: 1px solid var(--border, #1f1f1f);
}

.manage-brand[b-k93t52l0ox] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    text-decoration: none;
    font-weight: 600;
    color: var(--accent, #c4b5fd);
}

.manage-brand .brand-text[b-k93t52l0ox] {
    color: var(--fg, #ececec);
    font-size: 15px;
    letter-spacing: 0.2px;
}

.manage-back[b-k93t52l0ox] {
    color: var(--muted, #8a8a8a);
    text-decoration: none;
    font-size: 13px;
}

.manage-back:hover[b-k93t52l0ox] {
    color: var(--fg-dim, #d0d0d0);
}

.manage-body[b-k93t52l0ox] {
    width: min(960px, 100%);
    margin: 0 auto;
    padding: 32px 24px 80px;
    flex: 1;
}

.manage-title[b-k93t52l0ox] {
    font-size: 28px;
    font-weight: 600;
    letter-spacing: -0.4px;
    margin: 0 0 4px;
    color: var(--fg, #ececec);
}

.manage-sub[b-k93t52l0ox] {
    margin: 0 0 24px;
    color: var(--muted, #9a9a9a);
    font-size: 14px;
}

.manage-grid[b-k93t52l0ox] {
    display: grid;
    grid-template-columns: 1fr;
    gap: 24px;
}

@media (min-width: 720px) {
    .manage-grid[b-k93t52l0ox] {
        grid-template-columns: 220px 1fr;
        gap: 32px;
    }
}

/* ─────────────────────────────────────────────────────────────────
   Left nav — ManageNavMenu renders a Bootstrap "nav nav-pills"
   ───────────────────────────────────────────────────────────────── */

.manage-nav[b-k93t52l0ox]  .nav {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.manage-nav[b-k93t52l0ox]  .nav-item {
    list-style: none;
}

.manage-nav[b-k93t52l0ox]  .nav-link {
    display: block;
    padding: 8px 12px;
    border-radius: 8px;
    color: var(--fg-dim, #d0d0d0);
    text-decoration: none;
    font-size: 14px;
    transition: background 120ms ease, color 120ms ease;
}

.manage-nav[b-k93t52l0ox]  .nav-link:hover {
    background: rgba(255, 255, 255, 0.06);
    color: var(--fg, #ececec);
}

.manage-nav[b-k93t52l0ox]  .nav-link.active {
    background: rgba(196, 181, 253, 0.12);
    color: var(--fg, #ececec);
}

/* ─────────────────────────────────────────────────────────────────
   Right pane — content-only typography. Form, button, alert, and
   input styles live GLOBALLY in admin.css so they apply to every
   page consistently (Identity Manage, admin panels, future surfaces).
   This file is for the manage-shell layout ONLY — adding per-element
   overrides here re-creates the per-page-theme problem we just fixed.
   ───────────────────────────────────────────────────────────────── */

.manage-content[b-k93t52l0ox]  h3,
.manage-content[b-k93t52l0ox]  h4 {
    font-size: 18px;
    font-weight: 600;
    color: var(--fg);
    margin: 0 0 12px;
}

.manage-content[b-k93t52l0ox]  hr {
    border: 0;
    border-top: 1px solid var(--border);
    margin: 12px 0 16px;
}

.manage-content[b-k93t52l0ox]  p {
    color: var(--fg-dim);
    font-size: 14px;
    line-height: 1.55;
    margin: 8px 0;
}

.manage-content[b-k93t52l0ox]  ul,
.manage-content[b-k93t52l0ox]  ol {
    padding-left: 22px;
    color: var(--fg-dim);
}

/* Link color for prose links only — NEVER buttons. Any anchor styled as a button
   (.btn from admin.css, or the Billing page's .b-btn) carries its own text color;
   without excluding them this rule's specificity wins and paints button labels
   accent-purple — invisible on a purple button, unreadable on a red one. Match
   any "btn"-bearing class so both vocabularies are covered. */
.manage-content[b-k93t52l0ox]  a:not([class*="btn"]) {
    color: var(--accent);
    text-decoration: none;
}

.manage-content[b-k93t52l0ox]  a:not([class*="btn"]):hover {
    text-decoration: underline;
}

/* Bootstrap layout helpers used by Identity pages (.row/.col-xl-6).
   Just enough to make the form sit in a sensible width. */
.manage-content[b-k93t52l0ox]  .row {
    display: block;
}
.manage-content[b-k93t52l0ox]  .col-xl-6 {
    max-width: 100%;
}

/* ─────────────────────────────────────────────────────────────────
   Settings design vocabulary (Phase 5 rebuild)

   A small bespoke language the rewritten Manage pages share, so they
   match the custom pages (PersonalData / Balance) instead of reading as
   Identity scaffold. Uses the app's real tokens throughout.
   ───────────────────────────────────────────────────────────────── */

.manage-content[b-k93t52l0ox]  .settings-card {
    background: var(--bg-elevated, #161616);
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 14px;
    padding: 20px 22px;
    margin: 0 0 18px;
    box-shadow: var(--shadow-card, 0 6px 18px rgba(0, 0, 0, 0.25));
}
.manage-content[b-k93t52l0ox]  .settings-card > :first-child { margin-top: 0; }
.manage-content[b-k93t52l0ox]  .settings-card > :last-child { margin-bottom: 0; }

.manage-content[b-k93t52l0ox]  .settings-card h2,
.manage-content[b-k93t52l0ox]  .settings-card h3 {
    font-size: 16px;
    font-weight: 650;
    margin: 0 0 4px;
    color: var(--fg, #ececec);
}

.manage-content[b-k93t52l0ox]  .settings-hint {
    color: var(--muted, #8a8a8a);
    font-size: 13px;
    line-height: 1.55;
    margin: 0 0 16px;
}
.manage-content[b-k93t52l0ox]  .settings-hint:last-child { margin-bottom: 0; }

/* A labelled field — label above a .form-control (replaces form-floating). */
.manage-content[b-k93t52l0ox]  .field {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin: 0 0 16px;
    max-width: 32rem;
}
.manage-content[b-k93t52l0ox]  .field > label {
    font-size: 13px;
    font-weight: 550;
    color: var(--fg-dim, #d0d0d0);
}

/* A read-only value chip (e.g. current username / confirmed email). */
.manage-content[b-k93t52l0ox]  .settings-readonly {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    background: var(--bg-input, var(--bg, #0d0d0d));
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 9px;
    padding: 10px 14px;
    font-size: 14px;
    color: var(--fg, #ececec);
    max-width: 32rem;
    font-variant-numeric: tabular-nums;
}
.manage-content[b-k93t52l0ox]  .settings-badge {
    color: var(--success, #8cdcaa);
    font-weight: 650;
    font-size: 13px;
    white-space: nowrap;
}

.manage-content[b-k93t52l0ox]  .settings-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    margin-top: 4px;
}

/* Destructive card — red-tinted border + heading. */
.manage-content[b-k93t52l0ox]  .settings-danger {
    border-color: color-mix(in srgb, var(--danger, #e87a7a) 45%, var(--border, #2a2a2a));
}
.manage-content[b-k93t52l0ox]  .settings-danger h2,
.manage-content[b-k93t52l0ox]  .settings-danger h3 {
    color: var(--danger, #e87a7a);
}

/* Constrain scaffold full-width buttons inside cards to their content. */
.manage-content[b-k93t52l0ox]  .settings-card .btn.w-100 { width: auto; }
/* _content/Buildessa/Components/Layout/AccountBasicLayout.razor.rz.scp.css */
/* Plain, always-clean account shell: a single centered card on the themed
   background. Card + form styling comes from the global account.css. */
.account-basic[b-1dp9gfs4rl] {
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 16px;
    padding: 40px 24px;
    background:
        radial-gradient(760px 480px at 50% -8%, rgba(109, 95, 190, 0.06), transparent 62%),
        var(--bg);
    color: var(--fg);
}

/* The wordmark is always shown here (there's no side panel to carry it). */
.account-basic .card-brand[b-1dp9gfs4rl] { display: inline-flex; }
/* _content/Buildessa/Components/Layout/AccountLayout.razor.rz.scp.css */
/* ─────────────────────────────────────────────────────────────────
   LOGIN layout — the configurable two-panel: a branded promo panel (left)
   beside a clean card (right). The panel is a committed brand surface (a
   fixed indigo→purple that holds in both themes). In Basic mode the panel
   is dropped and the card centers. Shared card + form styling lives in the
   global account.css; this file only lays out the shell + panel.
   ───────────────────────────────────────────────────────────────── */

.account-shell[b-6dyd5cfvxh] {
    min-height: 100dvh;
    display: grid;
    grid-template-columns: 1.05fr 1fr;
    background: var(--bg);
    color: var(--fg);
}

/* Basic mode: no brand panel — a single centered card (+ show the wordmark). */
.account-shell.is-basic[b-6dyd5cfvxh] { grid-template-columns: 1fr; }
.account-shell.is-basic .card-brand[b-6dyd5cfvxh] { display: inline-flex; }

/* The card-brand is hidden on the two-panel desktop (the panel carries the
   brand); shown on Basic / mobile. */
.card-brand[b-6dyd5cfvxh] { display: none; }

/* ── Brand panel ─────────────────────────────────────────────────── */
.account-aside[b-6dyd5cfvxh] {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    background: linear-gradient(157deg, #16122b 0%, #221a49 46%, #3a2b7a 100%);
    color: #f5f3ff;
    isolation: isolate;
}

.account-aside .aside-glow[b-6dyd5cfvxh] {
    position: absolute;
    inset: 0;
    z-index: -1;
    background:
        radial-gradient(680px 420px at 18% 12%, rgba(196, 181, 253, 0.28), transparent 60%),
        radial-gradient(560px 420px at 88% 96%, rgba(109, 95, 190, 0.35), transparent 62%);
}

.aside-inner[b-6dyd5cfvxh] {
    width: min(440px, 100%);
    margin-inline: auto;
    padding: 56px 52px;
    display: flex;
    flex-direction: column;
    gap: 30px;
}

.aside-brand[b-6dyd5cfvxh] {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
    color: #ffffff;
    font-weight: 700;
    font-size: 20px;
    letter-spacing: -0.2px;
    width: fit-content;
}

.aside-logo[b-6dyd5cfvxh] {
    display: inline-grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 9px;
    background: rgba(255, 255, 255, 0.14);
    color: #d7ccff;
    font-size: 17px;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.16);
}

.aside-headline[b-6dyd5cfvxh] {
    margin: 0;
    font-size: 34px;
    line-height: 1.12;
    font-weight: 650;
    letter-spacing: -0.6px;
    color: #ffffff;
    text-wrap: balance;
}

.aside-sub[b-6dyd5cfvxh] {
    margin: 12px 0 0;
    font-size: 15px;
    line-height: 1.6;
    color: rgba(245, 243, 255, 0.74);
    max-width: 34ch;
}

.aside-points[b-6dyd5cfvxh] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.aside-points li[b-6dyd5cfvxh] {
    position: relative;
    padding-left: 28px;
    font-size: 14px;
    line-height: 1.45;
    color: rgba(245, 243, 255, 0.82);
}

.aside-points li[b-6dyd5cfvxh]::before {
    content: "";
    position: absolute;
    left: 0;
    top: 1px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: rgba(196, 181, 253, 0.16);
    box-shadow: inset 0 0 0 1px rgba(196, 181, 253, 0.4);
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23c4b5fd' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 12px;
}

.aside-foot[b-6dyd5cfvxh] {
    margin: 0;
    font-size: 12px;
    color: rgba(245, 243, 255, 0.5);
}

/* ── Card side ───────────────────────────────────────────────────── */
.account-main[b-6dyd5cfvxh] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 40px 24px;
    gap: 16px;
    background:
        radial-gradient(700px 460px at 92% 8%, rgba(109, 95, 190, 0.05), transparent 62%),
        var(--bg);
}

@media (max-width: 900px) {
    .account-shell[b-6dyd5cfvxh] { grid-template-columns: 1fr; }
    .account-aside[b-6dyd5cfvxh] { display: none; }
    .card-brand[b-6dyd5cfvxh] { display: inline-flex; }
}
/* _content/Buildessa/Components/Layout/AdminLayout.razor.rz.scp.css */
/*
   AdminLayout's styles live in wwwroot/admin.css instead of here.
   Reason: <NavLink> renders an <a> as a child component, and Blazor
   scoped CSS does NOT cover child-component output — so .admin-link
   rules in this file would never match the sidebar nav links and
   browser-default blue would win.

   This file is intentionally empty; keep it so that scoped-CSS
   bundling for the layout still resolves (and so the next person
   reading the directory finds the explanation).
*/
/* _content/Buildessa/Components/Layout/AdminLayout3.razor.rz.scp.css */
/*
   AdminLayout's styles live in wwwroot/admin.css instead of here.
   Reason: <NavLink> renders an <a> as a child component, and Blazor
   scoped CSS does NOT cover child-component output — so .admin-link
   rules in this file would never match the sidebar nav links and
   browser-default blue would win.

   This file is intentionally empty; keep it so that scoped-CSS
   bundling for the layout still resolves (and so the next person
   reading the directory finds the explanation).
*/
/* _content/Buildessa/Components/Layout/AppLayout.razor.rz.scp.css */
.app-shell[b-ul123bscde] {
    display: flex;
    /* PIN the shell to the viewport. Page-level scroll is disabled; the inner
       .app-main scrolls independently. This is the standard chat-app layout (Slack,
       Discord, ChatGPT, Linear) and the only reliable way to keep the sidebar truly
       fixed in a flex layout. `position: fixed; inset: 0` (rather than a bare
       height: 100dvh block in normal flow) is deliberate: the global html/body only
       set min-height, so the body can still scroll, and a stray focus / scrollIntoView
       would otherwise scroll the WHOLE shell up (sidebar header cut off) until a
       refresh. Pinning makes body scroll unable to move the app. `inset: 0` also
       tracks the real visible area more reliably than 100dvh (mobile URL bar,
       virtual keyboard). */
    position: fixed;
    inset: 0;
    overflow: hidden;
    background: var(--bg, #0a0a0a);
    color: var(--fg, #ececec);
}

.app-main[b-ul123bscde] {
    flex: 1;
    min-width: 0;
    /* min-height: 0 is required inside a flex column so the inner scroll
       (.app-body) actually clips instead of expanding past the parent. */
    min-height: 0;
    display: flex;
    flex-direction: column;
    position: relative;
    /* The scroll lives in .app-body now, so the mobile top bar can sit above it
       without being scrolled away or stealing the page's height. */
    overflow: hidden;
    /* Slide with the guide panel when it reserves space (below). */
    transition: margin-right .18s ease;
}

/* The page's scroll region — everything below the (mobile-only) top bar. */
.app-body[b-ul123bscde] {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
}

/* Mobile top bar (hamburger + brand). Hidden on desktop; the rail is a normal
   flex column there. */
.app-topbar[b-ul123bscde] { display: none; }
.app-nav-backdrop[b-ul123bscde] { display: none; }

@media (max-width: 768px) {
    .app-topbar[b-ul123bscde] {
        display: flex;
        align-items: center;
        gap: 10px;
        flex: 0 0 auto;
        padding: 8px 12px;
        background: var(--bg, #0a0a0a);
        border-bottom: 1px solid var(--border, #2a2a2a);
    }
    .app-hamburger[b-ul123bscde] {
        display: inline-flex; align-items: center; justify-content: center;
        width: 40px; height: 40px; flex: 0 0 auto;
        border: 0; background: transparent; color: var(--fg, #ececec);
        border-radius: 8px; cursor: pointer;
    }
    .app-hamburger:active[b-ul123bscde] { background: var(--bg-elevated, #161616); }
    .app-topbar-brand[b-ul123bscde] {
        font-weight: 700; font-size: 1rem; text-decoration: none; color: var(--fg, #ececec);
    }
    /* Scrim behind the open drawer — tap to close. */
    .app-shell.mobile-nav-open .app-nav-backdrop[b-ul123bscde] {
        display: block; position: fixed; inset: 0; z-index: 1150;
        background: rgba(0, 0, 0, .45);
    }
}

/* When the Lisa Guide panel is open on a wide screen, reserve its width so it
   PUSHES the content aside instead of covering a control behind it (the panel
   is a fixed 360px drawer on the right — see LisaGuidePanel.razor.css). Below
   the breakpoint there isn't room to push, so it stays an overlay drawer. */
@media (min-width: 1100px) {
    .app-shell.guide-open .app-main[b-ul123bscde] { margin-right: 360px; }
}

#blazor-error-ui[b-ul123bscde] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-ul123bscde] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* _content/Buildessa/Components/Layout/MainLayout.razor.rz.scp.css */
#blazor-error-ui[b-7x0psoww5n] {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss[b-7x0psoww5n] {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
/* _content/Buildessa/Components/Lisa/ActionApprovalCard.razor.rz.scp.css */
/* Stage 3 — the approval card: Lisa's gated state-change proposals. */
.approval-stack[b-cuubdgqqyc] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin: 8px 0;
}

.approval-card[b-cuubdgqqyc] {
    border: 1px solid var(--accent);
    border-radius: 10px;
    background: var(--bg-elevated);
    padding: 12px 14px;
}

.approval-head[b-cuubdgqqyc] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}

.approval-chip[b-cuubdgqqyc] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--accent);
    border: 1px solid var(--accent);
    border-radius: 999px;
    padding: 1px 8px;
}

.approval-kind[b-cuubdgqqyc] {
    font-size: 12px;
    color: var(--muted);
}

.approval-objective[b-cuubdgqqyc] {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 4px;
}

.approval-why[b-cuubdgqqyc] {
    font-size: 13px;
    color: var(--muted);
    margin-bottom: 8px;
}

.approval-actions[b-cuubdgqqyc] {
    display: flex;
    align-items: center;
    gap: 10px;
}
/* _content/Buildessa/Components/Lisa/ActivityList.razor.rz.scp.css */
/* §16 — Activity audit ledger view. */

.act-empty[b-xhack5hopr] {
    padding: 16px 4px;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    max-width: 560px;
}

.act-list[b-xhack5hopr] {
    display: flex;
    flex-direction: column;
}

.act-row[b-xhack5hopr] {
    display: flex;
    gap: 10px;
    padding: 10px 4px;
    border-bottom: 1px solid var(--border);
}

.act-row:last-child[b-xhack5hopr] {
    border-bottom: 0;
}

.act-icon[b-xhack5hopr] {
    flex: 0 0 auto;
    font-size: 15px;
    line-height: 1.4;
    width: 20px;
    text-align: center;
}

.act-body[b-xhack5hopr] {
    min-width: 0;
    flex: 1;
}

.act-summary[b-xhack5hopr] {
    font-size: 13px;
    color: var(--fg);
    line-height: 1.45;
}

.act-meta[b-xhack5hopr] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 3px;
    font-size: 11px;
    color: var(--muted);
    flex-wrap: wrap;
}

.act-badge[b-xhack5hopr] {
    background: var(--bg-overlay);
    border-radius: 8px;
    padding: 0 6px;
    max-width: 120px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.act-dot[b-xhack5hopr] {
    opacity: 0.5;
}

.act-result-failed[b-xhack5hopr] {
    color: var(--danger);
    font-weight: 600;
}

.act-row.failed .act-icon[b-xhack5hopr] {
    opacity: 0.7;
}
/* _content/Buildessa/Components/Lisa/BuildingsSelector.razor.rz.scp.css */
.bs[b-m454rgx2u2] {
    position: relative;
    display: inline-flex;
}

/* Trigger pill ─────────────────────────────────────────────────── */

.bs-trigger[b-m454rgx2u2] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 10px;
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 999px;
    color: var(--fg-dim, #d0d0d0);
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    max-width: 200px;
    transition: background 120ms ease, border-color 120ms ease;
}

.bs-trigger:hover[b-m454rgx2u2] {
    background: rgba(255, 255, 255, 0.04);
    border-color: var(--border-strong);
}

.bs.open .bs-trigger[b-m454rgx2u2] {
    background: rgba(196, 181, 253, 0.08);
    border-color: var(--accent-soft, #6d5fbe);
    color: var(--fg, #ececec);
}

.bs-trigger svg[b-m454rgx2u2] {
    width: 14px;
    height: 14px;
    flex: 0 0 14px;
    color: var(--muted, #8a8a8a);
}

.bs-trigger:hover svg[b-m454rgx2u2],
.bs.open .bs-trigger svg[b-m454rgx2u2] {
    color: var(--accent, #c4b5fd);
}

.bs-label[b-m454rgx2u2] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 140px;
}

.bs-caret[b-m454rgx2u2] {
    transition: transform 150ms ease;
}

.bs.open .bs-caret[b-m454rgx2u2] {
    transform: rotate(180deg);
}

/* Popover ──────────────────────────────────────────────────────── */

.bs-backdrop[b-m454rgx2u2] {
    position: fixed;
    inset: 0;
    z-index: 40;
    background: transparent;
}

.bs-popover[b-m454rgx2u2] {
    position: absolute;
    bottom: calc(100% + 8px);
    left: 0;
    z-index: 41;
    min-width: 240px;
    max-width: 320px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
    box-shadow: 0 16px 36px rgba(0, 0, 0, 0.55);
    padding: 6px;
}

.bs-list[b-m454rgx2u2] {
    display: flex;
    flex-direction: column;
    max-height: 240px;
    overflow-y: auto;
}

.bs-item[b-m454rgx2u2] {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 8px 10px;
    border: 0;
    background: transparent;
    color: var(--fg-dim, #d0d0d0);
    font: inherit;
    font-size: 14px;
    text-align: left;
    border-radius: 8px;
    cursor: pointer;
}

.bs-item svg[b-m454rgx2u2] {
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: var(--muted, #8a8a8a);
}

.bs-item:hover[b-m454rgx2u2] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--fg, #ececec);
}

.bs-item.active[b-m454rgx2u2] {
    color: var(--fg, #ececec);
}

.bs-item.active svg:first-of-type[b-m454rgx2u2] {
    color: var(--accent, #c4b5fd);
}

.bs-check[b-m454rgx2u2] {
    margin-left: auto;
    color: var(--accent, #c4b5fd) !important;
}

.bs-item.subtle[b-m454rgx2u2] {
    color: var(--muted, #8a8a8a);
    font-size: 13px;
}

.bs-item.add[b-m454rgx2u2] {
    color: var(--accent, #c4b5fd);
}

.bs-item.add svg[b-m454rgx2u2] {
    color: var(--accent, #c4b5fd);
}

.bs-empty[b-m454rgx2u2] {
    padding: 10px 12px 4px;
    font-size: 12px;
    color: var(--muted, #8a8a8a);
}

.bs-divider[b-m454rgx2u2] {
    border: 0;
    border-top: 1px solid var(--border);
    margin: 4px 6px;
}

/* Inline add form ─────────────────────────────────────────────── */

.bs-add[b-m454rgx2u2] {
    padding: 10px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.bs-add-label[b-m454rgx2u2] {
    font-size: 12px;
    color: var(--muted, #8a8a8a);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.bs-add-input[b-m454rgx2u2] {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--fg, #ececec);
    font: inherit;
    font-size: 14px;
    padding: 8px 10px;
    outline: 0;
}

.bs-add-input:focus[b-m454rgx2u2] {
    border-color: var(--accent-soft, #6d5fbe);
    box-shadow: 0 0 0 3px rgba(196, 181, 253, 0.14);
}

.bs-add-actions[b-m454rgx2u2] {
    display: flex;
    justify-content: flex-end;
    gap: 6px;
}

.bs-btn[b-m454rgx2u2] {
    border: 0;
    border-radius: 8px;
    padding: 6px 12px;
    font: inherit;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
}

.bs-btn.ghost[b-m454rgx2u2] {
    background: transparent;
    color: var(--muted, #8a8a8a);
}

.bs-btn.ghost:hover[b-m454rgx2u2] {
    color: var(--fg, #ececec);
}

.bs-btn.primary[b-m454rgx2u2] {
    background: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.bs-btn.primary:disabled[b-m454rgx2u2] {
    opacity: 0.5;
    cursor: not-allowed;
}

.truncate[b-m454rgx2u2] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* _content/Buildessa/Components/Lisa/ChatComposer.razor.rz.scp.css */
.composer[b-htavp41y36] {
    position: relative; /* anchors the mic-options menu */
    display: flex;
    flex-direction: column;
    gap: 4px;
    background: var(--composer-bg, #161616);
    border: 1px solid var(--border);
    border-radius: 18px;
    padding: 8px 10px;
    transition: border-color 120ms ease, box-shadow 120ms ease;
}

.composer:focus-within[b-htavp41y36] {
    border-color: var(--accent-soft, #6d5fbe);
    box-shadow: 0 0 0 3px rgba(196, 181, 253, 0.12);
}

.composer.is-busy[b-htavp41y36] { opacity: 0.85; }

.composer.is-recording[b-htavp41y36] {
    border-color: var(--danger);
    box-shadow: 0 0 0 3px rgba(239, 107, 107, 0.15);
}

/* Attachments row ────────────────────────────────────────────── */

.attachments[b-htavp41y36] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    padding: 2px 0 4px;
}

.chip[b-htavp41y36] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 8px 4px 8px;
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid var(--border);
    border-radius: 999px;
    font-size: 12px;
    color: var(--fg-dim, #d0d0d0);
    max-width: 220px;
}

.chip svg[b-htavp41y36] {
    width: 12px;
    height: 12px;
    color: var(--muted, #8a8a8a);
    flex: 0 0 12px;
}

.chip-name[b-htavp41y36] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 160px;
}

.chip-x[b-htavp41y36] {
    background: transparent;
    border: 0;
    color: var(--muted, #8a8a8a);
    cursor: pointer;
    font-size: 14px;
    line-height: 1;
    padding: 0 2px;
    border-radius: 4px;
}

.chip-x:hover[b-htavp41y36] {
    background: rgba(255, 255, 255, 0.08);
    color: var(--fg, #ececec);
}

/* Input row — the message line carries the morphing send/mic button
   (field ask 2026-08-16, Claude-Code shape). ─────────────────── */

.composer-input-row[b-htavp41y36] {
    display: flex;
    align-items: flex-end;
    gap: 8px;
}

.composer-input-row .action-btn[b-htavp41y36] {
    margin-bottom: 2px; /* optically centers against the last text line */
}

.composer-input[b-htavp41y36] {
    background: transparent;
    border: 0;
    outline: 0;
    color: var(--fg, #ececec);
    font: inherit;
    font-size: 14px;
    line-height: 1.5;
    resize: none;
    /* Claude-style auto-grow: lisa-composer.js sets the height per input
       up to this cap, then the textarea scrolls internally. */
    min-height: 24px;
    max-height: 220px;
    overflow-y: hidden;
    padding: 4px 2px;
    width: 100%;
}

.composer-input[b-htavp41y36]::placeholder {
    color: var(--muted, #6b6b6b);
}

.composer.is-recording .composer-input[b-htavp41y36]::placeholder {
    color: var(--danger);
}

/* Bottom strip — thin utility line under the input, Claude-style,
   separated by a full-width hairline (field ask 2026-08-16). */

.composer-actions[b-htavp41y36] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 4px;
    min-height: 22px;
    border-top: 1px solid var(--border);
    /* Run the hairline edge-to-edge across the composer, then restore
       the inner alignment. */
    margin: 2px -10px 0;
    padding: 4px 8px 0;
}

/* Everything on the strip runs extra small. (Triple-class specificity —
   these must beat the later .action-btn.sm / .action-btn.mic-opts rules
   regardless of file order.) */
.composer-actions .action-btn.sm[b-htavp41y36] {
    width: 22px;
    height: 22px;
    flex: 0 0 22px;
    border: 0;
    color: var(--muted, #8a8a8a);
}

.composer-actions .action-btn.sm svg[b-htavp41y36] {
    width: 13px;
    height: 13px;
}

.composer-actions .action-btn.sm:hover:not(:disabled)[b-htavp41y36] {
    color: var(--fg-dim, #d0d0d0);
    background: rgba(255, 255, 255, 0.06);
}

/* The mic+chevron pair keeps its natural width at strip scale. */
.composer-actions .action-btn.sm.mic-opts[b-htavp41y36] {
    width: auto;
    flex: 0 0 auto;
    padding: 0 5px;
}

/* The workstation pill inherits the strip's small scale. */
.composer-actions[b-htavp41y36]  .pc-trigger {
    font-size: 11px;
    padding: 2px 8px;
    min-height: 0;
    line-height: 1.4;
}

.composer-actions[b-htavp41y36]  .pc-trigger svg {
    width: 12px;
    height: 12px;
}

.composer-actions-left[b-htavp41y36],
.composer-actions-right[b-htavp41y36] {
    display: flex;
    align-items: center;
    gap: 6px;
}

.action-btn[b-htavp41y36] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--fg-dim, #d0d0d0);
    cursor: pointer;
    transition: background 120ms ease, border-color 120ms ease, transform 120ms ease;
    flex: 0 0 34px;
}

.action-btn svg[b-htavp41y36] {
    width: 16px;
    height: 16px;
}

/* Compact variant — the whole composer runs small now. */
.action-btn.sm[b-htavp41y36] {
    width: 28px;
    height: 28px;
    flex: 0 0 28px;
}

.action-btn.sm svg[b-htavp41y36] {
    width: 14px;
    height: 14px;
}

/* Mic options — a tiny mic+chevron pair opening the device menu. */
.action-btn.mic-opts[b-htavp41y36] {
    width: auto;
    flex: 0 0 auto;
    padding: 0 6px;
    gap: 2px;
    border-radius: 999px;
    color: var(--muted, #8a8a8a);
}

.action-btn.mic-opts .chev[b-htavp41y36] {
    width: 10px;
    height: 10px;
}

.action-btn.mic-opts.open[b-htavp41y36],
.action-btn.mic-opts:hover[b-htavp41y36] {
    color: var(--fg-dim, #d0d0d0);
}

/* The menu floats above the bar, Claude-style. */
.mic-menu-backdrop[b-htavp41y36] {
    position: fixed;
    inset: 0;
    z-index: 40;
    background: transparent;
}

.mic-menu[b-htavp41y36] {
    position: absolute;
    left: 40px;
    bottom: calc(100% + 6px);
    z-index: 41;
    min-width: 230px;
    max-width: 300px;
    background: var(--bg-elevated, #1d1d1d);
    border: 1px solid var(--border);
    border-radius: 12px;
    box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35);
    padding: 6px;
}

.mic-menu-title[b-htavp41y36] {
    font-size: 11px;
    color: var(--muted, #8a8a8a);
    padding: 4px 8px 2px;
}

.mic-menu-empty[b-htavp41y36] {
    font-size: 12px;
    color: var(--muted, #8a8a8a);
    padding: 6px 8px;
}

.mic-menu-item[b-htavp41y36] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    width: 100%;
    padding: 6px 8px;
    background: none;
    border: 0;
    border-radius: 8px;
    color: var(--fg, #ececec);
    font-size: 13px;
    cursor: pointer;
    text-align: left;
}

.mic-menu-item:hover[b-htavp41y36] {
    background: rgba(255, 255, 255, 0.06);
}

.mic-menu-item svg[b-htavp41y36] {
    width: 14px;
    height: 14px;
    color: var(--accent, #c4b5fd);
    flex: 0 0 14px;
}

.mic-menu-label[b-htavp41y36] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.mic-menu-sep[b-htavp41y36] {
    height: 1px;
    background: var(--border);
    margin: 4px 2px;
}

/* Project chip (P0) — the utility bar's right side: type chip in a
   project, convert suggestion when the chat fits one, nothing otherwise. */
.project-chip[b-htavp41y36] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-family: system-ui, sans-serif;
    font-size: 11px;
    font-weight: 600;
    padding: 2px 9px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--muted, #8a8e99);
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
    line-height: 1.5;
}

.project-chip svg[b-htavp41y36] {
    width: 12px;
    height: 12px;
    flex: 0 0 12px;
}

.project-chip.in-project[b-htavp41y36] {
    color: var(--accent, #c4b5fd);
    border-color: color-mix(in srgb, var(--accent, #c4b5fd) 45%, transparent);
}

.project-chip.suggest:hover[b-htavp41y36] {
    color: var(--accent, #c4b5fd);
    border-color: var(--accent, #c4b5fd);
}

.project-chip.converting[b-htavp41y36] {
    cursor: default;
    font-style: italic;
}

/* Mini toggle switch for Hold to record. */
.mic-toggle[b-htavp41y36] {
    flex: 0 0 30px;
    width: 30px;
    height: 17px;
    border-radius: 999px;
    background: var(--border, #3a3a3a);
    position: relative;
    transition: background 120ms ease;
}

.mic-toggle .mic-toggle-knob[b-htavp41y36] {
    position: absolute;
    top: 2px;
    left: 2px;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: var(--bg, #fff);
    transition: left 120ms ease;
}

.mic-toggle.on[b-htavp41y36] {
    background: var(--accent, #6d5fbe);
}

.mic-toggle.on .mic-toggle-knob[b-htavp41y36] {
    left: 15px;
}

.action-btn:hover:not(:disabled)[b-htavp41y36] {
    background: rgba(255, 255, 255, 0.06);
    border-color: var(--border-strong);
}

.action-btn:disabled[b-htavp41y36] {
    opacity: 0.5;
    cursor: not-allowed;
}

.action-btn.attach[b-htavp41y36] {
    cursor: pointer;
}

.action-btn.mic.live[b-htavp41y36] {
    background: var(--danger);
    border-color: var(--danger);
    color: var(--accent-fg);
    animation: mic-pulse-b-htavp41y36 1.2s ease-in-out infinite;
}

@keyframes mic-pulse-b-htavp41y36 {
    0%, 100% { box-shadow: 0 0 0 0 rgba(239, 107, 107, 0.55); }
    50%      { box-shadow: 0 0 0 8px rgba(239, 107, 107, 0); }
}

.action-btn.send[b-htavp41y36] {
    background: var(--accent, #c4b5fd);
    border-color: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.action-btn.send:hover:not(:disabled)[b-htavp41y36] {
    transform: translateY(-1px);
}

.action-btn.send:disabled[b-htavp41y36] {
    background: var(--border, #2a2a2a);
    border-color: var(--border);
    color: var(--muted, #6b6b6b);
}

/* Send-as-stop while Lisa runs — same accent circle with a breathing
   glow, so "she's working" is legible right where the user's cursor
   already is; flips back to ↑ the moment the turn finishes. */
.action-btn.send.stop-run[b-htavp41y36] {
    animation: stop-run-breathe-b-htavp41y36 1.6s ease-in-out infinite;
}

@keyframes stop-run-breathe-b-htavp41y36 {
    0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent, #c4b5fd) 55%, transparent); }
    50%      { box-shadow: 0 0 0 6px transparent; }
}

.spinner[b-htavp41y36] {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    border: 2px solid rgba(0, 0, 0, 0.25);
    border-top-color: var(--bg-overlay);
    animation: spin-b-htavp41y36 0.7s linear infinite;
}

@keyframes spin-b-htavp41y36 { to { transform: rotate(360deg); } }

/* Hide the file input that <InputFile> renders. It belongs to InputFile's
   own CSS scope, so a plain selector here won't match — ::deep strips our
   scope from descendants, so this reaches the inner <input type="file">.
   The input lives in its own host span OUTSIDE the attach menu, so the
   menu closing never unmounts it while the file dialog is open. */
.attach-input-host[b-htavp41y36]  input[type="file"] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* The attach menu anchors to the + at the strip's left edge. */
.mic-menu.attach-menu[b-htavp41y36] {
    left: 8px;
    min-width: 200px;
}

/* The Add-files item is a <label> — buttons get the pointer for free,
   labels don't. */
.mic-menu-item.attach[b-htavp41y36] {
    cursor: pointer;
}

/* Action rows lead with their icon (field ask: the space-between layout
   read as bad spacing); toggle rows keep label-left / switch-right. */
.mic-menu-item.lead-icon[b-htavp41y36] {
    justify-content: flex-start;
    gap: 8px;
}

.mic-menu-item.lead-icon svg[b-htavp41y36] {
    color: var(--muted, #8a8a8a);
}

/* Pinned one-press capture on the message line. */
.action-btn.quick-capture[b-htavp41y36] {
    color: var(--muted, #8a8a8a);
}

.action-btn.quick-capture:hover:not(:disabled)[b-htavp41y36] {
    color: var(--accent, #c4b5fd);
    border-color: var(--accent, #c4b5fd);
}

/* Inline mic status / file error message. */
.mic-status[b-htavp41y36] {
    font-size: 12px;
    color: var(--muted, #9a9a9a);
    padding: 0 4px;
}


/* Attachment chip extras — size label, image accent, loading state. */
.chip-size[b-htavp41y36] {
    font-size: 11px;
    opacity: .55;
    margin-left: 2px;
    flex: 0 0 auto;
}

.chip-image[b-htavp41y36] {
    border-color: var(--accent);
}

.chip-loading[b-htavp41y36] {
    opacity: .65;
    font-style: italic;
}

/* Drag & drop target highlight — lisa-composer.js toggles .drag-over while
   files are dragged over the window. */
.composer.drag-over[b-htavp41y36] {
    border-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent) inset;
    border-radius: 12px;
}

.composer.drag-over .composer-input[b-htavp41y36]::placeholder {
    color: var(--accent);
}

/* Send queued behind an in-flight upload: the click visibly did something. */
.send-spin[b-htavp41y36] {
    animation: send-spin-b-htavp41y36 0.9s linear infinite;
}
@keyframes send-spin-b-htavp41y36 {
    to { transform: rotate(360deg); }
}

/* P4 - armed block tag for the next team post */
.composer-armed-tag[b-htavp41y36] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 6px;
}

.armed-tag-chip[b-htavp41y36] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11.5px;
    font-weight: 650;
    color: var(--accent, #6d5fbe);
    background: var(--bg-elevated, #f4f2fb);
    border: 1px solid var(--border, #e5e3f0);
    border-radius: 20px;
    padding: 2px 10px;
}

.armed-tag-dismiss[b-htavp41y36] {
    border: none;
    background: none;
    color: var(--muted, #8a8a8a);
    cursor: pointer;
    font-size: 14px;
    line-height: 1;
    padding: 2px 4px;
}

.armed-tag-dismiss:hover[b-htavp41y36] { color: var(--fg, inherit); }

/* Touch polish — on a touch device the composer is the single most-used
   control, so two things matter. (1) A text input smaller than 16px makes iOS
   Safari zoom the whole page in on focus (and never zoom back out); bump it to
   16px there. (2) The deliberately-tiny 22px strip buttons are below the ~44px
   comfortable tap target, so grow them (and the round action buttons) on a
   coarse pointer without changing the desktop look. */
@media (pointer: coarse) {
    .composer-input[b-htavp41y36] { font-size: 16px; }

    .composer-actions .action-btn.sm[b-htavp41y36] {
        width: 32px; height: 32px; flex-basis: 32px;
    }
    .composer-actions .action-btn.sm svg[b-htavp41y36] { width: 15px; height: 15px; }

    .action-btn[b-htavp41y36] { width: 40px; height: 40px; flex-basis: 40px; }
    .action-btn.sm[b-htavp41y36] { width: 34px; height: 34px; flex-basis: 34px; }
    .action-btn.mic-opts[b-htavp41y36], .composer-actions .action-btn.sm.mic-opts[b-htavp41y36] { width: auto; }
    .mic-menu-item[b-htavp41y36] { padding: 9px 8px; }
}
/* _content/Buildessa/Components/Lisa/ChatFilesStrip.razor.rz.scp.css */
.cfs[b-xk34wv0qyz] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    padding: 5px 10px;
    margin-bottom: 6px;
    border: 1px solid var(--border-subtle, #e5e8ec);
    border-radius: 8px;
    background: var(--surface-sunken, #f7f8fa);
}

.cfs-label[b-xk34wv0qyz] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--text-faint, #8a919a);
    margin-right: 2px;
    white-space: nowrap;
}

a.cfs-chip[b-xk34wv0qyz] {
    display: inline-block;
    font-size: 12px;
    font-weight: 600;
    color: var(--accent, #3b6ff0);
    background: var(--surface, #fff);
    border: 1px solid var(--border-subtle, #dfe3e8);
    border-radius: 999px;
    padding: 2px 10px;
    text-decoration: none;
    max-width: 340px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    cursor: pointer;
}

a.cfs-chip:hover[b-xk34wv0qyz] {
    border-color: var(--accent, #3b6ff0);
    text-decoration: none;
}

.cfs-more[b-xk34wv0qyz] {
    font-size: 11.5px;
    color: var(--text-faint, #8a919a);
    white-space: nowrap;
}
/* _content/Buildessa/Components/Lisa/ChatGoalBanner.razor.rz.scp.css */
/* Top-of-chat end-goal breadcrumb. Quiet by default — accent-tinted
   strip just above the conversation. Always one line; long goals
   ellipsize so the layout stays stable. */
.chat-goal[b-jrukupw5di] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    margin: 0 0 8px;
    border: 1px solid color-mix(in srgb, var(--accent, #6366f1) 30%, var(--border));
    background: color-mix(in srgb, var(--accent, #6366f1) 6%, transparent);
    border-radius: 6px;
    font-size: 12px;
    line-height: 1.45;
}

.chat-goal.goal-done[b-jrukupw5di] {
    border-color: color-mix(in srgb, var(--success, #2a9d8f) 35%, var(--border));
    background: color-mix(in srgb, var(--success, #2a9d8f) 6%, transparent);
}

.goal-icon[b-jrukupw5di] {
    flex: 0 0 auto;
    font-size: 13px;
    cursor: help;
}

.goal-label[b-jrukupw5di] {
    color: var(--muted);
    text-transform: uppercase;
    font-size: 10px;
    letter-spacing: 0.5px;
    font-weight: 600;
    flex: 0 0 auto;
}

.goal-text[b-jrukupw5di] {
    color: var(--fg);
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.goal-edit[b-jrukupw5di] {
    flex: 0 0 auto;
    background: transparent;
    border: 0;
    color: var(--muted);
    cursor: pointer;
    padding: 2px 4px;
    border-radius: 3px;
    display: inline-flex;
    align-items: center;
}

.goal-edit:hover[b-jrukupw5di] {
    background: var(--hover-overlay);
    color: var(--fg);
}

/* Edit mode */
.goal-input[b-jrukupw5di] {
    flex: 1;
    min-width: 0;
    padding: 4px 8px;
    border: 1px solid var(--accent, #6366f1);
    border-radius: 4px;
    background: var(--bg);
    color: var(--fg);
    font: inherit;
    font-size: 12px;
    outline: none;
}

.goal-btn[b-jrukupw5di] {
    flex: 0 0 auto;
    padding: 3px 10px;
    border-radius: 4px;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--fg);
    font: inherit;
    font-size: 11px;
    cursor: pointer;
}

.goal-btn:hover:not(:disabled)[b-jrukupw5di] {
    background: var(--hover-overlay);
}

.goal-btn.goal-save[b-jrukupw5di] {
    background: var(--accent, #6366f1);
    color: white;
    border-color: var(--accent, #6366f1);
}

.goal-btn.goal-save:hover:not(:disabled)[b-jrukupw5di] {
    filter: brightness(1.08);
}

.goal-btn:disabled[b-jrukupw5di] {
    opacity: 0.5;
    cursor: not-allowed;
}

/* Phase G — goal stack. Paused parent goal(s) render as a minimized,
   dimmed trail above the active goal so the user sees what was set aside
   when they accepted an offer (the active sub-goal nests beneath). */
.goal-stack[b-jrukupw5di] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin: 0 0 2px;
}

.goal-parent[b-jrukupw5di] {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 3px 12px;
    font-size: 11px;
    color: var(--muted);
    opacity: 0.8;
}

.goal-parent-icon[b-jrukupw5di] {
    flex: 0 0 auto;
    font-size: 11px;
    opacity: 0.7;
}

.goal-parent-text[b-jrukupw5di] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* The active goal sitting under a paused parent — indent + accent rail so
   the nesting reads at a glance. */
.chat-goal.goal-nested[b-jrukupw5di] {
    margin-left: 14px;
    border-left-width: 3px;
    border-left-color: var(--accent, #6366f1);
}
/* _content/Buildessa/Components/Lisa/ChatMessageView.razor.rz.scp.css */
/* Claude-style message layout:
   • User message: clear card (light surface + subtle border), tight padding.
   • Assistant message: plain text flow, no card, no border — easier to scan
     for long technical responses with code/lists.
   Author labels are hidden by default; click the body to toggle a small
   meta line (author + relative timestamp). Keeps the thread visually
   uncluttered while keeping provenance one click away. */

.msg[b-z5lhyhmtrx] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    position: relative;
}

/* Phase 34y → 34y.1 — per-message footer: meta line (author ·
   time) + action buttons (Copy + Save split with MD / Word / PDF).
   The buttons reuse the global .chat-action-btn / .chat-save-split
   classes so they read as the same control as the whole-chat
   header — the only adjustments here are slightly tighter density
   (this is inline, not a top-level toolbar) and an upward-opening
   dropdown since the buttons sit at the BOTTOM of the message
   and a downward menu would be clipped by the next turn / composer. */

.msg-footer[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    /* No reserved height when idle — the footer (meta + hover actions)
       collapses to nothing so messages sit close together. It only
       takes space when the user hovers (actions) or clicks (meta). */
    min-height: 0;
    margin-top: 0;
}

/* Per-message actions are a FLOATING OVERLAY pinned to the message's
   top-right corner — they never take layout space, so hovering doesn't
   shift the message. Icons-only; fade in on hover. */
.msg-actions[b-z5lhyhmtrx] {
    position: absolute;
    top: 2px;
    right: 2px;
    z-index: 4;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    opacity: 0;
    transition: opacity 0.12s ease-out;
}
.msg:hover .msg-actions[b-z5lhyhmtrx],
.msg.meta-open .msg-actions[b-z5lhyhmtrx],
.msg-actions:focus-within[b-z5lhyhmtrx] {
    opacity: 1;
}
/* When the dropdown is open, keep the actions visible even if the
   user's pointer slips off the message body. */
.msg-actions:has(.chat-save-split.open)[b-z5lhyhmtrx] { opacity: 1; }

/* Icon-only square buttons for the overlay. */
.msg-action-btn[b-z5lhyhmtrx] {
    padding: 4px !important;
    font-size: 11.5px !important;
}
.msg-action-btn svg[b-z5lhyhmtrx] { width: 14px; height: 14px; }

/* The overlay sits at the TOP of the message now, so the save menu opens
   DOWNWARD (was upward when actions lived in the footer). */
.msg-actions[b-z5lhyhmtrx]  .chat-save-menu {
    top: calc(100% + 4px);
    bottom: auto;
}

/* Collapse the meta line (author "You"/"Lisa" + timestamp + tokens) until
   the user clicks the message body. display:none so it reserves no vertical
   space. Compound selector (.msg-meta.msg-meta-hidden) so it beats the base
   .msg-meta { display:inline-flex } rule defined later in this file —
   equal-specificity source order would otherwise un-hide it. */
.msg-meta.msg-meta-hidden[b-z5lhyhmtrx] { display: none; }

.msg-body[b-z5lhyhmtrx] {
    word-wrap: break-word;
    line-height: 1.5;
    font-size: 15px;
    color: var(--fg);
    cursor: pointer;
}

/* User body is rendered as plain text: preserve newlines/spaces verbatim
   so a pasted log or multi-line note stays formatted. */
.msg-body-plain[b-z5lhyhmtrx] {
    white-space: pre-wrap;
}

/* User message ────────────────────────────────────────────────────── */

.msg-user .msg-body[b-z5lhyhmtrx] {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    padding: 9px 14px;
    border-radius: 10px;
}

/* Assistant message ───────────────────────────────────────────────── */

.msg-assistant .msg-body[b-z5lhyhmtrx] {
    /* No card — plain text flow. Keeps long answers (code blocks, lists,
       paragraphs) easy to scan without a wrapper competing for attention. */
    padding: 0;
    border: 0;
    background: transparent;
}

/* Rendered-markdown body: spacing for the HTML elements Markdig emits.
   ::deep is required because the markup lives inside a MarkupString and
   isn't part of the component's scoped-CSS rewriting. */

.msg-body-md[b-z5lhyhmtrx]  p {
    margin: 0 0 10px 0;
}
.msg-body-md[b-z5lhyhmtrx]  p:last-child {
    margin-bottom: 0;
}

.msg-body-md[b-z5lhyhmtrx]  ul,
.msg-body-md[b-z5lhyhmtrx]  ol {
    margin: 4px 0 12px 0;
    padding-left: 22px;
}
.msg-body-md[b-z5lhyhmtrx]  li {
    margin: 4px 0;
}
.msg-body-md[b-z5lhyhmtrx]  li > p {
    margin: 0 0 4px 0;
}

.msg-body-md[b-z5lhyhmtrx]  h1,
.msg-body-md[b-z5lhyhmtrx]  h2,
.msg-body-md[b-z5lhyhmtrx]  h3,
.msg-body-md[b-z5lhyhmtrx]  h4 {
    margin: 18px 0 8px 0;
    font-weight: 600;
    line-height: 1.3;
}
.msg-body-md[b-z5lhyhmtrx]  h1 { font-size: 1.4em; }
.msg-body-md[b-z5lhyhmtrx]  h2 { font-size: 1.25em; }
.msg-body-md[b-z5lhyhmtrx]  h3 { font-size: 1.1em; }
.msg-body-md[b-z5lhyhmtrx]  h4 { font-size: 1em; }

/* Deliverable card — a produced work product must be unmissable in a long
   reply (the renderer promotes every /lisa/deliverable/ link into this).
   Span-based markup styled as a block so it stays valid inside <p>. */
.msg-body-md[b-z5lhyhmtrx]  .deliverable-card {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 10px 0;
    padding: 10px 14px;
    border: 1px solid #c7d2fe;
    border-left: 4px solid #6366f1;
    border-radius: 8px;
    background: #eef2ff;
    max-width: 560px;
}
.msg-body-md[b-z5lhyhmtrx]  .deliverable-card-icon {
    font-size: 1.35em;
    line-height: 1;
}
.msg-body-md[b-z5lhyhmtrx]  .deliverable-card-body {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}
.msg-body-md[b-z5lhyhmtrx]  .deliverable-card-kicker {
    font-size: 0.68em;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #6366f1;
}
.msg-body-md[b-z5lhyhmtrx]  .deliverable-card-link {
    font-weight: 600;
    color: #3730a3;
    text-decoration: none;
    word-break: break-all;
}
.msg-body-md[b-z5lhyhmtrx]  .deliverable-card-link:hover {
    text-decoration: underline;
}

.msg-body-md[b-z5lhyhmtrx]  strong { font-weight: 600; }
.msg-body-md[b-z5lhyhmtrx]  em { font-style: italic; }

/* Inline code: subtle chip so it pops against running text without
   demanding attention. */
.msg-body-md[b-z5lhyhmtrx]  code {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 4px;
    padding: 1px 5px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.9em;
}

/* Fenced code blocks: padded card, horizontal scroll for long lines.
   The inner <code> inherits the parent <pre>'s background so the
   border-radius lines up cleanly. */
.msg-body-md[b-z5lhyhmtrx]  pre {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 10px 12px;
    margin: 8px 0 12px 0;
    overflow-x: auto;
    font-size: 13.5px;
    line-height: 1.5;
}
.msg-body-md[b-z5lhyhmtrx]  pre code {
    background: transparent;
    border: 0;
    padding: 0;
    font-size: inherit;
}

.msg-body-md[b-z5lhyhmtrx]  blockquote {
    border-left: 3px solid var(--border);
    margin: 8px 0;
    padding: 2px 0 2px 12px;
    color: var(--muted);
}

.msg-body-md[b-z5lhyhmtrx]  a {
    color: var(--accent);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.msg-body-md[b-z5lhyhmtrx]  hr {
    border: 0;
    border-top: 1px solid var(--border);
    margin: 14px 0;
}

/* Tables — used when Lisa replies with setpoint/trend data tables.
   Markdown gives us a bare <table> with no wrapper to hang overflow on, so the
   table itself becomes the scroll container (display:block + overflow-x). On a
   phone a wide data table then scrolls sideways on its own instead of forcing
   the whole chat column to scroll. */
.msg-body-md[b-z5lhyhmtrx]  table {
    display: block;
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    border-collapse: collapse;
    margin: 8px 0 12px 0;
    font-size: 14px;
}
.msg-body-md[b-z5lhyhmtrx]  th,
.msg-body-md[b-z5lhyhmtrx]  td {
    border: 1px solid var(--border);
    padding: 6px 10px;
    text-align: left;
}
.msg-body-md[b-z5lhyhmtrx]  th {
    background: var(--bg-overlay);
    font-weight: 600;
}

/* Meta reveal (author + time) ─────────────────────────────────────── */

.msg-meta[b-z5lhyhmtrx] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    color: var(--muted);
    margin-top: 2px;
    /* User cards are padded inwards; line up the meta line under the card edge
       rather than centred so it reads as a footnote, not a label. */
    padding-left: 2px;
}

.msg-user .msg-meta[b-z5lhyhmtrx] {
    padding-left: 0;
}

.msg-author[b-z5lhyhmtrx] {
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.6px;
}

.msg-user .msg-author[b-z5lhyhmtrx] {
    color: var(--accent);
}

.msg-sep[b-z5lhyhmtrx] {
    opacity: 0.6;
}

.msg-time[b-z5lhyhmtrx] {
    font-variant-numeric: tabular-nums;
}

/* Per-message token usage + cost, shown inline on the author/timestamp line. */
.msg-usage[b-z5lhyhmtrx] {
    font-variant-numeric: tabular-nums;
    opacity: 0.85;
    white-space: nowrap;
}

/* Interjection badge + Why disclosure ───────────────────────────────
   Assistant turns that fired automatically from an observation get a
   small "Lisa noticed" pill above the body. Click expands the trigger
   summary inline so the user can see what she was reacting to. Trust
   contract: never speak up without an explainable cause. */

.followup-badge[b-z5lhyhmtrx] {
    align-self: flex-start;
    display: inline-flex;
    align-items: center;
    margin: 0 0 6px 0;
    padding: 3px 10px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 999px;
    color: var(--accent, #6a4ec8);
    font-size: 11.5px;
    font-weight: 600;
}

.interject-badge[b-z5lhyhmtrx] {
    align-self: flex-start;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0 0 6px 0;
    padding: 3px 9px 3px 7px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 999px;
    color: var(--fg-dim);
    font: inherit;
    font-size: 11.5px;
    cursor: pointer;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.interject-badge:hover[b-z5lhyhmtrx] {
    background: var(--hover-overlay);
    color: var(--fg);
    border-color: var(--success);
}
.interject-icon[b-z5lhyhmtrx] {
    font-size: 12px;
    line-height: 1;
    color: var(--success);
}
.interject-chev[b-z5lhyhmtrx] {
    color: var(--muted);
    font-size: 12px;
    transition: transform 150ms ease;
}
.interject-chev.open[b-z5lhyhmtrx] { transform: rotate(90deg); }

.interject-why[b-z5lhyhmtrx] {
    align-self: flex-start;
    margin: 0 0 8px 0;
    padding: 8px 12px;
    background: var(--bg-overlay);
    border-left: 2px solid var(--success);
    border-radius: 4px;
    font-size: 12.5px;
    color: var(--fg-dim);
    max-width: 100%;
}
.interject-why-label[b-z5lhyhmtrx] {
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-size: 10.5px;
    margin-right: 6px;
}
.interject-why-kw[b-z5lhyhmtrx] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    font-size: 10px;
    color: var(--muted);
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 999px;
    text-transform: lowercase;
    letter-spacing: 0.3px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

/* Observation cards ─────────────────────────────────────────────────
   Agent-pushed events from the paired workstation. Render distinct
   from user/assistant messages so a reader scanning the thread can
   tell at a glance "this came from the BMS, not from the human or
   the LLM." Quiet — they're context, not the conversation. */

.obs[b-z5lhyhmtrx] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 8px 14px;
    border-left: 2px solid var(--success);
    /* Transparent fill (keep the left border marker) — consistent with
       Lisa + workstation boxes. */
    background: transparent;
    border-radius: 4px;
    color: var(--fg-dim);
    font-size: 13px;
    line-height: 1.5;
}
.obs-icon[b-z5lhyhmtrx] {
    font-size: 14px;
    line-height: 1.5;
    flex-shrink: 0;
}
.obs-body[b-z5lhyhmtrx] {
    flex: 1;
    min-width: 0;
}
.obs-summary[b-z5lhyhmtrx] {
    color: var(--fg);
}
.obs-meta[b-z5lhyhmtrx] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 3px;
    font-size: 11px;
    color: var(--muted);
}
.obs-source[b-z5lhyhmtrx] {
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-weight: 500;
    color: var(--success);
}
.obs-sep[b-z5lhyhmtrx] { opacity: 0.6; }
.obs-time[b-z5lhyhmtrx] { font-variant-numeric: tabular-nums; }

/* Held marker ─────────────────────────────────────────────────────── */

/* Lisa's reply was cut off mid-stream because the user sent another
   message. The text stays as-is (no rewriting) and we tag it visually
   so the thread reads honestly. Subtle: it's an artefact of the
   dialog model, not a problem. */
.msg-held .msg-body[b-z5lhyhmtrx] {
    color: var(--fg-dim);
    opacity: 0.85;
}
.held-tag[b-z5lhyhmtrx] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    font-size: 10.5px;
    color: var(--muted);
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 999px;
    text-transform: lowercase;
    letter-spacing: 0.4px;
    vertical-align: middle;
}

/* Streaming cursor + thinking-dots indicator ──────────────────────── */

.caret[b-z5lhyhmtrx] {
    display: inline-block;
    margin-left: 2px;
    color: var(--accent);
    animation: blink-b-z5lhyhmtrx 1s steps(2) infinite;
}

@keyframes blink-b-z5lhyhmtrx {
    50% { opacity: 0; }
}

.thinking[b-z5lhyhmtrx] {
    display: inline-flex;
    gap: 4px;
    padding: 2px 0;
}

.thinking .dot[b-z5lhyhmtrx] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--muted);
    animation: pulse-b-z5lhyhmtrx 1.2s ease-in-out infinite;
}

.thinking .dot:nth-child(2)[b-z5lhyhmtrx] { animation-delay: 0.15s; }
.thinking .dot:nth-child(3)[b-z5lhyhmtrx] { animation-delay: 0.3s; }

@keyframes pulse-b-z5lhyhmtrx {
    0%, 80%, 100% { opacity: 0.25; transform: scale(0.8); }
    40%          { opacity: 1;    transform: scale(1); }
}

/* ── Phase 13: workstation contribution card ──────────────────────────
   A chat-visible message authored by the workstation. Visually distinct
   from observations (which are background context) and from Lisa's
   replies. Different accent color, gear avatar, "why?" disclosure for
   auditability of the agent's decision to interject. */

.wsc[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 6px 12px;
    border-left: 3px solid var(--info, #3a86ff);
    /* Transparent fill (keep the left border marker) — same plain look
       as Lisa's message, just tagged with the workstation accent. */
    background: transparent;
    border-radius: 4px;
    color: var(--fg);
    font-size: 13px;
    line-height: 1.45;
    cursor: pointer;
}
/* Subtle hover so it reads as clickable (reveals the meta line). */
.wsc:hover[b-z5lhyhmtrx] { background: color-mix(in srgb, var(--info, #3a86ff) 7%, transparent); }
/* When the row has an image (a posted screenshot), top-align so the icon
   sits beside the first line rather than centered against a tall image. */
.wsc:has(.wsc-summary img)[b-z5lhyhmtrx] { align-items: flex-start; }

.wsc-avatar[b-z5lhyhmtrx] {
    flex: 0 0 22px;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--info, #3a86ff);
    color: var(--accent-fg, #fff);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
}

/* Hidden until the row is clicked — same click-to-reveal as normal messages.
   Compound selector so it beats the later .wsc-meta { display:flex } rule. */
.wsc-meta.wsc-meta-hidden[b-z5lhyhmtrx] { display: none; }

.wsc-body[b-z5lhyhmtrx] { flex: 1; min-width: 0; }

.wsc-summary[b-z5lhyhmtrx] { color: var(--fg); }
/* Screenshots the workstation posts (markdown images) — sized to fit the bubble,
   clickable to open full-size in a new tab. */
.wsc-summary img[b-z5lhyhmtrx] {
    display: block;
    max-width: 100%;
    margin-top: 8px;
    border: 1px solid var(--border, #e2e2e7);
    border-radius: 8px;
    cursor: zoom-in;
}
.wsc-summary p[b-z5lhyhmtrx] { margin: 0 0 4px; }
.wsc-summary p:last-child[b-z5lhyhmtrx] { margin-bottom: 0; }
/* Grouped computer-use step list — tight, so many steps stay in one compact box. */
.wsc-summary ul[b-z5lhyhmtrx] { margin: 2px 0; padding-left: 18px; }
.wsc-summary li[b-z5lhyhmtrx] { margin: 1px 0; }

.wsc-meta[b-z5lhyhmtrx] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 4px;
    font-size: 11px;
    color: var(--muted);
}

.wsc-source[b-z5lhyhmtrx] { text-transform: uppercase; letter-spacing: 0.4px; font-weight: 600; color: var(--info, #3a86ff); }
.wsc-sep[b-z5lhyhmtrx]    { opacity: 0.5; }

.wsc-why[b-z5lhyhmtrx] {
    background: transparent;
    border: 0;
    padding: 0;
    color: var(--muted);
    font: inherit;
    font-size: 11px;
    cursor: pointer;
}

.wsc-why:hover[b-z5lhyhmtrx] { color: var(--fg); }

.wsc-why span[b-z5lhyhmtrx] { display: inline-block; transition: transform 0.15s; }
.wsc-why span.open[b-z5lhyhmtrx] { transform: rotate(90deg); }

.wsc-why-detail[b-z5lhyhmtrx] {
    margin-top: 6px;
    padding: 6px 8px;
    background: var(--bg-elevated);
    border-radius: 3px;
    font-size: 12px;
    color: var(--fg-dim);
}

.wsc-why-label[b-z5lhyhmtrx] {
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.3px;
    font-size: 10px;
    margin-right: 4px;
}

/* Phase 33g — iterative agent trace. Single visible container per
   turn that grows step-by-step as the loop runs. Compact: each step
   is ONE line; the container itself collapses to a summary header
   once the loop completes. Modelled on Claude Code's tool-call log. */
.trace[b-z5lhyhmtrx] {
    margin: 4px 0;
    padding: 6px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    /* Transparent fill (keep the border) so it reads like Lisa's plain
       message rather than a tinted card. */
    background: transparent;
    font-size: 12px;
}
.trace-busy[b-z5lhyhmtrx] {
    border-color: color-mix(in srgb, var(--accent, #6366f1) 50%, var(--border));
}
.trace-head[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: pointer;
    user-select: none;
    padding: 2px 0;
}
.trace-icon[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    font-size: 14px;
    opacity: 0.7;
}
.trace-body[b-z5lhyhmtrx] {
    flex: 1;
    min-width: 0;
    display: flex;
    align-items: baseline;
    gap: 6px;
    overflow: hidden;
}
.trace-label[b-z5lhyhmtrx] {
    color: var(--fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.trace-spinner[b-z5lhyhmtrx] {
    color: var(--accent, #6366f1);
    animation: trace-pulse-b-z5lhyhmtrx 1.2s ease-in-out infinite;
    flex: 0 0 auto;
}
/* Live-progress note next to an in-flight step's label ("0:50, 4.2K
   received…") — accent-colored so the working heartbeat is visible at a
   glance instead of blending into the label text (user ask). */
.trace-live[b-z5lhyhmtrx] {
    color: var(--accent, #6366f1);
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    flex: 0 0 auto;
}
@keyframes trace-pulse-b-z5lhyhmtrx {
    0%, 100% { opacity: 0.3; }
    50%      { opacity: 1; }
}
.trace-chev[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    color: var(--muted);
    transition: transform 0.15s ease-out;
}
.trace-chev.open[b-z5lhyhmtrx] {
    transform: rotate(90deg);
}

.trace-steps[b-z5lhyhmtrx] {
    list-style: none;
    margin: 6px 0 2px;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
    border-top: 1px dashed var(--border);
    padding-top: 6px;
}
.trace-step[b-z5lhyhmtrx] {
    padding: 0;
}
.trace-step-head[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 3px 4px;
    border-radius: 4px;
    cursor: pointer;
    user-select: none;
}
.trace-step-head:hover[b-z5lhyhmtrx] {
    background: var(--hover-overlay);
}
.trace-step-icon[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    font-size: 12px;
    opacity: 0.85;
}
.trace-step-label[b-z5lhyhmtrx] {
    flex: 1;
    min-width: 0;
    color: var(--fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.trace-step-time[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    font-size: 10px;
    color: var(--muted);
    font-family: var(--mono, monospace);
}
.trace-step-chev[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    color: var(--muted);
    transition: transform 0.15s ease-out;
    font-size: 11px;
}
.trace-step-chev.open[b-z5lhyhmtrx] {
    transform: rotate(90deg);
}

.trace-step-detail[b-z5lhyhmtrx] {
    margin: 4px 0 6px 22px;
    padding: 6px 8px;
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 4px;
    font-size: 11px;
}
.trace-step-results[b-z5lhyhmtrx] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.trace-step-results li[b-z5lhyhmtrx] {
    padding: 2px 0;
}
.trace-step-results a[b-z5lhyhmtrx] {
    color: var(--fg);
    text-decoration: none;
    font-size: 11px;
}
.trace-step-results a:hover[b-z5lhyhmtrx] {
    color: var(--accent);
}
.trace-step-domain[b-z5lhyhmtrx] {
    color: var(--muted);
    font-family: var(--mono, monospace);
    font-size: 10px;
}
.trace-step-question[b-z5lhyhmtrx] {
    font-style: italic;
    color: var(--fg);
    line-height: 1.5;
}
.trace-step-pre[b-z5lhyhmtrx] {
    margin: 0;
    font-family: var(--mono, monospace);
    font-size: 10px;
    line-height: 1.4;
    color: var(--fg);
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 240px;
    overflow-y: auto;
}

/* Per-kind accent on the icon — quick visual scan of step types */
.trace-step-search .trace-step-icon[b-z5lhyhmtrx] { color: var(--accent); }
.trace-step-ask    .trace-step-icon[b-z5lhyhmtrx] { color: var(--warning, #f59e0b); }
.trace-step-answer .trace-step-icon[b-z5lhyhmtrx] { color: var(--success, #2a9d8f); }

/* (Legacy research/plan styles removed in Phase 33g — replaced by
   the unified trace container above.) */
.research[b-z5lhyhmtrx] {
    margin: 4px 0;
    padding: 8px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--bg-overlay);
    font-size: 12px;
}
.research-head[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: pointer;
    user-select: none;
}
.research-icon[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    font-size: 14px;
    opacity: 0.7;
}
.research-body[b-z5lhyhmtrx] {
    flex: 1;
    min-width: 0;
}
.research-line[b-z5lhyhmtrx] {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    align-items: baseline;
    line-height: 1.45;
    color: var(--fg);
}
.research-label[b-z5lhyhmtrx] {
    color: var(--muted);
}
.research-query[b-z5lhyhmtrx] {
    font-family: var(--mono, monospace);
    color: var(--accent);
    font-weight: 500;
}
.research-count[b-z5lhyhmtrx] {
    color: var(--muted);
}
.research-spinner[b-z5lhyhmtrx] {
    color: var(--accent);
    animation: research-pulse-b-z5lhyhmtrx 1.2s ease-in-out infinite;
}
@keyframes research-pulse-b-z5lhyhmtrx {
    0%, 100% { opacity: 0.3; }
    50%      { opacity: 1; }
}
.research-chev[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    color: var(--muted);
    transition: transform 0.15s ease-out;
    transform: rotate(0deg);
}
.research-chev.open[b-z5lhyhmtrx] {
    transform: rotate(90deg);
}

.research-list[b-z5lhyhmtrx] {
    list-style: none;
    margin: 8px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.research-list li[b-z5lhyhmtrx] {
    padding: 0;
}
.research-link[b-z5lhyhmtrx] {
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 4px 8px;
    border-radius: 4px;
    text-decoration: none;
    color: var(--fg);
}
.research-link:hover[b-z5lhyhmtrx] {
    background: var(--hover-overlay);
}
.research-link-title[b-z5lhyhmtrx] {
    font-size: 12px;
    font-weight: 500;
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.research-link-domain[b-z5lhyhmtrx] {
    font-size: 10px;
    color: var(--muted);
    font-family: var(--mono, monospace);
}

/* Agent plan card (Phase 33f) — same visual register as the research
   card. Slightly different tint (subtle accent) so the two are
   distinguishable at a glance. */
.plan[b-z5lhyhmtrx] {
    margin: 4px 0;
    padding: 8px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: color-mix(in srgb, var(--accent, #6366f1) 5%, var(--bg-overlay));
    font-size: 12px;
}
.plan-busy[b-z5lhyhmtrx] {
    border-color: var(--accent, #6366f1);
}
.plan-head[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: pointer;
    user-select: none;
}
.plan-icon[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    font-size: 14px;
    opacity: 0.7;
}
.plan-body[b-z5lhyhmtrx] {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 4px;
}
.plan-label[b-z5lhyhmtrx] {
    color: var(--muted);
    font-weight: 500;
    text-transform: uppercase;
    font-size: 10px;
    letter-spacing: 0.5px;
}
.plan-understanding[b-z5lhyhmtrx] {
    color: var(--fg);
    font-style: italic;
}
.plan-spinner[b-z5lhyhmtrx] {
    color: var(--accent, #6366f1);
    animation: plan-pulse-b-z5lhyhmtrx 1.2s ease-in-out infinite;
}
@keyframes plan-pulse-b-z5lhyhmtrx {
    0%, 100% { opacity: 0.3; }
    50%      { opacity: 1; }
}
.plan-chev[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    color: var(--muted);
    transition: transform 0.15s ease-out;
}
.plan-chev.open[b-z5lhyhmtrx] {
    transform: rotate(90deg);
}

.plan-detail[b-z5lhyhmtrx] {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px dashed var(--border);
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.plan-section[b-z5lhyhmtrx] {
    font-size: 12px;
    line-height: 1.5;
}
.plan-section-label[b-z5lhyhmtrx] {
    font-size: 10px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 2px;
    font-weight: 600;
    display: block;
}
.plan-section ul[b-z5lhyhmtrx] {
    margin: 2px 0 0;
    padding-left: 16px;
}
.plan-section li[b-z5lhyhmtrx] {
    color: var(--fg);
}
.plan-action-type[b-z5lhyhmtrx] {
    color: var(--accent, #6366f1);
    font-family: var(--mono, monospace);
    font-size: 11px;
}
.plan-action-reason[b-z5lhyhmtrx] {
    color: var(--muted);
    font-style: italic;
}

/* Decision table (Phase 33g.2) — when the iterative agent pauses
   to ask the user a choice question, this renders under the
   assistant turn. Columns: pick (radio/check) | option (with
   recommended badge) | upside | downside. Lisa's overall
   recommendation sits below the table; submit button sends the
   selection as the user's next message. */
.decision-table[b-z5lhyhmtrx] {
    margin: 10px 0 0;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--bg);
    overflow: hidden;
}
.decision-table table[b-z5lhyhmtrx] {
    width: 100%;
    border-collapse: collapse;
    font-size: 12px;
}
.decision-table thead th[b-z5lhyhmtrx] {
    text-align: left;
    padding: 8px 12px;
    background: var(--bg-overlay);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--muted);
    font-weight: 600;
    border-bottom: 1px solid var(--border);
}
.decision-table tbody tr[b-z5lhyhmtrx] {
    border-bottom: 1px solid var(--border);
    cursor: pointer;
    transition: background 0.1s ease-out;
}
.decision-table tbody tr:last-child[b-z5lhyhmtrx] {
    border-bottom: none;
}
.decision-table tbody tr:hover[b-z5lhyhmtrx] {
    background: var(--hover-overlay);
}
.decision-table tbody tr.dt-selected[b-z5lhyhmtrx] {
    background: color-mix(in srgb, var(--accent, #6366f1) 10%, transparent);
}
.decision-table tbody tr.dt-recommended[b-z5lhyhmtrx] {
    background: color-mix(in srgb, var(--success, #2a9d8f) 6%, transparent);
}
.decision-table tbody tr.dt-recommended.dt-selected[b-z5lhyhmtrx] {
    background: color-mix(in srgb, var(--accent, #6366f1) 14%,
                          color-mix(in srgb, var(--success, #2a9d8f) 6%, transparent));
}
.decision-table td[b-z5lhyhmtrx] {
    padding: 10px 12px;
    vertical-align: top;
    line-height: 1.45;
}

/* Phase 34i.1 — compact menu format. Used when none of the rows
   have upside/downside content (navigation menus, simple option
   pickers). Drops the Upside/Downside columns visually + tightens
   row spacing so it reads as a list of choices rather than a
   half-empty table. */
.decision-table.decision-menu td[b-z5lhyhmtrx] {
    padding: 8px 12px;
}
.decision-table.decision-menu .dt-option-label[b-z5lhyhmtrx] {
    font-weight: 500;
}
.dt-pick[b-z5lhyhmtrx] {
    width: 36px;
    text-align: center;
}
.dt-pick input[b-z5lhyhmtrx] {
    cursor: pointer;
}
.dt-option[b-z5lhyhmtrx] {
    min-width: 140px;
}
.dt-option-label[b-z5lhyhmtrx] {
    font-weight: 500;
    color: var(--fg);
    margin-bottom: 2px;
}
.dt-rec-badge[b-z5lhyhmtrx] {
    display: inline-block;
    margin-top: 2px;
    padding: 1px 6px;
    border-radius: 3px;
    font-size: 10px;
    background: color-mix(in srgb, var(--success, #2a9d8f) 20%, transparent);
    color: var(--success, #2a9d8f);
    cursor: help;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-weight: 600;
}
.dt-upside[b-z5lhyhmtrx],
.dt-downside[b-z5lhyhmtrx] {
    color: var(--muted);
    font-size: 12px;
}
.dt-upside[b-z5lhyhmtrx] {
    color: color-mix(in srgb, var(--success, #2a9d8f) 70%, var(--fg));
}
.dt-downside[b-z5lhyhmtrx] {
    color: color-mix(in srgb, var(--danger, #e63946) 50%, var(--fg));
}

.dt-summary[b-z5lhyhmtrx] {
    padding: 10px 12px;
    background: var(--bg-overlay);
    border-top: 1px solid var(--border);
    font-size: 12px;
    line-height: 1.55;
    color: var(--fg);
}
.dt-summary-label[b-z5lhyhmtrx] {
    color: var(--muted);
    text-transform: uppercase;
    font-size: 10px;
    letter-spacing: 0.5px;
    margin-right: 6px;
    font-weight: 600;
}

.dt-actions[b-z5lhyhmtrx] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    border-top: 1px solid var(--border);
}
.dt-submit[b-z5lhyhmtrx] {
    padding: 6px 14px;
    border-radius: 5px;
    border: 0;
    background: var(--accent, #6366f1);
    color: white;
    font: inherit;
    font-size: 12px;
    font-weight: 500;
    cursor: pointer;
}
.dt-submit:hover:not(:disabled)[b-z5lhyhmtrx] {
    filter: brightness(1.08);
}
.dt-submit:disabled[b-z5lhyhmtrx] {
    opacity: 0.45;
    cursor: not-allowed;
}
.dt-hint[b-z5lhyhmtrx] {
    font-size: 11px;
    color: var(--muted);
    font-style: italic;
}

/* On a phone the four-column choice table (pick | option | upside | downside)
   is too wide to read, so tighten cell padding and let the whole table scroll
   sideways within its rounded frame rather than crushing every column. */
@media (max-width: 560px) {
    .decision-table[b-z5lhyhmtrx] { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .decision-table td[b-z5lhyhmtrx], .decision-table thead th[b-z5lhyhmtrx] { padding: 8px 8px; }
    .dt-option[b-z5lhyhmtrx] { min-width: 120px; }
    .dt-upside[b-z5lhyhmtrx], .dt-downside[b-z5lhyhmtrx] { min-width: 108px; }
}

/* "Revised" badge — sits next to the held tag. Subtle but
   informative; tooltip carries the critic's revision guidance. */
.revised-tag[b-z5lhyhmtrx] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 6px;
    border-radius: 3px;
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    background: color-mix(in srgb, var(--warning, #f59e0b) 18%, transparent);
    color: var(--warning, #f59e0b);
    cursor: help;
}

/* The revised badge expands (click) to show what changed + the superseded
   draft — kept for transparency, never silently discarded. Collapsed by
   default; the detail panel stays out of the way until asked for. */
.revised-disclosure[b-z5lhyhmtrx] {
    display: inline-block;
    margin-left: 8px;
    vertical-align: middle;
}
.revised-disclosure .revised-tag[b-z5lhyhmtrx] {
    margin-left: 0;
    cursor: pointer;
    user-select: none;
    list-style: none;
}
.revised-disclosure summary[b-z5lhyhmtrx]::-webkit-details-marker { display: none; }
.revised-disclosure summary[b-z5lhyhmtrx]::marker { content: ""; }
.revised-detail[b-z5lhyhmtrx] {
    margin-top: 6px;
    padding: 8px 10px;
    border: 1px solid var(--border, #e5e7eb);
    border-radius: 8px;
    background: var(--bg-elevated, #f9fafb);
    font-size: 0.8rem;
    max-width: 680px;
}
.revised-why[b-z5lhyhmtrx] { margin-bottom: 6px; }
.revised-original-label[b-z5lhyhmtrx] {
    opacity: 0.6;
    margin-bottom: 4px;
    font-size: 0.75rem;
}
.revised-original-body[b-z5lhyhmtrx] {
    white-space: pre-wrap;
    max-height: 240px;
    overflow: auto;
    opacity: 0.85;
    font-family: var(--mono, ui-monospace, monospace);
    font-size: 0.78rem;
    border-left: 2px solid var(--border, #e5e7eb);
    padding-left: 8px;
}

/* Phase 34z — inline input affordance on AskOption rows. When the
   LLM marks an option with input_placeholder, the row exposes a
   text field so the user can pick + supply the required value in
   one action instead of triggering another ask-user round. The
   row's radio behavior is also adjusted (selection-only on click,
   submit on Enter / send button) — see ChatMessageView.razor. */
.dt-option-input-wrap[b-z5lhyhmtrx] {
    display: inline-flex;
    align-items: stretch;
    gap: 0;
    margin-top: 6px;
    max-width: 320px;
}
.dt-option-input[b-z5lhyhmtrx] {
    flex: 1;
    min-width: 0;
    padding: 5px 8px;
    background: var(--bg-input, var(--bg));
    color: var(--fg);
    border: 1px solid var(--border);
    border-right: 0;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px;
    font: inherit;
    font-size: 12px;
    outline: 0;
}
.dt-option-input:focus[b-z5lhyhmtrx] {
    border-color: var(--accent, #6366f1);
}
.dt-option-send[b-z5lhyhmtrx] {
    flex: 0 0 auto;
    padding: 0 10px;
    background: var(--accent, #6366f1);
    color: white;
    border: 1px solid var(--accent, #6366f1);
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
    font: inherit;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    line-height: 1;
}
.dt-option-send:hover:not(:disabled)[b-z5lhyhmtrx] {
    filter: brightness(1.08);
}
.dt-option-send:disabled[b-z5lhyhmtrx] {
    opacity: 0.45;
    cursor: not-allowed;
}
/* Rows that need an input read as actionable inputs themselves —
   downplay the row hover-highlight so it doesn't fight with the
   input focus state. */
.dt-has-input[b-z5lhyhmtrx] { cursor: default; }

/* Attachment chips on user messages. */
.msg-attachments[b-z5lhyhmtrx] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 8px;
}

.msg-attachment-chip[b-z5lhyhmtrx] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 12px;
    padding: 3px 10px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: var(--bg-elevated);
    color: var(--muted);
    max-width: 260px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.msg-attachment-chip.is-image[b-z5lhyhmtrx] {
    border-color: var(--accent);
}

/* Defensive cap for any inline image in a chat message: a full-size plan
   sheet must never swamp the thread. Click-through (when link-wrapped)
   opens the original. */
.msg-body-md[b-z5lhyhmtrx]  img {
    max-width: 100%;
    max-height: 280px;
    width: auto;
    height: auto;
    object-fit: contain;
    border: 1px solid var(--border, #ddd);
    border-radius: 6px;
}

/* Live work narration beside the blinking indicator — what Lisa is
   doing right now, where the user is already reading. */
.caret-activity[b-z5lhyhmtrx] {
    margin-left: 8px;
    font-size: 0.85em;
    font-style: italic;
    opacity: 0.6;
    overflow-wrap: anywhere;
}

/* ── Provenance chip (the (!)/ⓘ citation record) ──────────────────
   Field ask: "is this from a source or from the LLM?" Green ⓘ = live
   sources fed the reply; amber (!) = built-in model knowledge only.
   Expands to code-recorded citations + plain reliability notes. */

.prov-disclosure[b-z5lhyhmtrx] {
    display: inline-block;
    margin-left: 8px;
    vertical-align: middle;
}

.prov-tag[b-z5lhyhmtrx] {
    display: inline-block;
    padding: 1px 6px;
    border-radius: 3px;
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    cursor: pointer;
    list-style: none;
}
.prov-tag[b-z5lhyhmtrx]::-webkit-details-marker { display: none; }

.prov-tag.prov-sourced[b-z5lhyhmtrx] {
    background: color-mix(in srgb, var(--success, #2a9d8f) 16%, transparent);
    color: var(--success, #2a9d8f);
}

.prov-tag.prov-llm[b-z5lhyhmtrx] {
    background: color-mix(in srgb, var(--warning, #f59e0b) 18%, transparent);
    color: var(--warning, #f59e0b);
}

/* Field ask (2026-08-15): the amber "(!) no sources" chip on every
   ungrounded reply reads as noise — hide it until the message is hovered.
   Stays visible while its disclosure is open or keyboard-focused. The
   green "sources" chip keeps its always-on visibility (positive signal). */
.prov-disclosure:has(> .prov-tag.prov-llm)[b-z5lhyhmtrx] {
    opacity: 0;
    transition: opacity 120ms ease;
}
.msg:hover .prov-disclosure:has(> .prov-tag.prov-llm)[b-z5lhyhmtrx],
.prov-disclosure[open]:has(> .prov-tag.prov-llm)[b-z5lhyhmtrx],
.prov-disclosure:focus-within:has(> .prov-tag.prov-llm)[b-z5lhyhmtrx] {
    opacity: 1;
}

.prov-detail[b-z5lhyhmtrx] {
    margin-top: 6px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--bg-overlay, rgba(0, 0, 0, 0.02));
    display: flex;
    flex-direction: column;
    gap: 10px;
    font-size: 12px;
    max-width: 560px;
}

.prov-section[b-z5lhyhmtrx] {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.prov-head[b-z5lhyhmtrx] {
    font-weight: 600;
    color: var(--fg);
}

.prov-hits[b-z5lhyhmtrx] {
    margin: 2px 0 0;
    padding-left: 18px;
}

.prov-hits li[b-z5lhyhmtrx] {
    overflow-wrap: anywhere;
    line-height: 1.5;
}

.prov-rel[b-z5lhyhmtrx] {
    color: var(--muted);
    line-height: 1.5;
}

/* P3 - team-chat author label on a teammate's message */
.msg-author[b-z5lhyhmtrx] {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--accent, #c4b5fd);
    margin-bottom: 2px;
}
/* _content/Buildessa/Components/Lisa/ChatOutputsPanel.razor.rz.scp.css */
/* Outputs tab — clean file rows: icon | title+meta | download.
   Neutral colors only (inherit the theme); subtle card border so rows
   read as items, not a text wall (field feedback: "format is not clean"). */

.outputs-list[b-dqtbjvmfkk] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 10px 2px;
}

.out-row[b-dqtbjvmfkk] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 8px 10px;
    border: 1px solid rgba(127, 127, 127, 0.22);
    border-radius: 8px;
    background: rgba(127, 127, 127, 0.05);
}

.out-icon[b-dqtbjvmfkk] {
    font-size: 15px;
    line-height: 1.3;
    flex: 0 0 auto;
}

.out-body[b-dqtbjvmfkk] {
    flex: 1 1 auto;
    min-width: 0; /* lets the title wrap instead of overflowing the rail */
}

.out-title[b-dqtbjvmfkk] {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1.35;
    text-decoration: none;
    overflow-wrap: anywhere;
}

.out-title:hover[b-dqtbjvmfkk] {
    text-decoration: underline;
}

.out-meta[b-dqtbjvmfkk] {
    margin-top: 2px;
    font-size: 11px;
    opacity: 0.62;
}

.out-download[b-dqtbjvmfkk] {
    flex: 0 0 auto;
    font-size: 13px;
    line-height: 1.3;
    text-decoration: none;
    padding: 4px 7px;
    border: 1px solid rgba(127, 127, 127, 0.28);
    border-radius: 6px;
    opacity: 0.75;
}

.out-download:hover[b-dqtbjvmfkk] {
    opacity: 1;
    background: rgba(127, 127, 127, 0.12);
}
/* _content/Buildessa/Components/Lisa/ContextRail.razor.rz.scp.css */
/* Right-side context rail. Quiet by default, fills in only the slot(s)
   that need attention. Visually subordinate to the conversation — no
   strong borders, muted colours, only the action affordances get
   accent treatment. */

.rail[b-bgfop6bxfw] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 18px 16px;
    border-left: 1px solid var(--border);
    background: var(--bg);
    height: 100%;
    box-sizing: border-box;
    overflow-y: auto;
}

.rail-empty[b-bgfop6bxfw] {
    border-left: 1px solid var(--border);
    background: var(--bg);
    height: 100%;
}

.rail-head[b-bgfop6bxfw] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 4px;
}
.rail-title[b-bgfop6bxfw] {
    font-size: 11px;
    font-weight: 600;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.6px;
}

/* Phase 34u.5 — Plan|Context tab bar. Lives at the top of the rail in
   place of the old "CONTEXT" title. Underline on the active tab,
   muted on the inactive — visually subordinate to the conversation
   so it doesn't compete with the chat itself. */
.rail-tabs[b-bgfop6bxfw] {
    display: flex;
    gap: 2px;
    margin: -4px -4px 8px;
    padding-bottom: 4px;
    border-bottom: 1px solid var(--border);
}
.rail-tab[b-bgfop6bxfw] {
    flex: 1;
    background: transparent;
    border: 0;
    border-bottom: 2px solid transparent;
    color: var(--muted);
    font: inherit;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    padding: 8px 4px 6px;
    margin-bottom: -5px;       /* line up active underline with row */
    cursor: pointer;
    transition: color 0.12s, border-color 0.12s;
}
.rail-tab:hover[b-bgfop6bxfw] {
    color: var(--fg-dim);
}
.rail-tab.active[b-bgfop6bxfw] {
    color: var(--fg);
    border-bottom-color: var(--accent, #6366f1);
}

/* Empty-state shown inside the Plan tab when no goal is set yet —
   gives the user a hint about what this tab will fill with once
   they engage Lisa, instead of a blank panel that looks broken. */
.rail-empty-state[b-bgfop6bxfw] {
    padding: 14px 6px;
    font-size: 12px;
    line-height: 1.5;
    color: var(--muted);
    font-style: italic;
}

/* Rows ──────────────────────────────────────────────────────────── */

.rail-row[b-bgfop6bxfw] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 8px 4px;
    border-radius: 6px;
}
.rail-row-readonly[b-bgfop6bxfw] {
    /* Spaces / equipment summary — read-only in v1. */
}
.rail-row-gap[b-bgfop6bxfw] {
    /* Action needed — slightly highlighted bg to draw the eye. */
    background: var(--bg-overlay);
    border: 1px dashed var(--border);
}
.rail-row-known[b-bgfop6bxfw] {
    /* Established context — quiet. */
}

.rail-icon[b-bgfop6bxfw] {
    width: 18px;
    text-align: center;
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 14px;
    line-height: 1;
}
.rail-row-body[b-bgfop6bxfw] {
    flex: 1;
    min-width: 0;
}
.rail-row-label[b-bgfop6bxfw] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 2px;
}
.rail-row-value[b-bgfop6bxfw] {
    font-size: 13px;
    color: var(--fg);
    word-break: break-word;
}
.rail-row-value-faint[b-bgfop6bxfw] {
    color: var(--muted);
    font-style: italic;
}

.rail-tag[b-bgfop6bxfw] {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 6px;
    font-size: 10px;
    font-weight: 500;
    color: var(--muted);
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 999px;
    text-transform: lowercase;
    letter-spacing: 0;
    vertical-align: middle;
}

/* Inline action affordances ─────────────────────────────────────── */

.rail-link[b-bgfop6bxfw] {
    background: transparent;
    border: 0;
    color: var(--fg-dim);
    font: inherit;
    font-size: 12px;
    padding: 2px 4px;
    cursor: pointer;
    flex-shrink: 0;
}
.rail-link:hover[b-bgfop6bxfw] { color: var(--fg); }
.rail-link-action[b-bgfop6bxfw] {
    color: var(--accent);
    font-weight: 600;
}

/* Picker popover ────────────────────────────────────────────────── */

.rail-picker[b-bgfop6bxfw] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 8px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
    margin-top: -4px;
}
.rail-picker-label[b-bgfop6bxfw] {
    font-size: 10px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    padding: 4px 6px;
}
.rail-picker-item[b-bgfop6bxfw] {
    background: transparent;
    border: 0;
    color: var(--fg);
    text-align: left;
    padding: 6px 8px;
    border-radius: 4px;
    cursor: pointer;
    font: inherit;
    font-size: 13px;
}
.rail-picker-item:hover[b-bgfop6bxfw] {
    background: var(--hover-overlay);
}
.rail-picker-item:disabled[b-bgfop6bxfw] {
    color: var(--muted);
    cursor: default;
}
.rail-picker-create[b-bgfop6bxfw] {
    margin-top: 4px;
    background: transparent;
    border: 1px dashed var(--border);
    color: var(--accent);
    text-align: left;
    padding: 6px 8px;
    border-radius: 4px;
    cursor: pointer;
    font: inherit;
    font-size: 13px;
}
.rail-picker-create:hover[b-bgfop6bxfw] { background: var(--hover-overlay); }
.rail-picker-close[b-bgfop6bxfw] {
    margin-top: 4px;
    background: transparent;
    border: 0;
    color: var(--muted);
    text-align: right;
    padding: 4px 6px;
    cursor: pointer;
    font: inherit;
    font-size: 11px;
}

/* Inline form (Add building) ────────────────────────────────────── */

.rail-form[b-bgfop6bxfw] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 10px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
}
.rail-form-label[b-bgfop6bxfw] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.rail-form-input[b-bgfop6bxfw] {
    width: 100%;
    box-sizing: border-box;
    background: var(--bg);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 5px;
    padding: 5px 8px;
    font: inherit;
    font-size: 13px;
    outline: 0;
}
.rail-form-input:focus[b-bgfop6bxfw] { border-color: var(--accent); }
.rail-form-error[b-bgfop6bxfw] {
    color: var(--danger);
    font-size: 11.5px;
}
.rail-form-actions[b-bgfop6bxfw] {
    display: flex;
    gap: 6px;
    align-items: center;
}
.rail-btn-primary[b-bgfop6bxfw] {
    background: var(--accent);
    color: white;
    border: 0;
    border-radius: 5px;
    padding: 5px 10px;
    font: inherit;
    font-size: 12px;
    cursor: pointer;
}
.rail-btn-primary:disabled[b-bgfop6bxfw] {
    opacity: 0.55;
    cursor: not-allowed;
}

/* References (Phase 33b) — web snippets Lisa just looked up for this
   turn. Compact card-per-source with title + domain; full snippet
   available as tooltip. Anchored above the workstation context
   section but below the main scope rows. */
.rail-section[b-bgfop6bxfw] {
    margin-top: 12px;
    padding-top: 10px;
    border-top: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.rail-section-label[b-bgfop6bxfw] {
    font-size: 10px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 2px;
}
.rail-ref[b-bgfop6bxfw] {
    display: block;
    padding: 6px 8px;
    border: 1px solid var(--border);
    border-radius: 4px;
    background: var(--bg-overlay);
    text-decoration: none;
    color: var(--fg);
}
.rail-ref:hover[b-bgfop6bxfw] {
    background: var(--hover-overlay);
    border-color: var(--accent);
}
.rail-ref-title[b-bgfop6bxfw] {
    font-size: 12px;
    font-weight: 500;
    color: var(--fg);
    line-height: 1.3;
    /* Cap at 2 lines so a verbose title doesn't blow up the rail. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.rail-ref-domain[b-bgfop6bxfw] {
    font-size: 10px;
    color: var(--muted);
    margin-top: 2px;
    font-family: var(--mono, monospace);
}
/* _content/Buildessa/Components/Lisa/DeliverablesList.razor.rz.scp.css */
/* Deliverables roll-up — same row anatomy as the Files roll-up (fl-*),
   plus inline download / open-chat links. */

.fl-empty[b-owu0hb6i4q] {
    padding: 16px 4px;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    max-width: 560px;
}

.fl-list[b-owu0hb6i4q] {
    display: flex;
    flex-direction: column;
}

.fl-row[b-owu0hb6i4q] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 4px;
    border-bottom: 1px solid var(--border);
}

.fl-row:last-child[b-owu0hb6i4q] {
    border-bottom: 0;
}

.fl-icon[b-owu0hb6i4q] {
    flex: 0 0 auto;
    font-size: 15px;
    line-height: 1.4;
    width: 20px;
    text-align: center;
}

.fl-body[b-owu0hb6i4q] {
    min-width: 0;
    flex: 1;
}

.fl-name[b-owu0hb6i4q] {
    font-size: 13px;
    color: var(--fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fl-meta[b-owu0hb6i4q] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
    font-size: 11px;
    color: var(--muted);
    flex-wrap: wrap;
}

.fl-badge[b-owu0hb6i4q] {
    background: var(--bg-overlay);
    border-radius: 8px;
    padding: 0 6px;
    max-width: 160px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fl-status.ready[b-owu0hb6i4q] {
    color: #3fb950;
}

.fl-status.working[b-owu0hb6i4q] {
    color: var(--muted);
}

.fl-sep[b-owu0hb6i4q] {
    opacity: 0.5;
}

.fl-link[b-owu0hb6i4q] {
    color: var(--accent);
    text-decoration: none;
}

.fl-link:hover[b-owu0hb6i4q] {
    text-decoration: underline;
}
/* _content/Buildessa/Components/Lisa/DeliverablesPanel.razor.rz.scp.css */
/* P19 — the deliverables list. Questions first, then the settled brief. */

.dv-wrap[b-jadmce8be4] { display: flex; flex-direction: column; gap: 10px; }

/* The count that says why this tab matters right now. */
.dv-needs[b-jadmce8be4] {
    font-size: 13px;
    line-height: 1.5;
    color: var(--warning);
    background: color-mix(in srgb, var(--warning) 9%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning) 40%, transparent);
    border-radius: 8px;
    padding: 9px 13px;
}

.dv-list[b-jadmce8be4] { list-style: none; margin: 0; padding: 0; }

.dv-item[b-jadmce8be4] {
    border: 1px solid var(--border);
    border-radius: 10px;
    margin-bottom: 8px;
    background: var(--bg-elevated);
    overflow: hidden;
}

.dv-item.is-open[b-jadmce8be4] { border-color: var(--border-strong); }

.dv-head[b-jadmce8be4] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 11px 14px;
    cursor: pointer;
}

.dv-head:hover[b-jadmce8be4] { background: var(--hover-overlay); }

/* Same state vocabulary as the map's tag dot — one language for one fact. */
.dv-dot[b-jadmce8be4] {
    flex: 0 0 9px;
    width: 9px; height: 9px;
    border-radius: 50%;
    background: var(--muted);
}
.dv-dot.tone-open[b-jadmce8be4] { background: none; border: 1.5px solid var(--warning); }
.dv-dot.tone-ready[b-jadmce8be4] { background: var(--accent); }
.dv-dot.tone-done[b-jadmce8be4] { background: var(--success); }
.dv-dot.tone-proposed[b-jadmce8be4] { background: none; border: 1.5px dashed var(--muted); }

.dv-name[b-jadmce8be4] {
    display: flex;
    flex-direction: column;
    min-width: 0;
    flex: 1 1 auto;
    line-height: 1.35;
}
.dv-name > b[b-jadmce8be4] {
    font-size: 14px;
    font-weight: 650;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.dv-sub[b-jadmce8be4] { font-size: 11.5px; color: var(--muted); }

.dv-fmt[b-jadmce8be4] {
    flex: 0 0 auto;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--muted);
    border: 1px solid var(--border);
    border-radius: 4px;
    padding: 2px 6px;
}

/* Sits beside the format badge and matches its height, so a produced row
   reads as "DOCX  Download" rather than growing a taller card than the rows
   around it. */
.dv-get[b-jadmce8be4] {
    flex: 0 0 auto;
    font-size: 11px;
    font-weight: 650;
    text-decoration: none;
    color: var(--accent, #2563eb);
    border: 1px solid var(--border);
    border-radius: 4px;
    padding: 2px 8px;
    line-height: 1.45;
}

.dv-get:hover[b-jadmce8be4],
.dv-get:focus-visible[b-jadmce8be4] {
    background: var(--surface-2, rgba(127, 127, 127, .10));
    text-decoration: underline;
}

.dv-badge[b-jadmce8be4] {
    flex: 0 0 auto;
    font-size: 11px;
    font-weight: 650;
    padding: 3px 10px;
    border-radius: 999px;
    color: var(--warning);
    border: 1px solid var(--warning);
    white-space: nowrap;
}
.dv-badge.quiet[b-jadmce8be4] { color: var(--muted); border-color: var(--border); font-weight: 600; }

.dv-body[b-jadmce8be4] {
    padding: 4px 14px 14px;
    border-top: 1px solid var(--border);
}

.dv-note[b-jadmce8be4] { font-size: 13px; color: var(--muted); line-height: 1.55; margin: 12px 0 0; }

/* ── A question. This is the whole intent mechanism, so it is the loudest
      thing in the panel — but only when one exists. ── */
.dv-q[b-jadmce8be4] {
    background: color-mix(in srgb, var(--warning) 8%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning) 45%, transparent);
    border-radius: 9px;
    padding: 13px 15px;
    margin: 12px 0;
}

.dv-q-head[b-jadmce8be4] {
    font-size: 14.5px;
    font-weight: 650;
    line-height: 1.4;
    margin-bottom: 6px;
}

.dv-q-guess[b-jadmce8be4] { font-size: 13.5px; line-height: 1.5; margin: 0; }

/* Lisa's reasoning. The thing that makes a one-click answer possible —
   without it the user has to re-derive what she was thinking. */
.dv-q-basis[b-jadmce8be4] {
    font-size: 12px;
    line-height: 1.5;
    color: var(--muted);
    margin: 5px 0 0;
    font-style: italic;
}

.dv-q-acts[b-jadmce8be4] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 11px;
    flex-wrap: wrap;
}

.dv-q-input[b-jadmce8be4] {
    flex: 1 1 200px;
    min-width: 0;
    font: inherit;
    font-size: 13px;
    padding: 6px 10px;
    border: 1px solid var(--border);
    border-radius: 7px;
    background: var(--bg-input);
    color: var(--fg);
}
.dv-q-input:focus-visible[b-jadmce8be4] { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

/* ── The settled fields ── */
.dv-brief[b-jadmce8be4] { margin: 14px 0 0; }
.dv-brief dt[b-jadmce8be4] {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--muted);
    margin-top: 11px;
}
.dv-brief dd[b-jadmce8be4] {
    margin: 2px 0 0;
    font-size: 13.5px;
    line-height: 1.5;
}

.dv-assumed[b-jadmce8be4] {
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--muted);
    border: 1px dashed var(--border-strong);
    border-radius: 4px;
    padding: 1px 5px;
    margin-left: 7px;
    cursor: help;
}

/* How much of the brief is settled. Deliberately thin — it is a readout,
   not a call to action; the questions above are the call to action. */
.dv-meter[b-jadmce8be4] {
    height: 3px;
    border-radius: 2px;
    background: var(--rule, var(--border));
    margin-top: 16px;
    overflow: hidden;
}
.dv-meter-fill[b-jadmce8be4] { height: 100%; background: var(--accent); border-radius: 2px; }

.dv-acts[b-jadmce8be4] { display: flex; gap: 8px; margin-top: 14px; flex-wrap: wrap; }

.dv-btn[b-jadmce8be4] {
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;
    padding: 5px 13px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--fg-dim);
    cursor: pointer;
}
.dv-btn:hover[b-jadmce8be4] { border-color: var(--border-strong); background: var(--hover-overlay); }
.dv-btn:disabled[b-jadmce8be4] { opacity: .55; cursor: default; }
.dv-btn-primary[b-jadmce8be4] { background: var(--accent); border-color: var(--accent); color: var(--accent-fg); }
.dv-btn-primary:hover[b-jadmce8be4] { background: var(--accent); filter: brightness(1.06); }
.dv-btn:focus-visible[b-jadmce8be4] { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

.dv-add[b-jadmce8be4] { display: flex; gap: 8px; margin-top: 4px; }
.dv-add-input[b-jadmce8be4] {
    flex: 1 1 auto;
    min-width: 0;
    font: inherit;
    font-size: 13px;
    padding: 7px 11px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: transparent;
    color: var(--fg);
}
.dv-add-input:focus-visible[b-jadmce8be4] { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

/* Estimating-side note on the Estimate row's build action. */
.dv-price-note[b-jadmce8be4] { font-size: 12px; color: var(--muted); }

/* The step that PRODUCES the number, on the row with the steps that read
   it. Rendered as a button rather than a link because it does work. */
.dv-get-do[b-jadmce8be4] {
    font: inherit; cursor: pointer;
    border-color: color-mix(in srgb, var(--accent, #2563eb) 45%, transparent);
    color: var(--accent, #2563eb); font-weight: 600;
}
.dv-get-do:disabled[b-jadmce8be4] { opacity: .55; cursor: default; }
/* _content/Buildessa/Components/Lisa/FilesList.razor.rz.scp.css */
/* §16 — Files roll-up view. */

.fl-empty[b-v137icwbw9] {
    padding: 16px 4px;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    max-width: 560px;
}

.fl-list[b-v137icwbw9] {
    display: flex;
    flex-direction: column;
}

.fl-row[b-v137icwbw9] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 4px;
    border-bottom: 1px solid var(--border);
}

.fl-row:last-child[b-v137icwbw9] {
    border-bottom: 0;
}

.fl-icon[b-v137icwbw9] {
    flex: 0 0 auto;
    font-size: 15px;
    line-height: 1.4;
    width: 20px;
    text-align: center;
}

.fl-body[b-v137icwbw9] {
    min-width: 0;
    flex: 1;
}

.fl-name[b-v137icwbw9] {
    font-size: 13px;
    color: var(--fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fl-meta[b-v137icwbw9] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
    font-size: 11px;
    color: var(--muted);
    flex-wrap: wrap;
}

.fl-badge[b-v137icwbw9] {
    background: var(--bg-overlay);
    border-radius: 8px;
    padding: 0 6px;
    max-width: 120px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fl-status.ready[b-v137icwbw9] {
    color: #3fb950;
}

.fl-status.failed[b-v137icwbw9] {
    color: var(--danger);
}

.fl-sep[b-v137icwbw9] {
    opacity: 0.5;
}
/* _content/Buildessa/Components/Lisa/FilesUploadCard.razor.rz.scp.css */
/* Upload card for the General Files page. Mirrors the building Files uploader
   (whose styles are scoped to that page) plus a building picker row. */

.upload-card[b-9fp6rs258v] {
    background: var(--bg-elevated);
    border: 1px dashed var(--border-strong);
    border-radius: 10px;
    padding: 0;
    margin: 18px 0;
    overflow: hidden;
}

/* The "Upload to {building}" row — the General page has no active building, so
   the file's destination is an explicit choice. */
.upload-building[b-9fp6rs258v] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 14px;
    border-bottom: 1px solid var(--border);
    background: var(--bg);
}

.ub-label[b-9fp6rs258v] {
    font-size: 13px;
    color: var(--fg-dim);
    white-space: nowrap;
}

.ub-select[b-9fp6rs258v] {
    flex: 1;
    background: var(--bg-elevated);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 6px 10px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
}

.upload-target[b-9fp6rs258v] {
    display: block;
    padding: 28px 22px;
    cursor: pointer;
    text-align: center;
    transition: background 120ms ease;
    position: relative;
}

.upload-target:hover[b-9fp6rs258v] {
    background: var(--hover-overlay);
}

/* Blazor InputFile renders a native <input type="file"> — hide it but keep it
   interactive so the surrounding label triggers the picker. */
.upload-target[b-9fp6rs258v]  input[type="file"] {
    position: absolute;
    inset: 0;
    opacity: 0;
    cursor: pointer;
    width: 100%;
    height: 100%;
}

.upload-icon[b-9fp6rs258v] {
    font-size: 28px;
    margin-bottom: 6px;
}

.upload-title[b-9fp6rs258v] {
    font-size: 14px;
    color: var(--fg);
    font-weight: 600;
}

.upload-sub[b-9fp6rs258v] {
    font-size: 12px;
    color: var(--muted);
    margin-top: 4px;
}

.upload-progress[b-9fp6rs258v] {
    border-top: 1px solid var(--border);
    background: var(--bg);
    padding: 8px 14px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.upload-row[b-9fp6rs258v] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 12px;
    gap: 12px;
}

.up-name[b-9fp6rs258v] {
    color: var(--fg-dim);
    max-width: 60%;
}

.up-status[b-9fp6rs258v] {
    color: var(--muted);
}

.truncate[b-9fp6rs258v] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.error[b-9fp6rs258v] {
    color: var(--danger);
    font-size: 13px;
    padding: 8px 14px;
    margin: 0;
}

.no-building[b-9fp6rs258v] {
    margin: 18px 0;
    padding: 16px;
    border: 1px dashed var(--border-strong);
    border-radius: 10px;
    color: var(--fg-dim);
    font-size: 13px;
    line-height: 1.5;
    background: var(--bg-elevated);
}
/* _content/Buildessa/Components/Lisa/GoalTimeline.razor.rz.scp.css */
/* N76 â€” goal lifecycle timeline (PLAN tab).
   A vertical git-graph: a continuous spine on the left, a status dot per
   goal, branch indentation for sub-goals, and an honest lifecycle line. */

.goal-tl-block[b-b1ij2f0ogq] {
    margin: 4px 0 10px;
}

.goal-tl-head[b-b1ij2f0ogq] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    margin: 0 0 8px;
}
.goal-tl-title[b-b1ij2f0ogq] {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    color: var(--muted, #888);
    font-weight: 600;
}
.goal-tl-count[b-b1ij2f0ogq] {
    font-size: 11px;
    color: var(--muted, #888);
    font-variant-numeric: tabular-nums;
}

.goal-tl[b-b1ij2f0ogq] {
    list-style: none;
    margin: 0;
    padding: 0;
}

/* One goal. The rail column carries the spine + dot; the body carries the
   statement, lifecycle line, and (for the active goal) the task checklist. */
.goal-tl-node[b-b1ij2f0ogq] {
    display: flex;
    gap: 10px;
    /* Branch indent for sub-goals â€” each depth level steps right. */
    margin-left: calc(var(--depth, 0) * 16px);
    position: relative;
}

.goal-tl-rail[b-b1ij2f0ogq] {
    flex: 0 0 16px;
    display: flex;
    justify-content: center;
    position: relative;
}
/* The spine â€” a vertical line behind the dots that connects sequential
   goals into one timeline. Drawn full-height on every node; the first/last
   trim so it doesn't dangle past the ends. */
.goal-tl-rail[b-b1ij2f0ogq]::before {
    content: "";
    position: absolute;
    top: 0;
    bottom: -2px;
    left: 50%;
    width: 2px;
    transform: translateX(-50%);
    background: var(--border, #e3e3e8);
}
.goal-tl-node:first-child .goal-tl-rail[b-b1ij2f0ogq]::before { top: 9px; }
.goal-tl-node:last-child  .goal-tl-rail[b-b1ij2f0ogq]::before { bottom: auto; height: 9px; }

.goal-tl-dot[b-b1ij2f0ogq] {
    position: relative;
    z-index: 1;
    margin-top: 1px;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 9px;
    line-height: 1;
    color: #fff;
    background: var(--muted, #9a9aa3);
    box-shadow: 0 0 0 3px var(--bg, #fff); /* punch the dot out of the spine */
}

.goal-tl-body[b-b1ij2f0ogq] {
    flex: 1;
    min-width: 0;
    padding-bottom: 12px;
}

.goal-tl-line[b-b1ij2f0ogq] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 6px;
}
.goal-tl-branch[b-b1ij2f0ogq] {
    color: var(--muted, #aaa);
    font-size: 12px;
    flex: 0 0 auto;
}
.goal-tl-statement[b-b1ij2f0ogq] {
    font-size: 13px;
    line-height: 1.35;
    color: var(--fg, #1c1c1e);
    font-weight: 500;
}
.goal-tl-pill[b-b1ij2f0ogq] {
    flex: 0 0 auto;
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-weight: 700;
    padding: 1px 6px;
    border-radius: 999px;
}

.goal-tl-meta[b-b1ij2f0ogq] {
    margin-top: 3px;
    font-size: 10.5px;
    color: var(--muted, #8a8a92);
    font-variant-numeric: tabular-nums;
    line-height: 1.4;
}

.goal-tl-resume[b-b1ij2f0ogq] {
    margin-top: 6px;
    padding: 3px 10px;
    font-size: 11px;
    border: 1px solid var(--border, #ddd);
    border-radius: 999px;
    background: transparent;
    color: var(--accent, #6366f1);
    cursor: pointer;
}
.goal-tl-resume:hover[b-b1ij2f0ogq] {
    border-color: var(--accent, #6366f1);
    background: color-mix(in srgb, var(--accent, #6366f1) 8%, transparent);
}

/* â”€â”€ Status colours â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */

.goal-tl-node.is-active .goal-tl-dot[b-b1ij2f0ogq] {
    background: var(--accent, #6366f1);
    /* subtle pulse so the live goal reads as "in progress" */
    animation: goal-tl-pulse-b-b1ij2f0ogq 2s ease-in-out infinite;
}
.goal-tl-node.is-paused .goal-tl-dot[b-b1ij2f0ogq]    { background: var(--warning, #f59e0b); }
.goal-tl-node.is-completed .goal-tl-dot[b-b1ij2f0ogq] { background: var(--success, #2a9d8f); }
.goal-tl-node.is-abandoned .goal-tl-dot[b-b1ij2f0ogq] { background: var(--muted, #9a9aa3); }
/* Waiting on the user — amber, but a steady (non-pulsing) glow so it reads
   as "parked, needs you" rather than "Lisa is working". */
.goal-tl-node.is-waiting .goal-tl-dot[b-b1ij2f0ogq] {
    background: var(--warning, #f59e0b);
    box-shadow: 0 0 0 3px var(--bg, #fff), 0 0 0 4px color-mix(in srgb, var(--warning, #f59e0b) 35%, transparent);
}
/* Couldn't deliver — a muted red so it's clearly a non-success close,
   distinct from plain gray Abandoned. */
.goal-tl-node.is-incomplete .goal-tl-dot[b-b1ij2f0ogq] { background: var(--danger, #c0564a); }

@keyframes goal-tl-pulse-b-b1ij2f0ogq {
    0%, 100% { box-shadow: 0 0 0 3px var(--bg, #fff), 0 0 0 4px color-mix(in srgb, var(--accent, #6366f1) 40%, transparent); }
    50%      { box-shadow: 0 0 0 3px var(--bg, #fff), 0 0 0 7px color-mix(in srgb, var(--accent, #6366f1) 0%, transparent); }
}

.goal-tl-pill-is-active[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--accent, #6366f1) 15%, transparent);
    color: var(--accent, #6366f1);
}
.goal-tl-pill-is-paused[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--warning, #f59e0b) 18%, transparent);
    color: color-mix(in srgb, var(--warning, #f59e0b) 80%, #000);
}
.goal-tl-pill-is-completed[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--success, #2a9d8f) 16%, transparent);
    color: var(--success, #2a9d8f);
}
.goal-tl-pill-is-abandoned[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--muted, #9a9aa3) 18%, transparent);
    color: var(--muted, #80808a);
}
.goal-tl-pill-is-waiting[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--warning, #f59e0b) 20%, transparent);
    color: color-mix(in srgb, var(--warning, #f59e0b) 80%, #000);
}
.goal-tl-pill-is-incomplete[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--danger, #c0564a) 16%, transparent);
    color: var(--danger, #c0564a);
}

/* "Lisa needs: …" — the unblock instruction under a waiting goal, and
   the "couldn't deliver" line under an incomplete one. */
.goal-tl-needs[b-b1ij2f0ogq] {
    margin-top: 5px;
    padding: 5px 9px;
    font-size: 11.5px;
    line-height: 1.4;
    border-radius: 7px;
    background: color-mix(in srgb, var(--warning, #f59e0b) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning, #f59e0b) 30%, transparent);
    color: var(--fg, #2a2a2e);
}
.goal-tl-needs-label[b-b1ij2f0ogq] {
    font-weight: 700;
    margin-right: 4px;
    color: color-mix(in srgb, var(--warning, #f59e0b) 85%, #000);
}
.goal-tl-needs-closed[b-b1ij2f0ogq] {
    background: color-mix(in srgb, var(--danger, #c0564a) 10%, transparent);
    border-color: color-mix(in srgb, var(--danger, #c0564a) 28%, transparent);
    color: var(--muted, #6c6c75);
}

/* Closed goals read quieter â€” they're history, not the live focus. */
.goal-tl-node.is-completed .goal-tl-statement[b-b1ij2f0ogq],
.goal-tl-node.is-incomplete .goal-tl-statement[b-b1ij2f0ogq],
.goal-tl-node.is-abandoned .goal-tl-statement[b-b1ij2f0ogq] {
    color: var(--muted, #6c6c75);
    font-weight: 400;
}
.goal-tl-node.is-abandoned .goal-tl-statement[b-b1ij2f0ogq] {
    text-decoration: line-through;
    text-decoration-color: color-mix(in srgb, var(--muted, #9a9aa3) 60%, transparent);
}
/* _content/Buildessa/Components/Lisa/HistoryList.razor.rz.scp.css */
.history-list[b-7jp5dzfm4c] {
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 0 4px;
}

.history-row[b-7jp5dzfm4c] {
    display: flex;
    align-items: center;
    gap: 2px;
    padding: 4px 6px 4px 8px;
    border-radius: 6px;
    color: var(--fg-dim);
    position: relative;
}

.history-row:hover[b-7jp5dzfm4c] {
    background: var(--hover-overlay);
}

.history-row.active[b-7jp5dzfm4c] {
    background: var(--bg-overlay);
    color: var(--accent);
}

.history-link[b-7jp5dzfm4c] {
    flex: 1;
    min-width: 0;
    color: inherit;
    text-decoration: none;
    font-size: 13px;
    line-height: 1.4;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    padding: 4px 0;
}

/* Action icons sit beside the title; visible by default (no hover-only
   trick) so touch users can find them. Compact size keeps them subtle. */
.history-actions[b-7jp5dzfm4c] {
    display: inline-flex;
    gap: 0;
    opacity: 0;
    transition: opacity 120ms ease;
}

.history-row:hover .history-actions[b-7jp5dzfm4c],
.history-row.active .history-actions[b-7jp5dzfm4c] {
    opacity: 1;
}

.iconbtn[b-7jp5dzfm4c] {
    background: transparent;
    border: 0;
    color: var(--muted);
    cursor: pointer;
    padding: 4px;
    border-radius: 4px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font: inherit;
    font-size: 12px;
}

.iconbtn:hover[b-7jp5dzfm4c] {
    background: var(--hover-overlay);
    color: var(--fg);
}

.iconbtn.danger:hover[b-7jp5dzfm4c] {
    color: var(--danger);
}

.iconbtn svg[b-7jp5dzfm4c] {
    width: 13px;
    height: 13px;
}

/* Inline rename ─────────────────────────────────────────────────────── */

.history-rename[b-7jp5dzfm4c] {
    flex: 1;
    min-width: 0;
    background: var(--bg-input);
    color: var(--fg);
    border: 1px solid var(--accent);
    border-radius: 4px;
    padding: 3px 6px;
    font: inherit;
    font-size: 13px;
    outline: 0;
}

.history-rename-actions[b-7jp5dzfm4c] {
    display: inline-flex;
    gap: 0;
    margin-left: 2px;
}

/* Stage 2 — unread badge: Lisa authored a message in this chat while no tab
   was open (worker-run deferred answer / interject). Cleared on open. */
.history-unread-dot[b-7jp5dzfm4c] {
    display: inline-block;
    width: 8px;
    height: 8px;
    margin-right: 6px;
    border-radius: 50%;
    background: var(--accent);
    flex: 0 0 auto;
    vertical-align: middle;
}

/* Background-survival — a turn is in flight on this chat. A small spinner in
   the history list shows which chat Lisa is working on right now, even after
   the user has navigated away from it. Cleared automatically when the turn
   finishes (IsBusy flips false and the row re-renders). */
.history-working[b-7jp5dzfm4c] {
    display: inline-block;
    width: 11px;
    height: 11px;
    margin-right: 6px;
    border: 2px solid var(--accent);
    border-top-color: transparent;
    border-radius: 50%;
    flex: 0 0 auto;
    vertical-align: middle;
    animation: history-working-spin-b-7jp5dzfm4c 0.7s linear infinite;
}

@keyframes history-working-spin-b-7jp5dzfm4c {
    to { transform: rotate(360deg); }
}

/* §16 roll-up — at the General level the chat list aggregates every building's
   chats; this prefix names the building a chat belongs to so the rolled-up list
   stays legible. Omitted inside a building's own (filtered) Chats list. */
.history-badge[b-7jp5dzfm4c] {
    display: inline-block;
    flex: 0 0 auto;
    max-width: 84px;
    margin-right: 6px;
    padding: 0 6px;
    border-radius: 8px;
    background: var(--bg-overlay);
    color: var(--muted);
    font-size: 10px;
    line-height: 15px;
    vertical-align: middle;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* _content/Buildessa/Components/Lisa/InitialsBadge.razor.rz.scp.css */
.ib[b-6xiicruqfb] {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    flex: 0 0 30px;
    user-select: none;
}

.ib-lisa[b-6xiicruqfb] {
    background: linear-gradient(135deg, #6d5fbe, #c4b5fd);
}
/* _content/Buildessa/Components/Lisa/KnowledgeLibrary.razor.rz.scp.css */
/* Knowledge library — the "User data" tab. Themed via the app's design
   tokens (app.css): --bg-elevated/--bg-overlay surfaces, --fg/--muted text,
   --accent/--accent-soft/--accent-fg, --border, and the status colors. All
   are defined for both themes; fallbacks mirror the dark :root default. */

.kl-empty[b-ac87dpq3qz] { color: var(--muted, #8a8a8a); font-size: .95rem; margin: .6rem 0 1.2rem; }

/* Upload card — the file drop-zone. (These classes had no styles at all, so
   the drop target rendered as a bare label.) */
.upload-card[b-ac87dpq3qz] {
    border: 1px solid var(--border, #2a2a2a); border-radius: 14px;
    background: var(--bg-elevated, #161616); padding: 1rem 1.1rem; margin: 0 0 1.4rem;
    display: flex; flex-direction: column; gap: .8rem;
}
.upload-building[b-ac87dpq3qz] { display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; }
.ub-label[b-ac87dpq3qz] { font-size: .8rem; color: var(--muted, #8a8a8a); }
.ub-select[b-ac87dpq3qz] {
    font: inherit; font-size: .88rem; padding: 5px 8px; max-width: 100%;
    border: 1px solid var(--border, #2a2a2a); border-radius: 7px;
    background: var(--bg-input, #0d0d0d); color: var(--fg, #ececec);
}
.upload-target[b-ac87dpq3qz] {
    position: relative; display: block; cursor: pointer;
    border: 1.5px dashed var(--border, #2a2a2a); border-radius: 12px;
    background: var(--bg-overlay, #1a1a1a); transition: border-color .15s ease, background .15s ease;
}
.upload-target:hover[b-ac87dpq3qz] { border-color: var(--accent, #c4b5fd); }
/* The <InputFile> covers the whole target so a click/drop anywhere fires it,
   but stays invisible behind the body copy. */
.upload-target[b-ac87dpq3qz]  input[type="file"] {
    position: absolute; inset: 0; width: 100%; height: 100%;
    opacity: 0; cursor: pointer;
}
.upload-target-body[b-ac87dpq3qz] {
    position: relative; pointer-events: none;
    display: flex; flex-direction: column; align-items: center; gap: .35rem;
    padding: 1.4rem 1rem; text-align: center;
}
.upload-icon[b-ac87dpq3qz] { font-size: 1.4rem; line-height: 1; }
.upload-title[b-ac87dpq3qz] { font-size: .95rem; font-weight: 600; color: var(--fg, #ececec); }
.upload-sub[b-ac87dpq3qz] { font-size: .8rem; color: var(--muted, #8a8a8a); }
.upload-progress[b-ac87dpq3qz] { display: flex; flex-direction: column; gap: .35rem; }
.upload-row[b-ac87dpq3qz] {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    font-size: .84rem; color: var(--fg, #ececec);
}
.up-name[b-ac87dpq3qz] { flex: 1 1 auto; }
.up-status[b-ac87dpq3qz] { flex: 0 0 auto; color: var(--muted, #8a8a8a); }

@media (max-width: 560px) {
    .upload-card[b-ac87dpq3qz] { padding: .85rem .9rem; }
    .upload-target-body[b-ac87dpq3qz] { padding: 1.1rem .75rem; }
}

/* Pinned "About you" — Lisa's profile of the person. Distinct from the file
   shelves via an accent border + pin, but a calm surface so it doesn't shout
   in either theme. */
.kl-about[b-ac87dpq3qz] {
    border: 1px solid var(--accent, #c4b5fd); border-radius: 14px;
    background: var(--bg-overlay, #1a1a1a); padding: .95rem 1.05rem; margin: 0 0 1.4rem;
}
.kl-about-head[b-ac87dpq3qz] { display: flex; align-items: flex-start; gap: 10px; }
.kl-about-pin[b-ac87dpq3qz] { font-size: 1.05rem; line-height: 1.4; flex: 0 0 auto; }
.kl-about-heading[b-ac87dpq3qz] { min-width: 0; }
.kl-about-title[b-ac87dpq3qz] { margin: 0; font-size: 1.05rem; font-weight: 660; color: var(--fg, #ececec); }
.kl-about-sub[b-ac87dpq3qz] { margin: .15rem 0 0; font-size: .84rem; color: var(--muted, #8a8a8a); line-height: 1.4; }

.kl-about-list[b-ac87dpq3qz] { list-style: none; margin: .85rem 0 0; padding: 0; display: flex; flex-direction: column; gap: .5rem; }
.kl-about-item[b-ac87dpq3qz] {
    display: flex; align-items: baseline; gap: 10px;
    background: var(--bg-elevated, #161616); border: 1px solid var(--border, #2a2a2a);
    border-radius: 10px; padding: .5rem .7rem;
}
.kl-about-kind[b-ac87dpq3qz] {
    flex: 0 0 auto; font-size: .68rem; font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
    padding: 2px 8px; border-radius: 999px; align-self: center;
    background: var(--bg-overlay, #1a1a1a); color: var(--muted, #8a8a8a);
}
/* Kind read by COLOR, theme-safe (status/accent tokens flip per theme). */
.kl-about-kind.kind-profile[b-ac87dpq3qz]    { color: var(--accent,  #c4b5fd); }
.kl-about-kind.kind-preference[b-ac87dpq3qz] { color: var(--success, #8cdcaa); }
.kl-about-kind.kind-project[b-ac87dpq3qz]    { color: var(--warning, #ffd58a); }
.kl-about-text[b-ac87dpq3qz] { flex: 1 1 auto; min-width: 0; color: var(--fg, #ececec); font-size: .9rem; line-height: 1.45; }
.kl-about-detail[b-ac87dpq3qz] { color: var(--muted, #8a8a8a); }
.kl-about-remove[b-ac87dpq3qz] { flex: 0 0 auto; align-self: center; }

.kl-shelf-head[b-ac87dpq3qz] {
    font-size: 1rem; font-weight: 620; margin: 1.6rem 0 .6rem;
    display: flex; align-items: baseline; gap: .5rem;
}
.kl-count[b-ac87dpq3qz] { font-size: .8rem; font-weight: 500; color: var(--muted, #8a8a8a); }

.kl-list[b-ac87dpq3qz] { display: flex; flex-direction: column; gap: .55rem; }
.kl-card[b-ac87dpq3qz] {
    border: 1px solid var(--border, #2a2a2a); border-radius: 12px;
    background: var(--bg-elevated, #161616); padding: .8rem .95rem;
}
.kl-card.misfit[b-ac87dpq3qz] { border-color: var(--warning, #ffd58a); background: var(--bg-overlay, #1a1a1a); }

.kl-main[b-ac87dpq3qz] { display: flex; align-items: center; gap: 10px; }
.kl-file[b-ac87dpq3qz] {
    display: inline-flex; align-items: center; gap: 8px; min-width: 0; flex: 1 1 auto;
    background: none; border: 0; padding: 0; cursor: pointer; text-align: left;
    color: var(--fg, #ececec); font: inherit; font-weight: 550;
}
.kl-file:hover .kl-filename[b-ac87dpq3qz] { text-decoration: underline; }
.kl-fileicon[b-ac87dpq3qz] { flex: 0 0 auto; }
.kl-filename[b-ac87dpq3qz] { min-width: 0; }

.kl-cat[b-ac87dpq3qz] {
    flex: 0 0 auto; font-size: .7rem; font-weight: 600; text-transform: lowercase;
    padding: 2px 9px; border-radius: 999px; background: var(--accent-soft, #6d5fbe); color: var(--accent, #c4b5fd);
}
.kl-status[b-ac87dpq3qz] { flex: 0 0 auto; font-size: .78rem; color: var(--muted, #8a8a8a); }
.kl-status.st-ready[b-ac87dpq3qz] { color: var(--success, #8cdcaa); }
.kl-status.st-failed[b-ac87dpq3qz] { color: var(--danger, #e87a7a); }

.kl-actions[b-ac87dpq3qz] { flex: 0 0 auto; display: flex; gap: 6px; margin-left: auto; }

.kl-desc[b-ac87dpq3qz] { margin: .5rem 0 0; color: var(--fg, #ececec); font-size: .9rem; line-height: 1.45; }
.kl-tags[b-ac87dpq3qz] { display: flex; flex-wrap: wrap; gap: 6px; margin-top: .5rem; }
.kl-tag[b-ac87dpq3qz] {
    font-size: .72rem; color: var(--muted, #8a8a8a);
    padding: 1px 8px; border-radius: 999px; background: var(--bg-overlay, #1a1a1a); border: 1px solid var(--border, #2a2a2a);
}

.kl-misfit[b-ac87dpq3qz] {
    display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: .55rem;
    font-size: .84rem; color: var(--warning, #ffd58a);
}

.kl-edit[b-ac87dpq3qz] { display: flex; flex-direction: column; gap: .5rem; margin-top: .6rem; }
.kl-edit label[b-ac87dpq3qz] { display: flex; flex-direction: column; gap: 3px; font-size: .8rem; color: var(--muted, #8a8a8a); }
.kl-edit textarea[b-ac87dpq3qz], .kl-edit input[b-ac87dpq3qz] {
    font: inherit; font-size: .88rem; padding: 6px 8px;
    border: 1px solid var(--border, #2a2a2a); border-radius: 7px; background: var(--bg-input, #0d0d0d); color: var(--fg, #ececec);
}
.kl-edit-actions[b-ac87dpq3qz] { display: flex; gap: 8px; margin-top: 2px; }

.kl-btn[b-ac87dpq3qz] {
    font: inherit; font-size: .82rem; font-weight: 600; cursor: pointer;
    padding: 4px 12px; border-radius: 8px; text-decoration: none;
    background: var(--accent, #c4b5fd); color: var(--accent-fg, #1a1a1a); border: 1px solid var(--accent, #c4b5fd);
}
.kl-btn.ghost[b-ac87dpq3qz] { background: transparent; color: var(--fg, #ececec); border-color: var(--border, #2a2a2a); }
.kl-btn:hover[b-ac87dpq3qz] { filter: brightness(1.05); }

/* Preview modal */
.kl-modal-backdrop[b-ac87dpq3qz] {
    position: fixed; inset: 0; background: rgba(0,0,0,.55);
    display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 3vh 3vw;
}
.kl-modal[b-ac87dpq3qz] {
    background: var(--bg-elevated, #161616); border-radius: 14px; width: min(1000px, 96vw); height: min(90vh, 900px);
    display: flex; flex-direction: column; overflow: hidden; box-shadow: var(--shadow-card, 0 20px 60px rgba(0,0,0,.35));
}
.kl-modal-head[b-ac87dpq3qz] { display: flex; align-items: center; gap: 10px; padding: .7rem .9rem; border-bottom: 1px solid var(--border, #2a2a2a); }
.kl-modal-title[b-ac87dpq3qz] { font-weight: 620; flex: 1 1 auto; min-width: 0; color: var(--fg, #ececec); }
.kl-modal-frame[b-ac87dpq3qz] { flex: 1 1 auto; width: 100%; border: 0; background: var(--bg-overlay, #1a1a1a); }
/* _content/Buildessa/Components/Lisa/LibraryTabBar.razor.rz.scp.css */
/* The Library hub's tab strip — same look as the Knowledge Facts/Training
   tabs (kt-tab), rendered as links because each tab is its own page. */

.library-tabs[b-scp7b3zt8v] {
    display: flex;
    gap: 4px;
    margin-bottom: 12px;
    border-bottom: 1px solid var(--border);
    flex-wrap: wrap;
}

.kt-tab[b-scp7b3zt8v] {
    background: transparent;
    border: 0;
    border-bottom: 2px solid transparent;
    color: var(--muted);
    cursor: pointer;
    font: inherit;
    font-size: 13px;
    font-weight: 600;
    padding: 6px 10px;
    margin-bottom: -1px;
    text-decoration: none;
}

.kt-tab:hover[b-scp7b3zt8v] {
    color: var(--fg);
}

.kt-tab.active[b-scp7b3zt8v] {
    color: var(--accent);
    border-bottom-color: var(--accent);
}
/* _content/Buildessa/Components/Lisa/LisaGuidePanel.razor.rz.scp.css */
/* Floating launcher */
.lg-launcher[b-g3txpdy73c] {
    position: fixed; right: 20px; bottom: 20px; z-index: 900;
    display: inline-flex; align-items: center; gap: 9px;
    background: var(--accent, #6366f1); color: #fff; border: 0; cursor: pointer;
    border-radius: 999px; padding: 9px 16px 9px 11px; font: inherit; font-weight: 600; font-size: .9rem;
    box-shadow: 0 10px 26px -8px color-mix(in srgb, var(--accent, #6366f1) 65%, transparent);
    transition: transform .12s ease, box-shadow .12s ease;
}
.lg-launcher:hover[b-g3txpdy73c] { transform: translateY(-1px); }
.lg-launcher:focus-visible[b-g3txpdy73c] { outline: 2px solid var(--accent, #6366f1); outline-offset: 3px; }
.lg-av[b-g3txpdy73c] {
    width: 24px; height: 24px; border-radius: 50%; flex: 0 0 auto;
    display: grid; place-items: center; font-weight: 700; font-size: .8rem;
    background: rgba(255, 255, 255, .22); color: #fff;
}
/* "New from Lisa" dot — a reflected delegation result arrived while closed.
   Anchors to .lg-launcher, which is already position: fixed. */
.lg-launch-dot[b-g3txpdy73c] {
    position: absolute; top: 4px; right: 6px; width: 9px; height: 9px; border-radius: 50%;
    background: #ff5d6c; border: 2px solid var(--accent, #6366f1);
    animation: lg-pulse-b-g3txpdy73c 1.4s infinite;
}

/* Slide-in panel */
.lg-panel[b-g3txpdy73c] {
    position: fixed; top: 0; right: 0; bottom: 0; z-index: 950;
    width: 360px; max-width: 92vw; display: flex; flex-direction: column;
    background: var(--bg-elevated, #16161f); color: var(--fg, #ececf3);
    border-left: 1px solid var(--border, #2a2a35);
    box-shadow: -22px 0 48px -28px rgba(10, 8, 40, .55);
    animation: lg-slide-b-g3txpdy73c .18s ease;
}
@keyframes lg-slide-b-g3txpdy73c { from { transform: translateX(24px); opacity: .6; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .lg-panel[b-g3txpdy73c] { animation: none; } }

/* Tap-away scrim — desktop leaves the panel as a side drawer with content
   still visible/clickable, so the scrim only appears on a phone (below), where
   the panel goes full-width. */
.lg-backdrop[b-g3txpdy73c] { display: none; }

/* On a phone the 360px drawer is nearly the whole screen anyway, so make it a
   true full-width sheet and dim what's behind it. */
@media (max-width: 480px) {
    .lg-backdrop[b-g3txpdy73c] {
        display: block; position: fixed; inset: 0; z-index: 945;
        background: rgba(0, 0, 0, .45);
    }
    .lg-panel[b-g3txpdy73c] {
        width: 100%; max-width: 100%;
        border-left: 0;
    }
    .lg-launcher[b-g3txpdy73c] { right: 14px; bottom: 14px; }
}

.lg-hd[b-g3txpdy73c] {
    display: flex; align-items: center; gap: 10px; padding: 13px 14px;
    border-bottom: 1px solid var(--border, #2a2a35);
}
.lg-av-lg[b-g3txpdy73c] {
    width: 30px; height: 30px; font-size: .85rem;
    background: color-mix(in srgb, var(--accent, #6366f1) 22%, transparent);
    color: var(--accent, #6366f1);
}
.lg-who[b-g3txpdy73c] { font-weight: 700; font-size: .95rem; line-height: 1.15; flex: 1; }
.lg-who small[b-g3txpdy73c] { display: block; font-weight: 400; font-size: .72rem; color: var(--muted, #9797ab); }

/* Conversation-fullness donut — fills as the thread grows toward the next archive. */
.lg-fill[b-g3txpdy73c] { display: inline-flex; line-height: 0; cursor: default; }
.lg-fill-track[b-g3txpdy73c] { stroke: color-mix(in srgb, var(--fg, #ececf3) 16%, transparent); }
.lg-fill-bar[b-g3txpdy73c] {
    stroke: var(--accent, #6366f1);
    transition: stroke-dashoffset .3s ease, stroke .3s ease;
}
.lg-fill.hot .lg-fill-bar[b-g3txpdy73c] { stroke: #ff9f43; }
@media (prefers-reduced-motion: reduce) { .lg-fill-bar[b-g3txpdy73c] { transition: none; } }

/* "Earlier messages archived" note pinned at the top of the thread. */
.lg-archived[b-g3txpdy73c] {
    align-self: center; text-align: center; font-size: .7rem; color: var(--muted, #9797ab);
    padding: 5px 12px; border-radius: 999px; margin-bottom: 2px; cursor: default;
    background: color-mix(in srgb, var(--fg, #ececf3) 6%, transparent);
    border: 1px solid var(--border, #2a2a35);
}
.lg-x[b-g3txpdy73c] {
    background: transparent; border: 0; color: var(--muted, #9797ab); cursor: pointer;
    font-size: 1rem; line-height: 1; padding: 6px; border-radius: 8px;
}
.lg-x:hover[b-g3txpdy73c] { color: var(--fg, #ececf3); background: color-mix(in srgb, var(--fg, #ececf3) 8%, transparent); }

.lg-body[b-g3txpdy73c] {
    flex: 1; overflow-y: auto; padding: 14px; display: flex; flex-direction: column; gap: 10px;
}
.lg-bubble[b-g3txpdy73c] {
    max-width: 88%; padding: 9px 12px; border-radius: 14px; font-size: .88rem; line-height: 1.5;
    white-space: pre-wrap; word-wrap: break-word;
}
.lg-bubble.u[b-g3txpdy73c] {
    align-self: flex-end; background: var(--accent, #6366f1); color: #fff; border-bottom-right-radius: 5px;
}
.lg-bubble.l[b-g3txpdy73c] {
    align-self: flex-start; background: color-mix(in srgb, var(--fg, #ececf3) 6%, transparent);
    border: 1px solid var(--border, #2a2a35); border-bottom-left-radius: 5px;
}
.lg-typing[b-g3txpdy73c] { display: inline-flex; gap: 4px; align-items: center; }
.lg-typing span[b-g3txpdy73c] {
    width: 6px; height: 6px; border-radius: 50%; background: var(--muted, #9797ab);
    animation: lg-blink-b-g3txpdy73c 1.2s infinite ease-in-out;
}
.lg-typing span:nth-child(2)[b-g3txpdy73c] { animation-delay: .2s; }
.lg-typing span:nth-child(3)[b-g3txpdy73c] { animation-delay: .4s; }
@keyframes lg-blink-b-g3txpdy73c { 0%, 80%, 100% { opacity: .3; } 40% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .lg-typing span[b-g3txpdy73c] { animation: none; } }

/* Lisa's suggested next steps — tappable chips under the latest answer. */
.lg-suggests[b-g3txpdy73c] { display: flex; flex-wrap: wrap; gap: 7px; align-self: flex-start; max-width: 94%; }
.lg-suggest[b-g3txpdy73c] {
    font: inherit; font-size: .8rem; font-weight: 600; cursor: pointer; border-radius: 999px;
    padding: 7px 13px; border: 1px solid var(--border, #2a2a35); line-height: 1.25; text-align: left;
    background: color-mix(in srgb, var(--accent, #6366f1) 8%, transparent); color: var(--fg, #ececf3);
    transition: background .12s ease, border-color .12s ease;
}
.lg-suggest:hover[b-g3txpdy73c] {
    background: color-mix(in srgb, var(--accent, #6366f1) 16%, transparent);
    border-color: color-mix(in srgb, var(--accent, #6366f1) 45%, var(--border, #2a2a35));
}
.lg-suggest:focus-visible[b-g3txpdy73c] { outline: 2px solid var(--accent, #6366f1); outline-offset: 2px; }
.lg-suggest.nav[b-g3txpdy73c]::before { content: "↗ "; color: var(--accent, #6366f1); }
.lg-suggest.act[b-g3txpdy73c] { background: var(--accent, #6366f1); color: #fff; border-color: transparent; }
.lg-suggest.act:hover[b-g3txpdy73c] { filter: brightness(1.06); background: var(--accent, #6366f1); }

/* Confirm-gated operations Lisa is offering to run (start/build/submit). */
.lg-ops[b-g3txpdy73c] { display: flex; flex-wrap: wrap; gap: 7px; align-self: flex-start; max-width: 94%; }
.lg-op[b-g3txpdy73c] {
    font: inherit; font-size: .8rem; font-weight: 640; cursor: pointer; border-radius: 999px;
    padding: 7px 14px; border: 1px solid transparent; line-height: 1.25; text-align: left;
    background: color-mix(in srgb, #2f9268 85%, var(--accent, #6366f1)); color: #fff;
}
.lg-op:hover[b-g3txpdy73c] { filter: brightness(1.07); }
.lg-op:focus-visible[b-g3txpdy73c] { outline: 2px solid var(--accent, #6366f1); outline-offset: 2px; }

/* One-mind Lisa (slice 2b): a job Lisa is working on headlessly for you right now.
   The result reflects back into this thread when it's done. */
.lg-working[b-g3txpdy73c] {
    align-self: flex-start; display: inline-flex; align-items: center; gap: 8px; max-width: 88%;
    font-size: .82rem; color: var(--fg, #ececf3); line-height: 1.4;
    padding: 8px 12px; border-radius: 12px; border: 1px dashed color-mix(in srgb, var(--accent, #6366f1) 45%, var(--border, #2a2a35));
    background: color-mix(in srgb, var(--accent, #6366f1) 7%, transparent);
}
.lg-working-dot[b-g3txpdy73c] {
    width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto;
    background: var(--accent, #6366f1); animation: lg-pulse-b-g3txpdy73c 1.1s infinite;
}
@media (prefers-reduced-motion: reduce) { .lg-working-dot[b-g3txpdy73c], .lg-launch-dot[b-g3txpdy73c] { animation: none; } }

.lg-worktag[b-g3txpdy73c] {
    font-size: .68rem; color: var(--muted, #9797ab); padding: 6px 12px 0;
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
}
.lg-report-link[b-g3txpdy73c] {
    font: inherit; font-size: .68rem; font-weight: 600; cursor: pointer;
    background: transparent; border: 0; color: var(--muted, #9797ab); padding: 2px 4px; border-radius: 6px;
}
.lg-report-link:hover[b-g3txpdy73c] { color: var(--accent, #6366f1); background: color-mix(in srgb, var(--accent, #6366f1) 10%, transparent); }

.lg-ft[b-g3txpdy73c] {
    display: flex; gap: 8px; align-items: center; padding: 10px 12px 12px;
    border-top: 1px solid var(--border, #2a2a35);
}
.lg-in[b-g3txpdy73c] {
    flex: 1; font: inherit; font-size: .88rem; color: var(--fg, #ececf3);
    background: var(--bg, #0e0e14); border: 1px solid var(--border, #2a2a35);
    border-radius: 10px; padding: 9px 12px;
}
.lg-in:focus[b-g3txpdy73c] { outline: none; border-color: var(--accent, #6366f1); }
.lg-send[b-g3txpdy73c] {
    flex: 0 0 auto; width: 38px; height: 38px; border-radius: 10px; cursor: pointer;
    background: var(--accent, #6366f1); color: #fff; border: 0; font-size: .9rem;
}
.lg-send:disabled[b-g3txpdy73c] { opacity: .5; cursor: default; }

/* Voice: header speak/mute toggle + footer mic (voice input). */
.lg-voice[b-g3txpdy73c] {
    background: transparent; border: 0; color: var(--muted, #9797ab); cursor: pointer;
    padding: 6px; border-radius: 8px; display: inline-flex; line-height: 1;
}
.lg-voice:hover[b-g3txpdy73c] { color: var(--fg, #ececf3); background: color-mix(in srgb, var(--fg, #ececf3) 8%, transparent); }
.lg-voice.on[b-g3txpdy73c] { color: var(--accent, #6366f1); }
.lg-mic[b-g3txpdy73c] {
    flex: 0 0 auto; width: 38px; height: 38px; border-radius: 10px; cursor: pointer;
    background: var(--bg, #0e0e14); color: var(--muted, #9797ab);
    border: 1px solid var(--border, #2a2a35); font-size: .95rem;
}
.lg-mic:hover:not(:disabled)[b-g3txpdy73c] { color: var(--fg, #ececf3); }
.lg-mic.on[b-g3txpdy73c] { color: #fff; background: var(--accent, #6366f1); border-color: transparent; animation: lg-pulse-b-g3txpdy73c 1.1s infinite; }
.lg-mic:disabled[b-g3txpdy73c] { opacity: .5; cursor: default; }
@keyframes lg-pulse-b-g3txpdy73c { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }
@media (prefers-reduced-motion: reduce) { .lg-mic.on[b-g3txpdy73c] { animation: none; } }
/* _content/Buildessa/Components/Lisa/MessageSuggestions.razor.rz.scp.css */
/* Suggestion strip — small pill chips below an assistant reply. Designed
   to feel like a quiet sticky-note from Lisa, not a popup. The "+" glyph
   reads as an action (add/create) rather than information. */

.suggestion-strip[b-7herim017i] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 8px 0 4px 0;
}

.chip-wrap[b-7herim017i] {
    display: inline-flex;
    align-items: stretch;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: var(--bg-overlay);
    overflow: hidden;
    transition: border-color 120ms ease, background 120ms ease;
}
.chip-wrap:hover[b-7herim017i] {
    border-color: var(--accent);
}

.chip[b-7herim017i] {
    background: transparent;
    border: 0;
    padding: 5px 10px 5px 12px;
    color: var(--fg);
    cursor: pointer;
    font: inherit;
    font-size: 12.5px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.chip-plus[b-7herim017i] {
    color: var(--accent);
    font-weight: 700;
    font-size: 13px;
}
.chip-label[b-7herim017i] {
    color: var(--fg-dim);
}
.chip-wrap:hover .chip-label[b-7herim017i] {
    color: var(--fg);
}

.chip-dismiss[b-7herim017i] {
    background: transparent;
    border: 0;
    border-left: 1px solid var(--border);
    color: var(--muted);
    padding: 0 9px;
    cursor: pointer;
    font: inherit;
    font-size: 14px;
    line-height: 1;
}
.chip-dismiss:hover[b-7herim017i] {
    color: var(--fg);
    background: var(--hover-overlay);
}

/* Inline single-row form for CreateBuilding. Per the no-friction
   design: one input, one button. Address / notes belong on the
   building's own page, not in a quick action. */

.suggestion-form-wrap[b-7herim017i] {
    margin: 10px 0 6px 0;
    max-width: 560px;
}
.suggestion-inline[b-7herim017i] {
    display: flex;
    align-items: center;
    gap: 8px;
}
.form-input[b-7herim017i] {
    flex: 1;
    min-width: 0;
    background: var(--bg-input);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 7px 10px;
    font: inherit;
    font-size: 13.5px;
    outline: 0;
}
.form-input:focus[b-7herim017i] {
    border-color: var(--accent);
}
.form-error[b-7herim017i] {
    color: var(--danger);
    font-size: 12px;
    margin-top: 6px;
}
.btn-primary[b-7herim017i] {
    background: var(--accent);
    color: white;
    border: 0;
    border-radius: 6px;
    padding: 7px 14px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    flex-shrink: 0;
}
.btn-primary:disabled[b-7herim017i] {
    opacity: 0.55;
    cursor: not-allowed;
}
.btn-link[b-7herim017i] {
    background: transparent;
    border: 0;
    color: var(--fg-dim);
    font: inherit;
    font-size: 13px;
    padding: 6px 4px;
    cursor: pointer;
    flex-shrink: 0;
}
.btn-link:hover[b-7herim017i] {
    color: var(--fg);
}

/* Confirmation strip — replaces the chip/form after a successful create. */
.suggestion-confirm[b-7herim017i] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 10px 0 6px 0;
    padding: 6px 12px;
    border: 1px solid var(--border);
    border-radius: 999px;
    background: var(--bg-overlay);
    color: var(--fg-dim);
    font-size: 12.5px;
}
.suggestion-confirm .check[b-7herim017i] {
    color: var(--accent);
    font-weight: 700;
}
/* _content/Buildessa/Components/Lisa/NewBidWizard.razor.rz.scp.css */
.nbw-backdrop[b-sae8cyyf8e] {
    position: fixed; inset: 0; z-index: 1000;
    background: rgba(0, 0, 0, .5); backdrop-filter: blur(2px);
}
.nbw-modal[b-sae8cyyf8e] {
    position: fixed; z-index: 1001; top: 50%; left: 50%; transform: translate(-50%, -50%);
    width: min(560px, calc(100vw - 2rem)); max-height: min(86vh, 760px);
    display: flex; flex-direction: column;
    background: var(--bg-elevated, #161616); color: var(--fg, #ececec);
    border: 1px solid var(--border, #2a2a2a); border-radius: 16px;
    box-shadow: 0 24px 64px rgba(0, 0, 0, .5); outline: none;
}

/* Head */
.nbw-head[b-sae8cyyf8e] { display: flex; align-items: center; gap: .7rem; padding: 16px 18px 12px; }
.nbw-av[b-sae8cyyf8e] {
    flex: none; width: 34px; height: 34px; border-radius: 50%;
    display: grid; place-items: center; font-weight: 700; font-size: .95rem;
    color: #fff; background: linear-gradient(135deg, var(--accent, #c4b5fd), #7c6ce0);
}
.nbw-av.sm[b-sae8cyyf8e] { width: 22px; height: 22px; font-size: .72rem; }
.nbw-who[b-sae8cyyf8e] { display: flex; flex-direction: column; line-height: 1.2; font-weight: 640; font-size: .98rem; }
.nbw-who small[b-sae8cyyf8e] { font-weight: 400; font-size: .76rem; color: var(--muted, #8a8a8a); }
.nbw-x[b-sae8cyyf8e] {
    margin-left: auto; appearance: none; border: 0; background: transparent; cursor: pointer;
    color: var(--muted, #8a8a8a); font-size: 1rem; line-height: 1; padding: 6px; border-radius: 8px;
}
.nbw-x:hover:not(:disabled)[b-sae8cyyf8e] { color: var(--fg, #ececec); background: var(--bg-overlay, #1e1e1e); }
.nbw-x:disabled[b-sae8cyyf8e] { opacity: .4; cursor: default; }

/* Body */
.nbw-body[b-sae8cyyf8e] { padding: 4px 18px 8px; overflow-y: auto; display: flex; flex-direction: column; gap: .8rem; }
.nbw-lead[b-sae8cyyf8e] { margin: .2rem 0 0; font-size: .92rem; line-height: 1.55; color: var(--muted, #9a9a9a); }

.nbw-ask[b-sae8cyyf8e] {
    display: flex; align-items: flex-start; gap: .55rem; padding: 10px 12px;
    background: color-mix(in srgb, var(--accent, #c4b5fd) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent, #c4b5fd) 35%, var(--border, #2a2a2a));
    border-radius: 12px; font-size: .88rem; line-height: 1.5; color: var(--fg, #ececec);
}
.nbw-ask .nbw-av[b-sae8cyyf8e] { margin-top: 1px; }

/* File chips */
.nbw-files[b-sae8cyyf8e] { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.nbw-file[b-sae8cyyf8e] {
    display: flex; align-items: center; gap: 8px; font-size: .84rem;
    background: var(--bg-overlay, #1e1e1e); border: 1px solid var(--border, #2a2a2a);
    border-radius: 9px; padding: 6px 8px 6px 10px;
}
.nbw-file.reading[b-sae8cyyf8e] { opacity: .75; }
.nbw-file-ic[b-sae8cyyf8e] { flex: none; }
.nbw-file-name[b-sae8cyyf8e] { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nbw-file-sz[b-sae8cyyf8e] { flex: none; color: var(--muted, #8a8a8a); font-variant-numeric: tabular-nums; font-size: .78rem; }
.nbw-file-x[b-sae8cyyf8e] {
    flex: none; appearance: none; border: 0; background: transparent; cursor: pointer;
    color: var(--muted, #8a8a8a); font-size: .8rem; padding: 3px 5px; border-radius: 6px;
}
.nbw-file-x:hover:not(:disabled)[b-sae8cyyf8e] { color: #e5695f; background: var(--bg-elevated, #161616); }

/* Intent + proposal fields */
.nbw-intent[b-sae8cyyf8e], .nbw-field .nbw-input[b-sae8cyyf8e] {
    width: 100%; box-sizing: border-box; font: inherit; font-size: .9rem;
    color: var(--fg, #ececec); background: var(--bg-overlay, #1e1e1e);
    border: 1px solid var(--border, #2a2a2a); border-radius: 10px; padding: 9px 11px; resize: vertical;
}
.nbw-intent[b-sae8cyyf8e]::placeholder, .nbw-input[b-sae8cyyf8e]::placeholder { color: var(--muted, #8a8a8a); }
.nbw-intent:focus[b-sae8cyyf8e], .nbw-input:focus[b-sae8cyyf8e] { outline: none; border-color: var(--accent, #c4b5fd); }

.nbw-field[b-sae8cyyf8e] { display: flex; flex-direction: column; gap: 5px; }
.nbw-label[b-sae8cyyf8e] { font-size: .76rem; font-weight: 640; text-transform: uppercase; letter-spacing: .04em; color: var(--muted, #8a8a8a); }
.nbw-label em[b-sae8cyyf8e] { font-style: normal; font-weight: 400; text-transform: none; letter-spacing: 0; }
select.nbw-input[b-sae8cyyf8e] { cursor: pointer; }

.nbw-found[b-sae8cyyf8e] { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.nbw-found-k[b-sae8cyyf8e] { font-size: .76rem; font-weight: 640; color: var(--muted, #8a8a8a); }
.nbw-chip[b-sae8cyyf8e] {
    font-size: .78rem; padding: 2px 9px; border-radius: 999px;
    background: color-mix(in srgb, var(--accent, #c4b5fd) 15%, transparent);
    color: var(--accent, #c4b5fd); white-space: nowrap;
}
.nbw-attach-note[b-sae8cyyf8e] { font-size: .82rem; color: var(--muted, #9a9a9a); }
.nbw-dim[b-sae8cyyf8e] { color: var(--muted, #8a8a8a); }

.nbw-locked[b-sae8cyyf8e] {
    font-size: .86rem; line-height: 1.5; padding: 10px 12px; border-radius: 10px;
    background: color-mix(in srgb, #d9903f 12%, transparent);
    border: 1px solid color-mix(in srgb, #d9903f 40%, var(--border, #2a2a2a));
}
.nbw-hire[b-sae8cyyf8e] { margin-left: 6px; font-weight: 640; color: var(--accent, #c4b5fd); text-decoration: none; white-space: nowrap; }
.nbw-hire:hover[b-sae8cyyf8e] { text-decoration: underline; }

.nbw-error[b-sae8cyyf8e] {
    font-size: .84rem; color: #e5695f; padding: 8px 11px; border-radius: 9px;
    background: color-mix(in srgb, #c34646 12%, transparent);
    border: 1px solid color-mix(in srgb, #c34646 38%, transparent);
}

/* Thinking */
.nbw-thinking[b-sae8cyyf8e] { display: flex; flex-direction: column; align-items: center; gap: .9rem; padding: 2rem 0 1.4rem; color: var(--muted, #9a9a9a); }
.nbw-thinking p[b-sae8cyyf8e] { margin: 0; font-size: .9rem; }
.nbw-typing[b-sae8cyyf8e] { display: inline-flex; gap: 5px; }
.nbw-typing span[b-sae8cyyf8e] {
    width: 8px; height: 8px; border-radius: 50%; background: var(--accent, #c4b5fd);
    animation: nbw-bounce-b-sae8cyyf8e 1.3s infinite ease-in-out both;
}
.nbw-typing span:nth-child(1)[b-sae8cyyf8e] { animation-delay: -.28s; }
.nbw-typing span:nth-child(2)[b-sae8cyyf8e] { animation-delay: -.14s; }
@keyframes nbw-bounce-b-sae8cyyf8e { 0%, 80%, 100% { transform: scale(.5); opacity: .5; } 40% { transform: scale(1); opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .nbw-typing span[b-sae8cyyf8e] { animation: none; opacity: .8; } }

/* Work-time tag + footer */
.nbw-worktag[b-sae8cyyf8e] {
    padding: 8px 18px; font-size: .74rem; color: var(--muted, #8a8a8a);
    border-top: 1px solid var(--border, #2a2a2a);
}
.nbw-foot[b-sae8cyyf8e] { display: flex; justify-content: flex-end; align-items: center; gap: .6rem; padding: 12px 18px 16px; }
.nbw-foot-lead[b-sae8cyyf8e] { margin-right: auto; }
.nbw-btn[b-sae8cyyf8e] {
    appearance: none; cursor: pointer; font: inherit; font-size: .88rem; font-weight: 600;
    padding: 8px 16px; border-radius: 10px; border: 1px solid var(--border, #2a2a2a);
    background: var(--bg-overlay, #1e1e1e); color: var(--fg, #ececec);
}
.nbw-btn.ghost:hover:not(:disabled)[b-sae8cyyf8e] { background: var(--bg-elevated, #161616); }
.nbw-btn.primary[b-sae8cyyf8e] { border-color: transparent; color: #fff; background: linear-gradient(135deg, var(--accent, #c4b5fd), #7c6ce0); }
.nbw-btn.primary:hover:not(:disabled)[b-sae8cyyf8e] { filter: brightness(1.06); }
.nbw-btn:disabled[b-sae8cyyf8e] { opacity: .5; cursor: default; }
/* _content/Buildessa/Components/Lisa/PasskeyManagerPanel.razor.rz.scp.css */
.passkey-panel[b-az2yllvidn] {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.pk-loading[b-az2yllvidn],
.pk-empty[b-az2yllvidn] {
    padding: 14px 16px;
    background: rgba(255, 255, 255, 0.03);
    border: 1px dashed var(--border);
    border-radius: 12px;
    color: var(--muted, #9a9a9a);
    font-size: 14px;
}

.pk-empty strong[b-az2yllvidn] {
    color: var(--fg, #ececec);
    display: block;
    margin-bottom: 4px;
}

.pk-empty p[b-az2yllvidn] {
    margin: 0;
}

/* List ───────────────────────────────────────────────────────── */

.pk-list[b-az2yllvidn] {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.pk-item[b-az2yllvidn] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
}

.pk-icon[b-az2yllvidn] {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    background: rgba(196, 181, 253, 0.10);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--accent, #c4b5fd);
    flex: 0 0 36px;
}

.pk-icon svg[b-az2yllvidn] {
    width: 18px;
    height: 18px;
}

.pk-meta[b-az2yllvidn] {
    flex: 1;
    min-width: 0;
}

.pk-name[b-az2yllvidn] {
    font-size: 14px;
    font-weight: 600;
    color: var(--fg, #ececec);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    display: flex;
    align-items: center;
    gap: 8px;
}

.pk-current-badge[b-az2yllvidn] {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    padding: 2px 7px;
    border-radius: 999px;
    background: rgba(196, 181, 253, 0.15);
    color: var(--accent, #c4b5fd);
    border: 1px solid rgba(196, 181, 253, 0.35);
}

.pk-sub[b-az2yllvidn] {
    font-size: 12px;
    color: var(--muted, #8a8a8a);
    margin-top: 2px;
}

.pk-sub-faint[b-az2yllvidn] {
    color: var(--muted, #6b6b6b);
    font-size: 11px;
}

.pk-remove[b-az2yllvidn] {
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--fg-dim, #d0d0d0);
    font: inherit;
    font-size: 13px;
    padding: 6px 10px;
    cursor: pointer;
}

.pk-remove:hover:not(:disabled)[b-az2yllvidn] {
    background: rgba(239, 107, 107, 0.10);
    border-color: rgba(239, 107, 107, 0.45);
    color: var(--danger);
}

.pk-remove:disabled[b-az2yllvidn] {
    opacity: 0.5;
    cursor: not-allowed;
}

/* Pencil / save / cancel icon buttons ──────────────────────────── */

.pk-icon-btn[b-az2yllvidn] {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--muted, #8a8a8a);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    flex: 0 0 32px;
}

.pk-icon-btn svg[b-az2yllvidn] {
    width: 14px;
    height: 14px;
}

.pk-icon-btn:hover:not(:disabled)[b-az2yllvidn] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--fg, #ececec);
    border-color: var(--border-strong);
}

.pk-icon-btn.save[b-az2yllvidn] {
    background: var(--accent, #c4b5fd);
    border-color: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.pk-icon-btn.save:hover:not(:disabled)[b-az2yllvidn] {
    filter: brightness(1.05);
}

.pk-icon-btn.cancel:hover:not(:disabled)[b-az2yllvidn] {
    background: rgba(239, 107, 107, 0.10);
    border-color: rgba(239, 107, 107, 0.45);
    color: var(--danger);
}

.pk-icon-btn:disabled[b-az2yllvidn] {
    opacity: 0.5;
    cursor: not-allowed;
}

/* Inline rename input ──────────────────────────────────────────── */

.pk-rename[b-az2yllvidn] {
    background: var(--bg-overlay);
    border: 1px solid var(--accent-soft, #6d5fbe);
    border-radius: 8px;
    color: var(--fg, #ececec);
    font: inherit;
    font-size: 14px;
    padding: 6px 10px;
    outline: 0;
    width: 100%;
    box-shadow: 0 0 0 3px rgba(196, 181, 253, 0.14);
}

.pk-rename[b-az2yllvidn]::placeholder {
    color: var(--muted, #6b6b6b);
}

/* Add buttons ─────────────────────────────────────────────────── */

.pk-actions[b-az2yllvidn] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 4px;
}

.pk-btn[b-az2yllvidn] {
    border: 0;
    border-radius: 10px;
    padding: 10px 14px;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    flex: 1 1 220px;
}

.pk-btn.primary[b-az2yllvidn] {
    background: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.pk-btn.primary:hover:not(:disabled)[b-az2yllvidn] {
    filter: brightness(1.05);
}

.pk-btn.ghost[b-az2yllvidn] {
    background: transparent;
    border: 1px solid var(--border);
    color: var(--fg-dim, #d0d0d0);
}

.pk-btn.ghost:hover:not(:disabled)[b-az2yllvidn] {
    background: rgba(255, 255, 255, 0.05);
    color: var(--fg, #ececec);
}

.pk-btn:disabled[b-az2yllvidn] {
    opacity: 0.55;
    cursor: not-allowed;
}

/* Status ─────────────────────────────────────────────────────── */

.pk-alert[b-az2yllvidn] {
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 13px;
    border: 1px solid var(--border);
    background: var(--bg-overlay);
}

.pk-alert.success[b-az2yllvidn] {
    border-color: rgba(140, 220, 170, 0.3);
    background: rgba(140, 220, 170, 0.07);
    color: var(--success);
}

.pk-alert.error[b-az2yllvidn] {
    border-color: rgba(255, 139, 139, 0.35);
    background: rgba(255, 139, 139, 0.08);
    color: var(--danger);
}
/* _content/Buildessa/Components/Lisa/PlaybookList.razor.rz.scp.css */
/* §16 — Training (playbooks) list, the Training tab of Knowledge. */

.pb-empty[b-slu261t6t8] {
    padding: 16px 4px;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    max-width: 560px;
}

.pb-list[b-slu261t6t8] {
    display: flex;
    flex-direction: column;
}

.pb-row[b-slu261t6t8] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 4px;
    border-bottom: 1px solid var(--border);
}

.pb-row:last-child[b-slu261t6t8] {
    border-bottom: 0;
}

.pb-icon[b-slu261t6t8] {
    flex: 0 0 auto;
    font-size: 15px;
    line-height: 1.4;
    width: 20px;
    text-align: center;
}

.pb-body[b-slu261t6t8] {
    min-width: 0;
    flex: 1;
}

.pb-name[b-slu261t6t8] {
    font-size: 13px;
    color: var(--fg);
    font-weight: 600;
}

.pb-summary[b-slu261t6t8] {
    font-size: 12px;
    color: var(--muted);
    line-height: 1.45;
    margin-top: 2px;
}
/* _content/Buildessa/Components/Lisa/ProjectCalendar.razor.rz.scp.css */
/* P12 — the project calendar. Two views of one timeline: a month grid
   (default) for "what is coming", and a list for "everything, in order". */

.cal-card[b-knnociv6ry] { margin-bottom: 16px; }

.cal-tools[b-knnociv6ry] {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}

.cal-nav[b-knnociv6ry] {
    display: flex;
    align-items: center;
    gap: 4px;
}

.cal-month[b-knnociv6ry] {
    font-size: 12.5px;
    font-weight: 650;
    min-width: 120px;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.cal-navbtn[b-knnociv6ry] {
    border: 1px solid var(--border);
    background: var(--bg-elevated);
    color: var(--fg);
    border-radius: 6px;
    width: 24px;
    height: 24px;
    line-height: 1;
    cursor: pointer;
    font-size: 14px;
}

.cal-navbtn:hover[b-knnociv6ry] { border-color: var(--border-strong); background: var(--hover-overlay); }

/* Segmented view switch. */
.cal-views[b-knnociv6ry] {
    display: inline-flex;
    border: 1px solid var(--border);
    border-radius: 999px;
    overflow: hidden;
}

.cal-viewbtn[b-knnociv6ry] {
    font: inherit;
    font-size: 11.5px;
    font-weight: 600;
    padding: 4px 12px;
    border: none;
    background: transparent;
    color: var(--muted);
    cursor: pointer;
}

.cal-viewbtn.on[b-knnociv6ry] { background: var(--accent); color: var(--accent-fg); }
.cal-viewbtn:not(.on):hover[b-knnociv6ry] { background: var(--hover-overlay); color: var(--fg); }
.cal-viewbtn:focus-visible[b-knnociv6ry] { outline: 2px solid var(--accent); outline-offset: -2px; }

/* ── Month grid ──────────────────────────────────────────────────── */

.cal-grid[b-knnociv6ry] {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 1px;
    background: var(--border);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.cal-dow[b-knnociv6ry] {
    background: var(--bg-elevated);
    padding: 5px 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--muted);
    text-align: center;
}

.cal-day[b-knnociv6ry] {
    background: var(--bg-elevated);
    min-height: 78px;
    padding: 4px 5px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

/* Days from the neighbouring months stay visible but recede — the week
   has to be whole for the columns to mean anything. */
.cal-day.out[b-knnociv6ry] { opacity: .45; }

.cal-day.today[b-knnociv6ry] { box-shadow: inset 0 0 0 2px var(--accent); }

.cal-daynum[b-knnociv6ry] {
    font-size: 11px;
    font-weight: 650;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}

.cal-day.today .cal-daynum[b-knnociv6ry] { color: var(--accent); }

/* An event in a cell: one line, truncated, full text in the tooltip. */
.cal-pip[b-knnociv6ry] {
    font-size: 10.5px;
    line-height: 1.3;
    padding: 2px 5px;
    border-radius: 4px;
    border-left: 3px solid var(--muted);
    background: var(--hover-overlay);
    color: var(--fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    cursor: default;
}

.cal-more[b-knnociv6ry] {
    font-size: 10px;
    color: var(--muted);
    padding-left: 4px;
    cursor: default;
}

/* ── Kind, shared by both views ──────────────────────────────────── */

.k-deadline[b-knnociv6ry] { border-left-color: var(--danger); }
.k-meeting[b-knnociv6ry] { border-left-color: var(--warning); }
.k-milestone[b-knnociv6ry] { border-left-color: var(--info); }
.k-step[b-knnociv6ry] { border-left-color: var(--success); }

/* ── List view ───────────────────────────────────────────────────── */

.cal-list[b-knnociv6ry] { list-style: none; margin: 0; padding: 0; }

.cal-row[b-knnociv6ry] {
    display: flex;
    align-items: baseline;
    gap: 14px;
    padding: 8px 0;
    border-bottom: 1px solid var(--border);
    font-size: 13px;
}

.cal-row:last-child[b-knnociv6ry] { border-bottom: 0; }

/* What has already happened recedes — but stays, because a missed
   mandatory walk is exactly what someone needs to see. */
.cal-row.past[b-knnociv6ry] { opacity: .58; }

.cal-when[b-knnociv6ry] {
    flex: 0 0 auto;
    min-width: 116px;
    display: flex;
    align-items: baseline;
    gap: 6px;
    font-variant-numeric: tabular-nums;
}

.cal-year[b-knnociv6ry], .cal-time[b-knnociv6ry] { font-size: 11px; color: var(--muted); }

.cal-what[b-knnociv6ry] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    flex-wrap: wrap;
    min-width: 0;
}

.cal-kind[b-knnociv6ry] {
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    padding: 1px 6px;
    border-radius: 999px;
    border: 1px solid currentColor;
    border-left-width: 3px;
    color: var(--muted);
    flex: 0 0 auto;
}

.cal-note[b-knnociv6ry] {
    flex: 1 1 100%;
    font-size: 11.5px;
    line-height: 1.45;
    color: var(--muted);
    overflow-wrap: anywhere;
}

@media (max-width: 700px) {
    .cal-day[b-knnociv6ry] { min-height: 62px; }
    .cal-pip[b-knnociv6ry] { font-size: 9.5px; }
}

/* P13 — the team's own dated work. --accent, because the four semantic
   tokens are spoken for and a task is neither good news nor bad by
   itself; what it IS gets said by the two modifiers below. */
.k-task[b-knnociv6ry] { border-left-color: var(--accent); }

/* Ruled on, whichever way — it recedes but does not vanish, the same
   stance the list view takes with the past. */
.cal-pip.settled[b-knnociv6ry], .cal-row.settled[b-knnociv6ry] { opacity: .5; }
.cal-pip.settled[b-knnociv6ry] { text-decoration: line-through; }

/* Open and past its date. A deadline that has passed is history; a
   to-do that has passed is somebody's problem, so it is the one thing
   on this calendar allowed to shout. */
.cal-pip.late[b-knnociv6ry] {
    border-left-color: var(--danger);
    color: var(--danger);
    background: color-mix(in srgb, var(--danger) 12%, transparent);
    font-weight: 600;
}

.cal-row.late .cal-kind[b-knnociv6ry] { color: var(--danger); }
.cal-row.late .cal-what > b[b-knnociv6ry] { color: var(--danger); }

/* Overflow that is hiding something overdue says so — a grey count is
   how the one loud signal on this calendar gets silenced. */
.cal-more.late[b-knnociv6ry] { color: var(--danger); font-weight: 700; }
/* _content/Buildessa/Components/Lisa/ProjectDropZone.razor.rz.scp.css */
/* P15 — the project's document drop zone. */

.pdz[b-2qfk56tgc9] {
    position: relative;               /* the input is absolutely placed inside */
    display: block;
    border: 1.5px dashed var(--border);
    border-radius: 10px;
    padding: 16px 14px;
    text-align: center;
    cursor: pointer;
    margin-bottom: 10px;
    background: transparent;
    transition: border-color 120ms ease, background-color 120ms ease, color 120ms ease;
}

.pdz-compact[b-2qfk56tgc9] { padding: 11px 14px; margin-bottom: 12px; }

.pdz:hover[b-2qfk56tgc9] { border-color: var(--border-strong); }

/* The input COVERS the zone rather than being clipped into a corner —
   that is what makes a real drop land. Transparent, not display:none:
   a hidden input is not a drop target. */
.pdz[b-2qfk56tgc9]  input[type="file"] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
}

.pdz.is-busy[b-2qfk56tgc9], .pdz.is-busy[b-2qfk56tgc9]  input[type="file"] { cursor: default; }

.pdz-body[b-2qfk56tgc9] {
    display: flex;
    flex-direction: column;
    gap: 3px;
    pointer-events: none;             /* clicks belong to the input */
}

.pdz-title[b-2qfk56tgc9] {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--fg-dim);
    text-wrap: balance;
}

.pdz-hint[b-2qfk56tgc9] {
    font-size: 12px;
    line-height: 1.45;
    color: var(--muted);
    text-wrap: balance;
}

/* A file is over the zone. This is the whole point of the state: without
   it the only feedback a drag gets is the cursor, and people let go over
   the wrong half of the page. Loud enough to be unmistakable at a glance,
   since it lasts about a second. */
.pdz.is-over[b-2qfk56tgc9] {
    border-color: var(--accent);
    border-style: solid;
    background: color-mix(in srgb, var(--accent) 10%, transparent);
}

.pdz.is-over .pdz-title[b-2qfk56tgc9] { color: var(--accent); }
.pdz.is-over .pdz-hint[b-2qfk56tgc9] { color: var(--accent); opacity: .85; }

/* Keyboard users get the same affordance the mouse gets on hover. */
.pdz:focus-within[b-2qfk56tgc9] {
    border-color: var(--accent);
    outline: 2px solid var(--focus-ring);
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    .pdz[b-2qfk56tgc9] { transition: none; }
}
/* _content/Buildessa/Components/Lisa/ProjectMapView.razor.rz.scp.css */
/* The map scrolls inside its own container — the page never scrolls
   sideways for a long engagement. */
.pm-wrap[b-rvj22m40w9] {
    overflow-x: auto;
    padding: 4px 0;
}

.pm-wrap svg[b-rvj22m40w9] {
    display: block;
    font-family: system-ui, sans-serif;
}

/* Edges */
[b-rvj22m40w9] .pm-edge {
    fill: none;
    stroke: var(--muted, #8a8e99);
    stroke-width: 1.5;
}

[b-rvj22m40w9] .pm-edge-loop {
    stroke: var(--danger, #c0685c);
    stroke-dasharray: 5 4;
}

[b-rvj22m40w9] .pm-arrhead { fill: var(--muted, #8a8e99); }
[b-rvj22m40w9] .pm-arrhead-loop { fill: var(--danger, #c0685c); }

[b-rvj22m40w9] .pm-loop-label {
    fill: var(--danger, #c0685c);
    font-size: 10.5px;
}

/* Nodes — state carries the color; unknown states stay neutral. */
[b-rvj22m40w9] .pm-box {
    fill: transparent;
    stroke: var(--border, #d0d0d6);
    stroke-width: 1.5;
}

[b-rvj22m40w9] .pm-label {
    fill: var(--fg, #23252c);
    font-size: 12.5px;
    font-weight: 600;
}

[b-rvj22m40w9] .pm-state {
    fill: var(--muted, #8a8e99);
    font-size: 10.5px;
}

[b-rvj22m40w9] .pm-done .pm-box {
    stroke: var(--ok, #2e7d4f);
    fill: color-mix(in srgb, var(--ok, #2e7d4f) 10%, transparent);
}
[b-rvj22m40w9] .pm-done .pm-state { fill: var(--ok, #2e7d4f); }

[b-rvj22m40w9] .pm-active .pm-box {
    stroke: var(--accent, #6d5fbe);
    stroke-width: 2.5;
    fill: color-mix(in srgb, var(--accent, #6d5fbe) 12%, transparent);
}
[b-rvj22m40w9] .pm-active .pm-state { fill: var(--accent, #6d5fbe); font-weight: 600; }

[b-rvj22m40w9] .pm-wait .pm-box {
    stroke: var(--warning, #b2823c);
    stroke-dasharray: 4 3;
    fill: color-mix(in srgb, var(--warning, #b2823c) 9%, transparent);
}
[b-rvj22m40w9] .pm-wait .pm-state { fill: var(--warning, #b2823c); }

/* Ongoing — a collection step that stays open as the flow advances. */
[b-rvj22m40w9] .pm-ongoing .pm-box {
    stroke: var(--info, #3d7ea6);
    fill: color-mix(in srgb, var(--info, #3d7ea6) 9%, transparent);
}
[b-rvj22m40w9] .pm-ongoing .pm-state { fill: var(--info, #3d7ea6); }

[b-rvj22m40w9] .pm-skipped { opacity: 0.45; }
[b-rvj22m40w9] .pm-skipped .pm-state { font-style: italic; }

/* The active step breathes, gently — "you are here" should be findable
   at a glance without being a strobe. */
@keyframes pm-breathe-b-rvj22m40w9 {
    0%, 100% { stroke-opacity: 1; }
    50%      { stroke-opacity: 0.55; }
}

[b-rvj22m40w9] .pm-active .pm-box { animation: pm-breathe-b-rvj22m40w9 2.4s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
    [b-rvj22m40w9] .pm-active .pm-box { animation: none; }
}

/* Legend */
.pm-legend[b-rvj22m40w9] {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    font-size: 11.5px;
    color: var(--muted, #8a8e99);
    padding: 6px 2px 0;
}

.pm-legend .lg[b-rvj22m40w9]::before { content: "●"; margin-right: 5px; }

.pm-hidden-loops[b-rvj22m40w9] {
    color: var(--muted, #8a8e99);
    font-style: italic;
}
.pm-legend .lg-done[b-rvj22m40w9]::before { color: var(--ok, #2e7d4f); }
.pm-legend .lg-active[b-rvj22m40w9]::before { color: var(--accent, #6d5fbe); }
.pm-legend .lg-wait[b-rvj22m40w9]::before { color: var(--warning, #b2823c); }
.pm-legend .lg-pending[b-rvj22m40w9]::before { color: var(--muted, #8a8e99); }
.pm-legend .lg-loop[b-rvj22m40w9]::before { color: var(--danger, #c0685c); }

/* P6b - the block you are LOOKING AT (separate from where the work is) */
.pm-node.pm-viewing .pm-box[b-rvj22m40w9] {
    stroke: var(--accent, #6d5fbe);
    stroke-width: 2.5;
    filter: drop-shadow(0 0 0 2px var(--accent, #6d5fbe));
}

/* NOTE on ::deep — every rule below that targets TEXT needs it.
   SvgText() builds its <text> as a MarkupString, and raw markup injected
   at runtime never carries the compile-time scope attribute, so an
   unprefixed selector silently matches nothing. The symptom is not a
   missing style but a 16px browser default: the sub-step label and its
   state line are drawn 12px apart, so at 16px they land on top of each
   other (field screenshot 2026-08-18). .pm-label and .pm-state had it and
   were fine; the ones added later did not. */
[b-rvj22m40w9] .pm-node.pm-viewing .pm-label {
    font-weight: 700;
}

/* P6b - finished but never produced what it declared */
.pm-warn circle[b-rvj22m40w9] {
    fill: #b3541e;
    stroke: var(--bg, #fff);
    stroke-width: 1.5;
}

[b-rvj22m40w9] .pm-warn-glyph {
    fill: #fff;
    font-size: 11px;
    font-weight: 800;
    text-anchor: middle;
}

.pm-node.pm-short .pm-box[b-rvj22m40w9] {
    stroke-dasharray: 5 3;
}

/* P6d - sub-steps: the work that serves the step above it */
.pm-sub-link[b-rvj22m40w9] {
    fill: none;
    stroke: var(--border, #cfcbe0);
    stroke-width: 1.4;
}

.pm-node.pm-sub .pm-box[b-rvj22m40w9] { stroke-width: 1.2; }
[b-rvj22m40w9] .pm-sub-label { font-size: 11px; font-weight: 600; text-anchor: middle; }
[b-rvj22m40w9] .pm-sub-state { font-size: 9.5px; opacity: .8; text-anchor: middle; }

/* P11 — a block's own task standing, between its name and its state. */
[b-rvj22m40w9] .pm-tasks {
    font-size: 9.5px;
    font-weight: 600;
    text-anchor: middle;
    opacity: .8;
}

/* ══ P19 — deliverable tags: what this step OWES ═══════════════════════
   A pill, deliberately not a box: the boxes on this map are steps, and a
   deliverable is an output. The dot carries the state so the label is free
   to carry the name.

   ::deep on the label because it comes from SvgTextLeft as a MarkupString —
   see the note at the top of this file. */

.pm-tag[b-rvj22m40w9] { cursor: pointer; }

.pm-tag-box[b-rvj22m40w9] {
    fill: var(--bg-elevated);
    stroke: var(--border);
    stroke-width: 1.2;
}

.pm-tag-dot[b-rvj22m40w9] { fill: var(--muted); }

[b-rvj22m40w9] .pm-tag-label {
    font-size: 10px;
    font-weight: 600;
    fill: var(--fg-dim);
}

.pm-tag:hover .pm-tag-box[b-rvj22m40w9] { stroke: var(--border-strong); }
.pm-tag:focus-visible .pm-tag-box[b-rvj22m40w9] { stroke: var(--accent); stroke-width: 1.8; }

/* Lisa still needs an answer before she can start. The one thing in this
   band allowed to draw the eye — it is the whole intent mechanism, and a
   user who never notices it never answers. */
.pm-tag.tone-open .pm-tag-box[b-rvj22m40w9] {
    stroke: var(--warning);
    fill: color-mix(in srgb, var(--warning) 10%, var(--bg-elevated));
}
.pm-tag.tone-open .pm-tag-dot[b-rvj22m40w9] { fill: none; stroke: var(--warning); stroke-width: 1.3; }
[b-rvj22m40w9] .pm-tag.tone-open .pm-tag-label { fill: var(--warning); }

/* Brief settled, nothing produced yet. */
.pm-tag.tone-ready .pm-tag-box[b-rvj22m40w9] { stroke: var(--accent); }
.pm-tag.tone-ready .pm-tag-dot[b-rvj22m40w9] { fill: var(--accent); }
[b-rvj22m40w9] .pm-tag.tone-ready .pm-tag-label { fill: var(--accent); }

/* The artifact exists. */
.pm-tag.tone-done .pm-tag-box[b-rvj22m40w9] {
    stroke: var(--success);
    fill: color-mix(in srgb, var(--success) 9%, var(--bg-elevated));
}
.pm-tag.tone-done .pm-tag-dot[b-rvj22m40w9] { fill: var(--success); }
[b-rvj22m40w9] .pm-tag.tone-done .pm-tag-label { fill: var(--success); }

/* Proposed, unbriefed, nobody has agreed — present but quiet. */
.pm-tag.tone-proposed .pm-tag-box[b-rvj22m40w9] { stroke-dasharray: 4 3; }
.pm-tag.tone-proposed .pm-tag-dot[b-rvj22m40w9] { fill: none; stroke: var(--muted); stroke-width: 1.2; }
/* _content/Buildessa/Components/Lisa/ReasoningStrip.razor.rz.scp.css */
/* Compact strip that sits above each assistant turn carrying a
   structured reasoning block. Goals:
     • One-line collapsed footprint — does NOT shove the narrative.
     • Mode + confidence drive subtle color cues so users learn the
       reasoning posture at a glance.
     • Expansion shows the rest in-place (no overlay) — narrative + the
       full reasoning visible side by side.
*/

.reason-strip[b-khv4wp8efp] {
    display: flex;
    flex-direction: column;
    margin: 4px 0 6px;
    border: 1px solid var(--border);
    border-left: 3px solid var(--accent);
    border-radius: 6px;
    background: var(--bg-elevated);
    font-size: 12px;
    line-height: 1.4;
    overflow: hidden;
}

/* Mode tinting — left border is the at-a-glance signal. */
.reason-strip.mode-rich[b-khv4wp8efp]    { border-left-color: var(--info, #3a86ff); }
.reason-strip.mode-poor[b-khv4wp8efp]    { border-left-color: var(--warning, #f9c74f); }
.reason-strip.mode-unknown[b-khv4wp8efp] { border-left-color: var(--muted); }

/* Low confidence: subtle warning tint behind the strip header. */
.reason-strip.conf-low > .reason-head[b-khv4wp8efp] {
    background: color-mix(in srgb, var(--warning, #f9c74f) 8%, transparent);
}

.reason-head[b-khv4wp8efp] {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    padding: 4px 10px;
    background: transparent;
    border: 0;
    text-align: left;
    color: var(--fg-dim, var(--fg));
    cursor: pointer;
    font: inherit;
    font-size: 12px;
}

.reason-head:hover[b-khv4wp8efp] {
    background: var(--hover-overlay);
}

.reason-layer[b-khv4wp8efp] {
    flex: 0 0 auto;
    padding: 2px 8px;
    border-radius: 4px;
    background: var(--bg-overlay);
    color: var(--accent);
    font-weight: 600;
    font-size: 11px;
    white-space: nowrap;
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

.reason-hyp[b-khv4wp8efp] {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--fg);
}

.reason-strip.open .reason-hyp[b-khv4wp8efp] {
    white-space: normal;
}

.reason-chev[b-khv4wp8efp] {
    flex: 0 0 auto;
    color: var(--muted);
    transition: transform 0.15s ease;
}

.reason-chev.open[b-khv4wp8efp] {
    transform: rotate(90deg);
}

.reason-body[b-khv4wp8efp] {
    padding: 10px 12px 12px;
    border-top: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.reason-meta[b-khv4wp8efp] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    color: var(--muted);
}

.reason-meta-label[b-khv4wp8efp] {
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.reason-meta-value[b-khv4wp8efp] {
    color: var(--fg);
    font-weight: 500;
}

.reason-meta-sep[b-khv4wp8efp] {
    opacity: 0.5;
    margin: 0 4px;
}

.reason-section-label[b-khv4wp8efp] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 3px;
}

.reason-list[b-khv4wp8efp] {
    margin: 0;
    padding-left: 18px;
    list-style: disc;
}

.reason-list li[b-khv4wp8efp] {
    margin-bottom: 2px;
}

.reason-list-strike li[b-khv4wp8efp] {
    color: var(--muted);
    text-decoration: line-through;
    text-decoration-color: color-mix(in srgb, var(--muted) 60%, transparent);
}

.reason-next[b-khv4wp8efp] {
    padding: 6px 10px;
    background: var(--bg-overlay);
    border-radius: 4px;
    color: var(--fg);
}

/* ── Phase 4: inline feedback ─────────────────────────────────────── */

.reason-feedback[b-khv4wp8efp] {
    display: flex;
    gap: 6px;
    padding-top: 8px;
    border-top: 1px dashed var(--border);
    align-items: center;
    flex-wrap: wrap;
}

.rf-btn[b-khv4wp8efp] {
    padding: 3px 10px;
    border-radius: 4px;
    border: 1px solid var(--border);
    background: var(--bg-elevated);
    color: var(--fg);
    cursor: pointer;
    font-size: 12px;
    font: inherit;
    font-size: 12px;
}

.rf-btn:hover:not(:disabled)[b-khv4wp8efp] {
    background: var(--hover-overlay);
}

.rf-btn:disabled[b-khv4wp8efp] {
    opacity: 0.5;
    cursor: not-allowed;
}

.rf-right:hover:not(:disabled)[b-khv4wp8efp] {
    border-color: var(--success, #2a9d8f);
    color: var(--success, #2a9d8f);
}

.rf-close:hover:not(:disabled)[b-khv4wp8efp] {
    border-color: var(--warning, #f9c74f);
}

.rf-wrong:hover:not(:disabled)[b-khv4wp8efp] {
    border-color: var(--danger, #e63946);
    color: var(--danger, #e63946);
}

.rf-ack[b-khv4wp8efp] {
    font-size: 12px;
    color: var(--muted);
}

.rf-ack .muted[b-khv4wp8efp] {
    margin-left: 4px;
    opacity: 0.7;
}

.rf-picker[b-khv4wp8efp] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    padding-top: 6px;
}

.rf-picker-label[b-khv4wp8efp] {
    flex: 1 0 100%;
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 2px;
}

.rf-cat[b-khv4wp8efp] {
    padding: 3px 10px;
    border-radius: 4px;
    border: 1px solid var(--border);
    background: var(--bg-overlay);
    color: var(--fg);
    cursor: pointer;
    font: inherit;
    font-size: 12px;
}

.rf-cat:hover:not(:disabled)[b-khv4wp8efp] {
    background: var(--hover-overlay);
    border-color: var(--accent);
}

.rf-note-row[b-khv4wp8efp] {
    flex: 1 0 100%;
}

.rf-note[b-khv4wp8efp] {
    width: 100%;
    padding: 4px 8px;
    border-radius: 4px;
    border: 1px solid var(--border);
    background: var(--bg);
    color: var(--fg);
    font: inherit;
    font-size: 12px;
}

.rf-error[b-khv4wp8efp] {
    color: var(--danger, #e63946);
    font-size: 12px;
}
/* _content/Buildessa/Components/Lisa/RemoteLoginModal.razor.rz.scp.css */
/* Remote login modal — fixed-position overlay above the chat. Backdrop
   dims the page so the credential prompt clearly owns focus. Width is
   constrained for a centered, dialog-shaped layout regardless of how
   wide the host window is. */

.rlm-backdrop[b-tk3s5gzmq3] {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.45);
    z-index: 1000;
    backdrop-filter: blur(2px);
}

.rlm-modal[b-tk3s5gzmq3] {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: min(440px, calc(100vw - 32px));
    max-height: calc(100vh - 32px);
    overflow-y: auto;
    background: var(--bg-elevated, #fff);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 8px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
    z-index: 1001;
    display: flex;
    flex-direction: column;
}

.rlm-head[b-tk3s5gzmq3] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    padding: 16px 18px;
    border-bottom: 1px solid var(--border);
}

.rlm-title[b-tk3s5gzmq3] {
    font-size: 15px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--fg);
}

.rlm-sub[b-tk3s5gzmq3] {
    font-size: 12px;
    line-height: 1.5;
    color: var(--muted);
    margin-top: 4px;
}

.rlm-close[b-tk3s5gzmq3] {
    background: transparent;
    border: 0;
    font-size: 22px;
    line-height: 1;
    color: var(--muted);
    cursor: pointer;
    padding: 0 4px;
    border-radius: 3px;
}

.rlm-close:hover[b-tk3s5gzmq3] {
    background: var(--hover-overlay);
    color: var(--fg);
}

.rlm-body[b-tk3s5gzmq3] {
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rlm-field[b-tk3s5gzmq3] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.rlm-field > span[b-tk3s5gzmq3] {
    font-size: 11px;
    font-weight: 600;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.rlm-field-label[b-tk3s5gzmq3] {
    text-transform: none !important;
    letter-spacing: 0 !important;
    font-size: 12px !important;
    font-weight: 500 !important;
    color: var(--fg) !important;
    margin-bottom: 4px;
}

.rlm-radio[b-tk3s5gzmq3] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 8px 10px;
    border: 1px solid var(--border);
    border-radius: 4px;
    background: var(--bg-overlay);
    cursor: pointer;
    margin-bottom: 4px;
}

.rlm-radio:hover[b-tk3s5gzmq3] {
    background: var(--hover-overlay);
}

.rlm-radio input[type="radio"][b-tk3s5gzmq3] {
    margin-top: 3px;
    flex-shrink: 0;
}

.rlm-radio span[b-tk3s5gzmq3] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.rlm-radio strong[b-tk3s5gzmq3] {
    font-size: 12px;
    font-weight: 500;
    color: var(--fg);
}

.rlm-radio small[b-tk3s5gzmq3] {
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
}

.rlm-error[b-tk3s5gzmq3] {
    font-size: 11px;
    color: var(--danger, #e63946);
    background: color-mix(in srgb, var(--danger, #e63946) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--danger, #e63946) 30%, transparent);
    padding: 6px 10px;
    border-radius: 4px;
}

.rlm-actions[b-tk3s5gzmq3] {
    display: flex;
    gap: 8px;
    padding: 12px 18px 16px;
    border-top: 1px solid var(--border);
}

.rlm-actions .btn-primary[b-tk3s5gzmq3],
.rlm-actions .btn-ghost[b-tk3s5gzmq3] {
    flex: 1;
}
/* _content/Buildessa/Components/Lisa/SideMenu.razor.rz.scp.css */
.side-menu[b-e11gqy3cjc] {
    width: 260px;
    flex: 0 0 260px;
    display: flex;
    flex-direction: column;
    /* Height: 100% of .app-shell, which is locked to 100dvh and
       non-scrolling (see AppLayout.razor.css). Main content scrolls
       inside .app-main; the page itself never scrolls; the sidebar
       is naturally fixed by being a child of the non-scrolling
       parent. No position:sticky tricks needed. */
    height: 100%;
    /* Bottom padding bumped (was 12) and routed through safe-area-inset
       to keep the profile chip clear of overlapping OS chrome (Windows
       11 transparent taskbar, mobile home indicators). Combined with
       .side-footer's own padding-bottom this gives ~36px of vertical
       breathing room below the chip on plain desktop, more on devices
       that report a safe-area inset. */
    padding: 14px 10px calc(20px + env(safe-area-inset-bottom, 0px));
    background: var(--bg-input);
    border-right: 1px solid var(--border, #1f1f1f);
    transition: flex-basis 200ms ease, width 200ms ease, padding 200ms ease;
    overflow: hidden;
}

/* Middle area: org chip + quick nav + sections. Sized to fill the
   space between .side-top and .side-footer; scrolls when content
   exceeds the available height. min-height:0 is required inside a
   flex column or overflow:auto would never trigger. */
.side-scroll[b-e11gqy3cjc] {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    /* Thin scrollbar that only paints when content actually overflows
       — avoids visual noise on short lists. */
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}
.side-scroll[b-e11gqy3cjc]::-webkit-scrollbar { width: 8px; }
.side-scroll[b-e11gqy3cjc]::-webkit-scrollbar-thumb {
    background: var(--border);
    border-radius: 4px;
}
.side-scroll[b-e11gqy3cjc]::-webkit-scrollbar-thumb:hover {
    background: var(--muted, #8a8a8a);
}

/* Top + footer are non-flexing so they always reserve their space
   and the scrollable middle gets whatever's left. */
.side-top[b-e11gqy3cjc]    { flex-shrink: 0; }
.side-footer[b-e11gqy3cjc] { flex-shrink: 0; }

/* Top row: brand + collapse button ─────────────────────────────── */

.side-top[b-e11gqy3cjc] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 4px 8px 10px;
}

.brand-btn[b-e11gqy3cjc] {
    background: transparent;
    border: 0;
    padding: 4px 8px 4px 4px;
    color: var(--accent, #c4b5fd);
    cursor: pointer;
    border-radius: 6px;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    text-decoration: none;
}

.brand-btn:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.05);
}

.brand-text[b-e11gqy3cjc] {
    color: var(--fg, #ececec);
    font-weight: 600;
    font-size: 15px;
    letter-spacing: 0.2px;
}

.icon-btn[b-e11gqy3cjc] {
    background: transparent;
    border: 0;
    color: var(--muted, #8a8a8a);
    padding: 6px;
    cursor: pointer;
    border-radius: 6px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: transform 200ms ease;
}

.icon-btn:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--fg, #ececec);
}

/* Quick nav ──────────────────────────────────────────────────────── */

.quick-nav[b-e11gqy3cjc] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 4px 0 8px;
}

.nav-item[b-e11gqy3cjc],
.side-item[b-e11gqy3cjc],
.side-link[b-e11gqy3cjc],
.section-header[b-e11gqy3cjc] {
    appearance: none;
    background: transparent;
    border: 0;
    /* The <a> variants (General + building-detail nav) would otherwise pick up
       the default link underline; the <button> variants don't. Reset it so every
       menu row looks the same. */
    text-decoration: none;
    text-align: left;
    color: var(--fg-dim, #d0d0d0);
    font: inherit;
    font-size: 14px;
    padding: 8px 10px;
    border-radius: 8px;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
}

.nav-item svg[b-e11gqy3cjc],
.side-item svg[b-e11gqy3cjc],
.section-icon[b-e11gqy3cjc] {
    width: 18px;
    height: 18px;
    flex: 0 0 18px;
    color: var(--muted, #8a8a8a);
}

.nav-item:hover:not(:disabled)[b-e11gqy3cjc],
.side-item:hover:not(:disabled)[b-e11gqy3cjc],
.side-link:hover:not(:disabled)[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--fg, #ececec);
}

.nav-item:disabled[b-e11gqy3cjc],
.side-link:disabled[b-e11gqy3cjc] {
    color: var(--muted, #6b6b6b);
    cursor: not-allowed;
}

.nav-item:disabled svg[b-e11gqy3cjc] {
    color: var(--muted, #4a4a4a);
}

/* Sections (Buildings, History) ─────────────────────────────────── */

.side-section[b-e11gqy3cjc] {
    display: flex;
    flex-direction: column;
    margin-top: 14px;
    gap: 2px;
}

.section-header[b-e11gqy3cjc] {
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    color: var(--muted, #8a8a8a);
    padding: 8px 10px;
}

.section-header .section-label[b-e11gqy3cjc] {
    flex: 1;
}

.section-header:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.04);
    color: var(--fg-dim, #d0d0d0);
}

/* Section header row: toggle button (full width) + an inline action
   like "+" tucked to the right. The toggle keeps the standard rounded
   hover; the action only highlights its own pill so the two affordances
   read as separate. */
.section-header-row[b-e11gqy3cjc] {
    display: flex;
    align-items: center;
    gap: 2px;
}
.section-header-row .section-header[b-e11gqy3cjc] {
    flex: 1;
    min-width: 0;
}
.section-add[b-e11gqy3cjc] {
    appearance: none;
    background: transparent;
    border: 0;
    color: var(--muted, #8a8a8a);
    padding: 6px;
    border-radius: 6px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.section-add svg[b-e11gqy3cjc] {
    width: 14px;
    height: 14px;
}
.section-add:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--accent, #c4b5fd);
}
/* Hide the inline action in collapsed mode — the rail is icon-only and
   adding from there would be confusing anyway. */
.side-menu.collapsed .section-add[b-e11gqy3cjc] { display: none; }

.chev[b-e11gqy3cjc] {
    width: 14px;
    height: 14px;
    flex: 0 0 14px;
    transition: transform 150ms ease;
}

.chev.open[b-e11gqy3cjc]      { transform: rotate(0deg); }
.chev:not(.open)[b-e11gqy3cjc]{ transform: rotate(-90deg); }

.side-item.add svg[b-e11gqy3cjc] {
    color: var(--accent, #c4b5fd);
}

.side-item.active[b-e11gqy3cjc] {
    background: rgba(196, 181, 253, 0.10);
    color: var(--fg, #ececec);
}

.side-item.active svg[b-e11gqy3cjc] {
    color: var(--accent, #c4b5fd);
}

/* Inline add building form ───────────────────────────────────── */

.add-row[b-e11gqy3cjc] {
    padding: 6px 6px 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.add-input[b-e11gqy3cjc] {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--fg, #ececec);
    font: inherit;
    font-size: 13px;
    padding: 7px 10px;
    outline: 0;
}

.add-input:focus[b-e11gqy3cjc] {
    border-color: var(--accent-soft, #6d5fbe);
    box-shadow: 0 0 0 3px rgba(196, 181, 253, 0.14);
}

.add-actions[b-e11gqy3cjc] {
    display: flex;
    justify-content: flex-end;
    gap: 6px;
}

.add-btn[b-e11gqy3cjc] {
    border: 0;
    border-radius: 7px;
    padding: 5px 10px;
    font: inherit;
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
}

.add-btn.ghost[b-e11gqy3cjc] {
    background: transparent;
    color: var(--muted, #8a8a8a);
}

.add-btn.ghost:hover[b-e11gqy3cjc] {
    color: var(--fg, #ececec);
}

.add-btn.primary[b-e11gqy3cjc] {
    background: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.add-btn.primary:disabled[b-e11gqy3cjc] {
    opacity: 0.5;
    cursor: not-allowed;
}

.empty-hint[b-e11gqy3cjc] {
    padding: 6px 10px 4px;
    font-size: 12px;
    color: var(--muted, #6b6b6b);
}

.side-link[b-e11gqy3cjc] {
    font-size: 13px;
    color: var(--muted, #8a8a8a);
    padding: 6px 10px;
}

/* Footer ─────────────────────────────────────────────────────────── */

.side-footer[b-e11gqy3cjc] {
    margin-top: auto;
    position: relative;       /* anchor for the profile popover */
    /* Bottom padding intentionally generous (was 4px) so the profile
       chip stays clear of OS chrome that the browser's viewport math
       doesn't always account for — Windows 11 transparent/floating
       taskbar overlap, iOS home indicator, Android nav gestures.
       env(safe-area-inset-bottom) is the standards-track signal for
       those insets; the 14px fallback covers desktop browsers that
       don't expose it. */
    padding: 6px 4px calc(14px + env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--border, #1f1f1f);
}

/* Footer row: profile button (flexes wide) + small download icon to its right. */
.footer-row[b-e11gqy3cjc] {
    display: flex;
    align-items: center;
    gap: 4px;
    width: 100%;
}

.footer-download[b-e11gqy3cjc] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 8px;
    color: var(--muted, #8a8a8a);
    text-decoration: none;
    flex-shrink: 0;
}
.footer-download:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.05);
    color: var(--accent, #c4b5fd);
}
.footer-download svg[b-e11gqy3cjc] { width: 16px; height: 16px; }

/* Collapsed mode: show only the download icon, hide the profile half. */
.side-menu.collapsed .footer-row[b-e11gqy3cjc] { justify-content: center; }
.side-menu.collapsed .footer-download[b-e11gqy3cjc] {
    /* Already centred; nothing extra to do. */
}

/* The footer-trigger wraps avatar + who so the whole row is clickable. */
.footer-trigger[b-e11gqy3cjc] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1;
    min-width: 0;
    padding: 8px;
    background: transparent;
    border: 0;
    border-radius: 10px;
    color: inherit;
    cursor: pointer;
    text-align: left;
    text-decoration: none;
    font: inherit;
}

.footer-trigger:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.05);
}

.footer-trigger.open[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.06);
}

.footer-trigger.as-link[b-e11gqy3cjc] {
    color: inherit;
}

.avatar[b-e11gqy3cjc] {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: linear-gradient(135deg, #6d5fbe, #c4b5fd);
    color: var(--accent-fg);
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    flex: 0 0 32px;
}

.avatar.guest[b-e11gqy3cjc] {
    background: var(--border);
    color: var(--muted, #8a8a8a);
}

.who[b-e11gqy3cjc] {
    min-width: 0;
    display: flex;
    flex-direction: column;
    line-height: 1.25;
}

.who .name[b-e11gqy3cjc] {
    font-size: 13px;
    color: var(--fg, #ececec);
}

.who .role[b-e11gqy3cjc] {
    font-size: 11px;
    color: var(--muted, #6b6b6b);
}

.role.link[b-e11gqy3cjc] {
    color: var(--accent, #c4b5fd);
    text-decoration: none;
}

.role.link:hover[b-e11gqy3cjc] {
    text-decoration: underline;
}

.truncate[b-e11gqy3cjc] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Profile popover ───────────────────────────────────────────────── */

.profile-backdrop[b-e11gqy3cjc] {
    position: fixed;
    inset: 0;
    z-index: 40;
    background: transparent;
}

/* Fixed positioning so the popover escapes .side-menu's overflow:hidden.
   x=8 puts it just inside the rail's left edge; works the same in
   expanded (260px) and collapsed (60px) modes. */
.profile-menu[b-e11gqy3cjc] {
    position: fixed;
    bottom: 64px;
    left: 8px;
    width: 248px;
    z-index: 41;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
    box-shadow: 0 16px 36px rgba(0, 0, 0, 0.55);
    padding: 6px;
}

.profile-item[b-e11gqy3cjc] {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 8px 10px;
    border: 0;
    background: transparent;
    color: var(--fg-dim, #d0d0d0);
    font: inherit;
    font-size: 14px;
    text-align: left;
    text-decoration: none;
    border-radius: 8px;
    cursor: pointer;
}

.profile-item svg[b-e11gqy3cjc] {
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    color: var(--muted, #8a8a8a);
}

.profile-item:hover[b-e11gqy3cjc] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--fg, #ececec);
}

.profile-item:hover svg[b-e11gqy3cjc] {
    color: var(--accent, #c4b5fd);
}

.profile-divider[b-e11gqy3cjc] {
    border: 0;
    border-top: 1px solid var(--border);
    margin: 4px 4px;
}

.profile-form[b-e11gqy3cjc] {
    margin: 0;
}

/* ────────────────────────────────────────────────────────────────
   Collapsed mode — narrow icon rail.
   Hide all text and chevrons; keep icons and the avatar visible.
   Clicking a section header or quick-nav button still works:
   sections route through HandleXxxHeaderClick which expands first.
   ──────────────────────────────────────────────────────────────── */

.side-menu.collapsed[b-e11gqy3cjc] {
    width: 60px;
    flex: 0 0 60px;
    padding-left: 6px;
    padding-right: 6px;
}

.side-menu.collapsed .side-top[b-e11gqy3cjc] {
    flex-direction: column;
    gap: 6px;
    padding: 4px 0 10px;
}

/* Flip the collapse chevron to point right (means "expand"). */
.side-menu.collapsed .icon-btn svg[b-e11gqy3cjc] {
    transform: rotate(180deg);
}

/* Hide all text labels and chevrons. */
.side-menu.collapsed .brand-text[b-e11gqy3cjc],
.side-menu.collapsed .nav-label[b-e11gqy3cjc],
.side-menu.collapsed .section-label[b-e11gqy3cjc],
.side-menu.collapsed .chev[b-e11gqy3cjc],
.side-menu.collapsed .empty-hint[b-e11gqy3cjc],
.side-menu.collapsed .side-link[b-e11gqy3cjc],
.side-menu.collapsed .who[b-e11gqy3cjc] {
    display: none;
}

.side-menu.collapsed .brand-btn[b-e11gqy3cjc] {
    padding: 4px;
}

/* Center icons inside their buttons. */
.side-menu.collapsed .nav-item[b-e11gqy3cjc],
.side-menu.collapsed .side-item[b-e11gqy3cjc],
.side-menu.collapsed .section-header[b-e11gqy3cjc] {
    justify-content: center;
    padding: 10px 0;
    gap: 0;
}

/* In collapsed mode, sub-items inside a section would clutter the rail.
   Hide them — the section icon represents the whole section. */
.side-menu.collapsed .side-section .side-item[b-e11gqy3cjc] {
    display: none;
}

/* Footer: keep avatar centered. */
.side-menu.collapsed .side-footer[b-e11gqy3cjc] {
    justify-content: center;
    padding: 10px 0;
}

/* ── Phase 1C additions ─────────────────────────────────────────────── */

/* Org-namespace switcher chip (only renders when user has >1 namespace). */
.org-chip-wrap[b-e11gqy3cjc] {
    position: relative;
    padding: 0 8px 8px;
}

.org-chip[b-e11gqy3cjc] {
    width: 100%;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 7px 10px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    color: var(--fg, #ececec);
    border-radius: 8px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    text-align: left;
}

.org-chip:hover[b-e11gqy3cjc] { background: var(--bg-overlay); }
.org-chip.open[b-e11gqy3cjc]  { border-color: var(--accent-soft, #6d5fbe); }

.org-chip svg[b-e11gqy3cjc] {
    width: 14px;
    height: 14px;
    color: var(--muted, #8a8a8a);
    flex: 0 0 14px;
}

.org-chip-label[b-e11gqy3cjc] {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.org-chip-caret[b-e11gqy3cjc] {
    width: 12px;
    height: 12px;
    transition: transform 150ms ease;
}

.org-chip.open .org-chip-caret[b-e11gqy3cjc] { transform: rotate(180deg); }

.org-menu-backdrop[b-e11gqy3cjc] {
    position: fixed;
    inset: 0;
    z-index: 30;
}

.org-menu[b-e11gqy3cjc] {
    position: absolute;
    left: 8px;
    right: 8px;
    top: 100%;
    z-index: 31;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 4px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.4);
}

.org-menu-item[b-e11gqy3cjc] {
    width: 100%;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    background: transparent;
    border: 0;
    color: var(--fg, #ececec);
    border-radius: 6px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    text-align: left;
}

.org-menu-item:hover[b-e11gqy3cjc]  { background: rgba(255,255,255,0.05); }
.org-menu-item.active[b-e11gqy3cjc] { background: rgba(196,181,253,0.10); color: var(--accent, #c4b5fd); }

.org-menu-mark[b-e11gqy3cjc] { font-size: 14px; line-height: 1; }
.org-menu-name[b-e11gqy3cjc] { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.org-menu-tag[b-e11gqy3cjc]  {
    font-size: 10px;
    color: var(--muted, #8a8a8a);
    padding: 2px 6px;
    background: rgba(255,255,255,0.04);
    border-radius: 4px;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

/* Collapsed mode: hide the chip rather than chop it to icon — switching
   org is a deliberate action and isn't worth shrinking to a glyph. */
.side-menu.collapsed .org-chip-wrap[b-e11gqy3cjc] { display: none; }

/* Building-detail header (mode 2) ───────────────────────────────────── */

.building-back[b-e11gqy3cjc] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: transparent;
    border: 0;
    color: var(--muted, #8a8a8a);
    padding: 8px 12px;
    margin: 0 0 4px;
    cursor: pointer;
    font: inherit;
    font-size: 12px;
}

.building-back:hover[b-e11gqy3cjc] { color: var(--fg, #ececec); }
.building-back svg[b-e11gqy3cjc] { width: 14px; height: 14px; }

.building-header[b-e11gqy3cjc] {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 8px 8px 14px;
    border-bottom: 1px solid var(--border, #1f1f1f);
    margin: 0 0 8px;
}

/* Name + building icon → clickable link to the building Overview page. */
.building-name-link[b-e11gqy3cjc] {
    flex: 1 1 auto;
    min-width: 0;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
    padding: 4px 6px;
    border-radius: 8px;
    color: var(--fg, #ececec);
}

.building-name-link:hover[b-e11gqy3cjc] {
    background: var(--hover-overlay, rgba(255, 255, 255, 0.05));
}

.building-name-link svg[b-e11gqy3cjc] {
    width: 18px;
    height: 18px;
    color: var(--accent, #c4b5fd);
    flex: 0 0 18px;
}

.building-name[b-e11gqy3cjc] {
    font-weight: 600;
    font-size: 14px;
    color: var(--fg, #ececec);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Gear → same Overview page; an explicit "settings" affordance. */
.building-settings-btn[b-e11gqy3cjc] {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 8px;
    color: var(--muted, #8a8a8a);
    text-decoration: none;
}

.building-settings-btn:hover[b-e11gqy3cjc] {
    background: var(--hover-overlay, rgba(255, 255, 255, 0.05));
    color: var(--fg, #ececec);
}

.building-settings-btn svg[b-e11gqy3cjc] {
    width: 16px;
    height: 16px;
}

.building-nav[b-e11gqy3cjc] {
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 0 4px;
}

.building-nav .nav-item[b-e11gqy3cjc] {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 8px 10px;
    background: transparent;
    border: 0;
    color: var(--fg-dim, #d0d0d0);
    border-radius: 6px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    text-decoration: none;
}

.building-nav .nav-item:hover[b-e11gqy3cjc] { background: rgba(255,255,255,0.05); color: var(--fg, #ececec); }
.building-nav .nav-item.active[b-e11gqy3cjc] {
    background: rgba(196,181,253,0.10);
    color: var(--accent, #c4b5fd);
}

.building-nav .nav-item svg[b-e11gqy3cjc] { width: 16px; height: 16px; flex: 0 0 16px; color: currentColor; }

/* Collapsed mode in building-detail: keep icons, drop labels. */
.side-menu.collapsed .building-back span[b-e11gqy3cjc],
.side-menu.collapsed .building-name[b-e11gqy3cjc],
.side-menu.collapsed .building-nav .nav-label[b-e11gqy3cjc] { display: none; }

.side-menu.collapsed .building-nav .nav-item[b-e11gqy3cjc] { justify-content: center; padding: 10px 0; }
.side-menu.collapsed .building-header[b-e11gqy3cjc] { justify-content: center; padding: 8px 0 14px; }

/* Add-building form error ─────────────────────────────────────────── */
.add-error[b-e11gqy3cjc] {
    color: var(--danger);
    font-size: 12px;
    padding: 4px 6px;
}

/* The selected project type's plan — base cost + capability subscription. */
.add-plan[b-e11gqy3cjc] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 6px 8px;
    margin: 2px 0;
    border-radius: 6px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
}
.add-plan-line[b-e11gqy3cjc] {
    font-size: 12px;
    color: var(--fg-dim);
}
.add-plan-line strong[b-e11gqy3cjc] { color: var(--fg); font-weight: 600; }

/* Create-form specialist picker: a colour swatch of the chosen specialist
   beside the select (options can't carry their own swatch). */
.add-typerow[b-e11gqy3cjc] { display: flex; align-items: center; gap: 8px; }
.add-typedot[b-e11gqy3cjc] { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; }
.add-typeselect[b-e11gqy3cjc] { flex: 1 1 auto; min-width: 0; }

/* Shown in place of the name field when the owner isn't subscribed to the
   selected type — the create form is withheld until they subscribe. */
.add-locked[b-e11gqy3cjc] {
    font-size: 12px;
    color: var(--fg-dim);
    padding: 6px 8px;
    margin: 2px 0;
    border-radius: 6px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
}

/* ── Specialists picker + grouped/flat job list ─────────────────────── */
.spec-bar[b-e11gqy3cjc] { display: flex; align-items: center; gap: 6px; padding: 2px 6px 6px; }
.spec-select[b-e11gqy3cjc] {
    flex: 1 1 auto; min-width: 0; appearance: none;
    background: var(--bg-overlay); color: var(--fg, #ececec);
    border: 1px solid var(--border); border-radius: 7px;
    padding: 5px 8px; font: inherit; font-size: 13px; cursor: pointer;
}
/* Specialists ↔ Jobs segmented toggle */
.spec-toggle[b-e11gqy3cjc] {
    flex: 0 0 auto; display: inline-flex; align-items: stretch;
    border: 1px solid var(--border); border-radius: 8px; overflow: hidden;
}
.spec-seg[b-e11gqy3cjc] {
    appearance: none; border: 0; background: transparent; cursor: pointer;
    font: inherit; font-size: 12px; font-weight: 500; padding: 5px 10px;
    color: var(--muted, #8a8a8a);
}
.spec-seg + .spec-seg[b-e11gqy3cjc] { border-left: 1px solid var(--border); }
.spec-seg:hover[b-e11gqy3cjc] { color: var(--fg, #ececec); background: rgba(255,255,255,.06); }
.spec-seg.on[b-e11gqy3cjc] { color: #fff; background: var(--accent, #2050c8); }

/* group heading in the grouped view */
.spec-head[b-e11gqy3cjc] {
    display: flex; align-items: center; gap: 8px;
    padding: 8px 10px 3px; font-size: 11px; font-weight: 600;
    letter-spacing: .04em; text-transform: uppercase; color: var(--muted, #8a8a8a);
}
.spec-head .truncate[b-e11gqy3cjc] { min-width: 0; }
.spec-count[b-e11gqy3cjc] { margin-left: auto; font-weight: 500; opacity: .8; }
.side-item.indent[b-e11gqy3cjc] { padding-left: 16px; }

/* the specialist's colour swatch on a group header — the legend for the
   tinted donuts in the flat view */
.spec-dot[b-e11gqy3cjc] { flex: 0 0 auto; width: 8px; height: 8px; border-radius: 50%; }

/* info box shown when a specialist isn't hired — explains + links to billing */
.ws-info[b-e11gqy3cjc] {
    display: flex; align-items: flex-start; gap: 10px;
    margin: 8px 6px 4px; padding: 10px 11px; border-radius: 10px;
    background: var(--bg-overlay); border: 1px solid var(--border);
}
.ws-info-ic[b-e11gqy3cjc] { flex: 0 0 auto; width: 16px; height: 16px; margin-top: 1px; color: var(--accent, #7c9cff); }
.ws-info-body[b-e11gqy3cjc] { min-width: 0; }
.ws-info-title[b-e11gqy3cjc] { font-size: 12.5px; font-weight: 600; color: var(--fg, #ececec); }
.ws-info-text[b-e11gqy3cjc] { margin: 3px 0 6px; font-size: 12px; line-height: 1.4; color: var(--fg-dim, #b8b8b8); }
.ws-info-link[b-e11gqy3cjc] {
    display: inline-block; font-size: 12px; font-weight: 600;
    color: #fff; background: var(--accent, #2050c8);
    padding: 4px 10px; border-radius: 7px; text-decoration: none;
}
.ws-info-link:hover[b-e11gqy3cjc] { filter: brightness(1.08); }

/* Theme picker block inside the profile menu. Sits between the regular
   items and the divider above sign-out. Vertical label + horizontal trio. */
.profile-theme[b-e11gqy3cjc] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 10px 14px;
}

.profile-theme-label[b-e11gqy3cjc] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.6px;
    font-weight: 600;
}

/* The ThemePicker component is scoped CSS-isolated, but its outermost
   .theme-picker div is reachable via ::deep — let the picker stretch to fill
   the profile-theme block width. */
.profile-theme[b-e11gqy3cjc]  .theme-picker {
    align-self: stretch;
    justify-content: space-between;
}

.profile-theme[b-e11gqy3cjc]  .tp-opt {
    flex: 1;
    justify-content: center;
}

/* P3 - progress-donut project icons + pinned project chats */
.proj-donut[b-e11gqy3cjc] {
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
}

.side-item .proj-donut[b-e11gqy3cjc] {
    color: var(--accent, #c4b5fd);
}

.pinned-chat svg[b-e11gqy3cjc] {
    color: var(--accent, #c4b5fd);
}

/* ── Mobile: the rail becomes an off-canvas drawer ─────────────────────────
   On a phone a fixed 260px rail would eat the screen, so below the breakpoint
   the sidebar slides in over the content (toggled by the hamburger in
   AppLayout) instead of taking flow width. AppLayout renders the backdrop. */
@media (max-width: 768px) {
    .side-menu[b-e11gqy3cjc] {
        position: fixed;
        top: 0; bottom: 0; left: 0;
        width: 84vw; max-width: 320px;
        z-index: 1200;
        transform: translateX(-100%);
        transition: transform .22s ease;
        box-shadow: 22px 0 60px -30px rgba(0, 0, 0, .7);
    }
    .side-menu.mobile-open[b-e11gqy3cjc] { transform: none; }
    /* The desktop icon-collapse doesn't apply to the drawer — always full width. */
    .side-menu.collapsed[b-e11gqy3cjc] { width: 84vw; max-width: 320px; }

    /* Comfortable tap targets for the rail's small icon controls. */
    .icon-btn[b-e11gqy3cjc], .section-add[b-e11gqy3cjc], .building-settings-btn[b-e11gqy3cjc], .footer-download[b-e11gqy3cjc] {
        min-width: 40px; min-height: 40px;
    }
}
@media (max-width: 768px) and (prefers-reduced-motion: reduce) {
    .side-menu[b-e11gqy3cjc] { transition: none; }
}
/* _content/Buildessa/Components/Lisa/StatusSliver.razor.rz.scp.css */
/* One-line status sliver between the chat thread and the composer.
   Quiet by default, never demands attention — it's a "what's happening
   right now" affordance, not a banner. Hidden entirely when Lisa is
   idle (the component returns nothing in that state). */

.status-sliver[b-7viyo7eqlx] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 4px 10px;
    margin: 0 0 6px 0;
    border-radius: 999px;
    background: var(--bg-overlay);
    color: var(--fg-dim);
    font-size: 12px;
    width: max-content;
}

/* Status dot — colour codes the state without needing the user to read
   the label. Pulses for active states (thinking / writing / driving). */
.status-dot[b-7viyo7eqlx] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--muted);
    flex-shrink: 0;
}

.status-reading  .status-dot[b-7viyo7eqlx],
.status-thinking .status-dot[b-7viyo7eqlx],
.status-writing  .status-dot[b-7viyo7eqlx],
.status-driving  .status-dot[b-7viyo7eqlx] {
    background: var(--accent);
    animation: status-pulse-b-7viyo7eqlx 1.4s ease-in-out infinite;
}

.status-observing .status-dot[b-7viyo7eqlx] { background: var(--success); }
.status-stopped   .status-dot[b-7viyo7eqlx] { background: var(--warning); }

@keyframes status-pulse-b-7viyo7eqlx {
    0%, 100% { opacity: 1;   transform: scale(1); }
    50%      { opacity: 0.45; transform: scale(0.85); }
}

.status-text[b-7viyo7eqlx] {
    line-height: 1;
}

/* Phase 34t — live elapsed/tokens/cost counter while Lisa is working.
   Muted color + slightly smaller so it sits comfortably beside the
   status text without competing for attention. Tabular-nums prevents
   the digits from jiggling as they tick up. */
.status-meta[b-7viyo7eqlx] {
    color: var(--muted);
    font-size: 11px;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    opacity: 0.85;
}

/* Pairing indicator — appended after the status text when the chat is
   bound to a workstation. Read-only here; unpair lives in the composer
   chip so the pairing surfaces stay coherent. */
.status-sep[b-7viyo7eqlx] {
    color: var(--muted);
    opacity: 0.7;
}
.status-paired[b-7viyo7eqlx] {
    color: var(--success);
    font-weight: 500;
}

/* Pinned workstation currently unreachable — visible but muted; the
   pin-restore handler flips this to the green paired state on reconnect. */
.status-bound-offline[b-7viyo7eqlx] {
    color: var(--muted);
    font-weight: 500;
}

/* Workstation-working indicator — a direct @workstation command or BMS read is
   in flight. Mirrors Lisa's own working state with a small spinner so the user
   knows the workstation is on it (and a direct message didn't vanish). */
.status-ws-busy[b-7viyo7eqlx] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--accent);
    font-weight: 500;
}
.status-ws-spinner[b-7viyo7eqlx] {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    border: 1.5px solid var(--accent);
    border-top-color: transparent;
    animation: status-ws-spin-b-7viyo7eqlx 0.8s linear infinite;
    flex-shrink: 0;
}
@keyframes status-ws-spin-b-7viyo7eqlx {
    to { transform: rotate(360deg); }
}

/* Mute toggle — small bell icon that flips to muted when clicked.
   Only renders when paired (autointerject only fires from observations
   from a paired workstation). */
.status-mute[b-7viyo7eqlx] {
    appearance: none;
    background: transparent;
    border: 0;
    color: var(--muted);
    font: inherit;
    font-size: 13px;
    padding: 1px 4px;
    margin-left: 2px;
    border-radius: 999px;
    cursor: pointer;
    line-height: 1;
}
.status-mute:hover[b-7viyo7eqlx] {
    background: var(--hover-overlay);
    color: var(--fg);
}
.status-mute.muted[b-7viyo7eqlx] {
    color: var(--warning);
}

/* Small inline stop affordance. Appears when Lisa is actively talking
   or driving — the user shouldn't have to type something to interrupt. */
.status-stop[b-7viyo7eqlx] {
    appearance: none;
    background: transparent;
    border: 0;
    color: var(--fg-dim);
    font: inherit;
    font-size: 11.5px;
    padding: 2px 6px;
    margin-left: 4px;
    border-radius: 999px;
    cursor: pointer;
}
.status-stop:hover[b-7viyo7eqlx] {
    background: var(--hover-overlay);
    color: var(--danger);
}

/* Live pipeline narration — what Lisa is doing right now, with real
   progress counts. Quiet styling: it's a status, not an alert. */
.status-activity[b-7viyo7eqlx] {
    opacity: 0.75;
    font-style: italic;
    overflow-wrap: anywhere;
}
/* _content/Buildessa/Components/Lisa/StepTaskList.razor.rz.scp.css */
/* P7 — the step's to-do table. Reads as a worksheet, not a bulleted
   list: one line per task, a verdict you can change in one click, and a
   note tucked behind a button so the list stays scannable. */

.pt-wrap[b-spibaghv7j] {
    margin: 14px 0 4px;
}

.pt-head[b-spibaghv7j] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 6px;
}

.pt-head h3[b-spibaghv7j] {
    margin: 0;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--muted);
}

.pt-count[b-spibaghv7j] {
    font-size: 11px;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    cursor: help;
}

.pt-count.all-clear[b-spibaghv7j] {
    color: var(--success);
    font-weight: 600;
}

.pt-empty[b-spibaghv7j] {
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--muted);
    padding: 8px 0;
}

/* ── The table ───────────────────────────────────────────────────── */

.pt-table[b-spibaghv7j] {
    width: 100%;
    border-collapse: collapse;
    table-layout: auto;
}

.pt-row > td[b-spibaghv7j] {
    padding: 5px 6px;
    border-top: 1px solid var(--border);
    vertical-align: middle;
}

.pt-row:first-child > td[b-spibaghv7j] {
    border-top: none;
}

.pt-status-cell[b-spibaghv7j] { width: 1%; white-space: nowrap; }
.pt-actions-cell[b-spibaghv7j] { width: 1%; white-space: nowrap; text-align: right; }

.pt-text-cell[b-spibaghv7j] {
    font-size: 13px;
    line-height: 1.45;
    /* A pasted URL or an unbroken spec reference must wrap, not push the
       table past the card and scroll the whole page sideways. */
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Blazor CSS isolation scopes .proj-btn to ProjectHome, and a child
   component never inherits its parent's scope attribute — the buttons
   here rendered as bare OS grey. These are this component's own. */
.pt-btn[b-spibaghv7j] {
    font: inherit;
    font-size: 12.5px;
    line-height: 1.2;
    padding: 6px 12px;
    border-radius: 6px;
    border: 1px solid var(--border);
    background: var(--bg-elevated);
    color: var(--fg);
    cursor: pointer;
    white-space: nowrap;
}

.pt-btn:hover:not(:disabled)[b-spibaghv7j] { border-color: var(--border-strong); background: var(--hover-overlay); }
.pt-btn:disabled[b-spibaghv7j] { opacity: .5; cursor: default; }

.pt-btn-primary[b-spibaghv7j] {
    background: var(--accent);
    border-color: var(--accent);
    color: var(--accent-fg);
    font-weight: 600;
}

.pt-btn-primary:hover:not(:disabled)[b-spibaghv7j] { filter: brightness(1.08); background: var(--accent); }

.pt-btn:focus-visible[b-spibaghv7j],
.pt-icon:focus-visible[b-spibaghv7j],
.pt-status:focus-visible[b-spibaghv7j],
.pt-add-input:focus-visible[b-spibaghv7j],
.pt-modal-input:focus-visible[b-spibaghv7j],
.pt-modal-close:focus-visible[b-spibaghv7j] {
    outline: 2px solid var(--accent);
    outline-offset: 1px;
    opacity: 1;
}

/* A settled task recedes — what's left to do should be what catches the
   eye. It stays legible, though: this is a record, not a graveyard. */
.pt-row.pt-done .pt-text[b-spibaghv7j] {
    text-decoration: line-through;
    text-decoration-thickness: 1px;
    opacity: .62;
}

.pt-row.pt-skipped .pt-text[b-spibaghv7j],
.pt-row.pt-na .pt-text[b-spibaghv7j] {
    opacity: .62;
}

.pt-badge[b-spibaghv7j] {
    margin-left: 7px;
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--accent);
    border: 1px solid currentColor;
    border-radius: 999px;
    padding: 1px 5px;
    opacity: .75;
    vertical-align: 1px;
}

/* ── The verdict control ─────────────────────────────────────────── */

.pt-status[b-spibaghv7j] {
    font: inherit;
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.2;
    padding: 3px 20px 3px 8px;
    min-width: 84px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background-color: var(--hover-overlay);
    color: var(--fg);
    cursor: pointer;
    /* Native arrow varies wildly across platforms at this size; draw one. */
    appearance: none;
    background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
                      linear-gradient(135deg, currentColor 50%, transparent 50%);
    background-position: calc(100% - 11px) 52%, calc(100% - 7px) 52%;
    background-size: 4px 4px, 4px 4px;
    background-repeat: no-repeat;
}

.pt-status:disabled[b-spibaghv7j] { cursor: default; opacity: .7; }

/* The dropdown list is painted by the OS, which inherits the control's
   colours — without this the open list is unreadable on the dark theme. */
.pt-status option[b-spibaghv7j] {
    background: var(--bg-elevated);
    color: var(--fg);
    font-weight: 400;
}

.pt-status.pts-done[b-spibaghv7j] {
    color: var(--success);
    border-color: currentColor;
    background-color: color-mix(in srgb, currentColor 10%, transparent);
}

.pt-status.pts-skipped[b-spibaghv7j],
.pt-status.pts-na[b-spibaghv7j] {
    color: var(--muted);
    background-color: transparent;
}

.pt-status.pts-open[b-spibaghv7j] {
    color: var(--accent);
    border-color: currentColor;
}

/* ── Row buttons ─────────────────────────────────────────────────── */

.pt-icon[b-spibaghv7j] {
    border: 1px solid transparent;
    background: transparent;
    color: var(--muted);
    border-radius: 6px;
    cursor: pointer;
    font-size: 12px;
    line-height: 1;
    padding: 4px 6px;
}

.pt-icon:hover[b-spibaghv7j] {
    background: var(--hover-overlay);
    border-color: var(--border);
}

/* A note exists — say so without spending a column on it. */
.pt-icon.has-note[b-spibaghv7j] {
    color: var(--accent);
    opacity: 1;
}

/* .55 was below the 3:1 non-text contrast floor against the card. It
   still recedes next to a row that HAS a note; hover brings it up. */
.pt-icon:not(.has-note)[b-spibaghv7j] {
    opacity: .8;
    font-size: 13px;
}

.pt-row:hover .pt-icon[b-spibaghv7j] { opacity: 1; }

.pt-del:hover[b-spibaghv7j] {
    color: var(--danger);
    border-color: currentColor;
}

/* ── Add your own ────────────────────────────────────────────────── */

.pt-add[b-spibaghv7j] {
    display: flex;
    gap: 6px;
    margin-top: 8px;
}

.pt-add-input[b-spibaghv7j] {
    flex: 1 1 auto;
    min-width: 0;
    font: inherit;
    font-size: 12.5px;
    padding: 5px 9px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--bg-input);
    color: var(--fg);
}

.pt-add-input[b-spibaghv7j]::placeholder { color: var(--muted); opacity: .8; }

.pt-error[b-spibaghv7j] {
    margin-top: 6px;
    font-size: 12px;
    color: var(--danger);
}

/* ── The comment popup ───────────────────────────────────────────── */

.pt-backdrop[b-spibaghv7j] {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .38);
    z-index: 1000;
}

.pt-modal[b-spibaghv7j] {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: min(460px, calc(100vw - 32px));
    max-height: calc(100vh - 48px);
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 16px 18px;
    background: var(--bg-elevated);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 10px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, .3);
    z-index: 1001;
}

.pt-modal-head[b-spibaghv7j] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
}

.pt-modal-title[b-spibaghv7j] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--muted);
}

.pt-modal-sub[b-spibaghv7j] {
    margin-top: 3px;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.35;
    text-wrap: balance;
}

.pt-modal-close[b-spibaghv7j] {
    border: none;
    background: transparent;
    color: var(--muted);
    font-size: 20px;
    line-height: 1;
    cursor: pointer;
    padding: 0 2px;
}

/* Only the BODY scrolls, so Save and Cancel can never be pushed off a
   short viewport with no way to reach them. */
.pt-modal-body[b-spibaghv7j] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-height: 0;
    overflow-y: auto;
}

.pt-modal-input[b-spibaghv7j] {
    font: inherit;
    font-size: 13px;
    line-height: 1.5;
    padding: 9px 11px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--bg-input);
    color: var(--fg);
    resize: vertical;
    min-height: 92px;
}

.pt-modal-foot[b-spibaghv7j] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
}

.pt-modal-hint[b-spibaghv7j] {
    margin-right: auto;
    font-size: 11px;
    color: var(--muted);
}

@media (prefers-reduced-motion: reduce) {
    .pt-icon[b-spibaghv7j], .pt-status[b-spibaghv7j] { transition: none; }
}

/* P10 — a task the readiness check raised, as opposed to one off the map's
   checklist or one the team typed. Warning-toned: it exists because
   something is missing. */
.pt-badge.pt-from-check[b-spibaghv7j] { color: var(--warning); }

/* ══ P13 — assignment: who owns a task and when it's due ══════════════ */

/* The row's control. It carries state, so it is wider than a bare icon
   button: faces when someone owns it, a date when one is set. */
.pt-assign[b-spibaghv7j] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    max-width: 190px;
}

.pt-assign.has-owner[b-spibaghv7j] { color: var(--fg-dim); opacity: 1; }

/* Overlapping faces, the same recipe the team rooms use for a roster —
   one visual language for "these people" across the app. ::deep because
   .ib belongs to InitialsBadge and carries ITS scope attribute, not ours. */
.pt-avstack[b-spibaghv7j] { display: inline-flex; align-items: center; }

.pt-avstack[b-spibaghv7j]  .ib {
    width: 20px;
    height: 20px;
    flex-basis: 20px;
    font-size: 9.5px;
    margin-left: -6px;
    box-shadow: 0 0 0 2px var(--bg-elevated);
}

.pt-avstack[b-spibaghv7j]  .ib:first-child { margin-left: 0; }

.pt-avmore[b-spibaghv7j] {
    font-size: 10px;
    font-weight: 700;
    color: var(--muted);
    margin-left: 3px;
}

.pt-due[b-spibaghv7j] {
    font-size: 10.5px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

/* Open, dated, and the date has gone. The one thing in the row allowed
   to shout — colour AND weight, because colour alone is not a signal. */
.pt-assign.is-late[b-spibaghv7j] { color: var(--danger); opacity: 1; }
.pt-assign.is-late .pt-due[b-spibaghv7j] { font-weight: 700; }

/* ── The popup ─────────────────────────────────────────────────────── */

/* Wider than the comment popup: it holds a roster, a date and a message
   box. A modifier, so the shared .pt-modal rule stays one rule. */
.pt-modal.pt-modal-wide[b-spibaghv7j] { width: min(540px, calc(100vw - 32px)); }

.pt-field[b-spibaghv7j] {
    border: none;
    border-top: 1px solid var(--border);
    margin: 0;
    padding: 12px 0 0;
    /* A fieldset defaults to min-inline-size:min-content, which lets a
       textarea's intrinsic `cols` width win instead of the modal's. That
       rendered the message box about 180px wide inside a 540px popup
       (observed live). */
    min-inline-size: 0;
}

.pt-field:first-of-type[b-spibaghv7j] { border-top: none; padding-top: 0; }

.pt-field > legend[b-spibaghv7j] {
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--muted);
    padding: 0;
    margin-bottom: 8px;
}

.pt-hint[b-spibaghv7j] {
    font-size: 12px;
    line-height: 1.5;
    color: var(--muted);
    margin: 6px 0 0;
}

.pt-people[b-spibaghv7j] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.pt-person[b-spibaghv7j] {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 5px 6px;
    border-radius: 6px;
    cursor: pointer;
}

.pt-person:hover[b-spibaghv7j] { background: var(--hover-overlay); }
.pt-person input[type="checkbox"][b-spibaghv7j] { flex: 0 0 auto; cursor: pointer; }

/* The name column takes the slack so the role stays pinned right. */
.pt-person-name[b-spibaghv7j] {
    display: flex;
    flex-direction: column;
    min-width: 0;
    flex: 1 1 auto;
    line-height: 1.3;
}

.pt-person-name > b[b-spibaghv7j] { font-size: 13px; }

.pt-person-mail[b-spibaghv7j] {
    font-size: 11px;
    color: var(--muted);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pt-person-role[b-spibaghv7j] {
    flex: 0 0 auto;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--muted);
}

.pt-duerow[b-spibaghv7j] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.pt-date[b-spibaghv7j] {
    font: inherit;
    font-size: 13px;
    padding: 6px 8px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--bg-input);
    color: var(--fg);
    color-scheme: light dark;   /* so the native picker matches the theme */
}

.pt-date:focus-visible[b-spibaghv7j] { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

.pt-duenote[b-spibaghv7j] { font-size: 12px; color: var(--muted); }
.pt-duenote.late[b-spibaghv7j] { color: var(--danger); font-weight: 600; }

.pt-nudge-input[b-spibaghv7j] {
    display: block;
    width: 100%;
    box-sizing: border-box;
    min-height: 68px;
}

.pt-nudge-foot[b-spibaghv7j] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 8px;
}

.pt-sendnote[b-spibaghv7j] { font-size: 12px; line-height: 1.45; }
.pt-sendnote.ok[b-spibaghv7j] { color: var(--success); }
.pt-sendnote.bad[b-spibaghv7j] { color: var(--danger); }
/* _content/Buildessa/Components/Lisa/TeamChatView.razor.rz.scp.css */
/* P4 - the MS-Teams-style room. Scoped to TeamChatView. */

.team-room[b-ixrl4yt172] {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 4px 0 12px;
}

/* ── Header: room identity + people ─────────────────────── */
.team-head[b-ixrl4yt172] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 2px 12px;
    border-bottom: 1px solid var(--border, #e5e3f0);
    position: sticky;
    top: 0;
    background: var(--bg, #ffffff);
    z-index: 2;
}

.team-room-name[b-ixrl4yt172] {
    font-weight: 650;
    font-size: 15px;
}

.team-room-sub[b-ixrl4yt172] {
    color: var(--muted, #8a8a8a);
    font-size: 12.5px;
}

.team-head-people[b-ixrl4yt172] {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 10px;
}

.team-avstack[b-ixrl4yt172] {
    display: flex;
}

.team-avstack[b-ixrl4yt172]  .ib {
    margin-left: -6px;
    box-shadow: 0 0 0 2px var(--bg, #ffffff);
    width: 26px;
    height: 26px;
    flex-basis: 26px;
    font-size: 11px;
}

.team-add-btn[b-ixrl4yt172] {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--accent, #6d5fbe);
    border: 1px solid var(--border, #e5e3f0);
    border-radius: 6px;
    padding: 5px 10px;
    background: none;
    cursor: pointer;
    white-space: nowrap;
}

.team-add-btn:hover[b-ixrl4yt172] { border-color: var(--accent, #6d5fbe); }

.team-add-row[b-ixrl4yt172] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

.team-add-input[b-ixrl4yt172] {
    flex: 1 1 220px;
    max-width: 320px;
    padding: 7px 10px;
    border: 1px solid var(--border, #e5e3f0);
    border-radius: 6px;
    background: var(--bg-elevated, #fafafa);
    color: var(--fg, inherit);
    font-size: 13.5px;
}

.team-add-confirm[b-ixrl4yt172] {
    font-size: 13px;
    font-weight: 600;
    color: #fff;
    background: var(--accent, #6d5fbe);
    border: none;
    border-radius: 6px;
    padding: 7px 14px;
    cursor: pointer;
}

.team-add-confirm:disabled[b-ixrl4yt172] { opacity: 0.5; cursor: default; }

.team-add-error[b-ixrl4yt172] {
    flex-basis: 100%;
    color: #c04545;
    font-size: 12.5px;
}

/* ── Day dividers ───────────────────────────────────────── */
.team-day[b-ixrl4yt172] {
    display: flex;
    align-items: center;
    gap: 12px;
    color: var(--muted, #8a8a8a);
    font-size: 12px;
    font-weight: 600;
    margin: 6px 0 2px;
}

.team-day[b-ixrl4yt172]::before,
.team-day[b-ixrl4yt172]::after {
    content: "";
    flex: 1;
    height: 1px;
    background: var(--border, #e5e3f0);
}

/* ── Message groups ─────────────────────────────────────── */
.team-grp[b-ixrl4yt172] {
    display: flex;
    gap: 10px;
}

.team-col[b-ixrl4yt172] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
    max-width: 78%;
}

.team-grp.own[b-ixrl4yt172] {
    justify-content: flex-end;
}

.team-grp.own .team-col[b-ixrl4yt172] {
    align-items: flex-end;
}

.team-byline[b-ixrl4yt172] {
    font-size: 12.5px;
    color: var(--muted, #8a8a8a);
}

.team-byline b[b-ixrl4yt172] {
    color: var(--fg, inherit);
    font-weight: 650;
}

.team-bubble[b-ixrl4yt172] {
    background: var(--bg-overlay, #f0eff6);
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 14px;
    line-height: 1.5;
    width: fit-content;
    max-width: 100%;
    white-space: pre-line;
    overflow-wrap: anywhere;
}

.team-grp.own .team-bubble[b-ixrl4yt172] {
    background: var(--accent-soft, #e6e0fa);
}

.team-grp.lisa .team-bubble[b-ixrl4yt172] {
    white-space: normal;   /* markdown body manages its own flow */
    border-left: 3px solid var(--accent, #c4b5fd);
}

/* Markdown inside Lisa's bubbles — compact versions of the chat rules. */
.team-bubble[b-ixrl4yt172]  p { margin: 0 0 8px; }
.team-bubble[b-ixrl4yt172]  p:last-child { margin-bottom: 0; }
.team-bubble[b-ixrl4yt172]  ul, .team-bubble[b-ixrl4yt172]  ol { margin: 4px 0; padding-left: 20px; }
.team-bubble[b-ixrl4yt172]  code {
    background: rgba(120, 110, 190, 0.12);
    border-radius: 4px;
    padding: 1px 4px;
    font-size: 0.9em;
}
.team-bubble[b-ixrl4yt172]  pre {
    overflow-x: auto;
    background: rgba(120, 110, 190, 0.08);
    border-radius: 6px;
    padding: 8px 10px;
}
.team-bubble[b-ixrl4yt172]  a { color: var(--accent, #6d5fbe); }
.team-bubble[b-ixrl4yt172]  table { border-collapse: collapse; }
.team-bubble[b-ixrl4yt172]  td, .team-bubble[b-ixrl4yt172]  th {
    border: 1px solid var(--border, #e5e3f0);
    padding: 3px 8px;
}

/* Typing indicator (Lisa streaming, nothing written yet). */
.team-typing[b-ixrl4yt172] { display: inline-flex; gap: 4px; padding: 4px 2px; }
.team-typing .dot[b-ixrl4yt172] {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--muted, #8a8a8a);
    animation: team-typing-bounce-b-ixrl4yt172 1.2s infinite ease-in-out;
}
.team-typing .dot:nth-child(2)[b-ixrl4yt172] { animation-delay: 0.15s; }
.team-typing .dot:nth-child(3)[b-ixrl4yt172] { animation-delay: 0.3s; }

@keyframes team-typing-bounce-b-ixrl4yt172 {
    0%, 60%, 100% { transform: translateY(0); opacity: 0.5; }
    30% { transform: translateY(-3px); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
    .team-typing .dot[b-ixrl4yt172] { animation: none; }
}

.team-empty[b-ixrl4yt172] {
    color: var(--muted, #8a8a8a);
    font-size: 14px;
    padding: 28px 8px;
    text-align: center;
}

/* P4 - block-tag chip above a bubble ("Discuss with team" origin). */
.team-blocktag[b-ixrl4yt172] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11.5px;
    font-weight: 650;
    color: var(--accent, #6d5fbe);
    background: var(--accent-soft, #ece9fb);
    border-radius: 20px;
    padding: 2px 10px;
    width: fit-content;
}

/* P4b - click-to-rename the room name */
.team-room-name.renamable[b-ixrl4yt172] {
    background: none;
    border: none;
    padding: 0;
    font: inherit;
    font-weight: 650;
    font-size: 15px;
    color: inherit;
    cursor: text;
    text-align: left;
    border-radius: 4px;
}

.team-room-name.renamable:hover[b-ixrl4yt172] {
    background: var(--bg-overlay, #f0eff6);
    box-shadow: 0 0 0 4px var(--bg-overlay, #f0eff6);
}

.team-rename-input[b-ixrl4yt172] {
    font: inherit;
    font-weight: 650;
    font-size: 15px;
    color: var(--fg, inherit);
    background: var(--bg-elevated, #fafafa);
    border: 1px solid var(--accent, #6d5fbe);
    border-radius: 5px;
    padding: 1px 6px;
    max-width: 260px;
}

.team-rename-row[b-ixrl4yt172] {
    display: flex;
    align-items: center;
    gap: 6px;
}

.team-rename-ok[b-ixrl4yt172],
.team-rename-cancel[b-ixrl4yt172] {
    font-size: 12px;
    font-weight: 600;
    border-radius: 5px;
    padding: 4px 9px;
    cursor: pointer;
    border: 1px solid var(--border, #e5e3f0);
    background: none;
    color: var(--muted, #8a8a8a);
}

.team-rename-ok[b-ixrl4yt172] {
    color: #fff;
    background: var(--accent, #6d5fbe);
    border-color: transparent;
}

.team-rename-ok:disabled[b-ixrl4yt172] { opacity: 0.5; cursor: default; }
.team-rename-cancel:hover[b-ixrl4yt172] { color: var(--fg, inherit); }
/* _content/Buildessa/Components/Lisa/TicketComposer.razor.rz.scp.css */
/* Ticket builder — fills the Lisa panel interior as a focused form overlay. */
.tk[b-vm9y6gytds] {
    position: absolute; inset: 0; z-index: 5;
    display: flex; flex-direction: column; gap: 12px; padding: 14px;
    overflow-y: auto;
    background: var(--bg-elevated, #16161f); color: var(--fg, #ececf3);
    animation: tk-in-b-vm9y6gytds .14s ease;
}
@keyframes tk-in-b-vm9y6gytds { from { opacity: .5; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .tk[b-vm9y6gytds] { animation: none; } }

.tk-hd[b-vm9y6gytds] { display: flex; align-items: center; gap: 10px; }
.tk-hd-t[b-vm9y6gytds] { font-weight: 700; font-size: .98rem; flex: 1; }
.tk-x[b-vm9y6gytds] {
    background: transparent; border: 0; color: var(--muted, #9797ab); cursor: pointer;
    font-size: 1rem; line-height: 1; padding: 6px; border-radius: 8px;
}
.tk-x:hover[b-vm9y6gytds] { color: var(--fg, #ececf3); background: color-mix(in srgb, var(--fg, #ececf3) 8%, transparent); }

/* Kind picker */
.tk-kinds[b-vm9y6gytds] { display: flex; gap: 7px; }
.tk-kind[b-vm9y6gytds] {
    flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    font: inherit; font-size: .82rem; font-weight: 600; cursor: pointer;
    padding: 8px 6px; border-radius: 10px; border: 1px solid var(--border, #2a2a35);
    background: var(--bg, #0e0e14); color: var(--fg, #ececf3);
    transition: border-color .12s ease, background .12s ease;
}
.tk-kind-ic[b-vm9y6gytds] { font-size: .95rem; }
.tk-kind:hover:not(:disabled)[b-vm9y6gytds] { border-color: color-mix(in srgb, var(--accent, #6366f1) 45%, var(--border, #2a2a35)); }
.tk-kind.on[b-vm9y6gytds] {
    border-color: transparent; color: #fff;
    background: var(--accent, #6366f1);
}
.tk-kind:disabled[b-vm9y6gytds] { opacity: .55; cursor: default; }

/* Text + dictation */
.tk-field[b-vm9y6gytds] { position: relative; }
.tk-text[b-vm9y6gytds] {
    width: 100%; box-sizing: border-box; resize: vertical; min-height: 84px;
    font: inherit; font-size: .9rem; line-height: 1.5; color: var(--fg, #ececf3);
    background: var(--bg, #0e0e14); border: 1px solid var(--border, #2a2a35);
    border-radius: 10px; padding: 10px 40px 10px 12px;
}
.tk-text:focus[b-vm9y6gytds] { outline: none; border-color: var(--accent, #6366f1); }
.tk-mic[b-vm9y6gytds] {
    position: absolute; top: 7px; right: 7px; width: 30px; height: 30px; border-radius: 8px; cursor: pointer;
    background: transparent; color: var(--muted, #9797ab); border: 1px solid var(--border, #2a2a35);
    font-size: .9rem; line-height: 1;
}
.tk-mic:hover:not(:disabled)[b-vm9y6gytds] { color: var(--fg, #ececf3); }
.tk-mic.on[b-vm9y6gytds] { color: #fff; background: var(--accent, #6366f1); border-color: transparent; animation: tk-pulse-b-vm9y6gytds 1.1s infinite; }
.tk-mic:disabled[b-vm9y6gytds] { opacity: .5; cursor: default; }
@keyframes tk-pulse-b-vm9y6gytds { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }
@media (prefers-reduced-motion: reduce) { .tk-mic.on[b-vm9y6gytds] { animation: none; } }

/* Attach */
.tk-attach[b-vm9y6gytds] { display: flex; flex-direction: column; gap: 8px; }
.tk-attach-lbl[b-vm9y6gytds] { font-size: .74rem; color: var(--muted, #9797ab); font-weight: 600; }
.tk-attach-btns[b-vm9y6gytds] { display: flex; flex-wrap: wrap; gap: 7px; }
.tk-att[b-vm9y6gytds] {
    flex: 1 1 auto; font: inherit; font-size: .8rem; font-weight: 600; cursor: pointer;
    padding: 8px 10px; border-radius: 9px; border: 1px solid var(--border, #2a2a35);
    background: color-mix(in srgb, var(--accent, #6366f1) 8%, transparent); color: var(--fg, #ececf3);
    white-space: nowrap;
}
.tk-att:hover:not(:disabled)[b-vm9y6gytds] { background: color-mix(in srgb, var(--accent, #6366f1) 16%, transparent); }
.tk-att:disabled[b-vm9y6gytds] { opacity: .55; cursor: default; }
.tk-note[b-vm9y6gytds] { font-size: .74rem; color: var(--muted, #9797ab); line-height: 1.4; }

/* Attached pictures — a small thumbnail grid, each with edit/remove. */
.tk-shots[b-vm9y6gytds] { display: grid; grid-template-columns: repeat(auto-fill, minmax(88px, 1fr)); gap: 8px; }
.tk-shot-item[b-vm9y6gytds] {
    position: relative; border-radius: 10px; overflow: hidden;
    border: 1px solid var(--border, #2a2a35); background: var(--bg, #0e0e14);
}
.tk-shot-thumb[b-vm9y6gytds] { display: block; width: 100%; height: 72px; object-fit: cover; }
.tk-shot-generic[b-vm9y6gytds] { display: grid; place-items: center; color: var(--muted, #9797ab); font-size: 1.1rem; }
.tk-shot-item-actions[b-vm9y6gytds] {
    position: absolute; top: 3px; right: 3px; display: inline-flex; gap: 3px;
}
.tk-mini[b-vm9y6gytds] {
    width: 22px; height: 22px; border-radius: 6px; cursor: pointer; line-height: 1; font-size: .72rem;
    border: 0; color: #fff; background: rgba(12, 10, 30, .66);
}
.tk-mini:hover:not(:disabled)[b-vm9y6gytds] { background: rgba(12, 10, 30, .88); }
.tk-mini:disabled[b-vm9y6gytds] { opacity: .5; cursor: default; }

/* Footer */
.tk-ft[b-vm9y6gytds] { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 4px; flex-wrap: wrap; }
.tk-error[b-vm9y6gytds] {
    min-width: 100%; font-size: .8rem; line-height: 1.4; font-weight: 600;
    color: #ff8a94; padding: 8px 10px; border-radius: 8px;
    background: color-mix(in srgb, #ff3b3b 12%, transparent);
    border: 1px solid color-mix(in srgb, #ff3b3b 35%, transparent);
}
.tk-privacy[b-vm9y6gytds] { flex: 1; font-size: .7rem; color: var(--muted, #9797ab); min-width: 100%; }
.tk-btn[b-vm9y6gytds] {
    font: inherit; font-size: .82rem; font-weight: 600; cursor: pointer;
    padding: 8px 14px; border-radius: 9px; border: 1px solid var(--border, #2a2a35);
    background: var(--bg, #0e0e14); color: var(--fg, #ececf3);
}
.tk-btn:hover:not(:disabled)[b-vm9y6gytds] { border-color: color-mix(in srgb, var(--accent, #6366f1) 45%, var(--border, #2a2a35)); }
.tk-btn.primary[b-vm9y6gytds] { background: var(--accent, #6366f1); color: #fff; border-color: transparent; }
.tk-btn.primary:hover:not(:disabled)[b-vm9y6gytds] { filter: brightness(1.06); }
.tk-btn.ghost[b-vm9y6gytds] { background: transparent; color: var(--muted, #9797ab); }
.tk-btn:disabled[b-vm9y6gytds] { opacity: .5; cursor: default; }

/* Touch polish — the edit/remove chips on each thumbnail are 22px, below a
   comfortable tap target, so grow them on a coarse pointer. */
@media (pointer: coarse) {
    .tk-mini[b-vm9y6gytds] { width: 30px; height: 30px; font-size: .82rem; }
    .tk-shot-item-actions[b-vm9y6gytds] { gap: 5px; }
}

/* Sent confirmation */
.tk-done[b-vm9y6gytds] { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; text-align: center; padding: 24px 14px; }
.tk-done-tick[b-vm9y6gytds] {
    width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center; font-size: 1.5rem; color: #fff;
    background: #2f9268;
}
.tk-done-t[b-vm9y6gytds] { font-weight: 640; font-size: .95rem; }
.tk-done-note[b-vm9y6gytds] { font-size: .78rem; color: var(--muted, #9797ab); }
/* _content/Buildessa/Components/Lisa/UsageSnapshot.razor.rz.scp.css */
/* First-boot usage snapshot — a quiet, centered strip under the empty-chat hero.
   Uses the global theme tokens so it flips with light/dark automatically. */
.usnap[b-piq2zoe1qp] {
    margin: 18px auto 0;
    max-width: 540px;
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    animation: usnap-in-b-piq2zoe1qp .25s ease;
}
@keyframes usnap-in-b-piq2zoe1qp { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .usnap[b-piq2zoe1qp] { animation: none; } }

.usnap-eyebrow[b-piq2zoe1qp] {
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .07em;
    color: var(--muted, #8a8a8a);
}

/* One clean row of four — a fixed 4-col grid so they line up and shrink together
   instead of wrapping 3 + 1. Drops to 2×2 only on a narrow screen. */
.usnap-row[b-piq2zoe1qp] {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px;
    width: 100%;
}
@media (max-width: 520px) {
    .usnap-row[b-piq2zoe1qp] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.usnap-tile[b-piq2zoe1qp] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    padding: 10px 6px;
    border-radius: 10px;
    background: var(--bg-elevated, #161616);
    border: 1px solid var(--border, #2a2a2a);
}

.usnap-num[b-piq2zoe1qp] {
    font-size: 1.3rem;
    font-weight: 700;
    line-height: 1.1;
    color: var(--fg, #ececec);
    font-variant-numeric: tabular-nums;
}

.usnap-label[b-piq2zoe1qp] {
    font-size: .62rem;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: var(--muted, #8a8a8a);
    text-align: center;
    white-space: nowrap;
}
/* _content/Buildessa/Components/Lisa/WorkDirChip.razor.rz.scp.css */
/* Working-directory affordance — lives INSIDE the status sliver next to
   "Watching · <PC>" (field ask), so the trigger is text-scale, not a
   composer pill. The popover keeps the full picker + remote browser. */

.wd[b-zxdzzeyeah] {
    position: relative;
    display: inline-flex;
    align-items: center;
}

.wd-trigger[b-zxdzzeyeah] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 1px 6px;
    background: transparent;
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--fg-dim);
    font: inherit;
    font-size: 12px;
    line-height: 1.3;
    cursor: pointer;
    max-width: 280px;
    transition: background 120ms ease, border-color 120ms ease;
}

.wd-trigger:hover[b-zxdzzeyeah] {
    background: rgba(255, 255, 255, 0.06);
    border-color: var(--border);
    color: var(--fg);
}

.wd.open .wd-trigger[b-zxdzzeyeah] {
    background: rgba(196, 181, 253, 0.08);
    border-color: var(--accent-soft);
    color: var(--fg);
}

/* A local work folder is engaged — same "live" green the sliver's
   paired suffix uses, so the two read as one statement. */
.wd-trigger.local[b-zxdzzeyeah] {
    color: var(--success);
}
.wd-trigger.local svg[b-zxdzzeyeah] {
    color: var(--success);
}

.wd-trigger svg[b-zxdzzeyeah] {
    width: 12px;
    height: 12px;
    flex: 0 0 12px;
    color: var(--muted);
}

.wd-label[b-zxdzzeyeah] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    direction: rtl;      /* long paths: keep the tail (deepest folder) visible */
    text-align: left;
}

/* Popover ────────────────────────────────────────────────────────── */

.wd-backdrop[b-zxdzzeyeah] {
    position: fixed;
    inset: 0;
    z-index: 30;
    background: transparent;
}

.wd-popover[b-zxdzzeyeah] {
    position: absolute;
    bottom: calc(100% + 6px);
    left: 0;
    z-index: 31;
    min-width: 300px;
    max-width: 380px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 6px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.wd-popover-head[b-zxdzzeyeah] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.6px;
    padding: 6px 10px 4px;
}

.wd-option[b-zxdzzeyeah] {
    width: 100%;
    display: inline-flex;
    align-items: flex-start;
    gap: 8px;
    padding: 8px 10px;
    background: transparent;
    border: 0;
    color: var(--fg);
    border-radius: 6px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    text-align: left;
}
.wd-option:hover[b-zxdzzeyeah] { background: rgba(255, 255, 255, 0.05); }
.wd-option.active[b-zxdzzeyeah] { background: rgba(140, 220, 170, 0.07); }

.wd-radio[b-zxdzzeyeah] {
    flex: 0 0 auto;
    color: var(--muted);
    line-height: 1.3;
}
.wd-option.active .wd-radio[b-zxdzzeyeah] { color: var(--success); }

.wd-option-body[b-zxdzzeyeah] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.wd-option-body strong[b-zxdzzeyeah] {
    font-size: 13px;
    font-weight: 500;
}

.wd-option-body small[b-zxdzzeyeah] {
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
    overflow-wrap: anywhere;
}

.wd-browse[b-zxdzzeyeah] {
    padding: 0 6px 6px;
}

.wd-hint[b-zxdzzeyeah] {
    font-size: 11px;
    color: var(--muted);
    padding: 4px 10px 8px;
}

.wd-status[b-zxdzzeyeah] {
    font-size: 11px;
    color: var(--warning, #e9c46a);
    padding: 2px 10px 8px;
}
/* _content/Buildessa/Components/Lisa/WorkList.razor.rz.scp.css */
/* §16 — the merged Work list (issues + tasks). */

.work-empty[b-dkff61gd5i] {
    padding: 16px 4px;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    max-width: 560px;
}

.work-list[b-dkff61gd5i] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.work-row[b-dkff61gd5i] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 6px;
    border-bottom: 1px solid var(--border);
}

.work-row:last-child[b-dkff61gd5i] {
    border-bottom: 0;
}

.work-row.resolved[b-dkff61gd5i] {
    opacity: 0.55;
}

.work-check[b-dkff61gd5i] {
    flex: 0 0 auto;
    width: 18px;
    height: 18px;
    margin-top: 1px;
    border: 1.5px solid var(--border);
    border-radius: 5px;
    background: transparent;
    color: var(--accent);
    cursor: pointer;
    font-size: 12px;
    line-height: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.work-check:hover[b-dkff61gd5i] {
    border-color: var(--accent);
}

.work-check.done[b-dkff61gd5i] {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
}

.work-body[b-dkff61gd5i] {
    min-width: 0;
    flex: 1;
}

.work-title[b-dkff61gd5i] {
    font-size: 13px;
    color: var(--fg);
    line-height: 1.45;
}

.work-row.resolved .work-title[b-dkff61gd5i] {
    text-decoration: line-through;
}

.work-detail[b-dkff61gd5i] {
    font-size: 12px;
    color: var(--muted);
    line-height: 1.4;
    margin-top: 2px;
}

.work-meta[b-dkff61gd5i] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 4px;
    font-size: 10.5px;
    flex-wrap: wrap;
}

.work-kind[b-dkff61gd5i] {
    border-radius: 8px;
    padding: 0 7px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    background: var(--bg-overlay);
    color: var(--muted);
}

.work-kind.issue[b-dkff61gd5i] {
    background: color-mix(in srgb, var(--danger) 16%, transparent);
    color: var(--danger);
}

.work-badge[b-dkff61gd5i],
.work-sev[b-dkff61gd5i],
.work-status[b-dkff61gd5i] {
    border-radius: 8px;
    padding: 0 6px;
    background: var(--bg-overlay);
    color: var(--muted);
    max-width: 120px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.work-dismiss[b-dkff61gd5i] {
    flex: 0 0 auto;
    background: transparent;
    border: 0;
    color: var(--muted);
    cursor: pointer;
    font-size: 13px;
    padding: 2px 4px;
    border-radius: 4px;
    opacity: 0;
    transition: opacity 120ms ease;
}

.work-row:hover .work-dismiss[b-dkff61gd5i] {
    opacity: 1;
}

.work-dismiss:hover[b-dkff61gd5i] {
    color: var(--danger);
    background: var(--hover-overlay);
}
/* _content/Buildessa/Components/Lisa/WorkspaceArtifactsList.razor.rz.scp.css */
/* Workspace artifacts — job groups with a per-job archive download. */
.wa-empty[b-79sfr9ngeh] {
    color: var(--muted, #8a8a8a); font-size: 14px; padding: 24px 4px; line-height: 1.6; max-width: 620px;
}

.wa-group[b-79sfr9ngeh] {
    border: 1px solid var(--border, #2a2a2a); border-radius: 12px;
    background: var(--bg-elevated, #161616); margin: 0 0 14px; overflow: hidden;
}

.wa-head[b-79sfr9ngeh] {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    flex-wrap: wrap;
    padding: 12px 14px; border-bottom: 1px solid var(--border, #2a2a2a);
    background: color-mix(in srgb, var(--fg, #ececec) 3%, transparent);
}
.wa-title[b-79sfr9ngeh] { display: flex; align-items: center; gap: 10px; min-width: 0; }
.wa-name[b-79sfr9ngeh] {
    font-weight: 600; font-size: 15px; color: var(--fg, #ececec); text-decoration: none;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
a.wa-name:hover[b-79sfr9ngeh] { color: var(--accent, #c4b5fd); }
.wa-count[b-79sfr9ngeh] {
    flex: 0 0 auto; font-size: 11px; color: var(--muted, #8a8a8a);
    border: 1px solid var(--border, #2a2a2a); border-radius: 999px; padding: 2px 8px;
}
.wa-dl[b-79sfr9ngeh] {
    flex: 0 0 auto; font-size: 13px; font-weight: 600; text-decoration: none; white-space: nowrap;
    color: var(--accent, #c4b5fd); border: 1px solid color-mix(in srgb, var(--accent, #c4b5fd) 45%, var(--border, #2a2a2a));
    border-radius: 8px; padding: 6px 12px;
    background: color-mix(in srgb, var(--accent, #c4b5fd) 10%, transparent);
}
.wa-dl:hover[b-79sfr9ngeh] { background: color-mix(in srgb, var(--accent, #c4b5fd) 18%, transparent); }

.wa-none[b-79sfr9ngeh] { color: var(--muted, #8a8a8a); font-size: 13px; padding: 12px 14px; }

.wa-list[b-79sfr9ngeh] { display: flex; flex-direction: column; }
.wa-row[b-79sfr9ngeh] {
    display: flex; gap: 11px; align-items: flex-start; padding: 11px 14px;
    border-top: 1px solid color-mix(in srgb, var(--border, #2a2a2a) 60%, transparent);
}
.wa-list .wa-row:first-child[b-79sfr9ngeh] { border-top: 0; }
.wa-icon[b-79sfr9ngeh] { font-size: 1.05rem; line-height: 1.3; flex: 0 0 auto; }
.wa-body[b-79sfr9ngeh] { min-width: 0; flex: 1; }
.wa-rowname[b-79sfr9ngeh] { font-size: 14px; color: var(--fg, #ececec); font-weight: 500; }
.wa-meta[b-79sfr9ngeh] {
    display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
    margin-top: 3px; font-size: 12px; color: var(--muted, #8a8a8a);
}
.wa-badge[b-79sfr9ngeh] {
    border: 1px solid var(--border, #2a2a2a); border-radius: 999px; padding: 1px 8px; color: var(--muted, #8a8a8a);
}
.wa-status[b-79sfr9ngeh] { text-transform: lowercase; }
.wa-status.ready[b-79sfr9ngeh] { color: #2f9268; }
.wa-status.working[b-79sfr9ngeh] { color: #ba7517; }
.wa-sep[b-79sfr9ngeh] { opacity: .5; }
.wa-time[b-79sfr9ngeh] { }
.wa-link[b-79sfr9ngeh] { color: var(--accent, #c4b5fd); text-decoration: none; font-weight: 600; }
.wa-link:hover[b-79sfr9ngeh] { text-decoration: underline; }
/* _content/Buildessa/Components/Lisa/WorkspaceChat.razor.rz.scp.css */
/* P9 — a live chat inside the workspace tab. The thread scrolls in its
   own box so the composer stays put at the bottom of the panel, the way
   it does on the chat page. */

/* FIXED, not elastic: a chat that grows as messages arrive walks the
   composer down the page while you are typing in it, and makes the tab
   change size every time you switch to it. One height, always.

   The height lives on the PANE rather than on the thread, because the
   1-1 carries a title row the team room does not — pinning the thread
   instead made the two chats differ by exactly that row. --ws-chat-h is
   set by whoever hosts the chat (ProjectHome's .proj-tabpanel), which is
   also what gives an empty Deliverables tab the same height as a chat
   without either side hardcoding the other's number. */
.wc-pane[b-5lydxr3tt1] {
    display: flex;
    flex-direction: column;
    height: var(--ws-chat-h, 520px);
}

.wc-thread[b-5lydxr3tt1] {
    /* min-height:0 is load-bearing: a flex child defaults to min-content,
       which here is the whole thread, so without it the box refuses to
       shrink and scrolls the page instead of itself. */
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding-right: 4px;
    display: flex;
    flex-direction: column;
}

/* margin-top:auto — NOT justify-content:flex-end. Both pin a short
   thread to the bottom, but flex-end on a scroll container makes the
   overflowing top unreachable. */
.wc-thread-inner[b-5lydxr3tt1] { margin-top: auto; }

/* A ROOM reads header-down, not bottom-up: its title and roster belong at
   the top of the box. The auto margin was pushing the whole room —
   header included — into the middle of the container (field screenshot
   2026-08-17). Only the private 1-1 pins to the composer. */
.wc-thread.is-team .wc-thread-inner[b-5lydxr3tt1] { margin-top: 0; }

/* …and the room header STAYS at the top while the messages scroll under
   it. ::deep because it belongs to TeamChatView, one component down. */
.wc-thread.is-team[b-5lydxr3tt1]  .team-head {
    position: sticky;
    top: 0;
    z-index: 2;
    background: var(--bg-elevated);
}

.wc-composer[b-5lydxr3tt1] {
    flex: 0 0 auto;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid var(--border);
}

.wc-note[b-5lydxr3tt1] {
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--muted);
    padding: 10px 2px;
}

.wc-busy[b-5lydxr3tt1] {
    display: flex;
    align-items: center;
    gap: 9px;
}

.wc-spin[b-5lydxr3tt1] {
    width: 11px;
    height: 11px;
    flex: 0 0 auto;
    border: 2px solid var(--border);
    border-top-color: var(--accent);
    border-radius: 50%;
    animation: wc-turn-b-5lydxr3tt1 .8s linear infinite;
}

@keyframes wc-turn-b-5lydxr3tt1 { to { transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce) {
    .wc-spin[b-5lydxr3tt1] { animation: none; border-top-color: var(--border); }
}

/* Open-full-page: an ICON, not a sentence. The words cost a whole row
   above the room header (field ask 2026-08-17); the tooltip and the
   aria-label still say what it does. */
.wc-open[b-5lydxr3tt1] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    border-radius: 6px;
    border: 1px solid transparent;
    color: var(--muted);
    text-decoration: none;
}

.wc-open:hover[b-5lydxr3tt1] {
    color: var(--accent);
    border-color: var(--border);
    background: var(--hover-overlay);
}

.wc-open:focus-visible[b-5lydxr3tt1] { outline: 2px solid var(--accent); outline-offset: 1px; }

/* The 1-1's header row — title and the open-full icon on ONE line, so the
   icon has somewhere to live that isn't on top of the first message. */
.wc-head[b-5lydxr3tt1] {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 6px;
}

.wc-head h3[b-5lydxr3tt1] {
    font-size: 13px;
    font-weight: 650;
    margin: 0;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--muted);
}
/* _content/Buildessa/Components/Lisa/WorkStatePanel.razor.rz.scp.css */
.wsp-section[b-n3o4rblpic] {
    margin-top: 14px;
    padding-top: 10px;
    border-top: 1px solid var(--border-subtle, #e5e8ec);
}

.wsp-label[b-n3o4rblpic] {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--text-faint, #8a919a);
    margin-bottom: 6px;
}

.wsp-row[b-n3o4rblpic] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 5px 0;
}

.wsp-icon[b-n3o4rblpic] {
    font-size: 14px;
    line-height: 1.3;
}

.wsp-body[b-n3o4rblpic] {
    min-width: 0;
    flex: 1;
}

.wsp-title[b-n3o4rblpic] {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

a.wsp-title[b-n3o4rblpic] {
    color: var(--accent, #3b6ff0);
    text-decoration: none;
    cursor: pointer;
}

a.wsp-title:hover[b-n3o4rblpic] {
    text-decoration: underline;
}

.wsp-title-plain[b-n3o4rblpic] {
    color: var(--text-primary, #1a1d21);
}

.wsp-meta[b-n3o4rblpic] {
    font-size: 11px;
    color: var(--text-faint, #8a919a);
    margin-top: 1px;
}

.wsp-ledger summary[b-n3o4rblpic] {
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-secondary, #4a5158);
    cursor: pointer;
    user-select: none;
}

.wsp-ledger-text[b-n3o4rblpic] {
    margin: 8px 0 0;
    padding: 8px 10px;
    background: var(--surface-sunken, #f4f6f8);
    border: 1px solid var(--border-subtle, #e5e8ec);
    border-radius: 6px;
    font-size: 10.5px;
    line-height: 1.45;
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 320px;
    overflow: auto;
    color: var(--text-secondary, #4a5158);
}
/* _content/Buildessa/Components/Lisa/WorkstationContextPanel.razor.rz.scp.css */
/* Phase 11: workstation context panel — bottom of the right rail.
   Renders only when a workstation is paired. Each entry is grouped by
   status with subtle color + icon to communicate state at a glance.
*/

.ws-panel[b-r8snzuqgnr] {
    margin-top: 16px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.ws-head[b-r8snzuqgnr] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 2px;
}

.ws-icon[b-r8snzuqgnr] {
    font-size: 18px;
    line-height: 1;
}

.ws-head-body[b-r8snzuqgnr] {
    flex: 1;
    min-width: 0;
}

.ws-label[b-r8snzuqgnr] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.ws-name[b-r8snzuqgnr] {
    font-size: 13px;
    color: var(--fg);
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Agent build version — small + muted, under the workstation name. Lets the
   operator confirm at a glance which build is answering after a deploy. */
.ws-agent-version[b-r8snzuqgnr] {
    font-size: 10.5px;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    margin-top: 1px;
}

.ws-status[b-r8snzuqgnr] {
    font-size: 10px;
    padding: 2px 6px;
    border-radius: 3px;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.ws-status.online[b-r8snzuqgnr] {
    background: color-mix(in srgb, var(--success, #2a9d8f) 18%, transparent);
    color: var(--success, #2a9d8f);
}

.ws-status.offline[b-r8snzuqgnr] {
    background: color-mix(in srgb, var(--muted) 18%, transparent);
    color: var(--muted);
}

.ws-status.available[b-r8snzuqgnr] {
    background: color-mix(in srgb, var(--info, #3a86ff) 18%, transparent);
    color: var(--info, #3a86ff);
}

.ws-empty-actions[b-r8snzuqgnr] {
    padding: 4px 2px;
}

.ws-pair-btn[b-r8snzuqgnr] {
    width: 100%;
    padding: 6px 10px;
    background: var(--accent);
    color: var(--accent-fg, #fff);
    border: 0;
    border-radius: 4px;
    font: inherit;
    font-size: 12px;
    font-weight: 500;
    cursor: pointer;
}

.ws-pair-btn:hover:not(:disabled)[b-r8snzuqgnr] {
    filter: brightness(1.05);
}

.ws-pair-btn:disabled[b-r8snzuqgnr] {
    opacity: 0.6;
    cursor: not-allowed;
}

.ws-empty[b-r8snzuqgnr] {
    font-size: 12px;
    color: var(--muted);
    line-height: 1.4;
    padding: 4px 2px;
}

.ws-section[b-r8snzuqgnr] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.ws-section-label[b-r8snzuqgnr] {
    font-size: 10px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-top: 4px;
}

.ws-entry[b-r8snzuqgnr] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 6px 8px;
    border-radius: 4px;
    border-left: 2px solid var(--border);
    background: var(--bg-overlay);
    font-size: 12px;
}

.ws-entry-fetching[b-r8snzuqgnr] {
    border-left-color: var(--info, #3a86ff);
}

.ws-entry-ready[b-r8snzuqgnr] {
    border-left-color: var(--success, #2a9d8f);
}

.ws-entry-stale[b-r8snzuqgnr] {
    border-left-color: var(--warning, #f9c74f);
}

.ws-entry-failed[b-r8snzuqgnr] {
    border-left-color: var(--danger, #e63946);
}

.ws-entry-body[b-r8snzuqgnr] {
    flex: 1;
    min-width: 0;
}

.ws-entry-label[b-r8snzuqgnr] {
    color: var(--fg);
    font-weight: 500;
    line-height: 1.3;
}

.ws-entry-key[b-r8snzuqgnr] {
    font-family: var(--mono, monospace);
    font-size: 11px;
    color: var(--muted);
    margin-top: 2px;
}

.ws-entry-value[b-r8snzuqgnr] {
    color: var(--fg);
    font-weight: 600;
    margin-top: 2px;
}

.ws-entry-unit[b-r8snzuqgnr] {
    margin-left: 3px;
    color: var(--muted);
    font-weight: 400;
    font-size: 11px;
}

.ws-entry-fail[b-r8snzuqgnr] {
    font-size: 11px;
    color: var(--danger, #e63946);
    margin-top: 2px;
}

.ws-entry-age[b-r8snzuqgnr] {
    flex: 0 0 auto;
    align-self: center;
}

/* Subtle spinning indicator for fetching — pure CSS dot loop. */
.ws-spinner[b-r8snzuqgnr] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--info, #3a86ff);
    margin-top: 4px;
    animation: ws-pulse-b-r8snzuqgnr 1.2s ease-in-out infinite;
    flex-shrink: 0;
}

@keyframes ws-pulse-b-r8snzuqgnr {
    0%, 100% { opacity: 0.4; transform: scale(0.85); }
    50%      { opacity: 1;   transform: scale(1.0); }
}

.ws-check[b-r8snzuqgnr] { color: var(--success, #2a9d8f); margin-top: 1px; font-size: 13px; flex-shrink: 0; }
.ws-warn[b-r8snzuqgnr]  { color: var(--warning, #f9c74f); margin-top: 1px; font-size: 13px; flex-shrink: 0; }
.ws-x[b-r8snzuqgnr]     { color: var(--danger,  #e63946); margin-top: 1px; font-size: 13px; flex-shrink: 0; }

.ws-teach-btn[b-r8snzuqgnr] {
    flex: 0 0 auto;
    background: transparent;
    border: 1px solid var(--border);
    color: var(--fg);
    padding: 2px 8px;
    border-radius: 3px;
    font-size: 11px;
    cursor: pointer;
}

.ws-teach-btn:hover[b-r8snzuqgnr] {
    background: var(--hover-overlay);
    border-color: var(--accent);
    color: var(--accent);
}

.ws-teach-form[b-r8snzuqgnr] {
    margin: 4px 0 8px 4px;
    padding: 8px 10px;
    background: var(--bg-elevated);
    border: 1px solid var(--accent);
    border-radius: 4px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: 12px;
}

.ws-teach-form label[b-r8snzuqgnr] {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.ws-teach-form label > span[b-r8snzuqgnr] {
    font-size: 10px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

.ws-teach-form .form-grid-2[b-r8snzuqgnr] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6px;
}

.ws-teach-actions[b-r8snzuqgnr] {
    display: flex;
    gap: 6px;
    margin-top: 4px;
}

.ws-teach-error[b-r8snzuqgnr] {
    color: var(--danger, #e63946);
    font-size: 11px;
}

.muted[b-r8snzuqgnr] { color: var(--muted); }
.small[b-r8snzuqgnr] { font-size: 11px; }
.truncate[b-r8snzuqgnr] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Gear button — small, ghost-y, lives between the workstation name and
   the status pill in the header. Hover only lights up when the user is
   actually hovering it so it doesn't draw the eye away from status. */
.ws-gear[b-r8snzuqgnr] {
    background: transparent;
    border: 0;
    padding: 4px;
    color: var(--muted);
    cursor: pointer;
    border-radius: 3px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.ws-gear:hover[b-r8snzuqgnr] {
    background: var(--hover-overlay);
    color: var(--fg);
}

/* "No session" branch — replaces the fetch/ready/failed sections when
   the workstation is reachable but no one is signed in to Windows. */
.ws-no-session[b-r8snzuqgnr] {
    border: 1px solid var(--warning, #f9c74f);
    background: color-mix(in srgb, var(--warning, #f9c74f) 10%, transparent);
    border-radius: 4px;
    padding: 10px 12px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.ws-no-session-title[b-r8snzuqgnr] {
    font-size: 12px;
    font-weight: 600;
    color: var(--fg);
}

.ws-no-session-body[b-r8snzuqgnr] {
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
}

.ws-no-session-actions[b-r8snzuqgnr] {
    margin-top: 4px;
}

.ws-no-session-hint[b-r8snzuqgnr] {
    margin-top: 6px;
    font-size: 10px;
    color: var(--muted);
    text-align: center;
    font-style: italic;
}
/* _content/Buildessa/Components/Lisa/WorkstationFolderBrowser.razor.rz.scp.css */
/* Remote folder browser — inline drill-down list shared by the
   composer's working-directory chip and the workstation settings
   panel. Compact: both hosts are narrow surfaces. */

.wfb[b-8ph6r2fjvh] {
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--bg-overlay);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    font-size: 12px;
}

.wfb-head[b-8ph6r2fjvh] {
    display: flex;
    align-items: center;
    padding: 6px 8px;
    border-bottom: 1px solid var(--border);
}

.wfb-path[b-8ph6r2fjvh] {
    font-size: 11px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    color: var(--fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    direction: rtl;      /* long paths: keep the tail (deepest folder) visible */
    text-align: left;
    flex: 1;
}

.wfb-hint[b-8ph6r2fjvh] {
    font-size: 11px;
    color: var(--muted);
    padding: 8px;
}

.wfb-error[b-8ph6r2fjvh] {
    font-size: 11px;
    color: var(--danger, #e63946);
    padding: 6px 8px 0;
}

.wfb-list[b-8ph6r2fjvh] {
    max-height: 220px;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    padding: 4px;
    gap: 1px;
}

.wfb-item[b-8ph6r2fjvh] {
    background: transparent;
    border: 0;
    text-align: left;
    padding: 5px 8px;
    border-radius: 3px;
    font-size: 12px;
    font-family: inherit;
    color: var(--fg);
    cursor: pointer;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.wfb-item:hover[b-8ph6r2fjvh] {
    background: var(--hover-overlay);
}

.wfb-up[b-8ph6r2fjvh] {
    color: var(--muted);
    font-weight: 600;
}

.wfb-actions[b-8ph6r2fjvh] {
    display: flex;
    gap: 6px;
    padding: 6px 8px;
    border-top: 1px solid var(--border);
}
/* _content/Buildessa/Components/Lisa/WorkstationList.razor.rz.scp.css */
/* §16 — Workstations view. */

.ws-empty[b-42rp7l46y3] {
    padding: 16px 4px;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    max-width: 560px;
}

.ws-list[b-42rp7l46y3] {
    display: flex;
    flex-direction: column;
}

.ws-row[b-42rp7l46y3] {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 4px;
    border-bottom: 1px solid var(--border);
}

.ws-row:last-child[b-42rp7l46y3] {
    border-bottom: 0;
}

.ws-dot[b-42rp7l46y3] {
    flex: 0 0 auto;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    margin-top: 5px;
    background: var(--muted);
}

.ws-dot.online[b-42rp7l46y3] {
    background: #3fb950;
}

.ws-dot.locked[b-42rp7l46y3] {
    background: #d29922;
}

.ws-dot.pending[b-42rp7l46y3] {
    background: var(--accent);
}

.ws-dot.offline[b-42rp7l46y3] {
    background: var(--muted);
    opacity: 0.5;
}

.ws-body[b-42rp7l46y3] {
    min-width: 0;
    flex: 1;
}

.ws-name[b-42rp7l46y3] {
    font-size: 13px;
    color: var(--fg);
    font-weight: 600;
}

.ws-meta[b-42rp7l46y3] {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 2px;
    font-size: 11px;
    color: var(--muted);
    flex-wrap: wrap;
}

.ws-badge[b-42rp7l46y3] {
    background: var(--bg-overlay);
    border-radius: 8px;
    padding: 0 6px;
    max-width: 120px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ws-sep[b-42rp7l46y3] {
    opacity: 0.5;
}

/* Task #75 — the page's action is DOWNLOADING the installer; the PC
   registers itself during setup (sign-in inside the wizard), so the
   old register-form/token styles are gone with the form. */
.ws-register-row[b-42rp7l46y3] { margin-bottom: 10px; }
.ws-register-btn[b-42rp7l46y3] {
    display: inline-block; text-decoration: none;
    border: 1px dashed rgba(127,127,127,0.45); background: none; color: inherit;
    padding: 6px 12px; border-radius: 8px; cursor: pointer; font-size: 13px;
}
.ws-register-btn:hover[b-42rp7l46y3] { background: rgba(127,127,127,0.08); text-decoration: none; }
.ws-download-hint[b-42rp7l46y3] { margin-top: 8px; font-size: 12px; opacity: 0.75; max-width: 460px; }

/* ── Capability toggles (field ask 2026-07-29) ─────────────────────
   Selecting a row reveals the PC's capabilities — all on by default,
   each disable-able; global across chats. */

.ws-row[b-42rp7l46y3] {
    cursor: pointer;
    border-radius: 6px;
}

.ws-row:hover[b-42rp7l46y3] {
    background: var(--hover-overlay, rgba(0, 0, 0, 0.03));
}

.ws-row-selected[b-42rp7l46y3] {
    background: var(--bg-overlay, rgba(0, 0, 0, 0.04));
}

.ws-caps[b-42rp7l46y3] {
    margin: 2px 0 10px 22px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--bg-overlay, rgba(0, 0, 0, 0.02));
    display: flex;
    flex-direction: column;
    gap: 6px;
    max-width: 640px;
}

.ws-caps-head[b-42rp7l46y3] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--muted);
    margin-bottom: 2px;
}

.ws-cap-row[b-42rp7l46y3] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 5px 6px;
    border-radius: 5px;
    cursor: pointer;
}

.ws-cap-row:hover[b-42rp7l46y3] {
    background: var(--hover-overlay, rgba(0, 0, 0, 0.04));
}

.ws-cap-row input[type="checkbox"][b-42rp7l46y3] {
    margin-top: 3px;
    flex-shrink: 0;
}

.ws-cap-row span[b-42rp7l46y3] {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
}

.ws-cap-row strong[b-42rp7l46y3] {
    font-size: 13px;
    font-weight: 500;
    color: var(--fg);
}

.ws-cap-row small[b-42rp7l46y3] {
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
}

.ws-caps-status[b-42rp7l46y3] {
    font-size: 11px;
    color: var(--muted);
    padding-left: 6px;
}
/* _content/Buildessa/Components/Lisa/WorkstationPairChip.razor.rz.scp.css */
/* Composer pairing chip. Sits next to the BuildingsSelector in the
   composer's left action group. Same visual idiom — pill with icon +
   label — so the two read as siblings, not competing surfaces. */

.pc[b-t1qapg17mc] {
    position: relative;
    display: inline-flex;
}

.pc-trigger[b-t1qapg17mc] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 10px;
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 999px;
    color: var(--fg-dim);
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    max-width: 220px;
    transition: background 120ms ease, border-color 120ms ease;
}

.pc-trigger:hover[b-t1qapg17mc] {
    background: rgba(255, 255, 255, 0.04);
    border-color: var(--border-strong);
}

.pc.open .pc-trigger[b-t1qapg17mc] {
    background: rgba(196, 181, 253, 0.08);
    border-color: var(--accent-soft);
    color: var(--fg);
}

.pc-trigger.paired[b-t1qapg17mc] {
    /* Paired state — solid-ish background to signal "this is engaged
       right now" without shouting. Accent-coloured icon underlines it. */
    background: rgba(140, 220, 170, 0.08);
    border-color: rgba(140, 220, 170, 0.45);
    color: var(--fg);
}
.pc-trigger.paired svg[b-t1qapg17mc] {
    color: var(--success);
}

/* Install affordance — the user has no workstation at all; the chip
   links to the Workstations page (register + download). */
a.pc-trigger.pc-install[b-t1qapg17mc] {
    text-decoration: none;
    color: var(--accent-soft, #8b7fd4);
    border-color: var(--accent-soft, #8b7fd4);
}
a.pc-trigger.pc-install svg[b-t1qapg17mc] {
    color: var(--accent-soft, #8b7fd4);
}
a.pc-trigger.pc-install:hover[b-t1qapg17mc] {
    background: rgba(196, 181, 253, 0.08);
}

/* Bound to this chat but the PC is offline — visible, muted, honest.
   Reconnect is automatic; the × unbinds. */
.pc-trigger.pc-offline[b-t1qapg17mc] {
    border-style: dashed;
    color: var(--muted);
}
.pc-trigger.pc-offline svg[b-t1qapg17mc] {
    color: var(--muted);
}
.pc-trigger.pc-offline:hover .pc-x[b-t1qapg17mc] {
    color: var(--danger);
}

.pc-trigger svg[b-t1qapg17mc] {
    width: 14px;
    height: 14px;
    flex: 0 0 14px;
    color: var(--muted);
}

.pc-label[b-t1qapg17mc] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pc-x[b-t1qapg17mc] {
    color: var(--muted);
    font-size: 14px;
    line-height: 1;
    padding-left: 4px;
    border-left: 1px solid rgba(255, 255, 255, 0.08);
    margin-left: 2px;
}
.pc-trigger.paired:hover .pc-x[b-t1qapg17mc] { color: var(--danger); }

/* Popover ────────────────────────────────────────────────────────── */

.pc-backdrop[b-t1qapg17mc] {
    position: fixed;
    inset: 0;
    z-index: 30;
    background: transparent;
}

.pc-popover[b-t1qapg17mc] {
    position: absolute;
    bottom: calc(100% + 6px);
    left: 0;
    z-index: 31;
    min-width: 240px;
    max-width: 320px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 6px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
}

.pc-popover-head[b-t1qapg17mc] {
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.6px;
    padding: 6px 10px 8px;
}

.pc-item[b-t1qapg17mc] {
    width: 100%;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    background: transparent;
    border: 0;
    color: var(--fg);
    border-radius: 6px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    text-align: left;
}
.pc-item:hover[b-t1qapg17mc] { background: rgba(255, 255, 255, 0.05); }

.pc-dot[b-t1qapg17mc] {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--muted);
    flex: 0 0 8px;
}
.pc-dot-online[b-t1qapg17mc] {
    background: var(--success);
    box-shadow: 0 0 6px rgba(140, 220, 170, 0.5);
}

.pc-item-name[b-t1qapg17mc] {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pc-item-meta[b-t1qapg17mc] {
    font-size: 11px;
    color: var(--muted);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
/* _content/Buildessa/Components/Lisa/WorkstationSettingsPanel.razor.rz.scp.css */
/* Inline settings panel — drops below the workstation header when the
   user clicks the gear. Stays inside the rail so it doesn't cover the
   chat; if the option set grows, this becomes a modal instead. */

.ws-settings[b-omlwvnhxnw] {
    border: 1px solid var(--border);
    background: var(--bg-elevated);
    border-radius: 4px;
    padding: 0;
    display: flex;
    flex-direction: column;
    font-size: 12px;
    overflow: hidden;
}

.ws-settings-head[b-omlwvnhxnw] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 8px 10px;
    background: var(--bg-overlay);
    border-bottom: 1px solid var(--border);
}

.ws-settings-title[b-omlwvnhxnw] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--muted);
}

.ws-settings-close[b-omlwvnhxnw] {
    background: transparent;
    border: 0;
    font-size: 16px;
    line-height: 1;
    color: var(--muted);
    cursor: pointer;
    padding: 0 4px;
    border-radius: 3px;
}

.ws-settings-close:hover[b-omlwvnhxnw] {
    background: var(--hover-overlay);
    color: var(--fg);
}

.ws-settings-body[b-omlwvnhxnw] {
    padding: 10px 12px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.ws-settings-label[b-omlwvnhxnw] {
    font-size: 11px;
    font-weight: 600;
    color: var(--fg);
}

.ws-settings-hint[b-omlwvnhxnw] {
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
    margin-bottom: 4px;
}

.ws-settings-row[b-omlwvnhxnw] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 6px 8px;
    border: 1px solid var(--border);
    border-radius: 4px;
    cursor: pointer;
    background: var(--bg-overlay);
}

.ws-settings-row:hover[b-omlwvnhxnw] {
    background: var(--hover-overlay);
}

.ws-settings-row input[type="checkbox"][b-omlwvnhxnw] {
    margin-top: 2px;
    flex-shrink: 0;
}

.ws-settings-row span[b-omlwvnhxnw] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.ws-settings-row strong[b-omlwvnhxnw] {
    font-size: 12px;
    font-weight: 500;
    color: var(--fg);
}

.ws-settings-row small[b-omlwvnhxnw] {
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
}

/* Sub-row (e.g. the "expire after" select that only shows when
   persistent storage is enabled). Visually nested under the parent. */
.ws-settings-sub[b-omlwvnhxnw] {
    margin-left: 22px;
    padding: 6px 10px;
    border-style: dashed;
    background: transparent;
    flex-direction: row;
    align-items: center;
    gap: 10px;
}

.ws-settings-sub span[b-omlwvnhxnw] {
    flex-direction: row;
    align-items: center;
    color: var(--fg);
}

.ws-settings-sub select[b-omlwvnhxnw] {
    max-width: 140px;
}

.ws-settings-actions[b-omlwvnhxnw] {
    display: flex;
    gap: 6px;
    margin-top: 4px;
}

.ws-settings p.status[b-omlwvnhxnw] {
    font-size: 11px;
    color: var(--success, #2a9d8f);
    margin: 4px 0 0;
}

.ws-settings p.error[b-omlwvnhxnw] {
    font-size: 11px;
    color: var(--danger, #e63946);
    margin: 4px 0 0;
}

.ws-settings-cache[b-omlwvnhxnw] {
    margin-top: 12px;
    padding-top: 10px;
    border-top: 1px dashed var(--border);
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.ws-settings-cache .btn-ghost[b-omlwvnhxnw] {
    align-self: flex-start;
    font-size: 11px;
}

/* ── Work folder (task #58) ──────────────────────────────────────── */

.ws-settings-folder[b-omlwvnhxnw] {
    margin-top: 12px;
    padding-top: 10px;
    border-top: 1px dashed var(--border);
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.ws-settings-folder input[type="radio"][b-omlwvnhxnw] {
    margin-top: 2px;
    flex-shrink: 0;
}

.ws-folder-pick[b-omlwvnhxnw] {
    display: flex;
    gap: 6px;
    align-items: center;
}

.ws-folder-pick input[b-omlwvnhxnw] {
    flex: 1;
    min-width: 0;
    font-size: 11px;
}

.ws-folder-pick .btn-ghost[b-omlwvnhxnw] {
    flex-shrink: 0;
    font-size: 11px;
}

/* The remote folder browser itself is the shared WorkstationFolderBrowser
   component (also used by the composer's working-directory chip) — its
   styles live in WorkstationFolderBrowser.razor.css. */
/* _content/Buildessa/Components/Pages/Account/BillingPage.razor.rz.scp.css */
.billing[b-w9pa3lr0nj] { max-width: 680px; }
.billing h3[b-w9pa3lr0nj] { font-size: 18px; font-weight: 600; margin: 0 0 4px; color: var(--fg, #ececec); }

.b-card[b-w9pa3lr0nj] {
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 12px;
    padding: 20px 22px;
    margin-top: 18px;
    background: var(--bg-elevated, #161616);
    box-shadow: var(--shadow-card, 0 6px 18px rgba(0, 0, 0, 0.25));
}
.b-card h2[b-w9pa3lr0nj] { font-size: 1.05rem; font-weight: 650; margin: 0 0 10px; }

.b-muted[b-w9pa3lr0nj] { color: var(--muted, #6b7280); }
.b-fine[b-w9pa3lr0nj] { font-size: .85rem; margin-top: 8px; }

/* Project subscriptions */
.b-subs[b-w9pa3lr0nj] { display: flex; flex-direction: column; gap: 2px; margin-top: 12px; }
.b-sub-row[b-w9pa3lr0nj] {
    display: flex; align-items: center; gap: 14px;
    padding: 12px 2px; border-top: 1px solid var(--border, #2a2a2a);
}
.b-sub-row:first-child[b-w9pa3lr0nj] { border-top: none; }
.b-sub-info[b-w9pa3lr0nj] { display: flex; flex-direction: column; gap: 1px; flex: 1 1 auto; min-width: 0; }
.b-sub-name[b-w9pa3lr0nj] { font-weight: 600; color: var(--fg, #ececec); }
.b-sub-tag[b-w9pa3lr0nj] { font-size: .82rem; color: var(--muted, #8a8a8a); }
.b-sub-price[b-w9pa3lr0nj] {
    display: flex; flex-direction: column; align-items: flex-end; gap: 2px; flex: none;
}
.b-sub-amt[b-w9pa3lr0nj] {
    font-weight: 600; color: var(--fg, #ececec); font-variant-numeric: tabular-nums; white-space: nowrap;
}
.b-sub-amt span[b-w9pa3lr0nj] { font-weight: 400; color: var(--muted, #8a8a8a); font-size: .85rem; }
.b-sub-mins[b-w9pa3lr0nj] { font-size: .8rem; color: var(--muted, #8a8a8a); white-space: nowrap; }
.b-sub-action[b-w9pa3lr0nj] { display: flex; align-items: center; gap: 10px; flex: none; }
.b-sub-active[b-w9pa3lr0nj] { color: var(--success, #1a7f4e); font-weight: 600; font-size: .85rem; white-space: nowrap; }

.b-hero[b-w9pa3lr0nj] { display: flex; align-items: baseline; gap: 10px; padding: 4px 0 8px; flex-wrap: wrap; }
.b-num[b-w9pa3lr0nj] { font-size: 2.3rem; font-weight: 700; line-height: 1; }
.b-sub[b-w9pa3lr0nj] { color: var(--muted, #6b7280); font-variant-numeric: tabular-nums; }

.b-tiers[b-w9pa3lr0nj] { display: flex; gap: 10px; flex-wrap: wrap; margin: 14px 0 6px; }

.b-custom[b-w9pa3lr0nj] { display: flex; align-items: center; gap: 12px; margin-top: 8px; flex-wrap: wrap; }
.b-dollar[b-w9pa3lr0nj] { white-space: nowrap; }
.b-custom input[b-w9pa3lr0nj], .b-grid input[b-w9pa3lr0nj] { width: 5.5rem; }

.b-link[b-w9pa3lr0nj] { display: inline-block; margin-top: 14px; font-size: .9rem; }

.b-toggle[b-w9pa3lr0nj] { display: flex; align-items: center; gap: 8px; font-weight: 550; margin: 6px 0; cursor: pointer; }
.b-toggle input[b-w9pa3lr0nj] { width: 1rem; height: 1rem; }

.b-grid[b-w9pa3lr0nj] { display: flex; flex-direction: column; gap: 10px; margin: 12px 0; }
.b-grid label[b-w9pa3lr0nj] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; color: var(--muted, #374151); }

input[type="number"][b-w9pa3lr0nj] {
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 7px;
    padding: 5px 8px;
    font: inherit;
    font-variant-numeric: tabular-nums;
    background: var(--bg-input, #0d0d0d);
    color: var(--fg, #ececec);
}

.b-actions[b-w9pa3lr0nj] { display: flex; align-items: center; gap: 12px; margin-top: 8px; }

/* Buttons — match the app's primary/outline pair without depending on it. */
.b-btn[b-w9pa3lr0nj] {
    display: inline-block;
    border-radius: 8px;
    padding: 8px 16px;
    font-weight: 600;
    font-size: .92rem;
    text-decoration: none;
    cursor: pointer;
    border: 1px solid transparent;
    transition: filter .12s ease;
}
.b-btn:hover[b-w9pa3lr0nj] { filter: brightness(1.05); }
.b-btn-primary[b-w9pa3lr0nj] { background: var(--accent, #c4b5fd); color: var(--accent-fg, #1a1a1a); }
.b-btn-outline[b-w9pa3lr0nj] { background: transparent; border-color: var(--accent, #c4b5fd); color: var(--accent, #c4b5fd); }
.b-btn:disabled[b-w9pa3lr0nj] { opacity: .5; cursor: default; filter: none; }

.b-ok[b-w9pa3lr0nj] { color: var(--success, #8cdcaa); font-weight: 600; }
.b-warn[b-w9pa3lr0nj] { color: var(--warning, #ffd58a); font-weight: 600; }

.b-banner[b-w9pa3lr0nj] { border-radius: 10px; padding: 12px 16px; margin-top: 16px; font-weight: 550; }
.b-banner-ok[b-w9pa3lr0nj] { background: #ecfdf3; color: #15803d; border: 1px solid #bbf7d0; }
.b-banner-info[b-w9pa3lr0nj] { background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
.b-banner-warn[b-w9pa3lr0nj] { background: #fffbeb; color: #b45309; border: 1px solid #fde68a; }

.b-table[b-w9pa3lr0nj] { width: 100%; border-collapse: collapse; margin-top: 4px; font-size: .92rem; }
.b-table th[b-w9pa3lr0nj], .b-table td[b-w9pa3lr0nj] { text-align: left; padding: 7px 10px; border-bottom: 1px solid var(--border, #eef1f4); }
.b-table th[b-w9pa3lr0nj] { color: var(--muted, #6b7280); font-weight: 600; }
.b-table td[b-w9pa3lr0nj] { font-variant-numeric: tabular-nums; }
.b-right[b-w9pa3lr0nj] { text-align: right; }

.b-pill[b-w9pa3lr0nj] { display: inline-block; border-radius: 999px; padding: 2px 10px; font-size: .78rem; font-weight: 650; }
.b-pill-paid[b-w9pa3lr0nj] { background: #ecfdf3; color: #15803d; }
.b-pill-pending[b-w9pa3lr0nj] { background: #eff6ff; color: #1d4ed8; }
.b-pill-failed[b-w9pa3lr0nj] { background: #fef2f2; color: #b91c1c; }

/* Lisa's hourly rate, shown by the add-funds controls. */
.b-rate[b-w9pa3lr0nj] { color: var(--muted, #6b7280); font-size: .9rem; margin: 2px 0 12px; }
.b-rate strong[b-w9pa3lr0nj] { color: var(--fg, #ececec); font-weight: 600; }

/* Volume-bonus badges on the top-up tiers. */
.b-tier[b-w9pa3lr0nj] { display: inline-flex; align-items: center; gap: 8px; }
.b-bonus[b-w9pa3lr0nj] {
    display: inline-block;
    background: rgba(255, 255, 255, .22);
    border-radius: 999px;
    padding: 1px 7px;
    font-size: .72rem;
    font-weight: 700;
    line-height: 1.4;
}
.b-bonus-inline[b-w9pa3lr0nj] {
    color: var(--success, #1a7f4e);
    font-weight: 700;
    font-size: .85rem;
    white-space: nowrap;
}

/* Subscription sub-sections + free-tier chip. */
.b-subhead[b-w9pa3lr0nj] { font-size: .95rem; font-weight: 650; margin: 18px 0 4px; color: var(--fg, #ececec); }
.b-chip[b-w9pa3lr0nj] {
    display: inline-block;
    margin-left: 6px;
    font-size: .7rem;
    font-weight: 650;
    padding: 1px 8px;
    border-radius: 999px;
    background: #ecfdf3;
    color: #15803d;
    vertical-align: middle;
}
/* _content/Buildessa/Components/Pages/Account/ExternalProviderButtons.razor.rz.scp.css */
.ext-providers[b-b4i3uwxeeq] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 10px;
}

/* Third-party sign-in button. Same footprint as the card's .btn-lg so every
   method reads as a peer, and the clean white fill (per Google's branding
   guidance) makes it the elevated primary on the dark card — the intended
   default path. */
.ext-btn[b-b4i3uwxeeq] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    padding: 12px 18px;
    font: inherit;
    font-size: 15px;
    font-weight: 600;
    border-radius: 11px;
    border: 1px solid var(--border);
    background: #ffffff;
    color: #1f1f1f;
    cursor: pointer;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
    transition: transform 120ms ease, box-shadow 120ms ease, filter 120ms ease;
}

.ext-btn:hover[b-b4i3uwxeeq] {
    transform: translateY(-1px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.24);
}

.ext-btn:active[b-b4i3uwxeeq] {
    transform: translateY(0);
    filter: brightness(0.97);
}

.ext-btn svg[b-b4i3uwxeeq] {
    flex: 0 0 auto;
}
/* _content/Buildessa/Components/Pages/Account/Login.razor.rz.scp.css */
.signup-link[b-r07c2udif3] {
    text-align: center;
    margin: 18px 0 0;
    font-size: 14px;
    color: var(--fg-dim, #d0d0d0);
}

.signup-link[b-r07c2udif3]  a {
    color: var(--accent, #c4b5fd);
    text-decoration: none;
}

.signup-link[b-r07c2udif3]  a:hover {
    text-decoration: underline;
}

/* The email+password link and passkey button are given their outlined
   "secondary method" styling centrally in AccountLayout.razor.css (via
   ::deep .btn-method / .btn-passkey), so a third-party provider (Google)
   stays the visual lead. Only the small spacing tweak lives here. */
.btn-method[b-r07c2udif3] { margin-bottom: 10px; }
/* _content/Buildessa/Components/Pages/Account/Register.razor.rz.scp.css */
.signin-link[b-1uo8hl8n2j] {
    text-align: center;
    margin: 18px 0 0;
    font-size: 14px;
    color: var(--fg-dim, #d0d0d0);
}

.signin-link[b-1uo8hl8n2j]  a {
    color: var(--accent, #c4b5fd);
    text-decoration: none;
}

.signin-link[b-1uo8hl8n2j]  a:hover {
    text-decoration: underline;
}

/* Task #74 — email+password signup promoted to a full-size method
   button, same level as the provider buttons (mirrors Login.razor.css). */
.btn-method[b-1uo8hl8n2j] {
    display: block;
    text-align: center;
    margin-bottom: 10px;
    border: 1px solid var(--border, #4a4a55);
    background: transparent;
    color: var(--fg, #eaeaea);
    text-decoration: none;
}

.btn-method:hover[b-1uo8hl8n2j] {
    border-color: var(--accent, #c4b5fd);
    color: var(--accent, #c4b5fd);
    background: transparent;
}
/* _content/Buildessa/Components/Pages/Admin/CommandLine.razor.rz.scp.css */
.cmd-block[b-1omovjg2kd] {
    display: flex;
    align-items: stretch;
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 8px;
    margin: 4px 0;
    overflow: hidden;
}

.cmd-text[b-1omovjg2kd] {
    flex: 1;
    margin: 0;
    padding: 10px 12px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    line-height: 1.5;
    color: var(--fg, #ececec);
    white-space: pre-wrap;
    word-break: break-all;
    overflow-x: auto;
    background: transparent;
    border: 0;
}

.cmd-copy[b-1omovjg2kd] {
    flex: 0 0 auto;
    background: transparent;
    border: 0;
    border-left: 1px solid var(--border);
    color: var(--muted, #8a8a8a);
    padding: 0 14px;
    cursor: pointer;
    font: inherit;
    font-size: 12px;
    font-weight: 600;
    white-space: nowrap;
}

.cmd-copy:hover[b-1omovjg2kd] {
    background: rgba(255, 255, 255, 0.06);
    color: var(--accent, #c4b5fd);
}
/* _content/Buildessa/Components/Pages/Admin/ExportKeys.razor.rz.scp.css */
.cred-block[b-4wjikw8eic] {
    margin: 18px 0 24px;
    padding: 14px 16px;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
}

.cred-head[b-4wjikw8eic] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}

.cred-head strong[b-4wjikw8eic] {
    color: var(--fg, #ececec);
    font-size: 14px;
}

.cred-meta[b-4wjikw8eic] {
    color: var(--muted, #8a8a8a);
    font-size: 12px;
}

.cred-label[b-4wjikw8eic] {
    margin: 10px 0 4px;
    font-size: 11px;
    color: var(--muted, #8a8a8a);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.cred-bytes[b-4wjikw8eic] {
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 10px 12px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    line-height: 1.5;
    color: var(--fg, #ececec);
    overflow-x: auto;
    margin: 0;
}

.back[b-4wjikw8eic] {
    text-align: center;
    margin-top: 28px;
}

.back[b-4wjikw8eic]  a {
    color: var(--muted, #8a8a8a);
    font-size: 12px;
    text-decoration: none;
}

.back[b-4wjikw8eic]  a:hover {
    color: var(--accent, #c4b5fd);
}
/* _content/Buildessa/Components/Pages/Admin/MasterKeySetup.razor.rz.scp.css */
/* Step tracker ─────────────────────────────────────────────────── */

.steps[b-vx23zvds8p] {
    list-style: none;
    padding: 0;
    margin: 0 0 24px;
    display: flex;
    gap: 6px;
    counter-reset: step;
}

.steps .step[b-vx23zvds8p] {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    padding: 8px 4px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 10px;
    color: var(--muted, #8a8a8a);
    font-size: 11px;
    text-align: center;
}

.steps .step-num[b-vx23zvds8p] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--border);
    color: var(--muted, #9a9a9a);
    font-size: 12px;
    font-weight: 600;
}

.steps .step.current[b-vx23zvds8p] {
    border-color: var(--accent-soft, #6d5fbe);
    background: rgba(196, 181, 253, 0.10);
    color: var(--fg, #ececec);
}

.steps .step.current .step-num[b-vx23zvds8p] {
    background: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.steps .step.done[b-vx23zvds8p] {
    border-color: rgba(140, 220, 170, 0.30);
    background: rgba(140, 220, 170, 0.06);
    color: var(--success);
}

.steps .step.done .step-num[b-vx23zvds8p] {
    background: var(--success);
    color: var(--accent-fg);
}

/* Step body ────────────────────────────────────────────────────── */

.step-body h3[b-vx23zvds8p] {
    font-size: 18px;
    font-weight: 600;
    color: var(--fg, #ececec);
    margin: 0 0 6px;
}

.step-body p[b-vx23zvds8p] {
    font-size: 14px;
    color: var(--fg-dim, #d0d0d0);
    line-height: 1.55;
}

.step-body .label[b-vx23zvds8p] {
    font-size: 11px;
    color: var(--muted, #8a8a8a);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin: 14px 0 4px;
}

/* details / summary used for tool tabs */
.step-body details[b-vx23zvds8p] {
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 8px 12px;
    margin-bottom: 8px;
}

.step-body details[open][b-vx23zvds8p] {
    background: var(--bg-overlay);
}

.step-body summary[b-vx23zvds8p] {
    cursor: pointer;
    font-weight: 600;
    color: var(--accent, #c4b5fd);
    padding: 4px 0;
    font-size: 13px;
}

.step-body details p[b-vx23zvds8p] {
    margin: 8px 0 4px;
    font-size: 12px;
    color: var(--muted, #9a9a9a);
}

.paste-box[b-vx23zvds8p],
.sig-box[b-vx23zvds8p] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    word-break: break-all;
}

/* ── Sub-step labels + structure ──────────────────────────────── */

.step-label[b-vx23zvds8p] {
    font-size: 11px;
    color: var(--muted, #8a8a8a);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin: 16px 0 6px;
    padding-top: 10px;
    border-top: 1px dashed var(--border);
}

.cmd-step[b-vx23zvds8p] {
    margin: 10px 0;
}

.cmd-step > p:first-of-type[b-vx23zvds8p] {
    margin: 0 0 6px;
    font-size: 13px;
    color: var(--fg-dim, #d0d0d0);
}

.cmd-step .hint[b-vx23zvds8p] {
    font-size: 12px;
    color: var(--muted, #8a8a8a);
    margin: 6px 0 2px;
}

/* Yellow attention strip for "you must do one of these" pivots inside
   a tool's instructions — louder than a .hint, quieter than .alert. */
.callout[b-vx23zvds8p] {
    background: rgba(255, 200, 100, 0.08);
    border: 1px solid rgba(255, 200, 100, 0.30);
    color: var(--warning);
    border-radius: 8px;
    padding: 10px 12px;
    margin: 12px 0 6px;
    font-size: 13px;
    line-height: 1.45;
}

/* Nested <details> inside a tool's panel (e.g. "Optional: move to YubiKey")
   — slightly muted so it reads as secondary content, not another tool. */
.step-body details details.sub-details[b-vx23zvds8p] {
    background: var(--bg-elevated);
    border-color: var(--border, #1f1f1f);
    margin: 14px 0 4px;
}

.step-body details details.sub-details summary[b-vx23zvds8p] {
    color: var(--muted, #9a9a9a);
    font-weight: 500;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.callout strong[b-vx23zvds8p] {
    color: var(--warning);
}

.callout code[b-vx23zvds8p] {
    background: rgba(0, 0, 0, 0.25);
    padding: 1px 5px;
    border-radius: 4px;
    font-size: 12px;
}

/* Per-command-block styles live in CommandLine.razor.css (component-scoped). */

/* Nav buttons row ──────────────────────────────────────────────── */

.nav-buttons[b-vx23zvds8p] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 22px;
    flex-wrap: wrap;
}

.step-body .btn[b-vx23zvds8p] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    border-radius: 10px;
    padding: 9px 16px;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
}

.step-body .btn.btn-primary[b-vx23zvds8p] {
    background: var(--accent, #c4b5fd);
    color: var(--accent-fg);
}

.step-body .btn.btn-primary:hover:not(:disabled)[b-vx23zvds8p] {
    filter: brightness(1.05);
}

.step-body .btn.ghost[b-vx23zvds8p] {
    background: transparent;
    border: 1px solid var(--border);
    color: var(--fg-dim, #d0d0d0);
}

.step-body .btn.ghost:hover:not(:disabled)[b-vx23zvds8p] {
    background: rgba(255, 255, 255, 0.05);
    color: var(--fg, #ececec);
}

.step-body .btn:disabled[b-vx23zvds8p] {
    opacity: 0.5;
    cursor: not-allowed;
}

.hint[b-vx23zvds8p] {
    font-size: 12px;
    color: var(--muted, #8a8a8a);
}

.back[b-vx23zvds8p] {
    text-align: center;
    margin-top: 24px;
}

.back[b-vx23zvds8p]  a {
    color: var(--muted, #8a8a8a);
    font-size: 12px;
    text-decoration: none;
}

.back[b-vx23zvds8p]  a:hover {
    color: var(--accent, #c4b5fd);
}
/* _content/Buildessa/Components/Pages/Admin/Panel/AuthProviders.razor.rz.scp.css */
/* Secret input + eye toggle, side-by-side (same pattern as
   Search.razor.css — scoped styles don't cross components, so the
   page carries its own copy). */
.key-input-row[b-zpfadbxups] {
    display: flex;
    gap: 6px;
    align-items: stretch;
}

.key-input-row .key-input[b-zpfadbxups] {
    flex: 1;
    min-width: 0;
}

.btn-icon[b-zpfadbxups] {
    flex: 0 0 auto;
    padding: 0 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 5px;
    cursor: pointer;
}

.btn-icon:disabled[b-zpfadbxups] {
    opacity: 0.4;
    cursor: not-allowed;
}

/* The values the provider console asks for — one labelled row per URI
   with a one-click copy button, so the admin never hand-selects (and
   mis-selects) from prose. */
.console-uris[b-zpfadbxups] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin: 6px 0 12px;
}

.uri-row[b-zpfadbxups] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.uri-label[b-zpfadbxups] {
    flex: 0 0 auto;
    min-width: 220px;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--muted, #8a8a8a);
}

.uri-value[b-zpfadbxups] {
    flex: 1 1 auto;
    padding: 5px 9px;
    border-radius: 4px;
    background: color-mix(in srgb, var(--fg, #808080) 7%, transparent);
    font-size: 12px;
    white-space: nowrap;
    overflow-x: auto;
    /* Triple-click / drag selection still works as the manual fallback
       when the clipboard API is blocked. */
    user-select: all;
}

.copy-btn[b-zpfadbxups] {
    padding: 5px 8px;
}

@media (max-width: 720px) {
    .uri-row[b-zpfadbxups] {
        flex-wrap: wrap;
    }

    .uri-label[b-zpfadbxups] {
        min-width: 0;
        flex-basis: 100%;
    }
}

/* Task #79 — the login-page order list: one row per method with its
   position, shown/hidden state, and up/down movers. A plain <ol> with
   arrows (not drag-and-drop) — four rows don't earn a drag library. */
.method-order[b-zpfadbxups] {
    list-style: none;
    margin: 6px 0 12px;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
    max-width: 520px;
}

.method-order-row[b-zpfadbxups] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 7px 10px;
    border: 1px solid var(--border, #3a3a3a);
    border-radius: 6px;
    background: color-mix(in srgb, var(--fg, #808080) 4%, transparent);
}

.order-pos[b-zpfadbxups] {
    flex: 0 0 auto;
    width: 22px;
    text-align: center;
    font-size: 12px;
    color: var(--muted, #8a8a8a);
}

.order-name[b-zpfadbxups] {
    flex: 1 1 auto;
    font-weight: 500;
}

.order-arrows[b-zpfadbxups] {
    display: inline-flex;
    gap: 4px;
}

/* ── Login page layout picker ─────────────────────────────────────── */
.layout-choices[b-zpfadbxups] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 10px;
    margin: 4px 0 14px;
}
.layout-choice[b-zpfadbxups] {
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-areas: "radio title" "radio desc";
    align-items: start;
    column-gap: 10px;
    padding: 12px 14px;
    border: 1px solid var(--border, #3a3a3a);
    border-radius: 10px;
    cursor: pointer;
    background: var(--bg-elevated, #161616);
    transition: border-color .12s ease, background .12s ease;
}
.layout-choice:hover[b-zpfadbxups] { border-color: var(--border-strong, #4a4a55); }
.layout-choice.is-picked[b-zpfadbxups] {
    border-color: var(--accent, #c4b5fd);
    background: color-mix(in srgb, var(--accent, #c4b5fd) 10%, transparent);
}
.layout-choice input[type="radio"][b-zpfadbxups] {
    grid-area: radio;
    align-self: center;
    accent-color: var(--accent, #c4b5fd);
    width: 16px; height: 16px; margin: 0;
}
.lc-title[b-zpfadbxups] { grid-area: title; font-weight: 600; font-size: 14px; color: var(--fg, #ececec); }
.lc-desc[b-zpfadbxups]  { grid-area: desc; font-size: 12.5px; color: var(--muted, #8a8a8a); line-height: 1.4; margin-top: 2px; }

.custom-fields[b-zpfadbxups] {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin: 4px 0 14px;
    padding: 14px;
    border: 1px dashed var(--border, #3a3a3a);
    border-radius: 10px;
}
.custom-fields .field[b-zpfadbxups] { display: flex; flex-direction: column; gap: 5px; }
.custom-fields .field-label[b-zpfadbxups] { font-size: 12.5px; font-weight: 600; color: var(--fg-dim, #d0d0d0); }
.custom-fields .field-label .muted[b-zpfadbxups] { font-weight: 400; }
.custom-fields textarea[b-zpfadbxups] {
    width: 100%;
    background: var(--bg-input, #0d0d0d);
    border: 1px solid var(--border, #3a3a3a);
    border-radius: 8px;
    color: var(--fg, #ececec);
    font: inherit;
    font-size: 14px;
    padding: 9px 11px;
    resize: vertical;
    box-sizing: border-box;
}
.custom-fields textarea:focus[b-zpfadbxups] {
    outline: none;
    border-color: var(--accent, #c4b5fd);
    box-shadow: 0 0 0 3px var(--focus-ring, rgba(196,181,253,.3));
}
/* _content/Buildessa/Components/Pages/Admin/Panel/Billing.razor.rz.scp.css */
.ptype-table[b-j4znslo8oc] {
    width: 100%;
    border-collapse: collapse;
    margin-top: 6px;
}

.ptype-table th[b-j4znslo8oc],
.ptype-table td[b-j4znslo8oc] {
    text-align: left;
    padding: 8px 10px;
    border-bottom: 1px solid var(--border, #e5e7eb);
    vertical-align: middle;
}

.ptype-table th[b-j4znslo8oc] {
    font-size: .82rem;
    font-weight: 600;
    color: var(--muted, #6b7280);
}

/* Keep the number/select controls compact in the grid. */
.ptype-table .form-control[b-j4znslo8oc] {
    max-width: 12rem;
}

.ptype-table td input[type="number"][b-j4znslo8oc] {
    max-width: 8rem;
    font-variant-numeric: tabular-nums;
}

.ptype-table .mono[b-j4znslo8oc] {
    font-size: .8rem;
    margin-left: 6px;
}

.ptype-toggle[b-j4znslo8oc] { text-align: center; }
.ptype-toggle input[b-j4znslo8oc] { width: 1rem; height: 1rem; }

/* A turned-off type is dimmed so it reads as "not offered" at a glance. */
.ptype-table tr.ptype-off td[b-j4znslo8oc] { opacity: 0.5; }
.ptype-table tr.ptype-off td.ptype-toggle[b-j4znslo8oc] { opacity: 1; }

/* ── Top-up bonus tiers ─────────────────────────────────────────── */
.bonus-table[b-j4znslo8oc] {
    border-collapse: collapse;
    margin: 4px 0 2px;
}

.bonus-table th[b-j4znslo8oc],
.bonus-table td[b-j4znslo8oc] {
    padding: 6px 14px 6px 0;
    text-align: left;
    vertical-align: middle;
}

.bonus-table th[b-j4znslo8oc] {
    font-size: .8rem;
    font-weight: 600;
    color: var(--muted, #6b7280);
}

.bonus-dollar[b-j4znslo8oc],
.bonus-pct[b-j4znslo8oc] {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: var(--muted, #6b7280);
}

.bonus-table input[type="number"][b-j4znslo8oc] {
    max-width: 6rem;
    font-variant-numeric: tabular-nums;
}
/* _content/Buildessa/Components/Pages/Admin/Panel/CustomizeLisa.razor.rz.scp.css */
/* Tabs */
.cl-tabs[b-bqf32q5xz7] {
    display: flex; gap: .25rem; margin: 0 0 1.1rem;
    border-bottom: 1px solid var(--border, #2a2a2a);
}
.cl-tab[b-bqf32q5xz7] {
    appearance: none; background: transparent; border: 0; cursor: pointer;
    font: inherit; font-weight: 560; font-size: .92rem; color: var(--muted, #8a8a8a);
    padding: .55rem .9rem; margin-bottom: -1px; border-bottom: 2px solid transparent;
    transition: color .12s ease, border-color .12s ease;
}
.cl-tab:hover[b-bqf32q5xz7] { color: var(--fg, #ececec); }
.cl-tab.active[b-bqf32q5xz7] { color: var(--fg, #ececec); border-bottom-color: var(--accent, #c4b5fd); }

.cl-card h2[b-bqf32q5xz7] { margin: 0 0 1rem; font-size: 1.05rem; }
.cl-note[b-bqf32q5xz7] { color: var(--muted, #8a8a8a); line-height: 1.5; margin: 0 0 1rem; max-width: 70ch; }
.cl-note strong[b-bqf32q5xz7] { color: var(--fg, #ececec); }

/* Toggle (mirrors the workstation admin switch) */
.cl-switch[b-bqf32q5xz7] { display: flex; align-items: flex-start; gap: .75rem; cursor: pointer; max-width: 680px; }
.cl-switch > input[b-bqf32q5xz7] { position: absolute; opacity: 0; width: 0; height: 0; }
.cl-switch-track[b-bqf32q5xz7] {
    position: relative; flex: 0 0 auto; margin-top: 2px; width: 42px; height: 24px;
    border-radius: 999px; background: var(--bg-overlay, #2a2a2a); border: 1px solid var(--border, #3a3a3a);
    transition: background .15s ease, border-color .15s ease;
}
.cl-switch-thumb[b-bqf32q5xz7] {
    position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%;
    background: var(--muted, #8a8a8a); transition: transform .15s ease, background .15s ease;
}
.cl-switch > input:checked + .cl-switch-track[b-bqf32q5xz7] {
    background: color-mix(in srgb, var(--accent, #c4b5fd) 34%, transparent); border-color: var(--accent, #c4b5fd);
}
.cl-switch > input:checked + .cl-switch-track .cl-switch-thumb[b-bqf32q5xz7] {
    transform: translateX(18px); background: var(--accent, #c4b5fd);
}
.cl-switch > input:focus-visible + .cl-switch-track[b-bqf32q5xz7] { outline: 2px solid var(--accent, #c4b5fd); outline-offset: 2px; }
.cl-switch-copy[b-bqf32q5xz7] { display: flex; flex-direction: column; gap: .25rem; }
.cl-switch-copy strong[b-bqf32q5xz7] { color: var(--fg, #ececec); font-weight: 640; }
.cl-switch-hint[b-bqf32q5xz7] { font-size: .84rem; color: var(--muted, #8a8a8a); line-height: 1.5; }
.cl-switch-hint em[b-bqf32q5xz7] { font-style: normal; font-weight: 560; color: var(--fg, #ececec); }

/* Persona radio cards */
.cl-personas[b-bqf32q5xz7] { display: flex; flex-direction: column; gap: .6rem; max-width: 720px; }
.cl-persona[b-bqf32q5xz7] {
    display: flex; align-items: flex-start; gap: .7rem; cursor: pointer;
    padding: .8rem .9rem; border-radius: 12px;
    border: 1px solid var(--border, #2a2a2a); background: var(--bg-elevated, #161616);
    transition: border-color .12s ease, background .12s ease;
}
.cl-persona:hover[b-bqf32q5xz7] { border-color: color-mix(in srgb, var(--accent, #c4b5fd) 45%, var(--border, #2a2a2a)); }
.cl-persona.sel[b-bqf32q5xz7] { border-color: var(--accent, #c4b5fd); background: color-mix(in srgb, var(--accent, #c4b5fd) 8%, transparent); }
.cl-persona > input[b-bqf32q5xz7] { margin-top: 3px; accent-color: var(--accent, #c4b5fd); flex: 0 0 auto; }
.cl-persona-body[b-bqf32q5xz7] { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.cl-persona-title[b-bqf32q5xz7] { font-weight: 640; color: var(--fg, #ececec); display: flex; align-items: center; gap: .5rem; }
.cl-persona-desc[b-bqf32q5xz7] { font-size: .85rem; color: var(--muted, #8a8a8a); line-height: 1.45; }
.cl-tag[b-bqf32q5xz7] {
    font-size: .64rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
    padding: 1px 7px; border-radius: 999px; color: var(--muted, #8a8a8a);
    background: var(--bg-overlay, #1a1a1a); border: 1px solid var(--border, #2a2a2a);
}

.cl-actions[b-bqf32q5xz7] { display: flex; align-items: center; gap: .7rem; margin-top: 1.2rem; flex-wrap: wrap; }
.cl-status[b-bqf32q5xz7] { font-size: .85rem; color: var(--muted, #8a8a8a); }
.cl-status.error[b-bqf32q5xz7] { color: var(--danger, #e5695f); }
/* _content/Buildessa/Components/Pages/Admin/Panel/Improvements.razor.rz.scp.css */
.imp-bar[b-7daxzowl3a] {
    display: flex; align-items: center; justify-content: space-between; gap: 1rem;
    flex-wrap: wrap; margin-bottom: 1rem;
}
.imp-filters[b-7daxzowl3a] { display: flex; flex-wrap: wrap; gap: .35rem; }
.imp-filter[b-7daxzowl3a] {
    appearance: none; cursor: pointer; font: inherit; font-size: .82rem; font-weight: 560;
    color: var(--muted, #8a8a8a); background: var(--bg-overlay, #1a1a1a);
    border: 1px solid var(--border, #2a2a2a); border-radius: 999px; padding: 4px 11px;
    display: inline-flex; align-items: center; gap: 6px;
}
.imp-filter:hover[b-7daxzowl3a] { color: var(--fg, #ececec); }
.imp-filter.on[b-7daxzowl3a] { color: var(--fg, #ececec); border-color: var(--accent, #c4b5fd); }
.imp-n[b-7daxzowl3a] {
    font-size: .7rem; font-weight: 700; color: var(--muted, #8a8a8a);
    background: var(--bg-elevated, #161616); border-radius: 999px; padding: 0 6px; min-width: 18px; text-align: center;
}
.imp-filter.on .imp-n[b-7daxzowl3a] { color: var(--accent, #c4b5fd); }
.imp-export[b-7daxzowl3a] { display: flex; gap: .5rem; }

/* Two-pane layout */
.imp-grid[b-7daxzowl3a] { display: grid; grid-template-columns: 1.5fr 1fr; gap: 1rem; align-items: start; }
.tblwrap[b-7daxzowl3a] { overflow-x: auto; padding: 0; }
.imp-table[b-7daxzowl3a] { width: 100%; border-collapse: collapse; font-size: .86rem; min-width: 520px; }
.imp-table th[b-7daxzowl3a] {
    text-align: left; font-weight: 600; font-size: .7rem; text-transform: uppercase; letter-spacing: .05em;
    color: var(--muted, #8a8a8a); padding: 9px 12px; border-bottom: 1px solid var(--border, #2a2a2a);
}
.imp-table td[b-7daxzowl3a] { padding: 9px 12px; border-bottom: 1px solid var(--border, #2a2a2a); vertical-align: middle; }
.imp-table tr:last-child td[b-7daxzowl3a] { border-bottom: 0; }
.imp-table tbody tr[b-7daxzowl3a] { cursor: pointer; }
.imp-table tbody tr:hover[b-7daxzowl3a] { background: var(--bg-overlay, #1a1a1a); }
.imp-table tbody tr.sel[b-7daxzowl3a] { background: color-mix(in srgb, var(--accent, #c4b5fd) 12%, transparent); }
.mono[b-7daxzowl3a] { font-family: "IBM Plex Mono", ui-monospace, monospace; }
.nowrap[b-7daxzowl3a] { white-space: nowrap; }
.imp-said[b-7daxzowl3a] { max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.imp-route[b-7daxzowl3a] { color: var(--muted, #8a8a8a); }

/* Chips + pills */
.chip[b-7daxzowl3a] {
    display: inline-flex; align-items: center; gap: 5px; font-size: .72rem; font-weight: 640;
    padding: 2px 9px; border-radius: 999px; white-space: nowrap;
}
.chip.bug[b-7daxzowl3a] { background: color-mix(in srgb, #c34646 16%, transparent); color: #e5695f; }
.chip.idea[b-7daxzowl3a] { background: color-mix(in srgb, var(--accent, #c4b5fd) 18%, transparent); color: var(--accent, #c4b5fd); }
.chip.love[b-7daxzowl3a] { background: color-mix(in srgb, #2f9268 18%, transparent); color: #5fbf8f; }
.chip.ask[b-7daxzowl3a] { background: var(--bg-overlay, #1a1a1a); color: var(--muted, #8a8a8a); }
.pill[b-7daxzowl3a] {
    font-size: .7rem; font-weight: 700; padding: 2px 8px; border-radius: 6px;
    border: 1px solid var(--border, #2a2a2a); white-space: nowrap; color: var(--muted, #8a8a8a);
}
.pill.new[b-7daxzowl3a] { color: var(--accent, #c4b5fd); border-color: color-mix(in srgb, var(--accent, #c4b5fd) 45%, var(--border, #2a2a2a)); }
.pill.rev[b-7daxzowl3a] { color: #d9903f; border-color: color-mix(in srgb, #d9903f 45%, var(--border, #2a2a2a)); }
.pill.plan[b-7daxzowl3a] { color: #5aa9e6; border-color: color-mix(in srgb, #5aa9e6 45%, var(--border, #2a2a2a)); }
.pill.done[b-7daxzowl3a] { color: #5fbf8f; border-color: color-mix(in srgb, #5fbf8f 45%, var(--border, #2a2a2a)); }
.pill.decl[b-7daxzowl3a] { color: var(--muted, #8a8a8a); }

/* Detail pane */
.imp-detail[b-7daxzowl3a] { padding: 16px 18px; position: sticky; top: 12px; }
.imp-d-head[b-7daxzowl3a] { display: flex; align-items: center; gap: .5rem; margin-bottom: .8rem; }
.imp-said-full[b-7daxzowl3a] { font-size: .95rem; line-height: 1.55; color: var(--fg, #ececec); white-space: pre-wrap; word-wrap: break-word; }
.imp-summary[b-7daxzowl3a] { margin-top: .7rem; font-size: .86rem; color: var(--muted, #8a8a8a); line-height: 1.5; }
.imp-summary .k[b-7daxzowl3a] { font-weight: 640; color: var(--fg, #ececec); margin-right: 5px; }
.imp-meta[b-7daxzowl3a] { display: grid; grid-template-columns: auto 1fr; gap: 4px 12px; margin: 1rem 0; font-size: .84rem; }
.imp-meta dt[b-7daxzowl3a] { color: var(--muted, #8a8a8a); }
.imp-meta dd[b-7daxzowl3a] { margin: 0; color: var(--fg, #ececec); overflow-wrap: anywhere; }
.imp-shot[b-7daxzowl3a] { display: block; margin: 0 0 1rem; border: 1px solid var(--border, #2a2a2a); border-radius: 10px; overflow: hidden; }
.imp-shot img[b-7daxzowl3a] { display: block; width: 100%; height: auto; }

.imp-triage[b-7daxzowl3a] { border-top: 1px solid var(--border, #2a2a2a); padding-top: 1rem; display: flex; flex-direction: column; gap: .7rem; }
.imp-field[b-7daxzowl3a] { display: flex; flex-direction: column; gap: .25rem; font-size: .8rem; color: var(--muted, #8a8a8a); }
.imp-field select[b-7daxzowl3a], .imp-field textarea[b-7daxzowl3a] {
    font: inherit; font-size: .88rem; color: var(--fg, #ececec);
    background: var(--bg-elevated, #161616); border: 1px solid var(--border, #2a2a2a);
    border-radius: 8px; padding: 7px 10px; resize: vertical;
}
.imp-field select:focus[b-7daxzowl3a], .imp-field textarea:focus[b-7daxzowl3a] { outline: none; border-color: var(--accent, #c4b5fd); }
.imp-actions[b-7daxzowl3a] { display: flex; align-items: center; gap: .7rem; }
.small[b-7daxzowl3a] { font-size: .8rem; }

@media (max-width: 860px) {
    .imp-grid[b-7daxzowl3a] { grid-template-columns: 1fr; }
    .imp-detail[b-7daxzowl3a] { position: static; }
}
/* _content/Buildessa/Components/Pages/Admin/Panel/Offerings.razor.rz.scp.css */
.of-flash[b-27kowfa199] {
    margin: 0 0 1rem; padding: .5rem .75rem; border-radius: 8px;
    background: var(--bg-overlay, #1a1a1a); border: 1px solid var(--accent, #c4b5fd);
    color: var(--fg, #ececec); font-size: .88rem;
}

.of-editor[b-27kowfa199] { border-color: var(--accent, #c4b5fd); }
.of-editor h2[b-27kowfa199] { margin: 0 0 .8rem; }
.of-grid[b-27kowfa199] { display: grid; grid-template-columns: repeat(2, 1fr); gap: .7rem 1rem; }
@media (max-width: 640px) { .of-grid[b-27kowfa199] { grid-template-columns: 1fr; } }
.of-field[b-27kowfa199] { display: flex; flex-direction: column; gap: 3px; font-size: .82rem; color: var(--muted, #8a8a8a); }
.of-field.of-wide[b-27kowfa199] { grid-column: 1 / -1; }
.of-field.of-inline[b-27kowfa199] { flex-direction: row; align-items: center; gap: .5rem; }
.of-narrow[b-27kowfa199] { max-width: 110px; }

.of-row[b-27kowfa199] { display: flex; align-items: center; flex-wrap: wrap; gap: 1.2rem; margin: 1rem 0 .2rem; }
.of-check[b-27kowfa199] { display: inline-flex; align-items: center; gap: 6px; font-size: .9rem; color: var(--fg, #ececec); }

.of-features[b-27kowfa199] { margin-top: 1rem; }
.of-features-label[b-27kowfa199] { font-size: .82rem; color: var(--muted, #8a8a8a); }
.of-feature-list[b-27kowfa199] { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .5rem; }
.of-feature[b-27kowfa199] {
    display: inline-flex; align-items: center; gap: 6px; font-size: .86rem;
    padding: .35rem .6rem; border: 1px solid var(--border, #2a2a2a); border-radius: 8px;
    background: var(--bg-elevated, #161616); cursor: pointer;
}
.of-feature.soon[b-27kowfa199] { opacity: .85; }
.of-soon-tag[b-27kowfa199] { font-size: .62rem; color: var(--amber, #e0b25e); border: 1px solid var(--amber, #e0b25e); border-radius: 4px; padding: 0 .25rem; }

.of-term[b-27kowfa199] { margin-top: 1rem; }
.of-term-row[b-27kowfa199] { display: flex; align-items: flex-end; flex-wrap: wrap; gap: .6rem 1rem; margin-top: .5rem; }
.of-term-row .form-control[b-27kowfa199] { max-width: 260px; }

.of-editor-actions[b-27kowfa199] { display: flex; gap: .6rem; margin-top: 1.1rem; }

.of-spec[b-27kowfa199] { margin-bottom: 1rem; }
.of-spec-head[b-27kowfa199] { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.of-spec-head h2[b-27kowfa199] { margin: 0; font-size: 1.15rem; }
.of-count[b-27kowfa199] { font-size: .8rem; font-weight: 400; color: var(--muted, #8a8a8a); margin-left: .4rem; }

.of-table[b-27kowfa199] { width: 100%; margin-top: .8rem; }
.of-table .ta-r[b-27kowfa199] { text-align: right; }
.of-name[b-27kowfa199] { font-weight: 600; color: var(--fg, #ececec); }
.of-badge[b-27kowfa199] {
    font-size: .64rem; text-transform: uppercase; letter-spacing: .05em; font-weight: 700;
    padding: 1px 6px; border-radius: 999px; margin-left: .4rem;
    background: var(--bg-overlay, #1a1a1a); color: var(--muted, #8a8a8a); border: 1px solid var(--border, #2a2a2a);
}
.of-badge.audience[b-27kowfa199] { color: var(--accent, #c4b5fd); border-color: var(--accent, #c4b5fd); }
.of-badge.term[b-27kowfa199] { color: var(--amber, #e0b25e); border-color: var(--amber, #e0b25e); text-transform: none; letter-spacing: 0; }
.of-window[b-27kowfa199] { font-size: .8rem; color: var(--muted, #8a8a8a); white-space: nowrap; }
.of-tools[b-27kowfa199] { font-size: .8rem; color: var(--muted, #8a8a8a); max-width: 260px; }
.of-inactive td[b-27kowfa199] { opacity: .5; }
.of-actions[b-27kowfa199] { display: flex; gap: 6px; justify-content: flex-end; flex-wrap: wrap; }
/* _content/Buildessa/Components/Pages/Admin/Panel/Paths.razor.rz.scp.css */
/* §5.22 — the prompt-tree admin view. */

.path-card[b-ca737kpwxi] { margin-bottom: 14px; }

.path-head[b-ca737kpwxi] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
}

.path-title[b-ca737kpwxi] { font-size: 16px; margin: 0; }

.path-key[b-ca737kpwxi] {
    margin-left: 8px;
    padding: 1px 8px;
    border-radius: 9px;
    font-size: 11px;
    font-weight: 600;
    background: rgba(109, 139, 214, 0.16);
    color: #6d8bd6;
    vertical-align: middle;
}

.path-meta[b-ca737kpwxi] { font-size: 11.5px; opacity: 0.65; white-space: nowrap; }

.path-desc[b-ca737kpwxi] { font-size: 13px; opacity: 0.85; margin: 6px 0 8px; }

.path-module summary[b-ca737kpwxi] {
    cursor: pointer;
    font-size: 12.5px;
    opacity: 0.75;
}

.path-module-text[b-ca737kpwxi] {
    margin-top: 8px;
    padding: 10px 12px;
    border: 1px solid rgba(127, 127, 127, 0.22);
    border-radius: 6px;
    background: rgba(127, 127, 127, 0.06);
    font-size: 11.5px;
    line-height: 1.5;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}

.path-branches[b-ca737kpwxi] { margin-top: 10px; }

.path-branch[b-ca737kpwxi] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 3px 0 3px 10px;
    font-size: 12.5px;
}

.path-branch.is-disabled[b-ca737kpwxi] { opacity: 0.5; }

.branch-connector[b-ca737kpwxi] { opacity: 0.45; font-family: monospace; }

.branch-name[b-ca737kpwxi] { font-weight: 600; }

.branch-meta[b-ca737kpwxi] { font-size: 11px; opacity: 0.6; }

.path-module-id[b-ca737kpwxi] {
    margin: 0 6px;
    padding: 0 6px;
    border-radius: 8px;
    font-family: ui-monospace, monospace;
    font-size: 10px;
    background: rgba(127, 127, 127, 0.12);
}
/* _content/Buildessa/Components/Pages/Admin/Panel/Search.razor.rz.scp.css */
/* API-key input + eye toggle, side-by-side so reveal/hide doesn't
   reflow the rest of the form. Input flexes to fill; eye stays a
   fixed square. */
.key-input-row[b-4mju5qvcda] {
    display: flex;
    gap: 6px;
    align-items: stretch;
}
.key-input-row .key-input[b-4mju5qvcda] {
    flex: 1;
    min-width: 0;
}
.btn-icon[b-4mju5qvcda] {
    flex: 0 0 auto;
    padding: 0 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 5px;
    cursor: pointer;
}
.btn-icon:disabled[b-4mju5qvcda] {
    opacity: 0.4;
    cursor: not-allowed;
}

/* Test-button result panel — green/red bar so admins see at a glance
   whether the round-trip worked. Anchored inside the card; doesn't
   leak the chrome of the page. */

.test-result[b-4mju5qvcda] {
    margin-top: 10px;
    padding: 8px 10px;
    border-radius: 4px;
    font-size: 12px;
    line-height: 1.45;
}

.test-result.test-ok[b-4mju5qvcda] {
    background: color-mix(in srgb, var(--success, #2a9d8f) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--success, #2a9d8f) 40%, transparent);
    color: var(--fg);
}

.test-result.test-fail[b-4mju5qvcda] {
    background: color-mix(in srgb, var(--danger, #e63946) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--danger, #e63946) 35%, transparent);
    color: var(--fg);
}

.test-summary[b-4mju5qvcda] {
    display: flex;
    gap: 8px;
    align-items: baseline;
}

.test-summary strong[b-4mju5qvcda] {
    font-size: 14px;
}

.test-result.test-ok .test-summary strong[b-4mju5qvcda] {
    color: var(--success, #2a9d8f);
}

.test-result.test-fail .test-summary strong[b-4mju5qvcda] {
    color: var(--danger, #e63946);
}

.test-detail[b-4mju5qvcda] {
    margin-top: 4px;
    padding-left: 18px;
}

.test-detail a[b-4mju5qvcda] {
    color: var(--accent);
}

.test-error-detail[b-4mju5qvcda] {
    margin: 4px 0 0;
    padding: 6px 8px;
    background: var(--bg-overlay);
    border-radius: 3px;
    font-family: var(--mono, monospace);
    font-size: 11px;
    white-space: pre-wrap;
    word-break: break-word;
    max-height: 200px;
    overflow-y: auto;
}
/* _content/Buildessa/Components/Pages/Admin/Panel/StorageAdmin.razor.rz.scp.css */
/* Secret input + eye toggle and the test-result block — same patterns as
   Search/AuthProviders (scoped styles don't cross components, so the page
   carries its own copy). */
.key-input-row[b-ca1cvoruai] {
    display: flex;
    gap: 6px;
    align-items: stretch;
}

.key-input-row .key-input[b-ca1cvoruai] {
    flex: 1;
    min-width: 0;
}

.btn-icon[b-ca1cvoruai] {
    flex: 0 0 auto;
    padding: 0 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 5px;
    cursor: pointer;
}

.btn-icon:disabled[b-ca1cvoruai] {
    opacity: 0.4;
    cursor: not-allowed;
}

.test-result[b-ca1cvoruai] {
    margin-top: 10px;
    padding: 8px 10px;
    border-radius: 4px;
    font-size: 12px;
    line-height: 1.45;
}

.test-result.test-ok[b-ca1cvoruai] {
    background: color-mix(in srgb, var(--success, #2a9d8f) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--success, #2a9d8f) 40%, transparent);
    color: var(--fg);
}

.test-result.test-fail[b-ca1cvoruai] {
    background: color-mix(in srgb, var(--danger, #e63946) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--danger, #e63946) 35%, transparent);
    color: var(--fg);
}

.test-summary[b-ca1cvoruai] {
    display: flex;
    gap: 8px;
    align-items: baseline;
}

.test-summary strong[b-ca1cvoruai] {
    font-size: 14px;
}

.test-result.test-ok .test-summary strong[b-ca1cvoruai] {
    color: var(--success, #2a9d8f);
}

.test-result.test-fail .test-summary strong[b-ca1cvoruai] {
    color: var(--danger, #e63946);
}

.test-error-detail[b-ca1cvoruai] {
    margin: 4px 0 0;
    padding: 6px 8px;
    background: var(--bg-overlay);
    border-radius: 3px;
    font-family: var(--mono, monospace);
    font-size: 11px;
    white-space: pre-wrap;
    word-break: break-word;
}
/* _content/Buildessa/Components/Pages/Admin/Panel/Subscriptions.razor.rz.scp.css */
.subs-filter[b-izl0s0fn74] {
    display: flex; align-items: center; gap: .75rem; margin-bottom: 1rem;
}
.subs-filter .form-control[b-izl0s0fn74] { max-width: 320px; }

/* Grant-to-a-user panel */
.subs-grantcard h2[b-izl0s0fn74] { margin: 0 0 .25rem; }
.subs-pick-in[b-izl0s0fn74] { max-width: 340px; }
.subs-pick-list[b-izl0s0fn74] {
    display: flex; flex-direction: column; margin-top: .5rem;
    border: 1px solid var(--border, #2a2a2a); border-radius: 8px; overflow: hidden;
    max-width: 340px;
}
.subs-pick-row[b-izl0s0fn74] {
    text-align: left; background: transparent; border: 0; cursor: pointer;
    padding: .45rem .6rem; color: var(--fg, #ececec); font: inherit;
    border-bottom: 1px solid var(--border, #2a2a2a);
}
.subs-pick-row:last-child[b-izl0s0fn74] { border-bottom: 0; }
.subs-pick-row:hover[b-izl0s0fn74] { background: var(--bg-overlay, #1a1a1a); }

.subs-picked[b-izl0s0fn74] { display: flex; align-items: center; gap: .6rem; margin-bottom: .8rem; }
.subs-picked-name[b-izl0s0fn74] { font-weight: 640; color: var(--fg, #ececec); }

.subs-grantrow[b-izl0s0fn74] {
    display: flex; align-items: center; flex-wrap: wrap; gap: .6rem;
    padding: .5rem 0;
}
.subs-grantrow > label:first-child[b-izl0s0fn74] {
    min-width: 130px; font-size: .85rem; color: var(--muted, #8a8a8a);
}
.subs-grantrow .form-control[b-izl0s0fn74] { max-width: 240px; }
.subs-grantrow .subs-min-in[b-izl0s0fn74] { max-width: 100px; }
.subs-check[b-izl0s0fn74] {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: .84rem; color: var(--muted, #8a8a8a);
}

.subs-flash[b-izl0s0fn74] {
    margin: 0 0 1rem; padding: .5rem .75rem; border-radius: 8px;
    background: var(--bg-overlay, #1a1a1a); border: 1px solid var(--accent, #c4b5fd);
    color: var(--fg, #ececec); font-size: .88rem;
}

.subs-owner[b-izl0s0fn74] {
    border: 1px solid var(--border, #2a2a2a); border-radius: 12px;
    padding: .85rem 1rem; margin-bottom: 1rem; background: var(--bg-elevated, #161616);
}
.subs-owner-head[b-izl0s0fn74] {
    display: flex; align-items: baseline; justify-content: space-between;
    flex-wrap: wrap; gap: .5rem;
}
.subs-owner-id[b-izl0s0fn74] { display: flex; align-items: center; gap: .5rem; min-width: 0; }
.subs-owner-name[b-izl0s0fn74] { font-weight: 640; color: var(--fg, #ececec); }
.subs-badge[b-izl0s0fn74] {
    font-size: .66rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
    padding: 1px 7px; border-radius: 999px;
    background: var(--bg-overlay, #1a1a1a); color: var(--muted, #8a8a8a); border: 1px solid var(--border, #2a2a2a);
}
.subs-badge.org[b-izl0s0fn74] { color: var(--accent, #c4b5fd); border-color: var(--accent, #c4b5fd); }

.subs-owner-totals[b-izl0s0fn74] { display: flex; align-items: baseline; gap: .6rem; }
.subs-total[b-izl0s0fn74] { font-weight: 640; color: var(--fg, #ececec); font-variant-numeric: tabular-nums; }
.subs-sub[b-izl0s0fn74] { font-size: .82rem; color: var(--muted, #8a8a8a); font-variant-numeric: tabular-nums; }

.subs-grant[b-izl0s0fn74] {
    display: flex; align-items: center; flex-wrap: wrap; gap: .5rem;
    margin: .7rem 0 .2rem; padding: .5rem .6rem;
    background: var(--bg-overlay, #1a1a1a); border-radius: 8px;
}
.subs-grant label[b-izl0s0fn74] { font-size: .8rem; color: var(--muted, #8a8a8a); }
.subs-grant-hint[b-izl0s0fn74] { font-size: .76rem; color: var(--muted, #8a8a8a); }
.subs-min-in[b-izl0s0fn74] { width: 90px; }

.subs-nosubs[b-izl0s0fn74] { margin: .5rem 0 0; }

.subs-table[b-izl0s0fn74] { margin-top: .8rem; width: 100%; }
.subs-table .ta-r[b-izl0s0fn74] { text-align: right; }
.subs-bucket[b-izl0s0fn74] { font-weight: 600; color: var(--fg, #ececec); font-variant-numeric: tabular-nums; }
.subs-bucket-of[b-izl0s0fn74] { color: var(--muted, #8a8a8a); font-size: .8rem; }
.subs-ended td[b-izl0s0fn74] { opacity: .55; }

.subs-actions[b-izl0s0fn74] {
    display: flex; align-items: center; justify-content: flex-end; gap: 6px; flex-wrap: wrap;
}
.subs-actions .subs-min-in[b-izl0s0fn74] { width: 76px; }
/* Buttons (btn-primary / btn-ghost / btn-ghost.danger) come from admin.css. */
/* _content/Buildessa/Components/Pages/Admin/Panel/TakeoffBenchmarkAdmin.razor.rz.scp.css */
/* The accuracy record. The unmeasured state is styled as loudly as a bad
   score, because "no number" is the claim being made and it must not read
   as a quiet pass. */
.tb-claim[b-xldqg8yfwj] {
    padding: 12px 15px; border-radius: 9px; margin: 10px 0 18px;
    display: flex; flex-direction: column; gap: 5px; font-size: 14px; line-height: 1.5;
    background: color-mix(in srgb, var(--ok, #1a7f4e) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--ok, #1a7f4e) 26%, transparent);
}
.tb-claim.none[b-xldqg8yfwj] {
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
    border-color: color-mix(in srgb, var(--warning, #b48309) 30%, transparent);
}
.tb-claim.none strong[b-xldqg8yfwj] { color: var(--warning, #8a6207); }
.tb-fine[b-xldqg8yfwj] { font-size: 12.5px; color: var(--muted); }

.tb-run[b-xldqg8yfwj] { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin: 8px 0; }
.tb-pick[b-xldqg8yfwj] { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); }
.tb-pages[b-xldqg8yfwj] {
    border: 1px solid var(--border); border-radius: 7px; padding: 6px 9px;
    font-size: 13px; width: 170px; background: var(--surface, #fff); color: inherit;
}

/* The money, before it is spent. */
.tb-quote[b-xldqg8yfwj] {
    padding: 12px 15px; border-radius: 9px; margin: 10px 0; line-height: 1.5;
    display: flex; gap: 12px; align-items: center; flex-wrap: wrap; font-size: 13.5px;
    background: color-mix(in srgb, var(--accent, #2563eb) 9%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent, #2563eb) 26%, transparent);
}
.tb-refusal[b-xldqg8yfwj] {
    padding: 11px 14px; border-radius: 9px; margin: 10px 0;
    font-size: 13.5px; line-height: 1.5;
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning, #b48309) 30%, transparent);
}

.tb-table[b-xldqg8yfwj] { width: 100%; font-size: 13px; }
.tb-table .num[b-xldqg8yfwj] { text-align: right; font-variant-numeric: tabular-nums; }
.tb-table tr.noscore[b-xldqg8yfwj] { opacity: .68; }
.tb-verdict[b-xldqg8yfwj] { max-width: 340px; font-size: 12.5px; color: var(--muted); }
.tb-stale[b-xldqg8yfwj] {
    margin-left: 6px; font-size: 10.5px; letter-spacing: .05em; text-transform: uppercase;
    font-weight: 700; color: var(--warning, #8a6207);
}
/* _content/Buildessa/Components/Pages/Admin/Panel/ThemeEditor.razor.rz.scp.css */
/* Light/Dark palette toggle for an adaptive theme. */
.palette-toggle[b-7rwddcj4xx] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 4px 0 14px;
    padding: 4px;
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 999px;
    background: var(--bg-elevated, #161616);
}

.palette-toggle .pt-label[b-7rwddcj4xx] {
    font-size: 12px;
    color: var(--muted, #8a8a8a);
    padding: 0 6px 0 8px;
}

.palette-toggle .pt-opt[b-7rwddcj4xx] {
    border: 0;
    background: transparent;
    color: var(--fg-dim, #d0d0d0);
    font: inherit;
    font-size: 13px;
    font-weight: 600;
    padding: 6px 14px;
    border-radius: 999px;
    cursor: pointer;
    transition: background 0.12s ease, color 0.12s ease;
}

.palette-toggle .pt-opt:hover[b-7rwddcj4xx] { color: var(--fg, #ececec); }

.palette-toggle .pt-opt.active[b-7rwddcj4xx] {
    background: var(--accent, #c4b5fd);
    color: var(--accent-fg, #1a1a1a);
}
/* _content/Buildessa/Components/Pages/Admin/Panel/Tools.razor.rz.scp.css */
.tools-table[b-87fu8o40s7] { width: 100%; border-collapse: collapse; font-size: 13px; }
.tools-table th[b-87fu8o40s7], .tools-table td[b-87fu8o40s7] {
    text-align: left; padding: 10px; vertical-align: top;
    border-bottom: 1px solid rgba(127,127,127,0.18);
}
.tool-key[b-87fu8o40s7] {
    font-family: ui-monospace, monospace; font-size: 11px;
    padding: 1px 7px; border-radius: 8px;
    background: rgba(109,139,214,0.14); color: #6d8bd6;
}
.tool-title[b-87fu8o40s7] { font-weight: 600; margin-top: 4px; }
.tool-off[b-87fu8o40s7] { opacity: 0.55; }
.tool-count[b-87fu8o40s7] { text-align: right; font-variant-numeric: tabular-nums; }
.tool-planned[b-87fu8o40s7] { margin-top: 6px; font-size: 12px; opacity: 0.75; }
.tool-planned-chip[b-87fu8o40s7] {
    display: inline-block; margin-right: 6px; padding: 0 7px;
    border-radius: 8px; font-size: 10px; font-weight: 700;
    background: rgba(214,165,109,0.2); color: #b07f3e;
}
.tool-live[b-87fu8o40s7] { display: block; margin-top: 4px; font-size: 11.5px; font-weight: 600; }
.tool-live.on[b-87fu8o40s7] { color: #4c9a5f; }
.tool-live.off[b-87fu8o40s7] { opacity: 0.6; }
/* _content/Buildessa/Components/Pages/Admin/Panel/TraceViewer.razor.rz.scp.css */
/* Turn-trace viewer — Visio-style vertical block flow with connectors,
   click-to-expand popups. Neutral colors: inherits the admin theme. */

.trace-index[b-ypxyfxzr8p] {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.trace-index th[b-ypxyfxzr8p],
.trace-index td[b-ypxyfxzr8p] {
    text-align: left;
    padding: 8px 10px;
    border-bottom: 1px solid rgba(127, 127, 127, 0.18);
}

.trace-turn-head[b-ypxyfxzr8p] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}

.trace-user-msg[b-ypxyfxzr8p] {
    font-size: 13px;
    font-weight: 600;
    overflow-wrap: anywhere;
}

.trace-role[b-ypxyfxzr8p] {
    font-size: 10px;
    letter-spacing: 0.6px;
    opacity: 0.6;
    margin-right: 6px;
}

.trace-turn-meta[b-ypxyfxzr8p] {
    font-size: 11.5px;
    opacity: 0.65;
    white-space: nowrap;
}

/* The flow: each node = connector stub + block. Tool nodes indent to read
   as a branch off the loop's spine. */
.trace-flow[b-ypxyfxzr8p] {
    display: flex;
    flex-direction: column;
}

.trace-node[b-ypxyfxzr8p] {
    position: relative;
    padding-left: 18px;
}

.trace-node-tool[b-ypxyfxzr8p] {
    padding-left: 54px;
}

.trace-connector[b-ypxyfxzr8p] {
    position: absolute;
    left: 8px;
    top: 0;
    bottom: 0;
    width: 2px;
    background: rgba(127, 127, 127, 0.35);
}

.trace-node-tool .trace-connector[b-ypxyfxzr8p]::after {
    /* elbow into the indented tool block */
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    width: 36px;
    height: 2px;
    background: rgba(127, 127, 127, 0.35);
}

.trace-node:first-child .trace-connector[b-ypxyfxzr8p] { top: 50%; }
.trace-node:last-child .trace-connector[b-ypxyfxzr8p] { bottom: 50%; }

.trace-block[b-ypxyfxzr8p] {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    width: 100%;
    text-align: left;
    margin: 4px 0;
    padding: 8px 10px;
    border: 1px solid rgba(127, 127, 127, 0.3);
    border-radius: 8px;
    background: rgba(127, 127, 127, 0.05);
    cursor: pointer;
    font: inherit;
    color: inherit;
}

.trace-block:hover[b-ypxyfxzr8p] {
    background: rgba(127, 127, 127, 0.12);
}

.trace-llm[b-ypxyfxzr8p] { border-left: 3px solid #6d8bd6; }
.trace-tool[b-ypxyfxzr8p] { border-left: 3px solid #d6a56d; }
.trace-note[b-ypxyfxzr8p] { border-left: 3px solid rgba(127, 127, 127, 0.5); }

.trace-block-icon[b-ypxyfxzr8p] { flex: 0 0 auto; }

.trace-block-body[b-ypxyfxzr8p] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.trace-block-stage[b-ypxyfxzr8p] {
    font-size: 12.5px;
    font-weight: 600;
}

.trace-block-meta[b-ypxyfxzr8p] {
    font-size: 11px;
    opacity: 0.65;
    overflow-wrap: anywhere;
}

/* The model's answer / tool result, clipped, right in the flow. */
.trace-block-preview[b-ypxyfxzr8p] {
    margin-top: 3px;
    font-size: 11.5px;
    line-height: 1.4;
    opacity: 0.8;
    overflow-wrap: anywhere;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.trace-failed[b-ypxyfxzr8p] {
    border-left-color: #d66d6d;
    background: rgba(214, 109, 109, 0.07);
}

/* ── Popup ─────────────────────────────────────────────────────────── */

.trace-overlay[b-ypxyfxzr8p] {
    position: fixed;
    inset: 0;
    z-index: 4000;
    background: rgba(15, 18, 22, 0.55);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
}

.trace-modal[b-ypxyfxzr8p] {
    background: var(--surface, #fff);
    color: inherit;
    width: min(1000px, 96vw);
    height: min(760px, 92vh);
    border-radius: 10px;
    box-shadow: 0 18px 60px rgba(0, 0, 0, 0.35);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.trace-modal-head[b-ypxyfxzr8p] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border-bottom: 1px solid rgba(127, 127, 127, 0.25);
}

.trace-modal-title[b-ypxyfxzr8p] { font-weight: 600; font-size: 13px; }

.trace-modal-meta[b-ypxyfxzr8p] { font-size: 11.5px; opacity: 0.65; flex: 1; }

.trace-modal-close[b-ypxyfxzr8p] {
    border: none;
    background: transparent;
    font-size: 15px;
    cursor: pointer;
    color: inherit;
    opacity: 0.7;
    padding: 4px 8px;
}

.trace-modal-body[b-ypxyfxzr8p] {
    flex: 1;
    overflow: auto;
    padding: 12px 14px;
}

.trace-modal-label[b-ypxyfxzr8p] {
    font-size: 11px;
    letter-spacing: 0.5px;
    text-transform: uppercase;
    opacity: 0.6;
    margin: 10px 0 6px;
}

.trace-msg[b-ypxyfxzr8p] { margin-bottom: 10px; }

.trace-msg-role[b-ypxyfxzr8p] {
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    opacity: 0.7;
    margin-bottom: 2px;
}

.trace-msg-text[b-ypxyfxzr8p] {
    margin: 0;
    padding: 8px 10px;
    border: 1px solid rgba(127, 127, 127, 0.22);
    border-radius: 6px;
    background: rgba(127, 127, 127, 0.06);
    font-size: 12px;
    line-height: 1.5;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}

.trace-msg-out[b-ypxyfxzr8p] {
    border-left: 3px solid #6d8bd6;
}

/* §5.22 — the prompt-tree branch chip: where this call's prompt came from. */
.trace-branch[b-ypxyfxzr8p] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 9px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.3px;
    background: rgba(109, 139, 214, 0.16);
    color: #6d8bd6;
    vertical-align: middle;
}

.trace-branch-spine[b-ypxyfxzr8p] {
    background: rgba(127, 127, 127, 0.14);
    color: inherit;
    opacity: 0.65;
}

/* THE ROUTE — the turn's path through the prompt tree, at a glance. */
.trace-route[b-ypxyfxzr8p] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 2px 0 10px;
}

.route-item[b-ypxyfxzr8p] {
    padding: 2px 9px;
    border-radius: 10px;
    font-size: 11px;
    font-weight: 600;
    background: rgba(127, 127, 127, 0.10);
    border: 1px solid rgba(127, 127, 127, 0.18);
}

.route-path[b-ypxyfxzr8p] {
    background: rgba(109, 139, 214, 0.16);
    color: #6d8bd6;
    border-color: rgba(109, 139, 214, 0.3);
}

.route-fired[b-ypxyfxzr8p] {
    background: rgba(214, 165, 109, 0.18);
    color: #b07f3e;
    border-color: rgba(214, 165, 109, 0.4);
}

.route-tool[b-ypxyfxzr8p] { opacity: 0.85; }

.route-warn[b-ypxyfxzr8p] {
    background: rgba(214, 109, 109, 0.12);
    color: #c05555;
    border-color: rgba(214, 109, 109, 0.35);
}

/* The prompt index — system-prompt fingerprint, comparable across runs. */
.trace-prompt-id[b-ypxyfxzr8p] {
    margin-left: 6px;
    padding: 0 6px;
    border-radius: 8px;
    font-family: ui-monospace, monospace;
    font-size: 10px;
    background: rgba(127, 127, 127, 0.12);
    opacity: 0.8;
}
/* _content/Buildessa/Components/Pages/Admin/Panel/WorkstationDistribution.razor.rz.scp.css */
.dist-cardhead[b-6okrkkg0m8] {
    padding: 14px 18px 6px;
}
.dist-cardhead h2[b-6okrkkg0m8] {
    margin: 0 0 4px;
    font-size: 15px;
}
.dist-cardhead .hint[b-6okrkkg0m8] {
    margin: 0;
    font-size: 12.5px;
    color: var(--muted);
    line-height: 1.55;
}
.dist-cardhead code[b-6okrkkg0m8] {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 4px;
    padding: 1px 5px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
}

/* Upload form ──────────────────────────────────────────────────── */

.dist-upload[b-6okrkkg0m8] {
    padding: 8px 18px 16px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.dist-upload-row[b-6okrkkg0m8] {
    display: grid;
    /* Variant compact on the left; file picker takes the rest. Both
       collapse to single column under ~640 px (rule below). */
    grid-template-columns: 280px 1fr;
    gap: 12px;
    align-items: end;
}
@media (max-width: 640px) {
    .dist-upload-row[b-6okrkkg0m8] {
        grid-template-columns: 1fr;
    }
}
.dist-upload-row label[b-6okrkkg0m8],
.dist-upload-notes[b-6okrkkg0m8],
.dist-upload-file[b-6okrkkg0m8],
.dist-advanced-body label[b-6okrkkg0m8] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: 12px;
}
.dist-upload-row .hint[b-6okrkkg0m8],
.dist-upload-notes .hint[b-6okrkkg0m8],
.dist-upload-file .hint[b-6okrkkg0m8],
.dist-advanced-body .hint[b-6okrkkg0m8] {
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    font-size: 11px;
}

/* Collapsible "Override version or release notes" block.
   The default <details> marker is fine but we restyle the summary so
   it reads as a small inline toggle rather than a heavyweight section. */
.dist-advanced[b-6okrkkg0m8] {
    border-top: 1px dashed var(--border);
    padding-top: 10px;
    margin-top: 2px;
}
.dist-advanced > summary[b-6okrkkg0m8] {
    cursor: pointer;
    user-select: none;
    color: var(--muted);
    font-size: 12.5px;
    list-style: none;          /* hide default disclosure triangle */
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 2px 0;
}
.dist-advanced > summary[b-6okrkkg0m8]::-webkit-details-marker { display: none; }
.dist-advanced > summary[b-6okrkkg0m8]::before {
    content: '▸';
    font-size: 10px;
    color: var(--muted);
    transition: transform 120ms ease;
    display: inline-block;
    width: 10px;
}
.dist-advanced[open] > summary[b-6okrkkg0m8]::before {
    transform: rotate(90deg);
}
.dist-advanced > summary:hover[b-6okrkkg0m8] {
    color: var(--fg);
}
.dist-advanced-body[b-6okrkkg0m8] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-top: 10px;
}
.dist-upload .form-control[b-6okrkkg0m8] {
    background: var(--bg-input);
    border: 1px solid var(--border);
    color: var(--fg);
    border-radius: 6px;
    padding: 6px 10px;
    font: inherit;
    font-size: 13.5px;
}
.dist-upload textarea.form-control[b-6okrkkg0m8] {
    resize: vertical;
    min-height: 60px;
}
.dist-upload-filehint[b-6okrkkg0m8] {
    color: var(--fg-dim);
    font-size: 12.5px;
}
.dist-error[b-6okrkkg0m8] {
    color: var(--danger);
    font-size: 12.5px;
}
.dist-upload-actions[b-6okrkkg0m8] {
    display: flex;
    gap: 12px;
    align-items: center;
    margin-top: 4px;
}

/* Progress: full-width bar with a label underneath. Shows during
   the file-staging phase (after pick) and the commit phase (after
   Upload click); _uploadProgressLabel tells the user which one. */
.dist-progress-wrap[b-6okrkkg0m8] {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.dist-progress[b-6okrkkg0m8] {
    width: 100%;
    height: 6px;
    appearance: none;
    border: none;
    border-radius: 3px;
    overflow: hidden;
    background: var(--bg-overlay);
}
.dist-progress[b-6okrkkg0m8]::-webkit-progress-bar { background: var(--bg-overlay); }
.dist-progress[b-6okrkkg0m8]::-webkit-progress-value {
    background: var(--accent, #7c5cff);
    transition: width 120ms ease;
}
.dist-progress[b-6okrkkg0m8]::-moz-progress-bar { background: var(--accent, #7c5cff); }
.dist-progress-label[b-6okrkkg0m8] {
    font-size: 12px;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}

/* Preview block — appears after the staged file's metadata is read.
   Calls out version + collision status so the admin can see at a
   glance whether they're about to re-upload the active build. */
.dist-preview[b-6okrkkg0m8] {
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 10px 12px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    background: var(--bg-overlay);
}
.dist-preview-row[b-6okrkkg0m8] {
    display: flex;
    align-items: baseline;
    gap: 10px;
    flex-wrap: wrap;
}
.dist-preview-label[b-6okrkkg0m8] {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--muted);
}
.dist-preview-value[b-6okrkkg0m8] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 13.5px;
    color: var(--fg);
}
.dist-preview-value.muted[b-6okrkkg0m8] { color: var(--muted); font-style: italic; }

/* Three states for the collision check. Colors deliberately gentle
   — these are informational, not blocking. */
.dist-preview-warn[b-6okrkkg0m8],
.dist-preview-info[b-6okrkkg0m8],
.dist-preview-ok[b-6okrkkg0m8] {
    font-size: 12.5px;
    line-height: 1.55;
    padding: 6px 8px;
    border-radius: 4px;
}
.dist-preview-warn[b-6okrkkg0m8] {
    background: rgba(230, 170, 90, 0.10);
    color: var(--fg);
    border-left: 3px solid rgba(230, 170, 90, 0.75);
}
.dist-preview-info[b-6okrkkg0m8] {
    background: rgba(120, 160, 220, 0.08);
    color: var(--fg);
    border-left: 3px solid rgba(120, 160, 220, 0.65);
}
.dist-preview-ok[b-6okrkkg0m8] {
    background: rgba(140, 220, 170, 0.08);
    color: var(--fg);
    border-left: 3px solid rgba(140, 220, 170, 0.70);
}

/* Embedded release-notes preview (collapsible). Mirrors the
   .dist-advanced disclosure style for visual consistency. */
.dist-preview-notes > summary[b-6okrkkg0m8] {
    cursor: pointer;
    user-select: none;
    color: var(--muted);
    font-size: 12px;
    list-style: none;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 2px 0;
}
.dist-preview-notes > summary[b-6okrkkg0m8]::-webkit-details-marker { display: none; }
.dist-preview-notes > summary[b-6okrkkg0m8]::before {
    content: '▸';
    font-size: 10px;
    color: var(--muted);
    transition: transform 120ms ease;
    display: inline-block;
    width: 10px;
}
.dist-preview-notes[open] > summary[b-6okrkkg0m8]::before { transform: rotate(90deg); }
.dist-preview-notes pre[b-6okrkkg0m8] {
    margin: 8px 0 0;
    padding: 8px 10px;
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 4px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    line-height: 1.55;
    white-space: pre-wrap;
    max-height: 260px;
    overflow: auto;
}

/* History table ──────────────────────────────────────────────── */

.dist-version[b-6okrkkg0m8] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    color: var(--fg);
}
.dist-filename[b-6okrkkg0m8] {
    color: var(--fg);
    font-weight: 500;
}
.dist-notes[b-6okrkkg0m8] {
    color: var(--muted);
    font-size: 12px;
    margin-top: 2px;
    max-width: 320px;
    white-space: pre-line;
}
.dist-hash[b-6okrkkg0m8] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    color: var(--muted);
    font-size: 12px;
    cursor: help;
}
.row-active[b-6okrkkg0m8] {
    background: rgba(140, 220, 170, 0.06);
}
.row-actions[b-6okrkkg0m8] {
    text-align: right;
    white-space: nowrap;
}
.row-actions .btn-ghost[b-6okrkkg0m8] {
    margin-left: 6px;
}
/* _content/Buildessa/Components/Pages/Admin/Panel/Workstations.razor.rz.scp.css */
/* Admin global workstations view. Compact data table styled to match
   the other admin Panel pages (Events, Users, Providers). */

.ws-filter[b-ftai1uxu3r] {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: end;
    padding: 12px 16px;
    border-bottom: 1px solid var(--border);
}
.ws-filter label[b-ftai1uxu3r] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: 12px;
    color: var(--fg-dim);
}
.ws-filter .hint[b-ftai1uxu3r] {
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--muted);
    font-size: 11px;
}
.ws-filter .form-control[b-ftai1uxu3r] {
    background: var(--bg-input);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 5px 9px;
    font: inherit;
    font-size: 13px;
    min-width: 160px;
}
.ws-summary[b-ftai1uxu3r] {
    margin-left: auto;
    font-size: 12px;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}

.ws-name[b-ftai1uxu3r] { color: var(--fg); font-weight: 500; }
.ws-notes[b-ftai1uxu3r] { color: var(--muted); font-size: 12px; margin-top: 2px; }
.ws-building-link[b-ftai1uxu3r] {
    color: var(--accent);
    text-decoration: none;
}
.ws-building-link:hover[b-ftai1uxu3r] { text-decoration: underline; }

.row-revoked .ws-name[b-ftai1uxu3r],
.row-revoked td[b-ftai1uxu3r] {
    opacity: 0.55;
}
.row-actions[b-ftai1uxu3r] {
    text-align: right;
    white-space: nowrap;
}
/* _content/Buildessa/Components/Pages/Admin/Panel/WorkstationsAdmin.razor.rz.scp.css */
/* ── Notice / status banner ──────────────────────────────────────── */
.ws-banner[b-khvvawpgee] {
    display: flex; align-items: flex-start; gap: .6rem;
    padding: .7rem .9rem; margin: 0 0 1rem; border-radius: 10px;
    border: 1px solid var(--accent, #c4b5fd);
    background: var(--bg-overlay, #1a1a1a);
    color: var(--fg, #ececec); font-size: .9rem; line-height: 1.4;
}
.ws-banner-ico[b-khvvawpgee] { width: 20px; height: 20px; flex: 0 0 auto; margin-top: 1px; color: var(--accent, #c4b5fd); }
.ws-banner-text[b-khvvawpgee] { min-width: 0; }
.ws-banner-off[b-khvvawpgee] { border-color: #d9903f; }
.ws-banner-off .ws-banner-ico[b-khvvawpgee] { color: #d9903f; }

.ws-linkbtn[b-khvvawpgee] {
    background: transparent; border: 0; padding: 0; cursor: pointer;
    color: var(--accent, #c4b5fd); font: inherit; font-weight: 640;
    text-decoration: underline; text-underline-offset: 2px;
}
.ws-linkbtn:hover[b-khvvawpgee] { opacity: .82; }

/* ── Tabs ─────────────────────────────────────────────────────────── */
.ws-tabs[b-khvvawpgee] {
    display: flex; gap: .25rem; margin: 0 0 1.1rem;
    border-bottom: 1px solid var(--border, #2a2a2a);
}
.ws-tab[b-khvvawpgee] {
    appearance: none; background: transparent; border: 0; cursor: pointer;
    font: inherit; font-weight: 560; font-size: .92rem;
    color: var(--muted, #8a8a8a);
    padding: .55rem .9rem; margin-bottom: -1px;
    border-bottom: 2px solid transparent;
    transition: color .12s ease, border-color .12s ease;
}
.ws-tab:hover[b-khvvawpgee] { color: var(--fg, #ececec); }
.ws-tab.active[b-khvvawpgee] {
    color: var(--fg, #ececec);
    border-bottom-color: var(--accent, #c4b5fd);
}

/* ── Settings tab ─────────────────────────────────────────────────── */
.ws-settings h2[b-khvvawpgee] { margin: 0 0 1rem; font-size: 1.05rem; }

.ws-switch[b-khvvawpgee] {
    display: flex; align-items: flex-start; gap: .75rem; cursor: pointer;
    padding: .2rem 0 1rem; max-width: 640px;
}
.ws-switch > input[b-khvvawpgee] { position: absolute; opacity: 0; width: 0; height: 0; }

.ws-switch-track[b-khvvawpgee] {
    position: relative; flex: 0 0 auto; margin-top: 2px;
    width: 42px; height: 24px; border-radius: 999px;
    background: var(--bg-overlay, #2a2a2a);
    border: 1px solid var(--border, #3a3a3a);
    transition: background .15s ease, border-color .15s ease;
}
.ws-switch-thumb[b-khvvawpgee] {
    position: absolute; top: 2px; left: 2px;
    width: 18px; height: 18px; border-radius: 50%;
    background: var(--muted, #8a8a8a);
    transition: transform .15s ease, background .15s ease;
}
.ws-switch > input:checked + .ws-switch-track[b-khvvawpgee] {
    background: color-mix(in srgb, var(--accent, #c4b5fd) 34%, transparent);
    border-color: var(--accent, #c4b5fd);
}
.ws-switch > input:checked + .ws-switch-track .ws-switch-thumb[b-khvvawpgee] {
    transform: translateX(18px); background: var(--accent, #c4b5fd);
}
.ws-switch > input:focus-visible + .ws-switch-track[b-khvvawpgee] {
    outline: 2px solid var(--accent, #c4b5fd); outline-offset: 2px;
}

.ws-switch-copy[b-khvvawpgee] { display: flex; flex-direction: column; gap: .2rem; }
.ws-switch-copy strong[b-khvvawpgee] { color: var(--fg, #ececec); font-weight: 640; }
.ws-switch-hint[b-khvvawpgee] { font-size: .84rem; color: var(--muted, #8a8a8a); line-height: 1.45; }
.ws-switch-hint em[b-khvvawpgee] { font-style: normal; font-weight: 560; color: var(--fg, #ececec); }

.ws-field[b-khvvawpgee] { display: flex; flex-direction: column; gap: .4rem; max-width: 640px; }
.ws-field-head[b-khvvawpgee] { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
.ws-field-label[b-khvvawpgee] { display: flex; flex-direction: column; gap: .15rem; font-weight: 640; color: var(--fg, #ececec); }
.ws-field-sub[b-khvvawpgee] { font-weight: 400; font-size: .82rem; color: var(--muted, #8a8a8a); line-height: 1.45; }

/* Live-state chip for the message (reuses the .pill palette). */
.ws-msgstate-wrap[b-khvvawpgee] { display: flex; flex-direction: column; align-items: flex-end; gap: .25rem; flex: 0 0 auto; }
.ws-msgstate[b-khvvawpgee] { white-space: nowrap; margin-top: 2px; }
.ws-msgpending[b-khvvawpgee] { font-size: .72rem; font-weight: 600; white-space: nowrap; color: var(--warning, #d9903f); }

/* The message on/off switch sits inside the field, a touch tighter than the
   top-level feature switch. */
.ws-switch-inline[b-khvvawpgee] { padding: .55rem 0 .7rem; max-width: none; }

/* When the message is off, its text box reads as inactive but stays editable
   (so an admin can draft ahead of turning it on). */
.ws-textarea.is-muted[b-khvvawpgee] { opacity: .6; }
.ws-textarea.is-muted:focus[b-khvvawpgee] { opacity: 1; }

.ws-textarea[b-khvvawpgee] {
    width: 100%; resize: vertical; min-height: 68px;
    padding: .55rem .7rem; border-radius: 9px;
    border: 1px solid var(--border, #2a2a2a);
    background: var(--bg-elevated, #161616);
    color: var(--fg, #ececec); font: inherit; font-size: .9rem; line-height: 1.45;
}
.ws-textarea:focus[b-khvvawpgee] {
    outline: none; border-color: var(--accent, #c4b5fd);
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, #c4b5fd) 25%, transparent);
}
.ws-charcount[b-khvvawpgee] { align-self: flex-end; font-size: .74rem; color: var(--muted, #8a8a8a); }

.ws-actions[b-khvvawpgee] { display: flex; align-items: center; gap: .7rem; margin-top: 1.1rem; flex-wrap: wrap; }
.ws-status[b-khvvawpgee] { font-size: .85rem; color: var(--muted, #8a8a8a); }
.ws-status.error[b-khvvawpgee] { color: #e5695f; }
/* _content/Buildessa/Components/Pages/Buildings/BuildingFiles.razor.rz.scp.css */
.files-page[b-ta81dqbpyr] {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    color: var(--fg);
}

/* The .chat-header (in app.css) takes its own padding/border. Constrain
   the page body content to a comfortable reading width so docs tables
   don't stretch edge-to-edge. */
.files-page > :not(.chat-header)[b-ta81dqbpyr] {
    max-width: 980px;
    margin-left: auto;
    margin-right: auto;
    width: 100%;
    box-sizing: border-box;
    padding-left: 32px;
    padding-right: 32px;
}

.files-lede[b-ta81dqbpyr] {
    margin: 22px auto 0;
    color: var(--fg-dim);
    font-size: 14px;
    line-height: 1.55;
    max-width: 720px;
}

/* ── Upload card ───────────────────────────────────────────────── */

.upload-card[b-ta81dqbpyr] {
    background: var(--bg-elevated);
    border: 1px dashed var(--border-strong);
    border-radius: 10px;
    padding: 0;
    margin: 18px 0;
    overflow: hidden;
}

.upload-target[b-ta81dqbpyr] {
    display: block;
    padding: 28px 22px;
    cursor: pointer;
    text-align: center;
    transition: background 120ms ease;
    position: relative;
}

.upload-target:hover[b-ta81dqbpyr] {
    background: var(--hover-overlay);
}

/* Blazor InputFile renders a native <input type="file"> — hide it but
   keep it interactive so the surrounding label triggers the picker. */
.upload-target[b-ta81dqbpyr]  input[type="file"] {
    position: absolute;
    inset: 0;
    opacity: 0;
    cursor: pointer;
    width: 100%;
    height: 100%;
}

.upload-icon[b-ta81dqbpyr] {
    font-size: 28px;
    margin-bottom: 6px;
}

.upload-title[b-ta81dqbpyr] {
    font-size: 14px;
    color: var(--fg);
    font-weight: 600;
}

.upload-sub[b-ta81dqbpyr] {
    font-size: 12px;
    color: var(--muted);
    margin-top: 4px;
}

.upload-progress[b-ta81dqbpyr] {
    border-top: 1px solid var(--border);
    background: var(--bg);
    padding: 8px 14px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.upload-row[b-ta81dqbpyr] {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 12px;
    gap: 12px;
}

.up-name[b-ta81dqbpyr] {
    color: var(--fg-dim);
    max-width: 60%;
}

.up-status[b-ta81dqbpyr] {
    color: var(--muted);
}

/* ── Documents table ───────────────────────────────────────────── */

.docs-card[b-ta81dqbpyr] {
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 16px 18px;
}

.docs-card-head[b-ta81dqbpyr] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
}

.docs-card-head h2[b-ta81dqbpyr] {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--fg);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.docs-table[b-ta81dqbpyr] {
    width: 100%;
    font-size: 13px;
}

.docs-table .doc-name[b-ta81dqbpyr] {
    color: var(--fg);
    font-weight: 500;
}

.docs-table .doc-error[b-ta81dqbpyr] {
    color: var(--danger);
    font-size: 12px;
    margin-top: 2px;
    max-width: 480px;
    word-break: break-word;
}

.docs-table td.muted[b-ta81dqbpyr] {
    color: var(--muted);
}

.empty[b-ta81dqbpyr] {
    padding: 20px 0;
    color: var(--muted);
    text-align: center;
}

.error[b-ta81dqbpyr] {
    color: var(--danger);
    font-size: 13px;
    padding: 8px 14px;
    margin: 0;
}

.truncate[b-ta81dqbpyr] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Buttons reused from admin.css would be ideal but the chat shell doesn't
   load admin.css. Local copies of the two button styles we use here: */
.btn-ghost[b-ta81dqbpyr] {
    background: transparent;
    color: var(--fg-dim);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 6px 12px;
    cursor: pointer;
    font: inherit;
    font-size: 12px;
}

.btn-ghost:hover[b-ta81dqbpyr] {
    background: var(--hover-overlay);
    color: var(--fg);
}

.btn-ghost.danger:hover[b-ta81dqbpyr] {
    color: var(--danger);
    border-color: var(--danger);
}

.btn-ghost:disabled[b-ta81dqbpyr] { opacity: 0.5; cursor: not-allowed; }

/* Pills — same vocabulary as admin.css for consistency. */
.pill[b-ta81dqbpyr] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    border: 1px solid transparent;
}

.pill-muted[b-ta81dqbpyr]   { background: var(--bg-overlay); color: var(--muted); border-color: var(--border); }
.pill-info[b-ta81dqbpyr]    { background: var(--bg-overlay); color: var(--info); border-color: var(--border); }
.pill-success[b-ta81dqbpyr] { background: var(--bg-overlay); color: var(--success); border-color: var(--border); }
.pill-warning[b-ta81dqbpyr] { background: var(--bg-overlay); color: var(--warning); border-color: var(--border); }
.pill-danger[b-ta81dqbpyr]  { background: var(--bg-overlay); color: var(--danger); border-color: var(--border); }
/* _content/Buildessa/Components/Pages/Buildings/BuildingStations.razor.rz.scp.css */
/* BMS Stations page. Shares the chat-header / crumb classes via app.css
   so the title bar matches the other building sub-pages. */

.stations-page[b-9b154n4red] {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    color: var(--fg);
}

/* Body content is centred under a comfortable max-width so tables don't
   stretch edge-to-edge on wide screens. */
.stations-body[b-9b154n4red] {
    max-width: 1080px;
    width: 100%;
    margin: 0 auto;
    padding: 22px 32px 60px;
    box-sizing: border-box;
}

.lede[b-9b154n4red] {
    margin: 0 0 22px;
    color: var(--fg-dim);
    font-size: 14px;
    line-height: 1.55;
    max-width: 720px;
}

/* ── Token reveal banner ─────────────────────────────────────────── */

/* High-contrast bordered panel — token is a one-time secret so we want
   it to demand attention until copied/dismissed. */
.token-reveal[b-9b154n4red] {
    border: 1px solid var(--accent-soft);
    background: var(--bg-overlay);
    border-radius: 10px;
    padding: 14px 16px;
    margin: 0 0 22px;
}
.token-reveal-head[b-9b154n4red] {
    display: flex;
    align-items: flex-start;
    gap: 12px;
}
.token-reveal-icon[b-9b154n4red] {
    font-size: 20px;
    line-height: 1;
    flex-shrink: 0;
    margin-top: 2px;
}
.token-reveal-title[b-9b154n4red] {
    font-weight: 600;
    font-size: 14px;
    color: var(--fg);
}
.token-reveal-sub[b-9b154n4red] {
    font-size: 12.5px;
    color: var(--fg-dim);
    margin-top: 2px;
}
.token-reveal-head > div[b-9b154n4red] {
    flex: 1;
    min-width: 0;
}
.token-row[b-9b154n4red] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 12px;
}
.token-value[b-9b154n4red] {
    flex: 1;
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 8px 12px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 13px;
    color: var(--fg);
    user-select: all;
    overflow-x: auto;
    white-space: nowrap;
}

.iconbtn[b-9b154n4red] {
    background: transparent;
    border: 0;
    color: var(--muted);
    cursor: pointer;
    padding: 4px 8px;
    border-radius: 4px;
    font: inherit;
    font-size: 12px;
}
.iconbtn:hover[b-9b154n4red] { color: var(--fg); background: var(--hover-overlay); }

/* Primary installer CTA — the recommended path. Sits above the manual
   register/token flow so most users never see the token UX. */
.installer-cta[b-9b154n4red] {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 16px 18px;
    margin: 0 0 18px;
    border: 1px solid var(--accent-soft);
    background: linear-gradient(135deg,
        rgba(196, 181, 253, 0.10) 0%,
        rgba(196, 181, 253, 0.04) 100%);
    border-radius: 10px;
}
.installer-cta-icon[b-9b154n4red] {
    font-size: 22px;
    line-height: 1;
    color: var(--accent);
    flex-shrink: 0;
}
.installer-cta-body[b-9b154n4red] { flex: 1; min-width: 0; }
.installer-cta-title[b-9b154n4red] {
    font-weight: 600;
    font-size: 14.5px;
    color: var(--fg);
    margin-bottom: 4px;
}
.installer-cta-sub[b-9b154n4red] {
    font-size: 12.5px;
    color: var(--fg-dim);
    line-height: 1.55;
}
.installer-cta-btn[b-9b154n4red] {
    text-decoration: none;
    white-space: nowrap;
    align-self: center;
}

/* PowerShell installer block — shown below the token row when the
   user opts to see it. Monospace pre with copy-to-clipboard, plus a
   short justification line that frames the elevation prompt as the
   acknowledgement. */
.install-script[b-9b154n4red] {
    margin-top: 14px;
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 10px 12px;
}
.install-script-head[b-9b154n4red] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 8px;
    font-size: 12.5px;
    color: var(--fg-dim);
}
.install-script-head strong[b-9b154n4red] { color: var(--fg); }
.install-script-code[b-9b154n4red] {
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 10px 12px;
    margin: 0;
    overflow-x: auto;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12.5px;
    color: var(--fg);
    line-height: 1.55;
    white-space: pre;
    max-height: 360px;
}
.install-script-hint[b-9b154n4red] {
    margin: 10px 0 0;
    font-size: 12px;
    color: var(--muted);
    line-height: 1.55;
}

/* ── Workstation list card ───────────────────────────────────────── */

.stations-card[b-9b154n4red] {
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
}
.stations-card-head[b-9b154n4red] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 18px;
    border-bottom: 1px solid var(--border);
}
.stations-card-head h2[b-9b154n4red] {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--fg);
}

/* Add-workstation inline form. Lives inside the card so the action
   reads as "adding to the list", not a modal. */
.add-form[b-9b154n4red] {
    padding: 14px 18px;
    background: var(--bg-overlay);
    border-bottom: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.form-label[b-9b154n4red] {
    display: block;
    font-size: 12px;
    color: var(--fg-dim);
}
.form-optional[b-9b154n4red] {
    color: var(--muted);
    font-weight: normal;
}
.form-input[b-9b154n4red] {
    display: block;
    width: 100%;
    box-sizing: border-box;
    margin-top: 3px;
    background: var(--bg-input);
    color: var(--fg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 7px 10px;
    font: inherit;
    font-size: 13.5px;
    outline: 0;
}
.form-input:focus[b-9b154n4red] { border-color: var(--accent); }
.form-error[b-9b154n4red] {
    color: var(--danger);
    font-size: 12.5px;
}
.form-actions[b-9b154n4red] {
    display: flex;
    gap: 8px;
    align-items: center;
    margin-top: 4px;
}
.btn-primary[b-9b154n4red] {
    background: var(--accent);
    color: white;
    border: 0;
    border-radius: 6px;
    padding: 7px 14px;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
}
.btn-primary:disabled[b-9b154n4red] { opacity: 0.55; cursor: not-allowed; }
.btn-link[b-9b154n4red] {
    background: transparent;
    border: 0;
    color: var(--fg-dim);
    font: inherit;
    font-size: 13px;
    padding: 6px 4px;
    cursor: pointer;
}
.btn-link:hover[b-9b154n4red] { color: var(--fg); }

.btn-ghost[b-9b154n4red] {
    background: transparent;
    border: 1px solid var(--border);
    color: var(--fg-dim);
    border-radius: 6px;
    padding: 5px 10px;
    font: inherit;
    font-size: 12.5px;
    cursor: pointer;
}
.btn-ghost:hover[b-9b154n4red] {
    background: var(--hover-overlay);
    color: var(--fg);
}
.btn-ghost.danger:hover[b-9b154n4red] {
    border-color: var(--danger);
    color: var(--danger);
}

/* Empty state. */
.empty[b-9b154n4red] {
    padding: 32px 18px;
    text-align: center;
    color: var(--fg-dim);
}
.empty-icon[b-9b154n4red] {
    font-size: 32px;
    opacity: 0.5;
    margin-bottom: 10px;
}
.empty p[b-9b154n4red] { margin: 6px 0; font-size: 14px; }
.empty .hint[b-9b154n4red] {
    font-size: 12.5px;
    color: var(--muted);
    max-width: 460px;
    margin-left: auto;
    margin-right: auto;
    line-height: 1.55;
}

/* ── Table ───────────────────────────────────────────────────────── */

.data-table[b-9b154n4red] {
    width: 100%;
    border-collapse: collapse;
    font-size: 13.5px;
}
.data-table th[b-9b154n4red],
.data-table td[b-9b154n4red] {
    text-align: left;
    padding: 10px 14px;
    border-bottom: 1px solid var(--border);
}
.data-table thead th[b-9b154n4red] {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    color: var(--muted);
    font-weight: 600;
}
.data-table tbody tr:hover[b-9b154n4red] {
    background: var(--hover-overlay);
}
.data-table tbody tr:last-child td[b-9b154n4red] {
    border-bottom: 0;
}
.data-table .muted[b-9b154n4red] {
    color: var(--muted);
    font-size: 12.5px;
}
.ws-name[b-9b154n4red] {
    color: var(--fg);
    font-weight: 500;
}
.ws-notes[b-9b154n4red] {
    color: var(--muted);
    font-size: 12px;
    margin-top: 2px;
}
.row-actions[b-9b154n4red] {
    text-align: right;
    white-space: nowrap;
}
.row-actions .btn-ghost[b-9b154n4red] {
    margin-left: 6px;
}
.row-revoked .ws-name[b-9b154n4red],
.row-revoked td[b-9b154n4red] {
    opacity: 0.55;
}

/* Pills — small status badges. */
.pill[b-9b154n4red] {
    display: inline-block;
    padding: 2px 9px;
    font-size: 11px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: var(--bg-overlay);
    color: var(--fg-dim);
    text-transform: lowercase;
    letter-spacing: 0.3px;
}
.pill.pill-muted[b-9b154n4red]   { color: var(--muted); }
.pill.pill-info[b-9b154n4red]    { color: var(--info);    border-color: var(--info); }
.pill.pill-success[b-9b154n4red] { color: var(--success); border-color: var(--success); }
.pill.pill-warning[b-9b154n4red] { color: var(--warning); border-color: var(--warning); }
.pill.pill-danger[b-9b154n4red]  { color: var(--danger);  border-color: var(--danger); }
/* _content/Buildessa/Components/Pages/Buildings/BuildingStub.razor.rz.scp.css */
/* Shared layout for the six building sub-pages that haven't been
   built out yet (Files, Knowledge, Issues, Tasks, BMS Stations, History).
   The header / breadcrumb styling lives in wwwroot/app.css under
   .chat-header / .crumb* so it stays consistent with the chat pages. */

.stub-page[b-0s55ou4hmq] {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
}

.stub-body[b-0s55ou4hmq] {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 48px 24px;
    gap: 16px;
    color: var(--fg-dim, #d0d0d0);
}

.stub-icon[b-0s55ou4hmq] {
    font-size: 56px;
    opacity: 0.55;
}

.stub-body h1[b-0s55ou4hmq] {
    font-size: 26px;
    margin: 0;
    color: var(--fg, #ececec);
    font-weight: 600;
}

.stub-body .lede[b-0s55ou4hmq] {
    font-size: 15px;
    max-width: 540px;
    line-height: 1.55;
    margin: 0;
}

.stub-body .hint[b-0s55ou4hmq] {
    font-size: 13px;
    color: var(--muted, #8a8a8a);
    max-width: 480px;
    margin: 0;
}
/* _content/Buildessa/Components/Pages/Buildings/BuildingSurvey.razor.rz.scp.css */
/* Site Survey — team editor + results view. Matches the clean, dark-first
   aesthetic of the sibling building pages (Files/Stations). All colour comes
   from the shared palette tokens so light/dark both track automatically. */

/* ── Page shell (mirrors BuildingFiles wrapper) ───────────────────── */
.files-page[b-i787wk0ruy] {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
    color: var(--fg);
}

.files-page > :not(.chat-header)[b-i787wk0ruy] {
    max-width: 980px;
    margin-left: auto;
    margin-right: auto;
    width: 100%;
    box-sizing: border-box;
    padding-left: 32px;
    padding-right: 32px;
}

.stub-page[b-i787wk0ruy] {
    max-width: 640px;
    margin: 40px auto;
    padding: 0 24px;
    color: var(--fg);
}

.stub-page .hint[b-i787wk0ruy] { color: var(--muted); }

/* ── Empty state (no survey) ──────────────────────────────────────── */
.sv-empty[b-i787wk0ruy] {
    max-width: 620px;
    margin: 40px auto 0;
    text-align: center;
}

.sv-empty-icon[b-i787wk0ruy] { font-size: 40px; margin-bottom: 8px; }

.sv-empty h1[b-i787wk0ruy] {
    font-size: 24px;
    font-weight: 650;
    margin: 0 0 12px;
    color: var(--fg);
}

.sv-empty p[b-i787wk0ruy] {
    font-size: 15px;
    line-height: 1.6;
    color: var(--muted);
    margin: 0 auto 18px;
}

.sv-empty a[b-i787wk0ruy] { color: var(--accent); }

.sv-empty-hint[b-i787wk0ruy] { font-size: 13px; margin-top: 12px; }

/* ── Tabs ─────────────────────────────────────────────────────────── */
.sv-tabs[b-i787wk0ruy] {
    display: flex;
    gap: 6px;
    margin: 18px 0 4px;
    border-bottom: 1px solid var(--border);
}

.sv-tab[b-i787wk0ruy] {
    background: transparent;
    border: none;
    border-bottom: 2px solid transparent;
    color: var(--muted);
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    padding: 8px 12px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-bottom: -1px;
}

.sv-tab:hover[b-i787wk0ruy] { color: var(--fg); }

.sv-tab.active[b-i787wk0ruy] {
    color: var(--fg);
    border-bottom-color: var(--accent);
}

.sv-count[b-i787wk0ruy] {
    font-size: 11px;
    font-weight: 600;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 999px;
    padding: 1px 7px;
    color: var(--muted);
}

/* ── Header row ───────────────────────────────────────────────────── */
.sv-head[b-i787wk0ruy] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    margin: 20px 0 6px;
}

.sv-head-main[b-i787wk0ruy] {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

.sv-head-main h1[b-i787wk0ruy] {
    font-size: 22px;
    font-weight: 650;
    margin: 0;
    color: var(--fg);
    word-break: break-word;
}

.sv-toggle[b-i787wk0ruy] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: var(--fg-dim);
    cursor: pointer;
}

.sv-toggle input[b-i787wk0ruy] { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; }

.sv-readonly-note[b-i787wk0ruy] {
    font-size: 13px;
    color: var(--muted);
    margin: 4px 0 0;
}

/* ── Sections ─────────────────────────────────────────────────────── */
.sv-section[b-i787wk0ruy] { margin: 26px 0 0; }

.sv-section-title[b-i787wk0ruy] {
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--fg);
    margin: 0 0 10px;
}

.sv-hint[b-i787wk0ruy] {
    font-size: 13px;
    line-height: 1.55;
    color: var(--muted);
    margin: 0 0 12px;
}

.sv-hint em[b-i787wk0ruy], .sv-empty em[b-i787wk0ruy] { font-style: italic; color: var(--fg-dim); }

.sv-muted[b-i787wk0ruy] { color: var(--muted); font-size: 14px; margin: 8px 0; }

.sv-dim[b-i787wk0ruy] { color: var(--muted); }

/* ── Item cards ───────────────────────────────────────────────────── */
.sv-item[b-i787wk0ruy] {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    padding: 14px;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: color-mix(in srgb, var(--fg) 3%, transparent);
    margin-bottom: 10px;
}

.sv-item-body[b-i787wk0ruy] { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 10px; }

.sv-item-muted[b-i787wk0ruy] { opacity: 0.6; }

.sv-field[b-i787wk0ruy] { display: flex; flex-direction: column; gap: 4px; }

.sv-field label[b-i787wk0ruy] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--muted);
}

.sv-field input[type="text"][b-i787wk0ruy],
.sv-field input[type="number"][b-i787wk0ruy],
.sv-field textarea[b-i787wk0ruy],
.sv-field select[b-i787wk0ruy] {
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--fg);
    font: inherit;
    font-size: 14px;
    padding: 8px 10px;
    width: 100%;
    box-sizing: border-box;
}

.sv-field textarea[b-i787wk0ruy] { resize: vertical; line-height: 1.45; }

.sv-field input:focus[b-i787wk0ruy],
.sv-field textarea:focus[b-i787wk0ruy],
.sv-field select:focus[b-i787wk0ruy] {
    outline: none;
    border-color: var(--accent);
}

.sv-field input:disabled[b-i787wk0ruy],
.sv-field textarea:disabled[b-i787wk0ruy],
.sv-field select:disabled[b-i787wk0ruy] { opacity: 0.7; cursor: default; }

.sv-field-row[b-i787wk0ruy] {
    display: flex;
    gap: 12px;
    align-items: flex-end;
    flex-wrap: wrap;
}

.sv-field-sm[b-i787wk0ruy] { flex: 1 1 160px; min-width: 140px; }
.sv-field-xs[b-i787wk0ruy] { flex: 0 0 120px; }

.sv-check[b-i787wk0ruy] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: var(--fg-dim);
    padding-bottom: 9px;
    white-space: nowrap;
    cursor: pointer;
}

.sv-check input[b-i787wk0ruy] { width: 15px; height: 15px; accent-color: var(--accent); }

.sv-status-badge[b-i787wk0ruy] {
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    padding: 2px 7px;
    border-radius: 999px;
    border: 1px solid var(--border);
    color: var(--muted);
    margin-bottom: 8px;
    margin-left: auto;
}

.sv-badge-edited[b-i787wk0ruy] { color: var(--info); }
.sv-badge-added[b-i787wk0ruy] { color: var(--success); }

.sv-proposed[b-i787wk0ruy] {
    font-size: 12px;
    color: var(--muted);
    font-style: italic;
    margin: 0;
}

.sv-drop-q[b-i787wk0ruy] { color: var(--fg); font-size: 14px; }

.sv-item-actions[b-i787wk0ruy] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    align-items: stretch;
    flex: 0 0 auto;
}

.sv-icon-btn[b-i787wk0ruy] {
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 6px;
    color: var(--fg-dim);
    cursor: pointer;
    font-size: 11px;
    padding: 4px 8px;
    line-height: 1;
}

.sv-icon-btn:hover:not(:disabled)[b-i787wk0ruy] { background: var(--hover-overlay); color: var(--fg); }
.sv-icon-btn:disabled[b-i787wk0ruy] { opacity: 0.35; cursor: not-allowed; }

/* ── Buttons ──────────────────────────────────────────────────────── */
.sv-btn[b-i787wk0ruy] {
    background: transparent;
    color: var(--fg-dim);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 8px 14px;
    cursor: pointer;
    font: inherit;
    font-size: 13px;
    white-space: nowrap;
}

.sv-btn:hover:not(:disabled)[b-i787wk0ruy] { background: var(--hover-overlay); color: var(--fg); }
.sv-btn:disabled[b-i787wk0ruy] { opacity: 0.5; cursor: not-allowed; }

.sv-btn-sm[b-i787wk0ruy] { padding: 5px 10px; font-size: 12px; }

.sv-btn-primary[b-i787wk0ruy] {
    background: var(--accent);
    color: #10121a;
    border-color: transparent;
    font-weight: 600;
}

.sv-btn-primary:hover:not(:disabled)[b-i787wk0ruy] {
    background: color-mix(in srgb, var(--accent) 85%, #fff);
    color: #10121a;
}

.sv-btn-danger:hover:not(:disabled)[b-i787wk0ruy] {
    color: var(--danger);
    border-color: var(--danger);
    background: color-mix(in srgb, var(--danger) 10%, transparent);
}

/* ── Add item ─────────────────────────────────────────────────────── */
.sv-add[b-i787wk0ruy] {
    margin: 26px 0 0;
    padding: 16px;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--bg-elevated);
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* ── Floor plans ──────────────────────────────────────────────────── */
.sv-plan-grid[b-i787wk0ruy] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: 14px;
    margin-bottom: 14px;
}

.sv-plan-card[b-i787wk0ruy] {
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    background: var(--bg-elevated);
    display: flex;
    flex-direction: column;
}

.sv-plan-thumb[b-i787wk0ruy] {
    width: 100%;
    height: 130px;
    object-fit: cover;
    background: var(--bg-overlay);
    display: block;
}

.sv-plan-meta[b-i787wk0ruy] { padding: 8px 10px; font-size: 12px; }
.sv-plan-name[b-i787wk0ruy] { color: var(--fg); font-weight: 500; }

.sv-plan-card .sv-btn[b-i787wk0ruy] { margin: 0 10px 10px; }

.sv-upload[b-i787wk0ruy] {
    display: block;
    border: 1px dashed var(--border-strong);
    border-radius: 10px;
    padding: 20px;
    text-align: center;
    cursor: pointer;
    background: var(--bg-elevated);
    position: relative;
    transition: background 120ms ease;
}

.sv-upload:hover[b-i787wk0ruy] { background: var(--hover-overlay); }

.sv-upload[b-i787wk0ruy]  input[type="file"] {
    position: absolute;
    inset: 0;
    opacity: 0;
    width: 100%;
    height: 100%;
    cursor: pointer;
}

.sv-upload-body[b-i787wk0ruy] { display: flex; flex-direction: column; gap: 3px; }
.sv-upload-title[b-i787wk0ruy] { font-size: 14px; font-weight: 600; color: var(--fg); }

/* ── Share links ──────────────────────────────────────────────────── */
.sv-mint[b-i787wk0ruy] {
    display: flex;
    gap: 12px;
    align-items: flex-end;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

.sv-mint .sv-btn[b-i787wk0ruy] { margin-bottom: 0; }

.sv-minted[b-i787wk0ruy] {
    border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--border));
    background: color-mix(in srgb, var(--accent) 8%, transparent);
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 14px;
}

.sv-minted-label[b-i787wk0ruy] { font-size: 12px; color: var(--fg-dim); margin-bottom: 8px; font-weight: 600; }

.sv-minted-row[b-i787wk0ruy] { display: flex; gap: 10px; align-items: center; }

.sv-minted-url[b-i787wk0ruy] {
    flex: 1;
    min-width: 0;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 12px;
    color: var(--fg);
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 8px 10px;
    overflow-x: auto;
    white-space: nowrap;
}

.sv-links[b-i787wk0ruy] { display: flex; flex-direction: column; gap: 8px; }

.sv-link-row[b-i787wk0ruy] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--bg-elevated);
    font-size: 13px;
}

.sv-link-icon[b-i787wk0ruy] { font-size: 16px; }
.sv-link-main[b-i787wk0ruy] { flex: 1; min-width: 0; color: var(--fg); }

/* ── Results: summary tiles ───────────────────────────────────────── */
.sv-summary[b-i787wk0ruy] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 12px;
    margin: 18px 0 8px;
}

.sv-tile[b-i787wk0ruy] {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 16px;
    background: color-mix(in srgb, var(--fg) 3%, transparent);
    text-align: center;
}

.sv-tile-num[b-i787wk0ruy] { font-size: 26px; font-weight: 650; color: var(--fg); }
.sv-tile-label[b-i787wk0ruy] { font-size: 12px; color: var(--muted); margin-top: 2px; }

.sv-empty-results[b-i787wk0ruy] {
    margin: 30px 0;
    padding: 30px;
    text-align: center;
    color: var(--muted);
    border: 1px dashed var(--border);
    border-radius: 12px;
}

/* ── Results: floor plan + pins ───────────────────────────────────── */
.sv-result-plan[b-i787wk0ruy] { margin-bottom: 20px; }

.sv-plan-stage[b-i787wk0ruy] {
    position: relative;
    display: inline-block;
    max-width: 100%;
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    background: var(--bg-overlay);
}

.sv-plan-stage img[b-i787wk0ruy] { display: block; max-width: 100%; height: auto; }

.sv-pin[b-i787wk0ruy] {
    position: absolute;
    transform: translate(-50%, -50%);
    min-width: 22px;
    height: 22px;
    padding: 0 4px;
    border-radius: 999px;
    background: var(--accent);
    color: #10121a;
    font-size: 12px;
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 2px solid var(--bg);
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
    cursor: default;
}

.sv-pin-photo[b-i787wk0ruy] { background: var(--info); }

/* ── Results: responses ───────────────────────────────────────────── */
.sv-response[b-i787wk0ruy] {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 14px;
    background: var(--bg-elevated);
    margin-bottom: 10px;
}

.sv-response-q[b-i787wk0ruy] { font-size: 14px; font-weight: 600; color: var(--fg); }

.sv-response-a[b-i787wk0ruy] {
    font-size: 14px;
    color: var(--fg-dim);
    margin-top: 6px;
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
}

.sv-response-meta[b-i787wk0ruy] { font-size: 12px; margin-top: 8px; }

.sv-photo-grid[b-i787wk0ruy] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 10px;
}

.sv-photo[b-i787wk0ruy] {
    display: block;
    width: 96px;
    height: 96px;
    border-radius: 8px;
    overflow: hidden;
    border: 1px solid var(--border);
    background: var(--bg-overlay);
}

.sv-photo img[b-i787wk0ruy] { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ── Feedback ─────────────────────────────────────────────────────── */
.sv-error[b-i787wk0ruy] {
    color: var(--danger);
    font-size: 13px;
    margin: 10px 0 0;
}

/* ── Pills (local copies — same vocabulary as the sibling pages) ───── */
.pill[b-i787wk0ruy] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    border: 1px solid transparent;
}

.pill-muted[b-i787wk0ruy]   { background: var(--bg-overlay); color: var(--muted);   border-color: var(--border); }
.pill-info[b-i787wk0ruy]    { background: var(--bg-overlay); color: var(--info);    border-color: var(--border); }
.pill-success[b-i787wk0ruy] { background: var(--bg-overlay); color: var(--success); border-color: var(--border); }
.pill-warning[b-i787wk0ruy] { background: var(--bg-overlay); color: var(--warning); border-color: var(--border); }
.pill-danger[b-i787wk0ruy]  { background: var(--bg-overlay); color: var(--danger);  border-color: var(--border); }

/* ── Utilities ────────────────────────────────────────────────────── */
.truncate[b-i787wk0ruy] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Responsive ───────────────────────────────────────────────────── */
@media (max-width: 640px) {
    .files-page > :not(.chat-header)[b-i787wk0ruy] { padding-left: 16px; padding-right: 16px; }
    .sv-item[b-i787wk0ruy] { flex-direction: column; }
    .sv-item-actions[b-i787wk0ruy] { flex-direction: row; flex-wrap: wrap; }
}
/* _content/Buildessa/Components/Pages/Chat.razor.rz.scp.css */
/* All chat-page styling has moved to wwwroot/app.css so it can be shared
   with BuildingChat.razor (Blazor's scoped CSS would only apply to one).

   This file is intentionally empty — kept so the .razor.css convention
   still discovers a scoped bundle for this component if future
   Chat.razor-only styles need a home. */
/* _content/Buildessa/Components/Pages/GeneralView.razor.rz.scp.css */
/* Page frame for the Library hub. The child lists (DeliverablesList, etc.)
   only self-pad a few px, expecting the page to supply the outer horizontal
   inset — without this the whole hub sat flush against the shell edge. The
   sticky header spans full width, so it cancels the page padding with a
   matching negative margin. */
.files-page[b-pn97b8yenh] {
    padding: 0 24px 28px;
}
.files-page > .chat-header[b-pn97b8yenh] {
    margin: 0 -24px;
}
.files-lede[b-pn97b8yenh] {
    margin: 12px 0 16px;
    color: var(--muted, #8a8a8a);
    font-size: 14px;
    line-height: 1.6;
    max-width: 680px;
}
.files-lede:empty[b-pn97b8yenh] { display: none; margin: 0; }

@media (max-width: 640px) {
    .files-page[b-pn97b8yenh] { padding: 0 14px 22px; }
    .files-page > .chat-header[b-pn97b8yenh] { margin: 0 -14px; padding: 12px 14px; }
}

/* Deployment maintenance / notice banner on the Workstations tab. */
.ws-notice[b-pn97b8yenh] {
    display: flex; align-items: flex-start; gap: .6rem;
    padding: .7rem .9rem; margin: 0 0 1rem; border-radius: 10px;
    border: 1px solid var(--accent, #c4b5fd);
    background: color-mix(in srgb, var(--accent, #c4b5fd) 10%, transparent);
    color: var(--fg, #ececec); font-size: .9rem; line-height: 1.45;
}
.ws-notice svg[b-pn97b8yenh] { width: 20px; height: 20px; flex: 0 0 auto; margin-top: 1px; color: var(--accent, #c4b5fd); }

/* Feature-off state when a user reaches /workstations directly. */
.ws-unavailable[b-pn97b8yenh] {
    max-width: 560px; margin: 1.5rem 0;
    padding: 1.4rem 1.5rem; border-radius: 14px;
    border: 1px dashed var(--border, #2a2a2a);
    background: var(--bg-elevated, #161616);
}
.ws-unavailable h2[b-pn97b8yenh] { margin: 0 0 .5rem; font-size: 1.1rem; color: var(--fg, #ececec); }
.ws-unavailable p[b-pn97b8yenh] { margin: 0; color: var(--muted, #8a8a8a); line-height: 1.55; font-size: .92rem; }
/* _content/Buildessa/Components/Pages/Help.razor.rz.scp.css */
.help-page[b-u5wjy22qbc] {
    width: min(720px, 100%);
    margin: 0 auto;
    padding: 32px 24px 80px;
    color: var(--fg-dim, #d0d0d0);
}

.help-page h1[b-u5wjy22qbc] {
    font-size: 32px;
    font-weight: 600;
    letter-spacing: -0.5px;
    color: var(--fg, #ececec);
    margin: 0 0 24px;
}

.help-page h2[b-u5wjy22qbc] {
    font-size: 16px;
    font-weight: 600;
    color: var(--accent, #c4b5fd);
    margin: 28px 0 8px;
    text-transform: uppercase;
    letter-spacing: 0.6px;
}

.help-page p[b-u5wjy22qbc],
.help-page li[b-u5wjy22qbc] {
    line-height: 1.6;
    font-size: 15px;
}

.help-page ol[b-u5wjy22qbc],
.help-page ul[b-u5wjy22qbc] {
    padding-left: 22px;
    margin: 4px 0 0;
}

.help-page li[b-u5wjy22qbc] {
    margin: 4px 0;
}

.help-page a[b-u5wjy22qbc] {
    color: var(--accent, #c4b5fd);
    text-decoration: none;
}

.help-page a:hover[b-u5wjy22qbc] {
    text-decoration: underline;
}

.help-page kbd[b-u5wjy22qbc] {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-bottom-width: 2px;
    border-radius: 4px;
    padding: 1px 6px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    color: var(--fg, #ececec);
}

.help-page strong[b-u5wjy22qbc] {
    color: var(--fg, #ececec);
    font-weight: 600;
}
/* _content/Buildessa/Components/Pages/Legal/Privacy.razor.rz.scp.css */
.legal[b-oajfd5r327] {
    max-width: 720px;
    margin: 0 auto;
    padding: 48px 22px 96px;
    line-height: 1.62;
    color: var(--ink, #161a22);
}
.legal-back[b-oajfd5r327] { display: inline-block; margin-bottom: 24px; font-size: .9rem; text-decoration: none; }
.legal h1[b-oajfd5r327] { font-size: 2rem; font-weight: 800; letter-spacing: -.02em; margin: 0 0 4px; }
.legal-meta[b-oajfd5r327] { color: var(--muted, #6b7280); font-size: .85rem; margin: 0 0 24px; font-variant-numeric: tabular-nums; }
.legal h2[b-oajfd5r327] { font-size: 1.15rem; font-weight: 700; margin: 30px 0 8px; }
.legal p[b-oajfd5r327], .legal li[b-oajfd5r327] { color: var(--ink-soft, #3d4552); }
.legal ul[b-oajfd5r327] { padding-left: 22px; margin: 10px 0; }
.legal li[b-oajfd5r327] { margin: 6px 0; }
.legal a[b-oajfd5r327] { color: var(--accent, #2557c9); }
.legal-note[b-oajfd5r327] {
    border-left: 3px solid var(--warn, #a45c0b);
    background: var(--warn-bg, #faf0dd);
    color: var(--ink, #161a22);
    border-radius: 0 8px 8px 0; padding: 12px 16px; margin: 0 0 24px; font-size: .92rem;
}
.legal-foot[b-oajfd5r327] { margin-top: 40px; padding-top: 18px; border-top: 1px solid var(--line, #d9dfe7); }
/* _content/Buildessa/Components/Pages/Legal/Terms.razor.rz.scp.css */
.legal[b-b647b0je36] {
    max-width: 720px;
    margin: 0 auto;
    padding: 48px 22px 96px;
    line-height: 1.62;
    color: var(--ink, #161a22);
}
.legal-back[b-b647b0je36] { display: inline-block; margin-bottom: 24px; font-size: .9rem; text-decoration: none; }
.legal h1[b-b647b0je36] { font-size: 2rem; font-weight: 800; letter-spacing: -.02em; margin: 0 0 4px; }
.legal-meta[b-b647b0je36] { color: var(--muted, #6b7280); font-size: .85rem; margin: 0 0 24px; font-variant-numeric: tabular-nums; }
.legal h2[b-b647b0je36] { font-size: 1.15rem; font-weight: 700; margin: 30px 0 8px; }
.legal p[b-b647b0je36], .legal li[b-b647b0je36] { color: var(--ink-soft, #3d4552); }
.legal ul[b-b647b0je36] { padding-left: 22px; margin: 10px 0; }
.legal li[b-b647b0je36] { margin: 6px 0; }
.legal a[b-b647b0je36] { color: var(--accent, #2557c9); }
.legal-note[b-b647b0je36] {
    border-left: 3px solid var(--warn, #a45c0b);
    background: var(--warn-bg, #faf0dd);
    color: var(--ink, #161a22);
    border-radius: 0 8px 8px 0; padding: 12px 16px; margin: 0 0 24px; font-size: .92rem;
}
.legal-foot[b-b647b0je36] { margin-top: 40px; padding-top: 18px; border-top: 1px solid var(--line, #d9dfe7); }
/* _content/Buildessa/Components/Pages/Org/OrgBillingPage.razor.rz.scp.css */
/* Org billing page — reuses the org shell look; billing bits are the ob-* set. */
.org-wrap[b-iwlrz728iv] { max-width: 62rem; margin: 0 auto; padding: 1.75rem 1.5rem 4rem; }
.org-head[b-iwlrz728iv] {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 1rem; margin-bottom: 1.25rem;
}
.org-eyebrow[b-iwlrz728iv] {
    margin: 0 0 .15rem; font-size: .72rem; font-weight: 600; letter-spacing: .1em;
    text-transform: uppercase; color: var(--text-muted, #6b7a90);
}
.org-head h1[b-iwlrz728iv] { margin: 0; font-size: 1.5rem; font-weight: 650; line-height: 1.2; }

.org-card[b-iwlrz728iv] {
    border: 1px solid var(--border, #dde3ee); border-radius: 12px;
    background: var(--surface, #fff); padding: 1.15rem 1.35rem 1.35rem; margin-bottom: 1.1rem;
}
.org-card h2[b-iwlrz728iv] { margin: 0 0 .4rem; font-size: 1.05rem; font-weight: 620; }
.org-card p[b-iwlrz728iv] { margin: .35rem 0 .75rem; color: var(--text, #22303f); }
.org-empty[b-iwlrz728iv] { color: var(--text-muted, #6b7a90); }

.org-btn[b-iwlrz728iv] {
    display: inline-flex; align-items: center; gap: .35rem;
    border: 1px solid var(--border, #dde3ee); border-radius: 8px;
    padding: .45rem .85rem; font-weight: 600; font-size: .9rem;
    background: var(--surface, #fff); color: var(--text, #22303f);
    text-decoration: none; cursor: pointer;
}
.org-btn:hover:not(:disabled)[b-iwlrz728iv] { border-color: var(--accent, #2050c8); }
.org-btn:disabled[b-iwlrz728iv] { opacity: .5; cursor: default; }
.org-btn-primary[b-iwlrz728iv] { background: var(--accent, #2050c8); border-color: var(--accent, #2050c8); color: #fff; }

/* ── Billing-specific ─────────────────────────────────────────── */
.ob-muted[b-iwlrz728iv] { color: var(--text-muted, #6b7a90); }
.ob-fine[b-iwlrz728iv] { font-size: .84rem; margin-top: .5rem; }

.ob-subs[b-iwlrz728iv] { display: flex; flex-direction: column; gap: 2px; margin-top: .5rem; }
.ob-sub[b-iwlrz728iv] {
    display: flex; align-items: center; gap: 14px;
    padding: .7rem 2px; border-top: 1px solid var(--border, #eef1f5);
}
.ob-sub:first-child[b-iwlrz728iv] { border-top: none; }
.ob-sub-info[b-iwlrz728iv] { display: flex; flex-direction: column; gap: 1px; flex: 1 1 auto; min-width: 0; }
.ob-sub-name[b-iwlrz728iv] { font-weight: 620; }
.ob-sub-tag[b-iwlrz728iv] { font-size: .82rem; color: var(--text-muted, #6b7a90); }
.ob-sub-price[b-iwlrz728iv] { font-weight: 620; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ob-sub-price span[b-iwlrz728iv] { font-weight: 400; color: var(--text-muted, #6b7a90); font-size: .85rem; }
.ob-sub-act[b-iwlrz728iv] { display: flex; align-items: center; gap: 10px; flex: none; }
.ob-ends[b-iwlrz728iv] { color: var(--text-muted, #6b7a90); font-size: .85rem; white-space: nowrap; }
.ob-subhead[b-iwlrz728iv] { font-size: .95rem; font-weight: 650; margin: 1.1rem 0 .2rem; }

.ob-hero[b-iwlrz728iv] { font-size: 2rem; font-weight: 700; line-height: 1; padding: .3rem 0 .5rem; }
.ob-hero .ob-muted[b-iwlrz728iv] { font-size: .95rem; font-weight: 400; }
.ob-tiers[b-iwlrz728iv] { display: flex; gap: 10px; flex-wrap: wrap; margin-top: .6rem; }
.ob-chip[b-iwlrz728iv] {
    display: inline-block; margin-left: 6px; font-size: .68rem; font-weight: 650;
    padding: 1px 8px; border-radius: 999px; background: #eef2ff; color: #2050c8; vertical-align: middle;
}

.ob-ok[b-iwlrz728iv] { color: #15803d; font-weight: 620; }
.ob-warn[b-iwlrz728iv] { color: #b45309; font-weight: 620; }

/* Auto-recharge form — mirrors the personal billing page's controls. */
.ob-toggle[b-iwlrz728iv] { display: flex; align-items: center; gap: 8px; font-weight: 550; margin: 6px 0; cursor: pointer; }
.ob-toggle input[b-iwlrz728iv] { width: 1rem; height: 1rem; }
.ob-argrid[b-iwlrz728iv] { display: flex; flex-direction: column; gap: 10px; margin: 12px 0; }
.ob-argrid label[b-iwlrz728iv] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; color: var(--text, #22303f); }
.ob-argrid input[b-iwlrz728iv] { width: 5.5rem; }
.ob-dollar[b-iwlrz728iv] { white-space: nowrap; }
.ob-argrid input[type="number"][b-iwlrz728iv] {
    border: 1px solid var(--border, #dde3ee); border-radius: 7px;
    padding: 5px 8px; font: inherit; background: var(--surface, #fff); color: var(--text, #22303f);
}

.ob-banner[b-iwlrz728iv] { border-radius: 10px; padding: .7rem 1rem; margin-bottom: 1rem; font-weight: 550; }
.ob-banner-ok[b-iwlrz728iv] { background: #ecfdf3; color: #15803d; border: 1px solid #bbf7d0; }
.ob-banner-info[b-iwlrz728iv] { background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
.ob-banner-warn[b-iwlrz728iv] { background: #fffbeb; color: #b45309; border: 1px solid #fde68a; }
/* _content/Buildessa/Components/Pages/Org/OrgMembersPage.razor.rz.scp.css */
/* The org area — a tenant console, deliberately quieter than /admin.
   An org admin is running one company, not the deployment. */

.org-wrap[b-qhh2xwnm12] {
    max-width: 62rem;
    margin: 0 auto;
    padding: 1.75rem 1.5rem 4rem;
}

.org-head[b-qhh2xwnm12] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.25rem;
}

.org-eyebrow[b-qhh2xwnm12] {
    margin: 0 0 .15rem;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7a90);
}

.org-head h1[b-qhh2xwnm12] {
    margin: 0;
    font-size: 1.5rem;
    font-weight: 650;
    line-height: 1.2;
}

.org-card[b-qhh2xwnm12] {
    border: 1px solid var(--border, #dde3ee);
    border-radius: 12px;
    background: var(--surface, #fff);
    padding: 1.15rem 1.35rem 1.35rem;
}

.org-card-head[b-qhh2xwnm12] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin-bottom: .6rem;
}

.org-card h2[b-qhh2xwnm12] {
    margin: 0 0 .4rem;
    font-size: 1.05rem;
    font-weight: 620;
}

.org-card-head h2[b-qhh2xwnm12] { margin: 0; }

.org-card p[b-qhh2xwnm12] { margin: .35rem 0 .75rem; color: var(--text, #22303f); }

.org-fine[b-qhh2xwnm12] { font-size: .86rem; color: var(--text-muted, #6b7a90); }

.org-empty[b-qhh2xwnm12] { color: var(--text-muted, #6b7a90); }

.org-notice[b-qhh2xwnm12] {
    margin-top: .6rem;
    padding: .5rem .7rem;
    border-radius: 8px;
    background: var(--warn-soft, #fdf2dd);
    color: var(--warn, #8a5a06);
    font-size: .88rem;
}

/* ── Buttons ─────────────────────────────────────────────────────── */

.org-btn[b-qhh2xwnm12] {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    border: 1px solid var(--border, #dde3ee);
    border-radius: 8px;
    background: var(--surface, #fff);
    color: inherit;
    padding: .34rem .7rem;
    font: inherit;
    font-size: .88rem;
    text-decoration: none;
    cursor: pointer;
}

.org-btn:hover:not(:disabled)[b-qhh2xwnm12] { border-color: var(--accent, #2050c8); }
.org-btn:disabled[b-qhh2xwnm12] { opacity: .5; cursor: default; }

.org-btn-primary[b-qhh2xwnm12] {
    background: var(--accent, #2050c8);
    border-color: var(--accent, #2050c8);
    color: #fff;
}

.org-btn-mute[b-qhh2xwnm12] { color: var(--text-muted, #6b7a90); }

/* ── Table ───────────────────────────────────────────────────────── */

.org-table[b-qhh2xwnm12] {
    width: 100%;
    border-collapse: collapse;
    font-size: .9rem;
    margin: .5rem 0 .25rem;
}

.org-table th[b-qhh2xwnm12] {
    text-align: left;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7a90);
    padding: .4rem .55rem;
    border-bottom: 1px solid var(--border, #dde3ee);
}

.org-table td[b-qhh2xwnm12] {
    padding: .45rem .55rem;
    border-bottom: 1px solid var(--border-soft, #eef2f8);
    vertical-align: middle;
}

.org-table tr:last-child td[b-qhh2xwnm12] { border-bottom: none; }
.org-table .num[b-qhh2xwnm12] { text-align: right; font-variant-numeric: tabular-nums; }
.org-actions[b-qhh2xwnm12] { text-align: right; white-space: nowrap; }

.org-you[b-qhh2xwnm12] {
    margin-left: .4rem;
    font-size: .72rem;
    color: var(--text-muted, #6b7a90);
}

/* Role reads at a glance — Owner and Admin can change the shop's numbers,
   Member cannot, and that distinction is the whole point of this screen. */
.org-role-chip[b-qhh2xwnm12] {
    display: inline-block;
    border-radius: 999px;
    padding: .1rem .55rem;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .03em;
    white-space: nowrap;
}

.role-owner[b-qhh2xwnm12]  { background: var(--ok-soft, #e3f3ea); color: var(--ok, #17683f); }
.role-admin[b-qhh2xwnm12]  { background: var(--accent-soft, #e8eefc); color: var(--accent, #2050c8); }
.role-member[b-qhh2xwnm12] { background: var(--panel-2, #f1f4fa); color: var(--text-muted, #6b7a90); }
.role-none[b-qhh2xwnm12]   { background: var(--bad-soft, #fbe9e7); color: var(--bad, #9c2f27); }

.org-legend[b-qhh2xwnm12] {
    margin-top: .7rem;
    font-size: .84rem;
    color: var(--text-muted, #6b7a90);
    line-height: 1.55;
}

.org-legend b[b-qhh2xwnm12] { color: var(--text, #22303f); font-weight: 620; }

/* ── Entry rows ──────────────────────────────────────────────────── */

.org-add[b-qhh2xwnm12], .org-create[b-qhh2xwnm12] {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    margin-top: .85rem;
    padding-top: .85rem;
    border-top: 1px solid var(--border-soft, #eef2f8);
}

.org-add input[b-qhh2xwnm12], .org-create input[b-qhh2xwnm12], .org-add select[b-qhh2xwnm12] {
    border: 1px solid var(--border, #dde3ee);
    border-radius: 8px;
    padding: .34rem .6rem;
    font: inherit;
    font-size: .88rem;
    background: var(--surface, #fff);
    color: inherit;
}

.org-add input[b-qhh2xwnm12], .org-create input[b-qhh2xwnm12] { flex: 1 1 16rem; min-width: 0; }
/* _content/Buildessa/Components/Pages/Org/OrgPriceBookPage.razor.rz.scp.css */
/* Shares the org-area shell with the members page; these are the
   price-book-specific bits. Scoped CSS doesn't cross components, so the
   shell rules are repeated rather than imported. */

.org-wrap[b-y10m4fm1zv] {
    max-width: 62rem;
    margin: 0 auto;
    padding: 1.75rem 1.5rem 4rem;
}

.org-head[b-y10m4fm1zv] {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.25rem;
}

.org-eyebrow[b-y10m4fm1zv] {
    margin: 0 0 .15rem;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7a90);
}

.org-head h1[b-y10m4fm1zv] { margin: 0; font-size: 1.5rem; font-weight: 650; line-height: 1.2; }

.org-card[b-y10m4fm1zv] {
    border: 1px solid var(--border, #dde3ee);
    border-radius: 12px;
    background: var(--surface, #fff);
    padding: 1.15rem 1.35rem 1.35rem;
}

.org-card-head[b-y10m4fm1zv] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin-bottom: .6rem;
}

.org-card h2[b-y10m4fm1zv] { margin: 0 0 .4rem; font-size: 1.05rem; font-weight: 620; }
.org-card-head h2[b-y10m4fm1zv] { margin: 0; }
.org-card p[b-y10m4fm1zv] { margin: .35rem 0 .75rem; color: var(--text, #22303f); }
.org-fine[b-y10m4fm1zv] { font-size: .86rem; color: var(--text-muted, #6b7a90); }

/* Assemblies this book is missing are money the estimate will not carry —
   loud enough to act on, quiet enough not to look like an error. */
.pb-missing[b-y10m4fm1zv] {
    padding: 9px 11px; border-radius: 9px;
    background: color-mix(in srgb, var(--warning, #b48309) 11%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning, #b48309) 26%, transparent);
}
.pb-missing strong[b-y10m4fm1zv] { color: var(--warning, #8a6207); }

.pb-section[b-y10m4fm1zv] {
    margin: 22px 0 4px; font-size: 1rem; font-weight: 650;
    letter-spacing: -.01em;
}
.pb-section:first-of-type[b-y10m4fm1zv] { margin-top: 6px; }

/* The loaded rate is the number that actually bills, so it reads as the
   answer and the inputs read as the working. */
.pb-explain[b-y10m4fm1zv] { font-size: .84rem; color: var(--text-muted, #6b7a90); white-space: nowrap; }
.pb-explain strong[b-y10m4fm1zv] { font-size: .96rem; color: var(--text, inherit); }
.pb-rates .pb-in-num[b-y10m4fm1zv] { width: 92px; }
.org-empty[b-y10m4fm1zv] { color: var(--text-muted, #6b7a90); }

.org-notice[b-y10m4fm1zv] {
    margin-top: .6rem;
    padding: .5rem .7rem;
    border-radius: 8px;
    background: var(--warn-soft, #fdf2dd);
    color: var(--warn, #8a5a06);
    font-size: .88rem;
}

.org-btn[b-y10m4fm1zv] {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    border: 1px solid var(--border, #dde3ee);
    border-radius: 8px;
    background: var(--surface, #fff);
    color: inherit;
    padding: .34rem .7rem;
    font: inherit;
    font-size: .88rem;
    text-decoration: none;
    cursor: pointer;
}

.org-btn:hover:not(:disabled)[b-y10m4fm1zv] { border-color: var(--accent, #2050c8); }
.org-btn:disabled[b-y10m4fm1zv] { opacity: .5; cursor: default; }

.org-btn-primary[b-y10m4fm1zv] {
    background: var(--accent, #2050c8);
    border-color: var(--accent, #2050c8);
    color: #fff;
}

.org-btn-mute[b-y10m4fm1zv] { color: var(--text-muted, #6b7a90); }

.org-role-chip[b-y10m4fm1zv] {
    display: inline-block;
    border-radius: 999px;
    padding: .1rem .55rem;
    font-size: .72rem;
    font-weight: 600;
    white-space: nowrap;
}

.role-owner[b-y10m4fm1zv]  { background: var(--ok-soft, #e3f3ea); color: var(--ok, #17683f); }
.role-member[b-y10m4fm1zv] { background: var(--panel-2, #f1f4fa); color: var(--text-muted, #6b7a90); }

.org-table[b-y10m4fm1zv] {
    width: 100%;
    border-collapse: collapse;
    font-size: .9rem;
    margin: .5rem 0 .25rem;
}

.org-table th[b-y10m4fm1zv] {
    text-align: left;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7a90);
    padding: .4rem .55rem;
    border-bottom: 1px solid var(--border, #dde3ee);
}

.org-table td[b-y10m4fm1zv] {
    padding: .45rem .55rem;
    border-bottom: 1px solid var(--border-soft, #eef2f8);
    vertical-align: middle;
}

.org-table tr:last-child td[b-y10m4fm1zv] { border-bottom: none; }
.org-table .num[b-y10m4fm1zv] { text-align: right; font-variant-numeric: tabular-nums; }
.org-actions[b-y10m4fm1zv] { text-align: right; white-space: nowrap; }

.org-legend[b-y10m4fm1zv] {
    margin-top: .7rem;
    font-size: .84rem;
    color: var(--text-muted, #6b7a90);
    line-height: 1.55;
}

/* ── Price-book table ────────────────────────────────────────────── */

/* The catalog is wide; let it scroll inside its own box rather than
   pushing the page sideways. */
.pb-table[b-y10m4fm1zv] { display: table; }

.pb-key[b-y10m4fm1zv] {
    color: var(--text-muted, #6b7a90);
    font-size: .82rem;
    max-width: 15rem;
}

.pb-sku[b-y10m4fm1zv] {
    font-family: ui-monospace, Consolas, monospace;
    font-size: .82rem;
    color: var(--text-muted, #6b7a90);
}

.org-table tr.editing[b-y10m4fm1zv] { background: var(--accent-soft, #e8eefc); }

.pb-in[b-y10m4fm1zv] {
    width: 100%;
    border: 1px solid var(--border, #dde3ee);
    border-radius: 6px;
    padding: .25rem .45rem;
    font: inherit;
    font-size: .86rem;
    background: var(--surface, #fff);
    color: inherit;
}

.pb-in-sm[b-y10m4fm1zv] { max-width: 9rem; }
.pb-in-num[b-y10m4fm1zv] { max-width: 7.5rem; text-align: right; font-variant-numeric: tabular-nums; }
/* _content/Buildessa/Components/Pages/Projects/CloseoutPage.razor.rz.scp.css */
/* After the bid — rows 23, 24 and 25. Every "we did not look" line reads as
   a warning, because on all three of these the reassuring summary is the one
   silence produces. */

.co-missing[b-ts2ew1bxvw] { margin: 48px auto; max-width: 520px; text-align: center; color: var(--muted); }

.co-head[b-ts2ew1bxvw] { padding: 18px 22px 10px; display: grid; gap: 4px; }
.co-back[b-ts2ew1bxvw] { font-size: 13px; color: var(--muted); text-decoration: none; }
.co-back:hover[b-ts2ew1bxvw] { color: var(--accent); }
.co-head h1[b-ts2ew1bxvw] { font-size: 20px; margin: 0; }
.co-sub[b-ts2ew1bxvw] { font-size: 13.5px; color: var(--muted); }

.co-card[b-ts2ew1bxvw] {
    margin: 0 22px 14px; padding: 13px 16px; border-radius: 10px;
    border: 1px solid var(--border); background: var(--surface, #fff);
}
.co-card h2[b-ts2ew1bxvw] { font-size: 16px; margin: 0 0 3px; }
.co-why[b-ts2ew1bxvw] { font-size: 12.5px; color: var(--muted); margin: 0 0 10px; }
.co-empty[b-ts2ew1bxvw] { font-size: 13px; color: var(--muted); margin: 6px 0; }

.co-verdict[b-ts2ew1bxvw] { font-size: 13.5px; font-weight: 600; margin: 6px 0; }
.co-verdict.warn[b-ts2ew1bxvw] { color: var(--warning, #8a6207); }

.co-line[b-ts2ew1bxvw] { font-size: 12.5px; margin: 3px 0; color: var(--fg, inherit); }
.co-line.st-unknown[b-ts2ew1bxvw], .co-line.st-notstated[b-ts2ew1bxvw], .co-line.st-notchecked[b-ts2ew1bxvw],
.co-line.st-differs[b-ts2ew1bxvw], .co-line.st-weexcluded[b-ts2ew1bxvw], .co-line.st-theyexcluded[b-ts2ew1bxvw] {
    color: var(--warning, #8a6207);
}
.co-line.st-matches[b-ts2ew1bxvw] { color: var(--muted); }

.co-lev[b-ts2ew1bxvw] { border-top: 1px solid var(--border); padding: 9px 0 4px; }
.co-lev-head[b-ts2ew1bxvw] { display: flex; gap: 10px; align-items: baseline; }
.co-amt[b-ts2ew1bxvw] { font-variant-numeric: tabular-nums; font-weight: 600; margin-left: auto; }

.co-add[b-ts2ew1bxvw] {
    margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--border);
    display: flex; gap: 7px; align-items: center; flex-wrap: wrap;
}
.co-lbl[b-ts2ew1bxvw] { font-size: 12px; color: var(--muted); }
.co-chk[b-ts2ew1bxvw] { display: flex; gap: 6px; align-items: center; font-size: 12.5px; color: var(--muted); }
.co-note[b-ts2ew1bxvw] { flex: 1; min-width: 180px; }
.co-add input[b-ts2ew1bxvw] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit; min-width: 120px;
}
.co-btn[b-ts2ew1bxvw] {
    font-size: 12.5px; padding: 5px 12px; border-radius: 7px; font-weight: 600;
    border: 1px solid var(--accent, #2563eb); background: var(--accent, #2563eb);
    color: #fff; cursor: pointer;
}
.co-btn:hover[b-ts2ew1bxvw] { filter: brightness(1.05); }
/* _content/Buildessa/Components/Pages/Projects/EstimateReviewPage.razor.rz.scp.css */
/* The estimate review — the leader's one-pager. Verdict colors carry the
   judgment: green ready, amber watch, red blocker; the hero is the price
   and its stance, everything else is two-second headlines with drill-down. */

.er-missing[b-1pdzpg1ylq], .er-empty[b-1pdzpg1ylq] {
    margin: 48px auto; max-width: 560px; text-align: center;
    color: var(--muted); font-size: 14.5px;
}
.er-empty p[b-1pdzpg1ylq] { margin: 6px 0; }

.er-head[b-1pdzpg1ylq] {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 16px; padding: 18px 22px 12px; flex-wrap: wrap;
}
.er-head-l[b-1pdzpg1ylq] { display: flex; align-items: baseline; gap: 12px; }
.er-back[b-1pdzpg1ylq] { font-size: 13px; color: var(--muted); text-decoration: none; }
.er-back:hover[b-1pdzpg1ylq] { color: var(--accent); }
.er-head h1[b-1pdzpg1ylq] { font-size: 20px; margin: 0; }
.er-head-r[b-1pdzpg1ylq] { display: flex; align-items: center; gap: 10px; }
.er-approved[b-1pdzpg1ylq] { font-size: 13px; font-weight: 600; color: var(--ok, #1a7f4e); }

.er-reopen[b-1pdzpg1ylq], .er-notice[b-1pdzpg1ylq] {
    margin: 0 22px 10px; padding: 10px 14px; border-radius: 8px;
    font-size: 13.5px; display: flex; gap: 10px; align-items: center;
}
.er-reopen[b-1pdzpg1ylq] { background: var(--surface-2, rgba(127,127,127,.08)); }
.er-reopen input[b-1pdzpg1ylq] { flex: 1; }
.er-notice[b-1pdzpg1ylq] { background: var(--accent-soft, rgba(37,99,235,.08)); }

/* The page price and the delivered workbook's price have diverged. Loud
   enough to stop an approval, because that is exactly what it does. */
.er-drift[b-1pdzpg1ylq] {
    margin: 0 22px 10px; padding: 11px 14px; border-radius: 8px;
    font-size: 13.5px; line-height: 1.5;
    display: flex; flex-direction: column; gap: 3px;
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning, #b48309) 30%, transparent);
}
.er-drift strong[b-1pdzpg1ylq] { color: var(--warning, #8a6207); }

/* ── Hero: the number and its stance ───────────────────────────────── */
.er-hero[b-1pdzpg1ylq] {
    display: flex; align-items: center; justify-content: space-between;
    gap: 18px; flex-wrap: wrap; margin: 0 22px 6px; padding: 16px 20px;
    border: 1px solid var(--border); border-radius: 12px;
    background: var(--surface, #fff);
}
.er-price-n[b-1pdzpg1ylq] { font-size: 34px; font-weight: 750; font-variant-numeric: tabular-nums; }
.er-price-d[b-1pdzpg1ylq] { display: block; font-size: 13px; color: var(--muted); margin-top: 2px; }
.er-margin[b-1pdzpg1ylq] { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 13px; }
.er-margin label[b-1pdzpg1ylq] { display: flex; align-items: center; gap: 6px; color: var(--muted); }
.er-margin-in[b-1pdzpg1ylq] { width: 72px; }
.er-band[b-1pdzpg1ylq] {
    font-size: 12.5px; font-weight: 650; color: var(--accent, #2563eb);
    border: 1px dashed var(--accent, #2563eb); border-radius: 999px; padding: 3px 10px;
    cursor: help;
}
.er-why[b-1pdzpg1ylq] { min-width: 240px; flex: 1; }

.er-rationale[b-1pdzpg1ylq] {
    margin: 0 22px 12px; padding: 0 4px; font-size: 12.5px; color: var(--muted);
    display: flex; flex-direction: column; gap: 2px;
}

/* ── The tiles ─────────────────────────────────────────────────────── */
.er-grid[b-1pdzpg1ylq] {
    /* min(340px,100%) keeps a single column from forcing horizontal scroll on a
       phone narrower than the track's minimum. */
    display: grid; grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr));
    gap: 14px; padding: 0 22px 28px;
}
@media (max-width: 640px) { .er-grid[b-1pdzpg1ylq] { padding: 0 14px 22px; } }
.er-tile[b-1pdzpg1ylq] {
    border: 1px solid var(--border); border-radius: 12px;
    background: var(--surface, #fff); padding: 14px 16px;
}
.er-tile header[b-1pdzpg1ylq] { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.er-tile h2[b-1pdzpg1ylq] { font-size: 13.5px; margin: 0; font-weight: 650; }
.er-dot[b-1pdzpg1ylq] { width: 10px; height: 10px; border-radius: 50%; flex: 0 0 auto; }
.er-tile.v-ready .er-dot[b-1pdzpg1ylq] { background: #1a7f4e; }
.er-tile.v-watch .er-dot[b-1pdzpg1ylq] { background: #b48309; }
.er-tile.v-blocker .er-dot[b-1pdzpg1ylq] { background: #dc2626; }
.er-tile.v-blocker[b-1pdzpg1ylq] { border-color: rgba(220,38,38,.5); }
.er-headline[b-1pdzpg1ylq] { font-size: 14px; font-weight: 550; margin: 0 0 8px; line-height: 1.45; }
.er-tile ul[b-1pdzpg1ylq] { margin: 0; padding-left: 18px; font-size: 12.5px; color: var(--muted); }
.er-tile li[b-1pdzpg1ylq] { margin: 3px 0; line-height: 1.45; }
.er-tile li[b-1pdzpg1ylq]::marker { color: var(--border); }

.er-add[b-1pdzpg1ylq] {
    display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
    margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border);
}
.er-add-note[b-1pdzpg1ylq] { flex: 1; min-width: 150px; }
.er-add-num[b-1pdzpg1ylq] { width: 100px; }

.er-btn[b-1pdzpg1ylq] {
    font-size: 12.5px; padding: 5px 12px; border-radius: 7px;
    border: 1px solid var(--border); background: var(--surface, #fff); cursor: pointer;
}
.er-btn:hover:not(:disabled)[b-1pdzpg1ylq] { border-color: var(--accent, #2563eb); }
.er-btn:disabled[b-1pdzpg1ylq] { opacity: .5; cursor: default; }
.er-btn-primary[b-1pdzpg1ylq] { background: var(--accent, #2563eb); border-color: var(--accent, #2563eb); color: #fff; font-weight: 600; }

.er-margin input[b-1pdzpg1ylq], .er-why[b-1pdzpg1ylq], .er-add input[b-1pdzpg1ylq], .er-add select[b-1pdzpg1ylq], .er-reopen input[b-1pdzpg1ylq] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit;
}

/* Reading back the file we handed over. A comparison, never an import —
   the styling stays quiet so it never reads as an action that changed
   something. */
.er-readback[b-1pdzpg1ylq] { margin: 0 22px 10px; font-size: 13px; }
.er-readback-pick[b-1pdzpg1ylq] { display: flex; align-items: center; gap: 9px; color: var(--muted); }
.er-readback-note[b-1pdzpg1ylq] { color: var(--muted); margin-left: 8px; }
.er-readback-out[b-1pdzpg1ylq] {
    margin-top: 8px; padding: 11px 14px; border-radius: 9px;
    background: var(--surface-2, rgba(127,127,127,.06));
    border: 1px solid var(--border); line-height: 1.5;
}
.er-readback-out.differs[b-1pdzpg1ylq] {
    background: color-mix(in srgb, var(--warning, #b48309) 10%, transparent);
    border-color: color-mix(in srgb, var(--warning, #b48309) 28%, transparent);
}
.er-readback-out ul[b-1pdzpg1ylq] { margin: 8px 0 0; padding-left: 18px; }
.er-readback-out li[b-1pdzpg1ylq] { margin: 2px 0; }
.er-rb-line[b-1pdzpg1ylq] { color: var(--muted); margin-right: 6px; }
.er-rb-set[b-1pdzpg1ylq] { margin-top: 7px; font-size: 12.5px; color: var(--muted); }

/* What an addendum leaves standing on ground that moved. Not a blocker —
   the addendum may not touch any of it — but the list somebody needs
   before a bid goes out. */
.er-addenda[b-1pdzpg1ylq] {
    margin: 0 22px 10px; padding: 11px 14px; border-radius: 9px;
    font-size: 13px; line-height: 1.5;
    background: color-mix(in srgb, var(--warning, #b48309) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning, #b48309) 28%, transparent);
}
.er-addenda > strong[b-1pdzpg1ylq] { display: block; color: var(--warning, #8a6207); margin-bottom: 6px; }
.er-ad-signed[b-1pdzpg1ylq] { font-size: 12px; color: var(--muted); margin: -2px 0 8px; }

/* Row 2 — what the finished bids support saying, and what they do not. The
   refusals are as much of the panel as the findings, on purpose. */
.er-outcomes[b-1pdzpg1ylq] {
    margin: 0 22px 12px; padding: 11px 14px; border-radius: 9px;
    border: 1px solid var(--border);
    background: var(--surface-2, rgba(127,127,127,.05));
    font-size: 13.5px;
}
.er-outcomes > strong[b-1pdzpg1ylq] { display: block; margin-bottom: 5px; }
.er-oc-finding[b-1pdzpg1ylq] { margin: 3px 0; }
.er-oc-refusals[b-1pdzpg1ylq] { list-style: none; margin: 7px 0 0; padding: 0; display: grid; gap: 4px; }
.er-oc-refusals li[b-1pdzpg1ylq] {
    font-size: 12.5px; color: var(--muted);
    padding-left: 12px; border-left: 2px solid var(--border);
}
.er-oc-note[b-1pdzpg1ylq] { display: block; margin-top: 8px; font-size: 12px; color: var(--muted); }
.er-addenda ul[b-1pdzpg1ylq] { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.er-addenda li[b-1pdzpg1ylq] { display: flex; flex-wrap: wrap; align-items: baseline; gap: 7px; }
.er-ad-kind[b-1pdzpg1ylq] {
    font-size: 10.5px; letter-spacing: .07em; text-transform: uppercase;
    font-weight: 700; color: var(--muted);
}
.er-ad-age[b-1pdzpg1ylq] { font-size: 12px; color: var(--muted); }
.er-ad-why[b-1pdzpg1ylq] { flex-basis: 100%; font-size: 12px; color: var(--muted); }

/* Row 16 — alternates. The base price sits beside every one of them because
   summing a base with an alternate double-counts a choice nobody has made. */
.er-alts[b-1pdzpg1ylq] {
    margin: 0 22px 12px; padding: 11px 14px; border-radius: 9px;
    border: 1px solid var(--border); background: var(--surface, #fff); font-size: 13.5px;
}
.er-alts > strong[b-1pdzpg1ylq] { display: block; margin-bottom: 6px; }
.er-alt-empty[b-1pdzpg1ylq] { color: var(--muted); font-size: 13px; margin: 4px 0; }
.er-alt[b-1pdzpg1ylq] {
    border-top: 1px solid var(--border); padding: 9px 0 7px;
}
.er-alt.accepted[b-1pdzpg1ylq] { background: color-mix(in srgb, var(--ok, #1a7f4e) 7%, transparent); }
.er-alt-head[b-1pdzpg1ylq] { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.er-alt-price[b-1pdzpg1ylq] {
    font-weight: 700; font-variant-numeric: tabular-nums;
    color: var(--ok, #1a7f4e);
}
.er-alt-price.deduct[b-1pdzpg1ylq] { color: var(--warning, #8a6207); }
.er-alt-standing[b-1pdzpg1ylq] {
    margin-left: auto; font-size: 11px; letter-spacing: .06em; text-transform: uppercase;
    color: var(--muted); font-weight: 650;
}
.er-alt-desc[b-1pdzpg1ylq] { margin: 3px 0; }
.er-alt-basis[b-1pdzpg1ylq] { margin: 3px 0; font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.er-alt-note[b-1pdzpg1ylq] { margin: 3px 0; font-size: 12.5px; color: var(--muted); }
.er-alt-refusal[b-1pdzpg1ylq] {
    margin: 4px 0; font-size: 12.5px; padding: 5px 8px; border-radius: 6px;
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
    color: var(--warning, #8a6207);
}
.er-alt-acts[b-1pdzpg1ylq] { display: flex; gap: 7px; margin-top: 6px; flex-wrap: wrap; align-items: center; }
.er-alt-why[b-1pdzpg1ylq] { flex: 1; min-width: 140px; }
.er-alt-add[b-1pdzpg1ylq] { border-top: 1px solid var(--border); padding-top: 9px; margin-top: 8px; display: grid; gap: 6px; }
.er-alt-add-row[b-1pdzpg1ylq] { display: flex; gap: 7px; align-items: center; flex-wrap: wrap; }
.er-alt-lbl[b-1pdzpg1ylq] { font-size: 12px; color: var(--muted); }
.er-alt-desc-in[b-1pdzpg1ylq] { width: 100%; }
.er-alt-hint[b-1pdzpg1ylq] { font-size: 12px; color: var(--muted); }
.er-alts input[b-1pdzpg1ylq] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit; min-width: 110px;
}

/* Rows 18 + 20 — submission. A blank is the loudest thing on this panel
   because a blank on a bid form is a disqualification. */
.er-submit[b-1pdzpg1ylq] {
    margin: 0 22px 12px; padding: 11px 14px; border-radius: 9px;
    border: 1px solid var(--border); background: var(--surface, #fff); font-size: 13.5px;
}
.er-submit > strong[b-1pdzpg1ylq] { display: block; margin-bottom: 5px; }
.er-submit-verdict[b-1pdzpg1ylq] { margin: 3px 0 8px; font-weight: 600; color: var(--warning, #8a6207); }
.er-submit-verdict.ok[b-1pdzpg1ylq] { color: var(--ok, #1a7f4e); }
.er-submit-lines[b-1pdzpg1ylq] { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.er-submit-lines li[b-1pdzpg1ylq] {
    display: grid; grid-template-columns: minmax(140px, 1fr) auto; gap: 8px;
    align-items: baseline; padding: 4px 8px; border-radius: 6px;
}
.er-submit-lines li.st-blank[b-1pdzpg1ylq], .er-submit-lines li.st-unread[b-1pdzpg1ylq] {
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
}
.er-submit-value[b-1pdzpg1ylq] { font-variant-numeric: tabular-nums; font-weight: 600; }
.er-submit-lines li.st-blank .er-submit-value[b-1pdzpg1ylq] { color: var(--warning, #8a6207); }
.er-submit-lines li.st-notasked .er-submit-value[b-1pdzpg1ylq] { color: var(--muted); font-weight: 400; }
.er-submit-why[b-1pdzpg1ylq] { grid-column: 1 / -1; font-size: 12px; color: var(--muted); }
.er-submit-bond[b-1pdzpg1ylq] { margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--border); }
.er-submit-cov[b-1pdzpg1ylq] { margin: 3px 0; font-size: 12.5px; }
.er-submit-cov.st-short[b-1pdzpg1ylq], .er-submit-cov.st-expired[b-1pdzpg1ylq], .er-submit-cov.st-unknown[b-1pdzpg1ylq],
.er-submit-cov.st-notstated[b-1pdzpg1ylq] { color: var(--warning, #8a6207); }
.er-submit-edit[b-1pdzpg1ylq] { margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--border); display: grid; gap: 6px; }
.er-submit-chk[b-1pdzpg1ylq] { display: flex; gap: 7px; align-items: center; font-size: 12.5px; color: var(--muted); }
.er-submit-row[b-1pdzpg1ylq] { display: flex; gap: 7px; align-items: center; flex-wrap: wrap; }
.er-submit-lbl[b-1pdzpg1ylq] { font-size: 12px; color: var(--muted); }
.er-submit-hint[b-1pdzpg1ylq] { font-size: 12px; color: var(--muted); }
.er-submit input[type="number"][b-1pdzpg1ylq], .er-submit input[type="text"][b-1pdzpg1ylq], .er-submit input:not([type])[b-1pdzpg1ylq] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit; min-width: 120px;
}
/* _content/Buildessa/Components/Pages/Projects/JoinProject.razor.rz.scp.css */
/* P14 — the accept page. One card, centred, nothing to do but decide. */

.join-wrap[b-od37cphogv] {
    display: flex;
    justify-content: center;
    padding: 48px 20px;
}

.join-card[b-od37cphogv] {
    width: min(520px, 100%);
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 28px 30px;
    box-shadow: var(--shadow-card);
}

.join-card h1[b-od37cphogv] {
    font-size: 22px;
    font-weight: 700;
    margin: 0 0 10px;
    text-wrap: balance;
}

.join-lead[b-od37cphogv] {
    font-size: 17px;
    line-height: 1.4;
    margin: 0 0 12px;
}

.join-note[b-od37cphogv] {
    font-size: 14px;
    line-height: 1.6;
    color: var(--muted);
    margin: 0 0 18px;
}

.join-bad[b-od37cphogv] {
    font-size: 14px;
    line-height: 1.55;
    color: var(--danger);
    margin: 0 0 18px;
}

.join-btn[b-od37cphogv] {
    display: inline-block;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    padding: 9px 18px;
    margin: 0 8px 0 0;
    border-radius: 8px;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--fg);
    text-decoration: none;
    cursor: pointer;
}

.join-btn:hover[b-od37cphogv] { border-color: var(--border-strong); background: var(--hover-overlay); }

.join-btn-primary[b-od37cphogv] {
    background: var(--accent);
    border-color: var(--accent);
    color: var(--accent-fg);
}

.join-btn-primary:hover[b-od37cphogv] { filter: brightness(1.06); background: var(--accent); }
.join-btn:disabled[b-od37cphogv] { opacity: .6; cursor: default; }
.join-btn:focus-visible[b-od37cphogv] { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* The sign-out control is a POST form, not a link — see the comment on
   it. Keep it inline so it sits beside the other buttons. */
.join-form[b-od37cphogv] { display: inline; }
/* _content/Buildessa/Components/Pages/Projects/LaborEstimatePage.razor.rz.scp.css */
/* The labor estimator — same design language as the review screens. Rows a
   person touched carry the amber left edge; every adjustment shows the
   default it replaced. */

.le-missing[b-ojfhgv4t48], .le-empty[b-ojfhgv4t48] {
    margin: 48px auto; max-width: 560px; text-align: center;
    color: var(--muted); font-size: 14.5px;
}
.le-empty p[b-ojfhgv4t48] { margin: 6px 0; }

.le-head[b-ojfhgv4t48] {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 16px; padding: 18px 22px 12px; flex-wrap: wrap;
}
.le-head-l[b-ojfhgv4t48] { display: flex; align-items: baseline; gap: 12px; }
.le-back[b-ojfhgv4t48] { font-size: 13px; color: var(--muted); text-decoration: none; }
.le-back:hover[b-ojfhgv4t48] { color: var(--accent); }
.le-head h1[b-ojfhgv4t48] { font-size: 20px; margin: 0; }
.le-head-r[b-ojfhgv4t48] { display: flex; align-items: center; gap: 12px; }
.le-total[b-ojfhgv4t48] { font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; }

.le-notice[b-ojfhgv4t48], .le-adjnote[b-ojfhgv4t48] {
    margin: 0 22px 10px; padding: 9px 14px; border-radius: 8px; font-size: 13px;
}
.le-notice[b-ojfhgv4t48] { background: var(--accent-soft, rgba(37,99,235,.08)); }
.le-adjnote[b-ojfhgv4t48] { background: rgba(180,131,9,.09); color: var(--warn, #8a6207); }

.le-controls[b-ojfhgv4t48] {
    display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
    margin: 0 22px 10px; padding: 10px 14px;
    border: 1px solid var(--border); border-radius: 10px;
    background: var(--surface, #fff); font-size: 13px;
}
.le-controls label[b-ojfhgv4t48] { display: flex; align-items: center; gap: 8px; color: var(--muted); }
.le-mult[b-ojfhgv4t48] { font-weight: 700; font-size: 14px; color: inherit; }
.le-mult-in[b-ojfhgv4t48] { width: 90px; }
.le-weeks[b-ojfhgv4t48] { margin-left: auto; color: var(--muted); font-variant-numeric: tabular-nums; }

.le-tabs[b-ojfhgv4t48] { display: flex; gap: 6px; margin: 0 22px 12px; }
.le-tab[b-ojfhgv4t48] {
    font-size: 13px; padding: 6px 14px; border-radius: 8px 8px 0 0;
    border: 1px solid var(--border); border-bottom: none;
    background: var(--surface-2, rgba(127,127,127,.06)); cursor: pointer;
}
.le-tab.on[b-ojfhgv4t48] { background: var(--surface, #fff); font-weight: 650; }

.le-group[b-ojfhgv4t48] {
    margin: 0 22px 14px; border: 1px solid var(--border); border-radius: 10px;
    background: var(--surface, #fff); overflow: hidden;
}
.le-group-h[b-ojfhgv4t48] {
    display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap;
    padding: 9px 14px; border-bottom: 1px solid var(--border);
}
.le-group-h h2[b-ojfhgv4t48] { font-size: 14.5px; margin: 0; }
.le-roles[b-ojfhgv4t48] { display: flex; gap: 10px; flex-wrap: wrap; }
.le-role[b-ojfhgv4t48] {
    font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums;
    border: 1px solid var(--border); border-radius: 999px; padding: 2px 9px;
}
.le-group-t[b-ojfhgv4t48] {
    margin-left: auto; font-size: 13.5px; font-weight: 650;
    font-variant-numeric: tabular-nums; display: flex; gap: 12px; align-items: baseline;
}
.le-cum[b-ojfhgv4t48] { font-weight: 500; color: var(--muted); font-size: 12px; }

.le-table[b-ojfhgv4t48] { width: 100%; border-collapse: collapse; font-size: 13px; }
.le-table th[b-ojfhgv4t48] {
    text-align: left; font-size: 11px; text-transform: uppercase;
    letter-spacing: .05em; color: var(--muted); font-weight: 600;
    padding: 6px 10px; border-bottom: 1px solid var(--border);
}
.le-table td[b-ojfhgv4t48] { padding: 7px 10px; border-bottom: 1px solid var(--border); vertical-align: top; }
.le-table tr:last-child td[b-ojfhgv4t48] { border-bottom: none; }
.le-table td.num[b-ojfhgv4t48] { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.le-table tr.touched[b-ojfhgv4t48] { box-shadow: inset 3px 0 0 #b45309; }

.le-task[b-ojfhgv4t48] { max-width: 420px; }
.le-basis[b-ojfhgv4t48] { display: block; font-size: 11.5px; color: var(--muted); }
.le-adj[b-ojfhgv4t48] { display: block; font-size: 11.5px; color: #b45309; font-weight: 550; }

.le-acts[b-ojfhgv4t48] { white-space: nowrap; }
.le-acts .le-btn[b-ojfhgv4t48] { margin-left: 4px; }
.le-sub[b-ojfhgv4t48] { font-size: 12px; color: var(--muted); margin-right: 6px; cursor: pointer; }
.le-hours-in[b-ojfhgv4t48] { width: 74px; }
.le-why[b-ojfhgv4t48] { width: 140px; }

.le-btn[b-ojfhgv4t48] {
    font-size: 12px; padding: 4px 10px; border-radius: 7px;
    border: 1px solid var(--border); background: var(--surface, #fff); cursor: pointer;
}
.le-btn:hover:not(:disabled)[b-ojfhgv4t48] { border-color: var(--accent, #2563eb); }
.le-btn:disabled[b-ojfhgv4t48] { opacity: .5; cursor: default; }
.le-btn-primary[b-ojfhgv4t48] { background: var(--accent, #2563eb); border-color: var(--accent, #2563eb); color: #fff; font-weight: 600; }
.le-btn-mute[b-ojfhgv4t48] { color: var(--muted); }

.le-controls select[b-ojfhgv4t48], .le-controls input[b-ojfhgv4t48], .le-hours-in[b-ojfhgv4t48], .le-why[b-ojfhgv4t48] {
    border: 1px solid var(--border); border-radius: 7px; padding: 4px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit;
}

/* Supporting somebody else's test procedure. Not stated is the loud case:
   on a specified job it is a real omission, not a neutral default. */
.le-cx[b-ojfhgv4t48] { margin-top: 6px; }
.le-cx select[b-ojfhgv4t48] { min-width: 300px; }
.le-cx-chk[b-ojfhgv4t48] { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; }
.le-cx-warn[b-ojfhgv4t48] {
    font-size: 12.5px; line-height: 1.45; max-width: 62ch;
    color: var(--warning, #8a6207);
}

/* The site walk — the evidence behind the difficulty dial. */
.le-walk[b-ojfhgv4t48] { margin-top: 6px; align-items: flex-start; }
.le-walk-alarm[b-ojfhgv4t48] {
    color: var(--danger, #c0392b); font-weight: 600; font-size: 12.5px;
    line-height: 1.45; max-width: 66ch;
}
.le-obs[b-ojfhgv4t48] { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 5px; }
.le-obs li[b-ojfhgv4t48] {
    display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
    font-size: 13px; padding: 6px 10px; border-radius: 7px;
    background: var(--surface-2, rgba(127,127,127,.05));
}
.le-obs li.settled[b-ojfhgv4t48] { opacity: .62; }
.le-obs-kind[b-ojfhgv4t48] {
    font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
    font-weight: 700; color: var(--muted);
}
.le-obs-text[b-ojfhgv4t48] { flex: 1; min-width: 220px; }
.le-obs-prop[b-ojfhgv4t48] { font-size: 12px; font-weight: 600; color: var(--accent, #2563eb); }
.le-obs-state[b-ojfhgv4t48] { font-size: 12px; color: var(--muted); }
.le-walk-entry[b-ojfhgv4t48] { margin-top: 8px; display: flex; flex-direction: column; gap: 7px; }
.le-walk-date[b-ojfhgv4t48] { width: 150px; }
.le-walk-loc[b-ojfhgv4t48] { max-width: 130px; }
/* _content/Buildessa/Components/Pages/Projects/ProjectHome.razor.rz.scp.css */
.proj-page[b-aohq1ay3rj] {
    max-width: 1040px;
    margin: 0 auto;
    padding: 28px 24px 60px;
}

.proj-missing[b-aohq1ay3rj] {
    padding: 60px 24px;
    text-align: center;
    color: var(--muted, #8a8e99);
}

.proj-header[b-aohq1ay3rj] { margin-bottom: 18px; }

.proj-title-row[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.proj-name[b-aohq1ay3rj] {
    font-size: 24px;
    font-weight: 650;
    margin: 0;
}

.proj-type[b-aohq1ay3rj],
.proj-state[b-aohq1ay3rj] {
    font-size: 11px;
    font-weight: 650;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    padding: 2px 9px;
    border-radius: 999px;
    border: 1px solid var(--border);
    color: var(--muted, #8a8e99);
}

.proj-type[b-aohq1ay3rj] {
    color: var(--accent, #6d5fbe);
    border-color: color-mix(in srgb, var(--accent, #6d5fbe) 45%, transparent);
}

.proj-state.st-active[b-aohq1ay3rj] { color: var(--ok, #2e7d4f); border-color: color-mix(in srgb, var(--ok, #2e7d4f) 45%, transparent); }

.proj-objective[b-aohq1ay3rj] {
    color: var(--fg-dim, #6b6e78);
    margin: 8px 0 0;
    max-width: 70ch;
}

.proj-card[b-aohq1ay3rj] {
    background: var(--bg-elevated, #fff);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 16px 18px;
    margin-bottom: 16px;
}

.proj-map-placeholder p[b-aohq1ay3rj] { color: var(--muted, #8a8e99); font-size: 14px; margin: 6px 0 0; }

/* The focused step card (P2 seed) — the workspace-to-be. */
.proj-step-card[b-aohq1ay3rj] {
    border-top: 1px solid var(--border);
    margin-top: 12px;
    padding-top: 12px;
}

.proj-step-head[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: 10px;
}

.proj-step-name[b-aohq1ay3rj] { font-size: 15px; font-weight: 650; }

.proj-step-state[b-aohq1ay3rj] {
    font-size: 12px;
    color: var(--accent, #6d5fbe);
    margin-right: auto;
}

.proj-step-purpose[b-aohq1ay3rj] {
    color: var(--fg-dim, #6b6e78);
    font-size: 14px;
    margin: 8px 0 0;
    max-width: 78ch;
}

.proj-step-checklist[b-aohq1ay3rj] {
    margin: 8px 0 0;
    padding-left: 20px;
    font-size: 13.5px;
    color: var(--fg-dim, #6b6e78);
}

.proj-step-checklist li[b-aohq1ay3rj] { margin: 2px 0; }

.proj-step-outputs[b-aohq1ay3rj] {
    margin-top: 8px;
    font-size: 12.5px;
    color: var(--muted, #8a8e99);
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}

.proj-step-output[b-aohq1ay3rj] {
    border: 1px solid var(--border);
    border-radius: 999px;
    padding: 1px 8px;
    font-family: ui-monospace, monospace;
    font-size: 11.5px;
}

.proj-step-actions[b-aohq1ay3rj] {
    margin-top: 12px;
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}

/* P8 — the workspace body is TABBED. Two stacked columns became
   unreadable once a step carried real data (field 2026-08-17); one panel
   at a time, with the count that decides whether to open it on the tab
   itself. */
.proj-tabs[b-aohq1ay3rj] {
    display: flex;
    align-items: stretch;
    gap: 2px;
    margin-top: 16px;
    border-bottom: 1px solid var(--border);
    overflow-x: auto;
    scrollbar-width: thin;
}

.proj-tab[b-aohq1ay3rj] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    flex: 0 0 auto;
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1;
    padding: 9px 13px;
    border: none;
    border-bottom: 2px solid transparent;
    background: transparent;
    color: var(--muted);
    cursor: pointer;
    white-space: nowrap;
}

.proj-tab:hover[b-aohq1ay3rj] { color: var(--fg); background: var(--hover-overlay); }

.proj-tab.on[b-aohq1ay3rj] {
    color: var(--fg);
    border-bottom-color: var(--accent);
}

.proj-tab:focus-visible[b-aohq1ay3rj] {
    outline: 2px solid var(--accent);
    outline-offset: -3px;
}

/* The badge IS the tile: the number that says whether this tab is worth
   opening. Absent rather than zero — a count always means something. */
.proj-tab .pt-pill[b-aohq1ay3rj] {
    font-size: 10.5px;
    font-weight: 700;
    line-height: 1;
    padding: 3px 6px;
    border-radius: 999px;
    background: var(--hover-overlay);
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}

.proj-tab.on .pt-pill[b-aohq1ay3rj] { color: var(--fg); }
.proj-tab .pt-pill.ok[b-aohq1ay3rj] { color: var(--success); background: color-mix(in srgb, var(--success) 14%, transparent); }
.proj-tab .pt-pill.warn[b-aohq1ay3rj] { color: var(--warning); background: color-mix(in srgb, var(--warning) 16%, transparent); }

.proj-tabpanel[b-aohq1ay3rj] {
    padding-top: 14px;
    /* NO inner scroll (field ask 2026-08-17: "the tab concent, like brief
       extend the block 100% height so no scroll"). A brief read through a
       460px porthole meant scrolling a box inside a scrolling page, and
       the two fought each other. The panel grows to its content and the
       PAGE scrolls — one scrollbar, the one people expect.

       The chat tabs are the exception and keep their own: a thread scrolls
       under a composer that stays put, which is what a chat is. That cap
       lives on .wc-pane in WorkspaceChat, sized by the token below. */

    /* Field ask (2026-08-18): "make the tab without data to start with has
       a minimum heigh same as the two chat frame. They can grow higher but
       keep the look the same for no content."

       ONE token drives both. It sets the chat pane's height (custom
       properties inherit straight through CSS isolation into
       WorkspaceChat, so this genuinely is the same number rather than two
       that happen to agree), and it floors every other tab at the same
       size. An empty Deliverables tab was a 75px sliver under a full-width
       row of tabs; switching to it felt like the page had collapsed. */
    --ws-chat-h: 520px;
    min-height: var(--ws-chat-h);
}

.proj-ws-head[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}

.proj-ws-head h3[b-aohq1ay3rj] {
    font-size: 13px;
    font-weight: 650;
    margin: 0 0 8px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--muted, #8a8e99);
}

.proj-dropzone[b-aohq1ay3rj] {
    display: block;
    border: 1.5px dashed var(--border);
    border-radius: 10px;
    padding: 14px;
    text-align: center;
    font-size: 13px;
    color: var(--muted, #8a8e99);
    cursor: pointer;
    margin-bottom: 10px;
    transition: border-color 120ms ease, color 120ms ease;
}

.proj-dropzone:hover[b-aohq1ay3rj] {
    border-color: var(--accent, #6d5fbe);
    color: var(--accent, #6d5fbe);
}

.proj-dropzone[b-aohq1ay3rj]  input[type="file"] {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    border: 0;
}

.proj-file-list[b-aohq1ay3rj] { list-style: none; margin: 0; padding: 0; }

.proj-file-list li[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 5px 0;
    border-bottom: 1px solid var(--border);
    font-size: 13px;
}

.proj-file-list li:last-child[b-aohq1ay3rj] { border-bottom: 0; }

.proj-file-list a[b-aohq1ay3rj] {
    color: var(--fg, inherit);
    text-decoration: none;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 46%;
}

.proj-file-list a:hover[b-aohq1ay3rj] { color: var(--accent, #6d5fbe); }

.proj-tag-select[b-aohq1ay3rj] {
    font-size: 11.5px;
    padding: 1px 4px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: transparent;
    color: var(--fg-dim, #6b6e78);
}



.proj-brief[b-aohq1ay3rj] {
    font-size: 14px;
    line-height: 1.55;
}

.proj-brief[b-aohq1ay3rj]  h1, .proj-brief[b-aohq1ay3rj]  h2, .proj-brief[b-aohq1ay3rj]  h3 {
    font-size: 14px;
    margin: 12px 0 4px;
}

.proj-brief[b-aohq1ay3rj]  p { margin: 6px 0; }
.proj-brief[b-aohq1ay3rj]  ul { margin: 4px 0; padding-left: 20px; }
.proj-brief[b-aohq1ay3rj]  li { margin: 2px 0; }

.proj-btn-primary[b-aohq1ay3rj] {
    color: var(--accent, #6d5fbe);
    border-color: var(--accent, #6d5fbe);
}

.proj-grid[b-aohq1ay3rj] {
    display: grid;
    /* min(320px,100%) so a viewport narrower than 320px doesn't overflow. */
    grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr));
    gap: 16px;
}

.proj-grid .proj-card[b-aohq1ay3rj] { margin-bottom: 0; }

.proj-card h2[b-aohq1ay3rj] { font-size: 15px; font-weight: 650; margin: 0; }

.proj-card-head[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
}

.proj-list[b-aohq1ay3rj] { list-style: none; margin: 0; padding: 0; }

.proj-list li[b-aohq1ay3rj] {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 6px 0;
    border-bottom: 1px solid var(--border);
    font-size: 14px;
}

.proj-list li:last-child[b-aohq1ay3rj] { border-bottom: 0; }
.proj-list a[b-aohq1ay3rj] { color: var(--fg, inherit); text-decoration: none; }
.proj-list a:hover[b-aohq1ay3rj] { color: var(--accent, #6d5fbe); }
.proj-dim[b-aohq1ay3rj] { margin-left: auto; color: var(--muted, #8a8e99); font-size: 12px; white-space: nowrap; }

.proj-empty[b-aohq1ay3rj] { color: var(--muted, #8a8e99); font-size: 13.5px; padding: 4px 0; }

.proj-btn[b-aohq1ay3rj] {
    font-size: 12.5px;
    font-weight: 600;
    padding: 4px 12px;
    border-radius: 999px;
    border: 1px solid var(--border);
    background: transparent;
    color: var(--fg-dim, #6b6e78);
    cursor: pointer;
}

.proj-btn:hover:not(:disabled)[b-aohq1ay3rj] { color: var(--accent, #6d5fbe); border-color: var(--accent, #6d5fbe); }
.proj-btn:disabled[b-aohq1ay3rj] { opacity: 0.5; cursor: default; }

.proj-x[b-aohq1ay3rj] {
    background: none; border: 0; color: var(--muted, #8a8e99);
    cursor: pointer; font-size: 15px; padding: 0 4px; border-radius: 4px;
}
.proj-x:hover[b-aohq1ay3rj] { color: var(--danger, #c0392b); }

.proj-add-member[b-aohq1ay3rj] {
    display: flex;
    gap: 6px;
    margin-top: 10px;
}

.proj-add-member input[b-aohq1ay3rj],
.proj-add-member select[b-aohq1ay3rj] {
    font-size: 13px;
    padding: 5px 9px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: transparent;
    color: var(--fg, inherit);
}

.proj-add-member input[b-aohq1ay3rj] { flex: 1; min-width: 0; }

.proj-error[b-aohq1ay3rj] { color: var(--danger, #c0392b); font-size: 12.5px; margin-top: 6px; }

/* P5 - step readiness: requirements, coverage, advance verdict */
.proj-ready-summary[b-aohq1ay3rj] { margin: 6px 0 10px; font-size: 13.5px; }

.proj-req-list[b-aohq1ay3rj] { list-style: none; margin: 0 0 10px; padding: 0; display: flex; flex-direction: column; gap: 7px; }

.proj-req[b-aohq1ay3rj] { display: flex; gap: 8px; align-items: flex-start; font-size: 13px; line-height: 1.45; }

.rq-mark[b-aohq1ay3rj] { flex: 0 0 16px; font-weight: 700; line-height: 1.4; }
.rq-met .rq-mark[b-aohq1ay3rj] { color: #2e7d4f; }
.rq-partial .rq-mark[b-aohq1ay3rj] { color: #b3801e; }
.rq-missing .rq-mark[b-aohq1ay3rj] { color: #b3541e; }

.rq-body[b-aohq1ay3rj] { min-width: 0; }
.rq-detail[b-aohq1ay3rj] { display: block; color: var(--muted, #8a8a8a); font-size: 12.5px; margin-top: 1px; }

.proj-verdict[b-aohq1ay3rj] {
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    border-radius: 8px; padding: 8px 12px; font-size: 13.5px; font-weight: 600;
    margin-bottom: 8px;
}

.proj-verdict.ok[b-aohq1ay3rj] { background: rgba(46, 125, 79, 0.10); color: #2e7d4f; }
.proj-verdict.blocked[b-aohq1ay3rj] { background: rgba(179, 84, 30, 0.10); color: #b3541e; }
.proj-verdict .v-mark[b-aohq1ay3rj] { font-weight: 800; }
.proj-verdict .proj-btn[b-aohq1ay3rj] { margin-left: auto; }

.proj-next-action[b-aohq1ay3rj] {
    font-size: 13px; line-height: 1.45;
    border-left: 3px solid var(--accent, #6d5fbe);
    padding: 2px 0 2px 10px; margin-bottom: 8px;
}

/* P6b - "done but produced nothing" discrepancy */
.proj-discrepancy[b-aohq1ay3rj] {
    display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
    background: rgba(179, 84, 30, .10); color: #b3541e;
    border-radius: 8px; padding: 9px 12px; font-size: 13px; margin: 8px 0;
}
.proj-discrepancy .dx-mark[b-aohq1ay3rj] {
    flex: 0 0 18px; height: 18px; border-radius: 50%;
    background: #b3541e; color: #fff; font-weight: 800; font-size: 12px;
    display: inline-flex; align-items: center; justify-content: center;
}
.proj-discrepancy .proj-btn[b-aohq1ay3rj] { margin-left: auto; }
.proj-step-output.made[b-aohq1ay3rj] { opacity: .65; }

/* Site Survey CTA — the field-walk step's door into the survey studio. */
.proj-step-cta[b-aohq1ay3rj] {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    background: color-mix(in srgb, var(--accent, #6d5fbe) 8%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent, #6d5fbe) 35%, var(--border));
    border-radius: 10px; padding: 11px 14px; font-size: 13px; line-height: 1.5;
    margin: 10px 0;
}
.proj-step-cta-body[b-aohq1ay3rj] { flex: 1; min-width: 180px; color: var(--fg-dim, inherit); }
.proj-step-cta-body b[b-aohq1ay3rj] { color: var(--fg, inherit); }
.proj-step-cta .proj-btn[b-aohq1ay3rj] { margin-left: auto; white-space: nowrap; }

/* P10 — what a readiness check just put on the to-do list. */
.proj-raised[b-aohq1ay3rj] {
    margin-top: 8px;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--fg);
    background: color-mix(in srgb, var(--accent) 10%, transparent);
    border-left: 3px solid var(--accent);
    border-radius: 0 6px 6px 0;
    padding: 8px 11px;
}

/* P11 — the KPI strip: the few numbers that decide this engagement, read
   by Lisa from the documents. Sits above the map because it is the first
   thing a person wants on opening the job. */
.proj-kpis[b-aohq1ay3rj] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px;
    margin-bottom: 14px;
}

.proj-kpi[b-aohq1ay3rj] {
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-left: 3px solid var(--border-strong);
    border-radius: 8px;
    background: var(--bg-elevated);
    min-width: 0;
}

.kpi-label[b-aohq1ay3rj] {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--muted);
}

.kpi-value[b-aohq1ay3rj] {
    margin-top: 3px;
    font-size: 19px;
    font-weight: 650;
    line-height: 1.15;
    color: var(--fg);
    font-variant-numeric: tabular-nums;
    overflow-wrap: anywhere;
}

.kpi-note[b-aohq1ay3rj] {
    margin-top: 4px;
    font-size: 11px;
    line-height: 1.4;
    color: var(--muted);
    /* Two lines, then ellipsis — the tooltip carries the rest. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* Tone is Lisa's read of urgency, not a threshold in code. */
.proj-kpi.tone-danger[b-aohq1ay3rj] { border-left-color: var(--danger); }
.proj-kpi.tone-danger .kpi-value[b-aohq1ay3rj] { color: var(--danger); }
.proj-kpi.tone-warn[b-aohq1ay3rj] { border-left-color: var(--warning); }
.proj-kpi.tone-good[b-aohq1ay3rj] { border-left-color: var(--success); }

/* The step head now carries the task standing and the state buttons. */
.proj-step-tasks[b-aohq1ay3rj] {
    font-size: 11.5px;
    color: var(--muted);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.proj-head-spacer[b-aohq1ay3rj] { flex: 1 1 auto; }

/* Members and Activity are REFERENCE, not the work — they sit at the
   bottom and should not run the page long. About ten rows each, then
   they scroll (field ask 2026-08-17). Scoped to .proj-grid so the
   Deliverables list inside a TAB keeps its full height. */
.proj-grid .proj-card .proj-list[b-aohq1ay3rj] {
    /* ~10 single-line rows: (14px x 1.45 line + 12px padding + 1px rule). */
    max-height: 333px;
    overflow-y: auto;
    /* Keep the scrollbar off the text. */
    padding-right: 6px;
}

/* ══ P14 — the members card ═══════════════════════════════════════════
   A person now answers two questions (what may they change, what do they
   do) and may not have answered the first one yet. .proj-list could not
   carry that: it uses margin-left:auto for its single trailing span, and
   a second one does not group beside the first — flexbox splits the free
   space between the two auto margins and they drift apart. */

.proj-people[b-aohq1ay3rj] { list-style: none; margin: 0; padding: 0; }

/* A GRID, not flex. Every row has to line its columns up with every other
   row, and the rows are NOT the same shape: the owner has no × and no
   resend, a pending invitee has both. Under flex the fixed-width role and
   permission columns simply start wherever the free space left them, so
   the owner's role sat ~90px right of everybody else's and the card read
   as three unrelated lists (field screenshot 2026-08-18). Grid columns are
   declared once on the container and every row obeys them. */
.proj-people[b-aohq1ay3rj] {
    display: grid;
    /* who | role | permission | actions.
       The two middle columns are a RANGE, not a fixed width: this card
       sits in a grid beside Activity and is a good deal narrower than the
       page, so fixed columns ate the name until an address rendered as
       "phong007@…". They give space back before the name does. */
    /* The maxima are MEASURED, not eyeballed — read off the live inputs'
       own scrollWidth, which is the only number that accounts for the
       font, the padding and the caret together. The longest built-in role
       ("Application Engineer") needs 145px of content box, so 147 with
       its borders; the widest permission pill ("Member") is 63px, so 68
       covers it. Anything beyond those is width the NAME column should
       have had — and it needs every pixel, because .proj-grid puts this
       card in a two-up that stays ~512px however wide the window gets. */
    grid-template-columns: minmax(150px, 1fr) minmax(84px, 147px) 68px 48px;
    column-gap: 8px;
    align-items: center;
}

/* Each row spans the grid and inherits its columns via display:contents,
   so the <li> can stay a real list item for screen readers. */
.pp-row[b-aohq1ay3rj] {
    display: grid;
    grid-template-columns: subgrid;
    grid-column: 1 / -1;
    align-items: center;
    padding: 9px 0;
    border-bottom: 1px solid var(--border);
    font-size: 14px;
    min-width: 0;
}

.pp-row:last-child[b-aohq1ay3rj] { border-bottom: 0; }

/* The avatar rides inside the name cell rather than owning a column —
   it belongs to the person, and giving it its own column left a gap on
   the pending rows, where there is no avatar to draw. */
.pp-who[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: 9px;
    min-width: 0;
    line-height: 1.35;
}

.pp-who[b-aohq1ay3rj]  .ib {
    width: 26px;
    height: 26px;
    flex-basis: 26px;
    font-size: 11px;
}

.pp-name[b-aohq1ay3rj] {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.pp-name > b[b-aohq1ay3rj] {
    font-weight: 600;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pp-sub[b-aohq1ay3rj] {
    font-size: 11.5px;
    color: var(--muted);
    line-height: 1.3;
    /* One line. Wrapping made the two rows different heights, which is
       its own kind of not-lined-up. */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pp-late[b-aohq1ay3rj] { color: var(--danger); font-weight: 600; }

.pp-role[b-aohq1ay3rj], .pp-perm[b-aohq1ay3rj] { min-width: 0; }

/* The actions column is always present, empty or not — that reservation
   is what keeps the columns to its left from shifting between rows. */
.pp-actions[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 2px;
    min-width: 0;
}

.pp-input[b-aohq1ay3rj] {
    width: 100%;
    box-sizing: border-box;
    font: inherit;
    font-size: 12.5px;
    padding: 4px 7px;
    border: 1px solid transparent;
    border-radius: 6px;
    background: transparent;
    color: var(--fg);
    text-overflow: ellipsis;
}

/* Editable, but not shouting about it until you go near it — a members
   card that renders as a bank of form controls reads as a settings page
   rather than a list of people. */
.pp-input:hover[b-aohq1ay3rj] { border-color: var(--border); background: var(--bg-input); }
.pp-input:focus[b-aohq1ay3rj] { border-color: var(--border-strong); background: var(--bg-input); outline: none; }
.pp-input:focus-visible[b-aohq1ay3rj] { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

.pp-tag[b-aohq1ay3rj] {
    display: inline-block;
    max-width: 100%;
    box-sizing: border-box;
    font-size: 11px;
    font-weight: 600;
    padding: 3px 9px;
    border-radius: 999px;
    border: 1px solid var(--border);
    color: var(--fg-dim);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pp-perm-tag[b-aohq1ay3rj] { color: var(--muted); }

/* Invited but not here yet. Dimmed as a group, because the question the
   card answers for these rows is "have they accepted?" and the honest
   answer is "not yet". */
.pp-pending[b-aohq1ay3rj] { opacity: .72; }
.pp-pending:hover[b-aohq1ay3rj] { opacity: 1; }

/* Where the avatar would be. A hollow ring reads as "nobody there yet"
   without inventing initials for someone who has not arrived. */
.pp-dot[b-aohq1ay3rj] {
    flex: 0 0 26px;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 1.5px dashed var(--border-strong);
}

.pp-resend[b-aohq1ay3rj] { font-size: 14px; }

.pp-invite-role[b-aohq1ay3rj] { flex: 0 0 110px; border-color: var(--border); }

.proj-hint[b-aohq1ay3rj] {
    font-size: 12px;
    line-height: 1.5;
    color: var(--muted);
    margin: 8px 0 0;
}

.proj-note[b-aohq1ay3rj] {
    font-size: 12.5px;
    line-height: 1.5;
    margin-top: 8px;
    color: var(--success);
}

.proj-note.bad[b-aohq1ay3rj] { color: var(--danger); }

.proj-sharelink[b-aohq1ay3rj] { margin-top: 10px; }

.proj-sharelink label[b-aohq1ay3rj] {
    display: block;
    font-size: 11.5px;
    color: var(--muted);
    margin-bottom: 4px;
}

.proj-sharelink input[b-aohq1ay3rj] {
    width: 100%;
    box-sizing: border-box;
    font-size: 12px;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    padding: 6px 8px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--bg-input);
    color: var(--fg);
}

@media (max-width: 620px) {
    .pp-role[b-aohq1ay3rj] { flex-basis: 100px; }
    .pp-perm[b-aohq1ay3rj] { flex-basis: 82px; }
    .proj-add-member[b-aohq1ay3rj] { flex-wrap: wrap; }
}

/* Created, but nobody could be told automatically. Not green, not red. */
.proj-note.warn[b-aohq1ay3rj] { color: var(--warning); }

.pp-resend[b-aohq1ay3rj] { font-size: 14px; }

/* Narrow: the two role columns stop earning their width long before the
   name does, so they collapse under the name rather than squeezing it to
   an initial. */
@media (max-width: 560px) {
    .proj-people[b-aohq1ay3rj] { grid-template-columns: minmax(0, 1fr) auto; }

    .pp-row[b-aohq1ay3rj] {
        grid-template-columns: subgrid;
        row-gap: 6px;
    }

    .pp-role[b-aohq1ay3rj] { grid-column: 1; }
    .pp-perm[b-aohq1ay3rj] { grid-column: 1; justify-self: start; }
    .pp-actions[b-aohq1ay3rj] { grid-row: 1; grid-column: 2; }
}

/* P19 — the project-level "Lisa needs to know" strip. Sits between the KPIs
   and the map because that is the reading order: the numbers, then what is
   blocking them, then the plan. Only rendered when the count is non-zero, so
   a project with nothing outstanding never carries a scar. */
.proj-needs[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    text-align: left;
    font: inherit;
    font-size: 13.5px;
    line-height: 1.45;
    color: var(--warning);
    background: color-mix(in srgb, var(--warning) 9%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning) 42%, transparent);
    border-radius: 10px;
    padding: 11px 15px;
    margin-bottom: 16px;
    cursor: pointer;
}

.proj-needs:hover[b-aohq1ay3rj] { background: color-mix(in srgb, var(--warning) 14%, transparent); }
.proj-needs:focus-visible[b-aohq1ay3rj] { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

.proj-needs-n[b-aohq1ay3rj] {
    flex: 0 0 auto;
    font-size: 19px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1;
}

.proj-needs-go[b-aohq1ay3rj] {
    flex: 0 0 auto;
    margin-left: auto;
    font-weight: 650;
    white-space: nowrap;
}

/* ── The bid clock (gap-matrix row 1) ─────────────────────────────────
   The two dates a pursuit is governed by. Urgency is emphasis only —
   the sentence carries the meaning, so a colour-blind reader loses
   nothing. */

.proj-clock[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: .6rem;
    flex-wrap: wrap;
    margin-top: .5rem;
    font-size: .89rem;
    color: var(--text-muted, #6b7a90);
}

.proj-clock.u-soon[b-aohq1ay3rj] { color: var(--warn, #8a5a06); }
.proj-clock.u-urgent[b-aohq1ay3rj],
.proj-clock.u-passed[b-aohq1ay3rj] { color: var(--bad, #9c2f27); font-weight: 600; }

.proj-clock-edit[b-aohq1ay3rj] {
    border: 1px solid var(--border, #dde3ee);
    border-radius: 7px;
    background: var(--surface, #fff);
    color: inherit;
    padding: .18rem .55rem;
    font: inherit;
    font-size: .82rem;
    cursor: pointer;
}

.proj-clock-edit:hover[b-aohq1ay3rj] { border-color: var(--accent, #2050c8); }

.proj-dates[b-aohq1ay3rj] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: .6rem;
    margin-top: .5rem;
    padding: .6rem .7rem;
    border: 1px solid var(--border, #dde3ee);
    border-radius: 9px;
    background: var(--surface, #fff);
}

.proj-dates label[b-aohq1ay3rj] {
    display: flex;
    flex-direction: column;
    gap: .15rem;
    font-size: .74rem;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7a90);
}

.proj-dates input[b-aohq1ay3rj] {
    border: 1px solid var(--border, #dde3ee);
    border-radius: 7px;
    padding: .26rem .45rem;
    font: inherit;
    font-size: .88rem;
    background: var(--surface, #fff);
    color: var(--text, #22303f);
}

.proj-dates-note[b-aohq1ay3rj] {
    flex-basis: 100%;
    font-size: .84rem;
    color: var(--warn, #8a5a06);
}

/* ── The bid set (gap-matrix row 3) ───────────────────────────────────
   Which documents arrived, and which have actually been counted. */

.proj-set[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: .6rem;
    flex-wrap: wrap;
    margin-top: .4rem;
    font-size: .88rem;
    color: var(--text-muted, #6b7a90);
}

.proj-set.short[b-aohq1ay3rj] { color: var(--warn, #8a5a06); font-weight: 600; }

.proj-set-list[b-aohq1ay3rj] {
    margin: .45rem 0 0;
    padding: .5rem .7rem;
    list-style: none;
    border: 1px solid var(--border, #dde3ee);
    border-radius: 9px;
    background: var(--surface, #fff);
}

.proj-set-list li[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    gap: .5rem;
    flex-wrap: wrap;
    padding: .22rem 0;
    font-size: .87rem;
}

.proj-set-tag[b-aohq1ay3rj] {
    font-size: .68rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--text-muted, #6b7a90);
    border: 1px solid var(--border, #dde3ee);
    border-radius: 999px;
    padding: 0 .4rem;
}

.proj-set-meta[b-aohq1ay3rj] { color: var(--text-muted, #6b7a90); font-size: .8rem; }

.proj-set-state[b-aohq1ay3rj] {
    margin-left: auto;
    font-size: .78rem;
    color: var(--text-muted, #6b7a90);
}

.proj-set-state.counted[b-aohq1ay3rj] { color: var(--ok, #17683f); }
.proj-set-state.awaiting[b-aohq1ay3rj] { color: var(--warn, #8a5a06); font-weight: 600; }
.proj-set-state.set-aside[b-aohq1ay3rj] { color: var(--text-muted, #6b7a90); font-style: italic; }

/* View-only notice when the owner's subscription is inactive. */
.proj-viewonly[b-aohq1ay3rj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    margin: 0 0 16px;
    padding: 10px 16px;
    border: 1px solid var(--warning-border, #fde68a);
    background: var(--warning-bg, #fffbeb);
    color: var(--warning-fg, #92400e);
    border-radius: 10px;
    font-size: .92rem;
    font-weight: 550;
}
.proj-viewonly a[b-aohq1ay3rj] {
    color: inherit;
    font-weight: 650;
    white-space: nowrap;
    text-decoration: underline;
}
/* When the viewer can't act themselves (a member, or a non-admin of the
   owning org) — say who can, without a link that wouldn't help them. */
.proj-viewonly-hint[b-aohq1ay3rj] {
    color: inherit;
    font-weight: 600;
    opacity: .85;
}
/* _content/Buildessa/Components/Pages/Projects/ScopeReviewPage.razor.rz.scp.css */
/* Scope Studio — review screen. Same status color language as the takeoff
   tool (dashed blue = AI-proposed, green = human-verified, red = flagged),
   plus scope's own: the dotted amber "below the line" candidates band. */

.sr-missing[b-fpyv2jdixh], .sr-empty[b-fpyv2jdixh] {
    margin: 48px auto; max-width: 560px; text-align: center;
    color: var(--muted); font-size: 14.5px;
}
.sr-empty p[b-fpyv2jdixh] { margin: 6px 0; }

.sr-head[b-fpyv2jdixh] {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 16px; padding: 18px 22px 12px; flex-wrap: wrap;
}
.sr-head-l[b-fpyv2jdixh] { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.sr-back[b-fpyv2jdixh] { font-size: 13px; color: var(--muted); text-decoration: none; }
.sr-back:hover[b-fpyv2jdixh] { color: var(--accent); }
.sr-head h1[b-fpyv2jdixh] { font-size: 20px; margin: 0; }
.sr-sub[b-fpyv2jdixh] { font-size: 13px; color: var(--muted); }
.sr-head-r[b-fpyv2jdixh] { display: flex; align-items: center; gap: 10px; }
.sr-progress[b-fpyv2jdixh] { font-size: 13px; color: var(--muted); font-variant-numeric: tabular-nums; }
.sr-approved[b-fpyv2jdixh] { font-size: 13px; font-weight: 600; color: var(--ok, #1a7f4e); }

.sr-cand-note[b-fpyv2jdixh], .sr-reopen[b-fpyv2jdixh], .sr-notice[b-fpyv2jdixh] {
    margin: 0 22px 10px; padding: 10px 14px; border-radius: 8px;
    font-size: 13.5px; display: flex; gap: 10px; align-items: center;
}
.sr-cand-note[b-fpyv2jdixh] { background: rgba(180,131,9,.09); color: var(--warn, #8a6207); }
.sr-reopen[b-fpyv2jdixh] { background: var(--surface-2, rgba(127,127,127,.08)); }
.sr-reopen input[b-fpyv2jdixh] { flex: 1; }
.sr-notice[b-fpyv2jdixh] { background: var(--accent-soft, rgba(37,99,235,.08)); }

.sr-grid[b-fpyv2jdixh] {
    display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(360px, 1fr);
    gap: 14px; padding: 0 22px 28px; align-items: start;
}
@media (max-width: 980px) { .sr-grid[b-fpyv2jdixh] { grid-template-columns: 1fr; } }

/* ── Viewer ─────────────────────────────────────────────────────────── */
.sr-viewer[b-fpyv2jdixh] {
    border: 1px solid var(--border); border-radius: 10px; overflow: hidden;
    background: var(--surface, #fff); position: sticky; top: 12px;
}
.sr-viewer-bar[b-fpyv2jdixh] {
    padding: 8px 12px; font-size: 12.5px; color: var(--muted);
    border-bottom: 1px solid var(--border);
}
.sr-viewer img[b-fpyv2jdixh] { display: block; width: 100%; height: auto; }
.sr-nosheet[b-fpyv2jdixh] { padding: 40px 24px; color: var(--muted); font-size: 13.5px; text-align: center; }
.sr-quote[b-fpyv2jdixh] {
    margin: 0; padding: 12px 16px; border-top: 1px solid var(--border);
    font-size: 13.5px; font-style: italic; line-height: 1.5;
}
.sr-quote-status[b-fpyv2jdixh] {
    display: inline-block; font-style: normal; font-size: 10.5px; font-weight: 700;
    text-transform: uppercase; letter-spacing: .06em; border-radius: 4px;
    padding: 1px 7px; margin-right: 8px; vertical-align: 1px;
}
.sr-quote-status.st-ok[b-fpyv2jdixh] { background: rgba(26,127,78,.14); color: #1a7f4e; }
.sr-quote-status.st-warn[b-fpyv2jdixh] { background: rgba(180,83,9,.14); color: #b45309; }

/* ── Items ──────────────────────────────────────────────────────────── */
.sr-items[b-fpyv2jdixh] {
    border: 1px solid var(--border); border-radius: 10px;
    background: var(--surface, #fff); overflow: hidden;
}
.sr-items-bar[b-fpyv2jdixh] {
    padding: 8px 12px; font-size: 12px; color: var(--muted);
    border-bottom: 1px solid var(--border);
}
.sr-list[b-fpyv2jdixh] { list-style: none; margin: 0; padding: 0; max-height: 68vh; overflow-y: auto; }
.sr-item[b-fpyv2jdixh] { border-bottom: 1px solid var(--border); }
.sr-item:last-child[b-fpyv2jdixh] { border-bottom: none; }
.sr-item.sel[b-fpyv2jdixh] { background: var(--accent-soft, rgba(37,99,235,.06)); box-shadow: inset 3px 0 0 var(--accent, #2563eb); }
.sr-item.cand[b-fpyv2jdixh] { background: rgba(180,131,9,.04); }

.sr-band[b-fpyv2jdixh] {
    padding: 8px 12px; font-size: 12px; font-weight: 600;
    color: var(--warn, #8a6207); background: rgba(180,131,9,.10);
    border-top: 2px dotted rgba(180,131,9,.5);
    border-bottom: 1px solid var(--border);
}

.sr-item-head[b-fpyv2jdixh] {
    display: grid; grid-template-columns: auto auto 1fr auto; gap: 8px;
    align-items: baseline; padding: 8px 12px; cursor: pointer; font-size: 13.5px;
}
.sr-item-text[b-fpyv2jdixh] { min-width: 0; line-height: 1.45; }
.sr-conf[b-fpyv2jdixh] { font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }

.sr-chip[b-fpyv2jdixh] {
    font-size: 10.5px; font-weight: 650; padding: 2px 8px; border-radius: 999px; white-space: nowrap;
}
.sr-chip.st-proposed[b-fpyv2jdixh]  { background: rgba(37,99,235,.12); color: #2563eb; border: 1px dashed #2563eb; }
.sr-chip.st-verified[b-fpyv2jdixh]  { background: rgba(26,127,78,.14); color: #1a7f4e; }
.sr-chip.st-adjusted[b-fpyv2jdixh]  { background: rgba(180,83,9,.14); color: #b45309; }
.sr-chip.st-added[b-fpyv2jdixh]     { background: rgba(124,58,237,.13); color: #7c3aed; }
.sr-chip.st-dropped[b-fpyv2jdixh]   { background: rgba(107,114,128,.15); color: #6b7280; text-decoration: line-through; }
.sr-chip.st-flagged[b-fpyv2jdixh]   { background: rgba(220,38,38,.13); color: #dc2626; }
.sr-chip.st-candidate[b-fpyv2jdixh] { background: rgba(180,131,9,.13); color: #8a6207; border: 1px dotted #b48309; }

.sr-kind[b-fpyv2jdixh] {
    font-size: 10.5px; font-weight: 700; text-transform: uppercase;
    letter-spacing: .05em; white-space: nowrap;
}
.sr-kind.k-inclusion[b-fpyv2jdixh] { color: var(--muted); }
.sr-kind.k-exclusion[b-fpyv2jdixh] { color: #b45309; }
.sr-kind.k-clarification[b-fpyv2jdixh] { color: #2563eb; }

.sr-item-body[b-fpyv2jdixh] { padding: 0 12px 10px 12px; font-size: 13px; }
.sr-basis[b-fpyv2jdixh] { color: var(--muted); margin: 4px 0; }
.sr-reason[b-fpyv2jdixh] { margin: 4px 0; font-weight: 550; }
.sr-orig[b-fpyv2jdixh] { color: var(--muted); margin: 4px 0; font-style: italic; }
.sr-acts[b-fpyv2jdixh] { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 8px; }

.sr-btn[b-fpyv2jdixh] {
    font-size: 12.5px; padding: 5px 12px; border-radius: 7px;
    border: 1px solid var(--border); background: var(--surface, #fff); cursor: pointer;
}
.sr-btn:hover:not(:disabled)[b-fpyv2jdixh] { border-color: var(--accent, #2563eb); }
.sr-btn:disabled[b-fpyv2jdixh] { opacity: .5; cursor: default; }
.sr-btn-primary[b-fpyv2jdixh] { background: var(--accent, #2563eb); border-color: var(--accent, #2563eb); color: #fff; font-weight: 600; }
.sr-btn-ok[b-fpyv2jdixh] { border-color: #1a7f4e; color: #1a7f4e; font-weight: 600; }
.sr-btn-mute[b-fpyv2jdixh] { color: var(--muted); }
.sr-reword[b-fpyv2jdixh] { flex: 1 1 100%; min-width: 200px; }
.sr-why[b-fpyv2jdixh] { flex: 1; min-width: 120px; }

.sr-add[b-fpyv2jdixh] { padding: 10px 12px; border-top: 1px solid var(--border); font-size: 13px; }
.sr-add-row[b-fpyv2jdixh] { display: flex; gap: 8px; margin-top: 6px; flex-wrap: wrap; }
.sr-add-text[b-fpyv2jdixh] { flex: 1; min-width: 200px; }

.sr-reword[b-fpyv2jdixh], .sr-why[b-fpyv2jdixh], .sr-add-row input[b-fpyv2jdixh], .sr-add-row select[b-fpyv2jdixh], .sr-reopen input[b-fpyv2jdixh] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit;
}

/* The qualifications letter — the document that defines what the number
   buys. The holes list is the point: an exclusion nobody carries is work
   that lands on us months later as a change order. */
.sr-letter[b-fpyv2jdixh] {
    margin: 0 22px 10px; padding: 11px 14px; border-radius: 9px;
    border: 1px solid var(--border); background: var(--surface-2, rgba(127,127,127,.05));
    font-size: 13px; display: flex; flex-direction: column; gap: 6px;
}
.sr-letter-head[b-fpyv2jdixh] { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.sr-letter-warn[b-fpyv2jdixh] { color: var(--warning, #8a6207); line-height: 1.5; }
.sr-holes[b-fpyv2jdixh] { list-style: none; margin: 2px 0 0; padding: 0; display: grid; gap: 5px; }
.sr-holes li[b-fpyv2jdixh] {
    padding: 7px 10px; border-radius: 7px; line-height: 1.45;
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
}
.sr-holes li span[b-fpyv2jdixh] { display: block; font-size: 12px; color: var(--muted); margin-top: 2px; }
/* _content/Buildessa/Components/Pages/Projects/SurveyStudioPage.razor.rz.scp.css */
/* Site Survey Studio page — the project chrome around the shared SurveyStudio
   component. Mirrors the Scope/Takeoff studio header (sr-/tr-) so the three
   studios read as one family. The editor itself is styled by the component. */

.ss-missing[b-ogd0c6sgv4] {
    margin: 48px auto; max-width: 560px; text-align: center;
    color: var(--muted); font-size: 14.5px;
}

.ss-head[b-ogd0c6sgv4] {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 16px; padding: 18px 22px 12px; flex-wrap: wrap;
}

.ss-head-l[b-ogd0c6sgv4] { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.ss-back[b-ogd0c6sgv4] { font-size: 13px; color: var(--muted); text-decoration: none; }
.ss-back:hover[b-ogd0c6sgv4] { color: var(--accent); }
.ss-head h1[b-ogd0c6sgv4] { font-size: 20px; margin: 0; }
.ss-sub[b-ogd0c6sgv4] { font-size: 13px; color: var(--muted); }

.ss-body[b-ogd0c6sgv4] {
    max-width: 980px;
    margin: 0 auto;
    width: 100%;
    box-sizing: border-box;
    padding: 0 22px 48px;
}

.ss-note[b-ogd0c6sgv4] {
    margin: 24px 0; padding: 16px 18px;
    border: 1px solid var(--border); border-radius: 10px;
    background: var(--bg-elevated);
    color: var(--fg-dim); font-size: 14px; line-height: 1.55;
}
/* _content/Buildessa/Components/Pages/Projects/TakeoffReviewPage.razor.rz.scp.css */
/* Takeoff Studio — review screen. Same design tokens as the rest of the
   app (var(--…)); status colors are semantic and match the design doc:
   dashed blue = AI-proposed, green = human-verified, amber = adjusted,
   purple = added, gray strike = excluded, red = flagged. */

.tr-missing[b-latbah3zoq], .tr-empty[b-latbah3zoq] {
    margin: 48px auto; max-width: 560px; text-align: center;
    color: var(--muted); font-size: 14.5px;
}
.tr-empty p[b-latbah3zoq] { margin: 6px 0; }

/* The design-build entry. Sits on the empty screen because that is the only
   screen a job with no drawings ever reaches. */
.tr-empty-start[b-latbah3zoq] {
    margin-top: 12px; padding: 12px 14px;
    border: 1px solid var(--border); border-radius: 11px;
    background: var(--surface-2, rgba(127,127,127,.05));
    font-size: 13px;
}
.tr-empty-start p[b-latbah3zoq] { margin: 5px 0 9px; }
.tr-empty-start select[b-latbah3zoq] { min-width: 240px; }

.tr-head[b-latbah3zoq] {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: 16px; padding: 18px 22px 12px; flex-wrap: wrap;
}
.tr-head-l[b-latbah3zoq] { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.tr-back[b-latbah3zoq] { font-size: 13px; color: var(--muted); text-decoration: none; }
.tr-back:hover[b-latbah3zoq] { color: var(--accent); }
.tr-head h1[b-latbah3zoq] { font-size: 20px; margin: 0; }
.tr-sub[b-latbah3zoq] { font-size: 13px; color: var(--muted); }
.tr-head-r[b-latbah3zoq] { display: flex; align-items: center; gap: 10px; }
.tr-progress[b-latbah3zoq] { font-size: 13px; color: var(--muted); font-variant-numeric: tabular-nums; }
.tr-approved[b-latbah3zoq] { font-size: 13px; font-weight: 600; color: var(--ok, #1a7f4e); }

.tr-reopen[b-latbah3zoq], .tr-notice[b-latbah3zoq] {
    margin: 0 22px 10px; padding: 10px 14px; border-radius: 8px;
    font-size: 13.5px; display: flex; gap: 10px; align-items: center;
}
.tr-reopen[b-latbah3zoq] { background: var(--surface-2, rgba(127,127,127,.08)); }
.tr-reopen input[b-latbah3zoq] { flex: 1; }
.tr-notice[b-latbah3zoq] { background: var(--accent-soft, rgba(37,99,235,.08)); }

.tr-grid[b-latbah3zoq] {
    display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(340px, 1fr);
    gap: 14px; padding: 0 22px 28px; align-items: start;
}
@media (max-width: 980px) { .tr-grid[b-latbah3zoq] { grid-template-columns: 1fr; } }

/* ── Viewer ─────────────────────────────────────────────────────────── */
.tr-viewer[b-latbah3zoq] {
    border: 1px solid var(--border); border-radius: 10px; overflow: hidden;
    background: var(--surface, #fff);
    position: sticky; top: 12px;
}
.tr-viewer-bar[b-latbah3zoq] {
    display: flex; align-items: center; gap: 12px; padding: 8px 10px;
    border-bottom: 1px solid var(--border); font-size: 12.5px;
}
.tr-viewer-bar select[b-latbah3zoq] { max-width: 220px; }
.tr-toggle[b-latbah3zoq] { display: flex; gap: 6px; align-items: center; color: var(--muted); cursor: pointer; }
.tr-pincount[b-latbah3zoq] { margin-left: auto; color: var(--muted); font-variant-numeric: tabular-nums; }
/* The VIEWPORT. Fixed height so there is somewhere to pan within, and
   touch-action:none so a drag pans the sheet instead of scrolling the page. */
.tr-sheet[b-latbah3zoq] {
    position: relative; overflow: hidden; touch-action: none; cursor: grab;
    /* A starting height only — the viewer measures the sheet and sizes this to
       it, so a wide drawing is not letterboxed inside grey bands. */
    height: 420px; max-height: 82vh; background: var(--surface-2, #f6f7f9);
    border-radius: 8px; outline: none;
}
.tr-sheet:active[b-latbah3zoq] { cursor: grabbing; }
.tr-sheet:focus-visible[b-latbah3zoq] { box-shadow: 0 0 0 2px var(--accent, #2563eb); }
/* The transformed layer. Origin pinned at the top-left so the viewer's
   translate-then-scale math is the obvious one; the markers are positioned in
   PERCENT inside it, which is what keeps a ring covering the same piece of
   paper at every magnification. No transition — it would fight a drag. */
.tr-zoomer[b-latbah3zoq] {
    position: absolute; top: 0; left: 0; width: 100%;
    transform-origin: 0 0; will-change: transform;
}
.tr-zoomctl[b-latbah3zoq] { display: inline-flex; gap: 3px; margin-left: 8px; }
.tr-zbtn[b-latbah3zoq] {
    font-size: 11px; padding: 2px 7px; border-radius: 6px; cursor: pointer;
    border: 1px solid var(--border); background: var(--surface, #fff); color: var(--muted);
}
.tr-zbtn.on[b-latbah3zoq] { border-color: var(--accent, #2563eb); color: var(--accent, #2563eb); font-weight: 650; }
.tr-sheet img[b-latbah3zoq] { display: block; width: 100%; height: auto; }
.tr-nosheet[b-latbah3zoq] { padding: 40px 24px; color: var(--muted); font-size: 13.5px; text-align: center; }

/* A MARKER IS A REGION, NOT A POINT.
   These were a fixed 16px dot that counter-scaled as you zoomed, so the
   claim got MORE precise the closer you looked — at 6x the ring asserted
   the symbol was inside 0.9% of the sheet, which nothing in the pipeline
   can back. Sized in page fractions instead, the ring covers the same
   piece of paper at every magnification and grows on screen as you zoom:
   what it says is "the symbol is in here", which is true. 1.6% matches the
   box the stamped audit copy draws (TakeoffMarkup: longSide * 0.016), so
   the two renderings of one detection agree.
   max() keeps it clickable at fit, where 1.6% of a 305px pane is 5px. */
.tr-pin[b-latbah3zoq] {
    position: absolute; transform: translate(-50%, -50%);
    width: max(11px, 1.6%); aspect-ratio: 1; height: auto; border-radius: 50%;
    border: 2px solid; background: transparent; cursor: pointer; padding: 0;
}
/* Selection is carried by the crosshair below; the ring only has to confirm
   it once your eye arrives. */
.tr-pin.sel[b-latbah3zoq] {
    border-width: 3px; z-index: 3;
    box-shadow: 0 0 0 2px var(--surface, #fff), 0 0 0 4px rgba(37,99,235,.5);
}

/* WHICH CIRCLE. Twenty-six identical rings, one of them slightly larger, is
   not an answer — a line across the whole sheet is, at any magnification and
   wherever on the paper the count happens to be. Thickness is set inline
   from the zoom so it stays a hairline instead of becoming a band at 6x. */
.tr-cross[b-latbah3zoq] { position: absolute; background: rgba(37,99,235,.85); pointer-events: none; z-index: 2; }
.tr-cross-h[b-latbah3zoq] { left: 0; right: 0; height: calc(1.4px / var(--z, 1)); }
.tr-cross-v[b-latbah3zoq] { top: 0; bottom: 0; width: calc(1.4px / var(--z, 1)); }

/* Said where the reviewer is looking, not buried in a field they have to
   select an item to read. */
.tr-sheet-note[b-latbah3zoq] { margin: 6px 2px 0; font-size: 11.5px; color: var(--muted); line-height: 1.45; }
.tr-sheet-hint[b-latbah3zoq] { margin: 3px 2px 0; font-size: 11px; color: var(--muted); opacity: .8; }
.tr-zbtn.tr-clear[b-latbah3zoq] { border-color: var(--warning, #8a6207); color: var(--warning, #8a6207); }

/* The selection has no marker on this sheet — or belongs to another one.
   Silence here reads as "it must be one of these pins". */
.tr-nomark[b-latbah3zoq] {
    margin: 0 0 8px; padding: 8px 11px; border-radius: 8px; font-size: 12.5px;
    line-height: 1.5; color: var(--warning, #8a6207);
    background: rgba(180,83,9,.08); border: 1px solid rgba(180,83,9,.35);
}
.tr-pin.st-proposed[b-latbah3zoq] { border-color: #2563eb; border-style: dashed; background: rgba(37,99,235,.15); }
.tr-pin.st-verified[b-latbah3zoq] { border-color: #1a7f4e; background: rgba(26,127,78,.2); }
.tr-pin.st-adjusted[b-latbah3zoq] { border-color: #b45309; background: rgba(180,83,9,.2); }
.tr-pin.st-added[b-latbah3zoq]    { border-color: #7c3aed; background: rgba(124,58,237,.2); }
.tr-pin.st-excluded[b-latbah3zoq] { border-color: #6b7280; background: rgba(107,114,128,.15); opacity: .55; }
.tr-pin.st-flagged[b-latbah3zoq]  { border-color: #dc2626; background: rgba(220,38,38,.25); }

/* ── Items ──────────────────────────────────────────────────────────── */
.tr-items[b-latbah3zoq] {
    border: 1px solid var(--border); border-radius: 10px;
    background: var(--surface, #fff); overflow: hidden;
}
.tr-items-bar[b-latbah3zoq] {
    display: flex; justify-content: space-between; gap: 8px; padding: 8px 12px;
    font-size: 12px; color: var(--muted); border-bottom: 1px solid var(--border);
}
.tr-legend[b-latbah3zoq] { display: flex; gap: 8px; align-items: center; }
.tr-legend .lg[b-latbah3zoq] { width: 10px; height: 10px; border-radius: 50%; display: inline-block; margin-right: 2px; }
.tr-legend .st-flagged[b-latbah3zoq] { background: #dc2626; }
.tr-legend .st-proposed[b-latbah3zoq] { background: #2563eb; }
.tr-legend .st-verified[b-latbah3zoq] { background: #1a7f4e; }

.tr-list[b-latbah3zoq] { list-style: none; margin: 0; padding: 0; max-height: 66vh; overflow-y: auto; }
.tr-item[b-latbah3zoq] { border-bottom: 1px solid var(--border); }
.tr-item:last-child[b-latbah3zoq] { border-bottom: none; }
.tr-item.sel[b-latbah3zoq] { background: var(--accent-soft, rgba(37,99,235,.06)); box-shadow: inset 3px 0 0 var(--accent, #2563eb); }
.tr-item-head[b-latbah3zoq] {
    display: grid; grid-template-columns: auto 1fr auto auto; gap: 10px;
    align-items: center; padding: 8px 12px; cursor: pointer; font-size: 13.5px;
}
.tr-item-name[b-latbah3zoq] { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tr-item-type[b-latbah3zoq] { color: var(--muted); font-size: 12px; margin-left: 6px; }
.tr-item-qty[b-latbah3zoq] { font-variant-numeric: tabular-nums; white-space: nowrap; }
.tr-item-qty s[b-latbah3zoq] { color: var(--muted); margin-left: 6px; font-size: 12px; }
.tr-conf[b-latbah3zoq] { font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; }

.tr-chip[b-latbah3zoq] {
    font-size: 11px; font-weight: 650; padding: 2px 8px; border-radius: 999px;
    white-space: nowrap;
}
.tr-chip.st-proposed[b-latbah3zoq] { background: rgba(37,99,235,.12); color: #2563eb; border: 1px dashed #2563eb; }
.tr-chip.st-verified[b-latbah3zoq] { background: rgba(26,127,78,.14); color: #1a7f4e; }
.tr-chip.st-adjusted[b-latbah3zoq] { background: rgba(180,83,9,.14); color: #b45309; }
.tr-chip.st-added[b-latbah3zoq]    { background: rgba(124,58,237,.13); color: #7c3aed; }
.tr-chip.st-excluded[b-latbah3zoq] { background: rgba(107,114,128,.15); color: #6b7280; text-decoration: line-through; }
.tr-chip.st-flagged[b-latbah3zoq]  { background: rgba(220,38,38,.13); color: #dc2626; }

.tr-item-body[b-latbah3zoq] { padding: 0 12px 10px 12px; font-size: 13px; }
.tr-basis[b-latbah3zoq] { color: var(--muted); margin: 4px 0; }
.tr-reason[b-latbah3zoq] { margin: 4px 0; font-weight: 550; }
.tr-where[b-latbah3zoq] { color: var(--muted); font-size: 12px; margin: 4px 0; }
/* Which FILE a count came from. On a bid set "page 3" is not an answer. */
.tr-where-doc[b-latbah3zoq] {
    font-weight: 650; color: var(--fg, inherit);
    margin-right: 6px; padding: 1px 6px; border-radius: 5px;
    background: var(--surface-2, rgba(127,127,127,.1));
}
.tr-acts[b-latbah3zoq] { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 8px; }

.tr-btn[b-latbah3zoq] {
    font-size: 12.5px; padding: 5px 12px; border-radius: 7px;
    border: 1px solid var(--border); background: var(--surface, #fff);
    cursor: pointer;
}
.tr-btn:hover:not(:disabled)[b-latbah3zoq] { border-color: var(--accent, #2563eb); }
.tr-btn:disabled[b-latbah3zoq] { opacity: .5; cursor: default; }
.tr-btn-primary[b-latbah3zoq] { background: var(--accent, #2563eb); border-color: var(--accent, #2563eb); color: #fff; font-weight: 600; }
.tr-btn-ok[b-latbah3zoq] { border-color: #1a7f4e; color: #1a7f4e; font-weight: 600; }
.tr-btn-mute[b-latbah3zoq] { color: var(--muted); }
.tr-qty[b-latbah3zoq] { width: 76px; }
.tr-why[b-latbah3zoq] { flex: 1; min-width: 130px; }

.tr-derive[b-latbah3zoq] {
    display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
    padding: 10px 12px; border-top: 1px solid var(--border);
}
.tr-derive-note[b-latbah3zoq] { font-size: 12.5px; color: var(--muted); }

/* The network decision. Sits directly above Derive because it changes what
   Derive produces, and reads as a question because it is one. */
.tr-arch[b-latbah3zoq] { padding: 10px 12px; border-top: 1px solid var(--border); font-size: 13px; }
.tr-arch .tr-add-row[b-latbah3zoq] { align-items: center; }
.tr-arch select[b-latbah3zoq] { min-width: 260px; }
.tr-arch-num[b-latbah3zoq], .tr-arch-check[b-latbah3zoq] {
    display: inline-flex; align-items: center; gap: 6px;
    font-size: 12.5px; color: var(--muted);
}
.tr-arch-demand[b-latbah3zoq] { flex: 1; min-width: 200px; }

.tr-demands[b-latbah3zoq] { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 5px; }
.tr-demands li[b-latbah3zoq] {
    display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap;
    font-size: 12.5px; padding: 5px 8px; border-radius: 7px;
    background: var(--surface-2, rgba(127,127,127,.06));
}
/* An unmet demand is the whole point of the list — it must not read as one
   more row. It is money nobody has carried. */
.tr-demands li.unmet[b-latbah3zoq] { background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent); }
.tr-demand-mark[b-latbah3zoq] {
    font-size: 10.5px; letter-spacing: .04em; text-transform: uppercase;
    font-weight: 600; color: var(--muted);
}
.tr-demands li.unmet .tr-demand-mark[b-latbah3zoq] { color: var(--warning, #8a6207); }
.tr-demands li.met .tr-demand-mark[b-latbah3zoq] { color: var(--ok, #2e7d32); }
.tr-demand-why[b-latbah3zoq] { color: var(--muted); font-size: 12px; }
.tr-warn[b-latbah3zoq] { color: var(--warning, #8a6207); }
.tr-linkbtn[b-latbah3zoq] {
    background: none; border: 0; padding: 0; font: inherit; font-size: 12px;
    color: var(--muted); text-decoration: underline; cursor: pointer;
}
.tr-linkbtn:hover[b-latbah3zoq] { color: var(--danger, #c0392b); }
.tr-linkbtn:disabled[b-latbah3zoq] { cursor: default; opacity: .5; text-decoration: none; }

.tr-add[b-latbah3zoq] { padding: 10px 12px; border-top: 1px solid var(--border); font-size: 13px; }
.tr-add-row[b-latbah3zoq] { display: flex; gap: 8px; margin-top: 6px; flex-wrap: wrap; }
.tr-add-row input:first-child[b-latbah3zoq] { flex: 1; min-width: 160px; }
.tr-add-tag[b-latbah3zoq] { width: 90px; }

.tr-qty[b-latbah3zoq], .tr-why[b-latbah3zoq], .tr-add-row input[b-latbah3zoq], .tr-reopen input[b-latbah3zoq], .tr-viewer-bar select[b-latbah3zoq] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit;
}

/* The rest of the bid set. A takeoff reads one document per run; the files
   it has not read are money nobody has counted, and silence about them was
   the failure. */
.tr-uncounted[b-latbah3zoq] {
    padding: 11px 12px; border-top: 1px solid var(--border);
    font-size: 13px; line-height: 1.5;
    display: flex; flex-direction: column; gap: 5px;
    background: color-mix(in srgb, var(--warning, #b48309) 10%, transparent);
}
.tr-uncounted > strong[b-latbah3zoq] { color: var(--warning, #8a6207); }
.tr-uncounted ul[b-latbah3zoq] { list-style: none; margin: 2px 0 0; padding: 0; display: grid; gap: 3px; }
.tr-uncounted li[b-latbah3zoq] { font-size: 12.5px; display: flex; gap: 8px; align-items: baseline; }
.tr-uncounted li span[b-latbah3zoq] {
    font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
    font-weight: 700; color: var(--muted);
}

/* ── Repeated symbols nothing on the sheet names ──────────────────────────
   A demolition plan locates every device exactly and labels none of them.
   One answer here settles a whole family, so this is the highest-leverage
   control on the screen — and until it is answered, none of it is a count. */
.tr-families[b-latbah3zoq] {
    margin: 10px 0 0; padding: 11px 13px; border-radius: 9px;
    border: 1px solid var(--border); background: var(--surface, #fff);
}
.tr-families h3[b-latbah3zoq] { font-size: 14px; margin: 0 0 3px; }
.tr-fam-why[b-latbah3zoq] { font-size: 12px; color: var(--muted); margin: 0 0 9px; line-height: 1.5; }
.tr-fam[b-latbah3zoq] { border-top: 1px solid var(--border); padding: 8px 0 6px; }
.tr-fam:first-of-type[b-latbah3zoq] { border-top: none; }
.tr-fam.on[b-latbah3zoq] { background: var(--accent-soft, rgba(37,99,235,.06)); }
.tr-fam-head[b-latbah3zoq] {
    display: flex; gap: 10px; align-items: baseline; width: 100%;
    background: none; border: 0; padding: 2px 0; cursor: pointer;
    font-size: 13.5px; color: inherit; text-align: left;
}
.tr-fam-size[b-latbah3zoq] { color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.tr-fam-acts[b-latbah3zoq] { display: flex; gap: 7px; align-items: center; flex-wrap: wrap; margin-top: 6px; }
.tr-fam-name[b-latbah3zoq] {
    border: 1px solid var(--border); border-radius: 7px; padding: 5px 8px;
    font-size: 12.5px; background: var(--surface, #fff); color: inherit; min-width: 150px;
}
.tr-fam-done[b-latbah3zoq] { margin: 8px 0 0; font-size: 12.5px; color: var(--muted); }
.tr-fam-done summary[b-latbah3zoq] { cursor: pointer; }
.tr-fam-doneline[b-latbah3zoq] { margin: 4px 0; }
.tr-linkish[b-latbah3zoq] {
    background: none; border: 0; padding: 0 0 0 6px; cursor: pointer;
    color: var(--accent, #2563eb); font-size: 12px; text-decoration: underline;
}

/* The family being considered, shown everywhere it appears. Dashed and
   hollow on purpose: these are NOT counts yet and must not read as counts. */
.tr-fampin[b-latbah3zoq] {
    position: absolute; transform: translate(-50%, -50%);
    width: max(11px, 1.6%); aspect-ratio: 1; border-radius: 3px;
    border: 2px dashed var(--warning, #8a6207);
    background: rgba(180,83,9,.10); pointer-events: none; z-index: 1;
}

.tr-fam-count[b-latbah3zoq] { font-weight: 400; font-size: 12px; color: var(--muted); margin-left: 8px; }
.tr-fam-more[b-latbah3zoq] { display: block; margin-top: 8px; text-align: left; }
/* _content/Buildessa/Components/Pages/Projects/VendorQuotesPage.razor.rz.scp.css */
.vq[b-s7fufe8p57] { max-width: 1120px; margin: 0 auto; padding: 18px 22px 60px; }

.vq-head[b-s7fufe8p57] { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; }
.vq-back[b-s7fufe8p57] { font-size: 13px; color: var(--muted); text-decoration: none; }
.vq-back:hover[b-s7fufe8p57] { text-decoration: underline; }
.vq h1[b-s7fufe8p57] { font-size: 22px; margin: 0; letter-spacing: -.015em; }

.vq-lede[b-s7fufe8p57] { font-size: 14px; color: var(--muted); margin: 0 0 16px; max-width: 74ch; line-height: 1.55; }

/* An expired quote still prices, so the warning has to carry the whole
   reason — it is not an error, it is a commitment that has lapsed. */
.vq-warn[b-s7fufe8p57] {
    padding: 11px 14px; border-radius: 9px; margin-bottom: 14px;
    font-size: 13.5px; line-height: 1.5;
    background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--warning, #b48309) 30%, transparent);
}
.vq-warn strong[b-s7fufe8p57] { display: block; color: var(--warning, #8a6207); }

.vq-add[b-s7fufe8p57] {
    border: 1px solid var(--border); border-radius: 11px;
    padding: 13px 15px; margin-bottom: 18px; font-size: 13.5px;
    background: var(--surface-2, rgba(127,127,127,.04));
    display: flex; flex-direction: column; gap: 8px;
}
.vq-row[b-s7fufe8p57] { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.vq-add input[b-s7fufe8p57], .vq-add select[b-s7fufe8p57] {
    border: 1px solid var(--border); border-radius: 7px; padding: 6px 9px;
    font-size: 13px; background: var(--surface, #fff); color: inherit;
}
.vq-vendor[b-s7fufe8p57] { width: 160px; }
.vq-scope[b-s7fufe8p57] { flex: 1; min-width: 170px; }
.vq-amt[b-s7fufe8p57] { width: 110px; }
.vq-date[b-s7fufe8p57] { width: 155px; }
.vq-line[b-s7fufe8p57] { flex: 1; min-width: 280px; }
.vq-incl[b-s7fufe8p57] { flex: 1; min-width: 240px; }
.vq-chk[b-s7fufe8p57] { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; color: var(--muted); }
.vq-note[b-s7fufe8p57] { font-size: 12.5px; color: var(--muted); }
.vq-err[b-s7fufe8p57] { font-size: 12.5px; color: var(--danger, #c0392b); }

.vq-btn[b-s7fufe8p57] {
    border: 1px solid var(--border); border-radius: 7px; padding: 6px 12px;
    font-size: 13px; background: var(--surface, #fff); color: inherit; cursor: pointer;
}
.vq-btn-primary[b-s7fufe8p57] { background: var(--accent, #2563eb); color: #fff; border-color: transparent; }
.vq-btn:disabled[b-s7fufe8p57] { opacity: .5; cursor: default; }

.vq-table[b-s7fufe8p57] { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.vq-table th[b-s7fufe8p57] {
    text-align: left; font-size: 11px; letter-spacing: .07em; text-transform: uppercase;
    color: var(--muted); font-weight: 600; padding: 8px 10px;
    border-bottom: 1px solid var(--border);
}
.vq-table th.num[b-s7fufe8p57], .vq-table td.num[b-s7fufe8p57] { text-align: right; font-variant-numeric: tabular-nums; }
.vq-table td[b-s7fufe8p57] { padding: 9px 10px; border-bottom: 1px solid var(--border); vertical-align: top; }

/* A quote on the bid is money someone is committed to; a held one is an
   alternative. They must not look alike. */
.vq-table tr.sel[b-s7fufe8p57] { background: color-mix(in srgb, var(--ok, #2e7d32) 7%, transparent); }
.vq-table tr.expired[b-s7fufe8p57] { background: color-mix(in srgb, var(--warning, #b48309) 12%, transparent); }

.vq-kind[b-s7fufe8p57] {
    display: block; font-size: 10.5px; letter-spacing: .06em;
    text-transform: uppercase; color: var(--muted); margin-top: 2px;
}
.vq-incls[b-s7fufe8p57] { display: block; font-size: 12px; color: var(--muted); margin-top: 3px; }
.vq-replaces[b-s7fufe8p57] { font-size: 12.5px; color: var(--muted); max-width: 320px; }
.vq-lapsed[b-s7fufe8p57] { color: var(--warning, #8a6207); font-weight: 600; }
.vq-nodate[b-s7fufe8p57] { color: var(--muted); font-style: italic; }
.vq-actions[b-s7fufe8p57] { text-align: right; }
.vq-link[b-s7fufe8p57] {
    background: none; border: 0; padding: 0; font: inherit; font-size: 12.5px;
    color: var(--muted); text-decoration: underline; cursor: pointer;
}
.vq-link:hover[b-s7fufe8p57] { color: var(--danger, #c0392b); }

.vq-empty[b-s7fufe8p57] {
    border: 1px dashed var(--border); border-radius: 11px;
    padding: 22px; text-align: center; color: var(--muted); font-size: 13.5px;
}
.vq-empty p[b-s7fufe8p57] { margin: 5px 0; }
/* _content/Buildessa/Components/Pages/Workstation.razor.rz.scp.css */
.ws-dl-page[b-s300srntw5] {
    max-width: 820px;
    margin: 0 auto;
    padding: 40px 32px 60px;
    color: var(--fg);
}

/* Hero ───────────────────────────────────────────────────────────── */

.ws-dl-hero[b-s300srntw5] {
    display: flex;
    align-items: center;
    gap: 22px;
    padding: 28px 32px;
    background: linear-gradient(135deg,
        rgba(196, 181, 253, 0.10) 0%,
        rgba(196, 181, 253, 0.02) 100%);
    border: 1px solid var(--accent-soft);
    border-radius: 14px;
    margin-bottom: 28px;
}
.ws-dl-icon[b-s300srntw5] {
    width: 64px;
    height: 64px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(196, 181, 253, 0.12);
    border-radius: 14px;
    color: var(--accent);
}
.ws-dl-icon svg[b-s300srntw5] { width: 32px; height: 32px; }
.ws-dl-hero h1[b-s300srntw5] {
    margin: 0 0 6px;
    font-size: 24px;
    color: var(--fg);
}
.ws-dl-tagline[b-s300srntw5] {
    margin: 0;
    color: var(--fg-dim);
    font-size: 14px;
    line-height: 1.6;
}

/* Empty state ────────────────────────────────────────────────────── */

.ws-dl-empty[b-s300srntw5] {
    padding: 32px;
    text-align: center;
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
}
.ws-dl-empty h2[b-s300srntw5] {
    margin: 0 0 8px;
    font-size: 17px;
    color: var(--fg);
}
.ws-dl-empty p[b-s300srntw5] {
    color: var(--fg-dim);
    font-size: 13.5px;
    margin: 0;
}

/* Download cards ────────────────────────────────────────────────── */

.ws-dl-card[b-s300srntw5] {
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 24px 28px;
    margin-bottom: 18px;
}
.ws-dl-card.primary[b-s300srntw5] {
    border-color: var(--accent-soft);
    box-shadow: 0 1px 0 rgba(196, 181, 253, 0.10);
}
.ws-dl-card-head[b-s300srntw5] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
    margin-bottom: 12px;
}
.ws-dl-card-eyebrow[b-s300srntw5] {
    text-transform: uppercase;
    letter-spacing: 0.6px;
    font-size: 11px;
    color: var(--muted);
    font-weight: 600;
    margin-bottom: 2px;
}
.ws-dl-card h2[b-s300srntw5] {
    margin: 0 0 6px;
    font-size: 18px;
    color: var(--fg);
}
.ws-dl-meta[b-s300srntw5] {
    font-size: 12.5px;
    color: var(--muted);
}
.ws-dl-meta strong[b-s300srntw5] {
    color: var(--fg-dim);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

.ws-dl-btn[b-s300srntw5] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 18px;
    border-radius: 8px;
    text-decoration: none;
    background: var(--bg-overlay);
    color: var(--fg);
    border: 1px solid var(--border);
    font-size: 13.5px;
    white-space: nowrap;
    transition: background 120ms ease, border-color 120ms ease;
}
.ws-dl-btn:hover[b-s300srntw5] {
    background: var(--hover-overlay);
    border-color: var(--border-strong);
}
.ws-dl-btn.primary[b-s300srntw5] {
    background: var(--accent);
    color: white;
    border-color: var(--accent);
    font-weight: 600;
}
.ws-dl-btn.primary:hover[b-s300srntw5] {
    background: var(--accent-soft);
    border-color: var(--accent-soft);
}

.ws-dl-notes[b-s300srntw5] {
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 12px 14px;
    margin: 12px 0;
}
.ws-dl-notes-head[b-s300srntw5] {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--muted);
    margin-bottom: 4px;
}
.ws-dl-notes pre[b-s300srntw5] {
    margin: 0;
    white-space: pre-wrap;
    font-family: inherit;
    font-size: 13px;
    color: var(--fg-dim);
}

.ws-dl-steps[b-s300srntw5] {
    margin: 14px 0 12px;
    padding-left: 22px;
    color: var(--fg-dim);
    font-size: 13.5px;
    line-height: 1.7;
}
.ws-dl-steps code[b-s300srntw5] {
    background: var(--bg-input);
    border: 1px solid var(--border);
    border-radius: 4px;
    padding: 1px 5px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12.5px;
}

.ws-dl-fineprint[b-s300srntw5] {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
    color: var(--muted);
    font-size: 12.5px;
    line-height: 1.6;
}
.ws-dl-fineprint strong[b-s300srntw5] { color: var(--fg-dim); }

/* System requirements ───────────────────────────────────────────── */

.ws-dl-sysreq[b-s300srntw5] {
    padding: 20px 28px;
    margin-top: 18px;
}
.ws-dl-sysreq h3[b-s300srntw5] {
    margin: 0 0 10px;
    font-size: 14px;
    color: var(--fg);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    font-weight: 600;
}
.ws-dl-sysreq ul[b-s300srntw5] {
    margin: 0;
    padding-left: 20px;
    color: var(--fg-dim);
    font-size: 13px;
    line-height: 1.7;
}
/* _content/Buildessa/Components/Pages/WorkstationPair.razor.rz.scp.css */
.pair-page[b-9n0b2qvhhd] {
    max-width: 640px;
    margin: 48px auto;
    padding: 0 20px;
}
.pair-card[b-9n0b2qvhhd] {
    background: var(--bg-card, #fff);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 28px 32px;
}
.pair-card h1[b-9n0b2qvhhd] {
    margin: 0 0 8px;
    font-size: 22px;
    font-weight: 600;
}
.pair-card .lede[b-9n0b2qvhhd] {
    color: var(--muted);
    margin: 0 0 20px;
    line-height: 1.55;
}
.pair-card .lede.error[b-9n0b2qvhhd] {
    color: var(--danger);
}
.pair-card .hint[b-9n0b2qvhhd] {
    color: var(--muted);
    font-size: 12.5px;
    line-height: 1.55;
    margin: 16px 0;
}
.pair-facts[b-9n0b2qvhhd] {
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: 6px 16px;
    margin: 16px 0 20px;
    padding: 14px 16px;
    background: var(--bg-overlay);
    border-radius: 6px;
}
.pair-facts dt[b-9n0b2qvhhd] {
    color: var(--muted);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    align-self: center;
}
.pair-facts dd[b-9n0b2qvhhd] {
    margin: 0;
    color: var(--fg);
    align-self: center;
}
.pair-facts code[b-9n0b2qvhhd] {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 13px;
    background: var(--bg-input);
    padding: 2px 6px;
    border-radius: 4px;
    border: 1px solid var(--border);
}
.pair-error[b-9n0b2qvhhd] {
    color: var(--danger);
    background: rgba(220, 80, 80, 0.08);
    border-left: 3px solid var(--danger);
    padding: 8px 12px;
    border-radius: 4px;
    font-size: 13px;
    margin: 12px 0;
}
.pair-actions[b-9n0b2qvhhd] {
    display: flex;
    gap: 10px;
    margin-top: 20px;
}
/* _content/Buildessa/Components/Surveys/SurveyStudio.razor.rz.scp.css */
/* Site Survey studio — the shared build/preview/send/track editor. Scoped to
   this component so it renders identically inside either host page (the
   building survey page and the project deliverable studio). All colour comes
   from the shared palette tokens so light/dark both track automatically. */

.sv-page[b-o4r3tsd30u] { display: flex; flex-direction: column; color: var(--fg); }

/* ── Tabs ─────────────────────────────────────────────────────────── */
.sv-tabs[b-o4r3tsd30u] {
    display: flex;
    gap: 6px;
    margin: 18px 0 4px;
    border-bottom: 1px solid var(--border);
}

.sv-tab[b-o4r3tsd30u] {
    background: transparent;
    border: none;
    border-bottom: 2px solid transparent;
    color: var(--muted);
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    padding: 8px 12px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-bottom: -1px;
}

.sv-tab:hover[b-o4r3tsd30u] { color: var(--fg); }

.sv-tab.active[b-o4r3tsd30u] {
    color: var(--fg);
    border-bottom-color: var(--accent);
}

.sv-count[b-o4r3tsd30u] {
    font-size: 11px;
    font-weight: 600;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 999px;
    padding: 1px 7px;
    color: var(--muted);
}

/* ── Header row ───────────────────────────────────────────────────── */
.sv-head[b-o4r3tsd30u] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    margin: 20px 0 6px;
}

.sv-head-main[b-o4r3tsd30u] {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

.sv-head-main h1[b-o4r3tsd30u] {
    font-size: 22px;
    font-weight: 650;
    margin: 0;
    color: var(--fg);
    word-break: break-word;
}

.sv-toggle[b-o4r3tsd30u] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: var(--fg-dim);
    cursor: pointer;
}

.sv-toggle input[b-o4r3tsd30u] { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; }

.sv-head-actions[b-o4r3tsd30u] {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}

.sv-readonly-note[b-o4r3tsd30u] {
    font-size: 13px;
    color: var(--muted);
    margin: 4px 0 0;
}

.sv-gennote[b-o4r3tsd30u] {
    font-size: 13px;
    line-height: 1.5;
    color: var(--fg-dim);
    background: color-mix(in srgb, var(--accent) 7%, transparent);
    border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--border));
    border-radius: 8px;
    padding: 8px 12px;
    margin: 10px 0 0;
}

/* ── Sections ─────────────────────────────────────────────────────── */
.sv-section[b-o4r3tsd30u] { margin: 26px 0 0; }

.sv-section-title[b-o4r3tsd30u] {
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--fg);
    margin: 0 0 10px;
}

.sv-hint[b-o4r3tsd30u] {
    font-size: 13px;
    line-height: 1.55;
    color: var(--muted);
    margin: 0 0 12px;
}

.sv-hint em[b-o4r3tsd30u] { font-style: italic; color: var(--fg-dim); }

.sv-muted[b-o4r3tsd30u] { color: var(--muted); font-size: 14px; margin: 8px 0; }

.sv-dim[b-o4r3tsd30u] { color: var(--muted); }

/* ── Item cards ───────────────────────────────────────────────────── */
.sv-item[b-o4r3tsd30u] {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    padding: 14px;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: color-mix(in srgb, var(--fg) 3%, transparent);
    margin-bottom: 10px;
}

.sv-item-body[b-o4r3tsd30u] { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 10px; }

.sv-item-muted[b-o4r3tsd30u] { opacity: 0.6; }

.sv-field[b-o4r3tsd30u] { display: flex; flex-direction: column; gap: 4px; }

.sv-field label[b-o4r3tsd30u] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--muted);
}

.sv-field input[type="text"][b-o4r3tsd30u],
.sv-field input[type="number"][b-o4r3tsd30u],
.sv-field textarea[b-o4r3tsd30u],
.sv-field select[b-o4r3tsd30u] {
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 8px;
    color: var(--fg);
    font: inherit;
    font-size: 14px;
    padding: 8px 10px;
    width: 100%;
    box-sizing: border-box;
}

.sv-field textarea[b-o4r3tsd30u] { resize: vertical; line-height: 1.45; }

.sv-field input:focus[b-o4r3tsd30u],
.sv-field textarea:focus[b-o4r3tsd30u],
.sv-field select:focus[b-o4r3tsd30u] {
    outline: none;
    border-color: var(--accent);
}

.sv-field input:disabled[b-o4r3tsd30u],
.sv-field textarea:disabled[b-o4r3tsd30u],
.sv-field select:disabled[b-o4r3tsd30u] { opacity: 0.7; cursor: default; }

.sv-field-row[b-o4r3tsd30u] {
    display: flex;
    gap: 12px;
    align-items: flex-end;
    flex-wrap: wrap;
}

.sv-field-sm[b-o4r3tsd30u] { flex: 1 1 160px; min-width: 140px; }
.sv-field-xs[b-o4r3tsd30u] { flex: 0 0 120px; }

.sv-check[b-o4r3tsd30u] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: var(--fg-dim);
    padding-bottom: 9px;
    white-space: nowrap;
    cursor: pointer;
}

.sv-check input[b-o4r3tsd30u] { width: 15px; height: 15px; accent-color: var(--accent); }

.sv-status-badge[b-o4r3tsd30u] {
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    padding: 2px 7px;
    border-radius: 999px;
    border: 1px solid var(--border);
    color: var(--muted);
    margin-bottom: 8px;
    margin-left: auto;
}

.sv-badge-edited[b-o4r3tsd30u] { color: var(--info); }
.sv-badge-added[b-o4r3tsd30u] { color: var(--success); }

.sv-proposed[b-o4r3tsd30u] {
    font-size: 12px;
    color: var(--muted);
    font-style: italic;
    margin: 0;
}

.sv-drop-q[b-o4r3tsd30u] { color: var(--fg); font-size: 14px; }

.sv-item-actions[b-o4r3tsd30u] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    align-items: stretch;
    flex: 0 0 auto;
}

.sv-icon-btn[b-o4r3tsd30u] {
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 6px;
    color: var(--fg-dim);
    cursor: pointer;
    font-size: 11px;
    padding: 4px 8px;
    line-height: 1;
}

.sv-icon-btn:hover:not(:disabled)[b-o4r3tsd30u] { background: var(--hover-overlay); color: var(--fg); }
.sv-icon-btn:disabled[b-o4r3tsd30u] { opacity: 0.35; cursor: not-allowed; }

/* ── Buttons ──────────────────────────────────────────────────────── */
.sv-btn[b-o4r3tsd30u] {
    background: transparent;
    color: var(--fg-dim);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 8px 14px;
    cursor: pointer;
    font: inherit;
    font-size: 13px;
    white-space: nowrap;
}

.sv-btn:hover:not(:disabled)[b-o4r3tsd30u] { background: var(--hover-overlay); color: var(--fg); }
.sv-btn:disabled[b-o4r3tsd30u] { opacity: 0.5; cursor: not-allowed; }

.sv-btn-sm[b-o4r3tsd30u] { padding: 5px 10px; font-size: 12px; }

.sv-btn-primary[b-o4r3tsd30u] {
    background: var(--accent);
    color: #10121a;
    border-color: transparent;
    font-weight: 600;
}

.sv-btn-primary:hover:not(:disabled)[b-o4r3tsd30u] {
    background: color-mix(in srgb, var(--accent) 85%, #fff);
    color: #10121a;
}

.sv-btn-danger:hover:not(:disabled)[b-o4r3tsd30u] {
    color: var(--danger);
    border-color: var(--danger);
    background: color-mix(in srgb, var(--danger) 10%, transparent);
}

/* ── Add item ─────────────────────────────────────────────────────── */
.sv-add[b-o4r3tsd30u] {
    margin: 26px 0 0;
    padding: 16px;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--bg-elevated);
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* ── Floor plans ──────────────────────────────────────────────────── */
.sv-plan-grid[b-o4r3tsd30u] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: 14px;
    margin-bottom: 14px;
}

.sv-plan-card[b-o4r3tsd30u] {
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    background: var(--bg-elevated);
    display: flex;
    flex-direction: column;
}

.sv-plan-thumb[b-o4r3tsd30u] {
    width: 100%;
    height: 130px;
    object-fit: cover;
    background: var(--bg-overlay);
    display: block;
}

.sv-plan-meta[b-o4r3tsd30u] { padding: 8px 10px; font-size: 12px; }
.sv-plan-name[b-o4r3tsd30u] { color: var(--fg); font-weight: 500; }

.sv-plan-card .sv-btn[b-o4r3tsd30u] { margin: 0 10px 10px; }

.sv-upload[b-o4r3tsd30u] {
    display: block;
    border: 1px dashed var(--border-strong);
    border-radius: 10px;
    padding: 20px;
    text-align: center;
    cursor: pointer;
    background: var(--bg-elevated);
    position: relative;
    transition: background 120ms ease;
}

.sv-upload:hover[b-o4r3tsd30u] { background: var(--hover-overlay); }

.sv-upload[b-o4r3tsd30u]  input[type="file"] {
    position: absolute;
    inset: 0;
    opacity: 0;
    width: 100%;
    height: 100%;
    cursor: pointer;
}

.sv-upload-body[b-o4r3tsd30u] { display: flex; flex-direction: column; gap: 3px; }
.sv-upload-title[b-o4r3tsd30u] { font-size: 14px; font-weight: 600; color: var(--fg); }

/* ── Share links ──────────────────────────────────────────────────── */
.sv-mint[b-o4r3tsd30u] {
    display: flex;
    gap: 12px;
    align-items: flex-end;
    flex-wrap: wrap;
    margin-bottom: 14px;
}

.sv-mint .sv-btn[b-o4r3tsd30u] { margin-bottom: 0; }

.sv-minted[b-o4r3tsd30u] {
    border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--border));
    background: color-mix(in srgb, var(--accent) 8%, transparent);
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 14px;
}

.sv-minted-label[b-o4r3tsd30u] { font-size: 12px; color: var(--fg-dim); margin-bottom: 8px; font-weight: 600; }

.sv-minted-row[b-o4r3tsd30u] { display: flex; gap: 10px; align-items: center; }

.sv-minted-url[b-o4r3tsd30u] {
    flex: 1;
    min-width: 0;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 12px;
    color: var(--fg);
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 8px 10px;
    overflow-x: auto;
    white-space: nowrap;
}

.sv-links[b-o4r3tsd30u] { display: flex; flex-direction: column; gap: 8px; }

.sv-link-row[b-o4r3tsd30u] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--bg-elevated);
    font-size: 13px;
}

.sv-link-icon[b-o4r3tsd30u] { font-size: 16px; }
.sv-link-main[b-o4r3tsd30u] { flex: 1; min-width: 0; color: var(--fg); }

/* ── Preview: the real field app embedded in a phone frame ───────────── */
.sv-preview-stage[b-o4r3tsd30u] {
    display: flex;
    justify-content: center;
    padding: 20px 0 8px;
}

.sv-phone[b-o4r3tsd30u] {
    width: 100%;
    max-width: 400px;
    height: 720px;
    border: 10px solid #1b1b1f;
    border-radius: 28px;
    overflow: hidden;
    background: #000;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
}

.sv-phone-screen[b-o4r3tsd30u] {
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}

/* ── Results: summary tiles ───────────────────────────────────────── */
.sv-summary[b-o4r3tsd30u] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 12px;
    margin: 18px 0 8px;
}

.sv-tile[b-o4r3tsd30u] {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 16px;
    background: color-mix(in srgb, var(--fg) 3%, transparent);
    text-align: center;
}

.sv-tile-num[b-o4r3tsd30u] { font-size: 26px; font-weight: 650; color: var(--fg); }
.sv-tile-label[b-o4r3tsd30u] { font-size: 12px; color: var(--muted); margin-top: 2px; }

.sv-empty-results[b-o4r3tsd30u] {
    margin: 30px 0;
    padding: 30px;
    text-align: center;
    color: var(--muted);
    border: 1px dashed var(--border);
    border-radius: 12px;
}

/* ── Results: floor plan + pins ───────────────────────────────────── */
.sv-result-plan[b-o4r3tsd30u] { margin-bottom: 20px; }

.sv-plan-stage[b-o4r3tsd30u] {
    position: relative;
    display: inline-block;
    max-width: 100%;
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    background: var(--bg-overlay);
}

.sv-plan-stage img[b-o4r3tsd30u] { display: block; max-width: 100%; height: auto; }

.sv-pin[b-o4r3tsd30u] {
    position: absolute;
    transform: translate(-50%, -50%);
    min-width: 22px;
    height: 22px;
    padding: 0 4px;
    border-radius: 999px;
    background: var(--accent);
    color: #10121a;
    font-size: 12px;
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 2px solid var(--bg);
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
    cursor: default;
}

.sv-pin-photo[b-o4r3tsd30u] { background: var(--info); }

/* ── Results: responses ───────────────────────────────────────────── */
.sv-response[b-o4r3tsd30u] {
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 14px;
    background: var(--bg-elevated);
    margin-bottom: 10px;
}

.sv-response-q[b-o4r3tsd30u] { font-size: 14px; font-weight: 600; color: var(--fg); }

.sv-response-a[b-o4r3tsd30u] {
    font-size: 14px;
    color: var(--fg-dim);
    margin-top: 6px;
    line-height: 1.5;
    white-space: pre-wrap;
    word-break: break-word;
}

.sv-response-meta[b-o4r3tsd30u] { font-size: 12px; margin-top: 8px; }

.sv-photo-grid[b-o4r3tsd30u] {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 10px;
}

.sv-photo[b-o4r3tsd30u] {
    display: block;
    width: 96px;
    height: 96px;
    border-radius: 8px;
    overflow: hidden;
    border: 1px solid var(--border);
    background: var(--bg-overlay);
}

.sv-photo img[b-o4r3tsd30u] { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ── Results: equipment inventory ─────────────────────────────────────── */
.sv-equip-cat[b-o4r3tsd30u] { margin: 0 0 16px; }
.sv-equip-cat-head[b-o4r3tsd30u] {
    font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px;
    margin: 0 0 6px;
}
.sv-equip-row[b-o4r3tsd30u] {
    display: flex; gap: 10px; align-items: flex-start;
    padding: 8px 0; border-bottom: 1px solid var(--border);
}
.sv-equip-row:last-child[b-o4r3tsd30u] { border-bottom: 0; }
.sv-equip-chip[b-o4r3tsd30u] {
    flex: 0 0 auto; align-self: flex-start;
    padding: 2px 9px; border-radius: 999px; color: #fff;
    font-size: 12px; font-weight: 600; white-space: nowrap;
}
.sv-equip-main[b-o4r3tsd30u] { flex: 1; min-width: 0; }
.sv-equip-note[b-o4r3tsd30u] { font-size: 13px; color: var(--fg-dim); line-height: 1.45; }
.sv-equip-meta[b-o4r3tsd30u] { font-size: 12px; margin-top: 2px; }

/* ── Feedback ─────────────────────────────────────────────────────── */
.sv-error[b-o4r3tsd30u] {
    color: var(--danger);
    font-size: 13px;
    margin: 10px 0 0;
}

/* ── Pills (local copies — same vocabulary as the sibling pages) ───── */
.pill[b-o4r3tsd30u] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    border: 1px solid transparent;
}

.pill-muted[b-o4r3tsd30u]   { background: var(--bg-overlay); color: var(--muted);   border-color: var(--border); }
.pill-info[b-o4r3tsd30u]    { background: var(--bg-overlay); color: var(--info);    border-color: var(--border); }
.pill-success[b-o4r3tsd30u] { background: var(--bg-overlay); color: var(--success); border-color: var(--border); }
.pill-warning[b-o4r3tsd30u] { background: var(--bg-overlay); color: var(--warning); border-color: var(--border); }
.pill-danger[b-o4r3tsd30u]  { background: var(--bg-overlay); color: var(--danger);  border-color: var(--border); }

/* ── Utilities ────────────────────────────────────────────────────── */
.truncate[b-o4r3tsd30u] {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Responsive ───────────────────────────────────────────────────── */
@media (max-width: 640px) {
    .sv-item[b-o4r3tsd30u] { flex-direction: column; }
    .sv-item-actions[b-o4r3tsd30u] { flex-direction: row; flex-wrap: wrap; }
}
/* _content/Buildessa/Components/Theming/ThemePicker.razor.rz.scp.css */
.theme-picker[b-gsfos7el9k] {
    display: inline-flex;
    gap: 2px;
    padding: 3px;
    background: var(--bg-overlay);
    border: 1px solid var(--border);
    border-radius: 8px;
}

.tp-opt[b-gsfos7el9k] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 9px;
    background: transparent;
    border: 0;
    color: var(--muted);
    cursor: pointer;
    border-radius: 6px;
    font: inherit;
    font-size: 12px;
    font-weight: 500;
}

.tp-opt:hover[b-gsfos7el9k] { color: var(--fg); background: var(--hover-overlay); }
.tp-opt.active[b-gsfos7el9k] {
    background: var(--bg-elevated);
    color: var(--accent);
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}

.tp-opt svg[b-gsfos7el9k] {
    width: 13px;
    height: 13px;
}
