/*
 * admin.css — extracted from inline <style> in admin.html on 2026-05-31
 * Tier 2 / P2 of docs/plans/HIGH_PERFORMANCE_CLEANUP_PROGRAM.md.
 *
 * Maintain this file directly; it is no longer regenerated from HTML.
 */

/* === inline block 1/1 from admin.html === */
/* Active state for the notification mode toggle + preview tabs (NB2/NB5). */
    .nc-mode-btn.is-active, .notif-tmpl-pv-tab.is-active {
      background: var(--ll-accent);
      color: var(--ll-btn-on-accent, #04121b);
      border-color: var(--ll-accent);
    }
    .admin-inner { max-width: 1120px; margin: 0 auto; padding: 0; }
    .page-hero p { margin: 0; color: var(--ll-text-muted); }
    .admin-card { background: var(--ll-bg-soft); border-radius: var(--ll-radius-md); padding: 1rem 1.25rem; margin-bottom: 1rem; border: 1px solid var(--ll-border-subtle); }
    .admin-card h3 { margin: 0 0 0.5rem; font-size: 0.9375rem; color: var(--ll-text-muted); font-weight: 600; }
    .admin-desc { margin: 0 0 0.75rem; font-size: 0.875rem; color: var(--ll-text-muted); }
    .admin-hint { margin: 0 0 0.5rem; font-size: 0.8rem; color: var(--ll-text-muted); }
    .text-xs { font-size: 0.72rem; }
    .text-xs-muted { font-size: 0.72rem; color: var(--ll-text-muted); }
    .admin-card .num { font-size: 1.25rem; font-weight: 600; color: var(--ll-text); }
    .admin-table { width: 100%; border-collapse: collapse; font-size: 0.9375rem; }
    .admin-table th, .admin-table td { text-align: left; padding: 0.6rem 0.75rem; border-bottom: 1px solid var(--ll-border-subtle); }
    .notif-tmpl-group-label { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ll-text-muted); margin: 0 0 0.35rem; }
    .notif-tmpl-table tr:last-child td { border-bottom: none; }
    .notif-tmpl-edit-row td { padding: 0; }
    .admin-table th { font-weight: 600; color: var(--ll-text-muted); font-size: 0.8125rem; text-transform: uppercase; letter-spacing: 0.04em; }
    .badge { display: inline-block; padding: 0.2rem 0.5rem; border-radius: var(--ll-radius-sm); font-size: 0.75rem; font-weight: 600; }
    .badge.approved, .badge.used { background: rgba(var(--ll-accent-rgb), 0.2); color: var(--ll-accent); }
    .badge.pending { background: var(--ll-bg); color: var(--ll-text-muted); }
    .badge.rejected, .badge.revoked { background: rgba(229, 57, 53, 0.12); color: #e57373; }
    .badge.needs_evidence, .badge.expired { background: rgba(255, 193, 7, 0.15); color: #ffb74d; }

    /* table-layout: fixed forces cells to honor declared widths. Without
       this, the 4 action buttons would push the actions cell well past
       its 9rem allocation and force the wrapper to scroll horizontally
       even on wide screens. */





















    /* Icon-only square buttons — compact + uniform width so 4 actions
       fit comfortably in the 9rem column. */









    /* Click-to-confirm state: trash icon button must grow to fit its confirmLabel
       and the inserted Cancel sibling must shrink to icon-button size, otherwise
       the morphed text overflows into the Date column. Siblings disabled by
       llClickToConfirm are hidden so the prompt + cancel fit in the 9rem cell. */











    .admin-card details > summary { font-size: 0.9375rem; font-weight: 600; color: var(--ll-text-muted); cursor: pointer; user-select: none; list-style: none; display: flex; align-items: center; gap: 0.4rem; margin: 0; }
    .admin-card details > summary::-webkit-details-marker { display: none; }
    .admin-card details > summary::before { content: '▶'; font-size: 0.55rem; opacity: 0.6; transition: transform 0.15s; }
    .admin-card details[open] > summary::before { transform: rotate(90deg); }
    .admin-card details[open] > summary { color: var(--ll-text); margin-bottom: 0.6rem; }


    /* Username signals card: toolbars align to middle (not baseline-stuck buttons) */



    #lenders-table td:first-child { word-break: break-word; max-width: 22rem; }
    #lenders-table td:last-child { white-space: nowrap; min-width: 12rem; vertical-align: top; }
    .admin-msg { margin: 1rem 0; padding: 0.75rem; border-radius: var(--ll-radius-md); font-size: 0.9rem; }
    .admin-msg.error { background: rgba(229, 57, 53, 0.1); color: #e53935; }
    .admin-msg.loading { color: var(--ll-text-muted); }
    .ln-inbox-list { display: flex; flex-direction: column; gap: 0.65rem; margin-top: 0.75rem; max-height: min(70vh, 520px); overflow-y: auto; padding-right: 0.25rem; }
    .ln-inbox-row {
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-md);
      padding: 0.85rem 1rem;
      background: var(--ll-bg-soft);
    }
    .ln-inbox-row__meta { display: flex; flex-wrap: wrap; gap: 0.35rem 0.5rem; align-items: center; margin-bottom: 0.35rem; }
    .ln-inbox-badge {
      font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
      padding: 0.15rem 0.45rem; border-radius: 6px; background: rgba(var(--ll-accent-rgb), 0.12); color: var(--ll-accent);
    }
    .ln-inbox-badge--muted { background: var(--ll-bg); color: var(--ll-text-muted); font-weight: 600; text-transform: none; letter-spacing: normal; font-size: 0.68rem; }
    .ln-inbox-state { font-size: 0.72rem; color: var(--ll-text-muted); margin-left: auto; }
    .ln-inbox-row__title { font-weight: 600; font-size: 0.92rem; margin: 0 0 0.25rem; color: var(--ll-text); }
    .ln-inbox-body { font-size: 0.84rem; color: var(--ll-text-muted); line-height: 1.45; margin: 0; white-space: pre-wrap; }
    .ln-inbox-row__time { font-size: 0.72rem; color: var(--ll-text-muted); margin-top: 0.5rem; }
    .invite-result { margin-top: 1rem; padding: 1rem; background: var(--ll-bg-soft); border-radius: var(--ll-radius-md); font-size: 0.875rem; border: 1px solid var(--ll-accent); }
    .invite-result code { word-break: break-all; font-size: 0.8rem; }
    .invite-result__actions { display: flex; flex-wrap: wrap; gap: 0.45rem; margin: 0.75rem 0 0.65rem; }
    .invite-result__note { margin: 0.75rem 0 0; color: var(--ll-text-muted); font-size: 0.82rem; line-height: 1.45; }
    .lender-invite-toolbar { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.85rem; align-items: flex-start; margin-bottom: 0.9rem; }
    .lender-invite-toolbar__copy { margin: 0.35rem 0 0; max-width: 42rem; font-size: 0.875rem; color: var(--ll-text-muted); line-height: 1.45; }
    .lender-invite-toolbar__actions { display: flex; flex-wrap: wrap; gap: 0.65rem; align-items: center; }
    .lender-invite-filter { display: grid; gap: 0.25rem; font-size: 0.78rem; color: var(--ll-text-muted); }
    .lender-invite-filter select { min-width: 11rem; }
    .lender-invite-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: 0.65rem; margin-bottom: 0.9rem; }
    .lender-invite-metric { border: 1px solid var(--ll-border-subtle); border-radius: var(--ll-radius-md); padding: 0.75rem 0.85rem; background: var(--ll-bg); }
    .lender-invite-metric strong { display: block; color: var(--ll-text); font-size: 1.2rem; line-height: 1; }
    .lender-invite-metric span { display: block; margin-top: 0.32rem; color: var(--ll-text-muted); font-size: 0.78rem; line-height: 1.35; }
    .lender-invite-list { display: grid; gap: 0.75rem; }
    .lender-invite-item { border: 1px solid var(--ll-border-subtle); border-radius: var(--ll-radius-md); padding: 0.95rem 1rem; background: var(--ll-bg); display: grid; gap: 0.65rem; }
    .lender-invite-item__head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.75rem; align-items: flex-start; }
    .lender-invite-item__email { font-weight: 700; color: var(--ll-text); word-break: break-word; }
    .lender-invite-item__badges { display: flex; flex-wrap: wrap; gap: 0.4rem; }
    .lender-invite-item__meta { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: 0.55rem 0.9rem; }
    .lender-invite-item__meta div { min-width: 0; }
    .lender-invite-item__label { display: block; margin-bottom: 0.18rem; color: var(--ll-text-muted); font-size: 0.72rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }
    .lender-invite-item__value { color: var(--ll-text); font-size: 0.87rem; line-height: 1.45; word-break: break-word; }
    .lender-invite-item__actions { display: flex; flex-wrap: wrap; gap: 0.55rem; align-items: center; justify-content: space-between; }
    .lender-invite-item__hint { color: var(--ll-text-muted); font-size: 0.8rem; line-height: 1.4; }
    @media (max-width: 760px) {
      .lender-invite-item { padding: 0.85rem; }
      .lender-invite-toolbar__actions { width: 100%; justify-content: space-between; }
      .lender-invite-filter { flex: 1 1 12rem; }
      .lender-invite-filter select { width: 100%; }
    }
    .admin-flow-strip {
      margin: 0 0 1.25rem;
      padding: 0.75rem 1rem;
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-md);
      background: rgba(var(--ll-accent-rgb), 0.06);
    }
    .admin-flow-strip__title { font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ll-text-muted); margin: 0 0 0.5rem; }
    .admin-flow-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.65rem 1.25rem; align-items: flex-start; }
    .admin-flow-steps li { display: flex; flex-direction: column; gap: 0.12rem; min-width: 5rem; }
    .admin-flow-step__link { font-weight: 600; color: var(--ll-accent); text-decoration: none; font-size: 0.9rem; }
    .admin-flow-step__link:hover { text-decoration: underline; }
    .admin-flow-step__label { font-weight: 600; color: var(--ll-text); font-size: 0.9rem; }
    .admin-flow-step__hint { font-size: 0.72rem; color: var(--ll-text-muted); line-height: 1.35; max-width: 11rem; }
    .admin-flow-strip__more { margin: 0.55rem 0 0; font-size: 0.78rem; color: var(--ll-text-muted); line-height: 1.45; }
    .admin-flow-strip__more a { color: var(--ll-accent); }
    .admin-flow-strip__more-sub { display: block; margin-top: 0.35rem; }
    .admin-section { display: none; }
    .admin-section.active { display: block; }
    .admin-controls { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: end; margin: 0.75rem 0 1rem; }
    .admin-controls label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.85rem; color: var(--ll-text-muted); }
    .admin-controls select, .admin-controls input { padding: 0.5rem 0.6rem; border-radius: var(--ll-radius-sm); border: 1px solid var(--ll-border-subtle); background: var(--ll-bg); color: var(--ll-text); min-width: 180px; }
    .admin-controls .btn { align-self: end; }
    /* Form-control unification (admin upgrade, slice 1): theme every select/input
       inside an admin card — including the many that sit outside .admin-controls
       and otherwise render as raw OS defaults — with a custom caret and focus ring.
       Markup untouched; this is pure CSS reaching the existing controls. */
    .admin-card select,
    .admin-card input[type="text"],
    .admin-card input[type="number"],
    .admin-card input[type="email"],
    .admin-card input[type="password"],
    .admin-card input[type="search"],
    .admin-card input[type="date"],
    .admin-card input[type="url"],
    .admin-card input:not([type]) {
      font-family: inherit;
      font-size: 0.85rem;
      padding: 0.45rem 0.6rem;
      border-radius: var(--ll-radius-sm);
      border: 1px solid var(--ll-border-subtle);
      background: var(--ll-bg);
      color: var(--ll-text);
      box-sizing: border-box;
      transition: border-color 0.12s ease, box-shadow 0.12s ease;
    }
    .admin-card select,
    .admin-controls select {
      appearance: none;
      -webkit-appearance: none;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5 11 1.5' fill='none' stroke='%239aa4b2' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
      background-repeat: no-repeat;
      background-position: right 0.6rem center;
      background-size: 0.7rem auto;
      padding-right: 1.75rem;
      cursor: pointer;
    }
    .admin-card select:focus,
    .admin-card input:focus,
    .admin-controls select:focus,
    .admin-controls input:focus {
      outline: none;
      border-color: var(--ll-accent);
      box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.22);
    }
    /* Admin utility classes (slice 4: inline-style extraction). Pure
       typography/spacing only — every display:* pattern is intentionally
       excluded because 202 JS sites in this file toggle .style.display
       directly. */
    .admin-label { font-size: 0.82rem; font-weight: 600; }
    .admin-field-input { width: 100%; margin-top: 0.25rem; }
    .admin-text-muted { color: var(--ll-text-muted); }
    .admin-text-soft { font-weight: 400; color: var(--ll-text-muted); }
    .admin-text-xs { font-size: 0.72rem; }
    .admin-text-xs-muted { font-size: 0.72rem; color: var(--ll-text-muted); }
    .admin-text-sm-muted { font-size: 0.78rem; color: var(--ll-text-muted); }
    .admin-text-xxs-muted { font-size: 0.62rem; color: var(--ll-text-muted); }
    .admin-text-center { text-align: center; }
    .admin-text-right { text-align: right; }
    .admin-m-0 { margin: 0; }
    .admin-mb-half { margin: 0 0 0.5rem; }
    .admin-mt-half { margin-top: 0.5rem; }

    /* Dev/test utilities sit at lower visual weight than production tools.
       Collapsed by default via <details>, with a muted left border so they
       read as "open me when you mean it" rather than competing for attention. */
    .admin-card--dev { border-left: 3px solid rgba(var(--ll-text-muted-rgb, 156, 163, 175), 0.45); background: rgba(255,255,255,0.015); }
    .admin-card--dev > summary { font-size: 0.85rem; font-weight: 600; color: var(--ll-text-muted); cursor: pointer; user-select: none; list-style: none; display: flex; align-items: center; gap: 0.5rem; padding: 0.2rem 0; }
    .admin-card--dev > summary::-webkit-details-marker { display: none; }
    .admin-card--dev > summary::before { content: '▸'; display: inline-block; font-size: 0.7rem; transition: transform 0.12s ease; color: var(--ll-text-muted); }
    .admin-card--dev[open] > summary::before { transform: rotate(90deg); }
    .admin-card--dev > summary .admin-dev-chip { font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; padding: 0.1rem 0.45rem; border-radius: 999px; background: rgba(var(--ll-text-muted-rgb, 156, 163, 175), 0.15); color: var(--ll-text-muted); margin-left: auto; }
    .admin-card--dev > .admin-dev-body { padding-top: 0.75rem; }

    /* Signals workspace (SC-1+SC-2): the unified lifecycle view replacing the
       separate Signal Browser + Trash + moderation queue panels. Tabbed
       segmented control with per-tab counts; one table re-queries per tab. */
    .sw-tabs { display: flex; gap: 0.25rem; padding: 0.25rem; background: var(--ll-bg); border: 1px solid var(--ll-border-subtle); border-radius: var(--ll-radius-md); margin-bottom: 0.75rem; }
    .sw-tab { flex: 1 1 0; background: transparent; border: 1px solid transparent; border-radius: calc(var(--ll-radius-md) - 4px); padding: 0.5rem 0.85rem; font-size: 0.82rem; font-weight: 600; color: var(--ll-text-muted); cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.45rem; transition: background 0.12s ease, color 0.12s ease; }
    .sw-tab:hover { color: var(--ll-text); background: rgba(255,255,255,0.04); }
    .sw-tab.active { color: var(--ll-text); background: var(--ll-bg-soft); border-color: var(--ll-border-subtle); }
    .sw-count { font-size: 0.7rem; font-variant-numeric: tabular-nums; padding: 0.05rem 0.45rem; border-radius: 999px; background: rgba(var(--ll-accent-rgb), 0.12); color: var(--ll-accent); min-width: 1.5rem; text-align: center; }
    .sw-tab.active .sw-count { background: rgba(var(--ll-accent-rgb), 0.22); }
    #sw-table-wrap { overflow-x: auto; border: 1px solid var(--ll-border-subtle); border-radius: var(--ll-radius-md); background: var(--ll-bg-soft); }
    #sw-table { width: 100%; border-collapse: collapse; font-size: 0.8rem; }
    #sw-table th { text-align: left; padding: 0.45rem 0.55rem; border-bottom: 1px solid var(--ll-border-subtle); font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.04em; font-weight: 600; color: var(--ll-text-muted); white-space: nowrap; }
    #sw-table td { padding: 0.45rem 0.55rem; border-bottom: 1px solid var(--ll-border-subtle); vertical-align: middle; }
    #sw-table tbody tr:last-child td { border-bottom: none; }
    #sw-table tbody tr:hover { background: rgba(var(--ll-accent-rgb), 0.03); }
    .sw-actions { display: inline-flex; gap: 0.3rem; }
    .sw-act { padding: 0.2rem 0.5rem; font-size: 0.72rem; }
    #sw-pagination { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.6rem; justify-content: flex-end; }
    /* Bulk action bar (SC-4): appears above the table once ≥1 row is selected.
       Sticky so it stays visible while the operator scrolls a long table. */
    #sw-bulk-bar { display: none; align-items: center; gap: 0.6rem; padding: 0.5rem 0.75rem; margin-bottom: 0.5rem; background: rgba(var(--ll-accent-rgb), 0.08); border: 1px solid rgba(var(--ll-accent-rgb), 0.22); border-radius: var(--ll-radius-md); font-size: 0.82rem; }
    #sw-bulk-bar.is-active { display: flex; }
    #sw-bulk-count { font-weight: 600; color: var(--ll-accent); }
    #sw-bulk-bar .sw-bulk-spacer { flex: 1 1 auto; }
    #sw-table .sw-checkbox-cell { width: 2.2rem; text-align: center; padding: 0; }
    #sw-table .sw-row-cb, #sw-table .sw-select-all { cursor: pointer; vertical-align: middle; accent-color: var(--ll-accent); }

    /* Design-system .form selects own their own rendering. Without this, the
       admin appearance:none above strips their native arrow while .form's
       `background` shorthand wipes the replacement caret — leaving no arrow. */
    .admin-card .form select {
      appearance: auto;
      -webkit-appearance: auto;
      background-image: none;
      padding-right: 0.6rem;
    }
    .ext-review-actions { display: flex; flex-direction: column; align-items: stretch; gap: 0.45rem; min-width: 10.5rem; vertical-align: top; }
    .ext-review-actions .ext-review-note { width: 100%; min-width: 0; box-sizing: border-box; padding: 0.4rem 0.5rem; border-radius: var(--ll-radius-sm); border: 1px solid var(--ll-border-subtle); background: var(--ll-bg); color: var(--ll-text); font-size: 0.8rem; }
    .ext-review-actions .ext-actions-btn-row { display: flex; flex-wrap: wrap; gap: 0.3rem; }
    .ext-review-actions .ext-actions-btn-row .btn { flex: 1 1 auto; min-width: 4.5rem; justify-content: center; }
    .queue-toolbar-stack {
      position: sticky;
      top: 0.4rem;
      z-index: 3;
      background: var(--ll-bg-soft);
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-md);
      padding: 0.55rem 0.65rem;
      display: flex;
      flex-direction: column;
      gap: 0.5rem;
    }
    .queue-toolbar-stack .queue-toolbar {
      margin: 0;
      padding: 0;
      border: none;
      background: transparent;
    }
    .queue-toolbar { position: sticky; top: 0.4rem; z-index: 3; background: var(--ll-bg-soft); border: 1px solid var(--ll-border-subtle); border-radius: var(--ll-radius-md); padding: 0.55rem 0.65rem; }
    .ext-review-client__text { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: 0.86em; }
    .ext-queue-legend { margin: 0.35rem 0 0.5rem; font-size: 0.8rem; color: var(--ll-text-muted); line-height: 1.4; }
    .ext-pagination-hint { margin: 0.35rem 0 0; font-size: 0.78rem; color: var(--ll-text-muted); }
    .ext-queue-table-wrap {
      overflow-x: auto;
      margin: 0.75rem 0 0.5rem;
      border-radius: var(--ll-radius-md);
      border: 1px solid var(--ll-border-subtle);
      background: var(--ll-bg-soft);
      -webkit-overflow-scrolling: touch;
    }
    #ext-table { font-size: 0.875rem; table-layout: fixed; width: 100%; min-width: 920px; }
    #ext-table th, #ext-table td { padding: 0.55rem 0.65rem; vertical-align: top; }
    #ext-table th:nth-child(1), #ext-table td:nth-child(1) { width: 2.25rem; }
    #ext-table th:nth-child(2), #ext-table td:nth-child(2) { width: 14%; word-break: break-word; }
    #ext-table th:nth-child(3), #ext-table td:nth-child(3) { width: 12%; }
    #ext-table th:nth-child(4), #ext-table td:nth-child(4) { width: 18%; word-break: break-word; }
    #ext-table th:nth-child(5), #ext-table td:nth-child(5) { width: 15%; }
    #ext-table th:nth-child(6), #ext-table td:nth-child(6) { width: 9.5rem; white-space: nowrap; }
    #ext-table th:nth-child(7), #ext-table td:nth-child(7) { width: 6.5rem; }
    #ext-table th:nth-child(8), #ext-table td:nth-child(8) { width: 22%; }
    #ext-table .ext-status-cell { line-height: 1.35; }
    #ext-table .ext-status-cell .badge { margin-bottom: 0.35rem; }
    #ext-table .ext-status-meta { font-size: 0.75rem; color: var(--ll-text-muted); line-height: 1.4; }
    #ext-table .ext-review-actions .btn { padding: 0.35rem 0.5rem; font-size: 0.78rem; }
    .ext-review-source { }
    .ext-review-empty { }
    /* Override global .form input width for checkbox rows (themes set inputs to width:100%) */
    .page .form label.form-row--check {
      display: flex;
      flex-direction: row;
      align-items: flex-start;
      gap: 0.65rem;
      margin-bottom: 1rem;
      font-weight: 500;
    }
    .page .form label.form-row--check input[type="checkbox"] {
      width: auto;
      margin: 0.2rem 0 0;
      flex-shrink: 0;
    }
    .page .form label.form-row--check .form-row--check__text {
      font-weight: 500;
      letter-spacing: normal;
      color: var(--ll-text);
      line-height: 1.35;
    }
    .pipeline-local-nav {
      display: flex;
      flex-wrap: wrap;
      gap: 0.4rem;
      margin: 0 0 1rem;
      padding: 0.4rem 0;
      position: sticky;
      top: 0;
      z-index: 2;
      background: color-mix(in srgb, var(--ll-bg) 92%, transparent);
      backdrop-filter: blur(8px);
      border-bottom: 1px solid var(--ll-border-subtle);
    }
    .pipeline-local-nav button {
      font-size: 0.8rem;
      padding: 0.35rem 0.65rem;
    }
    .legacy-control-row {
      display: flex;
      gap: 0.5rem;
      margin-top: 0.85rem;
      flex-wrap: wrap;
      opacity: 0.62;
    }
    .btn.legacy-disabled {
      opacity: 0.55;
      filter: grayscale(0.25);
      cursor: not-allowed;
    }
    .legacy-note {
      margin: 0.5rem 0 0;
      font-size: 0.8rem;
      color: var(--ll-text-muted);
      line-height: 1.45;
    }
      /* Highlight low-confidence parses visually */
      .ext-row[data-confidence="low"] {
        background: linear-gradient(90deg, #fffbe6 0%, #fff 100%);
        border-left: 4px solid #ffd600;
      }
      .ext-row[data-confidence="medium"] {
        background: linear-gradient(90deg, #f3f6fa 0%, #fff 100%);
        border-left: 4px solid #90caf9;
      }
      .ext-row[data-confidence="high"] {
        background: linear-gradient(90deg, #e8f5e9 0%, #fff 100%);
        border-left: 4px solid #66bb6a;
      }
      .ext-review-note {
        width: 100%;
        min-width: 0;
        box-sizing: border-box;
        padding: 0.4rem 0.5rem;
        border-radius: var(--ll-radius-sm);
        border: 1px solid var(--ll-border-subtle);
        background: var(--ll-bg);
        color: var(--ll-text);
        font-size: 0.8rem;
        margin-top: 0.25rem;
      }
      .ext-row .btn {
        margin-right: 0.25rem;
        margin-bottom: 0.15rem;
      }

    /* ── Semantic action button variants ─────────────────────── */
    .btn.btn--approve { color: #4ade80; border-color: rgba(74,222,128,0.4); }
    .btn.btn--approve:hover { background: rgba(74,222,128,0.12); border-color: rgba(74,222,128,0.7); box-shadow: 0 0 12px rgba(74,222,128,0.18); color: #4ade80; }
    .btn.btn--warn { color: #fbbf24; border-color: rgba(251,191,36,0.4); }
    .btn.btn--warn:hover { background: rgba(251,191,36,0.1); border-color: rgba(251,191,36,0.65); box-shadow: 0 0 10px rgba(251,191,36,0.15); color: #fbbf24; }
    [data-theme="app"] .btn.btn--approve { color: #16a34a; border-color: rgba(22,163,74,0.4); }
    [data-theme="app"] .btn.btn--approve:hover { background: rgba(22,163,74,0.1); border-color: rgba(22,163,74,0.7); color: #15803d; }
    [data-theme="app"] .btn.btn--warn { color: #b45309; border-color: rgba(180,83,9,0.4); }
    [data-theme="app"] .btn.btn--warn:hover { background: rgba(180,83,9,0.08); border-color: rgba(180,83,9,0.65); color: #92400e; }

    /* ── Registration toggle ──────────────────────────────────── */
    .reg-toggle-row {
      display: flex; align-items: center; gap: 0.85rem;
      padding: 0.75rem 1rem;
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-md);
      background: var(--ll-bg-soft);
      margin-bottom: 1rem;
    }
    .reg-toggle-label { font-size: 0.875rem; color: var(--ll-text); font-weight: 500; }
    .reg-toggle-sub { font-size: 0.78rem; color: var(--ll-text-muted); }
    .reg-toggle-status { font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.07em; padding: 0.18rem 0.5rem; border-radius: 4px; }
    .reg-toggle-status--open { background: rgba(74,222,128,0.14); color: #4ade80; border: 1px solid rgba(74,222,128,0.3); }
    .reg-toggle-status--closed { background: rgba(239,68,68,0.12); color: #f87171; border: 1px solid rgba(239,68,68,0.3); }
    [data-theme="app"] .reg-toggle-status--open { background: rgba(22,163,74,0.1); color: #15803d; border-color: rgba(22,163,74,0.3); }
    [data-theme="app"] .reg-toggle-status--closed { background: rgba(220,38,38,0.08); color: #dc2626; border-color: rgba(220,38,38,0.3); }

    /* ── Purge account modal — destructive admin action ──────────
       Treated with weight: red accent bar at the top to signal
       severity, backdrop blur on the page, slide-up entrance. */
    .purge-modal-backdrop {
      position: fixed; inset: 0;
      background: rgba(8, 12, 20, 0.62);
      -webkit-backdrop-filter: blur(4px);
      backdrop-filter: blur(4px);
      display: flex; align-items: center; justify-content: center;
      z-index: 9000;
      animation: purge-modal-backdrop-in 180ms ease-out;
    }
    .purge-modal {
      position: relative;
      background: var(--ll-bg-soft);
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-md);
      padding: 1.5rem 1.6rem 1.4rem;
      max-width: 440px; width: 92%;
      box-shadow: 0 20px 48px rgba(0, 0, 0, 0.5);
      animation: purge-modal-in 220ms cubic-bezier(0.34, 1.4, 0.64, 1);
      overflow: hidden;
    }
    [data-theme="app"] .purge-modal { background: #ffffff; }
    /* Top accent bar — red, full-width, signals "irreversible". */
    .purge-modal::before {
      content: '';
      position: absolute;
      top: 0; left: 0; right: 0;
      height: 3px;
      background: linear-gradient(90deg, #f87171, #ef4444);
    }
    .purge-modal h3 {
      margin: 0.25rem 0 0.4rem;
      font-size: 1.05rem;
      font-weight: 600;
      letter-spacing: -0.01em;
      color: var(--ll-text);
    }
    .purge-modal__email {
      font-size: 0.8rem;
      color: var(--ll-text-muted);
      margin: 0 0 1rem;
      word-break: break-all;
      font-family: ui-monospace, "Cascadia Code", monospace;
      padding: 0.4rem 0.65rem;
      background: var(--ll-bg);
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-sm);
    }
    [data-theme="app"] .purge-modal__email { background: #fbfcfe; }
    .purge-modal__impact {
      font-size: 0.86rem;
      margin: 0 0 1.1rem;
      padding-left: 1.1rem;
      color: var(--ll-text);
      opacity: 0.85;
      line-height: 1.5;
    }
    .purge-modal__impact li { margin-bottom: 0.3rem; }
    .purge-modal__warning {
      font-size: 0.82rem;
      color: #fca5a5;
      margin: 0 0 1.25rem;
      padding: 0.55rem 0.75rem;
      background: rgba(239, 68, 68, 0.08);
      border: 1px solid rgba(239, 68, 68, 0.25);
      border-radius: var(--ll-radius-sm);
      line-height: 1.45;
      font-weight: 500;
    }
    .purge-modal__actions {
      display: flex;
      gap: 0.55rem;
      justify-content: flex-end;
      margin-top: 0.5rem;
    }
    @keyframes purge-modal-backdrop-in {
      from { opacity: 0; }
      to   { opacity: 1; }
    }
    @keyframes purge-modal-in {
      from { opacity: 0; transform: translateY(12px) scale(0.97); }
      to   { opacity: 1; transform: translateY(0) scale(1); }
    }
    @media (prefers-reduced-motion: reduce) {
      .purge-modal,
      .purge-modal-backdrop { animation: none; }
    }

    /* ── Edit-signal modal ────────────────────────────────────── */
    .sw-edit-modal {
      position: relative;
      background: var(--ll-bg-soft);
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-md);
      padding: 1.4rem 1.6rem 1.3rem;
      max-width: 540px; width: 94%;
      box-shadow: 0 20px 48px rgba(0, 0, 0, 0.5);
      animation: purge-modal-in 220ms cubic-bezier(0.34, 1.4, 0.64, 1);
    }
    [data-theme="app"] .sw-edit-modal { background: #ffffff; }
    .sw-edit-modal h3 {
      margin: 0.1rem 0 1rem;
      font-size: 1.05rem; font-weight: 600;
      letter-spacing: -0.01em; color: var(--ll-text);
    }
    .sw-edit-id {
      font-family: ui-monospace, "Cascadia Code", monospace;
      font-size: 0.85rem; color: var(--ll-text-muted); font-weight: 500;
    }
    .sw-edit-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 0.7rem 0.85rem;
    }
    .sw-edit-modal label {
      display: flex; flex-direction: column;
      font-size: 0.72rem; font-weight: 600;
      text-transform: uppercase; letter-spacing: 0.04em;
      color: var(--ll-text-muted); gap: 0.3rem;
    }
    .sw-edit-full { margin-top: 0.7rem; }
    .sw-edit-modal input {
      font: inherit; font-size: 0.9rem; text-transform: none;
      letter-spacing: normal; font-weight: 400;
      padding: 0.45rem 0.6rem;
      background: var(--ll-bg);
      border: 1px solid var(--ll-border-subtle);
      border-radius: var(--ll-radius-sm);
      color: var(--ll-text);
    }
    [data-theme="app"] .sw-edit-modal input { background: #fbfcfe; }
    .sw-edit-modal input:focus {
      outline: none;
      border-color: var(--ll-accent);
      box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb, 99, 179, 138), 0.2);
    }
    .sw-edit-actions {
      display: flex; gap: 0.55rem;
      justify-content: flex-end; margin-top: 1.2rem;
    }
    @media (max-width: 520px) {
      .sw-edit-grid { grid-template-columns: 1fr; }
    }
    @media (prefers-reduced-motion: reduce) {
      .sw-edit-modal { animation: none; }
    }

    /* ── Admin sidebar layout ─────────────────────────────────── */
    .admin-layout { display: flex; align-items: flex-start; gap: 0; }
    .admin-sidebar {
      flex: 0 0 178px;
      position: sticky; top: 3.5rem;
      max-height: calc(100vh - 4rem);
      overflow-y: auto;
      display: flex; flex-direction: column;
      border-right: 1px solid var(--ll-border-subtle);
      padding: 0.25rem 0 0.5rem;
    }
    .admin-sidebar__item {
      flex: 0 0 auto;
      padding: 0.55rem 1rem 0.55rem 0.85rem;
      border: 0;
      border-left: 2px solid transparent;
      background: transparent;
      color: var(--ll-text-muted);
      font: inherit; font-size: 0.875rem; font-weight: 500;
      text-align: left; cursor: pointer; white-space: nowrap;
      border-radius: 0; line-height: 1.4;
      transition: color 0.1s, background 0.1s;
    }
    .admin-sidebar__item:hover {
      color: var(--ll-text);
      background: rgba(var(--ll-accent-rgb), 0.04);
    }
    .admin-sidebar__item.active {
      color: var(--ll-text); font-weight: 600;
      background: rgba(var(--ll-accent-rgb), 0.07);
      border-left-color: var(--ll-accent);
    }
    [data-theme="app"] .admin-sidebar { border-right-color: rgba(0,0,0,0.1); }
    [data-theme="app"] .admin-sidebar__item { color: #57606a; }
    [data-theme="app"] .admin-sidebar__item:hover { color: #24292f; background: rgba(9,105,218,0.04); }
    [data-theme="app"] .admin-sidebar__item.active { color: #111417; background: rgba(9,105,218,0.07); border-left-color: #0969da; }
    .admin-main { flex: 1; min-width: 0; padding-left: 1.75rem; }
    @media (max-width: 680px) {
      .admin-layout { flex-direction: column; }
      .admin-sidebar { flex: none; width: 100%; max-height: none; position: static; border-right: none; border-bottom: 1px solid var(--ll-border-subtle); flex-direction: row; flex-wrap: wrap; padding: 0; overflow-x: auto; }
      .admin-sidebar__item { border-left: none; border-bottom: 2px solid transparent; padding: 0.5rem 0.85rem 0.6rem; white-space: nowrap; }
      .admin-sidebar__item.active { border-bottom-color: var(--ll-accent); border-left-color: transparent; }
      [data-theme="app"] .admin-sidebar__item.active { border-bottom-color: #0969da; border-left-color: transparent; }
      .admin-main { padding-left: 0; padding-top: 1.25rem; }
    }

    /* Private demo readiness */
    .demo-readiness-card { margin-bottom: 1rem; border: 1px solid var(--ll-border-subtle); border-radius: var(--ll-radius-md); background: var(--ll-bg-soft); padding: 1rem; }
    .demo-readiness-card__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 0.85rem; }
    .demo-readiness-card__header h2 { margin: 0.1rem 0 0.25rem; font-size: 1.05rem; letter-spacing: 0; color: var(--ll-text); }
    .demo-readiness-card__header p { margin: 0; color: var(--ll-text-muted); font-size: 0.84rem; line-height: 1.45; }
    .demo-readiness-status { display: inline-flex; align-items: center; white-space: nowrap; border-radius: 999px; border: 1px solid rgba(var(--ll-accent-rgb), 0.28); background: rgba(var(--ll-accent-rgb), 0.08); color: var(--ll-accent); padding: 0.28rem 0.58rem; font-size: 0.68rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }
    .demo-readiness-status--ready { color: #4ade80; border-color: rgba(74,222,128,0.32); background: rgba(74,222,128,0.1); }
    .demo-readiness-status--attention { color: #fbbf24; border-color: rgba(251,191,36,0.34); background: rgba(251,191,36,0.1); }
    .demo-readiness-status--action { color: #f87171; border-color: rgba(248,113,113,0.34); background: rgba(248,113,113,0.1); }
    .demo-readiness-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.65rem; }
    .demo-readiness-metric { border: 1px solid rgba(var(--ll-accent-rgb), 0.11); border-radius: 8px; background: rgba(var(--ll-accent-rgb), 0.035); padding: 0.72rem; }
    .demo-readiness-metric strong { display: block; color: var(--ll-text); font-size: 1.35rem; line-height: 1; }
    .demo-readiness-metric span { display: block; margin-top: 0.35rem; color: var(--ll-text-muted); font-size: 0.74rem; line-height: 1.35; }
    .demo-readiness-actions { display: flex; flex-wrap: wrap; gap: 0.45rem; margin-top: 0.8rem; }
    .demo-readiness-actions a { display: inline-flex; align-items: center; min-height: 2rem; border: 1px solid var(--ll-border-subtle); border-radius: 999px; padding: 0.42rem 0.66rem; color: var(--ll-text); background: rgba(255,255,255,0.035); font-size: 0.72rem; font-weight: 700; text-decoration: none; }
    .demo-readiness-notes { display: grid; gap: 0.35rem; margin-top: 0.75rem; }
    .demo-readiness-note { margin: 0; color: var(--ll-text-muted); font-size: 0.8rem; line-height: 1.4; }
    .demo-readiness-note strong { color: var(--ll-text); }
    @media (max-width: 900px) { .demo-readiness-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
    @media (max-width: 560px) { .demo-readiness-card__header { display: grid; } .demo-readiness-grid { grid-template-columns: 1fr; } }
