/* ================================================
   MEASURE TECH PRO — Dashboard Design System
   ================================================ */
/* The dashboard's variables are now a thin alias layer over theme.css, which is generated from
 * the app's Theme.swift. Nothing here invents a value; anything that needs a new one adds it to
 * Theme.swift first. The --d-* names survive because ~1,000 call sites use them — they point at
 * the app's palette now.
 */
:root {
  /* Shared surface aliases also used by CRM records outside the drawing editor. */
  --c-surface-primary:var(--c-surface);
  --c-surface-secondary:var(--c-control-fill);

  /* layout */
  --d-sidebar-width: var(--size-rail);
  --d-topbar-h: 56px;
  --d-transition: var(--motion-fast);

  /* surfaces — flat: the page IS the surface */
  --d-content-bg: var(--c-background-secondary);
  --d-card-bg: var(--c-card-background);
  --d-bg-2: var(--c-field-fill);

  /* hairlines */
  --d-border: var(--c-card-border);
  --d-border-light: var(--c-separator);

  /* text */
  --d-text: var(--c-text-primary);
  --d-text-2: var(--c-text-secondary);
  --d-text-3: var(--c-text-tertiary);

  /* brand + state */
  --d-green: var(--c-brand-primary);
  --d-green-dark: var(--c-brand-pressed);
  --d-green-light: var(--c-brand-tint);
  --d-green-50: var(--c-accent-tint);
  --d-red: var(--c-danger);
  --d-red-light: var(--c-danger-tint);
  --d-amber: var(--c-warning);
  --d-amber-light: var(--c-warning-tint);
  --d-blue: var(--c-info);
  --d-blue-light: var(--c-info-tint);
  --d-purple: var(--c-doc-proposal);
  --d-purple-light: var(--c-control-fill);

  /* radius — 10 for cards, 8 for rows. From Theme.Radius. */
  --d-radius: var(--radius-card);
  --d-radius-sm: var(--radius-row);
  --d-radius-lg: var(--radius-lg);

  /* elevation: none. The flat surface separates by hairline. */
  --d-shadow-sm: none;
  --d-shadow: none;
  --d-shadow-lg: none;

  /* the rail — a light surface, like every other rail in the app */
  --d-sidebar-bg: var(--c-card-background);
  --d-sidebar-link: var(--c-text-secondary);
  --d-sidebar-link-hover: var(--c-text-primary);
  --d-sidebar-link-active: var(--c-brand-primary);
  --d-sidebar-active-bg: var(--c-brand-tint);
  --d-sidebar-hover-bg: var(--c-field-fill);
  --d-sidebar-rule: var(--c-card-border);
}

/* ── People / Worker File · Catalyst roster parity ──────────────────────────
   A row opens a full destination. There is deliberately no persistent list beside the record. */
#people-list[hidden],#people-record[hidden]{display:none!important}
.people-overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 18px}
.people-metric{min-height:108px;padding:17px 18px;border:1px solid var(--c-card-border);border-radius:16px;background:var(--c-card-background);display:flex;flex-direction:column;align-items:flex-start}
.people-metric>span{font-size:10px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--c-text-tertiary)}
.people-metric>strong{font-size:30px;line-height:1.05;margin-top:9px;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.people-metric>small{font-size:11px;color:var(--c-text-tertiary);margin-top:5px}
.people-metric--brand>strong{color:var(--c-brand-primary)}
.people-metric--warn>strong{color:var(--c-warning)}
.people-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:22px}
.people-search{height:42px;min-width:240px;flex:1;display:flex;align-items:center;gap:8px;padding:0 12px;border:1px solid var(--c-card-border);border-radius:11px;background:var(--c-card-background);color:var(--c-text-tertiary)}
.people-search:focus-within{border-color:var(--c-brand-primary);box-shadow:0 0 0 3px var(--c-brand-tint)}
.people-search input{width:100%;height:100%;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:inherit}
.people-filters{display:flex;gap:6px;flex-wrap:wrap}
.people-filters button{min-height:40px;border:1px solid var(--c-card-border);border-radius:999px;background:var(--c-field-fill);color:var(--c-text-secondary);padding:0 13px;font-size:12px;font-weight:700;cursor:pointer}
.people-filters button[aria-pressed="true"]{background:var(--c-brand-tint);border-color:color-mix(in srgb,var(--c-brand-primary) 35%,transparent);color:var(--c-brand-primary)}
.people-filters button span{margin-left:6px;opacity:.72;font-variant-numeric:tabular-nums}
.people-result-count{font-size:11px;color:var(--c-text-tertiary);white-space:nowrap}
.people-roster-section{margin-bottom:26px}
.people-roster-section>header{min-height:44px;margin-bottom:10px;display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
.people-roster-section>header h2{font-size:16px;margin:0;color:var(--c-text-primary)}
.people-roster-section>header p{font-size:11px;margin:3px 0 0;color:var(--c-text-tertiary)}
.people-wide{display:block}
.people-access-only{padding-top:2px}
.people-table{min-width:850px}
.people-row{cursor:pointer}
.people-row:focus-visible{outline:3px solid var(--c-brand-tint);outline-offset:-3px}
.people-row:hover td{background:var(--c-background-secondary)}
.people-identity{display:flex;align-items:center;gap:10px;min-width:205px}
.people-identity>span:last-child,.people-card__head>span:nth-child(2),.people-access-grid button>span:nth-child(2){display:flex;flex-direction:column;min-width:0}
.people-identity strong,.people-card__head strong,.people-access-grid strong{font-size:13px;color:var(--c-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.people-identity small,.people-card__head small,.people-access-grid small{font-size:10.5px;color:var(--c-text-tertiary);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.people-monogram{width:36px;height:36px;flex:0 0 36px;border-radius:11px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(145deg,var(--c-brand-primary),var(--c-brand-pressed));color:var(--c-on-brand);font-size:12px;font-weight:800;letter-spacing:.02em}
.people-monogram--large{width:54px;height:54px;flex-basis:54px;border-radius:15px;font-size:17px}
.people-number{font-size:12px;color:var(--c-text-primary);font-variant-numeric:tabular-nums;white-space:nowrap}
.people-pill{display:inline-flex;align-items:center;width:max-content;max-width:220px;padding:4px 8px;border-radius:999px;font-size:10px;font-weight:750;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:none}
.people-pill--brand{color:var(--c-brand-primary);background:var(--c-brand-tint)}
.people-pill--warn{color:var(--c-warning);background:var(--c-warning-tint)}
.people-pill--quiet{color:var(--c-text-secondary);background:var(--c-field-fill)}
.people-ready{font-size:10.5px;font-weight:700;color:var(--c-brand-primary);white-space:nowrap}
.people-compact{display:none}
.people-card{border:1px solid var(--c-card-border);border-radius:16px;background:var(--c-card-background);overflow:hidden}
.people-card>button{width:100%;min-height:44px;padding:15px;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:12px}
.people-card__head{width:100%;display:flex;align-items:center;gap:11px}
.people-card__head>span:nth-child(2){flex:1}
.people-card__head>i{font-style:normal;font-size:22px;color:var(--c-text-tertiary)}
.people-card__pills{display:flex;gap:6px;flex-wrap:wrap}
.people-card__metrics{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-top:11px;border-top:1px solid var(--c-card-border)}
.people-card__metrics>span{display:flex;flex-direction:column;min-width:0}
.people-card__metrics small,.worker-file-metrics small,.worker-work-stats small{font-size:9px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-tertiary)}
.people-card__metrics strong{font-size:12px;color:var(--c-text-primary);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.people-card__attention{font-size:11px;font-weight:700;line-height:1.4;color:var(--c-warning)}
.people-access-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.people-access-grid>button{min-height:70px;display:flex;align-items:center;gap:10px;padding:12px;border:1px solid var(--c-card-border);border-radius:14px;background:var(--c-card-background);color:inherit;text-align:left;cursor:pointer}
.people-access-grid>button>span:nth-child(2){flex:1}
.people-access-grid i{font-style:normal;font-size:20px;color:var(--c-text-tertiary)}
.people-alert{display:flex;flex-direction:column;gap:8px;padding:13px 15px;margin-bottom:16px;border:1px solid color-mix(in srgb,var(--c-warning) 28%,transparent);border-radius:13px;background:var(--c-warning-tint);color:var(--c-text-secondary);font-size:12px}
.people-alert>strong{color:var(--c-warning)}
.people-alert>div{display:flex;align-items:center;justify-content:space-between;gap:10px}

#people-record{width:100%;max-width:1040px;margin:0 auto;padding-bottom:40px}
.worker-file-nav{min-height:44px;display:flex;align-items:center;gap:12px;margin-bottom:12px}
.worker-file-nav button{min-height:44px;border:0;background:transparent;color:var(--c-brand-primary);font-size:13px;font-weight:750;cursor:pointer;padding:0 4px}
.worker-file-nav>span{font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--c-text-tertiary)}
.worker-file-hero{padding:22px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:16px}
.worker-file-identity{display:flex;align-items:center;gap:14px;min-width:0}
.worker-file-identity h1{font-size:21px;line-height:1.1;margin:0;color:var(--c-text-primary)}
.worker-file-identity p{font-size:12px;margin:5px 0 0;color:var(--c-text-secondary)}
.worker-file-status{display:flex;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.worker-file-metrics{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding-top:16px;border-top:1px solid var(--c-card-border)}
.worker-file-metrics>span{display:flex;flex-direction:column}
.worker-file-metrics strong{font-size:17px;margin-top:3px;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.worker-contact-actions{display:flex;gap:8px;margin:12px 0}
.worker-contact-actions a{min-height:44px;flex:1;display:flex;align-items:center;justify-content:center;border-radius:11px;background:var(--c-field-fill);color:var(--c-text-primary);font-size:12px;font-weight:700;text-decoration:none}
.worker-file-tabs{margin:14px 0 20px}
.worker-file-tabs .seg__tab span{margin-left:5px;opacity:.68;font-variant-numeric:tabular-nums}
.worker-lens>header{margin:0 0 12px}
.worker-lens>header h2{font-size:17px;margin:0;color:var(--c-text-primary)}
.worker-lens>header p{font-size:11px;margin:4px 0 0;color:var(--c-text-tertiary)}
.worker-card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:12px}
.worker-info-card{padding:17px;min-width:0}
.worker-card-head{min-height:24px;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.worker-card-head>strong{font-size:12px;letter-spacing:.025em;color:var(--c-text-primary)}
.worker-card-head>button{min-height:36px;border:0;background:transparent;color:var(--c-brand-primary);font-size:10px;font-weight:800;cursor:pointer}
.worker-card-head>span{font-size:10px;color:var(--c-text-tertiary)}
.worker-info-card dl{margin:0}
.worker-info-card dl>div{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:8px 0;border-bottom:1px solid var(--c-card-border)}
.worker-info-card dl>div:last-child{border-bottom:0}
.worker-info-card dt{font-size:11px;color:var(--c-text-tertiary)}
.worker-info-card dd{margin:0;max-width:65%;font-size:11px;font-weight:650;text-align:right;color:var(--c-text-primary);overflow-wrap:anywhere}
.worker-info-card>p{font-size:12px;line-height:1.55;color:var(--c-text-secondary);margin:0}
.worker-info-card>p+p{margin-top:10px}
.worker-warning{color:var(--c-warning)!important;font-weight:650}
.worker-flow-card{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:17px;margin-bottom:12px}
.worker-flow-card>div:first-child{min-width:0}
.worker-flow-card strong{font-size:13px;color:var(--c-text-primary)}
.worker-flow-card p{font-size:11px;line-height:1.45;color:var(--c-text-secondary);margin:4px 0 0}
.worker-flow-card>div:last-child{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.worker-work-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.worker-work-stats>span{display:flex;flex-direction:column}
.worker-work-stats strong{font-size:17px;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.worker-record-list{margin-bottom:12px;padding:16px}
.worker-record-list>p{font-size:12px;color:var(--c-text-tertiary);margin:4px 0}
.worker-record-list>button,.worker-document{width:100%;min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border:0;border-top:1px solid var(--c-card-border);background:transparent;color:inherit;text-align:left;cursor:pointer}
.worker-record-list>button>span:first-child,.worker-document>span:first-child{display:flex;flex-direction:column;min-width:0}
.worker-record-list>button strong,.worker-document strong{font-size:12px;color:var(--c-text-primary)}
.worker-record-list>button small,.worker-document small{font-size:10px;color:var(--c-text-tertiary);margin-top:3px}
.worker-record-list>button i{font-style:normal;font-size:20px;color:var(--c-text-tertiary)}
.worker-document a{color:var(--c-brand-primary);font-size:11px;font-weight:700;text-decoration:none}
.worker-setup-card{margin-top:12px}
.worker-card-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}
.worker-link-output{display:flex;flex-direction:column;gap:5px;margin-top:12px;font-size:10px;color:var(--c-text-tertiary)}
.worker-link-output>span:last-child{display:flex;gap:6px}
.worker-link-output input{min-width:0;flex:1}
.worker-edit-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.worker-edit-form label{display:flex;flex-direction:column;gap:5px}
.worker-edit-form label>span{font-size:11px;font-weight:700;color:var(--c-text-secondary)}

/* People — the roster/ops-rail split, Catalyst's `wideBody`: the list, then a 400pt rail. */
.people-split{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}
.people-split__main{min-width:0}
.people-rail{display:flex;flex-direction:column;gap:12px;min-width:0}
.people-rail-card{padding:14px;border:1px solid var(--c-card-border);border-radius:14px;background:var(--c-card-background)}
.people-rail-card h3{font-size:13px;margin:0 0 8px;color:var(--c-text-primary)}
.people-rail-card__head{display:flex;align-items:center;gap:7px;margin-bottom:10px}
.people-rail-card__head h3{margin:0;flex:1}
.people-rail-dot{width:7px;height:7px;border-radius:50%;background:var(--c-brand-primary);flex:0 0 7px}
.people-rail-dot--warn{background:var(--c-warning)}
.people-rail-count{padding:3px 8px;border-radius:999px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:10px;font-weight:800;font-variant-numeric:tabular-nums}
.people-rail-body{font-size:12px;line-height:1.5;color:var(--c-text-secondary);margin:0 0 8px}
.people-rail-body strong{color:var(--c-text-primary)}
.people-rail-note{font-size:10.5px;color:var(--c-text-tertiary);margin:6px 0 0}
.people-rail-more{font-size:10.5px;color:var(--c-text-tertiary);margin:8px 0 0}
.people-rail-eyebrow{font-size:10px;font-weight:800;letter-spacing:.09em;color:var(--c-text-tertiary);margin:0 0 8px}
.people-rail-link{min-height:36px;border:0;background:transparent;padding:0;color:var(--c-brand-primary);font-size:11.5px;font-weight:750;cursor:pointer;text-align:left}
.people-attention-row{display:flex;align-items:center;gap:9px;padding:7px 0;border-top:1px solid var(--c-card-border)}
.people-attention-row:first-of-type{border-top:0}
.people-attention-row__text{display:flex;flex-direction:column;min-width:0;flex:1}
.people-attention-row__text strong{font-size:12px;color:var(--c-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.people-attention-row__text small{font-size:10.5px;line-height:1.35;color:var(--c-text-secondary);margin-top:2px}
.people-chip-btn{min-height:32px;border:0;border-radius:9px;padding:0 11px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:11px;font-weight:800;cursor:pointer;white-space:nowrap}
.people-seat-expired{display:flex;align-items:center;justify-content:space-between;gap:10px}
.people-seat-expired>span{font-size:12px;font-weight:750;color:var(--c-danger)}
.people-seat-meter{height:6px;border-radius:999px;background:var(--c-separator);overflow:hidden;margin:8px 0}
.people-seat-meter>i{display:block;height:100%;background:var(--c-brand-primary)}
.people-market-row{display:flex;align-items:center;gap:8px;padding:5px 0}
.people-market-glyph{width:24px;height:24px;flex:0 0 24px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;background:var(--c-brand-primary);color:var(--c-on-brand);font-size:9px;font-weight:800}
.people-market-row__name{flex:1;min-width:0;font-size:12px;color:var(--c-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.people-market-row__count{font-size:11px;color:var(--c-text-tertiary);white-space:nowrap}
.people-invite-row{display:flex;align-items:center;gap:8px;padding:6px 0;border-top:1px solid var(--c-card-border)}
.people-invite-row:first-of-type{border-top:0}
.people-invite-row__text{display:flex;flex-direction:column;min-width:0;flex:1}
.people-invite-row__text strong{font-size:11.5px;color:var(--c-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.people-invite-row__text small{font-size:10px;color:var(--c-text-secondary);margin-top:2px}
.people-setup-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.people-setup-count{padding:2px 8px;border-radius:999px;background:var(--c-warning-tint);color:var(--c-warning);font-size:10px;font-weight:800}
.people-setup-next{flex:1;min-width:0;font-size:12px;color:var(--c-text-primary)}
/* The roster's own columns: Employment, the pay sub-figure, the one compliance chip. */
.people-employment{display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.people-employment__type{padding:2px 6px;border-radius:5px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:9.5px;font-weight:800;white-space:nowrap}
.people-employment__draft{font-size:9px;font-weight:800;letter-spacing:.03em;color:var(--c-warning)}
.people-subfigure{display:block;font-size:10px;color:var(--c-text-tertiary);margin-top:2px}
.people-compliance{display:inline-flex;align-items:center;gap:3px;padding:3px 8px;border-radius:999px;font-size:10px;font-weight:800;white-space:nowrap}
.people-compliance--danger{color:var(--c-danger);background:var(--c-danger-tint)}
.people-compliance--warn{color:var(--c-warning);background:var(--c-warning-tint)}
/* The worker record — Catalyst's `sectionColumns`, its cards and its access controls. */
.worker-overflow{display:flex;gap:6px;flex-wrap:wrap}
.worker-columns{grid-template-columns:minmax(0,1fr) 300px}
.worker-columns__main,.worker-columns__rail{display:flex;flex-direction:column;gap:12px;min-width:0}
.worker-file-badges{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 0}
.worker-card-sub{font-size:10.5px;color:var(--c-text-tertiary);margin:-6px 0 10px}
.worker-card-eyebrow{font-size:10px;font-weight:800;letter-spacing:.08em;color:var(--c-text-tertiary);margin:12px 0 6px}
.worker-card-note{font-size:10.5px;line-height:1.4;color:var(--c-text-tertiary);margin:6px 0 0}
.worker-roles-card{padding:17px}
.worker-roles-card__blurb{font-size:11px;line-height:1.45;color:var(--c-text-tertiary);margin:0 0 8px}
.worker-contact-row{display:flex;align-items:center;min-height:40px;border-top:1px solid var(--c-card-border);color:var(--c-text-primary);font-size:12.5px;text-decoration:none}
.worker-contact-fact{font-size:12.5px;color:var(--c-text-primary);margin:8px 0 0}
.worker-work-headline{font-size:12px;color:var(--c-text-secondary);margin:0 0 10px}
.worker-work-headline strong{font-size:22px;color:var(--c-text-primary);font-variant-numeric:tabular-nums;margin-right:4px}
.worker-work-ot{margin-left:8px;color:var(--c-danger);font-size:10.5px;font-weight:750}
.worker-disclosure{width:100%;min-height:44px;display:flex;align-items:center;border:0;background:transparent;padding:0;color:var(--c-text-secondary);font-size:12px;font-weight:750;cursor:pointer;margin:12px 0}
.worker-onboarding-hero{padding:17px;margin-bottom:12px;border-color:var(--c-warning)}
.worker-onboarding-hero__head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:10px}
.worker-onboarding-hero__head>span:first-child{display:flex;flex-direction:column;min-width:0}
.worker-onboarding-hero__head strong{font-size:14px;color:var(--c-text-primary)}
.worker-onboarding-hero__head small{font-size:11px;line-height:1.45;color:var(--c-text-secondary);margin-top:3px}
.worker-onboarding-hero__count{display:flex;flex-direction:column;align-items:flex-end}
.worker-onboarding-hero__count strong{font-size:19px;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.worker-onboarding-hero__count small{font-size:9px;font-weight:800;letter-spacing:.05em;color:var(--c-text-tertiary)}
.worker-checklist-group{font-size:9px;font-weight:800;letter-spacing:.05em;color:var(--c-text-secondary);margin:12px 0 4px}
.worker-checklist-row{display:flex;align-items:center;gap:9px;padding:6px 0}
.worker-checklist-row__mark{color:var(--c-brand-primary);font-size:12px}
.worker-checklist-row__text{display:flex;flex-direction:column;min-width:0;flex:1}
.worker-checklist-row__text strong{font-size:12.5px;font-weight:600;color:var(--c-text-primary)}
.worker-checklist-row__text small{font-size:10.5px;line-height:1.35;color:var(--c-text-tertiary);margin-top:2px}
.worker-checklist-need{padding:1px 7px;border-radius:4px;background:var(--c-warning-tint);color:var(--c-warning);font-size:9px;font-weight:800}
.worker-hero-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.worker-access-state{display:flex;align-items:center;gap:9px;padding:7px 0}
.worker-access-state__text{display:flex;flex-direction:column;min-width:0;flex:1}
.worker-access-state__text strong{font-size:12px;color:var(--c-text-primary)}
.worker-access-state__text small{font-size:10.5px;color:var(--c-text-secondary);margin-top:2px}
.worker-invite-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-top:8px}
.worker-invite-actions button{min-height:38px;border:0;border-radius:9px;background:var(--c-field-fill);color:var(--c-text-primary);font-size:11px;font-weight:750;cursor:pointer}
.worker-access-level{margin-top:6px}
.worker-access-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
/* e186: a failing enabled test DISABLES the option, it never hides it, and the selected tint
   survives the disabled state — so shown-and-refused stays readable as a state, not an absence. */
.worker-access-option{min-height:42px;border:1px solid transparent;border-radius:10px;background:var(--c-field-fill);color:var(--c-text-secondary);font-size:11.5px;font-weight:750;cursor:pointer}
.worker-access-option[aria-pressed="true"]{background:var(--c-brand-tint);border-color:var(--c-brand-primary);color:var(--c-brand-primary)}
.worker-access-option:disabled{cursor:default;color:var(--c-text-tertiary)}
.worker-access-option[aria-pressed="true"]:disabled{color:var(--c-brand-primary)}
.worker-money-toggle{margin-top:10px}
.worker-money-toggle label{display:flex;align-items:flex-start;gap:9px;cursor:pointer}
.worker-money-toggle label>span{display:flex;flex-direction:column;min-width:0}
.worker-money-toggle strong{font-size:12px;color:var(--c-text-primary)}
.worker-money-toggle small{font-size:10.5px;color:var(--c-text-secondary);margin-top:2px}
.worker-market-access{margin-top:6px}
.worker-market-row{display:flex;align-items:center;gap:8px;padding:5px 0}
.worker-market-row__glyph{color:var(--c-brand-primary);font-size:11px}
.worker-market-row__name{flex:1;min-width:0;font-size:12.5px;color:var(--c-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* e188: BOTH captions share one secondary tint — the withheld state is stated, not warned about. */
.worker-market-row__caption{font-size:10.5px;color:var(--c-text-secondary);white-space:nowrap}
.worker-recent-time{margin-top:12px;padding-top:10px;border-top:1px solid var(--c-card-border)}
.check-worker-enrollment__warn{font-size:10.5px;color:var(--c-warning);margin:0}

@media(max-width:1100px){
  .people-split{grid-template-columns:minmax(0,1fr)}
  .worker-columns{grid-template-columns:minmax(0,1fr)}
}

@media(max-width:700px){
  .people-overview{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
  .people-metric{min-height:94px;padding:14px}
  .people-metric>strong{font-size:25px}
  .people-controls{align-items:stretch}
  .people-search{flex:1 0 100%;min-width:0}
  .people-filters{max-width:100%;flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px}
  .people-filters button{flex:0 0 auto}
  .people-result-count{align-self:center}
  [data-people-wide]{display:none}
  [data-people-compact]{display:flex;flex-direction:column;gap:10px}
  .people-access-grid{grid-template-columns:1fr}
  .people-alert>div{align-items:flex-start;flex-direction:column}
  #people-record{max-width:none}
  .worker-file-nav{margin-top:-6px}
  .worker-file-hero{padding:16px;grid-template-columns:1fr}
  .worker-file-status{grid-row:2;justify-content:flex-start}
  .worker-file-metrics{grid-row:3}
  .worker-contact-actions{position:relative}
  .worker-file-tabs{overflow-x:auto;justify-content:flex-start}
  .worker-file-tabs .seg__tab{flex:0 0 auto;min-width:82px;min-height:44px}
  .worker-card-grid{grid-template-columns:1fr}
  .worker-flow-card{align-items:flex-start;flex-direction:column}
  .worker-flow-card>div:last-child{width:100%;justify-content:flex-start}
  .worker-flow-card .btn{flex:1}
  .worker-edit-form{grid-template-columns:1fr}
}

/* ── Team Review · Catalyst measurement-readiness queue ─────────────────── */
.review-workspace{width:100%;max-width:980px;margin:0 auto;padding-bottom:36px}
.review-verdict{display:flex;align-items:flex-start;gap:12px;margin:14px 0 18px}
.review-verdict>strong{font-size:32px;line-height:1;font-weight:850;color:var(--c-warning);font-variant-numeric:tabular-nums}
.review-verdict>span{display:flex;flex-direction:column;gap:3px;min-width:0}
.review-verdict b{font-size:17px;color:var(--c-text-primary)}
.review-verdict small{font-size:11px;line-height:1.45;color:var(--c-text-secondary)}
.review-filter-row{display:flex;align-items:center;gap:16px;margin-bottom:18px;border-bottom:1px solid var(--c-card-border)}
.review-filter-row>.seg{flex:1;min-width:0;border-bottom:0;margin-bottom:0;overflow-x:auto}
.review-filter-row .seg__tab{flex:0 0 auto;min-height:44px}
.review-readiness{display:flex;align-items:center;gap:9px;flex:0 0 auto;padding-right:2px}
.review-readiness>span{font-size:10.5px;font-weight:750;color:var(--c-text-secondary);white-space:nowrap;font-variant-numeric:tabular-nums}
.review-readiness>i{width:110px;height:6px;border-radius:999px;background:var(--c-card-border);overflow:hidden}
.review-readiness b{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}
#review-groups{display:flex;flex-direction:column;gap:12px}
.review-project{padding:16px 18px}
.review-project>header{display:grid;grid-template-columns:32px minmax(0,1fr) auto auto;align-items:center;gap:10px;min-height:44px;padding-bottom:10px;border-bottom:1px solid var(--c-card-border)}
.review-drawing-glyph{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:9px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:17px}
.review-project>header>span:nth-child(2){display:flex;flex-direction:column;min-width:0}
.review-project>header strong{font-size:13px;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.review-project>header small{font-size:10px;color:var(--c-text-tertiary);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.review-project>header>b{font-size:10px;color:var(--c-warning);background:var(--c-warning-tint);border-radius:999px;padding:4px 8px;white-space:nowrap}
.review-project>header>a{min-height:44px;display:flex;align-items:center;padding:0 10px;border-radius:10px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:10.5px;font-weight:750;text-decoration:none;white-space:nowrap}
.review-tag-row{width:100%;min-height:70px;display:grid;grid-template-columns:70px minmax(0,1fr) auto 58px;align-items:center;gap:12px;padding:10px 0;border:0;border-bottom:1px solid var(--c-card-border);background:transparent;color:inherit;text-align:left;cursor:pointer}
.review-tag-row:last-child{border-bottom:0}
.review-tag-row:hover{background:var(--c-background-secondary)}
.review-role{--review-role:var(--c-brand-primary);display:inline-flex;align-items:center;justify-content:center;width:max-content;max-width:70px;min-height:24px;padding:3px 7px;border-radius:6px;background:color-mix(in srgb,var(--review-role) 12%,transparent);color:var(--review-role);font-size:9px;font-weight:800;line-height:1.15;text-transform:uppercase;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.review-tag-row__identity{display:flex;flex-direction:column;min-width:0}
.review-tag-row__identity>strong{font-size:12px;font-weight:650;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.review-tag-row__identity>strong.is-unnamed{color:var(--c-text-tertiary);font-style:italic}
.review-tag-row__identity>strong>i{font-style:normal;color:var(--c-danger);margin-left:6px}
.review-tag-row__identity>small{font-size:10px;color:var(--c-text-tertiary);margin-top:3px}
.review-tag-row__identity>small>b{color:var(--c-brand-primary)}
.review-tag-row__issues{display:flex;justify-content:flex-end;gap:5px;flex-wrap:wrap}
.review-issue{display:inline-flex;padding:3px 7px;border-radius:999px;font-size:9.5px;font-weight:750;line-height:1.2}
.review-issue--warn{color:var(--c-warning);background:var(--c-warning-tint)}
.review-issue--quiet{color:var(--c-text-secondary);background:var(--c-field-fill)}
.review-issue--blue{color:var(--c-accent-blue);background:color-mix(in srgb,var(--c-accent-blue) 11%,transparent)}
.review-issue--danger{color:var(--c-danger);background:var(--c-danger-tint)}
.review-fix{min-height:44px;display:flex;align-items:center;justify-content:center;padding:0 9px;border-radius:9px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:10.5px;font-weight:750;white-space:nowrap}
/* "Loading review data…" — the sentence the app puts in place of the queue while the team scan
   runs, rather than a skeleton that implies the shape of an answer nobody has yet. */
.review-loading{padding:24px;text-align:center;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.review-load-error{padding:24px;text-align:center}
.review-load-error>strong{font-size:16px;color:var(--c-text-primary)}
.review-load-error>p{font-size:12px;color:var(--c-text-secondary)}

.review-detail{display:flex;flex-direction:column;gap:20px}
.review-detail__identity{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.review-detail__identity h2{width:100%;font-size:22px;margin:4px 0 0;color:var(--c-text-primary)}
.review-detail__identity h2.is-unnamed{color:var(--c-text-secondary);font-style:italic}
.review-flag{display:inline-flex;padding:4px 8px;border-radius:999px;background:var(--c-danger);color:var(--c-on-danger);font-size:10px;font-weight:750}
.review-detail__location{display:flex;flex-direction:column;gap:9px;margin:0}
.review-detail__location>div{display:grid;grid-template-columns:76px minmax(0,1fr);gap:12px;align-items:start}
.review-detail__location dt{font-size:11px;color:var(--c-text-tertiary)}
.review-detail__location dd{margin:0;font-size:12px;color:var(--c-text-primary);text-align:right}
.review-detail__measurements{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:18px 0;border-block:1px solid var(--c-card-border)}
.review-detail__measurements>span{display:flex;flex-direction:column}
.review-detail__measurements>span:last-child{text-align:right}
.review-detail__measurements small{font-size:10px;color:var(--c-text-tertiary)}
.review-detail__measurements strong{font-size:18px;margin-top:4px;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.review-detail__measurements strong.is-missing{color:var(--c-warning)}
.review-detail__measurements strong.is-blue{color:var(--c-accent-blue)}
.review-detail__flag{padding:14px;border:1px solid color-mix(in srgb,var(--c-danger) 16%,transparent);border-radius:12px;background:color-mix(in srgb,var(--c-danger) 7%,transparent)}
.review-detail__flag strong{font-size:11px;color:var(--c-danger)}
.review-detail__flag p{font-size:12px;color:var(--c-text-primary);margin:6px 0 0}
.review-detail__issues h3{font-size:12px;color:var(--c-text-secondary);margin:0 0 8px}
.review-detail__issues p{display:flex;align-items:center;gap:8px;font-size:12px;margin:7px 0}
.review-detail__issues p i{width:6px;height:6px;border-radius:50%;background:currentColor}
.review-detail__issues p.is-danger{color:var(--c-danger)}
.review-detail__issues p.is-warn{color:var(--c-warning)}
.review-detail__issues p.is-blue{color:var(--c-accent-blue)}
.review-detail__open{width:100%;min-height:44px}

@media(max-width:700px){
  .review-workspace{max-width:none}
  .review-verdict{margin-top:8px}
  .review-filter-row{align-items:stretch;flex-direction:column;gap:6px}
  .review-filter-row>.seg{width:100%;max-width:100%}
  .review-readiness{align-self:flex-end;padding:0 2px 8px}
  .review-project{padding:14px}
  .review-project>header{grid-template-columns:32px minmax(0,1fr) auto}
  .review-project>header>b{grid-column:2;justify-self:start}
  .review-project>header>a{grid-column:3;grid-row:1/3}
  .review-tag-row{grid-template-columns:70px minmax(0,1fr) auto;gap:9px;padding:13px 0}
  .review-tag-row__issues{grid-column:1/3;justify-content:flex-start}
  .review-fix{grid-column:3;grid-row:1/3;align-self:end}
}

/* ── Catalyst Knowledge Base ─────────────────────────────────────────────── */
.kb-workspace{padding:0!important;background:var(--d-content-bg);min-height:100%}
.kb-shell{min-height:100%;color:var(--d-text)}
.kb-head{padding:22px 28px 0;background:var(--d-content-bg);border-bottom:1px solid var(--d-border-light)}
.kb-icon{display:inline-grid;place-items:center;width:28px;height:28px;flex:0 0 auto;color:var(--d-green)}
.kb-icon svg{width:100%;height:100%}
.kb-search{display:flex;align-items:center;gap:9px;max-width:1040px;height:44px;margin:0 auto 14px;padding:0 13px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:12px;color:var(--d-text-3);box-shadow:var(--d-shadow-xs)}
.kb-search input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--d-text);font:inherit;font-size:14px}
.kb-search button{min-width:28px;min-height:28px;border:0;background:transparent;color:var(--d-text-2);font:inherit;font-size:12px;cursor:pointer}
.kb-tabs{display:flex;gap:4px;max-width:1040px;margin:0 auto;overflow-x:auto;scrollbar-width:none}
.kb-tabs::-webkit-scrollbar{display:none}
.kb-tabs a{position:relative;display:flex;align-items:center;min-height:44px;padding:8px 13px;color:var(--d-text-2);font-size:13px;font-weight:650;text-decoration:none;white-space:nowrap}
.kb-tabs a:hover{color:var(--d-text)}
.kb-tabs a[aria-current="page"]{color:var(--d-green)}
.kb-tabs a[aria-current="page"]:after{content:"";position:absolute;left:12px;right:12px;bottom:-1px;height:2px;border-radius:2px 2px 0 0;background:var(--d-green)}
.kb-section-picker{display:none}
.kb-content{max-width:1040px;margin:0 auto;padding:22px 28px 52px}
.kb-stack{display:grid;gap:18px}
.kb-progress{display:grid;gap:12px;padding:17px 19px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:16px;box-shadow:var(--d-shadow-sm)}
.kb-progress__head{display:flex;align-items:center;gap:11px}
.kb-progress strong{font-size:14px}
.kb-progress__head>b{margin-left:auto;flex:0 0 auto;color:var(--d-text-2);font-size:11px;font-weight:700}
.kb-progress__meter{height:8px;border-radius:99px;background:var(--d-bg-2);overflow:hidden}
.kb-progress__meter i{display:block;height:100%;border-radius:inherit;background:var(--d-green)}
.kb-progress.is-complete .kb-progress__meter i{background:var(--c-success)}
.kb-progress__note{margin:0;color:var(--d-text-2);font-size:12px}
.kb-progress__note--done{color:var(--c-success);font-weight:650}
.kb-section-label{display:grid;gap:2px;margin:4px 0 -6px;padding-left:4px;color:var(--d-text-2);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.kb-section-label small{color:var(--d-text-3);font-size:11px;font-weight:500;letter-spacing:0;text-transform:none}
.kb-quickstart__sub{margin:0;padding:0 17px 12px;color:var(--d-text-2);font-size:13px}
.kb-dismiss{min-width:28px;min-height:28px;flex:0 0 auto;border:0;background:transparent;color:var(--d-text-2);font:inherit;font-size:13px;cursor:pointer}
.kb-tick{flex:0 0 auto;width:18px;color:var(--d-text-3);font-size:13px;text-align:center}
.kb-tick.is-read,.kb-step.is-read .kb-tick{color:var(--c-success)}
.kb-step.is-read strong{color:var(--d-text-2);text-decoration:line-through}
.kb-whats-new__list{display:grid}
.kb-whats-new__item{padding:12px 17px;border-top:1px solid var(--d-border-light)}
.kb-whats-new__item:first-child{border-top:0}
.kb-whats-new__item strong{font-size:13.5px}
.kb-whats-new__item p{margin:2px 0 0;color:var(--d-text-2);font-size:13px;line-height:1.5}
.kb-more{width:100%;min-height:44px;border:0;border-top:1px solid var(--d-border-light);background:transparent;color:var(--d-green);font:inherit;font-size:12px;font-weight:700;text-align:left;padding:0 17px;cursor:pointer}
.kb-count{margin-left:7px;padding:1px 6px;border-radius:99px;background:var(--d-bg-2);color:var(--d-text-2);font-size:10px;font-weight:700;vertical-align:middle}
.kb-count.is-complete{background:var(--c-success);color:var(--c-on-success)}
.kb-pill{flex:0 0 auto;padding:3px 8px;border-radius:99px;background:var(--d-green-light);color:var(--d-green-dark);font-size:10px;font-weight:700;white-space:nowrap}
.kb-category-head>p{margin:0;padding:0 17px 15px;color:var(--d-text-2);font-size:13px;line-height:1.5}
.kb-category-head>header>b.is-complete{color:var(--c-success)}
.kb-toc{margin-bottom:16px;padding:16px 20px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:16px}
.kb-toc>strong{display:block;margin-bottom:8px;font-size:13px}
.kb-toc ul{display:grid;gap:2px;margin:0;padding:0;list-style:none}
.kb-toc a{display:block;min-height:32px;padding:6px 0 6px 16px;position:relative;color:var(--d-text);font-size:13px;text-decoration:none}
.kb-toc a:before{content:"";position:absolute;left:0;top:14px;width:6px;height:6px;border-radius:50%;background:var(--d-green)}
.kb-related__miss{margin:0;padding:10px 0;color:var(--d-text-2);font-size:13px;border-top:1px solid var(--d-border-light)}
.kb-feedback{margin-top:18px;padding:20px;text-align:center;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:16px}
.kb-feedback__ask{margin:0 0 12px;font-size:13.5px;font-weight:600}
.kb-feedback__buttons{display:flex;justify-content:center;gap:12px}
.kb-feedback__done{margin:0;color:var(--d-text-2);font-size:13.5px;font-weight:600}
.kb-feedback__done.is-positive{color:var(--d-green)}
.kb-detail__verbs{display:flex;gap:10px;margin-top:17px}
.kb-detail__meta{display:block;margin-top:8px;color:var(--d-text-3);font-size:11px;font-style:normal}
.kb-hero{display:flex;align-items:center;gap:14px;padding:4px}
.kb-hero>.kb-icon{width:44px;height:44px;border-radius:12px;background:var(--d-green-light)}
.kb-hero strong{font-size:19px}
.kb-hero p{margin:2px 0 0;color:var(--d-text-2);font-size:13px;line-height:1.45}
.kb-filter button{min-width:28px;min-height:28px;border:0;background:transparent;color:var(--d-text-2);font:inherit;font-size:12px;cursor:pointer}
.kb-filter-empty{margin:0;padding:28px 0;color:var(--d-text-2);font-size:13px;text-align:center}
.kb-search-results>header strong{text-transform:uppercase;letter-spacing:.06em;font-size:11px;color:var(--d-text-2)}
.kb-search-results>header>b{padding:2px 7px;border-radius:99px;background:var(--d-green);color:var(--c-on-brand);font-size:10px}
.kb-vendor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.kb-vendor{display:flex;align-items:center;gap:13px;padding:15px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:14px;color:var(--d-text);text-decoration:none}
.kb-vendor:hover{background:var(--d-bg-2)}
.kb-vendor>span:not(.kb-brand){display:grid;gap:1px;min-width:0;flex:1}
.kb-vendor strong{font-size:13.5px}
.kb-vendor small{overflow:hidden;color:var(--d-text-3);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.kb-vendor>i{color:var(--d-text-3);font-size:18px;font-style:normal}
.kb-brand{display:grid;place-items:center;flex:0 0 auto;width:104px;height:44px;padding:0 8px;border-radius:11px;font-size:12px;font-weight:800;letter-spacing:.04em;text-align:center;line-height:1.1}
.kb-brand--lg{width:150px;height:62px;font-size:15px}
.kb-vendor-head{display:flex;align-items:center;gap:16px;padding:18px}
.kb-vendor-head>div{display:grid;gap:4px;min-width:0}
.kb-vendor-head strong{font-size:19px}
.kb-vendor-head a{color:var(--d-green);font-size:13px;font-weight:650;text-decoration:none}
.kb-doc-tile{display:grid;place-items:center;flex:0 0 auto;width:26px;height:26px;border-radius:7px;background:var(--d-green);color:var(--c-on-brand);font-size:12px}
.kb-doc-tile.is-pdf{background:var(--d-red)}
.kb-pdf{margin-left:6px;padding:1px 5px;border-radius:99px;background:var(--d-red-light);color:var(--d-red);font-size:9px;font-weight:800;vertical-align:middle}
.kb-footnote{margin:0;padding:0 4px;color:var(--d-text-3);font-size:11px;line-height:1.5}
/* `hidden` loses to any rule that sets `display`, and four of the controls this view toggles are
   laid out by one. Searching left the tab row on screen because of it. */
.kb-tabs[hidden],.kb-section-picker[hidden],.kb-filter b[hidden],.kb-filter button[hidden],.kb-content .btn[hidden]{display:none}
.kb-card{overflow:hidden;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:18px;box-shadow:var(--d-shadow-sm)}
.kb-card>header{display:flex;align-items:center;gap:11px;min-height:58px;padding:14px 17px;border-bottom:1px solid var(--d-border-light)}
.kb-card>header>span:not(.kb-icon){display:grid;gap:2px;min-width:0;flex:1}
.kb-card>header strong{font-size:14px}
.kb-card>header small{font-size:12px;color:var(--d-text-2);line-height:1.35}
.kb-card>header>b{flex:0 0 auto;color:var(--d-text-3);font-size:11px;font-weight:700}
.kb-category-grid{display:grid;gap:18px}
.kb-row{display:flex;align-items:center;gap:12px;min-height:58px;padding:11px 16px;color:var(--d-text);text-decoration:none;border-top:1px solid var(--d-border-light);transition:background var(--d-transition)}
.kb-card>header+.kb-row,.kb-card>.kb-row:first-child{border-top:0}
.kb-row:hover{background:var(--d-bg-2)}
.kb-row>span:not(.kb-icon){display:grid;gap:2px;min-width:0;flex:1}
.kb-row strong{font-size:13.5px;line-height:1.3}
.kb-row small{display:-webkit-box;overflow:hidden;color:var(--d-text-2);font-size:12px;line-height:1.35;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.kb-row em{color:var(--d-text-3);font-size:11px;font-style:normal}
.kb-row>i{color:var(--d-text-3);font-size:20px;font-style:normal}
.kb-read{padding:3px 7px;border-radius:99px;background:var(--d-green-light);color:var(--d-green-dark);font-size:10px}
.kb-group{display:grid;gap:8px}
.kb-group>h2{padding-left:4px;color:var(--d-text-2);font-size:11px;letter-spacing:.08em;text-transform:uppercase}
.kb-back{display:inline-flex;align-items:center;min-height:44px;margin-bottom:8px;color:var(--d-green);font-size:13px;font-weight:650;text-decoration:none}
.kb-detail{max-width:860px;margin:0 auto}
.kb-detail__hero{display:block;margin-bottom:18px;padding:22px 24px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:18px;box-shadow:var(--d-shadow-sm)}
.kb-detail__hero>.kb-icon{float:left;margin:0 10px 4px 0}
.kb-detail__hero>span:not(.kb-icon){display:block;color:var(--d-green);font-size:11px;font-weight:750;letter-spacing:.07em;text-transform:uppercase}
.kb-detail__hero h1{margin:6px 0 8px;font-size:25px;line-height:1.18;letter-spacing:-.025em}
.kb-detail__hero p{max-width:720px;margin:0;color:var(--d-text-2);font-size:14px;line-height:1.58}
.kb-detail__hero button{margin-top:17px}
.kb-detail__body{display:grid;gap:16px}
.kb-article-section{padding:21px 23px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:18px;box-shadow:var(--d-shadow-sm)}
.kb-article-section h2{margin:0 0 11px;font-size:16px}
.kb-article-section>p{margin:0 0 10px;color:var(--d-text-2);font-size:13.5px;line-height:1.65}
.kb-article-section>p:last-child{margin-bottom:0}
.kb-key-points,.kb-examples{margin-top:17px;padding-top:15px;border-top:1px solid var(--d-border-light)}
.kb-key-points>strong,.kb-examples>strong{font-size:13px}
.kb-key-points ul{display:grid;gap:8px;margin:10px 0 0;padding:0;list-style:none}
.kb-key-points li{position:relative;padding-left:22px;color:var(--d-text-2);font-size:13px;line-height:1.45}
.kb-key-points li:before{content:"✓";position:absolute;left:0;top:0;color:var(--d-green);font-weight:800}
.kb-pro-tip{margin-top:17px;padding:14px 16px;border-radius:12px;background:var(--d-green-light);color:var(--d-green-dark)}
.kb-pro-tip strong{font-size:12px;text-transform:uppercase;letter-spacing:.05em}
.kb-pro-tip p{margin:5px 0 0;font-size:13px;line-height:1.5}
.kb-examples{display:grid;gap:8px}
.kb-examples code{display:block;padding:10px 12px;border-radius:10px;background:var(--d-bg-2);color:var(--d-text);font-size:12px;line-height:1.45;white-space:normal}
.kb-related{margin-top:18px;padding:18px 20px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:16px}
.kb-related>strong{display:block;margin-bottom:8px;font-size:13px}
.kb-related>div{display:grid}
.kb-related a{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;padding:8px 0;color:var(--d-text);font-size:13px;font-weight:600;text-decoration:none;border-top:1px solid var(--d-border-light)}
.kb-related a:first-child{border-top:0}
.kb-filter{display:flex;align-items:center;gap:9px;height:44px;padding:0 13px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:12px;color:var(--d-text-3)}
.kb-filter input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--d-text);font:inherit;font-size:14px}
.kb-filter b{min-width:26px;padding:3px 7px;border-radius:99px;background:var(--d-green);color:var(--c-on-brand);font-size:10px;text-align:center}
.kb-faq-category details,.kb-search-results details{padding:13px 17px;border-top:1px solid var(--d-border-light)}
.kb-faq-category details:first-of-type{border-top:0}
.kb-faq-category summary,.kb-search-results summary{cursor:pointer;font-size:13.5px;font-weight:600;line-height:1.45}
.kb-faq-category details p,.kb-search-results details p{margin:10px 0 2px;color:var(--d-text-2);font-size:13px;line-height:1.58}
.kb-command{padding:13px 17px;border-top:1px solid var(--d-border-light)}
.kb-command-category>header+.kb-command,.kb-search-results>header+.kb-command{border-top:0}
.kb-command code{font-size:13px;font-weight:700;color:var(--d-text)}
.kb-command p{margin:4px 0 0;color:var(--d-text-2);font-size:12.5px;line-height:1.45}
.kb-support{text-align:center;padding:12px 20px;color:var(--d-text-2)}
.kb-support strong{color:var(--d-text);font-size:13px}
.kb-support p{margin:5px 0 0;font-size:12px}
.kb-support a{color:var(--d-green)}
.kb-handoff{display:flex;align-items:center;gap:15px;padding:22px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:18px;box-shadow:var(--d-shadow-sm)}
.kb-handoff>.kb-icon{width:38px;height:38px}
.kb-handoff>span{min-width:0;flex:1}
.kb-handoff strong{font-size:16px}
.kb-handoff p{margin:4px 0 0;color:var(--d-text-2);font-size:13px;line-height:1.45}
.kb-empty{max-width:520px;margin:52px auto;padding:26px;text-align:center;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:18px}
.kb-empty strong{font-size:16px}
.kb-empty p{margin:8px 0 15px;color:var(--d-text-2);font-size:13px}
.kb-empty a{color:var(--d-green);font-size:13px;font-weight:650}

@media (max-width:700px){
  .kb-head{padding:16px 14px 12px}
  .kb-tabs{display:none}
  .kb-section-picker{display:flex;align-items:center;gap:10px;height:44px;padding:0 12px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:11px;color:var(--d-text-3);font-size:11px}
  .kb-section-picker select{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--d-text);font:inherit;font-size:13px;font-weight:650}
  .kb-content{padding:16px 14px 38px}
  .kb-stack{gap:14px}
  .kb-progress{gap:10px;padding:14px 15px}
  .kb-vendor-grid{grid-template-columns:minmax(0,1fr)}
  .kb-card{border-radius:15px}
  .kb-card>header{padding:12px 14px}
  .kb-row{padding:11px 13px}
  .kb-row small{-webkit-line-clamp:1}
  .kb-detail__hero,.kb-article-section{padding:18px 17px;border-radius:15px}
  .kb-detail__hero h1{font-size:21px}
  .kb-handoff{align-items:flex-start;flex-wrap:wrap;padding:18px}
  .kb-handoff>a{width:100%;text-align:center}
}

*,*::before,*::after{box-sizing:border-box}
html,body{height:100%;margin:0}
body{font-family:var(--font-family);font-size:var(--text-footnote);line-height:1.55;color:var(--d-text);background:var(--d-content-bg);-webkit-font-smoothing:antialiased}

/* ── Layout ── */
.dash-body{display:flex;height:100vh;height:100dvh;overflow:hidden}
.dash-main{flex:1;display:flex;flex-direction:column;min-width:0;height:100vh;height:100dvh;overflow:hidden}
.dash-topbar{height:var(--d-topbar-h);min-height:var(--d-topbar-h);background:var(--d-card-bg);border-bottom:1px solid var(--d-border);display:flex;align-items:center;padding:0 24px;gap:16px;z-index:40}
/* Theme.Size.pageMargin — a FIXED margin on regular width, so content grows with the window
   instead of capping at some invented maximum. Compact collapses it; the phone was never the
   problem. (Post-flat-redesign this is 40, not the 160 it was before content owned the width.) */
.dash-content{flex:1;overflow-y:auto;padding:var(--space-xxl) var(--size-page-margin);-webkit-overflow-scrolling:touch}

/* ── Sidebar ── */

/* ── Topbar ── */
.dash-topbar__title{font-size:15px;font-weight:700;color:var(--d-text);flex:1}
.dash-topbar__actions{position:relative;z-index:50;display:flex;align-items:center;gap:8px;margin-left:auto}
.jh-create,.section-add{position:relative}.jh-create__menu,.section-add__menu{position:absolute;right:0;top:calc(100% + 4px);z-index:200;display:grid;width:max-content;min-width:178px;overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg);box-shadow:0 10px 28px rgb(0 0 0 / 16%);visibility:hidden;opacity:0;pointer-events:none;transform:translateY(-3px);transition:opacity var(--motion-fast),transform var(--motion-fast),visibility 0s linear var(--motion-fast)}.jh-create__menu.is-open,.section-add__menu.is-open{visibility:visible;opacity:1;pointer-events:auto;transform:translateY(0);transition-delay:0s}.jh-create__menu .dropdown__item,.section-add__menu .dropdown__item{min-height:40px}.jh-create__menu .dropdown__item>span:first-child,.section-add__menu .dropdown__item>span:first-child{display:grid;place-items:center;width:17px;color:var(--c-brand-primary);font-size:15px;font-weight:800}

/* Market switcher — the CRM scope, always on screen */
/* left:0 pins the box to the containing block's edge — without it, an sr-only span in a wide
   table's last column keeps its STATIC position, escapes the table's scroll wrap (an abspos box
   ignores non-positioned overflow ancestors), and silently makes the whole page pan on a phone. */
.sr-only{position:absolute;left:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.dash-topbar__market{display:flex;align-items:center}
.dash-topbar__market select{appearance:none;-webkit-appearance:none;background:var(--d-green-50) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23306B47' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 8px center;border:1px solid var(--d-green-light);color:var(--d-green-dark);border-radius:20px;padding:5px 26px 5px 12px;font-size:12.5px;font-weight:600;cursor:pointer;outline:none;max-width:180px}
.dash-topbar__market select:focus-visible{box-shadow:0 0 0 2px var(--d-green-light)}
.dash-topbar__market--single{background:var(--d-green-50);border:1px solid var(--d-green-light);color:var(--d-green-dark);border-radius:20px;padding:5px 12px;font-size:12.5px;font-weight:600;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dash-topbar__icon-btn{width:34px;height:34px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--d-text-2);transition:background var(--d-transition),color var(--d-transition)}
.dash-topbar__icon-btn:hover{background:var(--d-content-bg);color:var(--d-text)}
.dash-topbar__user{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:var(--d-radius);cursor:pointer;transition:background var(--d-transition);position:relative}
.dash-topbar__user:hover{background:var(--d-content-bg)}
.dash-topbar__user-name{font-size:13px;font-weight:600;color:var(--d-text);line-height:1.2}
.dash-topbar__user-role{font-size:11px;color:var(--d-text-3)}

/* ── View header ── */
.view-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:24px;gap:16px}
.view-title{font-size:22px;font-weight:800;color:var(--d-text);line-height:1.2;letter-spacing:-.4px}
.view-sub{font-size:13px;color:var(--d-text-2);margin-top:4px}
.view-header__actions{display:flex;align-items:center;gap:8px;flex-shrink:0}

/* ── Section header — the `SectionCardHeader` twin ──────────────────────────
   ONE baseline row in the section's own accent, closed by a hairline: glyph ·
   label · count · verdict · verbs. It replaces the 22px title-and-subtitle
   block, which repeated the topbar's word at four times the height. The accent
   arrives per section as `--sec-accent` (see components/section-header.js). */
.sec-head{--sec-accent:var(--c-brand-primary);display:flex;align-items:baseline;gap:var(--space-sm);padding-bottom:var(--space-sm-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--c-separator)}
.sec-head__icon{align-self:center;width:15px;height:15px;color:var(--sec-accent);flex-shrink:0}
.sec-head__icon svg{width:100%;height:100%;display:block}
.sec-head__kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--sec-accent);margin:0;flex-shrink:0}
.sec-head__count{font-size:var(--text-caption2);font-weight:700;color:var(--c-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}
/* A hub segment: the strip above already named it, so the row carries only the sentence and the
   verbs. No hairline either — the strip is the rule that separates them. */
.sec-head--bare{border-bottom:none;padding-bottom:0;margin-bottom:var(--space-md)}
.sec-head__verdict{font-size:var(--text-subhead);color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.sec-head__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);white-space:nowrap;flex-shrink:0}
.sec-head__verbs{margin-left:auto;align-self:center;display:flex;align-items:center;gap:var(--space-md);flex-shrink:0}
.sec-head__verbs:empty{display:none}
/* A real control may stand in the verbs slot — "New customer" is a button on this surface, not a
   quiet verb — and a 36px control on a baseline row has to centre itself or it hangs low. */
.sec-head__verbs .btn{align-self:center}
/* Narrow: the verdict wraps under the name rather than truncating to nothing, and the verbs keep
   the right edge. */
@media (max-width: 700px){
  .sec-head{flex-wrap:wrap}
  .sec-head__verdict{white-space:normal;flex-basis:100%;order:3}
  /* The verbs row wraps too: four verbs are wider than a phone all by themselves. flex-shrink
     must come back (base says 0) or the item never narrows to the line and its own flex-wrap
     never engages — a row that refuses to shrink OR wrap is a page that pans. */
  .sec-head__verbs{order:2;flex-wrap:wrap;flex-shrink:1;min-width:0;justify-content:flex-end;row-gap:var(--space-xs)}
}
/* A verb, not a control: the app's `.buttonStyle(.plain)` in brand green. */
.btn--verb{display:inline-flex;align-items:center;gap:var(--space-xs-sm);padding:0;height:auto;background:none;border:none;border-radius:var(--radius-sm);font-size:var(--text-footnote);font-weight:600;color:var(--c-brand-primary);cursor:pointer;font-family:inherit}
.btn--verb svg{width:15px;height:15px}
.btn--verb:hover:not(:disabled){color:var(--c-brand-pressed)}
.btn--verb:disabled{opacity:var(--opacity-disabled);cursor:default}

/* ── Teach strip — `BusinessSection.tipDescription` ──────────────────────────
   What the destination IS, in the app's exact words. A list cannot say this
   about itself, and a console that omits it is withholding the manual, not a
   sales pitch. Dismissed per section and remembered. */
.tip-strip{display:flex;flex-direction:column;padding:var(--space-sm-md) var(--space-md);margin-bottom:var(--space-md);background:var(--c-warning-tint);border-radius:var(--radius-card)}
/* The row is what the strip used to BE: the flex line of icon, sentence and controls. It moved
   into a child when the expander arrived, because the details panel has to sit UNDER that line
   rather than beside it — `SectionTipView` is a VStack with the HStack as its first row. */
.tip-strip__row{display:flex;align-items:flex-start;gap:var(--space-sm-md)}
.tip-strip__more{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:none;color:var(--c-text-secondary);cursor:pointer;border-radius:var(--radius-sm);transition:transform .18s ease}
.tip-strip__more svg{width:13px;height:13px}
.tip-strip__more:hover{color:var(--c-text-primary)}
.tip-strip__more--open{transform:rotate(180deg)}
.tip-strip__details{margin-top:var(--space-sm-md);padding-top:var(--space-sm-md);border-top:1px solid var(--c-separator)}
.tip-strip__eyebrow{margin:0 0 var(--space-xs);font-size:9px;font-weight:800;letter-spacing:.06em;color:var(--c-text-tertiary)}
.tip-strip__bullets{margin:0 0 var(--space-sm-md);padding-left:var(--space-md);display:flex;flex-direction:column;gap:var(--space-xs)}
.tip-strip__bullets li{font-size:var(--text-caption2);color:var(--c-text-secondary);line-height:1.4}
.tip-strip__protip{margin:0 0 var(--space-sm-md);padding:var(--space-sm-md);font-size:var(--text-caption2);font-style:italic;color:var(--c-text-secondary);background:var(--c-card-background-solid);border-radius:var(--radius-md)}
.tip-strip__learn{display:inline-block;font-size:var(--text-caption2);font-weight:600;color:var(--c-brand-primary);text-decoration:none}
.tip-strip__learn:hover{text-decoration:underline}
.tip-strip__icon{flex-shrink:0;width:16px;height:16px;color:var(--c-warning)}
.tip-strip__icon svg{width:100%;height:100%;display:block}
.tip-strip__text{flex:1;min-width:0;font-size:var(--text-footnote);color:var(--c-text-primary);line-height:1.45}
.tip-strip__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:none;color:var(--c-text-tertiary);cursor:pointer;border-radius:var(--radius-sm)}
.tip-strip__close svg{width:13px;height:13px}
.tip-strip__close:hover{color:var(--c-text-primary)}

/* ── Stat cards ── */
.stat-card--green .stat-card__value{color:var(--d-green)}
.stat-card--amber .stat-card__value{color:var(--d-amber)}
.stat-card--red .stat-card__value{color:var(--d-red)}

/* ── Card ── */
.card{background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);box-shadow:var(--d-shadow-sm);overflow:hidden}
.card__header{padding:16px 20px;border-bottom:1px solid var(--d-border);display:flex;align-items:center;justify-content:space-between;gap:12px}
.card__title{font-size:14px;font-weight:700;color:var(--d-text)}
/* The card subtitle — nine views across the console were already writing this class before any
   stylesheet defined it (the class ratchet caught the drift at exactly +1). One rule, not nine
   inline styles. */
.card__sub{font-size:12.5px;color:var(--d-text-2);margin-top:2px;font-weight:400}
.card__body{padding:20px}

/* ── Buttons ── */
.btn{display:inline-flex;align-items:center;gap:6px;padding:0 16px;height:36px;border-radius:var(--d-radius-sm);font-size:13px;font-weight:600;cursor:pointer;border:none;outline:none;text-decoration:none;transition:background var(--d-transition),box-shadow var(--d-transition),opacity var(--d-transition);white-space:nowrap;user-select:none;font-family:inherit}
/* `.btn`'s display beats the user agent's [hidden] rule, so a button hidden by the attribute
   would keep rendering. Sitewide, because .btn is used everywhere. */
.btn[hidden]{display:none}
#pl-seg[hidden],#pl-panel[hidden],#pl-hub[hidden]{display:none!important}
.btn:disabled{opacity:.5;cursor:not-allowed}
/* LOOKS DISABLED, STAYS CLICKABLE. The app's own note on the same control: "Save stays
   tappable-when-disabled so it can surface the validation banner" — a truly disabled button
   cannot say why it will not work, so the gate is drawn, not enforced by the attribute. */
.btn--gated{opacity:.5}
/* The share dialog's preview — what is about to be copied, shown before it is. */
.ch-share__preview{margin:0;padding:10px;border-radius:8px;background:var(--c-surface-secondary);color:var(--c-text-primary);font:inherit;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;text-align:left}
/* The next-move band's SECOND verb (customers e233). Quiet beside the primary, because it is the
   thing to do when the primary is not the thing to do. */
.ch-move__acts{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.ch-move__second{padding:0;border:0;background:none;color:var(--d-green);font:inherit;font-size:12px;font-weight:700;cursor:pointer}
/* THE QUICK COMPOSER (customers e122). It opens under the tabs rather than over the page, because
   the point of it is not leaving the record somebody is reading. */
.ch-quick{margin-bottom:12px}
.ch-quick__head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:8px}
.ch-quick__head strong{display:block;color:var(--c-text-primary);font-size:13px}
.ch-quick__head small{display:block;color:var(--c-text-secondary);font-size:11px}
.ch-quick__close{width:26px;height:26px;border:0;border-radius:50%;background:var(--c-surface-secondary);color:var(--c-text-secondary);font:inherit;font-size:11px;cursor:pointer}
.ch-quick__row{display:flex;align-items:center;gap:8px;margin-top:8px}
.ch-quick__date{max-width:170px}
.ch-quick__day{padding:4px 8px;border:1px solid var(--c-border);border-radius:20px;background:none;color:var(--c-text-secondary);font:inherit;font-size:11px;cursor:pointer}
.ch-quick__day:hover{color:var(--c-text-primary)}
.ch-quick__more{padding:0;border:0;background:none;color:var(--c-text-secondary);font:inherit;font-size:12px;cursor:pointer}
.ch-quick__save{margin-left:auto}
.ch-quick__foot{margin:8px 0 0;color:var(--c-text-secondary);font-size:11px}
/* COMING UP (customers e205). It sits at the head of the rail because a promise with a date on it
   outranks the facts below it — and it renders nothing at all when there is nothing promised. */
.ch-coming{margin-bottom:16px}
.ch-coming__head{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}
.ch-coming__kicker{color:var(--c-text-secondary);font-size:10px;font-weight:800;letter-spacing:.6px}
.ch-coming__verdict{color:var(--c-text-secondary);font-size:12px;font-variant-numeric:tabular-nums}
.ch-coming__row{display:flex;align-items:center;gap:8px;padding:8px 0;border-top:1px solid var(--c-border-subtle)}
.ch-coming__row:first-of-type{border-top:0}
.ch-coming__what{display:flex;min-width:0;flex:1;flex-direction:column;gap:1px}
.ch-coming__what strong{color:var(--c-text-primary);font-size:12px}
.ch-coming__what small{color:var(--c-text-secondary);font-size:11px}
.ch-coming__acts{display:flex;flex:none;gap:8px}
.ch-coming__verb{padding:2px 0;border:0;background:none;color:var(--d-green);font:inherit;font-size:11px;font-weight:700;cursor:pointer}
.ch-coming__verb--quiet{color:var(--c-text-secondary);font-weight:500}
/* THE TWO REGISTERS OF THE MONEY (customers e176/e177). Rows are flush lists rather than cards: a
   register is a ledger, and giving each line its own border makes ten payments look like ten
   separate events rather than one account's history. */
.cd-reg{margin-top:16px}
.cd-reg__label{margin-bottom:6px;color:var(--c-text-secondary);font-size:10px;font-weight:800;letter-spacing:.6px}
.cd-reg__row{display:flex;width:100%;align-items:center;gap:10px;padding:8px 2px;border:0;border-top:1px solid var(--c-border-subtle);background:none;font:inherit;text-align:left}
.cd-reg__row:first-of-type{border-top:0}
.cd-reg__row--door{cursor:pointer}
.cd-reg__row--door:hover{background:var(--c-surface-secondary)}
.cd-reg__what{display:flex;min-width:0;flex:1;flex-direction:column;gap:1px}
.cd-reg__what strong{color:var(--c-text-primary);font-size:13px;font-variant-numeric:tabular-nums}
.cd-reg__what small{color:var(--c-text-secondary);font-size:11px}
.cd-reg__when,.cd-reg__total{flex:none;color:var(--c-text-secondary);font-size:11px;font-variant-numeric:tabular-nums}
.cd-reg__total{color:var(--c-text-primary);font-size:13px;font-weight:600}
.cd-reg__go{flex:none;color:var(--c-text-secondary)}
.cd-reg__toggle{margin-top:6px;padding:0;border:0;background:none;color:var(--d-green);font:inherit;font-size:12px;font-weight:700;cursor:pointer}
/* THE CUSTOMER'S JOBS CARD (customers e156). Rows are buttons, not links: they carry a crumb before
   they navigate, so the job's Back returns to the customer it was opened from. */
.ch-jobs{margin-bottom:16px}
.ch-jobs__head{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}
.ch-jobs__kicker{color:var(--c-text-secondary);font-size:10px;font-weight:800;letter-spacing:.6px}
.ch-jobs__verdict{color:var(--c-text-secondary);font-size:12px;font-variant-numeric:tabular-nums}
.ch-jobs__quiet{margin:0;color:var(--c-text-secondary);font-size:12px}
.ch-jobs__rows{display:flex;flex-direction:column}
.ch-job{display:flex;width:100%;align-items:center;gap:10px;padding:10px 2px;border:0;border-top:1px solid var(--c-border-subtle);background:none;font:inherit;text-align:left;cursor:pointer}
.ch-jobs__rows .ch-job:first-child{border-top:0}
.ch-job:hover{background:var(--c-surface-secondary)}
.ch-job__what{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}
.ch-job__what strong{color:var(--c-text-primary);font-size:13px}
.ch-job__what small{color:var(--c-text-secondary);font-size:11px}
.ch-job__badge{flex:none;padding:2px 8px;border-radius:20px;background:var(--c-surface-secondary);color:var(--c-text-secondary);font-size:10px;font-weight:700}
.ch-job__go{flex:none;color:var(--c-text-secondary)}
.ch-jobs__toggle{margin-top:8px;padding:0;border:0;background:none;color:var(--d-green);font:inherit;font-size:12px;font-weight:700;cursor:pointer}
/* A ROW MENU AT THE POINTER. `.dropdown__menu` positions itself against a trigger; this one is
   placed in viewport coordinates by `openRowMenu`, so it leaves the flow entirely. */
.dropdown__menu--at-point{position:fixed;right:auto;top:auto}
/* THE NOTES REGISTER (customers e198). It closes the details card rather than opening a fourth box
   to hold one word, so it borrows the card's own section spacing and adds only what notes need:
   wrapping that respects the line breaks somebody typed, and an invitation that reads as a door. */
.ch-details__notes{margin:4px 0 0;color:var(--c-text-primary);font-size:13px;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
.ch-details__invite{display:flex;width:100%;align-items:center;gap:8px;padding:0;border:0;background:none;color:var(--c-text-secondary);font:inherit;font-size:12px;text-align:left;cursor:pointer}
.ch-details__invite:hover{color:var(--c-text-primary)}
.ch-details__invite-chevron{margin-left:auto;color:var(--c-text-secondary)}
/* THE PIPELINE COACHING LINE (customers e033). Quiet by construction — it is a hint above a filter
   bar, not a banner: a book of contacts with nothing hanging off them is not an error and must not
   be dressed as one. */
.cust-coach{display:flex;align-items:center;gap:6px;margin:0 0 10px;color:var(--c-text-secondary);font-size:12px}
.cust-coach__mark{flex:none;font-size:11px;line-height:1}
/* THE ARCHIVED CEREMONY (customers e135). Dashed, because the record is still a record and this is
   a state around it rather than a card of its own; warning-toned only when money is still owed,
   which is the one case where "archived" reads as settled and is not. */
.ch-archived{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;padding:14px 16px;border:1.2px dashed var(--c-border);border-radius:12px;background:color-mix(in srgb,var(--c-surface-secondary) 50%,transparent)}
.ch-archived--owing{border-color:color-mix(in srgb,var(--c-warning) 35%,transparent)}
.ch-archived__head{display:flex;align-items:center;gap:10px;min-width:0}
.ch-archived__pill{flex:none;padding:3px 8px;border-radius:20px;background:var(--c-surface-secondary);color:var(--c-text-secondary);font-size:9px;font-weight:700;letter-spacing:.5px}
.ch-archived--owing .ch-archived__pill{background:var(--c-warning-tint);color:var(--c-warning)}
.ch-archived__say{color:var(--c-text-secondary);font-size:12px}
.ch-archived--owing .ch-archived__say{color:var(--c-warning)}
.ch-archived__acts{display:flex;flex:none;gap:12px}
.btn--primary{background:var(--d-green);color:var(--c-on-brand)}
.btn--primary:hover:not(:disabled){background:var(--d-green-dark);box-shadow:var(--d-shadow-sm)}
.btn--ghost{background:transparent;color:var(--d-text-2);border:1px solid var(--d-border)}
.btn--ghost:hover:not(:disabled){background:var(--d-content-bg);color:var(--d-text)}
.btn--danger{background:var(--d-red-light);color:var(--d-red)}
.btn--danger:hover:not(:disabled){background:var(--c-danger-tint)}
.btn--warning{background:var(--c-warning);color:var(--c-on-warning)}
.btn--warning:hover:not(:disabled){filter:brightness(.94)}
.btn--sm{height:30px;padding:0 12px;font-size:12px}
.btn--icon{width:36px;height:36px;padding:0;justify-content:center}
.btn--icon.btn--sm{width:30px;height:30px}
.btn--full{width:100%;justify-content:center}
.btn--signin{height:42px;font-size:14px}
.dash-phone-flow{display:none}
.dash-phone-flow.active{display:block}
.dash-phone-back{background:none;border:none;color:var(--d-green);font-size:13px;font-weight:600;cursor:pointer;padding:0;margin-bottom:20px;display:flex;align-items:center;gap:4px}
.dash-phone-back:hover{text-decoration:underline}

/* ── Badges ── */
.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:.2px;white-space:nowrap}
.badge--admin{background:var(--d-green-light);color:var(--d-green-dark)}
.badge--manager{background:var(--d-blue-light);color:var(--c-info)}
.badge--member{background:var(--c-control-fill);color:var(--c-text-primary)}
.badge--collaborator{background:var(--d-purple-light);color:var(--c-accent-purple)}
.badge--solo{background:var(--d-green-light);color:var(--d-green-dark)}
.badge--active{background:var(--c-success-tint);color:var(--c-brand-pressed)}
.badge--pending{background:var(--d-amber-light);color:var(--c-warning)}
.badge--expired{background:var(--d-red-light);color:var(--c-danger)}
.badge--inactive{background:var(--c-control-fill);color:var(--c-text-secondary)}

/* ── Table ── */
.table-wrap{width:100%;overflow-x:auto}

/* ── Columnar list ────────────────────────────────────────────────────────────
   BizColumnarRow: rows sit directly on the surface, separated by a hairline. No
   per-row card, no border, no shadow — the flat redesign retired all three and
   density rose about a third. The header aligns to the row CONTENT, not to the
   table edge, so the columns line up with the data beneath them.

   Column widths come from Theme.Size.Col — the shared slots every Business Tools
   list uses. Pick the slot that fits the column's MEANING (a status badge is
   .col-badge whatever it happens to measure today); never hand-type a width, or
   two lists that show the same thing stop lining up. */
.dash-table{width:100%;border-collapse:collapse;font-size:var(--text-footnote)}
.dash-table thead{border-bottom:1px solid var(--c-card-border)}
.dash-table th{padding:8px var(--space-md);text-align:left;font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);white-space:nowrap;user-select:none}
.dash-table th.sortable{cursor:pointer}
.dash-table th.sortable:hover{color:var(--c-text-secondary)}
.dash-table tbody tr{border-bottom:1px solid var(--c-separator);transition:background var(--motion-fast)}
.dash-table tbody tr:last-child{border-bottom:none}
.dash-table tbody tr:hover{background:var(--c-field-fill)}
.dash-table td{padding:var(--space-sm-md) var(--space-md);color:var(--c-text-primary);vertical-align:middle}
.dash-table td.muted{color:var(--c-text-tertiary)}
.dash-table__cell-primary{font-weight:600}
.dash-table__cell-secondary{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:1px}

/* The slots. The leading name column flexes off its minimum; the rest are fixed. */
.col-name  {min-width:var(--col-name-min);width:auto}
.col-wide  {width:var(--col-wide);   min-width:var(--col-wide)}
.col-text  {width:var(--col-text);   min-width:var(--col-text)}
.col-amount{width:var(--col-amount); min-width:var(--col-amount); text-align:right}
.col-badge {width:var(--col-badge);  min-width:var(--col-badge)}
.col-meta  {width:var(--col-meta);   min-width:var(--col-meta)}
.col-count {width:var(--col-count);  min-width:var(--col-count);  text-align:center}
.col-mini  {width:var(--col-mini);   min-width:var(--col-mini);   text-align:center}
/* An action column carries controls, not text — it shrinks to them. */
.col-actions{width:1%;white-space:nowrap;text-align:right}

/* ── Filter bar ── */
.filter-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}
/* `display` on a class beats the [hidden] ATTRIBUTE, so a view setting `hidden` on one of these
   hid nothing and the element stayed on screen. The attribute is how the JS hides them, so the
   attribute has to win. */
.filter-bar[hidden]{display:none}

/* ── Field › Handoff ─────────────────────────────────────────────────────────
   Assigned field work under its five lenses. A row is a LINK to the job at its canonical
   address, not a record surface of its own — readiness finds work, it does not do it. */
.fh-lens.is-on{background:var(--c-accent-tint);color:var(--c-accent-cyan);border-color:var(--c-accent-cyan)}
.fh-rows{display:flex;flex-direction:column}
.fh-row{display:flex;align-items:center;gap:12px;padding:12px 4px;border-top:1px solid var(--c-card-border);
  color:inherit;text-decoration:none}
.fh-row:first-child{border-top:0}
.fh-row:hover{background:var(--c-field-fill)}
.fh-row__main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.fh-row__main small{color:var(--c-text-secondary);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fh-row__day{flex:0 0 auto;font-size:12.5px;color:var(--c-text-secondary);min-width:64px;text-align:right}
.fh-row__chips{flex:0 0 auto;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.fh-chip{display:inline-flex;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap}
@media (max-width:720px){
  .fh-row{flex-wrap:wrap;align-items:flex-start}
  .fh-row__day{text-align:left;min-width:0;order:3}
  .fh-row__chips{order:4;justify-content:flex-start;width:100%}
}
.filter-bar__search{position:relative;flex:1;min-width:200px;max-width:320px}
.filter-bar__search input{width:100%;height:36px;padding:0 12px 0 36px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);font-size:13px;color:var(--d-text);outline:none;transition:border-color var(--d-transition),box-shadow var(--d-transition);font-family:inherit}
.filter-bar__search input:focus{border-color:var(--d-green);box-shadow:0 0 0 3px rgba(48,107,71,.1)}
.filter-bar__search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--d-text-3);pointer-events:none}
.filter-select{height:36px;padding:0 28px 0 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);font-size:13px;color:var(--d-text);cursor:pointer;outline:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;transition:border-color var(--d-transition);font-family:inherit}
.filter-select:focus{border-color:var(--d-green);box-shadow:0 0 0 3px rgba(48,107,71,.1)}

/* Catalyst Stockroom keeps search above a horizontally scrolling category row. Equipment uses
   the same chips on a desk and collapses only its status row to a menu on a phone. Attribute
   selectors keep this local to the Inventory face without adding another class vocabulary. */
[data-inventory-filters]{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xl);flex-wrap:wrap}
[data-inventory-filters] .filter-bar__search{flex:1 0 100%;max-width:none}
[data-inventory-chips]{display:flex;align-items:center;gap:var(--space-sm);width:100%;overflow-x:auto;scrollbar-width:none}
[data-inventory-chips]::-webkit-scrollbar{display:none}
[data-inventory-chips] button{min-height:36px;padding:0 var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-pill);background:var(--c-card-background);color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-caption);font-weight:600;line-height:1;white-space:nowrap;cursor:pointer}
[data-inventory-chips] button[aria-pressed="true"]{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
[data-inventory-chips] b{font-variant-numeric:tabular-nums;color:inherit}
[data-inventory-mobile-filter]{display:none}
[data-inventory-compact]{display:none}

/* Catalyst's lean editors: one 660pt column, card sections, adaptive chip grids, and optional
   identity/upkeep blocks folded behind disclosures.

   The grammar is NOT Materials-specific — every migrated Catalyst form sheet is this same stack of
   labelled cards over picked chip grids — so the punch, checklist and timesheet editors join the
   same rules under the neutral `data-biz-*` hooks rather than copying the declarations. Aliased,
   not duplicated: two copies of a card would drift the first time one was adjusted. */
[data-material-form],[data-biz-form]{display:flex;flex-direction:column;gap:var(--space-lg);width:100%;max-width:660px;margin:0 auto;padding:var(--space-sm) 0 var(--space-xl)}
[data-material-form-card],[data-material-disclosure],[data-biz-form-card]{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}
[data-material-form-card],[data-biz-form-card]{padding:var(--space-lg)}
[data-material-form-label],[data-biz-form-label]{margin-bottom:var(--space-sm-md);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:750;letter-spacing:.06em;text-transform:uppercase}
[data-material-form-card] > .form-input + .form-input,[data-biz-form-card] > .form-input + .form-input{margin-top:var(--space-sm-md)}
[data-material-form-card] > .form-label:not(:first-child),[data-biz-form-card] > .form-label:not(:first-child){margin-top:var(--space-md)}
[data-material-choice-grid],[data-biz-choice-grid]{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:var(--space-xs-sm)}
[data-material-choice-grid="unit"]{grid-template-columns:repeat(auto-fit,minmax(82px,1fr))}
[data-material-choice-grid] button,[data-biz-choice-grid] button{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);min-height:40px;padding:var(--space-xs-sm) var(--space-md);border:var(--border-fine) solid var(--c-input-border);border-radius:var(--radius-pill);background:var(--c-input-fill);color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-caption);font-weight:600;cursor:pointer}
[data-material-choice-grid] button svg,[data-biz-choice-grid] button svg{flex:0 0 13px;width:13px;height:13px}
[data-material-choice-grid="category"]{--material-choice:var(--c-accent-blue)}
[data-material-choice-grid] button[data-material-tone="powerTools"]{--material-choice:var(--c-accent-orange)}
[data-material-choice-grid] button[data-material-tone="handTools"]{--material-choice:var(--c-accent-indigo)}
[data-material-choice-grid] button[data-material-tone="heavyEquipment"]{--material-choice:var(--c-accent-brown)}
[data-material-choice-grid] button[data-material-tone="safetyGear"]{--material-choice:var(--c-brand-primary)}
[data-material-choice-grid] button[data-material-tone="measuring"]{--material-choice:var(--c-accent-teal)}
[data-material-choice-grid] button[data-material-tone="ladders"]{--material-choice:var(--c-accent-gray)}
[data-material-choice-grid] button[data-material-tone="vehicles"]{--material-choice:var(--c-accent-blue)}
[data-material-choice-grid] button[data-material-tone="electrical"]{--material-choice:var(--c-accent-yellow)}
[data-material-choice-grid] button[data-material-tone="plumbing"]{--material-choice:var(--c-accent-cyan)}
[data-material-choice-grid] button[data-material-tone="general"]{--material-choice:var(--c-accent-purple)}
[data-material-choice-grid] button[aria-pressed="true"],[data-biz-choice-grid] button[aria-pressed="true"]{border-color:var(--material-choice,var(--c-brand-primary));background:color-mix(in srgb,var(--material-choice,var(--c-brand-primary)) 14%,var(--c-input-fill));color:var(--material-choice,var(--c-brand-primary));box-shadow:inset 0 0 0 .5px currentColor}
[data-material-choice-grid] button[data-eq-condition="5"][aria-pressed="true"]{border-color:var(--c-warning);background:var(--c-warning-tint);color:var(--c-warning)}
[data-material-choice-grid] button[data-eq-condition="2"][aria-pressed="true"]{border-color:var(--c-danger);background:var(--c-danger-tint);color:var(--c-danger)}
[data-material-hint]{min-height:1em;margin:var(--space-sm) 0 0;color:var(--c-text-tertiary);font-size:var(--text-caption);line-height:1.4}
/* `BusinessFormContainer.validationBannerView` — the refusal a Materials form actually shows. The
   sheet's own errorMessage line cannot execute, so this shape and these words are the whole of it:
   a red bar with a dismiss, clearing itself after four seconds. */
[data-material-banner]{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-radius:var(--radius-control);background:var(--c-danger);color:var(--c-on-brand);font-size:var(--text-subhead);font-weight:500}
[data-material-banner] > svg{flex:0 0 15px;width:15px;height:15px}
[data-material-banner] > span{flex:1 1 auto}
[data-material-banner] button{flex:0 0 auto;padding:0;border:none;background:none;color:var(--c-on-brand);opacity:.7;cursor:pointer;line-height:0}
[data-material-banner] button svg{width:11px;height:11px}
[data-material-stock-pair]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}
[data-material-stock-pair] label > span:first-child{display:block;margin-bottom:var(--space-xs);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:600}
[data-material-number]{display:flex;align-items:center;gap:var(--space-xs);min-height:48px;padding:0 var(--space-sm-md);border:var(--border-fine) solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-input-fill)}
[data-material-number] input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:700 var(--text-title3)/1 var(--font-family);font-variant-numeric:tabular-nums}
[data-material-number] b{color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:600}
[data-material-disclosure]{overflow:hidden}
[data-material-disclosure] summary{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);min-height:56px;padding:0 var(--space-lg);cursor:pointer;list-style:none}
[data-material-disclosure] summary::-webkit-details-marker{display:none}
[data-material-disclosure] summary span{font-size:var(--text-body);font-weight:650;color:var(--c-text-primary)}
[data-material-disclosure] summary small{margin-left:var(--space-xs);color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:400}
[data-material-disclosure] summary b{color:var(--c-text-tertiary);font-size:20px;transition:transform var(--motion-base)}
[data-material-disclosure][open] summary b{transform:rotate(90deg)}
[data-material-disclosure-body]{display:flex;flex-direction:column;gap:var(--space-sm-md);padding:0 var(--space-lg) var(--space-lg)}
[data-material-disclosure-body] .form-label{margin:var(--space-xs) 0 calc(-1 * var(--space-xs))}
[data-material-cost-row]{display:grid;grid-template-columns:auto minmax(80px,1fr) auto;align-items:center;gap:var(--space-xs);min-height:44px;padding:0 var(--space-sm-md);border:var(--border-fine) solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-input-fill)}
[data-material-cost-row] .form-input{min-width:0;border:0;background:transparent;padding-inline:0}
[data-material-cost-row] > span{color:var(--c-text-secondary);font-size:var(--text-caption)}
[data-material-cost-row] > span:first-child{font-size:var(--text-subhead);font-weight:650}
[data-material-cost-row] b{font-weight:600}
[data-material-money-row]{display:flex;align-items:center;gap:var(--space-md);min-height:44px}
[data-material-money-row] label{flex:1;color:var(--c-text-primary);font-size:var(--text-footnote)}
[data-material-money-row] .money-field{flex:0 0 130px}
[data-material-money-row]:last-child .money-field{flex-basis:110px}
[data-material-total]{align-self:flex-end;margin:calc(-1 * var(--space-xs)) 0 0;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700}
[data-equipment-state]{display:flex;align-items:center;gap:var(--space-xs);margin-bottom:var(--space-md)}
[data-equipment-state] span{color:var(--c-text-secondary)}
[data-equipment-state] small{margin-left:auto;color:var(--c-text-secondary);font-weight:600}
[data-equipment-form-actions]{display:flex;flex-direction:column;gap:var(--space-xs-sm)}
[data-equipment-form-actions] .btn{justify-content:flex-start;min-height:44px}
.rpane .record:has([data-material-form]){grid-template-columns:minmax(0,1fr);align-items:stretch}
.rpane .record__rail:empty{display:none}
@media(max-width:700px){
  [data-inventory-chips="equipment"]{display:none}
  [data-inventory-mobile-filter]{display:block;width:100%;height:44px;font-size:16px}
  [data-inventory-wide]{display:none}
  [data-inventory-compact]{display:block}
  [data-inventory-card]{padding:var(--space-md);cursor:pointer}
  [data-inventory-card] + [data-inventory-card]{border-top:var(--border-fine) solid var(--c-separator)}
  [data-inventory-card-head],[data-inventory-card-foot]{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
  [data-inventory-card-head] strong{font-size:var(--text-subhead);line-height:1.3}
  [data-inventory-card] > small{display:block;margin-top:var(--space-xs);color:var(--c-text-tertiary);line-height:1.4}
  [data-inventory-card-foot]{margin-top:var(--space-sm);color:var(--c-text-secondary);font-size:var(--text-caption)}
  [data-inventory-card-foot] > span:last-child{display:flex;gap:var(--space-xs);flex-wrap:wrap;justify-content:flex-end}
  [data-inventory-chips] button,[data-inventory-card-foot] .btn,#in-recent [data-usage-del]{min-height:44px}
  [data-inventory-card-service]{margin-top:var(--space-sm);font-size:var(--text-caption);color:var(--c-text-tertiary)}
  [data-inventory-card-service][data-overdue]{color:var(--c-danger);font-weight:600}
  [data-material-form]{gap:var(--space-md);padding-top:0}
  [data-material-form-card],[data-biz-form-card]{padding:var(--space-md)}
  [data-material-choice-grid]{grid-template-columns:repeat(2,minmax(0,1fr))}
  [data-material-choice-grid] button{min-height:44px}
  [data-material-disclosure] summary{padding:0 var(--space-md)}
  [data-material-disclosure] summary span{display:flex;min-width:0;flex-direction:column;gap:2px}
  [data-material-disclosure] summary small{margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  [data-material-disclosure-body]{padding:0 var(--space-md) var(--space-md)}
}

/* ── Forms ── */
.form-group{margin-bottom:18px}
.form-label{display:block;font-size:12px;font-weight:600;color:var(--d-text-2);margin-bottom:6px;letter-spacing:.2px}
.form-input{width:100%;height:38px;padding:0 12px;border:1px solid var(--c-input-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);font-size:13px;color:var(--d-text);outline:none;transition:border-color var(--d-transition),box-shadow var(--d-transition);font-family:inherit}
.form-input:focus{border-color:var(--d-green);box-shadow:0 0 0 3px rgba(48,107,71,.1)}
.form-input.error{border-color:var(--d-red)}
.form-select{width:100%;height:38px;padding:0 28px 0 12px;border:1px solid var(--c-input-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);font-size:13px;color:var(--d-text);cursor:pointer;outline:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;transition:border-color var(--d-transition),box-shadow var(--d-transition);font-family:inherit}
.form-select:focus{border-color:var(--d-green);box-shadow:0 0 0 3px rgba(48,107,71,.1)}
.form-textarea{width:100%;padding:10px 12px;border:1px solid var(--c-input-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);font-size:13px;color:var(--d-text);outline:none;resize:vertical;min-height:80px;font-family:inherit;transition:border-color var(--d-transition),box-shadow var(--d-transition)}
.form-textarea:focus{border-color:var(--d-green);box-shadow:0 0 0 3px rgba(48,107,71,.1)}
.form-error{font-size:12px;color:var(--d-red);margin-top:4px}
.form-hint{font-size:12px;color:var(--d-text-3);margin-top:4px}

/* ── Settings — Security rows ── */
.sett-sec-row{position:relative}
.sett-sec-btn{display:flex;align-items:center;gap:14px;width:100%;padding:14px 20px;background:transparent;border:none;cursor:pointer;text-align:left;transition:background var(--d-transition);font-family:inherit}
.sett-sec-btn:hover{background:var(--d-green-50)}
.sett-sec-icon{font-size:18px;flex-shrink:0;width:28px;text-align:center}
.sett-sec-content{flex:1;min-width:0}
.sett-sec-label{font-size:11px;font-weight:700;letter-spacing:.3px;text-transform:uppercase;color:var(--d-text-3);margin-bottom:2px}
.sett-sec-value{font-size:14px;font-weight:500;color:var(--d-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sett-chevron{flex-shrink:0;color:var(--d-text-3);transition:transform 200ms ease}
.sett-badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap}
.sett-badge--green{color:var(--c-success);background:var(--c-success-tint);border:1px solid var(--c-success-tint)}
.sett-badge--amber{color:var(--c-warning);background:var(--c-warning-tint);border:1px solid var(--c-warning-tint)}
/* Settings — Password field with eye toggle */
.sett-pwd-wrap{position:relative}
.sett-pwd-input{padding-right:44px !important}
.sett-eye-btn{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:16px;padding:4px;line-height:1;color:var(--d-text-3);transition:color var(--d-transition)}
.sett-eye-btn:hover{color:var(--d-text)}

/* ── Modal ── */
.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fadeIn 150ms ease}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal{background:var(--d-card-bg);border-radius:var(--d-radius-lg);border:1px solid var(--d-border);width:100%;max-width:480px;max-height:calc(100vh - 48px);overflow-y:auto;animation:slideUp 200ms ease}
@keyframes slideUp{from{transform:translateY(16px);opacity:0}to{transform:translateY(0);opacity:1}}
/* The form column. Every form sheet in the app is 660 wide and centred — a measure, not a
   window fraction. A field stretched to 1400px is unreadable and a form that reflows as you
   resize is disorienting. The record surface is wider because it carries a rail beside the
   fields, not because the fields grew. */
.modal--wide{max-width:var(--size-form-column)}
.modal--record{max-width:calc(var(--size-form-column) + 300px)}
/* A PICKER is not a form. The form measure (660) exists so prose and fields read well; a dense
   multi-column list scanned for one row wants width instead — at 660 the takeoff picker's product
   select lands near 190px and truncates every name it is there to let you compare. */
.modal--picker{max-width:calc(var(--size-form-column) + 320px)}
@media (max-width: 820px){
  /* Below the width the grid needs, the rows stack rather than crush: what was measured, then the
     quantity, then the product, then the amount. */
  .tkp__head{display:none}
  .tkp__row{grid-template-columns:18px 1fr;grid-auto-rows:min-content;row-gap:4px}
  .tkp__meas,.tkp__pick,.tkp__amt{grid-column:2}
  .tkp__amt{text-align:left}
  .pbp__qty{flex-basis:auto}
}
.modal--narrow{max-width:360px}
.modal__header{padding:20px 24px 0;display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.modal__title{font-size:16px;font-weight:800;color:var(--d-text);letter-spacing:-.3px}
.modal__close{width:28px;height:28px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--d-text-3);flex-shrink:0;transition:background var(--d-transition),color var(--d-transition)}
.modal__close:hover{background:var(--d-content-bg);color:var(--d-text)}
.modal__body{padding:16px 24px 24px;font-size:var(--text-footnote)}
.modal__footer{padding:0 24px 24px;display:flex;justify-content:flex-end;gap:10px}

/* ── Toast ── */
#toast-root{position:fixed;bottom:24px;right:24px;z-index:2000;display:flex;flex-direction:column;gap:10px;pointer-events:none}
.toast{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--c-text-primary);color:var(--c-background);border-radius:var(--d-radius);font-size:var(--text-footnote);font-weight:500;min-width:260px;max-width:380px;pointer-events:all;animation:toastIn 200ms ease}
@keyframes toastIn{from{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}
.toast.out{animation:toastOut 200ms ease forwards}
@keyframes toastOut{from{transform:translateY(0);opacity:1}to{transform:translateY(8px);opacity:0}}
.toast--success .toast__icon{color:var(--c-success)}
.toast--error .toast__icon{color:var(--c-danger)}
.toast--warning .toast__icon{color:var(--c-warning)}
.toast--info .toast__icon{color:var(--c-info)}

/* ── Skeleton ── */
@keyframes shimmer{0%{background-position:-500px 0}100%{background-position:500px 0}}
.skeleton{background:linear-gradient(90deg,var(--c-background-secondary) 25%,var(--c-background-secondary) 50%,var(--c-background-secondary) 75%);background-size:1000px 100%;animation:shimmer 1.5s infinite;border-radius:var(--d-radius-sm)}
.skeleton--text{height:14px;border-radius:4px}
.skeleton--title{height:22px;border-radius:4px}
.skeleton--stat{height:90px;border-radius:var(--d-radius)}
.skeleton--row{height:50px;border-radius:0}

/* ── Empty state ── */
.empty-state{text-align:center;padding:60px 24px}
.empty-state__icon{width:48px;height:48px;margin:0 auto 16px;color:var(--d-text-3);opacity:.6}
.empty-state__title{font-size:16px;font-weight:700;color:var(--d-text);margin-bottom:6px}
.empty-state__sub{font-size:13px;color:var(--d-text-3);max-width:320px;margin:0 auto 20px}

/* ── Dropdown ── */
.dropdown{position:relative;display:inline-block}
.dropdown__menu{position:absolute;right:0;top:calc(100% + 4px);background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);min-width:160px;z-index:200;overflow:hidden;animation:fadeIn 120ms ease}
.dropdown__item{display:flex;align-items:center;gap:8px;padding:9px 14px;font-size:13px;color:var(--d-text);cursor:pointer;transition:background var(--d-transition);border:none;background:none;width:100%;text-align:left;font-family:inherit}
.dropdown__item:hover{background:var(--d-content-bg)}
.dropdown__item--danger{color:var(--d-red)}
.dropdown__item--danger:hover{background:var(--d-red-light)}
.dropdown__divider{height:1px;background:var(--d-border);margin:4px 0}

/* ── Copy box ── */
.copy-box{display:flex;align-items:center;gap:8px;background:var(--d-content-bg);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);padding:8px 12px}
.copy-box__text{flex:1;font-size:12px;color:var(--d-text-2);font-family:'SF Mono','Fira Code',monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── Tab nav ── */

/* ── Release notes ── */
.rn-list{display:flex;flex-direction:column;gap:12px}
.rn-card{border:1px solid var(--d-border);border-radius:var(--d-radius);overflow:hidden;background:var(--d-card-bg)}
.rn-card__header{padding:14px 16px;background:var(--c-background-secondary);border-bottom:1px solid var(--d-border);display:flex;align-items:center;gap:12px}
.rn-card__version{font-size:13px;font-weight:800;color:var(--d-text);font-family:'SF Mono',monospace}
.rn-card__date{font-size:12px;color:var(--d-text-3)}
.rn-card__actions{margin-left:auto;display:flex;gap:6px}
.rn-card__items{padding:12px 16px}
.rn-item{display:flex;align-items:flex-start;gap:8px;padding:6px 0;font-size:13px;color:var(--d-text-2);border-bottom:1px solid var(--d-border-light)}
.rn-item:last-child{border-bottom:none}
.rn-type-badge{font-size:11px;font-weight:700;padding:1px 6px;border-radius:10px;text-transform:uppercase;flex-shrink:0;margin-top:1px}
.rn-type-new{background:var(--d-green-light);color:var(--d-green-dark)}
.rn-type-improved{background:var(--d-blue-light);color:var(--c-info)}
.rn-type-fixed{background:var(--d-amber-light);color:var(--c-warning)}

/* ── Markets grid ── */
.markets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}
.market-card{background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);padding:20px;box-shadow:var(--d-shadow-sm);display:flex;flex-direction:column;gap:12px}
.market-card__name{font-size:16px;font-weight:800;color:var(--d-text);letter-spacing:-.2px}
.market-card__manager{font-size:12px;color:var(--d-text-3)}
.market-card__stats{display:flex;gap:16px}
.market-card__stat{font-size:12px;color:var(--d-text-2)}
.market-card__stat strong{font-size:18px;font-weight:700;color:var(--d-text);display:block;line-height:1}
.market-card__actions{display:flex;gap:8px;margin-top:4px}

/* ── Billing ── */
.billing-plan-card{background:linear-gradient(135deg,var(--c-brand-pressed) 0%,var(--c-brand-pressed) 100%);border-radius:var(--d-radius-lg);padding:28px;color:var(--c-on-brand);margin-bottom:24px;position:relative;overflow:hidden}
.billing-plan-card::after{content:'';position:absolute;top:-40px;right:-40px;width:180px;height:180px;background:rgba(48,107,71,.3);border-radius:50%}
.billing-plan__label{font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:rgba(255,255,255,.5);margin-bottom:6px}
.billing-plan__name{font-size:26px;font-weight:800;letter-spacing:-.5px;position:relative;z-index:1}
.billing-plan__meta{font-size:13px;color:rgba(255,255,255,.6);margin-top:6px}
.billing-plan__renewal{font-size:12px;color:rgba(255,255,255,.45);margin-top:4px}
.seat-bar{height:6px;background:rgba(255,255,255,.15);border-radius:3px;overflow:hidden;margin-top:8px}
.seat-bar__fill{height:100%;background:rgba(255,255,255,0.65);border-radius:3px;transition:width .4s ease}

/* ── Login page ── */
.dash-login-body{min-height:100vh;display:flex;align-items:flex-start;align-items:safe center;justify-content:center;background:var(--d-content-bg);padding:24px;overflow-y:auto}
.dash-login-card{background:var(--d-card-bg);border-radius:var(--d-radius);padding:40px;width:100%;max-width:420px;border:1px solid var(--d-border);border-top:3px solid var(--d-green)}
.dash-login-logo{display:flex;align-items:center;gap:10px;margin-bottom:32px}
.dash-login-logo img{width:36px;height:36px;object-fit:contain;border-radius:8px}
.dash-login-logo span{font-size:15px;font-weight:800;color:var(--d-text);letter-spacing:-.3px}
.dash-login-title{font-size:24px;font-weight:800;color:var(--d-text);letter-spacing:-.5px;margin-bottom:4px}
.dash-login-sub{font-size:13px;color:var(--d-text-3);margin-bottom:28px}
.dash-login-divider{display:flex;align-items:center;gap:12px;margin:20px 0}
.dash-login-divider::before,.dash-login-divider::after{content:'';flex:1;height:1px;background:var(--d-border)}
.dash-login-divider span{font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--d-text-3);white-space:nowrap}
.dash-login-footer{text-align:center;margin-top:24px;font-size:12px;color:var(--d-text-3)}
.dash-login-footer a{color:var(--d-green);text-decoration:none;font-weight:600}
.dash-login-footer a:hover{text-decoration:underline}
.dash-login-alert{border-radius:var(--d-radius-sm);padding:11px 14px;font-size:13px;margin-bottom:16px;display:none;align-items:center;gap:8px;line-height:1.4}
.dash-login-alert.visible{display:flex}
.dash-login-alert--error{background:var(--d-red-light);color:var(--d-red)}
.dash-login-alert--success{background:var(--d-green-light);color:var(--d-green-dark);border:1px solid rgba(48,107,71,.15)}
/* phone country picker */
.phone-input-wrap{display:flex;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);position:relative;transition:border-color var(--d-transition),box-shadow var(--d-transition)}
.phone-input-wrap:focus-within{border-color:var(--d-green);box-shadow:0 0 0 3px rgba(48,107,71,.1)}
.country-btn{display:flex;align-items:center;gap:5px;padding:0 10px;border:none;border-right:1px solid var(--d-border);background:var(--d-content-bg);cursor:pointer;border-radius:var(--d-radius-sm) 0 0 var(--d-radius-sm);white-space:nowrap;height:38px;flex-shrink:0;transition:background var(--d-transition)}
.country-btn:hover{background:var(--c-background-secondary)}
.country-btn__flag{font-size:18px;line-height:1}
.country-btn__code{font-size:13px;font-weight:700;color:var(--d-text)}
.country-btn__chevron{color:var(--d-text-3);flex-shrink:0}
.phone-local-input{flex:1;height:38px;padding:0 12px;border:none;background:transparent;font-size:13px;color:var(--d-text);outline:none;font-family:inherit;min-width:0;border-radius:0 var(--d-radius-sm) var(--d-radius-sm) 0}
.phone-local-input::placeholder{color:var(--d-text-3)}
.country-dropdown{position:absolute;top:calc(100% + 6px);left:0;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);box-shadow:var(--d-shadow-lg);width:280px;z-index:600;overflow:hidden;animation:fadeIn 120ms ease}
.country-search-wrap{padding:10px;border-bottom:1px solid var(--d-border)}
.country-search{width:100%;height:34px;padding:0 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);font-size:13px;outline:none;font-family:inherit;color:var(--d-text);background:var(--d-card-bg)}
.country-search:focus{border-color:var(--d-green)}
.country-list{max-height:220px;overflow-y:auto}
.country-item{display:flex;align-items:center;gap:10px;padding:9px 14px;font-size:13px;cursor:pointer;color:var(--d-text);transition:background var(--d-transition)}
.country-item:hover{background:var(--d-content-bg)}
.country-item.selected{background:var(--d-green-50);color:var(--d-green-dark)}
.country-item__flag{font-size:17px;line-height:1;flex-shrink:0}
.country-item__name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.country-item__code{color:var(--d-text-3);font-size:12px;flex-shrink:0}
/* password toggle */
.pwd-wrap{position:relative}
.pwd-wrap .form-input{padding-right:42px}
.pwd-toggle{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:4px;color:var(--d-text-3);display:flex;align-items:center;border-radius:4px;transition:color var(--d-transition)}
.pwd-toggle:hover{color:var(--d-text-2)}
/* social buttons */
.login-social-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.btn--social{height:42px;justify-content:center;font-size:13px;font-weight:600;border:1px solid var(--d-border);background:var(--c-surface);color:var(--d-text);gap:8px;box-shadow:var(--d-shadow-sm);transition:background var(--d-transition),box-shadow var(--d-transition),opacity var(--d-transition)}
.btn--social:hover:not(:disabled){background:var(--c-background-secondary);box-shadow:var(--d-shadow)}
.btn--social--apple{background:#000;color:#fff;border-color:#000}  /* raw-color-ok: Apple sign-in keeps its black/white brand pairing in every theme. */
.btn--social--apple:hover:not(:disabled){background:#242424}  /* raw-color-ok: Apple sign-in hover retains its white foreground. */
.btn--social--microsoft{background:var(--c-surface);border-color:var(--d-border)}
.btn--social--microsoft:hover:not(:disabled){background:var(--c-control-fill)}
.btn--phone-link{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:10px;padding:10px 16px;height:40px;font-size:13px;font-weight:600;color:var(--d-text-2);cursor:pointer;border-radius:var(--d-radius-sm);border:1px solid var(--d-border);background:none;width:100%;font-family:inherit;transition:background var(--d-transition),color var(--d-transition)}
.btn--phone-link:hover{background:var(--d-content-bg);color:var(--d-text)}
/* inline button spinner */
.btn-spin{width:14px;height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:var(--c-on-brand);border-radius:50%;animation:spin .65s linear infinite;flex-shrink:0}
.btn--ghost .btn-spin,.btn--social .btn-spin{border-color:rgba(0,0,0,.15);border-top-color:var(--d-text-2)}

/* ── Auth guard ── */
.dash-loading{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--d-sidebar-bg)}
.dash-loading__spinner{width:32px;height:32px;border:3px solid rgba(48,107,71,.3);border-top-color:var(--d-green);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── Responsive layout grids ── */
/* Two columns only while both stay above the readable measure. Below that they stack, rather
   than squeezing a form into a column too narrow to read — the reason a form has a measure at
   all. 380 is the narrowest a labelled field pair stays legible. */
.two-col-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:var(--space-xl);align-items:start}
.overview-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:var(--space-xl);align-items:start}

/* ── Billing / subscription banner ── */
.dash-banner{display:flex;align-items:center;gap:10px;padding:10px 24px;font-size:13px;font-weight:500;flex-shrink:0;border-bottom-width:1px;border-bottom-style:solid}
.dash-banner--error{background:var(--d-red-light);color:var(--c-danger);border-bottom-color:var(--c-danger-tint)}
.dash-banner--warn{background:var(--d-amber-light);color:var(--c-warning);border-bottom-color:var(--c-warning-tint)}
.dash-banner--info{background:var(--d-blue-light);color:var(--c-info);border-bottom-color:var(--c-info-tint)}
.dash-banner__link{margin-left:auto;font-size:12px;font-weight:600;color:inherit;text-decoration:underline;white-space:nowrap;flex-shrink:0}

/* ── Utilities ── */
.flex{display:flex}.items-center{align-items:center}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.ml-auto{margin-left:auto}.mt-2{margin-top:8px}.mt-4{margin-top:16px}.mb-4{margin-bottom:16px}.mb-6{margin-bottom:24px}.text-muted{color:var(--d-text-3)}.text-sm{font-size:12px}.font-bold{font-weight:700}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hidden{display:none!important}.w-full{width:100%}

/* ── Toggle switch ── */
/* THE SWITCH IS 24px TALL AND STILL LOOKS 22px. The label is what a tap lands on — the input inside
   is 0×0 — so the label carries the floor, and the slider insets 1px top and bottom to keep the pill
   exactly the size it was. The knob is positioned against the slider, so its geometry is unchanged. */
.toggle{position:relative;display:inline-flex;width:40px;height:24px;flex-shrink:0;cursor:pointer}
.toggle input{position:absolute;opacity:0;width:0;height:0}
.toggle__slider{position:absolute;inset:1px 0;background:var(--c-border);border-radius:22px;transition:background var(--d-transition)}
.toggle__slider::before{content:'';position:absolute;width:16px;height:16px;left:3px;top:3px;background:var(--c-surface);border-radius:50%;transition:transform var(--d-transition);border:1px solid var(--c-border)}
.toggle input:checked ~ .toggle__slider{background:var(--d-green)}
.toggle input:checked ~ .toggle__slider::before{transform:translateX(18px)}
.toggle input:focus-visible ~ .toggle__slider{outline:2px solid var(--d-green);outline-offset:2px}

/* ── Settings sections (team admin) ── */
.settings-section{margin-bottom:20px}
.settings-section:last-child{margin-bottom:0}
.settings-section__title{font-size:11px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--d-text-3);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--d-border-light)}
.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid var(--d-border-light)}
.toggle-row:last-child{border-bottom:none}
.toggle-row__label{font-size:13px;font-weight:600;color:var(--d-text);line-height:1.3}
.toggle-row__sub{font-size:11px;color:var(--d-text-3);margin-top:2px;line-height:1.4}

/* ── Audit log ── */
.audit-row{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-bottom:1px solid var(--d-border-light);flex-wrap:wrap}
.audit-row:last-child{border-bottom:none}
.audit-row__badge{font-size:11px;font-weight:700;padding:2px 8px;border-radius:10px;background:var(--d-green-light);color:var(--d-green-dark);white-space:nowrap;flex-shrink:0;margin-top:1px}
.audit-row__detail{font-size:13px;color:var(--d-text);flex:1;min-width:0}
.audit-row__meta{font-size:11px;color:var(--d-text-3);white-space:nowrap;flex-shrink:0;align-self:flex-end}

/* ── Permission template buttons ── */
.perm-tpl-btn{flex:1;min-width:120px;padding:12px 14px;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg);cursor:pointer;text-align:left;transition:border-color var(--d-transition),background var(--d-transition),box-shadow var(--d-transition);font-family:inherit}
.perm-tpl-btn:hover{border-color:var(--d-green);background:var(--d-green-50)}
.perm-tpl-btn.active{border-color:var(--d-green);background:var(--d-green-50);box-shadow:0 0 0 2px rgba(48,107,71,.15)}

/* ── Resources view ── */
.res-dropzone{min-height:140px;border:2px dashed var(--d-border);border-radius:10px;display:flex;align-items:center;justify-content:center;padding:24px;cursor:pointer;transition:border-color var(--d-transition),background var(--d-transition);background:var(--d-bg-2);text-align:center;position:relative}
.res-dropzone:hover,.res-dropzone:focus-visible{border-color:var(--d-green);background:var(--d-green-50);outline:none}
.res-dropzone--over{border-color:var(--d-green);background:var(--d-green-50);box-shadow:0 0 0 3px rgba(48,107,71,.12)}
.res-file-info{width:100%;padding:6px 0}
.res-file-info.hidden{display:none}
.res-progress-bar{width:100%;height:6px;background:var(--d-border);border-radius:6px;overflow:hidden}
.res-progress-fill{height:100%;background:var(--d-green);border-radius:6px;transition:width .2s ease}

/* ── Hamburger button (hidden on desktop) ── */
.dash-topbar__hamburger{display:none;width:36px;height:36px;border-radius:8px;border:none;background:transparent;cursor:pointer;align-items:center;justify-content:center;color:var(--d-text);flex-shrink:0;transition:background var(--d-transition);-webkit-tap-highlight-color:transparent}
.dash-topbar__hamburger:hover{background:var(--d-content-bg)}
.dash-sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:199;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);-webkit-tap-highlight-color:transparent}
.dash-sidebar-backdrop--visible{display:block;animation:fadeIn 200ms ease}

/* ── Mobile / tablet ── */
@media (max-width: 900px) {
  .overview-grid { grid-template-columns: 1fr; }
}

@media (max-width: 680px) {
  :root { --d-sidebar-width: 280px; }

  /* Slide-in drawer sidebar */


  .dash-topbar__hamburger{display:flex}

  .dash-main{width:100%;height:100vh;height:100dvh;overflow:hidden}
  .dash-content{overflow-y:auto;padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom,0px))}

  /* Banner wrap on small screens */
  .dash-banner{flex-wrap:wrap;padding:10px 16px;font-size:12px;gap:6px}
  .dash-banner__link{margin-left:0}

  /* ⚠️ Only selectors whose BASE rule sits ABOVE this block belong here — same specificity means
     source order decides, and a mobile override written before its base rule silently loses.
     .pricing-grid (base at ~line 680) lost exactly that way; its collapse now lives beside its
     base. .stat-grid needs no override at all: auto-fit minmax(170px,1fr) wraps on its own. */
  .view-header{flex-direction:column;gap:10px}
  .view-header__actions{width:100%}
  .filter-bar{flex-direction:column;align-items:stretch}
  .filter-bar__search{max-width:100%}
  .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .markets-grid{grid-template-columns:1fr}
  .two-col-grid{grid-template-columns:1fr}
  .overview-grid{grid-template-columns:1fr}

  /* Login / register pages */
  .dash-login-card{padding:28px 20px;max-width:100%;margin:0 8px}
  .dash-login-title{font-size:20px}
  .login-social-grid{grid-template-columns:1fr}
  .btn--signin{height:48px;font-size:16px}
  .btn--social{height:48px}
  .btn--phone-link{height:48px}
  .form-input,.form-select{height:44px;font-size:16px}
  .phone-local-input{height:44px;font-size:16px}
  .country-btn{height:44px}
  .country-dropdown{width:100%}
  .country-item{padding:12px 14px;min-height:44px}
  .country-list{max-height:50vh}
  .pwd-toggle{width:44px;height:44px;display:flex;align-items:center;justify-content:center;padding:0}

  /* Topbar */
  .dash-topbar{padding:0 12px;gap:10px}
  .dash-topbar__icon-btn{width:44px;height:44px}
  .dash-topbar__user-name,.dash-topbar__user-role{display:none}
  .dash-topbar__user{padding:4px}

  /* Modal */
  .modal-backdrop{padding:12px}
  .modal{max-width:100%;border-radius:var(--d-radius)}

  /* Toast */
  #toast-root{left:12px;right:12px;bottom:12px}
  .toast{min-width:0;max-width:100%}
}

@media (max-width: 400px) {
  .dash-login-card{padding:24px 16px;margin:0 4px}
  .dash-login-logo img{width:28px;height:28px}
  .dash-login-logo span{font-size:13px}
  .stat-grid{grid-template-columns:1fr}
  .stat-card__value{font-size:24px}
  .dash-content{padding:12px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}
  .view-title{font-size:18px}
  .stat-card{padding:16px}
  .stat-card__label{font-size:11px}
  .card__header{padding:12px 16px}
  .card__body{padding:16px}
}

/* ══════════════════════════════════════════════════════════════════════════════
   Billing / Paywall
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Sidebar upgrade CTA ── */
.sidebar-upgrade-cta {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0 12px 10px;
  padding: 9px 12px;
  border-radius: 8px;
  background: linear-gradient(135deg, rgba(48,107,71,.25), rgba(26,61,43,.3));
  border: 1px solid rgba(48,107,71,.4);
  color: var(--c-success);
  font-size: 12px;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition: background var(--d-transition), border-color var(--d-transition);
}
.sidebar-upgrade-cta:hover {
  background: linear-gradient(135deg, rgba(48,107,71,.4), rgba(26,61,43,.45));
  border-color: rgba(48,107,71,.7);
  color: var(--c-success-tint);
}

/* ── Plan hero ── */
.plan-hero {
  background: var(--d-card-bg);
  border: 1px solid var(--d-border);
  border-radius: var(--d-radius);
  padding: 24px;
  margin-bottom: 8px;
}
.plan-hero__top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 16px;
}
.plan-hero__label { font-size: 11px; font-weight: 600; color: var(--d-text-3); text-transform: uppercase; letter-spacing: .05em; margin-bottom: 4px; }
.plan-hero__name  { font-size: 22px; font-weight: 700; color: var(--d-text); }
.plan-hero__meta  { display: flex; flex-wrap: wrap; gap: 16px; font-size: 12px; color: var(--d-text-2); margin-top: 12px; }
.plan-hero__standing { font-size: 12px; color: var(--d-text-2); }
.plan-hero__standing[data-pending="1"] { color: var(--d-text-3); font-style: italic; }
.plan-hero__actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }

.plan-hero__seats { margin-top: 4px; }
.plan-hero__seats-label { display: flex; justify-content: space-between; font-size: 12px; color: var(--d-text-2); margin-bottom: 6px; }

/* ── Status pills ── */
.plan-status {
  display: inline-flex;
  align-items: center;
  padding: 4px 10px;
  border-radius: 20px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
  flex-shrink: 0;
}
.plan-status--active    { background: var(--d-green-light); color: var(--d-green-dark); }
.plan-status--trial     { background: rgba(99,102,241,.12); color: var(--c-accent-indigo); }
.plan-status--grace     { background: rgba(245,158,11,.12); color: var(--c-warning); }
.plan-status--billing   { background: rgba(239,68,68,.1);   color: var(--c-danger); }
.plan-status--expired   { background: rgba(239,68,68,.12);  color: var(--c-danger); }
.plan-status--cancelled { background: rgba(107,114,128,.12); color: var(--c-text-secondary); }
.plan-status--free      { background: var(--d-bg-2); color: var(--d-text-3); }

/* ── Billing alert banners (inside billing view) ── */
.billing-alert {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px;
  padding: 12px 16px;
  border-radius: 8px;
  font-size: 13px;
  margin-bottom: 16px;
  line-height: 1.5;
}
.billing-alert--error { background: rgba(239,68,68,.08); border: 1px solid rgba(239,68,68,.2); color: var(--d-text); }
.billing-alert--warn  { background: rgba(245,158,11,.08); border: 1px solid rgba(245,158,11,.2); color: var(--d-text); }
.billing-alert--info  { background: rgba(99,102,241,.07); border: 1px solid rgba(99,102,241,.2); color: var(--d-text); }
.billing-alert__link  { color: var(--d-green); font-weight: 600; text-decoration: none; margin-left: 4px; }
.billing-alert__link:hover { text-decoration: underline; }

/* ── Pricing grid ── */
.pricing-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin-bottom: 8px;
}
/* Beside its base rule on purpose: an override in the mobile block further up loses to the base
   by source order at equal specificity, which kept three plan cards side-by-side on phones. */
@media (max-width: 680px) {
  .pricing-grid { grid-template-columns: 1fr; }
}
.pricing-card {
  background: var(--d-card-bg);
  border: 1px solid var(--d-border);
  border-radius: var(--d-radius);
  padding: 24px 20px 20px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  position: relative;
}
.pricing-card--featured {
  border-color: var(--d-green);
  box-shadow: 0 0 0 1px var(--c-brand-primary);
}
.pricing-card--current {
  background: linear-gradient(135deg, var(--d-card-bg), rgba(48,107,71,.04));
}
.pricing-card__badge {
  position: absolute;
  top: -11px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--d-green);
  color: var(--c-on-brand);
  font-size: 11px;
  font-weight: 700;
  padding: 3px 12px;
  border-radius: 20px;
  white-space: nowrap;
  letter-spacing: .04em;
}
.pricing-card__name { font-size: 14px; font-weight: 700; color: var(--d-text); margin-top: 4px; }
.pricing-card__price { font-size: 22px; font-weight: 800; color: var(--d-text); margin: 8px 0 4px; line-height: 1; }
.pricing-card__period { font-size: 13px; font-weight: 400; color: var(--d-text-2); }
.pricing-card__features {
  list-style: none;
  padding: 0;
  margin: 12px 0 16px;
  display: flex;
  flex-direction: column;
  gap: 7px;
  flex: 1;
}
.pricing-card__features li { display: flex; align-items: flex-start; gap: 7px; font-size: 12.5px; color: var(--d-text-2); line-height: 1.4; }
.pricing-card__features li.pricing-card__feature--no { color: var(--d-text-3); }
.pricing-card__check { flex-shrink: 0; font-size: 12px; color: var(--d-green); font-weight: 700; width: 14px; }
.pricing-card__feature--no .pricing-card__check { color: var(--d-text-3); }
.pricing-card__cta { margin-top: auto; justify-content: center; }
.pricing-card__current-label { text-align: center; font-size: 12px; color: var(--d-text-3); margin-top: 12px; }

/* ── Upgrade modal internals ── */
.upgrade-modal__sub { font-size: 13px; color: var(--d-text-2); margin: 0 0 14px; line-height: 1.6; }
/* What the section actually does — the app's own gate copy, not "requires a higher plan". */
.upgrade-modal__bullets { margin: 0 0 14px; padding-left: 18px; }
.upgrade-modal__bullets li { font-size: 13px; color: var(--d-text-2); line-height: 1.55; margin-bottom: 4px; }
.upgrade-modal__protip { font-size: 13px; color: var(--d-text-2); background: var(--d-green-50); border-left: 3px solid var(--d-green); border-radius: 0 6px 6px 0; padding: 9px 12px; margin: 0 0 20px; line-height: 1.55; }
.upgrade-modal__protip strong { color: var(--d-green-dark); margin-right: 6px; }
.upgrade-plan-cards { display: flex; gap: 14px; margin-bottom: 20px; flex-wrap: wrap; }
.upgrade-plan-card  {
  flex: 1;
  min-width: 180px;
  background: var(--d-bg-2);
  border: 1px solid var(--d-border);
  border-radius: 10px;
  padding: 16px;
}
.upgrade-plan-card__icon  { font-size: 24px; margin-bottom: 8px; }
.upgrade-plan-card__name  { font-size: 13px; font-weight: 700; color: var(--d-text); margin-bottom: 4px; }
.upgrade-plan-card__price { font-size: 12px; color: var(--d-text-2); margin-bottom: 10px; }
.upgrade-plan-card__features { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 5px; }
.upgrade-plan-card__features li { font-size: 12px; color: var(--d-text-2); padding-left: 14px; position: relative; }
.upgrade-plan-card__features li::before { content: '✓'; position: absolute; left: 0; color: var(--d-green); font-weight: 700; }
.upgrade-modal__how { background: var(--d-bg-2); border-radius: 8px; padding: 14px 16px; }
.upgrade-modal__how-title { font-size: 12px; font-weight: 700; color: var(--d-text); margin-bottom: 8px; text-transform: uppercase; letter-spacing: .05em; }
.upgrade-modal__steps { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 5px; }
.upgrade-modal__steps li { font-size: 13px; color: var(--d-text-2); line-height: 1.5; }

/* ── How to upgrade steps (billing view) ── */
.upgrade-steps { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 8px; }
.upgrade-steps li { font-size: 13px; color: var(--d-text-2); line-height: 1.6; }

/* ── Feature gate inline blocker ── */
.feature-gate {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 32px 24px;
  text-align: center;
  border: 1px dashed var(--d-border);
  border-radius: var(--d-radius);
  background: var(--d-bg-2);
}
.feature-gate__icon  { font-size: 28px; }
.feature-gate__title { font-size: 14px; font-weight: 700; color: var(--d-text); }
.feature-gate__sub   { font-size: 12px; color: var(--d-text-2); max-width: 300px; line-height: 1.5; }

/* ══════════════════════════════════════════════════════════════════
   SCHEDULE — Gantt Timeline
   ══════════════════════════════════════════════════════════════════ */

/* Controls bar */
.sch-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.sch-controls__pickers{display:flex;gap:10px;flex-wrap:wrap}
.sch-controls__timeline{display:flex;align-items:center;gap:6px}
.sch-controls__range{font-size:13px;font-weight:600;color:var(--d-text);min-width:160px;text-align:center}

/* Card wrapper */
.sch-card{overflow:hidden;min-height:200px}

/* Gantt container */
.sch-gantt{position:relative}
.sch-gantt__empty{padding:40px 20px}

/* Header row */
.sch-gantt__header{display:flex;border-bottom:2px solid var(--d-border);background:var(--c-background-secondary)}
.sch-gantt__header-info{width:240px;min-width:240px;padding:10px 16px;font-size:11px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--d-text-3)}
.sch-gantt__header-timeline{flex:1;position:relative;height:36px;overflow:hidden}
.sch-gantt__week-header{position:absolute;top:0;height:100%;display:flex;align-items:center;padding-left:8px;font-size:11px;font-weight:600;color:var(--d-text-3);border-left:1px solid var(--d-border-light);box-sizing:border-box}

/* Body */
.sch-gantt__body{position:relative;min-height:80px}
.sch-gantt__grid{position:absolute;inset:0;pointer-events:none;z-index:0}
.sch-gantt__grid-line{position:absolute;top:0;bottom:0;width:1px;background:var(--d-border-light)}

/* Today marker */
.sch-gantt__today{position:absolute;top:0;bottom:0;width:2px;background:var(--d-red);z-index:2;opacity:.7}
.sch-gantt__today-label{position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-size:11px;font-weight:700;color:var(--d-red);white-space:nowrap;text-transform:uppercase;letter-spacing:.5px}

/* Phase rows */
.sch-gantt__row{display:flex;border-bottom:1px solid var(--d-border-light);transition:background var(--d-transition)}
.sch-gantt__row:hover{background:var(--d-green-50)}
.sch-gantt__row:last-child{border-bottom:none}

/* Row info panel (left side) */
.sch-gantt__row-info{width:240px;min-width:240px;padding:12px 16px;cursor:pointer;display:flex;flex-direction:column;justify-content:center;gap:3px;border-right:1px solid var(--d-border-light)}
.sch-gantt__row-info:hover{background:rgba(48,107,71,.04)}
.sch-phase__name-row{display:flex;align-items:center;gap:8px}
.sch-phase__status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.sch-phase__name{font-size:13px;font-weight:600;color:var(--d-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sch-phase__meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--d-text-3)}
.sch-phase__crew{color:var(--d-text-2);font-weight:500}

/* Row timeline (right side) */
.sch-gantt__row-timeline{flex:1;position:relative;min-height:48px;z-index:1}

/* Bars */
.sch-gantt__bar{position:absolute;top:8px;bottom:8px;border-radius:6px;cursor:pointer;display:flex;align-items:center;padding:0 10px;transition:opacity var(--d-transition),box-shadow var(--d-transition);min-width:4px;z-index:3}
.sch-gantt__bar:hover{opacity:.85}
.sch-gantt__bar--dragging{opacity:.7;z-index:10}
.sch-gantt__bar-label{color:var(--c-on-brand);font-size:11px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.3);pointer-events:none}

/* Drag handles */
.sch-gantt__bar-handle{position:absolute;top:0;bottom:0;width:8px;cursor:col-resize;z-index:4}
.sch-gantt__bar-handle::after{content:'';position:absolute;top:50%;transform:translateY(-50%);width:3px;height:16px;border-radius:2px;background:rgba(255,255,255,.5);transition:background 150ms}
.sch-gantt__bar-handle:hover::after{background:rgba(255,255,255,.9)}
.sch-gantt__bar-handle--left{left:0;border-radius:6px 0 0 6px}
.sch-gantt__bar-handle--left::after{left:2px}
.sch-gantt__bar-handle--right{right:0;border-radius:0 6px 6px 0}
.sch-gantt__bar-handle--right::after{right:2px}

/* Legend */
.sch-legend{display:flex;align-items:center;gap:16px;margin-top:16px;flex-wrap:wrap}
.sch-legend__item{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--d-text-3);font-weight:500}
.sch-legend__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.sch-legend__diamond{font-size:11px;color:var(--d-amber);margin-right:2px}

/* Milestone markers on Gantt */
.sch-gantt__milestone{position:absolute;top:0;bottom:0;z-index:5;cursor:pointer;display:flex;align-items:center;justify-content:center;width:20px;margin-left:-10px}
.sch-gantt__milestone-diamond{font-size:16px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.2));transition:transform 150ms}
.sch-gantt__milestone:hover .sch-gantt__milestone-diamond{transform:scale(1.3)}
.sch-gantt__ms-icon{font-size:12px;flex-shrink:0}
.sch-gantt__row--milestone{background:rgba(245,158,11,.03)}
.sch-gantt__row--milestone .sch-gantt__row-info{cursor:pointer}

/* Tabs */

/* Tab controls wrapper */
#sch-tab-controls{margin-bottom:16px}

/* ── Calendar View ── */
.sch-cal{border-top:1px solid var(--d-border)}
.sch-cal__header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--d-border)}
.sch-cal__dow{padding:10px 4px;text-align:center;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--d-text-3);background:var(--c-background-secondary)}
.sch-cal__grid{display:grid;grid-template-columns:repeat(7,1fr)}
.sch-cal__cell{min-height:90px;border-right:1px solid var(--d-border-light);border-bottom:1px solid var(--d-border-light);padding:4px;position:relative;overflow:hidden}
.sch-cal__cell:nth-child(7n){border-right:none}
.sch-cal__cell--empty{background:var(--c-background-secondary)}
.sch-cal__cell--today{background:rgba(48,107,71,.04)}
.sch-cal__cell--today .sch-cal__day{background:var(--d-green);color:var(--c-on-brand);border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center}
.sch-cal__day{font-size:12px;font-weight:600;color:var(--d-text);margin-bottom:3px;width:24px;height:24px;display:flex;align-items:center;justify-content:center}
.sch-cal__items{display:flex;flex-direction:column;gap:2px}
.sch-cal__phase{font-size:11px;font-weight:600;color:var(--c-on-brand);padding:2px 5px;border-radius:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:opacity 150ms}
.sch-cal__phase:hover{opacity:.8}
.sch-cal__milestone{font-size:11px;font-weight:600;padding:1px 4px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity 150ms}
.sch-cal__milestone:hover{opacity:.7}

/* ── Crew View ── */
.sch-crew__pills{display:flex;flex-wrap:wrap;gap:4px}
.sch-crew__pill{display:inline-block;font-size:11px;font-weight:600;color:var(--c-on-brand);padding:2px 8px;border-radius:10px;white-space:nowrap;max-width:140px;overflow:hidden;text-overflow:ellipsis}
.sch-crew__row--conflict{background:rgba(239,68,68,.04)}
.sch-crew__conflict-badge{font-size:11px;font-weight:700;color:var(--d-red);background:var(--d-red-light);padding:2px 8px;border-radius:10px;white-space:nowrap}

/* ── Overview Schedule Card ── */
.sch-overview-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.sch-overview-stat{text-align:center;padding:12px 8px;background:var(--d-content-bg);border-radius:var(--d-radius-sm)}
.sch-overview-stat__value{font-size:28px;font-weight:800;letter-spacing:-1px;line-height:1}
.sch-overview-stat__label{font-size:11px;font-weight:600;color:var(--d-text-3);margin-top:4px;text-transform:uppercase;letter-spacing:.3px}

/* Phase modal form */
.sch-modal__form .form-group:last-child{margin-bottom:0}
.sch-modal__row{display:flex;gap:14px}
.sch-modal__swatches{display:flex;gap:6px;flex-wrap:wrap;padding-top:2px}
.sch-modal__swatch{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:border-color 150ms,transform 150ms;flex-shrink:0}
.sch-modal__swatch:hover{transform:scale(1.15)}
.sch-modal__swatch--active{border-color:var(--d-text);box-shadow:0 0 0 2px var(--d-card-bg)}
.sch-modal__members{display:flex;flex-direction:column;gap:6px;max-height:160px;overflow-y:auto;padding:8px 0}
.sch-modal__member{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--d-text);cursor:pointer}
.sch-modal__member input[type="checkbox"]{accent-color:var(--d-green)}

/* Progress bar inside Gantt bars */
.sch-gantt__bar-progress{position:absolute;left:0;top:0;bottom:0;background:rgba(255,255,255,.22);border-radius:6px 0 0 6px;pointer-events:none;transition:width 300ms ease}

/* Dependency arrow SVG */
.sch-gantt__dep-svg{position:absolute;inset:0;pointer-events:none;z-index:2;overflow:visible}
.sch-dep-arrow{fill:none;stroke:var(--d-text-3);stroke-width:1.5;stroke-dasharray:4 3;opacity:.55}
.sch-dep-arrowhead{fill:var(--d-text-3);opacity:.55}

/* Template modal */
.sch-tpl__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-bottom:16px}
.sch-tpl__card{border:1px solid var(--d-border);border-radius:var(--d-radius);padding:16px;cursor:pointer;transition:border-color var(--d-transition),box-shadow var(--d-transition);background:var(--d-card-bg)}
.sch-tpl__card:hover{border-color:var(--d-green);box-shadow:var(--d-shadow)}
.sch-tpl__card--selected{border-color:var(--d-green);box-shadow:0 0 0 2px rgba(48,107,71,.2);background:var(--d-green-50)}
.sch-tpl__icon{font-size:28px;margin-bottom:8px}
.sch-tpl__name{font-size:14px;font-weight:700;color:var(--d-text);margin-bottom:4px}
.sch-tpl__meta{font-size:12px;color:var(--d-text-3)}
.sch-tpl__phases{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.sch-tpl__phase-tag{font-size:11px;font-weight:600;color:var(--c-on-brand);padding:2px 6px;border-radius:3px}
.sch-tpl__start-row{display:flex;align-items:center;gap:12px;padding-top:4px}
.sch-tpl__start-row label{font-size:13px;font-weight:600;color:var(--d-text)}

/* Progress slider in phase modal */
.sch-modal__progress{display:flex;align-items:center;gap:12px}
.sch-modal__progress input[type="range"]{flex:1;accent-color:var(--d-green);height:6px}
.sch-modal__progress-val{font-size:14px;font-weight:700;color:var(--d-green);min-width:40px;text-align:right}

/* Dependency picker in phase modal */
.sch-modal__deps{display:flex;flex-direction:column;gap:6px;max-height:140px;overflow-y:auto;padding:4px 0}
.sch-modal__dep-item{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--d-text);cursor:pointer}
.sch-modal__dep-item input[type="checkbox"]{accent-color:var(--d-blue)}
.sch-modal__dep-swatch{width:10px;height:10px;border-radius:50%;flex-shrink:0}

/* ── Filter bar ── */
.sch-filter{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.sch-filter__search{position:relative;display:flex;align-items:center}
.sch-filter__search svg{position:absolute;left:10px;color:var(--d-text-3);pointer-events:none}
.sch-filter__input{padding:7px 10px 7px 32px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);font-size:13px;font-family:inherit;background:var(--d-card-bg);color:var(--d-text);width:200px;transition:border-color var(--d-transition)}
.sch-filter__input:focus{outline:none;border-color:var(--d-green)}
.sch-filter__input::placeholder{color:var(--d-text-3)}
.sch-filter__select{width:auto;min-width:130px}

/* ── Critical path ── */
.sch-gantt__bar--critical{box-shadow:0 0 0 2px rgba(239,68,68,.5),0 2px 8px rgba(239,68,68,.2) !important}
.sch-gantt__row--critical{background:rgba(239,68,68,.03)}
.sch-gantt__row--critical:hover{background:rgba(239,68,68,.06)}
.sch-crit-badge{font-size:11px;font-weight:800;color:var(--d-red);background:var(--d-red-light);padding:1px 5px;border-radius:3px;margin-left:6px;letter-spacing:.3px;flex-shrink:0}

/* ── Bulk selection ── */
.sch-gantt__row-check{width:36px;min-width:36px;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--d-border-light)}
.sch-gantt__row-check input[type="checkbox"]{accent-color:var(--d-green);width:15px;height:15px;cursor:pointer}
.sch-gantt__header .sch-gantt__row-check{background:var(--c-background-secondary)}
.sch-bulk-bar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--d-green-50);border-bottom:2px solid var(--d-green);flex-wrap:wrap}
.sch-bulk-bar__check-all{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--d-text);cursor:pointer}
.sch-bulk-bar__check-all input[type="checkbox"]{accent-color:var(--d-green)}
.sch-bulk-bar__count{font-size:12px;font-weight:700;color:var(--d-green);min-width:70px}

/* ── Schedule Stats Bar ── */
.sch-stats{display:flex;align-items:center;gap:0;margin-bottom:12px;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);padding:0;overflow:hidden}
.sch-stats__item{flex:1;display:flex;flex-direction:column;align-items:center;padding:10px 12px;gap:2px}
.sch-stats__val{font-size:18px;font-weight:800;color:var(--d-text);letter-spacing:-.5px;line-height:1}
.sch-stats__label{font-size:11px;font-weight:600;color:var(--d-text-3);text-transform:uppercase;letter-spacing:.3px}
.sch-stats__sep{width:1px;height:32px;background:var(--d-border-light);flex-shrink:0}

/* ── Day-level Gantt headers ── */
.sch-gantt__day-header{position:absolute;top:0;height:100%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--d-text-3);border-left:1px solid var(--d-border-light);box-sizing:border-box}
.sch-gantt__day-header--weekend{background:rgba(0,0,0,.02);color:var(--d-text-3);opacity:.6}

/* ── Context Menu ── */
.sch-ctx{position:fixed;z-index:1000;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);box-shadow:var(--d-shadow-lg);min-width:180px;padding:4px 0;font-size:13px}
.sch-ctx__item{padding:8px 14px;cursor:pointer;display:flex;align-items:center;gap:8px;color:var(--d-text);transition:background var(--d-transition)}
.sch-ctx__item:hover{background:var(--d-green-50)}
.sch-ctx__item--sub{padding-left:24px;font-size:12px}
.sch-ctx__item--danger{color:var(--d-red)}
.sch-ctx__item--danger:hover{background:var(--d-red-light)}
.sch-ctx__divider{height:1px;background:var(--d-border-light);margin:4px 0}
.sch-ctx__label{padding:6px 14px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--d-text-3)}
.sch-ctx__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}

/* ── Workload Heatmap ── */
.sch-heat__table{width:100%;border-collapse:collapse;font-size:12px}
.sch-heat__th{padding:6px 8px;font-size:11px;font-weight:700;color:var(--d-text-3);text-transform:uppercase;letter-spacing:.3px;text-align:center;white-space:nowrap;border-bottom:1px solid var(--d-border)}
.sch-heat__name{padding:6px 10px;font-weight:600;color:var(--d-text);white-space:nowrap;border-bottom:1px solid var(--d-border-light)}
.sch-heat__cell{padding:6px 8px;text-align:center;font-weight:700;font-size:11px;border-bottom:1px solid var(--d-border-light);color:var(--d-text-3);transition:background 150ms}
.sch-heat__cell--low{background:rgba(48,107,71,.1);color:var(--d-green)}
.sch-heat__cell--med{background:rgba(245,158,11,.15);color:var(--d-amber)}
.sch-heat__cell--high{background:rgba(239,68,68,.12);color:var(--d-red)}
.sch-heat__legend{display:flex;align-items:center;gap:14px;margin-top:8px;padding-left:2px}
.sch-heat__legend-item{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--d-text-3);font-weight:500}
.sch-heat__legend-box{width:14px;height:14px;border-radius:3px;display:inline-block}

/* ── Weekend shading ── */
.sch-gantt__weekend{position:absolute;top:0;bottom:0;background:rgba(0,0,0,.025);z-index:0;pointer-events:none}

/* ── Group headers ── */
.sch-gantt__group-header{display:flex;align-items:center;gap:8px;padding:8px 16px;background:var(--c-background-secondary);border-bottom:1px solid var(--d-border);cursor:pointer;user-select:none;transition:background var(--d-transition)}
.sch-gantt__group-header:hover{background:var(--c-background-secondary)}
.sch-gantt__group-toggle{font-size:12px;color:var(--d-text-3);width:14px;text-align:center;flex-shrink:0}
.sch-gantt__group-label{font-size:12px;font-weight:700;color:var(--d-text);text-transform:uppercase;letter-spacing:.3px}
.sch-gantt__group-count{font-size:11px;font-weight:700;color:var(--d-text-3);background:var(--d-border-light);padding:1px 7px;border-radius:10px;margin-left:2px}

/* ── Drag-to-reorder ── */
.sch-gantt__row[draggable="true"]{cursor:grab}
.sch-gantt__row[draggable="true"]:active{cursor:grabbing}
.sch-gantt__row--dragging-row{opacity:.4;background:var(--d-green-50)}
.sch-gantt__row--drop-above{box-shadow:inset 0 2px 0 0 var(--d-green)}
.sch-gantt__row--drop-below{box-shadow:inset 0 -2px 0 0 var(--d-green)}

/* ── Inline rename ── */
.sch-inline-rename{font-size:13px;font-weight:600;color:var(--d-text);border:1px solid var(--d-green);border-radius:3px;padding:1px 4px;font-family:inherit;outline:none;background:var(--d-card-bg);width:140px;box-shadow:0 0 0 2px rgba(48,107,71,.15)}

/* ── Rich tooltip ── */
.sch-tooltip{position:fixed;z-index:1001;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);box-shadow:var(--d-shadow-lg);padding:12px 14px;font-size:12px;max-width:300px;pointer-events:none}
.sch-tip__header{display:flex;align-items:center;gap:6px;margin-bottom:8px;font-size:13px}
.sch-tip__row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:3px 0;border-bottom:1px solid var(--d-border-light);font-size:12px;color:var(--d-text)}
.sch-tip__row:last-child{border-bottom:none}
.sch-tip__label{font-weight:600;color:var(--d-text-3);white-space:nowrap;min-width:70px}
.sch-tip__prog-bar{display:inline-block;width:60px;height:6px;background:var(--d-border-light);border-radius:3px;vertical-align:middle;overflow:hidden;margin-right:4px}
.sch-tip__prog-fill{display:block;height:100%;background:var(--d-green);border-radius:3px;transition:width 300ms}
.sch-tip__notes{margin-top:6px;padding-top:6px;border-top:1px solid var(--d-border-light);font-size:11px;color:var(--d-text-2);line-height:1.4;max-height:60px;overflow:hidden;text-overflow:ellipsis}

/* ── Tab notification badges ── */
.sch-tabs__badge--amber{background:var(--d-amber)}

/* ── Phase meta labels ── */
.sch-phase__cost{font-size:11px;font-weight:600;color:var(--d-blue);background:rgba(59,130,246,.08);padding:1px 5px;border-radius:3px;white-space:nowrap}
.sch-phase__proj{font-size:11px;font-weight:600;color:var(--d-text-2);background:var(--d-border-light);padding:1px 5px;border-radius:3px;white-space:nowrap;max-width:100px;overflow:hidden;text-overflow:ellipsis}

/* ── Mini-map ── */
.sch-minimap{margin-top:8px;margin-bottom:4px}
.sch-mm__track{position:relative;height:24px;background:var(--d-content-bg);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);overflow:hidden}
.sch-mm__bar{position:absolute;top:4px;height:6px;border-radius:3px;min-width:2px;opacity:.7}
.sch-mm__viewport{position:absolute;top:0;bottom:0;background:rgba(48,107,71,.1);border:1.5px solid var(--d-green);border-radius:3px;cursor:grab;z-index:2;transition:none}
.sch-mm__viewport:active{cursor:grabbing;background:rgba(48,107,71,.18)}
.sch-mm__today{position:absolute;top:0;bottom:0;width:1.5px;background:var(--d-red);z-index:1;opacity:.6}

/* ── Print styles ── */
@media print{
  body.sch-printing .rail,
  body.sch-printing .dash-topbar,
  body.sch-printing .sch-controls__pickers,
  body.sch-printing .sch-filter,
  body.sch-printing .sch-tabs,
  body.sch-printing #sch-tab-controls,
  body.sch-printing .view-header__actions,
  body.sch-printing .sch-legend,
  body.sch-printing .sch-bulk-bar,
  body.sch-printing .sch-gantt__row-check,
  body.sch-printing .sch-gantt__bar-handle,
  body.sch-printing .sch-tooltip,
  body.sch-printing .sch-ctx,
  body.sch-printing .sch-minimap,
  body.sch-printing .sch-stats{display:none !important}
  body.sch-printing .sch-gantt__weekend{print-color-adjust:exact;-webkit-print-color-adjust:exact}
  body.sch-printing .dash-main{margin:0;height:auto;overflow:visible}
  body.sch-printing .dash-content{padding:0;overflow:visible}
  body.sch-printing .sch-card{border:none;box-shadow:none}
  body.sch-printing .sch-gantt__row-info{width:180px;min-width:180px}
  body.sch-printing .sch-gantt__bar{print-color-adjust:exact;-webkit-print-color-adjust:exact}
  body.sch-printing .sch-gantt__bar-progress{print-color-adjust:exact;-webkit-print-color-adjust:exact}
  body.sch-printing .sch-phase__status-dot{print-color-adjust:exact;-webkit-print-color-adjust:exact}
  body.sch-printing .view-title::after{content:' — Schedule';font-weight:400;color:var(--d-text-2)}
}

/* Schedule responsive */
@media(max-width:680px){
  .sch-controls{flex-direction:column;align-items:stretch}
  .sch-controls__pickers{flex-direction:column}
  .sch-controls__pickers select{width:100%}
  .sch-controls__timeline{justify-content:center;flex-wrap:wrap}
  .sch-gantt__header-info,.sch-gantt__row-info{width:140px;min-width:140px}
  .sch-phase__name{font-size:12px}
  .sch-phase__meta{font-size:11px}
  .sch-modal__row{flex-direction:column;gap:0}
      .sch-cal__cell{min-height:60px}
  .sch-cal__phase,.sch-cal__milestone{font-size:11px}
  .sch-overview-grid{grid-template-columns:repeat(2,1fr)}
  .sch-crew__pill{max-width:100px}
  .sch-filter{flex-direction:column;align-items:stretch}
  .sch-filter__input{width:100%}
  .sch-filter__select{width:100%}
  .sch-gantt__row-check{width:28px;min-width:28px}
  .sch-bulk-bar{flex-direction:column;align-items:flex-start;gap:8px}
  .sch-gantt__group-header{padding:6px 12px;font-size:11px}
  .sch-inline-rename{width:100px;font-size:12px}
  .sch-stats{flex-wrap:wrap}
  .sch-stats__item{min-width:60px}
  .sch-minimap{margin-top:6px}
  .sch-phase__proj{max-width:70px}
  }

/* ── Locked section ───────────────────────────────────────────────────────────
   The plan gate, rendered where the section would have been. Mirrors the app's
   lockedSectionView: the destination explains itself instead of bouncing you away. */
.locked-section{max-width:520px;margin:56px auto;text-align:center;padding:0 20px}
.locked-section__badge{width:64px;height:64px;border-radius:50%;background:var(--d-green-light);color:var(--d-green);display:inline-flex;align-items:center;justify-content:center;margin-bottom:18px}
.locked-section__title{font-size:22px;font-weight:800;letter-spacing:-.4px;color:var(--d-text);margin:0 0 10px}
.locked-section__desc{font-size:14px;color:var(--d-text-2);line-height:1.6;margin:0 0 18px}
.locked-section__bullets{text-align:left;display:inline-block;margin:0 0 18px;padding-left:20px}
.locked-section__bullets li{font-size:13.5px;color:var(--d-text-2);line-height:1.6;margin-bottom:5px}
.locked-section__protip{text-align:left;font-size:13px;color:var(--d-text-2);background:var(--d-green-50);border-left:3px solid var(--d-green);border-radius:0 6px 6px 0;padding:10px 13px;margin:0 0 22px;line-height:1.55}
.locked-section__protip strong{color:var(--d-green-dark);margin-right:6px}
.locked-section__cta{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.locked-section__foot{font-size:12px;color:var(--d-text-3);margin:16px 0 0}

/* A number is identity, not a form field — shown, never typed. */
.form-static{font-size:13.5px;font-weight:600;color:var(--d-text);padding:9px 0;min-height:38px;display:flex;align-items:center}
.form-hint{font-size:11.5px;color:var(--d-text-3);margin-top:-4px}

/* ── The rail ─────────────────────────────────────────────────────────────────
   AppRail: a 196px light column, hairline-separated from the content, with CORE
   always open and labelled groups that collapse. Rows are rows — a selected row
   is marked by a brand rule and weight, not by a floating pill. */
.rail{width:var(--size-rail);min-width:var(--size-rail);background:var(--c-card-background);border-right:1px solid var(--c-card-border);display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden;z-index:50}
.rail__brand{display:flex;align-items:center;gap:8px;padding:14px 12px;color:var(--c-text-primary);font-size:var(--text-footnote);font-weight:700;letter-spacing:-.2px;text-decoration:none;border-bottom:1px solid var(--c-card-border)}
.rail__brand img{width:24px;height:24px;object-fit:contain;border-radius:var(--radius-sm)}
.rail__brand span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.rail__market{padding:8px;border-bottom:1px solid var(--c-card-border)}
.rail__market select{width:100%;appearance:none;-webkit-appearance:none;background:var(--c-brand-tint) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11' fill='none' stroke='%23316B47' stroke-width='2.5' viewBox='0 0 24 24'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 7px center;border:1px solid var(--c-card-border);color:var(--c-brand-pressed);border-radius:var(--radius-row);padding:5px 22px 5px 8px;font-size:12.5px;font-weight:600;cursor:pointer;outline:none;font-family:inherit}

.rail__scroll{flex:1;overflow-y:auto;overflow-x:hidden;padding:6px 0 12px}
.rail__group{padding:0 8px}
.rail__group--core{padding-bottom:6px;margin-bottom:2px;border-bottom:1px solid var(--c-card-border)}

.rail__header{display:flex;align-items:center;gap:5px;width:100%;padding:9px 6px 5px;background:none;border:none;cursor:pointer;font-family:inherit;font-size:var(--text-caption2);font-weight:700;letter-spacing:.07em;color:var(--c-text-tertiary);text-align:left}
.rail__header:hover{color:var(--c-text-secondary)}
.rail__chevron{flex-shrink:0;transition:transform var(--motion-fast);transform:rotate(0deg)}
.rail__chevron--open{transform:rotate(90deg)}
/* Declutter must never hide a signal. */
.rail__signal{width:6px;height:6px;border-radius:50%;background:var(--c-warning);margin-left:auto;flex-shrink:0}

.rail__item{display:flex;align-items:center;gap:9px;width:100%;padding:7px 8px;border:none;background:none;border-radius:var(--radius-row);color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-footnote);font-weight:500;cursor:pointer;text-align:left;user-select:none;transition:background var(--motion-fast),color var(--motion-fast);position:relative}
.rail__item:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.rail__item--active{background:var(--c-brand-tint);color:var(--c-brand-primary);font-weight:600}
.rail__item--active::before{content:'';position:absolute;left:0;top:6px;bottom:6px;width:2px;border-radius:1px;background:var(--c-brand-primary)}
.rail__icon{display:flex;width:var(--size-icon-sm);height:var(--size-icon-sm);flex-shrink:0}
.rail__icon svg{width:100%;height:100%}
.rail__label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Two channels, and only one of them is allowed to shout (`AppRailRow`: icon · label · count ·
   attention dot). The COUNT says how many things exist and is therefore grey, unpilled and quiet —
   nav doubling as a status board, which is what the app's rail has always done. The DOT is the
   alarm. Zero hides either, because zero is healthy.
   A red pill for a number that merely EXISTS is the badge law's exact failure mode, and it was on
   this rail: an inbox with five things in it wore the same mark as an emergency. */
.rail__count{flex-shrink:0;font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.rail__item--active .rail__count{color:var(--c-brand-primary)}
.rail__alert{flex-shrink:0;width:6px;height:6px;border-radius:50%;background:var(--c-warning)}

/* The native rail pins Knowledge Base and Settings below the scrolling destinations. */
.rail__utilities{flex-shrink:0;border-top:1px solid var(--c-card-border);padding:6px 8px}
.rail__item--utility-tall{min-height:44px}

/* AppRailFooter — the identity cluster and the two verbs that belong to you rather than to the
   work. It sits at the bottom of the rail, not beside the page title. */
.rail__foot{position:relative;border-top:1px solid var(--c-card-border);padding:var(--space-sm)}
.rail__identity{display:flex;align-items:center;gap:var(--space-sm);width:100%;min-height:44px;padding:var(--space-xs) var(--space-sm);border:none;background:none;border-radius:var(--radius-row);cursor:pointer;font-family:inherit;text-align:left;color:var(--c-text-tertiary);transition:background var(--motion-fast)}
.rail__identity:hover{background:var(--c-field-fill)}
.rail__monogram{width:26px;height:26px;flex-shrink:0;border-radius:50%;background:var(--c-brand-tint);color:var(--c-brand-pressed);display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:700}
.rail__identity-text{flex:1;min-width:0}
.rail__identity-name{display:block;font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rail__identity-sub{display:block;font-size:var(--text-caption2);color:var(--c-text-secondary)}

.rail__menu{position:absolute;left:var(--space-sm);right:var(--space-sm);bottom:calc(100% - var(--space-xs));background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-card);padding:var(--space-xs);z-index:120}
.rail__menu-head{padding:var(--space-sm);border-bottom:1px solid var(--c-separator);margin-bottom:var(--space-xs)}
.rail__menu-name{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rail__menu-email{font-size:var(--text-caption2);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
.rail__menu-chips{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;margin-top:var(--space-xs)}
.rail__chip{font-size:10.5px;font-weight:700;color:var(--c-brand-primary);background:var(--c-brand-tint);border-radius:var(--radius-pill);padding:1px var(--space-sm)}
.rail__menu-plan,.rail__menu-seats{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.rail__menu-item{display:block;width:100%;text-align:left;padding:var(--space-sm);border:none;background:none;border-radius:var(--radius-row);font-family:inherit;font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary);cursor:pointer}
.rail__menu-item:hover{background:var(--c-field-fill)}
.rail__menu-item--danger{color:var(--c-danger)}
.rail__menu-item--danger:hover{background:var(--c-danger-tint)}

@media (max-width: 680px) {
  .rail{position:fixed;left:0;top:0;transform:translateX(-100%);transition:transform 250ms cubic-bezier(.4,0,.2,1);z-index:200}
  .rail--open{transform:translateX(0)}
  .rail__item{padding:10px 8px}
}

/* ── Owner console rail (OWNER_RAIL_LOOP R1/R3) ──────────────────────────────
   Rendered into the same .rail element, so widths, item styles and the drawer are inherited.
   The scope band sits where the CRM rail's market picker would: this surface has no market
   scope, and the operator must never mistake which world they are typing into. */
.admin-rail__scope{display:flex;align-items:center;gap:6px;margin:8px;padding:5px 10px;background:var(--c-warning-tint);border-radius:var(--radius-row);font-size:10.5px;font-weight:700;letter-spacing:.05em;color:var(--c-warning)}
.admin-rail__scope i{width:6px;height:6px;border-radius:50%;background:var(--c-warning);flex-shrink:0}
.admin-rail__back{color:var(--c-brand-primary);font-weight:600;margin-top:2px}
.admin-console{min-width:0}
.admin-monetization{min-width:0}
.billing-control-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:8px}
.billing-operation-row{grid-template-columns:repeat(auto-fit,minmax(min(100%,140px),1fr))!important}
@media(max-width:560px){
  .billing-control-grid{grid-template-columns:minmax(0,1fr)}
  .billing-operation-row{grid-template-columns:minmax(0,1fr) auto!important}
  .billing-operation-row>span:last-child{grid-column:1/-1}
  .billing-review-row{grid-template-columns:minmax(0,1fr)!important}
}
.admin-dest-panel{min-height:160px}
/* ⌘K — the operator command bar (R7). One overlay, three kinds of row, no shadows — the flat
   surface separates by hairline here like everywhere else. */
.admin-cmdk{position:fixed;inset:0;background:rgba(23,33,27,.32);display:flex;justify-content:center;align-items:flex-start;padding-top:9vh;z-index:300}
.admin-cmdk__panel{width:540px;max-width:92vw;background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:var(--d-radius);overflow:hidden}
.admin-cmdk__input{width:100%;border:none;outline:none;font:inherit;font-size:14px;padding:13px 18px;border-bottom:1px solid var(--d-border);background:var(--d-card-bg);color:var(--d-text)}
.admin-cmdk__list{max-height:320px;overflow-y:auto}
.admin-cmdk__hit{display:flex;align-items:center;gap:10px;width:100%;padding:10px 18px;border:none;background:none;cursor:pointer;font:inherit;font-size:12.5px;text-align:left;color:var(--d-text)}
.admin-cmdk__hit:hover,.admin-cmdk__hit.is-selected{background:var(--c-field-fill)}
.admin-cmdk__kind{font-size:9.5px;font-weight:700;letter-spacing:.06em;color:var(--d-text-3);width:52px;text-transform:uppercase;flex-shrink:0}
.admin-cmdk__label{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.admin-cmdk__sub{color:var(--d-text-3);margin-left:auto;white-space:nowrap;font-size:11px}
.admin-cmdk__none{padding:14px 18px;font-size:12.5px;color:var(--d-text-3)}
.admin-cmdk__foot{padding:7px 18px;border-top:1px solid var(--d-border-light);font-size:10.5px;color:var(--d-text-3)}
.admin-dest-head{padding:2px 0 14px}
.admin-dest-head__label{font-size:19px;font-weight:800;letter-spacing:-.3px;color:var(--d-text)}
.admin-dest-head__sub{font-size:12.5px;color:var(--d-text-2);margin-top:2px}

/* ── Segment tabs ─────────────────────────────────────────────────────────────
   FlatSegmentTabs — THE one flat switcher. The app retired the filled picker
   entirely: every segment control, lens switcher and form option selector is
   underline tabs on the page surface. Active is ink text plus a 2px brand rule;
   a hairline closes the band.

   Two kinds of number ride after a label, and they mean different things:
     .seg__count — a plain magnitude, quiet, brand-tinted when active.
     .seg__badge — something that wants attention. Orange, on a tint.
   Zero is not shown either way. */
.seg{display:flex;align-items:stretch;gap:var(--space-xl);position:relative;margin-bottom:var(--space-xl);overflow-x:auto;scrollbar-width:none}
.seg::-webkit-scrollbar{display:none}
.seg::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--c-separator)}
/* `min-width` and not horizontal padding: the tabs are separated by their gap and adding
   padding would move every one of them. This moves only the tabs that were already under the
   floor — a one-word lens like "All" was 20px wide and failed the harness's own tap check,
   which measures BOTH dimensions and prints the height, so it read as `seg__tab@38px`. */
.seg__tab{display:inline-flex;align-items:center;justify-content:center;min-width:24px;gap:var(--space-xs-sm);padding:var(--space-sm-md) 0;border:none;background:none;cursor:pointer;font-family:inherit;font-size:var(--text-subhead);font-weight:600;color:var(--c-text-secondary);white-space:nowrap;user-select:none;position:relative;transition:color var(--motion-base)}
.seg__tab::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:transparent;transition:background var(--motion-base);z-index:1}
.seg__tab:hover{color:var(--c-text-primary)}
.seg__tab--active{color:var(--c-text-primary)}
.seg__tab--active::after{background:var(--c-brand-primary)}
.seg__tab svg{width:var(--size-icon-sm);height:var(--size-icon-sm);flex-shrink:0}
.seg__count{font-size:var(--text-caption2);font-weight:600;font-variant-numeric:tabular-nums;color:var(--c-text-secondary);opacity:.7}
.seg__tab--active .seg__count{color:var(--c-brand-primary);opacity:1}
.seg__badge{font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;padding:2px var(--space-xs-sm);border-radius:var(--radius-pill);background:color-mix(in srgb, var(--c-accent-orange) 15%, transparent);color:var(--c-accent-orange)}
/* Narrow hosts shrink type and spacing rather than wrapping. */
.seg--compact{gap:var(--space-md)}
.seg--compact .seg__tab{font-size:var(--text-caption2);padding:var(--space-sm) 0}

/* Five long Materials faces cannot form an honest iPhone tab row. Catalyst uses one full-width
   View menu there; hubs opt in with data attributes so short rows keep the shared underline tabs. */
[data-hub-compact]{display:none}
@media (max-width:700px){
  [data-hub-wide-compact]{display:none}
  [data-hub-compact]{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:var(--space-md);margin-bottom:var(--space-md);min-height:44px;color:var(--c-text-tertiary);font-size:var(--text-caption)}
  [data-hub-compact] .filter-select{width:100%;height:44px;font-weight:600;color:var(--c-text-primary)}
}

/* The old flavours, aliased onto the one switcher rather than left to drift.
   .sch-tabs and .gl-tabs were filled pills; the app retired that shape. */
.modal-tabs,.tab-nav,.sch-tabs,.gl-tabs{display:flex;align-items:stretch;gap:var(--space-xl);position:relative;margin-bottom:var(--space-xl);background:none;border:none;padding:0;width:auto;overflow-x:auto;scrollbar-width:none}
.modal-tabs::-webkit-scrollbar,.tab-nav::-webkit-scrollbar,.sch-tabs::-webkit-scrollbar,.gl-tabs::-webkit-scrollbar{display:none}
.modal-tabs::after,.tab-nav::after,.sch-tabs::after,.gl-tabs::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--c-separator)}
.modal-tab,.tab-nav__item,.sch-tabs__btn,.gl-tab,.tab-btn{display:inline-flex;align-items:center;gap:var(--space-xs-sm);padding:var(--space-sm-md) 0;border:none;background:none;border-radius:0;cursor:pointer;font-family:inherit;font-size:var(--text-subhead);font-weight:600;color:var(--c-text-secondary);white-space:nowrap;user-select:none;position:relative;transition:color var(--motion-base)}
.modal-tab::after,.tab-nav__item::after,.sch-tabs__btn::after,.gl-tab::after,.tab-btn::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:transparent;transition:background var(--motion-base);z-index:1}
.modal-tab:hover,.tab-nav__item:hover,.sch-tabs__btn:hover,.gl-tab:hover,.tab-btn:hover{color:var(--c-text-primary);background:none}
.modal-tab.active,.tab-nav__item.active,.sch-tabs__btn.active,.gl-tab--active,.tab-btn.active{color:var(--c-text-primary);background:none;border-color:transparent}
.modal-tab.active::after,.tab-nav__item.active::after,.sch-tabs__btn.active::after,.gl-tab--active::after,.tab-btn.active::after{background:var(--c-brand-primary)}
.sch-tabs__btn svg,.tab-btn svg{width:var(--size-icon-sm);height:var(--size-icon-sm);opacity:1}
.sch-tabs__badge{display:inline-flex;align-items:center;justify-content:center;min-width:auto;height:auto;padding:2px var(--space-xs-sm);border-radius:var(--radius-pill);font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;background:color-mix(in srgb, var(--c-accent-orange) 15%, transparent);color:var(--c-accent-orange);margin-left:2px;line-height:1.3}
.sch-tabs__badge--red{background:var(--c-danger-tint);color:var(--c-danger)}

/* ── Hub band ─────────────────────────────────────────────────────────────────
   DestinationHubKit: one band of figures above the tabs, slots separated by a
   hairline rather than floated apart as tiles. A slot with a destination is a
   door into the section that owns its number.

   The band never prints a row of zeroes. A record with no ledger has nothing to
   total, and four $0.00 tiles read as a failing business rather than one that
   hasn't started — so it says that in a line and names the verb that starts the
   money. See hub-band.js. */
.hub-band{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-lg);margin-bottom:var(--space-xl);overflow:hidden}
.hub-band__slot{position:relative;display:block;width:100%;text-align:left;min-height:76px;padding:var(--space-md) var(--space-xl);background:none;border:none;font-family:inherit}
.hub-band__slot + .hub-band__slot::before{content:'';position:absolute;left:0;top:var(--space-md);bottom:var(--space-md);width:var(--border-fine);background:var(--c-separator)}
.hub-band__slot--door{cursor:pointer;transition:background var(--motion-fast)}
.hub-band__slot--door:hover{background:var(--c-field-fill)}
.hub-band__label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);margin-bottom:var(--space-xxs)}
.hub-band__value{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-band__meta{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-xxs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.hub-band--empty{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);grid-template-columns:none}
.hub-band__empty-icon{width:32px;height:32px;flex-shrink:0;border-radius:50%;background:var(--c-control-fill);color:var(--c-text-tertiary);display:flex;align-items:center;justify-content:center}
.hub-band__empty-text{flex:1;min-width:0}
.hub-band__empty-headline{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.hub-band__empty-detail{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-xxs)}
.hub-band__empty-verb{background:none;border:none;padding:0;font-family:inherit;font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);cursor:pointer;white-space:nowrap}
.hub-band__empty-verb:hover{text-decoration:underline}

/* A create menu is never the loudest thing on a page — the derived move keeps the only fill. */
.btn--quiet{background:var(--c-card-background);border:1px solid var(--c-card-border);color:var(--c-text-primary)}
.btn--quiet:hover{background:var(--c-field-fill)}

/* The old stat tiles, aliased onto the band so existing strips stop floating apart. */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:0;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-lg);margin-bottom:var(--space-xl);overflow:hidden}
.stat-card{position:relative;background:none;border:none;border-radius:0;padding:var(--space-md) var(--space-xl);min-height:76px}
.stat-card + .stat-card::before{content:'';position:absolute;left:0;top:var(--space-md);bottom:var(--space-md);width:var(--border-fine);background:var(--c-separator)}
.stat-card__label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);margin-bottom:var(--space-xxs)}
.stat-card__value{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary);letter-spacing:0;line-height:1.15}
.stat-card__sub{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-xxs)}

/* ── The record surface ───────────────────────────────────────────────────────
   One surface per record: the editable cockpit on the left, the record's own
   rail on the right. Lifecycle verbs live in that rail and only exist once the
   record does — a brand-new record has fields and Save, nothing else.

   There is no read-only twin of any field. A locked record (sent · signed ·
   paid) shows the same fields, disabled, with a line saying why. */
.record{display:grid;grid-template-columns:1fr 240px;gap:var(--space-xxl);align-items:start}
.record__cockpit{min-width:0}
.record__rail{min-width:0;border-left:1px solid var(--c-card-border);padding-left:var(--space-xl)}
/* PAYMENT PROTECTION — lienWaivers e062. The app fills this card dark green with white type
   (LienWaiverFormSheet+Actions.swift:45-110); the web has no on-success text token, so the card
   takes the house tint and the VERDICT WORD carries the state instead — which is the half of the
   app's colour that is actually saying something, since its green never changes. */
.lw-payprot{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-lg);
  padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-success-tint)}
.lw-payprot__label{color:var(--c-text-secondary);font:700 var(--text-caption)/1.2 var(--font-family);letter-spacing:.5px}
.lw-payprot__sum{margin:0;color:var(--c-text-primary);font-size:var(--text-title3);font-weight:800;
  font-variant-numeric:tabular-nums}
.lw-payprot__state{font-size:var(--text-footnote);font-weight:700}
.lw-payprot__state[data-state='protected']{color:var(--c-success)}
.lw-payprot__state[data-state='at-risk']{color:var(--c-warning)}
.lw-payprot__state[data-state='to-protect']{color:var(--c-text-secondary)}
.lw-payprot__why{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption)}
.lw-payprot__checks{display:flex;flex-direction:column;gap:var(--space-xs);margin:0;padding:0;list-style:none}
.lw-payprot__check{display:flex;align-items:center;gap:var(--space-xs);color:var(--c-text-secondary);
  font-size:var(--text-caption)}
.lw-payprot__check.is-ready{color:var(--c-success)}
.lw-payprot__go{border:1px solid var(--c-card-border);border-radius:var(--radius-control);
  background:var(--c-surface);color:var(--c-text-primary);padding:var(--space-xs-sm);cursor:pointer;
  font:700 var(--text-caption)/1.25 var(--font-family)}
.lw-payprot__go:hover:not([disabled]){border-color:var(--c-border-strong)}
.lw-payprot__go[disabled]{opacity:.55;cursor:default}
/* THE CAPTURED MARK — lienWaivers e086. Drawn on WHITE in both themes, which is not a styling
   choice: signature-pad.js captures on white because a transparent canvas encodes every
   transparent pixel as black in JPEG, so the ink is dark-on-light and a dark ground would hide it.
   The app fills the same frame white (LienWaiverFormSheet+Actions.swift:394). */
/* The fact block that holds an image rather than a line of text. */
.lw-mark{display:block}
/* THE WAIVER FILE'S OPENING CLAIM AND ITS RESTATEMENT — lienWaivers e083. */
.lw-hero{margin-bottom:var(--space-md)}
.lw-hero__head{margin:0;color:var(--c-brand-primary);font-size:var(--text-title2);font-weight:800;
  font-variant-numeric:tabular-nums;text-wrap:balance}
.lw-hero__who{margin:var(--space-xxs) 0 0;color:var(--c-text-secondary);font-size:var(--text-subhead);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lw-facts{display:flex;flex-direction:column;margin-top:var(--space-md);padding:var(--space-md);
  border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-field-fill)}
.lw-facts__label{color:var(--c-text-secondary);font:700 var(--text-caption)/1.2 var(--font-family);
  letter-spacing:.5px;margin-bottom:var(--space-xs)}
/* The app divides the rows (LienWaiverFormSheet+Actions.swift:250); a border on every row but the
   first is the same line in one declaration. */
.lw-facts__row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);
  padding:var(--space-xs) 0;font-size:var(--text-caption)}
.lw-facts__row+.lw-facts__row{border-top:1px solid var(--c-separator)}
.lw-facts__row>span{color:var(--c-text-secondary)}
.lw-facts__row>b{color:var(--c-text-primary);text-align:right;min-width:0}
/* ＋ Bill a job sits beside the money band, never inside it — customers e169. */
.ch-money{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-sm)}
.ch-bill-job{align-self:flex-start}
/* READING MODE — jobs e389. The chrome steps aside and the document gets the whole window. */
.jd-reading .modal__header,.jd-reading .modal__footer,.jd-reading .rpane__head,
.jd-reading .rpane__foot,.jd-reading .rpane__keys,.jd-reading .record__rail,
.jd-reading .jd__verbs,.jd-reading .jd__meta{display:none}
.jd-reading .jd__preview{min-height:78vh}
/* The way out rides ABOVE the document, so it is never scrolled off the one screen that has no
   other exit. `[hidden]` needs its own rule because this sets a display. */
.jd__exit{position:sticky;top:0;z-index:2;display:flex;justify-content:flex-end;
  padding:var(--space-xs) 0;background:var(--c-surface)}
.jd__exit[hidden]{display:none}
.lw-mark__img{display:block;width:100%;max-height:100px;object-fit:contain;margin:var(--space-xs) 0;
  background:#fff;border:1px solid var(--c-card-border);border-radius:var(--radius-control)}  /* raw-color-ok: the mark is CAPTURED on white by signature-pad.js — a transparent canvas encodes as black in JPEG — so it is dark ink that needs a light ground in every theme, the same pairing .sw-typed makes */
.record__locked{font-size:var(--text-caption);color:var(--c-text-secondary);background:var(--c-accent-tint);border-left:3px solid var(--c-brand-primary);border-radius:0 var(--radius-row) var(--radius-row) 0;padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-lg);line-height:1.5}

.record__fact{padding:var(--space-sm) 0;border-bottom:1px solid var(--c-separator)}
.record__fact:last-of-type{border-bottom:none}
.record__fact-label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary)}
.record__fact-value{font-size:var(--text-subhead);font-weight:600;font-variant-numeric:tabular-nums;color:var(--c-text-primary);margin-top:2px}
.record__fact-meta{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:2px}

.record__actions{margin-top:var(--space-xl);padding-top:var(--space-md);border-top:1px solid var(--c-card-border)}
.record__actions-label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);margin-bottom:var(--space-sm)}
.record__action{display:block;width:100%;text-align:left;padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-xs);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-primary);font-family:inherit;font-size:var(--text-footnote);font-weight:600;cursor:pointer;transition:background var(--motion-fast)}
.record__action:hover{background:var(--c-field-fill)}
.record__action--danger{color:var(--c-danger);border-color:var(--c-danger-tint)}
.record__action--danger:hover{background:var(--c-danger-tint)}

@media (max-width: 680px) {
  .record{grid-template-columns:1fr;gap:var(--space-lg)}
  .record__rail{border-left:none;border-top:1px solid var(--c-card-border);padding-left:0;padding-top:var(--space-lg)}
}

/* ── Themed dialog ────────────────────────────────────────────────────────────
   MTThemedDialog: the one dialog. Scrim, card, optional icon-in-circle, title,
   optional accent line, message, and one or two token-styled buttons stacked
   full-width. Replaces every native alert / confirm / prompt.

   The scrim is removed, never faded out — an opacity-0 scrim still hit-tests,
   and eating clicks for the length of an animation reads as a frozen page. */
.mt-dialog-scrim{position:fixed;inset:0;background:rgba(17,33,27,.42);display:flex;align-items:center;justify-content:center;padding:var(--space-huge) var(--space-xxl);z-index:2000;animation:fadeIn 150ms ease}
.mt-dialog{background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-xxl);padding:28px;width:100%;max-width:380px;text-align:center;max-height:calc(100vh - 96px);overflow-y:auto}
.mt-dialog__icon{width:72px;height:72px;border-radius:50%;margin:0 auto var(--space-xl);display:flex;align-items:center;justify-content:center}
.mt-dialog__icon svg{width:30px;height:30px}
.mt-dialog__title{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);line-height:1.3}
.mt-dialog__accent{font-size:var(--text-headline);font-weight:600;margin-top:var(--space-sm)}
/* Secondary text in a sheet floors at 13 — below that it stops being readable at arm's length. */
.mt-dialog__message{font-size:var(--text-subhead);color:var(--c-text-secondary);line-height:1.55;margin-top:var(--space-sm)}
.mt-dialog__message strong{color:var(--c-text-primary);font-weight:600}
.mt-dialog__field{text-align:left;margin-top:var(--space-lg)}
/* The certificate offer's readiness rows: icon + sentence, left-aligned inside a card whose
   every other line is centred. A warning that has to be read is not a caption. */
.mt-dialog__checks{text-align:left;margin-top:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm)}
.mt-dialog__check{display:flex;gap:var(--space-xs);align-items:flex-start;font-size:var(--text-footnote);color:var(--c-text-secondary);line-height:1.45}
.mt-dialog__check-icon{flex:none;display:flex;margin-top:1px}
.mt-dialog__check-icon svg{width:15px;height:15px}
.mt-dialog__buttons{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-xl)}
.mt-dialog__buttons .btn{width:100%;justify-content:center;height:var(--size-control-medium)}

/* ── Money field ──────────────────────────────────────────────────────────────
   A leading currency symbol on the field's own surface, digits tabular so
   columns of money line up. type="text" + inputmode="decimal", never
   type="number" — see money-field.js for what that does to a price. */
.money-field{position:relative;display:flex;align-items:center}
.money-field__symbol{position:absolute;left:10px;font-size:var(--text-footnote);color:var(--c-text-secondary);pointer-events:none}
.money-field .money-field__input{padding-left:22px}
.money-field__input{font-variant-numeric:tabular-nums}
/* Kill the spinners anywhere a number input survives for non-money use. */
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
input[type=number]{-moz-appearance:textfield}

/* ── Command bar ──────────────────────────────────────────────────────────────
   One search field on every destination, over the shared engine. Results are
   grouped by section in a fixed order so a thing you searched for yesterday is
   in the same place today. */
.cmdbar{position:relative;flex:1;max-width:420px;display:flex;align-items:center;margin-left:var(--space-xl)}
.cmdbar__icon{position:absolute;left:10px;color:var(--c-text-tertiary);pointer-events:none}
.cmdbar__input{width:100%;height:34px;padding:0 44px 0 30px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-field-fill);font-family:inherit;font-size:var(--text-footnote);color:var(--c-text-primary);outline:none;transition:background var(--motion-fast),border-color var(--motion-fast)}
.cmdbar__input::placeholder{color:var(--c-text-tertiary)}
.cmdbar__input:focus{background:var(--c-card-background);border-color:var(--c-brand-primary)}
.cmdbar__input::-webkit-search-cancel-button{display:none}
.cmdbar__kbd{position:absolute;right:8px;font-family:inherit;font-size:11px;font-weight:600;color:var(--c-text-tertiary);background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-sm);padding:1px 5px;pointer-events:none}
.cmdbar__input:focus ~ .cmdbar__kbd{display:none}

.cmdbar__results{position:absolute;top:calc(100% + 6px);left:0;right:0;max-height:420px;overflow-y:auto;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-card);z-index:300;padding:var(--space-xs) 0}
.cmdbar__group + .cmdbar__group{border-top:1px solid var(--c-separator);margin-top:var(--space-xs);padding-top:var(--space-xs)}
.cmdbar__group-label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);padding:var(--space-xs) var(--space-md)}
.cmdbar__hit{display:flex;align-items:center;gap:var(--space-sm);width:100%;text-align:left;padding:var(--space-sm) var(--space-md);border:none;background:none;cursor:pointer;font-family:inherit}
.cmdbar__hit--on,.cmdbar__hit:hover{background:var(--c-field-fill)}
.cmdbar__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.cmdbar__hit-text{min-width:0;flex:1}
.cmdbar__hit-title{display:block;font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmdbar__hit-sub{display:block;font-size:var(--text-caption);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmdbar__empty{padding:var(--space-md);font-size:var(--text-footnote);color:var(--c-text-secondary);text-align:center}

@media (max-width: 900px){ .cmdbar__kbd{display:none} }
@media (max-width: 680px){ .cmdbar{margin-left:var(--space-sm);max-width:none} }

/* ── Page measure ─────────────────────────────────────────────────────────────
   A form is a measure, not a window fraction. Every form sheet in the app is
   660 wide and centred; a field stretched across a 1400px window is unreadable,
   and a form that reflows as you resize is disorienting.

   Lists are the opposite — they WANT the width, which is why the page margin is
   fixed and the content grows into it rather than capping. */
.form-column{max-width:var(--size-form-column);margin-left:auto;margin-right:auto}
/* A form column inside a page that also has a wide header keeps the header full-bleed. */
.form-column--flush{margin-left:0}

/* ── Priorities ───────────────────────────────────────────────────────────────
   Typed, collapsible buckets — a count, what's at stake, and the verb that
   clears it — so the queue reads as about seven decisions rather than thirty
   rows. Sections are tinted by urgency: Now is red, Today amber, everything
   else quieter. */
.pri-section{margin-bottom:var(--space-xxl)}
.pri-section__head{display:flex;align-items:baseline;gap:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:2px solid var(--c-separator);margin-bottom:var(--space-sm)}
.pri-section--danger .pri-section__head{border-bottom-color:var(--c-danger)}
.pri-section--warn .pri-section__head{border-bottom-color:var(--c-warning)}
.pri-section--purple .pri-section__head{border-bottom-color:var(--c-doc-proposal)}
.pri-section--info .pri-section__head{border-bottom-color:var(--c-info)}
.pri-section__title{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.pri-section__caption{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pri-section__count{margin-left:auto;font-size:var(--text-footnote);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.pri-section__amount{font-size:var(--text-footnote);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}

.pri-bucket{border:1px solid var(--c-card-border);border-radius:var(--radius-card);margin-bottom:var(--space-sm);overflow:hidden;background:var(--c-card-background)}
.pri-bucket--severe{border-color:var(--c-danger-tint)}
.pri-bucket__head{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-md);border:none;background:none;cursor:pointer;font-family:inherit;text-align:left}
.pri-bucket__head:hover{background:var(--c-field-fill)}
.pri-bucket__caret{flex-shrink:0;color:var(--c-text-tertiary);transition:transform var(--motion-fast)}
.pri-bucket__caret--open{transform:rotate(90deg)}
.pri-bucket__title{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary)}
.pri-bucket__caption{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pri-bucket__count{margin-left:auto;min-width:22px;text-align:center;font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-secondary);background:var(--c-field-fill);border-radius:var(--radius-pill);padding:1px var(--space-sm)}
.pri-bucket--severe .pri-bucket__count{background:var(--c-danger-tint);color:var(--c-danger)}
.pri-bucket__amount{font-size:var(--text-footnote);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.pri-bucket__items{border-top:1px solid var(--c-separator)}

.pri-item{display:flex;align-items:center;gap:var(--space-md);width:100%;padding:var(--space-sm-md) var(--space-md);border:none;border-bottom:1px solid var(--c-separator);background:none;cursor:pointer;font-family:inherit;text-align:left}
.pri-item:last-child{border-bottom:none}
.pri-item:hover{background:var(--c-field-fill)}
.pri-item__text{flex:1;min-width:0}
.pri-item__title{display:block;font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pri-item__sub{display:block;font-size:var(--text-caption);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pri-item__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);white-space:nowrap}
.pri-item__meta--severe{color:var(--c-danger);font-weight:600}
.pri-item__amount{font-size:var(--text-footnote);font-weight:600;font-variant-numeric:tabular-nums;color:var(--c-text-primary);white-space:nowrap;min-width:var(--col-meta);text-align:right}

/* Caught up is a real state, and a good one. */
.pri-clear{text-align:center;padding:64px var(--space-xl)}
.pri-clear__mark{width:56px;height:56px;margin:0 auto var(--space-lg);border-radius:50%;background:var(--c-brand-tint);color:var(--c-brand-primary);display:flex;align-items:center;justify-content:center}
.pri-clear__title{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.pri-clear__sub{font-size:var(--text-footnote);color:var(--c-text-secondary);margin-top:var(--space-xs)}

/* ── Today ────────────────────────────────────────────────────────────────────
   One page: the queue is the spine, the business pulse is the rail. Work left,
   context right. The Priorities/Overview toggle is gone — two destinations that
   both answered "how are we doing?" became one that answers "what now?".

   A field member gets the queue full width; a rail of totals they can't open is
   furniture. */
.today{display:grid;grid-template-columns:minmax(0,1fr) 356px;gap:var(--space-xxl);align-items:start}
.today--nofinance{grid-template-columns:minmax(0,1fr)}
.pri-lead{font-size:var(--text-footnote);color:var(--c-text-secondary);margin-bottom:var(--space-lg)}

.today-rail__title{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);margin-bottom:var(--space-md)}
.today-rail__card{border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);margin-bottom:var(--space-md);overflow:hidden}
.today-rail__card-title{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-separator)}

.today-rail__start{display:block;width:100%;text-align:left;padding:var(--space-sm-md) var(--space-md);border:none;border-bottom:1px solid var(--c-separator);background:none;cursor:pointer;font-family:inherit}
.today-rail__start:last-child{border-bottom:none}
.today-rail__start:hover{background:var(--c-field-fill)}
.today-rail__start-title{display:block;font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary)}
.today-rail__start-sub{display:block;font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:1px}

.today-rail__row{display:flex;align-items:baseline;gap:var(--space-sm);width:100%;text-align:left;padding:var(--space-sm) var(--space-md);border:none;border-bottom:1px solid var(--c-separator);background:none;cursor:pointer;font-family:inherit}
.today-rail__row:last-child{border-bottom:none}
.today-rail__row:hover{background:var(--c-field-fill)}
.today-rail__row-label{flex:1;min-width:0;font-size:var(--text-footnote);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.today-rail__row-value{font-size:var(--text-footnote);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.today-rail__row-value--alert{color:var(--c-danger)}
.today-rail__row-meta{font-size:var(--text-caption);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}

@media (max-width: 1100px){ .today{grid-template-columns:minmax(0,1fr)} }

/* ── Catalyst Activity ───────────────────────────────────────────────────────
   One scrolling, day-grouped record with the same hierarchy and controls as Catalyst. */
.act-page{width:100%;max-width:1180px;margin:0 auto;padding-bottom:var(--space-xl);color:var(--c-text-primary)}
.act-primary{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:0 var(--space-lg);border:0;border-radius:var(--radius-row);background:var(--c-brand-primary);color:var(--c-on-brand);font-family:inherit;font-size:var(--text-footnote);font-weight:600;line-height:1;cursor:pointer}
.act-stale{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);padding:var(--space-sm-md) var(--space-md);border:1px solid var(--c-warning);border-radius:var(--radius-row);background:var(--c-warning-tint);font-size:var(--text-caption);color:var(--c-text-secondary)}
.act-stale strong{color:var(--c-text-primary)}.act-stale span{flex:1}.act-stale button{border:0;background:transparent;color:var(--c-brand-pressed);font:inherit;font-weight:700;cursor:pointer;white-space:nowrap}
.act-hero{overflow:hidden;margin-bottom:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}
.act-hero__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-xl);padding:var(--space-lg) var(--space-xl) var(--space-md)}
.act-hero__lead{min-width:0}
.act-kicker{display:flex;align-items:center;gap:5px;color:var(--c-accent-indigo);font-size:10px;font-weight:800;letter-spacing:.55px;text-transform:uppercase}
.act-kicker svg{width:13px;height:13px}
.act-hero h1{margin:3px 0 2px;font-size:var(--text-title3);font-weight:800;letter-spacing:-.35px;line-height:1.2;color:var(--c-text-primary)}
.act-hero__sub{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;font-size:var(--text-caption);color:var(--c-text-secondary)}
.act-hero__sub button{border:0;background:none;padding:0;color:var(--c-brand-primary);font-family:inherit;font-size:inherit;font-weight:700;cursor:pointer}
.act-hero__verbs{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-lg);flex-wrap:wrap}
.act-hero__verbs>button{display:inline-flex;align-items:center;gap:5px;border:0;background:none;padding:5px 0;color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-footnote);font-weight:700;line-height:1.15;cursor:pointer;white-space:nowrap}
.act-hero__verbs>button:disabled{opacity:.5;cursor:wait}
.act-hero__verbs svg{width:16px;height:16px;flex:0 0 16px}
.act-hero__verbs .act-verb--indigo{color:var(--c-accent-indigo)}
.act-hero__verbs .act-verb--brand{color:var(--c-brand-primary)}
.act-hero__verbs .act-gear{display:flex;width:30px;height:30px;align-items:center;justify-content:center;padding:0;border:1px solid var(--c-card-border);border-radius:var(--radius-sm)}
.act-hero__verbs>button:hover{color:var(--c-text-primary)}
.act-brief{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-xl);background:color-mix(in srgb,var(--c-accent-indigo) 7%,var(--c-card-background));font-size:var(--text-caption);line-height:1.5;color:var(--c-text-primary)}
.act-brief>svg{width:15px;height:15px;flex:0 0 15px;margin-top:2px;color:var(--c-accent-indigo)}
.act-brief>div{display:flex;align-items:center;gap:var(--space-sm);flex:1}
.act-brief>button{border:0;background:none;color:var(--c-text-tertiary);font-size:18px;line-height:1;cursor:pointer}
.act-metrics{display:flex;border-top:1px solid var(--c-separator)}
.act-metric{display:flex;align-items:center;gap:var(--space-sm-md);flex:1;min-width:0;padding:var(--space-md) var(--space-lg);border:0;border-right:1px solid var(--c-separator);background:transparent;text-align:left;font-family:inherit;cursor:pointer}
.act-metric:last-child{border-right:0}
.act-metric:hover,.act-metric--active{background:color-mix(in srgb,var(--c-accent-indigo) 7%,transparent)}
.act-metric__icon{display:flex;width:29px;height:29px;align-items:center;justify-content:center;flex:0 0 29px;border-radius:var(--radius-sm);background:var(--c-control-fill);color:var(--c-text-tertiary)}
.act-metric--active .act-metric__icon{background:color-mix(in srgb,var(--c-accent-indigo) 12%,transparent);color:var(--c-accent-indigo)}
.act-metric__icon svg{width:17px;height:17px}
.act-metric>span:last-child{display:flex;min-width:0;flex-direction:column}
.act-metric strong{font-size:var(--text-title3);font-weight:800;font-variant-numeric:tabular-nums;line-height:1;color:var(--c-text-primary)}
.act-metric small{margin-top:3px;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.act-metric--active small{font-weight:700;color:var(--c-accent-indigo)}

.act-filterbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);margin-bottom:var(--space-lg);padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.act-filterbar__chips{display:flex;align-items:center;gap:var(--space-xs);min-width:0;flex-wrap:wrap}
.act-chip{display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 var(--space-sm-md);border:1px solid transparent;border-radius:var(--radius-pill);background:transparent;color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-caption2);font-weight:700;line-height:1;white-space:nowrap;cursor:pointer}
.act-chip:hover{background:var(--c-control-fill);color:var(--c-text-primary)}
.act-chip--active{border-color:var(--c-brand-primary);background:var(--c-card-background);color:var(--c-brand-primary);box-shadow:inset 0 -2px var(--c-brand-primary)}
.act-chip span{font-weight:500;color:var(--c-text-tertiary)}
.act-filterbar__tools{display:flex;align-items:center;gap:var(--space-sm);flex:0 1 390px;min-width:280px}
.act-search{display:flex;align-items:center;gap:var(--space-sm);flex:1;min-width:150px;height:36px;padding:0 var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-tertiary)}
.act-search:focus-within{border-color:var(--c-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--c-brand-primary) 12%,transparent)}
.act-search svg{width:16px;height:16px;flex:0 0 16px}
.act-search input{width:100%;min-width:0;border:0;outline:0;background:none;color:var(--c-text-primary);font-family:inherit;font-size:var(--text-caption);line-height:1}
.act-search input::placeholder{color:var(--c-text-tertiary)}
.act-type select{height:36px;max-width:140px;border:0;outline:0;background:transparent;color:var(--c-text-primary);font-family:inherit;font-size:var(--text-caption2);font-weight:700;line-height:1;cursor:pointer}

.act-feed{min-width:0}
.act-day{display:block;margin-bottom:var(--space-lg)}
.act-day__head{display:flex;align-items:baseline;gap:var(--space-sm);padding:0 var(--space-xs) var(--space-sm)}
.act-day__head h2{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:800;letter-spacing:.6px;text-transform:uppercase}
.act-day__head>span{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.act-day__head>button{margin-left:auto;border:0;background:none;color:var(--c-brand-primary);font-family:inherit;font-size:var(--text-caption2);font-weight:700;line-height:1;cursor:pointer}
.act-day__card{overflow:visible;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.act-row{position:relative;display:block;width:100%;min-height:0;padding:0;border:0;border-bottom:1px solid var(--c-separator);border-left:0;background:transparent;cursor:default;outline:0}
.act-row:first-child{border-radius:calc(var(--radius-card) - 1px) calc(var(--radius-card) - 1px) 0 0}
.act-row:last-child{border-bottom:0;border-radius:0 0 calc(var(--radius-card) - 1px) calc(var(--radius-card) - 1px)}
.act-row:only-child{border-radius:calc(var(--radius-card) - 1px)}
.act-row:hover{background:var(--c-field-fill)}
.act-row__main{display:flex;align-items:flex-start;gap:var(--space-md);width:100%;min-height:68px;padding:var(--space-md) 94px var(--space-md) var(--space-md);border:0;border-radius:inherit;background:transparent;text-align:left;font-family:inherit;cursor:pointer}
.act-row__main:disabled{cursor:default}
.act-row__main:focus-visible,.act-row__main.kbd-cursor{box-shadow:inset 0 0 0 2px var(--c-brand-primary);outline:0}
.act-row__icon{display:flex;width:30px;height:30px;align-items:center;justify-content:center;flex:0 0 30px;border-radius:var(--radius-sm);background:var(--c-control-fill);color:var(--c-text-tertiary)}
.act-row__icon svg{display:block;width:17px;height:17px}
.act-row__icon--activity{background:color-mix(in srgb,var(--c-accent-indigo) 9%,transparent);color:var(--c-accent-indigo)}
.act-row__icon--money{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.act-row__icon--leads{background:color-mix(in srgb,var(--c-accent-orange) 11%,transparent);color:var(--c-accent-orange)}
.act-row__icon--read{background:var(--c-control-fill);color:var(--c-text-tertiary)}
.act-row__copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:3px}
.act-row__titleline{display:flex;align-items:baseline;gap:var(--space-sm);min-width:0;flex-wrap:wrap}
.act-row__titleline>strong{color:var(--c-text-primary);font-size:var(--text-footnote);font-weight:500;line-height:1.3}
.act-row--unread .act-row__titleline>strong{font-weight:750}
.act-row__body{display:-webkit-box;overflow:hidden;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.45;-webkit-line-clamp:3;-webkit-box-orient:vertical}
.act-row__no-record{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.act-entity{display:inline-flex;align-items:center;gap:5px;max-width:100%;padding:2px var(--space-sm);border:1px solid var(--c-card-border);border-radius:var(--radius-pill);background:var(--c-control-fill);font-size:10px;line-height:1.3;white-space:nowrap}
.act-entity small{color:var(--c-text-tertiary)}
.act-entity span{overflow:hidden;max-width:240px;color:var(--c-text-primary);text-overflow:ellipsis}
.act-row__trail{display:flex;align-items:flex-end;gap:5px;flex-direction:column;margin-left:auto;color:var(--c-text-tertiary);font-size:var(--text-caption2);font-variant-numeric:tabular-nums;white-space:nowrap}
.act-row__trail i{display:block;width:8px;height:8px;border-radius:50%;background:var(--c-accent-indigo)}
.act-row__trail b{color:var(--c-brand-primary);font-size:var(--text-caption2)}
.act-reply-toggle{position:absolute;right:44px;bottom:11px;z-index:2;min-height:25px;padding:0 var(--space-sm);border:1px solid var(--c-card-border);border-radius:var(--radius-sm);background:var(--c-card-background);color:var(--c-brand-primary);font-family:inherit;font-size:var(--text-caption2);font-weight:700;line-height:1;cursor:pointer}
.act-row__embedded{position:relative;z-index:4;margin:-8px 94px var(--space-md) 58px}
.act-row__menu{position:absolute;right:10px;top:11px;z-index:3}
.act-row__more{display:flex;width:28px;height:28px;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--c-text-tertiary);opacity:0;cursor:pointer}
.act-row__more svg{width:16px;height:16px}
.act-row:hover .act-row__more,.act-row:focus-within .act-row__more{opacity:1}
.act-row__more:hover{background:var(--c-control-fill);color:var(--c-text-primary)}
.act-burst{display:flex;flex-direction:column;gap:3px;margin-top:3px;padding-left:var(--space-sm-md);border-left:2px solid var(--c-separator)}
.act-burst>div{display:flex;align-items:baseline;gap:var(--space-sm)}
.act-burst span{overflow:hidden;flex:1;color:var(--c-text-secondary);font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap}
.act-burst time,.act-burst small{color:var(--c-text-tertiary);font-size:var(--text-caption2);white-space:nowrap}
.act-reply{padding:0 var(--space-md) var(--space-md) 58px}
.act-reply>div{display:flex;align-items:flex-start;gap:var(--space-sm)}
.act-reply textarea{flex:1;min-height:38px;max-height:100px;resize:vertical;padding:9px var(--space-md);border:0;border-radius:var(--radius-row);outline:0;background:var(--c-control-fill);color:var(--c-text-primary);font-family:inherit;font-size:var(--text-footnote);line-height:1.35}
.act-reply textarea:focus{box-shadow:inset 0 0 0 1px var(--c-brand-primary)}
.act-reply button{display:flex;align-items:center;justify-content:center;min-width:70px;min-height:38px;padding:0 var(--space-lg);border:0;border-radius:var(--radius-row);background:var(--c-brand-primary);color:var(--c-on-brand);font-family:inherit;font-size:var(--text-footnote);font-weight:700;line-height:1;cursor:pointer}
.act-reply button:disabled{opacity:.5}
.act-reply>small{display:block;margin-top:5px;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.act-voicemail{max-width:440px;margin-top:var(--space-xs)}
.act-voicemail audio{display:block;width:100%;height:34px}
.act-voicemail blockquote{margin:var(--space-xs) 0 0;padding-left:var(--space-sm);border-left:2px solid var(--c-separator);color:var(--c-text-secondary);font-size:var(--text-caption);font-style:italic}
.act-footer{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);flex-direction:column;padding:var(--space-sm) 0 var(--space-lg)}
.act-footer>button{display:flex;align-items:center;gap:var(--space-xs);min-height:36px;padding:0 var(--space-xl);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-footnote);font-weight:700;line-height:1;cursor:pointer}
.act-footer small,.act-footer__error{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.act-footer__error{color:var(--c-danger)}

.act-prefs-modal{max-width:560px}.act-prefs-modal .modal__title{display:flex;flex-direction:column;gap:2px}.act-prefs-modal .modal__title>span{color:var(--c-accent-indigo);font-size:10px;letter-spacing:.55px;text-transform:uppercase}.act-prefs-modal .modal__body{padding-top:20px}
.act-prefs{display:flex;flex-direction:column;gap:var(--space-lg)}
.act-prefs__masters,.act-prefs__group>div{overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-row)}
.act-prefs__master,.act-prefs__event{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);border-bottom:1px solid var(--c-separator)}
.act-prefs__master:last-child,.act-prefs__event:last-child{border-bottom:0}
.act-prefs__master>div,.act-prefs__event>div{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}
.act-prefs__master strong,.act-prefs__event strong{color:var(--c-text-primary);font-size:var(--text-footnote)}
.act-prefs__master small,.act-prefs__event small{color:var(--c-text-secondary);font-size:var(--text-caption2);line-height:1.35}
.act-prefs__group header{display:flex;align-items:center;justify-content:space-between;padding:0 2px var(--space-sm)}
.act-prefs__group h3,.act-prefs__group header span{margin:0;color:var(--c-text-tertiary);font-size:10px;font-weight:800;letter-spacing:.55px;text-transform:uppercase}
.act-prefs__event>div>span{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.act-tier{padding:2px 6px;border-radius:var(--radius-pill);background:var(--c-control-fill);color:var(--c-text-tertiary);font-size:8px;letter-spacing:.3px;text-transform:uppercase}
.act-tier--moneyOrBlocking{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.act-tier--needsYouToday{background:var(--c-warning-tint);color:var(--c-warning)}
.nt-switch.act-switch--feed input:checked+span{background:var(--c-accent-indigo)}
.act-prefs__foot{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption2);line-height:1.45}

.act-detail__kicker{margin-bottom:var(--space-sm);color:var(--c-accent-indigo);font-size:10px;font-weight:800;letter-spacing:.45px;text-transform:uppercase}.act-detail__body{color:var(--c-text-secondary);line-height:1.5;white-space:pre-wrap}.act-detail__record{display:flex;align-items:center;gap:var(--space-md);margin:var(--space-lg) 0;padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row)}.act-detail__record>span{display:flex;width:34px;height:34px;align-items:center;justify-content:center;color:var(--c-brand-primary)}.act-detail__record>span svg{width:24px;height:24px}.act-detail__record>div{display:flex;min-width:0;flex:1;flex-direction:column}.act-detail__record small{color:var(--c-text-secondary)}.act-detail__record button{min-height:34px;padding:0 var(--space-lg);border:0;border-radius:var(--radius-row);background:var(--c-brand-primary);color:var(--c-on-brand);font-weight:700;cursor:pointer}.act-detail__none{color:var(--c-text-tertiary)}.act-detail__meta{margin:var(--space-lg) 0}.act-detail__meta>div{display:flex;align-items:baseline;gap:var(--space-lg);padding:var(--space-sm) 0;border-bottom:1px solid var(--c-separator)}.act-detail__meta dt{color:var(--c-text-tertiary)}.act-detail__meta dd{margin-left:auto;color:var(--c-text-primary);text-align:right}.act-detail__actions{display:flex;gap:var(--space-sm);flex-wrap:wrap}.act-detail__actions button{min-height:34px;padding:0 var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-primary);font-weight:700;cursor:pointer}.act-detail__actions .act-danger{color:var(--c-danger)}
.act-calls__band{display:grid;grid-template-columns:repeat(3,1fr);margin-bottom:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-row);overflow:hidden}.act-calls__band>div{display:flex;flex-direction:column;padding:var(--space-md);border-right:1px solid var(--c-separator)}.act-calls__band>div:last-child{border-right:0}.act-calls__band strong{font-size:var(--text-title3);font-variant-numeric:tabular-nums}.act-calls__band span{color:var(--c-text-secondary);font-size:var(--text-caption2)}.act-calls__list{border:1px solid var(--c-card-border);border-radius:var(--radius-row);overflow:hidden}.act-call{display:grid;grid-template-columns:1fr auto;gap:var(--space-xs) var(--space-md);padding:var(--space-md);border-bottom:1px solid var(--c-separator)}.act-call:last-child{border-bottom:0}.act-call>div{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.act-call>div small{color:var(--c-text-secondary)}.act-call__kind{padding:3px 7px;border-radius:var(--radius-pill);background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:10px;font-weight:800}.act-call__kind--vm{background:var(--c-warning-tint);color:var(--c-warning)}.act-call p{grid-column:1/-1;margin:2px 0;color:var(--c-text-secondary)}.act-call footer{color:var(--c-text-tertiary);font-size:var(--text-caption2)}.act-call audio{grid-row:1/4;grid-column:2;width:220px;height:34px;align-self:center}

@media (max-width:1000px){.act-hero__top{flex-direction:column}.act-hero__verbs{justify-content:flex-start}.act-filterbar{align-items:stretch;flex-direction:column}.act-filterbar__tools{flex-basis:auto;width:100%;min-width:0}}
@media (max-width:680px){.act-page{padding:0 0 var(--space-lg)}.act-hero__top{padding:var(--space-md)}.act-hero__verbs{width:100%;gap:var(--space-md)}.act-hero__verbs>button{font-size:var(--text-caption2)}.act-brief{padding:var(--space-sm-md) var(--space-md)}.act-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.act-metric{border-right:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator);padding:var(--space-sm-md)}.act-metric:nth-child(2n){border-right:0}.act-metric:last-child{border-bottom:0}.act-filterbar{padding:var(--space-sm-md)}.act-filterbar__chips{overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px;scrollbar-width:none}.act-filterbar__tools{align-items:stretch;flex-direction:column}.act-type select{width:100%;max-width:none}.act-row__main{gap:var(--space-sm);padding:var(--space-md) 68px var(--space-md) var(--space-sm-md)}.act-row__embedded{margin:-8px 68px var(--space-md) 52px}.act-entity{max-width:220px}.act-entity span{max-width:145px}.act-row__trail{position:absolute;right:10px;top:12px}.act-reply-toggle{right:10px;bottom:9px}.act-row__menu{display:none}.act-reply{padding-left:var(--space-sm-md)}.act-prefs__event{gap:var(--space-sm);padding:var(--space-sm-md)}.act-prefs__event .nt-switch{margin-left:0}.act-calls__band{grid-template-columns:1fr}.act-calls__band>div{border-right:0;border-bottom:1px solid var(--c-separator)}.act-calls__band>div:last-child{border-bottom:0}.act-call{grid-template-columns:1fr}.act-call audio{grid-area:auto;width:100%}}

/* ── Jobs board ───────────────────────────────────────────────────────────────
   Four phases a builder thinks in, plus a Completed EXIT rail. The rail is
   slimmer on purpose: finished work is context, not a fifth column of work. */
.jb-board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) 220px;gap:var(--space-sm-md);align-items:start}
.jb-col{background:var(--c-background-secondary);border:1px solid var(--c-card-border);border-radius:var(--radius-card);padding:var(--space-sm);min-height:160px;transition:background var(--motion-fast),border-color var(--motion-fast)}
.jb-col--over{background:var(--c-brand-tint);border-color:var(--c-brand-primary)}
.jb-col__head{display:flex;align-items:flex-start;gap:var(--space-xs-sm);padding:var(--space-xs) var(--space-xs) var(--space-sm);min-height:50px}
.jb-col__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.jb-col__dot--selling{background:var(--c-doc-proposal)}
.jb-col__dot--upnext{background:var(--c-info)}
.jb-col__dot--onsite{background:var(--c-accent-orange)}
.jb-col__dot--finishing{background:var(--c-accent-teal)}
.jb-col__title{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary)}
.jb-col__copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:1px}
.jb-col__desc{font-size:10px;line-height:1.25;color:var(--c-text-tertiary)}
.jb-col__count{margin-left:auto;font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-secondary);background:var(--c-card-background);border-radius:var(--radius-pill);padding:1px var(--space-xs-sm)}
.jb-col__value{margin-left:auto;font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.jb-col__empty{font-size:var(--text-caption);color:var(--c-text-tertiary);text-align:center;padding:var(--space-lg) 0}
.jb-col__cards{max-height:min(62vh,680px);overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding-right:2px}

.jb-card{background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-row);padding:var(--space-sm) var(--space-sm-md);margin-bottom:var(--space-xs-sm);cursor:pointer;transition:border-color var(--motion-fast),box-shadow var(--motion-fast),transform var(--motion-fast)}
.jb-card:hover{border-color:color-mix(in srgb,var(--c-brand-primary) 45%,var(--c-card-border));box-shadow:0 2px 8px rgba(20,38,29,.07);transform:translateY(-1px)}
.jb-card:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:2px}
.jb-card[draggable=true]{cursor:grab}
.jb-card--dragging{opacity:.4}
.jb-card--blocked{border-color:var(--c-warning)}
.jb-card__title{font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jb-card__customer{font-size:var(--text-caption);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
.jb-card__foot{display:flex;align-items:baseline;gap:var(--space-sm);margin-top:var(--space-xs)}
.jb-card__stage{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.jb-card__amount{margin-left:auto;font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.jb-card__gate{font-size:var(--text-caption2);font-weight:600;color:var(--c-warning);margin-top:var(--space-xs)}
/* The card's momentum line — quiet by default, danger when the job has stalled (`kanbanMomentum`
   colours it `Theme.Palette.danger` on the alarm arms and `textSecondary` otherwise). One line,
   truncated: it is a state, not a paragraph. */
.jb-card__momentum{margin-top:2px;font-size:var(--text-caption2);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jb-card__momentum--alarm{color:var(--c-danger);font-weight:600}
/* The board's coaching sentence, above the columns. */
.jb-coaching{display:flex;align-items:center;gap:var(--space-sm);margin:0 0 var(--space-sm-md);font-size:var(--text-caption);color:var(--c-text-tertiary)}
.jb-coaching svg{width:14px;height:14px;flex:none;color:var(--c-warning)}
.jb-card__unbilled{font-size:var(--text-caption2);font-weight:600;color:var(--c-danger);margin-top:2px}
.jb-card--done{opacity:.85}
.jb-card__move{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:5px;margin-top:var(--space-sm);padding-top:var(--space-xs-sm);border-top:1px solid var(--c-separator);font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.jb-card__move strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary)}
.jb-card__move b{font-size:var(--text-body);line-height:1;color:var(--c-brand-primary)}

/* Drawings is a readiness library, not a second canvas. Keep search dominant and make broken
   filing a real lens instead of a warning somebody has to remember while scanning 27 rows. */
.dc-toolbar{display:flex;align-items:center;gap:var(--space-md);justify-content:space-between}
.dc-toolbar .filter-bar__search{width:min(100%,520px)}
.dc-toolbar__hint{font-size:var(--text-caption);color:var(--c-text-tertiary);text-align:right}
.dwg-filing-jump{padding:2px var(--space-sm);border:1px solid color-mix(in srgb,var(--c-warning) 40%,transparent);border-radius:var(--radius-pill);background:var(--c-warning-tint);font:inherit;font-size:var(--text-caption2);font-weight:700;color:var(--c-warning);cursor:pointer}
.dwg-filing-jump:hover{border-color:var(--c-warning)}
.dwg-filing-jump:focus-visible{outline:2px solid var(--c-warning);outline-offset:2px}
@media (max-width:680px){
  .dc-toolbar{align-items:stretch;flex-direction:column}
  .dc-toolbar .filter-bar__search{width:100%}
  .dc-toolbar__hint{text-align:left}
}

.jb-rail{background:var(--c-background-secondary);border:1px solid var(--c-card-border);border-radius:var(--radius-card);padding:var(--space-sm)}
.jb-rail__head{padding:var(--space-xs) var(--space-xs) var(--space-sm)}
.jb-rail__title{display:block;font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-tertiary)}
.jb-rail__month{display:block;font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:2px}
.jb-rail__value{display:block;font-size:var(--text-footnote);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
/* Finished work that was never fully billed is the likeliest place for money to sit still. */

/* The exit rail is a door: the whole card takes the pointer, and the tap opens the job the
 * unbilled alarm is about. */
.jb-rail[data-rail-open]{cursor:pointer}
.jb-rail__alarm{display:block;width:100%;text-align:left;background:var(--c-danger-tint);border:1px solid var(--c-danger);border-radius:var(--radius-row);padding:var(--space-sm);margin-bottom:var(--space-sm);cursor:pointer;font-family:inherit}
.jb-rail__alarm strong{display:block;font-size:var(--text-footnote);font-variant-numeric:tabular-nums;color:var(--c-danger)}
.jb-rail__alarm span{display:block;font-size:var(--text-caption2);color:var(--c-text-secondary);margin-top:1px}

@media (max-width: 1100px){
  .jb-board{grid-template-columns:repeat(2,minmax(0,1fr));}
  .jb-rail{grid-column:1/-1}
  .jb-col__cards{max-height:520px}
}
@media (max-width: 680px){ .jb-board{grid-template-columns:minmax(0,1fr)} }

/* ── Job hub ──────────────────────────────────────────────────────────────────
   The job opened in place. A hub carries more than a dialog can hold, which is
   why the app renders it inline rather than over the board.

   The next move is the one filled button on the page. Money-out moves wear the
   attention amber instead of the brand green — being owed is not an achievement. */
/* The back link and the move row moved to the shared hub chrome (`.ch__back`, `.ch-move`) when the
   job hub stopped drawing its own header — see the `.jb-stage-chip` block further down. */

.jb-statement{max-width:var(--size-form-column)}
.jb-stmt__row{display:flex;justify-content:space-between;gap:var(--space-lg);padding:var(--space-sm) 0;font-size:var(--text-footnote);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.jb-stmt__row span:last-child{color:var(--c-text-primary);font-weight:600}
.jb-stmt__row--indent{padding-left:var(--space-lg);font-size:var(--text-caption)}
.jb-stmt__row--strong{border-top:1px solid var(--c-separator);font-weight:700;color:var(--c-text-primary)}
/* The heavy rule under Balance Due — the one number a customer would ask about. */
.jb-stmt__row--heavy{border-top:2px solid var(--c-text-primary);margin-top:var(--space-xs);font-weight:700;color:var(--c-text-primary);font-size:var(--text-subhead)}
.jb-stmt__row--note{color:var(--c-text-tertiary);font-size:var(--text-caption)}
.jb-stmt__row--note span:last-child{color:var(--c-text-tertiary);font-weight:600}

/* ── Customer ledger ──────────────────────────────────────────────────────────
   A customer list is a book of relationships and revenue, not a phonebook. Every
   row wears its value, its risk, its activity and its segment — so you can tell
   who to call without opening anything. */
.lens-row{display:flex;gap:var(--space-xs);flex-wrap:wrap;margin-bottom:var(--space-md)}
.lens{display:inline-flex;align-items:center;gap:var(--space-xs);padding:5px var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-pill);background:var(--c-card-background);font-family:inherit;font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary);cursor:pointer;transition:background var(--motion-fast),color var(--motion-fast)}
.lens:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.lens--on{background:var(--c-brand-tint);border-color:var(--c-brand-primary);color:var(--c-brand-pressed)}
.lens__n{font-variant-numeric:tabular-nums;opacity:.65;font-size:var(--text-caption2)}

.cust-stale{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  margin-bottom:var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--c-warning);
  border-radius:var(--radius-row);background:var(--c-warning-tint);color:var(--c-text-secondary);
  font-size:var(--text-caption)}
.cust-stale--error{border-color:var(--c-danger);background:var(--c-danger-tint)}

/* Shared retained-live-data contract: a later listener failure keeps the last complete view
   visible and labels it stale; a first failure is explicit and never impersonates an empty desk. */
.live-stale{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);
  padding:var(--space-sm) var(--space-md);border:1px solid var(--c-warning);
  border-radius:var(--radius-row);background:var(--c-warning-tint);color:var(--c-text-secondary);
  font-size:var(--text-caption)}
.live-stale--error{border-color:var(--c-danger);background:var(--c-danger-tint)}

.cust-book{margin-bottom:var(--space-md);overflow:hidden;border:1px solid var(--c-card-border);
  border-radius:var(--radius-lg);background:var(--c-card-background);box-shadow:var(--shadow-card)}
.cust-book__verdict{display:flex;min-height:44px;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-lg)}
.cust-book__verdict>span{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:800;letter-spacing:.09em}
.cust-book__verdict p{min-width:0;margin:0;overflow:hidden;color:var(--c-text-secondary);font-size:var(--text-subhead);text-overflow:ellipsis;white-space:nowrap}
.cust-book__verdict p strong{color:var(--c-text-primary)}
.cust-book__verdict small{margin-left:auto;color:var(--c-text-tertiary);font-size:var(--text-caption2);white-space:nowrap}
.cust-book__tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));border-top:1px solid var(--c-separator)}
.cust-book__tile{position:relative;display:flex;min-width:0;flex-direction:column;align-items:flex-start;gap:1px;padding:var(--space-sm-md) var(--space-lg);border:0;border-left:1px solid var(--c-separator);background:transparent;color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}
.cust-book__tile:first-child{border-left:0}.cust-book__tile:hover{background:var(--c-field-fill)}
.cust-book__tile.is-active{background:var(--c-brand-tint);box-shadow:inset 0 -2px var(--c-brand-primary)}
.cust-book__tile>strong{max-width:100%;overflow:hidden;color:var(--c-text-primary);font-size:var(--text-title3);font-variant-numeric:tabular-nums;line-height:1.15;text-overflow:ellipsis;white-space:nowrap}
.cust-book__tile--warning>strong{color:var(--c-warning)}.cust-book__tile--brand>strong{color:var(--c-brand-primary)}
.cust-book__tile>span{max-width:100%;overflow:hidden;font-size:var(--text-caption);font-weight:700;text-overflow:ellipsis;white-space:nowrap}
.cust-book__tile>small{max-width:100%;overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption2);text-overflow:ellipsis;white-space:nowrap}

.cust-filter-card{position:relative;display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-md);padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}
.cust-roster-switch{display:inline-flex;flex:none;align-items:center;gap:2px;
  padding:2px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);
  background:var(--c-card-background)}
.cust-roster-switch__button{min-height:32px;padding:5px var(--space-md);border:0;border-radius:var(--radius-sm);
  background:transparent;color:var(--c-text-secondary);font-family:inherit;font-size:var(--text-caption);
  font-weight:600;line-height:1;
  cursor:pointer}
.cust-roster-switch__button:hover{color:var(--c-text-primary);background:var(--c-field-fill)}
.cust-roster-switch__button--on{color:var(--c-brand-pressed);background:var(--c-brand-tint)}
.cust-roster-switch__icon{margin-right:3px;font-size:12px}
.cust-scopes{display:flex;min-width:0;align-items:center;gap:var(--space-sm);overflow-x:auto;scrollbar-width:none}.cust-scopes::-webkit-scrollbar{display:none}
.cust-scope{display:inline-flex;flex:none;align-items:center;gap:4px;padding:5px var(--space-sm);border:0;border-radius:var(--radius-pill);background:transparent;color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);font-weight:700;white-space:nowrap;cursor:pointer}
.cust-scope span{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-variant-numeric:tabular-nums}
.cust-scope:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.cust-scope.is-active{background:var(--c-brand-tint);color:var(--c-brand-pressed)}.cust-scope.is-active span{color:inherit;opacity:.75}
.cust-filter-card__spacer{flex:1 1 auto;min-width:var(--space-sm)}
.cust-search{display:flex;flex:0 1 260px;align-items:center;gap:var(--space-sm);height:34px;padding:0 var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);color:var(--c-text-tertiary);background:var(--c-field-fill)}
.cust-search:focus-within{border-color:var(--c-brand-primary);box-shadow:0 0 0 2px var(--c-brand-tint)}
.cust-search input{width:100%;min-width:80px;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:inherit;font-size:var(--text-caption)}
.cust-sort-wrap,.cust-more-wrap{position:relative;flex:none}.cust-sort{display:flex;align-items:center;gap:4px;padding:var(--space-sm) 0;border:0;background:transparent;color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);cursor:pointer;white-space:nowrap}.cust-sort strong{color:var(--c-text-primary)}
.cust-more{width:30px;height:30px;padding:0;border:0;background:transparent;color:var(--c-text-secondary);font:inherit;font-size:14px;font-weight:800;letter-spacing:1px;cursor:pointer}.cust-more:hover{color:var(--c-text-primary)}
.cust-popover{position:absolute;right:0;top:calc(100% + 6px);z-index:220;min-width:180px;padding:5px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-overlay)}
.cust-popover[hidden]{display:none}.cust-popover button{display:flex;width:100%;align-items:center;justify-content:space-between;gap:var(--space-md);padding:8px var(--space-sm-md);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--c-text-primary);font:inherit;font-size:var(--text-caption);text-align:left;cursor:pointer}.cust-popover button:hover{background:var(--c-field-fill)}.cust-popover__rule{height:1px;margin:4px 0;background:var(--c-separator)}
.cust-bulk{position:sticky;top:var(--space-md);z-index:35;display:flex;width:max-content;max-width:calc(100% - 32px);align-items:center;gap:var(--space-sm);margin:0 auto var(--space-md);padding:var(--space-sm-md) var(--space-lg);border-radius:var(--radius-pill);background:var(--c-text-primary);box-shadow:0 8px 22px rgb(0 0 0 / 22%);color:var(--c-background)}.cust-bulk[hidden]{display:none}.cust-bulk>strong{font-size:var(--text-subhead);white-space:nowrap}.cust-bulk>button{padding:5px var(--space-md);border:0;border-radius:var(--radius-pill);background:rgb(255 255 255 / 14%);color:var(--c-background);font:inherit;font-size:var(--text-caption);font-weight:700;white-space:nowrap;cursor:pointer}.cust-bulk>button:hover{background:rgb(255 255 255 / 22%)}.cust-bulk>button.is-danger{background:color-mix(in srgb,var(--c-danger) 48%,transparent)}.cust-bulk>.cust-bulk__close{padding:3px var(--space-xs);background:transparent;color:rgb(255 255 255 / 65%);font-size:18px}

.cust-directory-layout{display:grid;grid-template-columns:minmax(0,1fr) 28px;align-items:start;gap:var(--space-sm)}
.cust-directory{overflow:hidden}
.cust-directory__section>h2{margin:0;padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--c-separator);
  background:var(--c-background-secondary);color:var(--c-text-tertiary);font-size:var(--text-caption2);
  font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.cust-directory-row{display:grid;grid-template-columns:32px minmax(0,1fr) auto 12px;align-items:center;
  gap:var(--space-sm-md);width:100%;padding:var(--space-sm-md) var(--space-md);border:0;
  border-bottom:1px solid var(--c-separator);background:var(--c-card-background);color:var(--c-text-primary);
  font:inherit;text-align:left;cursor:pointer}
.cust-directory-row:hover{background:var(--c-field-fill)}
.cust-directory-row__identity{display:flex;min-width:0;flex-direction:column;gap:2px}
.cust-directory-row__identity strong,.cust-directory-row__identity small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cust-directory-row__identity strong{font-size:var(--text-footnote)}
.cust-directory-row__identity small,.cust-directory-row__jobs{color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cust-directory-rail{position:sticky;top:var(--space-md);display:flex;flex-direction:column;align-items:center;
  gap:1px;padding:var(--space-xs) 2px;border-radius:var(--radius-pill);background:var(--c-card-background);
  box-shadow:var(--shadow-card)}
.cust-directory-rail button{width:24px;height:22px;padding:0;border:0;background:transparent;
  color:var(--c-brand-primary);font-family:inherit;font-size:var(--text-caption2);font-weight:800;
  line-height:1;cursor:pointer}

.cust-map-coverage{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  margin-bottom:var(--space-sm);color:var(--c-text-secondary);font-size:var(--text-caption)}
.cust-map-coverage strong{color:var(--c-text-primary)}
.cust-map-card{overflow:hidden}
#cust-map-canvas{width:100%;height:520px;background:var(--c-control-fill)}
.cust-map-error{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--space-lg);
  color:var(--c-danger);font-size:var(--text-footnote);text-align:center}
.cust-map-unpinned{margin-top:var(--space-md);overflow:hidden}
.cust-map-unpinned>.card__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}
.cust-map-unpinned__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  padding:var(--space-sm-md) var(--space-md);border-top:1px solid var(--c-separator)}
.cust-map-unpinned__row button{display:flex;min-width:0;flex-direction:column;gap:2px;padding:0;border:0;
  background:transparent;color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}
.cust-map-unpinned__row small{overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption);
  text-overflow:ellipsis;white-space:nowrap}
.cust-map-unpinned__row a{flex:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;text-decoration:none}

.cust-ledger{overflow:hidden}.cust-ledger .table-wrap{overflow-x:auto}.cust-ledger__table{min-width:980px;table-layout:fixed}
.cust-ledger__table th{padding-top:10px;padding-bottom:10px;color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.cust-ledger__table th button{display:flex;align-items:center;gap:4px;padding:0;border:0;background:transparent;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}.cust-ledger__table th button span{opacity:.55}
.cust-col-customer{width:auto}.cust-col-reach{width:92px}.cust-col-relationship{width:245px}.cust-col-money{width:150px;text-align:right}.cust-col-move{width:170px;text-align:right}
.cust-ledger__table th.cust-col-money button{margin-left:auto}.cust-ledger__table td{height:62px;padding-top:8px;padding-bottom:8px;vertical-align:middle}
.cust-row{position:relative;cursor:pointer}.cust-row td:first-child{box-shadow:inset 3px 0 var(--c-brand-primary)}.cust-row--lead td:first-child{box-shadow:inset 3px 0 var(--c-info)}.cust-row--inactive td:first-child{box-shadow:inset 3px 0 var(--c-text-tertiary)}
.cust-row:hover td{background:var(--c-field-fill)}.cust-row.is-dimmed{opacity:.72}.cust-row.is-selected td{background:var(--c-brand-tint)}
.cust-group th{padding:16px 14px 6px;border:0;background:var(--c-background-secondary);text-align:left}.cust-group th>span{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:800;letter-spacing:.09em;text-transform:uppercase}.cust-group th>i{display:inline-block;width:28px;height:1px;margin:0 8px 3px;background:var(--c-separator)}.cust-group th>strong{color:var(--c-text-tertiary);font-size:var(--text-caption);font-variant-numeric:tabular-nums}
.cust-tidy td{height:auto;padding:12px 16px;border:1px dashed var(--c-card-border);background:var(--c-card-background);color:var(--c-text-secondary);font-size:var(--text-caption)}.cust-tidy strong{color:var(--c-text-primary)}

.cust-cell{display:flex;min-width:0;align-items:center;gap:var(--space-sm-md)}
.cust-avatar{display:flex;width:32px;height:32px;flex:none;align-items:center;justify-content:center;border-radius:50%;color:var(--c-on-identity);font-size:11px;font-weight:800;box-shadow:none}.cust-avatar.is-inactive{filter:grayscale(1);opacity:.55}
.cust-cell__identity{display:flex;min-width:0;flex-direction:column;gap:1px}.cust-cell__identity>span{display:flex;min-width:0;align-items:center;gap:var(--space-xs)}.cust-cell__identity strong,.cust-cell__identity small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cust-cell__identity strong{color:var(--c-text-primary);font-size:var(--text-footnote);font-style:normal}.cust-cell__identity small{color:var(--c-text-secondary);font-size:var(--text-caption)}
.cust-select-box{display:grid;width:18px;height:18px;flex:none;place-items:center;border:1px solid var(--c-card-border);border-radius:5px;color:var(--c-brand-primary);font-size:11px;font-weight:900;background:var(--c-card-background)}

.seg-chip{display:inline-flex;padding:1px var(--space-xs);border-radius:var(--radius-pill);font-size:9px;font-style:normal;font-weight:800;white-space:nowrap}
.seg-chip--dormant{background:var(--c-warning-tint);color:var(--c-warning)}
.seg-chip--highValue{background:var(--c-brand-tint);color:var(--c-brand-pressed)}
.seg-chip--repeatClient{background:var(--c-info-tint);color:var(--c-info)}
.seg-chip--new{background:var(--c-field-fill);color:var(--c-text-secondary)}
.cust-hold{padding:1px var(--space-xs);border-radius:var(--radius-pill);background:var(--c-danger-tint);color:var(--c-danger);font-size:9px;font-style:normal;font-weight:800}

.cust-reach-row{display:flex;gap:4px}.cust-reach{position:relative;display:grid;width:22px;height:22px;place-items:center;padding:0;border:1px solid var(--c-card-border);border-radius:var(--radius-sm);background:transparent;color:var(--c-text-secondary);cursor:pointer}.cust-reach svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2}.cust-reach:hover:not(.is-missing){background:var(--c-field-fill);color:var(--c-brand-primary)}.cust-reach.is-missing{color:color-mix(in srgb,var(--c-text-tertiary) 38%,transparent);cursor:default}.cust-reach.is-missing::after{position:absolute;width:17px;height:1px;background:currentColor;content:"";transform:rotate(-38deg)}
.cust-relationship,.cust-money{display:flex;min-width:0;flex-direction:column;gap:1px}.cust-relationship strong,.cust-relationship small,.cust-money strong,.cust-money small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cust-relationship strong,.cust-money strong{color:var(--c-text-primary);font-size:var(--text-caption);font-weight:700}.cust-relationship small,.cust-money small{color:var(--c-text-secondary);font-size:var(--text-caption)}.cust-money{align-items:flex-end;font-variant-numeric:tabular-nums}.cust-money strong.is-owed{color:var(--c-warning)}.cust-money .is-late{color:var(--c-danger)}.cust-money__dash{color:var(--c-text-tertiary)!important;font-size:var(--text-subhead)!important}

.cust-move{padding:5px var(--space-xs);border:0;border-radius:var(--radius-sm);background:transparent;font-family:inherit;font-size:var(--text-caption);font-weight:700;color:var(--c-text-secondary);cursor:pointer;white-space:nowrap}.cust-move:hover{background:var(--c-field-fill);color:var(--c-text-primary)}.cust-move--danger,.cust-move--brand{color:var(--c-brand-primary)}.cust-move--warn{color:var(--c-warning)}.cust-move[data-move-id="followUpToday"]{padding:5px var(--space-sm-md);background:var(--c-warning-tint);color:var(--c-warning)}

.dup-radar{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-sm-md) var(--space-md);border:0;border-radius:var(--radius-card);background:color-mix(in srgb,var(--c-warning) 10%,var(--c-card-background));color:var(--c-warning);margin-bottom:var(--space-md)}
.dup-radar__text{flex:1;min-width:0;font-size:var(--text-footnote);color:var(--c-text-primary);line-height:1.45}
/* The verdicts already made. Quiet by default — it is a record, not a warning — and collapsed,
   because on a clean book it is the only thing in this slot. */
.dup-ruled{margin-bottom:var(--space-md)}
.dup-ruled>summary{cursor:pointer;padding:var(--space-xs) 0;font-size:var(--text-footnote)}
.dup-ruled__row{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) 0;font-size:var(--text-footnote);border-top:1px solid var(--c-border)}
.dup-ruled__row>.btn{margin-left:auto}
.dup-radar__dismiss{padding:5px var(--space-md);border:1px solid color-mix(in srgb,var(--c-warning) 45%,transparent);border-radius:var(--radius-pill);background:var(--c-card-background);font-family:inherit;font-size:var(--text-caption);font-weight:700;color:var(--c-warning);cursor:pointer;white-space:nowrap}

.cust-fix-list{display:grid;gap:var(--space-lg)}.cust-fix-list section{overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-card)}.cust-fix-list h3{margin:0;padding:var(--space-sm) var(--space-md);background:var(--c-background-secondary);color:var(--c-text-tertiary);font-size:var(--text-caption2);letter-spacing:.08em;text-transform:uppercase}.cust-fix-list button{display:flex;width:100%;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);border:0;border-top:1px solid var(--c-separator);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}.cust-fix-list button:hover{background:var(--c-field-fill)}.cust-fix-list button span{color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700}
.cust-compare__finding{margin-bottom:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-radius:var(--radius-row);background:var(--c-warning-tint);color:var(--c-text-secondary)}.cust-compare{display:grid;grid-template-columns:100px 1fr 1fr;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-card)}.cust-compare>div{display:flex;flex-direction:column;gap:2px;padding:var(--space-md);background:var(--c-background-secondary)}.cust-compare>div:first-child{grid-column:2}.cust-compare>div span,.cust-compare>label{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:800;text-transform:uppercase}.cust-compare>label,.cust-compare>p{margin:0;padding:var(--space-sm) var(--space-md);border-top:1px solid var(--c-separator)}.cust-compare>p{border-left:1px solid var(--c-separator)}
/* ── Fix list · compare sheet · campaign composer ────────────────────────────
   Catalyst's three customer sheets. Each renders its diagnosis for every reader and spends the
   role capability only on the verbs, which is why nothing here hides a row. */
.cust-fix-list__sub{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cust-fix-list__clear{display:grid;gap:2px;padding:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);text-align:center}
.cust-fix-list__clear>span{color:var(--c-text-secondary);font-size:var(--text-footnote)}
.cust-fix-group{overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-card)}
.cust-fix-group>header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-md);background:var(--c-background-secondary)}
.cust-fix-group>header>strong{font-size:var(--text-caption);font-weight:700}
.cust-fix-group>header>span{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cust-fix-row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-top:1px solid var(--c-separator);font-size:var(--text-footnote)}
.cust-fix-row>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cust-fix-row>strong.is-quiet{color:var(--c-text-secondary)}
.cust-fix-row>i{color:var(--c-text-tertiary);font-style:normal}
.cust-fix-row>small{overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption2);text-overflow:ellipsis;white-space:nowrap}
.cust-fix-row>button{margin-left:auto;border:0;background:none;color:var(--c-brand-primary);font:inherit;font-weight:700;font-size:var(--text-caption);cursor:pointer}
.cust-fix-row>button+button{margin-left:0}
.cust-fix-row>button.is-quiet{color:var(--c-text-secondary);font-weight:500}
.cust-fix-row>button:disabled{color:var(--c-text-tertiary);cursor:default}
.cust-fix-row--email>strong{flex:0 0 170px}
.cust-fix-row--email>.form-input{flex:1;min-width:0;padding:var(--space-xs) var(--space-sm)}
.cust-fix-more{margin:0;padding:var(--space-md);border-top:1px solid var(--c-separator);color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cust-compare>p.is-evidence{background:var(--c-warning-tint)}
.cust-compare__note{margin:var(--space-md) 0 0;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
#cust-compare-notsame{display:flex;flex-direction:column;gap:0;align-items:flex-start;margin-right:auto;line-height:1.25}
#cust-compare-notsame>small{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:400}
.cust-campaign__sub{margin:0 0 var(--space-md);color:var(--c-text-secondary);font-size:var(--text-caption)}
.cust-campaign__block{margin-bottom:var(--space-md)}
.cust-campaign__block>h3{display:flex;align-items:center;justify-content:space-between;margin:0 0 var(--space-sm);color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:800;letter-spacing:.08em}
.cust-campaign__merge>button{margin-left:var(--space-xs);padding:2px var(--space-sm);border:0;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--c-brand-primary) 8%,transparent);color:var(--c-brand-primary);font-family:var(--font-mono,monospace);font-size:var(--text-caption2);letter-spacing:0;cursor:pointer}
.cust-campaign__chips{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.cust-campaign__chip{display:inline-flex;align-items:center;gap:var(--space-xs);padding:2px var(--space-sm);border:1px solid var(--c-card-border);border-radius:var(--radius-pill);font-size:var(--text-caption)}
.cust-campaign__chip>b{display:grid;width:20px;height:20px;place-items:center;border-radius:50%;color:var(--c-inverse-text,#fff);font-size:9px} /* raw-color-ok: monogram ink, matched to the roster avatar */
.cust-campaign__more{color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cust-campaign__eligibility{margin:var(--space-sm) 0 0;font-size:var(--text-footnote)}
.cust-campaign__eligibility>span{color:var(--c-text-tertiary);white-space:pre-wrap}
.cust-campaign__preview{margin:var(--space-sm) 0 0;overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cust-campaign__compliance{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cust-campaign__progress{margin-right:auto;color:var(--c-text-secondary);font-size:var(--text-footnote)}
.ch-hero__verdict{margin:var(--space-xs) 0 0;color:var(--c-text-secondary);font-size:var(--text-caption)}
.ch-hero__verdict .is-owed{color:var(--c-warning)}
.ch-hero__verdict .is-settled{color:var(--c-brand-primary)}
.cust-import>p{margin-top:0;color:var(--c-text-secondary)}.cust-import__drop{display:flex;flex-direction:column;gap:2px;padding:var(--space-lg);border:1px dashed var(--c-card-border);border-radius:var(--radius-card);background:var(--c-background-secondary);cursor:pointer}.cust-import__drop span{color:var(--c-text-tertiary);font-size:var(--text-caption)}.cust-import__drop input{margin-top:var(--space-md)}.cust-import__ready,.cust-import__error{display:flex;flex-direction:column;gap:2px;margin-top:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-radius:var(--radius-row)}.cust-import__ready{background:var(--c-brand-tint);color:var(--c-brand-pressed)}.cust-import__ready span{font-size:var(--text-caption)}.cust-import__error{background:var(--c-danger-tint);color:var(--c-danger)}.cust-import__error[hidden]{display:none}

@media(max-width:1000px){.cust-filter-card{flex-wrap:wrap}.cust-scopes{order:3;width:100%}.cust-filter-card__spacer{display:none}.cust-search{margin-left:auto}.cust-book__tiles{grid-template-columns:repeat(2,1fr)}}
@media(max-width:680px){
  .cust-book__verdict{align-items:flex-start;flex-wrap:wrap}.cust-book__verdict p{order:3;width:100%;white-space:normal}.cust-book__tiles{grid-template-columns:1fr 1fr}.cust-book__tile{padding:var(--space-sm-md);border-top:1px solid var(--c-separator)}
  .cust-filter-card{gap:var(--space-sm)}.cust-roster-switch{display:flex;width:100%}.cust-roster-switch__button{flex:1}.cust-search{order:2;flex:1 1 calc(100% - 80px);margin-left:0}.cust-scopes{order:3}.cust-sort-wrap,.cust-more-wrap{order:2}
  .cust-directory-layout{grid-template-columns:minmax(0,1fr) 24px}.cust-directory-row{grid-template-columns:32px minmax(0,1fr) 10px}.cust-directory-row__jobs{display:none}#cust-map-canvas{height:420px}.cust-map-coverage,.cust-map-unpinned>.card__header{align-items:flex-start;flex-direction:column;gap:var(--space-xs)}
  .cust-compare{grid-template-columns:74px 1fr 1fr}
}

/* ── Money surface ────────────────────────────────────────────────────────────
   MTMoneyCard — the one dark ledger card the estimate, invoice, job and customer
   rails all render from. Its palette is generated from Theme.Palette.Money;
   hand-typing a gradient here is how these surfaces drifted apart before. */
.money-card{background:var(--c-money-gradient);border-radius:var(--radius-lg);padding:var(--space-lg);color:var(--c-money-ink);margin-bottom:var(--space-md)}
.money-card__pill{display:inline-flex;padding:2px var(--space-sm-md);border-radius:var(--radius-pill);font-size:var(--text-caption2);font-weight:700;margin-bottom:var(--space-md-lg)}
.money-card__pill--mint{background:rgba(143,227,173,.18);color:var(--c-money-mint)}
.money-card__pill--warn{background:rgba(247,179,49,.18);color:#F7B331}  /* raw-color-ok */
.money-card__eyebrow{font-size:12px;font-weight:600;letter-spacing:.6px;color:var(--c-money-dim)}
.money-card__hero{font-size:34px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1;margin-top:2px;overflow:hidden;text-overflow:ellipsis}
.money-card__meter{height:6px;border-radius:3px;background:var(--c-money-meter-track);margin-top:var(--space-md);overflow:hidden}
.money-card__meter span{display:block;height:100%;border-radius:3px;background:var(--c-money-mint)}
.money-card__meter-legend{display:flex;justify-content:space-between;font-size:var(--text-caption2);color:var(--c-money-dim);margin-top:var(--space-xs)}
.money-card__rows{margin-top:var(--space-md);border-top:1px solid var(--c-money-hairline);padding-top:var(--space-sm)}
.money-card__row{display:flex;justify-content:space-between;gap:var(--space-md);font-size:var(--text-caption);color:var(--c-money-dim);padding:3px 0;font-variant-numeric:tabular-nums}
.money-card__row span:last-child{color:var(--c-money-ink);font-weight:600}
.money-card__row--strong span{color:var(--c-money-ink);font-weight:700}
.money-card__actions{display:flex;gap:var(--space-xs-sm);margin-top:var(--space-md)}
.money-card__btn{flex:1;padding:7px var(--space-md);border:none;border-radius:var(--radius-row);background:var(--c-money-ghost);color:var(--c-money-ink);font-family:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}
.money-card__btn--primary{background:var(--c-money-mint);color:var(--c-money-deep)}

/* Where the money gets stuck: estimates without invoices is a closing problem. */
.deal-flow{display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-xs)}
.deal-flow__step{text-align:center;flex:1}
.deal-flow__n{font-size:var(--text-subhead);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.deal-flow__label{font-size:10.5px;color:var(--c-text-tertiary)}
.deal-flow__step--empty .deal-flow__n{color:var(--c-text-tertiary)}
.deal-flow__arrow{color:var(--c-text-tertiary);font-size:var(--text-caption)}

.reach-row{display:flex;gap:var(--space-xs);margin-top:var(--space-xs)}
.reach{flex:1;text-align:center;padding:6px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);font-size:var(--text-caption);font-weight:600;color:var(--c-brand-primary);text-decoration:none}
.reach:hover{background:var(--c-field-fill)}

/* ── The AR destination ──────────────────────────────────────────────────────
   `ARLedger`: aging is a WORKLIST, not a report. The bar shows the shape of the book at a glance;
   each band is a button that narrows the accounts below to the people whose money sits in it. */
.ar-aging{margin-bottom:var(--space-md)}
.ar-soon{color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:600}
.ar-bar{display:flex;height:10px;border-radius:var(--radius-pill);overflow:hidden;background:var(--c-field-fill);margin-bottom:var(--space-md)}
.ar-bar__seg{display:block;min-width:2px}
.ar-bar__seg--current{background:var(--c-brand-primary)}
.ar-bar__seg--d1to30{background:var(--c-accent-orange)}
.ar-bar__seg--d31to60{background:var(--c-accent-brown)}
.ar-bar__seg--d61to90{background:var(--c-accent-red)}
.ar-bar__seg--d90plus{background:var(--c-danger)}
.ar-bands{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--space-xs)}
.ar-band{display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);font-family:inherit;text-align:left;cursor:pointer}
.ar-band:hover:not(:disabled){background:var(--c-field-fill)}
.ar-band--empty{opacity:.5;cursor:default}
.ar-band--on{border-color:var(--c-brand-primary);box-shadow:inset 0 0 0 1px var(--c-brand-primary)}
.ar-band__amt{font-size:var(--text-body);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.ar-band__label{font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary)}
.ar-band__caption{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ar-none{font-size:var(--text-footnote);color:var(--c-text-secondary)}

/* The collections desk: worklist column + the AR rail (MoneyHubView+ARRail). The rail is a
   SUMMARY, never a second place to work — everything in it is a door into the surface that owns
   the number. It folds under the worklist before it gets too narrow to read. */
.ar-desk{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--space-xl);align-items:start}
.ar-desk__main{min-width:0}
.ar-desk__rail{min-width:0;display:flex;flex-direction:column;gap:var(--space-md)}
.invoice-face{min-width:0}
.inv-batch{width:100%;justify-content:center;margin-bottom:var(--space-md);padding-block:var(--space-sm-md)}
.inv-sync{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);margin-bottom:var(--space-md)}
.inv-sync__label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-tertiary)}
.inv-sync__spacer{flex:1}
.inv-sync__chip{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);border-radius:999px;background:var(--c-control-fill);color:var(--c-text-secondary);font-size:var(--text-caption);font-weight:700;text-decoration:none}
.inv-sync__chip--on{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.inv-sync__chip--qbo.inv-sync__chip--on{background:var(--c-success-tint);color:var(--c-success)}
.inv-overdue{margin-bottom:var(--space-md);padding:var(--space-lg);border-color:var(--c-danger-tint)}
.inv-overdue__head,.inv-overdue__row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:center;gap:var(--space-md)}
.inv-overdue__head{font-size:var(--text-caption);color:var(--c-text-secondary);margin-bottom:var(--space-sm)}
.inv-overdue__title{font-weight:700;color:var(--c-danger)}
.inv-overdue__row{padding:var(--space-sm) 0;border-top:1px solid var(--c-separator);font-size:var(--text-caption)}
.inv-overdue__row strong{color:var(--c-danger);font-variant-numeric:tabular-nums}
.inv-overdue__button{width:100%;justify-content:center;color:var(--c-danger);margin-top:var(--space-sm)}
.dash-table .inv-section-row,.dash-table .inv-section-row:hover{background:var(--c-background-secondary)}
.dash-table .inv-section-row td{padding:var(--space-sm) var(--space-md);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700;letter-spacing:.45px;text-transform:uppercase}
.inv-section-row td{display:flex;align-items:center;justify-content:space-between}
.inv-due--danger{color:var(--c-danger)!important;font-weight:600}
.inv-due--warning{color:var(--c-warning)!important;font-weight:600}
.money-drill-crumb{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) 0 var(--space-md);color:var(--c-text-secondary);font-size:var(--text-footnote)}
.money-drill-crumb[hidden]{display:none!important}
.money-drill-crumb button{border:0;background:none;padding:0;color:var(--c-brand-primary);font:inherit;font-weight:700;cursor:pointer}
.money-drill-crumb strong{color:var(--c-text-primary)}
.ar-rc{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.ar-rc__head{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);padding:var(--space-sm-md) var(--space-md) var(--space-xs)}
.ar-rc__body{padding:0 var(--space-md) var(--space-sm-md)}
.ar-rc__topline{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-xs)}
.ar-rc__total{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-brand-primary)}
.ar-rc__row{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-xxs) 0;background:none;border:none;font-family:inherit;text-align:left;color:inherit}
.ar-rc__row--tap{cursor:pointer}
.ar-rc__row--tap:hover{background:var(--c-field-fill)}
.ar-rc__name{font-size:var(--text-caption);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ar-rc__name--promise::before{content:'';display:inline-block;width:5px;height:5px;margin-right:5px;border-radius:50%;background:var(--c-brand-primary);vertical-align:middle}
.ar-rc__amt{margin-left:auto;font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary);white-space:nowrap}
.ar-rc__amt--brand{color:var(--c-brand-primary)}
.ar-rc__paid{display:flex;align-items:center;gap:var(--space-sm);min-width:0}
.ar-rc__tick{width:13px;height:13px;flex-shrink:0;color:var(--c-brand-primary)}
.ar-rc__who{min-width:0;display:flex;flex-direction:column}
.ar-rc__warn{font-size:var(--text-caption2);font-weight:600;color:var(--c-warning);margin-bottom:var(--space-xs)}
.ar-rc__drill{display:block;width:100%;text-align:left;margin-top:var(--space-xs);padding:0;background:none;border:none;font-family:inherit;font-size:var(--text-caption);font-weight:600;color:var(--c-brand-primary);cursor:pointer}
.ar-rc__book{display:flex;align-items:center;gap:var(--space-xs);width:100%;padding:var(--space-xxs) var(--space-xs);background:none;border:none;border-radius:var(--radius-sm);font-family:inherit;text-align:left;color:inherit;cursor:pointer}
.ar-rc__book:hover{background:var(--c-field-fill)}
.ar-rc__book-label{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ar-rc__book--hot{background:var(--c-warning-tint)}
.ar-rc__book--hot .ar-rc__book-label,.ar-rc__book--hot .ar-rc__amt{color:var(--c-warning)}
.ar-rc__pip{width:6px;height:6px;border-radius:50%;background:var(--c-warning);flex-shrink:0}
.ar-rc__chev{width:12px;height:12px;flex-shrink:0;color:var(--c-text-tertiary)}
.ar-health{display:grid;grid-template-columns:auto 1fr;gap:var(--space-sm) var(--space-md);align-items:center;position:relative}
.ar-ring{grid-row:1;grid-column:1}
.ar-ring__label{grid-row:1;grid-column:1;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}
.ar-ring__pct{font-size:var(--text-subhead);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-brand-primary);line-height:1}
.ar-ring__cap{font-size:8px;color:var(--c-text-tertiary)}
.ar-health__facts{grid-row:1;grid-column:2;min-width:0}
.ar-health__dso{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary);line-height:1.1}
.ar-health__unit{font-size:var(--text-caption);font-weight:400;color:var(--c-text-tertiary);margin-left:3px}
.ar-health__avg{font-size:var(--text-caption2);color:var(--c-text-secondary)}

/* Cash application (MoneyHubView+ARCashApplication). Two lists and one verb: money the business is
   holding that no invoice knows about, and everything already matched. The candidate list opens
   INLINE under its payment — picking which bill a cheque pays is a comparison, and a dialog that
   covers the balances makes you remember the amount instead of seeing it. */
.cash-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--space-md);margin-bottom:var(--space-md)}
.cash-stat{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);padding:var(--space-md)}
.cash-stat__k{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary)}
.cash-stat__v{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary);margin:2px 0 1px}
.cash-stat__v--brand{color:var(--c-brand-primary)}
.cash-stat__v--warn{color:var(--c-warning)}
.cash-stat__s{font-size:var(--text-caption);color:var(--c-text-secondary)}
.cash-head{display:flex;align-items:center;gap:6px;font-size:var(--text-caption2);font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--c-text-tertiary);margin:var(--space-md) 0 var(--space-xs)}
.cash-pip{width:7px;height:7px;border-radius:50%;background:var(--c-brand-primary)}
.cash-pip--warn{background:var(--c-warning)}
.cash-list{display:flex;flex-direction:column;gap:var(--space-sm)}
.cash-card{margin:0}
.cash-row{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-sm-md) var(--space-md)}
.cash-applied .cash-row + .cash-row{border-top:var(--border-fine) solid var(--c-separator)}
.cash-row__who{min-width:0;display:flex;flex-direction:column;flex:1}
.cash-row__name{font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cash-q{width:15px;height:15px;flex-shrink:0;color:var(--c-warning)}
.cash-cands{border-top:var(--border-fine) solid var(--c-separator);padding:var(--space-xs) 0}
.cash-cands__none{padding:var(--space-sm) var(--space-md)}
.cash-cand{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-sm) var(--space-md);background:none;border:none;font-family:inherit;text-align:left;color:inherit;cursor:pointer}
.cash-cand:hover:not(:disabled){background:var(--c-field-fill)}
.cash-cand:disabled{opacity:.5;cursor:default}
.cash-cand__who{min-width:0;display:flex;flex-direction:column;flex:1}
.cash-cand__num{font-size:var(--text-caption);font-weight:600;font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}

@media (max-width:1180px){
  .ar-desk{grid-template-columns:1fr}
  .ar-desk__rail{flex-direction:row;flex-wrap:wrap}
  .ar-desk__rail > .ar-rc{flex:1 1 260px}
}

.risk-chip{display:inline-flex;padding:2px var(--space-sm);border-radius:var(--radius-pill);font-size:var(--text-caption2);font-weight:700;border:1px solid currentColor}
.risk-chip--current{color:var(--c-brand-primary)}
.risk-chip--watch{color:var(--c-accent-orange)}
.risk-chip--atRisk{color:var(--c-accent-brown)}
.risk-chip--critical{color:var(--c-danger);background:var(--c-danger-tint)}

.ar-row:hover{background:var(--c-field-fill)}
.ar-acct__hero{display:flex;gap:var(--space-lg);flex-wrap:wrap;padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--c-card-border)}
.ar-acct__label{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);text-transform:uppercase;letter-spacing:.04em}
.ar-acct__amount{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.ar-acct__amount--late{color:var(--c-danger)}
.ar-acct__meta{font-size:var(--text-caption);color:var(--c-text-secondary)}
/* A credit hold, in the same red the past-due amount uses. Named by an INTERPOLATED class
   attribute, which the CSS ratchet says in its own header it cannot see — so this one is verified
   by hand rather than by the check. */
.ar-acct__meta--late{color:var(--c-danger)}

@media (max-width:760px){.ar-bands{grid-template-columns:repeat(2,1fr)}}

/* ── The drawings catalog ────────────────────────────────────────────────────
   MEASUREMENT_BELONGS_TO_JOB — drawings are listed under the job they belong to, not in a flat
   table. Each job is a section; the drawings inside it are hairline rows, not cards. */
.dwg-group{margin-bottom:var(--space-md)}
.dlc{min-width:0;max-width:100%;margin:0 0 var(--space-lg);padding:var(--space-lg)}
.dlc--attention{border-color:color-mix(in srgb,var(--c-warning) 42%,var(--c-card-border))}
.dlc--failed{border-color:color-mix(in srgb,var(--c-danger) 35%,var(--c-card-border))}
.dlc__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-lg)}
.dlc__head>div{min-width:0}
.dlc__verdict{margin-top:3px;font-size:var(--text-body);color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.dlc__bad{color:var(--c-danger)}
.dlc__sub{margin-top:3px;font-size:var(--text-caption);line-height:1.45;color:var(--c-text-tertiary);max-width:760px}
.dlc__flag{flex:none;padding:4px var(--space-sm-md);border-radius:var(--radius-pill);background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption2);font-weight:700;white-space:nowrap}
.dlc__flag--ok{background:var(--c-success-tint);color:var(--c-success)}
.dlc__flag--quiet{background:var(--c-control-fill);color:var(--c-text-tertiary)}
.dlc__states{display:grid;min-width:0;grid-template-columns:repeat(6,minmax(108px,1fr));gap:var(--space-sm);margin-top:var(--space-md)}
.dlc-state{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:6px var(--space-sm-md);border:1px solid currentColor;border-radius:var(--radius-sm);font-size:var(--text-caption);font-weight:600;background:var(--d-card-bg)}
.dlc-state span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dlc-state strong{font-size:var(--text-body);font-variant-numeric:tabular-nums}
.dlc-state--quiet{color:var(--c-text-tertiary)}
.dlc-state--private{color:var(--c-text-secondary)}
.dlc-state--pending{color:var(--c-warning)}
.dlc-state--failed{color:var(--c-danger)}
.dlc-state--registered{color:var(--c-info)}
.dlc-state--shared{color:var(--c-success)}
.dlc__stale{margin-top:var(--space-sm);padding:6px var(--space-sm-md);border-radius:var(--radius-sm);background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption)}
.dlc__issues{margin-top:var(--space-md);border-top:1px solid var(--c-card-border)}
.dlc-issue{display:grid;grid-template-columns:10px minmax(180px,.7fr) minmax(260px,1.3fr);align-items:center;gap:var(--space-sm-md);padding:var(--space-sm-md) 0;border-bottom:1px solid var(--c-card-border)}
.dlc-issue__dot{width:8px;height:8px;border-radius:50%;background:currentColor}
.dlc-issue__main{display:flex;flex-direction:column;min-width:0;font-size:var(--text-caption)}
.dlc-issue__main strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--c-text-primary)}
.dlc-issue__main span,.dlc-issue__help,.dlc__more{min-width:0;overflow-wrap:anywhere;color:var(--c-text-tertiary);font-size:var(--text-caption2);line-height:1.4}
.dlc__more{padding-top:var(--space-sm);font-weight:600}
.dwg-group__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.dwg-group__sub{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:2px}
.dwg-warn{color:var(--c-warning);font-weight:600}
.dwg-group__body{padding:0}
.dwg-group__num{font-size:var(--text-caption);font-weight:600;color:var(--c-text-tertiary);margin-left:var(--space-sm);font-variant-numeric:tabular-nums}
/* The caption under the switcher — the app's `librarySummary`. It describes the rows on screen,
   so it narrows with the lens; a total that covers only part of the set says so. */
.dwg-caption{display:flex;align-items:baseline;gap:var(--space-sm);flex-wrap:wrap;margin:0 0 var(--space-sm);font-size:var(--text-caption);color:var(--c-text-tertiary)}
.dwg-caption__kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-tertiary)}
.dwg-row{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-top:1px solid var(--c-card-border);width:100%;text-align:left;background:none;border-left:none;border-right:none;border-bottom:none;font:inherit;color:inherit;cursor:pointer}
.dwg-row:first-child{border-top:none}
.dwg-row:hover{background:var(--c-field-fill)}
.dwg-row:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:-2px}
.dwg-row__main{flex:1;min-width:0}
.dwg-row__name{font-size:var(--text-body);font-weight:600;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dwg-row__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:1px}
.dwg-row__stamp{margin-left:var(--space-sm);font-variant-numeric:tabular-nums}
.dwg-row__when{font-size:var(--text-caption);white-space:nowrap;min-width:var(--col-meta);text-align:right}
.dwg-row__open{font-size:var(--text-caption);font-weight:600;color:var(--c-text-tertiary);white-space:nowrap;opacity:0}
.dwg-row:hover .dwg-row__open,.dwg-row:focus-visible .dwg-row__open{opacity:1}
.dwg-status{font-size:var(--text-caption2);font-weight:700;padding:2px var(--space-sm);border-radius:var(--radius-pill);white-space:nowrap;border:1px solid currentColor}
.dwg-status--draft{color:var(--c-text-tertiary)}
.dwg-status--built{color:var(--c-info)}
.dwg-status--ready{color:var(--c-brand-primary)}

/* The plan, at row size — the single most recognizable thing about a drawing. Fades in when it
   loads so a scrolling catalog doesn't flash; falls back to a quiet glyph when there is none. */
.dwg-thumb{flex:none;width:64px;height:44px;border-radius:var(--radius-sm);border:1px solid var(--c-card-border);background:var(--c-control-fill);overflow:hidden;display:flex;align-items:center;justify-content:center;color:var(--c-text-tertiary)}
.dwg-thumb img{width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity .18s ease}
.dwg-thumb--loaded img{opacity:1}
.dwg-thumb--none img{display:none}

@media (max-width:680px){
  .dlc{padding:var(--space-md)}
  .dlc__head{display:block}
  .dlc__flag{display:inline-block;margin-top:var(--space-sm)}
  .dlc__states{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dlc-state span{white-space:normal}
  .dlc-issue{grid-template-columns:10px minmax(0,1fr)}
  .dlc-issue__help{grid-column:2}
  .dwg-row{flex-wrap:wrap}
  .dwg-row__when{text-align:left;min-width:0}
  .dwg-row__open{display:none}
}

/* ── The drawing viewer (#projects/<id>) ─────────────────────────────────────
   A VIEWER, never an editor (ONE_PRODUCT_VISION §7). It renders a PNG the app produced; there is
   no geometry on this page, so there is nothing here a tool could ever be attached to. */
.dv__bar{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}
.dv__spacer{flex:1}
.dv__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md)}
.dv__title{font-size:var(--text-title2);font-weight:700;color:var(--c-text-primary)}
.dv__sub{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:2px}
.dv__num{font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums;margin-right:var(--space-sm)}
.dv__head-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.dv__when{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dv__body{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--space-md);align-items:start}
.dv__stage-wrap{min-width:0}
.dv__layouts{display:flex;gap:2px;flex-wrap:wrap;margin-bottom:var(--space-sm)}
.dv__layout{font:inherit;font-size:var(--text-caption);padding:4px var(--space-sm-md);border-radius:var(--radius-pill);border:1px solid transparent;background:none;color:var(--c-text-tertiary);cursor:pointer}
.dv__layout--on{background:var(--c-control-fill);color:var(--c-text-primary);font-weight:600}
.dv__stage{position:relative;height:min(72vh,720px);border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-background-secondary);overflow:hidden;display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none}
.dv__stage--grabbing{cursor:grabbing}
.dv__plan{flex:none;transform-origin:center center;will-change:transform}
.dv__plan img{display:block;max-width:none;user-select:none;-webkit-user-drag:none}
.dv__plan--none{transform:none!important;cursor:default}
.dv__zoom{position:absolute;right:var(--space-sm-md);bottom:var(--space-sm-md);display:flex;gap:1px;background:var(--c-card-background-solid);border:1px solid var(--c-card-border);border-radius:var(--radius-pill);overflow:hidden}
.dv__zoom button{font:inherit;font-size:var(--text-caption);min-width:34px;padding:5px var(--space-sm);border:none;background:none;color:var(--c-text-secondary);cursor:pointer}
.dv__zoom button:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.dv__side{display:flex;flex-direction:column;gap:var(--space-md);min-width:0}
.dv__headline{font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.dv__quiet{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.dv__roles{width:100%;margin-top:var(--space-sm);border-collapse:collapse;font-size:var(--text-caption)}
.dv__roles tr{border-top:1px solid var(--c-separator)}
.dv__roles td{padding:5px 0}
.dv__role{color:var(--c-text-secondary);text-transform:capitalize}
.dv__role-n{width:36px;text-align:right;color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.dv__role-a{text-align:right;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.dv__facts{display:flex;flex-direction:column;gap:6px}
.dv__fact{display:flex;justify-content:space-between;gap:var(--space-md);font-size:var(--text-caption)}
.dv__fact span{color:var(--c-text-tertiary)}
.dv__fact strong{color:var(--c-text-primary);font-weight:600}
/* Says out loud what §7 decided, so nobody files "the web can't edit drawings" as a bug. */
.dv__note{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin:0;padding:0 var(--space-xs)}

@media (max-width:900px){
  .dv__body{grid-template-columns:minmax(0,1fr)}
  .dv__stage{height:min(56vh,520px)}
}

@media (max-width:680px){
  .dv__bar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .dv__bar .dv__spacer{display:none}
  .dv__bar [data-back]{grid-column:1/-1;justify-self:start}
  .dv__bar [data-job],.dv__bar [data-download]{width:100%}
  .dv__head{display:block}
  .dv__head-right{align-items:flex-start;flex-direction:row;flex-wrap:wrap;margin-top:var(--space-sm)}
  .dv__stage{height:min(52vh,440px)}
}

/* Quiet panel states inside a record's tabs — a section with nothing in it says so plainly. */
.cd-quiet{text-align:center;padding:var(--space-lg);color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cd-error{padding:var(--space-md);color:var(--c-danger);font-size:var(--text-caption)}
/* The board card's measured marker — a job that's been drawn says so without opening the hub. */
.jb-card__drawn{font-size:var(--text-caption2);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.jb-drawings{margin-top:var(--space-md)}

/* ── Sectioned estimates ─────────────────────────────────────────────────────
   Lines organize themselves by category. The header and subtotal rows are part of the table so
   they scroll and align with it — a section title floating above a table is a different table. */
.li-section td{padding-top:var(--space-md);font-size:var(--text-caption2);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--c-text-tertiary);border-bottom:1px solid var(--c-card-border)}
.li-subtotal td{font-size:var(--text-caption);font-weight:700;color:var(--c-text-secondary);border-top:1px solid var(--c-card-border);padding-top:6px;padding-bottom:10px}
.li-subtotal td:last-child{text-align:right}
.li-tag{display:inline-block;margin-top:3px;font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary)}
.li-tag--warn{color:var(--c-warning)}
.li-ballpark{margin-top:var(--space-sm);font-size:var(--text-caption);font-weight:600;color:var(--c-warning)}
.pf-scope-tools{display:flex;align-items:center;gap:var(--space-sm-md);flex-wrap:wrap;margin-top:6px}
.pf-check{display:flex;align-items:center;gap:6px;font-size:var(--text-caption);color:var(--c-text-secondary);cursor:pointer}

/* ── The margin cockpit ──────────────────────────────────────────────────────
   Margin is not a number you check at the end — it is what you are steering while you price. So it
   sits beside the lines and moves with every keystroke, and its meter reads against the market's
   own target rather than an invented scale. */
.cockpit{margin-top:var(--space-md);padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
/* Not the audience for this number, said rather than shown as an empty panel. */
.cockpit--quiet{justify-content:center}
.cockpit__gated{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.cockpit--danger{border-color:var(--c-danger)}
.cockpit--warn{border-color:var(--c-warning)}
.cockpit__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.cockpit__label{font-size:var(--text-caption2);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--c-text-tertiary)}
.cockpit__hero{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.cockpit__chip{font-size:var(--text-caption2);font-weight:700;padding:2px var(--space-sm);border-radius:var(--radius-pill);border:1px solid currentColor;white-space:nowrap}
.cockpit__chip--brand{color:var(--c-brand-primary)}
.cockpit__chip--warn{color:var(--c-warning)}
.cockpit__chip--danger{color:var(--c-danger);background:var(--c-danger-tint)}
.cockpit__chip--quiet{color:var(--c-text-tertiary)}
.cockpit__meter{position:relative;height:8px;margin:var(--space-sm-md) 0;border-radius:var(--radius-pill);background:var(--c-field-fill);overflow:visible}
.cockpit__fill{display:block;height:100%;border-radius:var(--radius-pill);background:var(--c-brand-primary)}
.cockpit--warn .cockpit__fill{background:var(--c-warning)}
.cockpit--danger .cockpit__fill{background:var(--c-danger)}
/* The target line. A meter with no target is a bar that never says whether it is good. */
.cockpit__target{position:absolute;top:-3px;width:2px;height:14px;background:var(--c-text-secondary);transform:translateX(-1px)}
.cockpit__rows{display:flex;flex-direction:column;gap:2px}
.cockpit__row{display:flex;justify-content:space-between;font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.cockpit__row--strong{font-weight:700;color:var(--c-text-primary)}
.cockpit__warn{margin-top:var(--space-sm);font-size:var(--text-caption);color:var(--c-warning)}
.cockpit #pf-solve,.cockpit .btn{margin-top:var(--space-sm-md)}
.li-margin{font-size:var(--text-caption2);font-weight:600;font-variant-numeric:tabular-nums;margin-top:1px}
.li-margin--brand{color:var(--c-brand-primary)}
.li-margin--warn{color:var(--c-warning)}
.li-margin--danger{color:var(--c-danger)}
.li-margin--quiet{color:var(--c-text-tertiary)}

/* The solver: preview, then apply. Prices never move until someone confirms. */
.solver__now{font-size:var(--text-caption);color:var(--c-text-secondary);margin-bottom:var(--space-md)}
.solver__row{display:flex;align-items:center;gap:var(--space-sm-md);font-size:var(--text-caption);color:var(--c-text-secondary)}
.solver__after{margin-top:var(--space-md);padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row)}
.solver__after .solver__row{justify-content:space-between}
.solver__lines{margin-top:var(--space-sm-md);max-height:220px;overflow-y:auto}
.solver__line{display:flex;justify-content:space-between;gap:var(--space-md);padding:5px 0;border-top:1px solid var(--c-card-border);font-size:var(--text-caption);font-variant-numeric:tabular-nums}
.solver__warn{margin-top:var(--space-md);font-size:var(--text-caption);color:var(--c-warning)}
.solver__note{margin-top:var(--space-sm);font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* ── Assemblies ──────────────────────────────────────────────────────────────
   A bundle that isn't ready is shown, disabled, with what's wrong with it — hiding it would leave
   someone hunting for an assembly they know they made. */
.li-adds{display:flex;gap:var(--space-sm);margin-top:var(--space-sm);flex-wrap:wrap}
.li-adds[hidden]{display:none}   /* see the note on .qa__form[hidden] */
.asm-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:320px;overflow-y:auto}
.asm{display:flex;width:100%;gap:var(--space-sm-md);align-items:flex-start;padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:transparent;color:inherit;text-align:left;font:inherit;cursor:pointer}
.asm:hover{background:var(--c-field-fill)}
.asm--stale{opacity:.65;cursor:default}
.asm__body{flex:1;min-width:0}
.asm__name{font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.asm__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:1px}
.asm__driver{font-size:var(--text-caption);color:var(--c-brand-primary);font-weight:600;margin-top:2px}
.asm__driver--none{color:var(--c-text-tertiary);font-weight:400}
.asm__problems{font-size:var(--text-caption);color:var(--c-warning);margin-top:2px}
.asm-preview{margin-top:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);overflow:hidden}
.asm-preview__line{display:flex;justify-content:space-between;gap:var(--space-md);padding:6px var(--space-sm-md);font-size:var(--text-caption);border-bottom:1px solid var(--c-card-border);font-variant-numeric:tabular-nums}
.asm-preview__total{display:flex;justify-content:space-between;padding:8px var(--space-sm-md);font-size:var(--text-caption);font-weight:700;background:var(--c-field-fill);font-variant-numeric:tabular-nums}
.asm-picker__quantity{display:grid;gap:var(--space-md)}
.asm-picker__qty{display:flex;align-items:center;gap:var(--space-md);margin-top:var(--space-sm)}
.asm-picker__qty input{width:130px;border:0;background:transparent;color:var(--c-text-primary);font:800 34px/1 var(--font-family);font-variant-numeric:tabular-nums;outline:0}
.asm-picker__qty strong{color:var(--c-text-secondary);font-size:var(--text-title3)}
.asm-picker__actions{display:flex;justify-content:flex-end;gap:var(--space-sm);margin-top:var(--space-md)}

/* The customer copy, in its own frame. It carries its own stylesheet — the dashboard's must not
   reach it, or the preview would show something the customer will never see. */
.doc-frame{width:100%;height:min(72vh,900px);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-control-fill);display:block}

/* ── Signing ─────────────────────────────────────────────────────────────────
   The pad is white, always — a canvas starts transparent, and a transparent signature encodes to a
   solid black rectangle the moment anything re-encodes it as JPEG. The white is painted into the
   pixels at capture, not just shown here. */
.sigpad{border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-surface);overflow:hidden;touch-action:none}
.sigpad__canvas{display:block;cursor:crosshair;touch-action:none}
.doc-frame--short{height:min(38vh,420px)}

/* ── The living balance ──────────────────────────────────────────────────────
   ONE number, auto-derived. A CREDIT is money we owe — it gets its own colour and its own sentence,
   because reading it as a smaller amount owed to us is how a refund goes unpaid. */
.jb-balance{margin-bottom:var(--space-md)}
.jb-balance__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap}
.jb-balance__label{font-size:var(--text-caption2);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--c-text-tertiary)}
.jb-balance__hero{font-size:var(--text-title2);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.jb-balance--credit .jb-balance__hero{color:var(--c-warning)}
.jb-balance--settled .jb-balance__hero{color:var(--c-brand-primary)}
.jb-balance__status{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:2px}
.jb-balance__blocked{font-size:var(--text-caption);color:var(--c-text-tertiary);max-width:220px;text-align:right}
/* Two bars in one track: what has been ASKED, and what has ARRIVED. They are different numbers. */
.jb-balance__meter{position:relative;height:8px;margin:var(--space-md) 0 6px;border-radius:var(--radius-pill);background:var(--c-field-fill);overflow:hidden}
.jb-balance__invoiced,.jb-balance__collected{position:absolute;top:0;left:0;height:100%;border-radius:var(--radius-pill)}
.jb-balance__invoiced{background:var(--c-accent-mint);opacity:.45}
.jb-balance__collected{background:var(--c-brand-primary)}
.jb-balance__legend{display:flex;justify-content:space-between;font-size:var(--text-caption);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.jb-balance__pending{margin-top:var(--space-sm);font-size:var(--text-caption);color:var(--c-accent-purple);font-weight:600}

/* ── Progress billing ────────────────────────────────────────────────────────
   Turning signed backlog into asked money. The draw strip shows where each milestone actually
   stands — BILLED and BILL NEXT are different states, and merging them would hide which jobs are
   waiting on you rather than on the customer. */
.pb-job{margin-bottom:var(--space-md)}
.pb-job__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap;margin-bottom:var(--space-sm-md)}
.pb-job__title{font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.pb-job__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:1px}.pb-job__meta--warn{color:var(--c-warning)}.jb-expenses{margin-top:12px;padding:10px 12px;border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-card-background)}.jb-expenses__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.jb-expenses__label{font:700 10px/1 var(--font-family);letter-spacing:.06em;color:var(--c-text-secondary)}.jb-expenses__verb{border:0;background:transparent;color:var(--c-brand-primary);font:700 11px/1 var(--font-family);cursor:pointer}.jb-expenses__row{display:flex;align-items:center;gap:10px;width:100%;min-height:32px;padding:4px 0;border:0;background:transparent;text-align:left;cursor:pointer}.jb-expenses__what{display:grid;flex:1;min-width:0}.jb-expenses__what strong{font:500 12px/1.3 var(--font-family);color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.jb-expenses__what small{font-size:10px;color:var(--c-text-tertiary)}.jb-expenses__amt{font:600 12px/1 var(--font-family);font-variant-numeric:tabular-nums;color:var(--c-text-primary)}.jb-expenses__chev{font-size:12px;color:var(--c-text-tertiary)}.jb-expenses__more{margin-top:4px;font-size:11px;color:var(--c-text-secondary)}.jb-collect-row{display:flex;gap:8px;margin-top:10px}.jb-collect-row>.btn{flex:1}.jb-collect-door{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;min-height:32px;margin-top:8px;border:0;background:transparent;color:var(--c-brand-primary);font:700 12px/1 var(--font-family);cursor:pointer}.jb-collect-door:hover{text-decoration:underline}.jb-collect__lede{margin:0 0 14px;font-size:13px;color:var(--c-text-secondary)}.pb-job--unscheduled{border-left:3px solid var(--c-warning)}
.pb-job__acts{display:flex;align-items:center;gap:var(--space-sm)}
.pb-job__waiting{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pb-draws{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px}
.pb-draw{padding:var(--space-sm) 6px;border-radius:var(--radius-row);text-align:center;background:var(--c-field-fill)}
.pb-draw__name{font-size:var(--text-caption2);font-weight:700;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pb-draw__amt{font-size:var(--text-caption);color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.pb-draw__label{font-size:9px;font-weight:700;letter-spacing:.03em}
.pb-draw--paid{background:color-mix(in srgb,var(--c-brand-primary) 12%,transparent)}
.pb-draw--paid .pb-draw__name,.pb-draw--paid .pb-draw__label{color:var(--c-brand-primary)}
.pb-draw--billed{background:color-mix(in srgb,var(--c-warning) 12%,transparent)}
.pb-draw--billed .pb-draw__name,.pb-draw--billed .pb-draw__label{color:var(--c-warning)}
.pb-draw--next{background:color-mix(in srgb,var(--c-brand-primary) 12%,transparent);box-shadow:inset 0 0 0 1.5px var(--c-brand-primary)}
.pb-draw--next .pb-draw__name,.pb-draw--next .pb-draw__label{color:var(--c-brand-primary)}
.pb-draw--future .pb-draw__name,.pb-draw--future .pb-draw__label{color:var(--c-text-tertiary)}
.pb-retain{display:flex;align-items:center;gap:var(--space-sm-md);flex-wrap:wrap;margin-top:var(--space-sm-md);padding-top:var(--space-sm-md);border-top:1px solid var(--c-card-border)}
.pb-retain__held{font-size:var(--text-caption);font-weight:600;color:var(--c-accent-blue)}
.pb-retain__none{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pb-pct,.pb-retain__set{height:30px;font-size:var(--text-caption)}

@media (max-width:680px){.pb-draws{grid-auto-flow:row;grid-auto-columns:auto}}

/* A promise is what a collector has after the call — not a payment, but not nothing. It sits at the
   top of the account so nobody chases someone who already committed to a date, and it turns red on
   its own once that date passes. */
.promise{padding:var(--space-sm-md);border-radius:var(--radius-row);font-size:var(--text-caption);margin-bottom:var(--space-md)}
.promise--open{background:color-mix(in srgb,var(--c-info) 10%,transparent);color:var(--c-info)}
/* The promise banner's verbs — 'They paid' and 'Remove'. Inline rather than pushed right:
   `.promise` is not a flex container, and making it one to justify these would relayout a banner
   that has been correct for months. */
.promise__acts{display:inline-flex;gap:6px;margin-left:var(--space-sm-md);vertical-align:middle}
.promise--broken{background:var(--c-danger-tint);color:var(--c-danger)}

/* Stripe mounts its card fields inside this box, in its own iframe. The border and padding are ours;
   everything inside belongs to Stripe, which is what keeps card numbers out of this origin. */
.cv-element{padding:10px 12px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);min-height:42px}

/* A band whose figures cover only part of the data says so. A total over 500 of 1,200 invoices is
   a wrong number unless it is labelled, and it is the kind of wrong nobody can see. */
.hub-band__note{font-size:var(--text-caption);color:var(--c-warning);font-weight:600;margin-bottom:var(--space-sm)}

/* ── Change orders ───────────────────────────────────────────────────────────
   The violet impact surface. Its palette is GENERATED from Theme.Palette.COImpact — hand-typing a
   gradient is how the money surfaces drifted apart before the kit existed. */
.co-card{margin-bottom:var(--space-md)}
.co-card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.co-card__title{font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.co-card__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:1px}
.co-card__reason{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-sm)}
.co-card__acts{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm-md);flex-wrap:wrap}
.co-card__blocked{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.co-chip{font-size:var(--text-caption2);font-weight:700;padding:2px var(--space-sm);border-radius:var(--radius-pill);border:1px solid currentColor;white-space:nowrap}
.co-chip--quiet{color:var(--c-text-tertiary)}
.co-chip--warn{color:var(--c-warning)}
.co-chip--brand{color:var(--c-brand-primary)}
.co-chip--danger{color:var(--c-danger);background:var(--c-danger-tint)}

.co-impact{margin-top:var(--space-md);padding:var(--space-lg);border-radius:var(--radius-card);background:var(--c-co-gradient);color:var(--c-co-ink)}
.co-impact__label{font-size:10px;font-weight:700;letter-spacing:.06em;color:var(--c-co-dim)}
.co-impact__hero{font-size:var(--text-title1);font-weight:700;font-variant-numeric:tabular-nums;margin-top:var(--space-sm)}
/* A voided change is not happening — striking it is what stops the amount reading as current. */
.co-impact__hero--struck{text-decoration:line-through;color:var(--c-co-dim)}
.co-impact__caption{font-size:var(--text-caption);color:var(--c-co-dim);margin-top:2px}
.co-impact__ledger{margin-top:var(--space-md)}
.co-impact__row{display:flex;justify-content:space-between;padding:3px 0;font-size:var(--text-caption);color:var(--c-co-dim);font-variant-numeric:tabular-nums}
.co-impact__row--total{font-size:var(--text-body);font-weight:700;color:var(--c-co-ink)}
.co-impact__rule{height:1px;background:var(--c-co-hairline);margin:var(--space-sm) 0}
.co-impact__add{color:var(--c-co-add);font-weight:600}
.co-impact__credit{color:var(--c-co-credit);font-weight:600}
.co-impact__margin{margin-top:var(--space-md);padding-top:var(--space-sm);border-top:1px solid var(--c-co-hairline);font-size:var(--text-caption);color:var(--c-co-dim)}
.co-impact__margin b{color:var(--c-co-ink)}

.co-lines{margin-top:var(--space-sm-md)}
.co-line{display:flex;align-items:baseline;gap:var(--space-md);padding:5px 0;border-top:1px solid var(--c-card-border);font-size:var(--text-caption)}
.co-line span:first-child{flex:1;min-width:0}
.co-line__qty{color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.co-line__amt{font-weight:600;font-variant-numeric:tabular-nums;min-width:var(--col-amount);text-align:right}

/* Two live-looking contracts on one job. Deliberately loud: until it is settled the contract total
   is a guess, and nothing else on the page would say so. */
.orphan{margin-bottom:var(--space-md);border-color:var(--c-warning)}
.orphan__head{display:flex;align-items:center;gap:var(--space-sm-md);flex-wrap:wrap}
.orphan__flag{font-size:var(--text-caption2);font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--c-warning);border:1px solid currentColor;border-radius:var(--radius-pill);padding:2px var(--space-sm)}
.orphan__job{font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.orphan__why{font-size:var(--text-caption);color:var(--c-text-secondary);margin:var(--space-sm) 0 var(--space-md)}
.orphan__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap;padding:var(--space-sm-md) 0;border-top:1px solid var(--c-card-border)}
.orphan__num{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary)}
.orphan__amt{font-size:var(--text-body);font-weight:700;font-variant-numeric:tabular-nums}
.orphan__acts{display:flex;gap:var(--space-sm);flex-wrap:wrap}

/* The statement: a document, not a conversation. A credit is money you are holding that belongs to
   someone else — a debt, not a discount, and it says so. */
.credit-note{padding:var(--space-sm-md);border-radius:var(--radius-row);background:color-mix(in srgb,var(--c-warning) 10%,transparent);color:var(--c-warning);font-size:var(--text-caption);margin-bottom:var(--space-md)}
.stmt-row--paid{background:color-mix(in srgb,var(--c-brand-primary) 5%,transparent)}
.stmt-foot{display:flex;justify-content:flex-end;gap:var(--space-lg);padding-top:var(--space-sm-md);margin-top:var(--space-sm);border-top:1px solid var(--c-card-border);font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.stmt-foot__due{font-weight:700;color:var(--c-text-primary)}

/* Lien rights: the one clock where a day late is not recoverable. */
.lien{margin-bottom:var(--space-md)}
.lien__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap;padding:var(--space-sm-md) 0;border-top:1px solid var(--c-card-border)}
.lien__job{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary)}
.lien__what{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.lien__when{font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.lien__when--danger{color:var(--c-danger)}
.lien__when--warn{color:var(--c-warning)}
.lien__when--brand{color:var(--c-brand-primary)}

/* ── Costs ──────────────────────────────────────────────────────────────
   Planned against actual. The budget bar CLAMPS at 100% and turns red rather
   than overflowing its track — a bar spilling past its container reads as a
   rendering fault, not as an overrun, so the number beside it carries the
   real figure. */
.cost-chip{display:inline-flex;padding:2px var(--space-sm);border-radius:var(--radius-pill);font-size:var(--text-caption2);font-weight:700;white-space:nowrap}
.cost-bar-cell{display:flex;align-items:center;gap:var(--space-sm);min-width:120px}
.cost-bar{flex:1;height:5px;border-radius:var(--radius-pill);background:var(--c-separator);overflow:hidden}
.cost-bar__fill{height:100%;border-radius:var(--radius-pill);transition:width var(--motion-base)}
.cost-bar__pct{font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;min-width:34px;text-align:right}
.cost-committed{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);margin-top:1px}
.cost-vendor{font-size:var(--text-caption2);color:var(--c-text-tertiary);font-weight:400;margin-top:1px}
.cost-fail{padding:var(--space-xl);text-align:center;font-size:var(--text-subhead);color:var(--c-text-tertiary)}

.cost-alerts{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);margin-bottom:var(--space-xl);overflow:hidden}
.cost-alerts__head{padding:var(--space-sm-md) var(--space-lg);font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-danger);border-bottom:var(--border-fine) solid var(--c-separator)}
.cost-alerts__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);width:100%;padding:var(--space-sm-md) var(--space-lg);border:none;background:none;cursor:pointer;font-family:inherit;text-align:left}
.cost-alerts__row + .cost-alerts__row{border-top:var(--border-fine) solid var(--c-separator)}
.cost-alerts__row:hover{background:var(--c-field-fill)}
.cost-alerts__name{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.cost-alerts__detail{font-size:var(--text-caption);font-weight:600;color:var(--c-danger);white-space:nowrap}

.cost-ledger{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);overflow:hidden;margin-bottom:var(--space-lg)}
.cost-ledger__row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm-md) var(--space-lg);font-size:var(--text-subhead);color:var(--c-text-secondary)}
.cost-ledger__row + .cost-ledger__row{border-top:var(--border-fine) solid var(--c-separator)}
.cost-ledger__row strong{font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.cost-ledger__row--strong{font-weight:700;color:var(--c-text-primary)}
.cost-ledger__row--strong strong{font-size:var(--text-body)}
.cost-ledger__note{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-left:var(--space-xs-sm);font-weight:600}
.cost-note{font-size:var(--text-subhead);line-height:1.5;color:var(--c-text-secondary);background:var(--c-field-fill);border-radius:var(--radius-card);padding:var(--space-md) var(--space-lg);margin-bottom:var(--space-lg)}
/* The service-triage coverage verdict. The app tints this box by what it FOUND — brand when the
   warranty is live, warning when it has expired or was never there — because "goodwill is a choice,
   not an accident" is a caution, and a caution drawn in the same grey as a hint is not one. */
.cost-note--ok{background:color-mix(in srgb,var(--c-brand-primary) 8%,transparent);color:var(--c-brand-primary)}
.cost-note--warn{background:color-mix(in srgb,var(--c-warning) 8%,transparent);color:var(--c-warning)}
.cost-note--ok strong,.cost-note--warn strong{display:block;font-weight:650}
.cost-note--ok span,.cost-note--warn span{display:block;font-size:var(--text-caption);opacity:.85}
.modal:has(.financing-offer){max-width:420px}.modal:has(.financing-offer) .modal__title::before{margin-right:var(--space-xs);color:var(--c-brand-primary);content:"%"}.financing-offer{display:grid;gap:var(--space-lg);min-height:330px}.financing-offer__amount strong{display:block;color:var(--c-text-primary);font-size:var(--text-title2);font-variant-numeric:tabular-nums}.financing-offer__amount p{margin:4px 0 0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.42}.financing-offer__amount p:last-child{color:var(--c-brand-primary);font-weight:650}.financing-offer__qr{display:grid;width:212px;height:212px;place-items:center;margin:0 auto;padding:var(--space-sm);border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:white}.financing-offer__qr img{display:block;width:100%;height:100%;object-fit:contain}.financing-offer__scan{max-width:390px;margin:calc(var(--space-sm)*-1) auto 0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.42;text-align:center}.financing-offer__actions{display:grid;border-top:1px solid var(--c-separator)}.financing-offer__actions .btn{display:flex;min-height:48px;align-items:center;justify-content:flex-start;border:0;border-bottom:1px solid var(--c-separator);border-radius:0;padding:var(--space-sm) 0;text-align:left}.financing-offer__actions .btn small{display:block;margin-left:var(--space-sm);color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:500}.financing-offer__warning{margin:0;color:var(--c-warning);font-size:var(--text-caption);font-weight:650;line-height:1.42}
.jb-financing__offer,.jb-financing__setup{display:flex;width:100%;align-items:center;gap:var(--space-xs);border:0;border-top:1px solid var(--c-separator);margin-top:var(--space-sm);padding:var(--space-sm) 0 0;background:transparent;color:var(--c-brand-primary);font:600 var(--text-caption)/1.35 var(--font-sans);text-align:left;cursor:pointer}.jb-financing__setup{color:var(--c-text-tertiary);font-weight:500}

/* One proposal send composer — the Catalyst channel sheet, adapted to the web modal. */
.proposal-send{display:grid;gap:var(--space-lg)}
.proposal-send__context{color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:600}
.proposal-send__channels{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.proposal-send__channels button{border:1px solid var(--c-input-border);border-radius:var(--radius-md);padding:8px 12px;background:transparent;color:var(--c-text-secondary);font:700 var(--text-caption)/1 var(--font-sans);cursor:pointer}
.proposal-send__channels button.is-active{border-color:color-mix(in srgb,var(--c-brand-primary) 28%,transparent);background:color-mix(in srgb,var(--c-brand-primary) 11%,transparent);color:var(--c-brand-primary)}
.proposal-send__panel{display:grid;gap:var(--space-md);min-height:150px}
.proposal-send__preview{padding:var(--space-md);border:1px solid var(--c-input-border);border-radius:var(--radius-md);background:var(--c-input-fill);color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.55;white-space:normal}
.proposal-send__preview--link{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere}
.proposal-send__copy,.proposal-send__hint,.proposal-send__warning,.proposal-send__error{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.5}
.proposal-send__hint{color:var(--c-text-tertiary)}
.proposal-send__warning,.proposal-send__error{color:var(--c-warning)}
.proposal-send__finance{display:flex;align-items:flex-start;gap:var(--space-sm);cursor:pointer}
.proposal-send__finance input{margin-top:3px;accent-color:var(--c-brand-primary)}
.proposal-send__finance span{display:grid;gap:2px}.proposal-send__finance b{color:var(--c-text-primary);font-size:var(--text-caption)}.proposal-send__finance small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.proposal-send__qr{display:grid;place-items:center;min-height:236px;border:1px solid var(--c-input-border);border-radius:var(--radius-md);background:var(--c-input-fill)}
.proposal-send__qr img{width:212px;height:212px;padding:8px;border-radius:var(--radius-md);background:white}
.proposal-send__primary{width:100%;justify-content:center}
.proposal-send__confirm{display:grid;gap:var(--space-sm);padding:var(--space-md);border:1px solid color-mix(in srgb,var(--c-warning) 25%,transparent);border-radius:var(--radius-card);background:var(--c-warning-tint)}
.proposal-send__confirm strong{color:var(--c-text-primary);font-size:var(--text-subhead)}.proposal-send__confirm p{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.45}.proposal-send__confirm>div{display:flex;flex-wrap:wrap;gap:var(--space-sm)}
.proposal-email{display:grid;gap:var(--space-md)}
.proposal-email__attachment{display:grid;gap:2px;padding:var(--space-md);border:1px solid var(--c-input-border);border-radius:var(--radius-md);background:var(--c-input-fill)}
.proposal-email__attachment b{color:var(--c-text-primary);font-size:var(--text-caption)}.proposal-email__attachment span{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.invoice-email__context{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:600}
.invoice-email__person{display:grid;gap:2px;padding:var(--space-sm);border:1px solid var(--c-input-border);border-radius:var(--radius-md);background:var(--c-input-fill)}
.invoice-email__person b{color:var(--c-text-primary);font-size:var(--text-caption)}
.invoice-email__person .form-input{padding:0;border:0;background:transparent;box-shadow:none;font-size:var(--text-caption)}
.invoice-email__attachment{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}
.invoice-email__file{display:flex!important;align-items:center;gap:var(--space-sm)}
.invoice-email__file>i{display:grid;place-items:center;width:34px;height:40px;border-radius:6px;background:color-mix(in srgb,var(--c-brand-primary) 12%,transparent);color:var(--c-brand-primary);font-style:normal;font-weight:800}
.invoice-email__file>span{display:grid;gap:2px}.invoice-email__file small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.invoice-email__send-hint{margin-right:auto;color:var(--c-text-tertiary);font-size:var(--text-caption);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.financing-stage{display:grid;gap:var(--space-xs);border-top:1px solid var(--c-separator);margin-top:var(--space-sm);padding-top:var(--space-sm)}.financing-stage__head{display:flex;min-height:24px;align-items:center;gap:var(--space-xs);color:var(--c-brand-primary)}.financing-stage__head b{color:var(--c-text-secondary);font-size:var(--text-caption2);letter-spacing:.08em}.financing-stage__spacer{flex:1}.financing-stage__menu{width:28px;height:24px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--c-text-tertiary);font-weight:700;letter-spacing:1px;cursor:pointer}.financing-stage__menu:hover{background:var(--c-control-fill)}.financing-stage__flow{display:flex;align-items:center;gap:4px;overflow-x:auto;padding-bottom:2px}.financing-stage__flow span,.financing-stage__terminal strong{flex:none;border-radius:999px;padding:3px 7px;background:var(--c-control-fill);color:var(--c-text-secondary);font-size:10px;font-weight:700}.financing-stage__flow span.is-reached,.financing-stage__terminal strong.is-funded{background:var(--c-brand-tint);color:var(--c-brand-primary)}.financing-stage__flow i{color:var(--c-text-tertiary);font-size:11px;font-style:normal}.financing-stage__terminal{display:flex;align-items:center;gap:var(--space-sm)}.financing-stage__terminal small{color:var(--c-text-tertiary);font-size:var(--text-caption2);line-height:1.35}.financing-stage__terminal button{border:0;background:transparent;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}.financing-stage__meta{display:flex;flex-wrap:wrap;gap:var(--space-sm);color:var(--c-text-tertiary);font-size:var(--text-caption2);font-variant-numeric:tabular-nums}.financing-stage__meta .is-warning{color:var(--c-warning)}
.financing-flight__header{width:100%;border:0;background:transparent;text-align:left;cursor:pointer}.financing-flight__heading,.financing-flight__summary{display:flex;align-items:center;gap:var(--space-sm)}.financing-flight__heading>i{display:grid;width:26px;height:26px;place-items:center;border-radius:7px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:var(--text-caption);font-style:normal;font-weight:800}.financing-flight__heading .card__title,.financing-flight__heading .ar-soon{display:block}.financing-flight__summary{margin-left:auto}.financing-flight__caret{width:18px;color:var(--c-text-tertiary);font-size:18px;font-style:normal;text-align:center}.financing-flight__total{color:var(--c-brand-primary);font-variant-numeric:tabular-nums}.financing-flight__stage{display:inline-flex;border-radius:999px;padding:2px 7px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:10px;font-weight:700}.financing-flight__stage.is-stalled{background:var(--c-warning-tint);color:var(--c-warning)}.financing-flight__warning{color:var(--c-warning)}.financing-flight__end{display:flex;align-items:center;gap:var(--space-sm);font-variant-numeric:tabular-nums}.financing-flight__end button{border:0;background:transparent;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.pf-financing-low{min-height:24px;padding:0;border:0;color:var(--c-brand-primary);background:transparent;font-size:var(--text-caption);font-weight:650;cursor:pointer}.pf-financing-low::before{content:"%";margin-right:4px}.pf-financing-soft{margin:0;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:650}
.po__finance{display:block;margin-top:3px;padding:0;border:0;color:var(--c-brand-primary);background:transparent;font-size:var(--text-caption2);font-weight:650;cursor:pointer}.po__finance::before{content:"%";margin-right:3px}
.cost-section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin:var(--space-xl) 0 var(--space-sm-md);font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary)}

.cost-budget-form__row{display:grid;grid-template-columns:1fr 140px 110px;align-items:center;gap:var(--space-md);padding:var(--space-xs-sm) 0}
.cost-budget-form__row + .cost-budget-form__row{border-top:var(--border-fine) solid var(--c-separator)}
.cost-budget-form__row .form-label{margin:0}
.cost-budget-form__actual{font-size:var(--text-caption);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums;text-align:right}

/* ── Purchase orders ────────────────────────────────────────────────────
   Reuses the cost surfaces (.cost-ledger, .cost-bar, .cost-chip) — an order
   IS a cost commitment, and giving it its own visual language would imply
   otherwise. Only the line-total footer is new. */
.po-foot{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-xs-sm);margin-top:var(--space-lg);padding-top:var(--space-md);border-top:var(--border-fine) solid var(--c-separator);font-size:var(--text-subhead)}
.po-foot > div{display:flex;align-items:center;gap:var(--space-md)}
.po-foot span{color:var(--c-text-tertiary)}
.po-foot strong{font-variant-numeric:tabular-nums;min-width:88px;text-align:right}
.po-foot__total{font-size:var(--text-body)}
.po-foot__total span{color:var(--c-text-secondary);font-weight:700}
.po-foot__total strong{color:var(--c-brand-primary)}
.po-amount{width:90px;text-align:right;font-size:var(--text-caption);font-weight:600;padding-right:var(--space-sm);font-variant-numeric:tabular-nums}
.po-late{color:var(--c-danger);font-weight:600}

/* ── Vendors ────────────────────────────────────────────────────────────
   The footer states where subs actually live. It is a sentence rather than
   a tab because a Subs tab here would imply a second directory exists. */
.vendor-foot{margin-top:var(--space-lg);font-size:var(--text-caption);color:var(--c-text-tertiary);line-height:1.55}
.vendor-foot__link{border:none;background:none;padding:0;font:inherit;color:var(--c-brand-primary);font-weight:600;cursor:pointer}
.vendor-foot__link:hover{text-decoration:underline}
.vendor-link{display:inline-flex;align-items:center;min-height:24px;color:var(--c-brand-primary);text-decoration:none}
.vendor-link:hover{text-decoration:underline}
.vf-region{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md)}

/* ── Materials ──────────────────────────────────────────────────────────
   Two spines with named verdicts, mirroring the app's BizSectionHeader:
   a section title that only counts rows tells you nothing you can act on. */
.mat-unpriced{font-size:var(--text-caption2);font-weight:600;color:var(--c-warning);margin-top:1px}

/* ── Closeout: the lien-waiver verification stamp ───────────────────────
   Verified is a fact somebody performed, not a status somebody picked, so
   it reads as settled text rather than as a control. The date is part of
   the sentence: the word on its own is what this replaced. */
.lw-verified{font-weight:600;color:var(--c-brand-primary);padding:var(--space-xs) 0}
.lw-stamp{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);margin-top:1px}
.lw-stamp--undated{color:var(--c-warning)}

/* ── Time ───────────────────────────────────────────────────────────────
   The running strip ticks; everything below it is settled fact. A stale
   clock is coloured, never auto-closed — guessing when someone stopped
   work invents a timesheet, and timesheets are what people are paid from. */
.tm-run{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-lg)}
.tm-run + .tm-run{border-top:var(--border-fine) solid var(--c-separator)}
.tm-run__clock{font-size:var(--text-subhead);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-brand-primary);text-align:right}
.tm-run__clock--stale{color:var(--c-warning)}
.tm-live{font-size:var(--text-caption2);font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--c-brand-primary)}

/* ── Dispatch — run the day ─────────────────────────────────────────────
   The app's cockpit: a dark hero carrying the day and its four figures,
   then ONE board — the queue that needs a crew, the crew routes on a
   7a–7p axis, and the pre-roll check — with capacity along the bottom.
   Double-booking is coloured, never blocked.

   Desk-shaped, not app-shaped: the board is the page (full height, its
   own scroll), because a dispatcher has the whole monitor and the day is
   what they are looking at. */

.hub-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-xl);
  padding:var(--space-lg) var(--space-xl);border-radius:var(--radius-card);
  background:var(--c-drawing-gradient);border:1px solid var(--c-drawing-hairline)}
.hub-hero__title{font-size:var(--text-title3);font-weight:700;color:var(--c-drawing-ink)}
.hub-hero__sub{font-size:var(--text-footnote);color:var(--c-drawing-dim);margin-top:2px}
.hub-hero__metrics{display:flex;margin-top:var(--space-lg)}
.hub-hero__metric{display:flex;flex-direction:column;min-width:118px;padding-right:var(--space-lg);
  margin-right:var(--space-lg);border-right:1px solid var(--c-drawing-hairline)}
.hub-hero__metric:last-child{border-right:0;margin-right:0;padding-right:0}
.hub-hero__value{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-drawing-ink)}
.hub-hero__value--warn{color:var(--c-warning)}
.hub-hero__value--mint{color:var(--c-drawing-mint)}
.hub-hero__label{font-size:var(--text-caption2);font-weight:600;color:var(--c-drawing-dim);margin-top:1px}
.hub-hero__right{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-sm);flex-shrink:0}
/* The metrics wrap before they squeeze: a hero that compresses its own figures to hold one line
   is a hero that becomes unreadable on the laptop somebody actually dispatches from. */
@media (max-width:900px){
  .hub-hero{flex-direction:column}
  .hub-hero__right{align-items:flex-start}
  .hub-hero__metrics{flex-wrap:wrap;gap:var(--space-sm) 0}
}
/* The hero's own quiet button — the create verb, on the dark surface. */
.hub-hero__action{display:inline-flex;align-items:center;gap:var(--space-xs);height:34px;
  padding:0 var(--space-md);border-radius:var(--radius-row);border:1px solid var(--c-drawing-hairline);
  background:var(--c-drawing-soft-fill);color:var(--c-drawing-ink);font-family:inherit;
  font-size:var(--text-caption);font-weight:700;cursor:pointer;white-space:nowrap}
.hub-hero__action:hover{background:var(--c-drawing-hairline)}
.hub-hero__note{display:flex;align-items:center;gap:var(--space-xs);font-size:var(--text-caption2);
  font-weight:600;color:var(--c-drawing-dim)}
.hub-hero__note--clear{color:var(--c-drawing-mint)}
.dsp-hero__day{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}
.dsp-hero__arrow{width:32px;height:32px;border-radius:50%;border:1px solid var(--c-drawing-hairline);
  background:var(--c-drawing-soft-fill);color:var(--c-drawing-ink);font-size:var(--text-subhead);
  line-height:1;cursor:pointer}
.dsp-hero__arrow:hover{background:var(--c-drawing-hairline)}
.dsp-hero__date{display:flex;flex-direction:column;align-items:center;min-width:112px}
.dsp-hero__weekday{font-size:var(--text-footnote);font-weight:700;color:var(--c-drawing-ink)}
.dsp-hero__daynum{font-size:var(--text-caption);color:var(--c-drawing-dim)}
.dsp-hero__today{height:32px;padding:0 var(--space-md);border-radius:var(--radius-row);
  border:1px solid var(--c-drawing-hairline);background:var(--c-drawing-soft-fill);
  color:var(--c-drawing-ink);font-family:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}

/* The native collaborator home answers five readiness questions over one assigned-job list. The
   office gets the same vocabulary here, above the route board: compact enough for a morning scan,
   but every row is a real door into the owning Job File. */
.dsp-ready{margin-top:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-card-background);overflow:hidden}
.dsp-ready__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);
  padding:var(--space-sm-md) var(--space-lg);border-bottom:1px solid var(--c-separator)}
.dsp-ready__head>div:first-child{display:flex;flex-direction:column;gap:1px;min-width:190px}
.dsp-ready__head strong{font-size:var(--text-footnote);color:var(--c-text-primary)}
.dsp-ready__head span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-ready__lenses{display:flex;align-items:center;gap:3px;overflow-x:auto;max-width:100%}
.dsp-ready__lens{flex:0 0 auto;height:30px;padding:0 var(--space-sm-md);border:1px solid transparent;
  border-radius:var(--radius-pill);background:none;color:var(--c-text-secondary);font:inherit;
  font-size:var(--text-caption);cursor:pointer;white-space:nowrap}
.dsp-ready__lens b{margin-left:3px;font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.dsp-ready__lens:hover{background:var(--c-field-fill)}
.dsp-ready__lens.is-on{background:var(--c-brand-tint);border-color:var(--c-brand-primary);
  color:var(--c-brand-pressed);font-weight:700}
.dsp-ready__lens.is-on b{color:inherit}
.dsp-ready__rows{display:flex;flex-direction:column}
.dsp-ready__row{display:grid;grid-template-columns:minmax(170px,1fr) minmax(220px,2fr) auto;
  align-items:center;gap:var(--space-md);width:100%;padding:var(--space-sm-md) var(--space-lg);
  border:0;border-bottom:1px solid var(--c-separator);background:none;color:inherit;font:inherit;
  text-align:left;cursor:pointer}
.dsp-ready__row:last-child{border-bottom:0}
.dsp-ready__row:hover{background:var(--c-field-fill)}
.dsp-ready__identity{display:flex;flex-direction:column;gap:1px;min-width:0}
.dsp-ready__identity strong{font-size:var(--text-caption);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dsp-ready__identity small{font-size:var(--text-caption2);color:var(--c-text-tertiary);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dsp-ready__badges{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap}
.dsp-ready__badge{display:inline-flex;align-items:center;min-height:20px;padding:2px var(--space-sm);
  border-radius:var(--radius-pill);background:var(--c-control-fill);font-size:var(--text-caption2);
  font-weight:600;color:var(--c-text-secondary);white-space:nowrap}
.dsp-ready__badge--due,.dsp-ready__badge--photos{background:var(--c-warning-tint);color:var(--c-warning)}
.dsp-ready__badge--ready{background:var(--c-brand-tint);color:var(--c-brand-pressed)}
.dsp-ready__badge--field{background:var(--c-info-tint);color:var(--c-info)}
.dsp-ready__open{font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary);white-space:nowrap}
.dsp-ready__empty,.dsp-ready__more{padding:var(--space-md) var(--space-lg);font-size:var(--text-caption);
  color:var(--c-text-tertiary)}
.dsp-ready__more{border-top:1px solid var(--c-separator);text-align:right}
@media(max-width:760px){
  .dsp-ready__head{align-items:flex-start;flex-direction:column;gap:var(--space-sm)}
  .dsp-ready__lenses{width:100%}
  .dsp-ready__row{grid-template-columns:minmax(0,1fr) auto}
  .dsp-ready__badges{grid-column:1 / -1;grid-row:2}
}

/* The board: queue · routes · check. Three columns at a desk; the rails
   fold under the routes on anything narrower than a monitor. */
.dsp-board{display:grid;grid-template-columns:290px minmax(0,1fr) 224px;
  border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-card-background);margin-top:var(--space-md);overflow:hidden}
@media (max-width:1200px){.dsp-board{grid-template-columns:1fr}}
/* The app's compact dispatch face (DispatchView.swift:174). Its branch is gated on the size class
   alone — not the phone shell — so a narrowed window reaches it, and the web owes it the app's own
   three cards rather than the hero band reflowed. `Available` is the hero's metric and has no card
   there, so the hero row stands down at the same width instead of stacking four on top of three. */
.dsp-compact{display:none}
/* These three are the compact face and stay hidden until the breakpoint. Declared BEFORE the media
   query on purpose: a media query adds no specificity, so a base rule written after it wins and the
   face never appears — which is exactly what happened to the Unassigned card, invisibly, because
   the seeded day has nothing unassigned and an absent card and a dead one look the same. */
.dsp-cqueue{display:none}
.dsp-ccrew{display:none}
@media (max-width:1200px){
  .dsp-compact{display:flex;flex-wrap:wrap;margin-top:var(--space-lg)}
  .dsp-compact .stat-card{flex:1 1 0;min-width:104px}
  .dispatch-host .hub-hero__metrics{display:none}
  /* The desktop rail stands down so the app's own Unassigned card is the only one at this width.
     Two cards for one queue would be the web saying it twice, in two different sets of words. */
  .dispatch-host #dsp-queue{display:none}
  .dsp-cqueue,.dsp-ccrew{display:block;margin-top:var(--space-lg)}
  /* The desktop board is a timeline of every route, idle crew included. The app's compact face is a
     list of the crews who actually have work, so the board stands down rather than stacking a
     second, differently-worded answer under this one. */
  .dispatch-host #dsp-board{display:none}
}
.dsp-ccrew__icon{color:var(--c-brand-primary);flex:none}
.dsp-ccrew__go{display:block;text-align:center;margin-top:var(--space-md);padding:var(--space-xs);
  border-radius:999px;background:var(--c-brand-tint);color:var(--c-brand-primary);
  font-size:var(--text-caption2);font-weight:500;text-decoration:none}
.dsp-crow{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xxs) 0}
.dsp-crow__num{flex:none;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;background:var(--c-brand-tint);color:var(--c-brand-primary);
  font-size:var(--text-caption2);font-weight:500;font-variant-numeric:tabular-nums}
.dsp-crow__num--open{background:var(--c-warning-tint);color:var(--c-warning)}
.dsp-crow__lane{flex:none;width:3px;align-self:stretch;border-radius:2px}
.dsp-crow__what{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:1px}
.dsp-crow__title{font-size:var(--text-subhead);color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dsp-crow__where{font-size:var(--text-caption);color:var(--c-text-secondary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dsp-crow__time{flex:none;font-size:var(--text-caption2);color:var(--c-text-tertiary);
  font-variant-numeric:tabular-nums}
.dsp-crow__assign{flex:none}
.dsp-cqueue__head{display:flex;align-items:center;gap:var(--space-sm)}
.dsp-cqueue__icon{color:var(--c-warning);flex:none}
.dsp-cqueue__title{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.dsp-cqueue__count{margin-left:auto;font-size:var(--text-caption2);font-weight:500;
  font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.dsp-cqueue__list{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-md)}
.dsp-stale{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--c-warning);
  border-radius:var(--radius-row);background:var(--c-warning-tint);color:var(--c-text-secondary);
  font-size:var(--text-caption)}

.dsp-queue{display:flex;flex-direction:column;gap:var(--space-sm-md);padding:var(--space-md);
  border-right:1px solid var(--c-card-border);background:var(--c-background-secondary)}
.dsp-queue--over{background:var(--c-warning-tint)}
.dsp-queue__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}
.dsp-queue__title{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary)}
.dsp-queue__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:1px}
.dsp-queue__count{font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums;
  color:var(--c-text-secondary);background:var(--c-control-fill);border-radius:999px;padding:2px 8px}
.dsp-queue__count--warn{color:var(--c-warning);background:var(--c-warning-tint)}
.dsp-queue__search{height:32px;font-size:var(--text-caption)}
.dsp-queue__list{display:flex;flex-direction:column;gap:var(--space-sm);overflow-y:auto;max-height:560px}
.dsp-queue__clear{font-size:var(--text-caption);color:var(--c-text-tertiary);text-align:center;padding:var(--space-xl) 0}

.dsp-card{border:1px solid var(--c-card-border);border-radius:var(--radius-row);
  background:var(--c-card-background);padding:var(--space-sm-md);cursor:grab;text-align:left}
.dsp-card:hover{border-color:var(--c-border)}
/* `kbd-cursor` is the shared keyboard layer's highlight — the same one the tables wear, so the
   queue and the routes join the ↑/↓ list every other page already has. */
.dsp-card.kbd-cursor,.dsp-card:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:1px}
/* Still used by Service areas — a ZIP-less market says so in the same red as an unstaffed stop. */
.dsp-none{font-size:var(--text-caption);font-weight:600;color:var(--c-danger)}
.dsp-card__top{display:flex;gap:var(--space-sm);align-items:flex-start}
.dsp-card__lane{width:3px;align-self:stretch;border-radius:2px;flex-shrink:0}
.dsp-card__title{font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary);line-height:1.3}
.dsp-card__who{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:1px}
.dsp-card__facts{display:flex;gap:var(--space-sm-md);margin-top:var(--space-sm);
  font-size:var(--text-caption2);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.dsp-card__tag{font-weight:700;letter-spacing:.4px}
.dsp-card__where{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:var(--space-xxs)}
/* The card's affordance row. `Assign` is BUILT for every role and disabled for the ones that
   cannot use it — shown-and-refused, which is the app's own choice here and not the same product
   as a hidden control. */
.dsp-card__act{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);
  margin-top:var(--space-sm);padding-top:var(--space-xs);border-top:1px solid var(--c-separator)}
.dsp-card__hint{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-card__assign{border:0;background:none;font-family:inherit;font-size:var(--text-caption);
  font-weight:700;color:var(--c-brand-primary);cursor:pointer}
.dsp-card__assign:disabled{color:var(--c-text-tertiary);cursor:default}
.dsp-dragging{opacity:.45}

.dsp-main{display:flex;flex-direction:column;min-width:0}
.dsp-toolbar{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);
  border-bottom:1px solid var(--c-separator)}
.dsp-toolbar__what{flex:1;min-width:0}
.dsp-toolbar__title{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary)}
.dsp-toolbar__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:1px}
.dsp-lens-pick{display:flex;gap:2px;padding:2px;border:1px solid var(--c-card-border);border-radius:var(--radius-row)}
.dsp-lens-pick__btn{height:26px;padding:0 var(--space-md);border:0;border-radius:6px;background:none;
  font-family:inherit;font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary);cursor:pointer}
.dsp-lens-pick__btn--on{background:var(--c-control-fill);color:var(--c-text-primary);font-weight:700}
.dsp-filter{display:flex;align-items:center;gap:var(--space-sm)}
.dsp-filter__label{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-lens{flex:1;min-height:360px;overflow:auto}
@media(max-width:680px){
  .dsp-toolbar{align-items:flex-start;flex-wrap:wrap}
  .dsp-toolbar__what{flex:1 0 100%}
  .dsp-filter{margin-left:auto}
}

/* The axis. Its gutter matches the route rows' name column exactly, or the
   hours line up over the wrong minute. */
.dsp-axis{display:grid;grid-template-columns:180px minmax(0,1fr);border-bottom:1px solid var(--c-separator);
  position:sticky;top:0;background:var(--c-card-background);z-index:1}
.dsp-axis__gutter{display:flex;align-items:center;padding:0 var(--space-md);font-size:var(--text-caption2);
  font-weight:700;letter-spacing:.4px;color:var(--c-text-tertiary);border-right:1px solid var(--c-separator)}
.dsp-axis__hours{display:grid;grid-template-columns:repeat(12,1fr);padding:var(--space-xs) 0}
.dsp-axis__hour{font-size:var(--text-caption2);color:var(--c-text-tertiary);
  border-left:1px solid var(--c-separator);padding-left:4px}

.dsp-route{display:grid;grid-template-columns:180px minmax(0,1fr);border-bottom:1px solid var(--c-separator)}
.dsp-route--clash .dsp-route__who{background:var(--c-warning-tint)}
.dsp-route__who{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-md);
  border-right:1px solid var(--c-separator)}
.dsp-route__avatar{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  flex-shrink:0;border-radius:50%;background:var(--c-brand-tint);color:var(--c-brand-pressed);
  font-size:var(--text-caption2);font-weight:700}
.dsp-route__name{display:flex;flex-direction:column;min-width:0}
.dsp-route__title{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dsp-route__load{font-size:var(--text-caption2);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.dsp-route__load--clash{color:var(--c-warning);font-weight:700}
.dsp-route__go{margin-left:auto;font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary);
  text-decoration:none;white-space:nowrap}
.dsp-route__go:hover{text-decoration:underline}
/* An empty row is not blank: the app names the drop target and states the fact that follows from
   having nothing on it. */
.dsp-track__free{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:1px;border:1px dashed var(--c-card-border);border-radius:6px}
.dsp-track__free-title{font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary)}
.dsp-track__free-sub{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-track{padding:var(--space-sm) 0;position:relative}
.dsp-track--over{background:var(--c-brand-tint)}
.dsp-track__grid{position:relative;min-height:46px}
.dsp-track__tick{position:absolute;top:0;bottom:0;width:1px;background:var(--c-separator)}
.dsp-track__guide{position:absolute;top:0;bottom:0;width:2px;background:var(--c-brand-primary)}
.dsp-track__guide::after{content:attr(data-at);position:absolute;top:-2px;left:4px;white-space:nowrap;
  font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary)}

.dsp-stop{position:absolute;height:46px;overflow:hidden;padding:5px 7px;text-align:left;
  border:1px solid var(--c-card-border);border-left-width:3px;border-radius:6px;
  background:var(--c-card-background);font-family:inherit;cursor:grab}
.dsp-stop:hover{border-color:var(--c-border)}
.dsp-stop.kbd-cursor,.dsp-stop:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:1px}
.dsp-stop--clash{background:var(--c-warning-tint);border-color:var(--c-warning)}
.dsp-stop__title{display:block;font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dsp-stop__time{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary);
  font-variant-numeric:tabular-nums}

/* A stop with no time can't sit anywhere honest on a clock axis, so it
   parks under the row and says why. */
.dsp-untimed{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;padding:var(--space-sm) 0 0}
.dsp-untimed__label{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-chip{display:inline-flex;flex-direction:column;padding:3px 8px;border:1px solid var(--c-card-border);
  border-left-width:3px;border-radius:6px;text-align:left;
  background:var(--c-card-background);font-family:inherit;font-size:var(--text-caption2);
  color:var(--c-text-primary);cursor:grab}
/* The run board says "no time" for a stop with no parseable start; the MAP lens calls the same
   state "Flexible". One condition, two vocabularies, in two files — a build that ships one word
   is wrong on the other surface. */
.dsp-chip__title{font-weight:600}
.dsp-chip__time{color:var(--c-text-tertiary)}

.dsp-capacity{display:flex;border-top:1px solid var(--c-separator);background:var(--c-background-secondary)}
.dsp-capacity__metric{flex:1;display:flex;flex-direction:column;padding:var(--space-sm-md) var(--space-md);
  border-right:1px solid var(--c-separator)}
.dsp-capacity__metric:last-child{border-right:0}
.dsp-capacity__label{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-capacity__value{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
/* Drive time is the one figure here that costs money to know, so it is asked for rather than
   assumed — and what it could not count is printed under it. */
.dsp-capacity__measure{margin-top:2px;padding:0;border:0;background:none;font-family:inherit;
  font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary);cursor:pointer;text-align:left}
.dsp-capacity__measure:hover{text-decoration:underline}
.dsp-capacity__note{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:1px}

.dsp-check{padding:var(--space-md);border-left:1px solid var(--c-card-border)}
.dsp-check__title{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary)}
.dsp-check__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:1px}
.dsp-check__rows{margin-top:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);
  background:var(--c-background-secondary);overflow:hidden}
.dsp-check__row{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-md);
  font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.35}
.dsp-check__row + .dsp-check__row{border-top:1px solid var(--c-separator)}
.dsp-check__dot{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;
  flex-shrink:0;border-radius:50%;font-size:10px;font-weight:700;color:var(--c-on-brand)}
.dsp-check__dot--ok{background:var(--c-success)}
.dsp-check__dot--warn{background:var(--c-warning)}
.dsp-check__another{width:100%;height:36px;margin-top:var(--space-md);border:0;border-radius:var(--radius-row);
  background:var(--c-brand-tint);font-family:inherit;font-size:var(--text-caption);font-weight:700;
  color:var(--c-brand-primary);cursor:pointer}
.dsp-ends{margin-top:var(--space-sm-md)}

.dsp-map{display:flex;flex-direction:column;height:100%;min-height:420px}
.dsp-map__canvas{flex:1;min-height:380px;background:var(--c-background-secondary)}
.dsp-map__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  padding:var(--space-sm) var(--space-md);border-top:1px solid var(--c-separator)}
.dsp-map__count{font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsp-map__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;
  height:100%;min-height:380px;text-align:center;padding:var(--space-xl)}
.dsp-map__empty-title{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary)}
.dsp-map__empty-sub{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-xxs);max-width:320px}

/* ── The map lens's own chrome ──────────────────────────────────────────
   The app draws four things OVER the canvas rather than beside it: the layer
   control top-leading, the callout top-trailing, the status capsule
   bottom-leading, and — one at a time, from an if/else-if chain — an empty
   card in the middle. Four independent conditions would stack two cards. */
.dsp-map{position:relative}
.dsp-map__layers{position:absolute;top:var(--space-md);left:var(--space-md);z-index:2;
  display:flex;flex-direction:column;gap:2px;padding:4px;border:1px solid var(--c-card-border);
  border-radius:var(--radius-row);background:var(--c-card-background);box-shadow:0 3px 7px rgb(0 0 0 / .09)}
.dsp-map__layer-row{display:flex;gap:2px}
.dsp-map__layer{height:28px;padding:0 var(--space-sm-md);border:0;border-radius:6px;background:none;
  font-family:inherit;font-size:var(--text-caption);font-weight:700;color:var(--c-text-secondary);cursor:pointer}
.dsp-map__layer--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.dsp-map__traffic{display:flex;align-items:center;gap:var(--space-xs);padding:0 var(--space-sm) var(--space-xs);
  border:0;background:none;font-family:inherit;font-size:var(--text-caption);color:var(--c-text-secondary);cursor:pointer}
.dsp-map__tick{color:var(--c-brand-primary);font-weight:700}
.dsp-map__status{position:absolute;bottom:var(--space-md);left:var(--space-md);z-index:2;
  display:flex;align-items:center;gap:var(--space-sm);height:36px;padding:0 var(--space-md);
  border:1px solid var(--c-card-border);border-radius:999px;background:var(--c-card-background);
  box-shadow:0 2px 6px rgb(0 0 0 / .08)}
.dsp-map__fit{border:0;background:none;font-family:inherit;font-size:var(--text-caption);font-weight:700;
  color:var(--c-brand-primary);cursor:pointer}
.dsp-map__fit:disabled{color:var(--c-text-tertiary);cursor:default}
.dsp-map__callout-host{position:absolute;top:var(--space-md);right:var(--space-md);z-index:3}
.dsp-map__callout{width:290px;padding:var(--space-md);border:1px solid var(--c-card-border);
  border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:0 5px 12px rgb(0 0 0 / .13)}
.dsp-map__callout-head{display:flex;align-items:flex-start;gap:var(--space-sm);justify-content:space-between}
.dsp-map__callout-title{font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary)}
.dsp-map__callout-sub{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:2px}
.dsp-map__callout-x{border:0;background:none;font-size:15px;line-height:1;color:var(--c-text-tertiary);cursor:pointer}
.dsp-map__callout-where{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-sm)}
.dsp-map__callout-go{width:100%;height:32px;margin-top:var(--space-sm);border:0;border-radius:var(--radius-row);
  background:var(--c-brand-tint);font-family:inherit;font-size:var(--text-caption);font-weight:700;
  color:var(--c-brand-primary);cursor:pointer}
.dsp-map__overlay{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;
  pointer-events:none}
.dsp-map__overlay:empty{display:none}
.dsp-map__card{max-width:340px;padding:var(--space-lg);text-align:center;border:1px solid var(--c-card-border);
  border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:0 4px 12px rgb(0 0 0 / .1)}
.dsp-map__card-title{font-size:var(--text-footnote);font-weight:700;color:var(--c-text-primary)}
.dsp-map__card-detail{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:var(--space-xxs)}
.dsp-map__spinner{display:inline-block;width:16px;height:16px;margin-bottom:var(--space-sm);
  border:2px solid var(--c-separator);border-top-color:var(--c-brand-primary);border-radius:50%;
  animation:spin .8s linear infinite}

/* ── TODAY'S ROUTES — the map lens's left column ────────────────────────
   Not the queue with a new heading. The app swaps the whole rail: in the
   Map lens the column lists the routes that EXIST, because a stop cannot be
   dragged onto a map. */
.dsp-queue--routes{gap:var(--space-md)}
.dsp-runrail__head{display:flex;flex-direction:column}
.dsp-runrail__title{font-size:var(--text-caption2);font-weight:800;letter-spacing:.4px;color:var(--c-accent-teal,var(--c-brand-primary))}
.dsp-runrail__sub{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:2px}
.dsp-runrail__list{display:flex;flex-direction:column;gap:var(--space-md);overflow-y:auto;max-height:560px}
.dsp-runrail__empty{font-size:var(--text-caption);color:var(--c-text-secondary);text-align:center;padding:var(--space-xl) 0}
.dsp-runcard{padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-card-background)}
.dsp-runcard__head{display:flex;align-items:center;gap:var(--space-sm)}
.dsp-runcard__avatar{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  flex-shrink:0;border-radius:50%;background:var(--c-brand-primary);color:var(--c-on-brand);
  font-size:var(--text-caption2);font-weight:700}
.dsp-runcard__who{display:flex;flex-direction:column;min-width:0;flex:1}
.dsp-runcard__name{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary)}
.dsp-runcard__count{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-runcard__go{font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary);text-decoration:none}
.dsp-runcard__go:hover{text-decoration:underline}
.dsp-runstop{display:flex;align-items:flex-start;gap:var(--space-sm);width:100%;padding:var(--space-sm) 0 0;
  border:0;background:none;font-family:inherit;text-align:left;cursor:pointer}
.dsp-runstop__n{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;
  flex-shrink:0;border-radius:50%;color:#fff;font-size:var(--text-caption2);font-weight:700} /* raw-color-ok */
.dsp-runstop__body{display:flex;flex-direction:column;min-width:0}
.dsp-runstop__meta{display:flex;gap:var(--space-xs);font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsp-runstop__tag{font-weight:800;letter-spacing:.35px}
.dsp-runstop__title{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dsp-runstop__where{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.dsp-runstop__where--none{color:var(--c-warning);font-weight:700}

.dsp-picker{display:flex;flex-direction:column}
.dsp-pick{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-sm-md) 0;cursor:pointer}
.dsp-pick + .dsp-pick{border-top:var(--border-fine) solid var(--c-separator)}
.dsp-pick input{width:16px;height:16px;flex-shrink:0}
.dsp-pick__name{flex:1;font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}

/* ── Checklists ─────────────────────────────────────────────────────────
   A ticked step stays legible: struck through but not faded to nothing,
   because the done steps are the evidence somebody wants to read back. */
.cl-steps{margin:0;padding-left:var(--space-xl);font-size:var(--text-subhead);color:var(--c-text-secondary);line-height:1.9}
.cl-done{text-decoration:line-through;color:var(--c-text-tertiary)}

/* ── Calendar ───────────────────────────────────────────────────────────
   Four lanes, one colour source (data/lanes.js → generated theme tokens).
   The key lists EVERY lane including empty ones — a legend that changes
   shape as the week fills is one you re-read every time you look. */
.cal-key{display:flex;flex-wrap:wrap;gap:var(--space-lg);margin-bottom:var(--space-md)}
.cal-key__item{display:inline-flex;align-items:center;gap:var(--space-xs-sm);font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary)}
.cal-key__dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.cal-key__n{font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.cal-nav{display:flex;align-items:center;gap:var(--space-sm-md);margin-bottom:var(--space-md);flex-wrap:wrap}
.cal-nav__label{font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary);margin-right:auto}
.cal-week{display:grid;grid-template-columns:repeat(7,minmax(130px,1fr));gap:var(--border-fine);background:var(--c-separator)}
.cal-day{background:var(--c-card-background);min-height:150px;display:flex;flex-direction:column}
.cal-day--today .cal-day__head{background:var(--c-brand-tint);color:var(--c-brand-pressed)}
.cal-day__head{display:flex;align-items:baseline;gap:var(--space-xs-sm);padding:var(--space-sm) var(--space-sm-md);border-bottom:var(--border-fine) solid var(--c-separator)}
.cal-day__name{font-size:var(--text-caption2);font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--c-text-tertiary)}
.cal-day--today .cal-day__name{color:var(--c-brand-pressed)}
.cal-day__num{font-size:var(--text-subhead);font-weight:700;font-variant-numeric:tabular-nums}
.cal-day__body{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-xs-sm)}
.cal-day__empty{font-size:var(--text-caption);color:var(--c-text-tertiary);padding:var(--space-xs-sm)}
.cal-chip{display:flex;flex-direction:column;align-items:flex-start;gap:1px;width:100%;text-align:left;padding:var(--space-xs-sm);border:none;border-left:3px solid var(--c-separator);background:var(--c-field-fill);border-radius:var(--radius-row);cursor:pointer;font-family:inherit}
.cal-chip:hover{background:var(--c-separator)}
.cal-chip--done{opacity:.55}
.cal-chip__tag{font-size:9.5px;font-weight:700;letter-spacing:.5px}
.cal-chip__title{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary);line-height:1.25}
.cal-chip__time,.cal-chip__who{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* ── Lead hub ───────────────────────────────────────────────────────────
   One hero, never a list: a list is something to triage, and triage is what
   stops people picking up the phone. The funnel shows count as height and
   value underneath, because those two disagree constantly. */
.lead-hero{display:grid;grid-template-columns:1fr auto;gap:var(--space-xxs) var(--space-md);width:100%;text-align:left;padding:var(--space-md) var(--space-lg);margin-bottom:var(--space-lg);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);cursor:pointer;font-family:inherit}
.lead-hero:hover{background:var(--c-field-fill)}
.lead-hero__kicker{grid-column:1;font-size:var(--text-caption2);font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.lead-hero__name{grid-column:1;font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.lead-hero__meta{grid-column:1;font-size:var(--text-caption);color:var(--c-text-secondary)}
.lead-hero__go{grid-column:2;grid-row:1 / span 3;align-self:center;font-size:var(--text-subhead);font-weight:700;color:var(--c-brand-primary);white-space:nowrap}
.lead-flow{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--space-sm);margin-bottom:var(--space-lg)}
.lead-flow__stage{display:flex;flex-direction:column;align-items:center;gap:var(--space-xxs)}
.lead-flow__bar{width:100%;height:44px;display:flex;align-items:flex-end;background:var(--c-field-fill);border-radius:var(--radius-row);overflow:hidden}
.lead-flow__fill{width:100%;border-radius:var(--radius-row)}
.lead-flow__n{font-size:var(--text-subhead);font-weight:700;font-variant-numeric:tabular-nums}
.lead-flow__label{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);text-transform:uppercase;letter-spacing:.4px}
.lead-flow__val{font-size:var(--text-caption2);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}

/* ── Lead routing ───────────────────────────────────────────────────────
   The tester runs the server's own algorithm, so a clashing rule is
   coloured on the rule itself rather than only counted in a warning. */
.sa-tester{padding:var(--space-lg);margin-bottom:var(--space-lg)}
.sa-tester__row{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}
.sa-result{margin-top:var(--space-md)}
.sa-result__box{border:var(--border-fine) solid var(--c-card-border);border-left-width:3px;border-radius:var(--radius-card);padding:var(--space-sm-md) var(--space-lg)}
.sa-result__where{font-size:var(--text-body);font-weight:700;color:var(--c-text-primary)}
.sa-result__why{font-size:var(--text-caption);color:var(--c-text-secondary);margin-top:2px}
.sa-rules{display:flex;flex-wrap:wrap;gap:var(--space-xxs)}
.sa-rule{font-size:var(--text-caption2);font-weight:600;font-variant-numeric:tabular-nums;padding:2px var(--space-sm);border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary)}
.sa-rule--clash{background:var(--c-warning-tint);color:var(--c-warning)}

/* ── Pipeline board ─────────────────────────────────────────────────────
   Columns are the OPEN stages only — a board is for work in flight, and a
   Won column is a trophy cabinet taking up a fifth of the screen. */
.pl-command{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-lg);padding:20px;margin-bottom:var(--space-lg);border-radius:var(--radius-card);background:linear-gradient(135deg,var(--c-brand-pressed),var(--c-brand-primary));color:var(--c-on-brand)}
.pl-command__copy{min-width:0}.pl-command__eyebrow{font-size:var(--text-caption2);font-weight:800;letter-spacing:.8px;opacity:.7}.pl-command__title{font-size:24px;line-height:1.15;margin:4px 0}.pl-command__sub{font-size:var(--text-caption);line-height:1.45;opacity:.78;max-width:680px}.pl-command__actions{display:flex;align-items:flex-start;gap:var(--space-sm)}
.pl-command__actions .btn--ghost{color:var(--c-on-brand);border-color:color-mix(in srgb,var(--c-on-brand) 45%,transparent);background:color-mix(in srgb,var(--c-on-brand) 8%,transparent)}
.pl-command__actions .btn--primary{background:var(--c-on-brand);color:var(--c-brand-pressed)}
.pl-pulse{grid-column:1 / -1;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid color-mix(in srgb,var(--c-on-brand) 20%,transparent);border-bottom:1px solid color-mix(in srgb,var(--c-on-brand) 20%,transparent)}
.pl-pulse__cell{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:12px;border:0;border-right:1px solid color-mix(in srgb,var(--c-on-brand) 20%,transparent);background:none;color:inherit;font:inherit;text-align:left}.pl-pulse__cell:last-child{border-right:0}.pl-pulse button{cursor:pointer}.pl-pulse button:hover{background:color-mix(in srgb,var(--c-on-brand) 8%,transparent)}.pl-pulse__cell strong{font-size:20px;font-variant-numeric:tabular-nums}.pl-pulse__cell span{font-size:var(--text-caption2);opacity:.68}.pl-pulse__cell--risk strong{color:color-mix(in srgb,var(--c-danger) 45%,var(--c-on-brand))}.pl-pulse__cell--warn strong{color:color-mix(in srgb,var(--c-warning) 45%,var(--c-on-brand))}
.pl-next{grid-column:1 / -1;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-sm-md);padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.pl-next span{font-size:var(--text-caption2);font-weight:800;text-transform:uppercase;letter-spacing:.6px;opacity:.62}.pl-next strong{font-size:var(--text-body)}.pl-next em{font-size:var(--text-caption);font-style:normal;font-weight:700}
.pl-board{display:grid;grid-template-columns:repeat(5,minmax(210px,1fr));gap:var(--space-sm);overflow-x:auto;padding-bottom:var(--space-sm)}
.pl-col{background:var(--c-field-fill);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);min-height:320px;display:flex;flex-direction:column}
.pl-col--over{outline:2px solid var(--c-brand-primary);outline-offset:-2px}
.pl-col__head{display:flex;align-items:baseline;gap:var(--space-xs-sm);padding:var(--space-sm-md);border-bottom:var(--border-fine) solid var(--c-separator);flex-wrap:wrap}
.pl-col__name{font-size:var(--text-caption2);font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--c-text-secondary)}
.pl-col__n{font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.pl-col__val{margin-left:auto;font-size:var(--text-caption2);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.pl-col__body{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-xs-sm)}
.pl-col__empty{font-size:var(--text-caption);color:var(--c-text-tertiary);padding:var(--space-xs-sm)}
.pl-card{width:100%;background:var(--c-card-background);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-row);padding:var(--space-sm-md);cursor:grab;text-align:left;font:inherit;color:inherit}
.pl-card:hover{border-color:var(--c-brand-primary)}
.pl-card:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:2px}
.pl-card--dragging{opacity:.4}
.pl-card__top,.pl-card__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.pl-card__name{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary);line-height:1.3}
.pl-card__val{font-size:var(--text-caption2);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.pl-card__meta{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:6px 0 10px}
.pl-card__due{font-size:var(--text-caption2);font-weight:700;margin-top:2px}
.pl-card__due--quiet{color:var(--c-text-tertiary);font-weight:500}.pl-card__open{font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary)}
.pl-call{cursor:pointer}.pl-call:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:-2px}
.pl-map-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(420px,.8fr);align-items:center;gap:var(--space-lg);padding:20px;margin-bottom:var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.pl-map-head__eyebrow{color:var(--c-danger);font-size:var(--text-caption2);font-weight:800;letter-spacing:.8px}.pl-map-head h1{margin:3px 0 5px;color:var(--c-text-primary);font-size:24px;line-height:1.15}.pl-map-head p{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.45}
.pl-map-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-row);overflow:hidden}
.pl-map-stat{display:flex;min-width:0;min-height:82px;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-sm);border-right:1px solid var(--c-separator);text-align:center}.pl-map-stat:last-child{border-right:0}.pl-map-stat strong{max-width:100%;overflow:hidden;color:var(--c-text-primary);font-size:var(--text-body);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.pl-map-stat span,.pl-map-stat small{font-size:var(--text-caption2)}.pl-map-stat span{color:var(--c-text-secondary);font-weight:700}.pl-map-stat small{color:var(--c-text-tertiary)}
.pl-map-tools{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}.pl-map-filters,.pl-map-legend{display:flex;align-items:center;gap:var(--space-xs)}.pl-map-filter{padding:7px var(--space-md);border:0;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}.pl-map-filter--active{background:var(--c-brand-primary);color:var(--c-on-brand)}.pl-map-legend{gap:var(--space-md);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:600}.pl-map-legend span{display:flex;align-items:center;gap:5px}.pl-map-legend i{width:8px;height:8px;border-radius:50%}
.pl-map-card{overflow:hidden}#pl-map-canvas{width:100%;height:520px;background:var(--c-control-fill)}.pl-map-loading,.pl-map-error{display:flex;height:100%;align-items:center;justify-content:center;padding:var(--space-lg);color:var(--c-text-tertiary);font-size:var(--text-footnote);text-align:center}.pl-map-error{color:var(--c-danger)}
.pl-map-unplaced{margin-top:var(--space-md);overflow:hidden}.pl-map-unplaced>.card__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.pl-map-unplaced>button{display:grid;width:100%;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);border:0;border-top:1px solid var(--c-separator);background:transparent;color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}.pl-map-unplaced>button small{overflow:hidden;color:var(--c-text-tertiary);text-overflow:ellipsis;white-space:nowrap}.pl-map-unplaced>button span{color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700}
@media(max-width:760px){.pl-command{grid-template-columns:1fr}.pl-command__actions{grid-row:2}.pl-pulse{grid-template-columns:repeat(2,1fr)}.pl-map-head{grid-template-columns:1fr;padding:var(--space-md)}.pl-map-tools{align-items:flex-start;flex-direction:column}.pl-map-filters{width:100%}.pl-map-filter{flex:1}.pl-map-legend{width:100%;justify-content:space-between}.pl-map-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.pl-map-stat{min-height:76px;padding:var(--space-xs)}#pl-map-canvas{height:420px}.pl-map-unplaced>.card__header{align-items:flex-start;flex-direction:column;gap:var(--space-xs)}.pl-map-unplaced>button{grid-template-columns:minmax(0,1fr) auto}.pl-map-unplaced>button small{grid-column:1 / -1;grid-row:2}}

/* Pipeline parity — Catalyst's outcome hero, four working lanes, ledger and call cockpit. */
.pl-outcome-hero{display:grid;grid-template-columns:minmax(250px,.8fr) minmax(560px,1.6fr);align-items:center;gap:var(--space-xl);margin:var(--space-sm-md) 0 var(--space-sm);padding:var(--space-lg) var(--space-xl);border:1px solid var(--c-money-hairline);border-radius:var(--radius-lg);background:var(--c-money-gradient);color:var(--c-money-ink)}
.pl-outcome-hero__copy h1{margin:0 0 var(--space-xs);font-size:24px;line-height:1.18;color:var(--c-money-ink)}.pl-outcome-hero__copy p{margin:0;color:var(--c-money-dim);font-size:var(--text-subhead);line-height:1.45}
.pl-outcome-hero__metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch}.pl-outcome-hero__metric{display:flex;min-width:0;flex-direction:column;gap:var(--space-xs);padding:0 var(--space-lg)}.pl-outcome-hero__metric:first-child{padding-left:0}.pl-outcome-hero__metric--divided{border-left:1px solid var(--c-money-hairline)}.pl-outcome-hero__metric strong{overflow:hidden;color:var(--c-money-ink);font-size:var(--text-title3);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.pl-outcome-hero__metric span{overflow:hidden;color:var(--c-money-dim);font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap}
#pl-seg{margin-bottom:var(--space-sm);border-bottom:1px solid var(--c-separator)}#pl-seg .seg__tab{display:flex;align-items:center;gap:6px}.pl-seg-icon{color:var(--c-text-tertiary);font-size:12px}
.pl-workbench-head{display:flex;align-items:center;gap:var(--space-md);margin:var(--space-xs) 0 var(--space-sm-md)}.pl-workbench-head>div:first-child{min-width:180px}.pl-workbench-head h2,.pl-list-head h2,.pl-call-head h2{margin:0;color:var(--c-text-primary);font-size:var(--text-title3)}.pl-workbench-head p,.pl-call-head p{margin:2px 0 0;color:var(--c-text-secondary);font-size:var(--text-caption);font-variant-numeric:tabular-nums}.pl-workbench-filters{display:flex;min-width:0;flex:1;align-items:center;justify-content:flex-end;gap:var(--space-sm)}.pl-search{display:flex;min-width:190px;max-width:310px;flex:1;align-items:center;gap:var(--space-xs-sm);height:36px;padding:0 var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-input-fill);color:var(--c-text-tertiary)}.pl-search input{min-width:0;width:100%;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:inherit;font-size:var(--text-caption)}.pl-control{min-height:36px;padding:0 var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-input-fill);color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);cursor:pointer}.pl-secondary-filters{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);margin:-2px 44px var(--space-sm) 0}.pl-filter-clear,.pl-rail-link,.pl-call-book{border:0;background:none;color:var(--c-brand-primary);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}.pl-more-wrap{flex:0 0 auto}.pl-intake{display:flex;align-items:center;gap:var(--space-sm-md);min-height:42px;margin-bottom:var(--space-sm-md);padding:0 var(--space-md);border:1px solid color-mix(in srgb,var(--c-warning) 24%,transparent);border-radius:var(--radius-row);background:color-mix(in srgb,var(--c-warning) 6%,transparent);color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-intake>span{color:var(--c-warning)}.pl-intake button{margin-left:auto;border:0;background:none;color:var(--c-brand-primary);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}
.pl-board{display:grid;grid-template-columns:repeat(4,minmax(224px,1fr)) 158px;align-items:start;gap:var(--space-md);overflow-x:auto;padding-bottom:var(--space-sm)}.pl-col{min-height:340px;border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:color-mix(in srgb,var(--c-input-fill) 52%,transparent)}.pl-col__head{min-height:42px;padding:var(--space-sm) var(--space-md);border:0;border-radius:var(--radius-lg);background:color-mix(in srgb,var(--c-brand-primary) 5%,transparent)}.pl-col__name{color:var(--c-brand-primary);font-size:var(--text-caption);text-transform:none}.pl-col__n{padding:2px 7px;border-radius:var(--radius-pill);background:var(--c-brand-tint);color:var(--c-brand-primary)}.pl-col__body{gap:var(--space-sm);padding:var(--space-sm)}.pl-col__empty{display:flex;min-height:124px;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-md);text-align:center}.pl-col__empty strong{color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-col__empty span{color:var(--c-text-tertiary);font-size:var(--text-caption2);line-height:1.4}.pl-col__add{width:100%;padding:var(--space-xs-sm);border:0;border-radius:var(--radius-row);background:var(--c-brand-tint);color:var(--c-brand-primary);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}
.pl-card{display:block;width:100%;padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-xl);background:var(--c-card-background);color:var(--c-text-primary);cursor:grab;text-align:left}.pl-card--selected{border:1.5px solid var(--c-brand-primary)}.pl-card__top{display:flex;align-items:center;justify-content:flex-start;gap:var(--space-sm)}.pl-card__name{min-width:0;flex:1;overflow:hidden;font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap}.pl-card__val{font-size:var(--text-caption);font-weight:700}.pl-mono{--identity:var(--c-identity-0);display:inline-flex;width:36px;height:36px;flex:0 0 36px;align-items:center;justify-content:center;border-radius:10px;background:var(--identity);color:var(--c-on-identity);font-size:var(--text-caption);font-weight:800}.pl-card__meta{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xs);margin:var(--space-xs-sm) 0 0;color:var(--c-text-tertiary);font-size:var(--text-caption2)}.pl-priority,.pl-repeat{display:inline-flex;padding:2px 7px;border-radius:var(--radius-pill);font-size:10px;font-weight:800}.pl-priority--hot{background:color-mix(in srgb,var(--c-danger) 12%,transparent);color:var(--c-danger)}.pl-priority--warm{background:color-mix(in srgb,var(--c-warning) 12%,transparent);color:var(--c-warning)}.pl-priority--cold{background:color-mix(in srgb,var(--c-info) 12%,transparent);color:var(--c-info)}.pl-repeat{background:var(--c-brand-tint);color:var(--c-brand-primary)}.pl-card__story{margin-top:var(--space-xs);overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption2);text-overflow:ellipsis;white-space:nowrap}.pl-card__story--alarm{color:var(--c-danger)}.pl-card__move{width:100%;min-height:32px;margin-top:var(--space-sm);border:0;border-radius:var(--radius-control);color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}.pl-card__move--brand{background:var(--c-brand-primary)}.pl-card__move--danger{background:var(--c-danger)}.pl-card__move--warning{background:var(--c-warning)}.pl-select-dot{display:inline-flex;width:20px;height:20px;flex:0 0 20px;align-items:center;justify-content:center;border:1.5px solid var(--c-brand-primary);border-radius:50%;color:var(--c-brand-primary);font-size:11px;font-weight:800}
.pl-outcome-rail{display:flex;min-width:138px;flex-direction:column;gap:var(--space-md)}.pl-outcome-rail>strong{padding:0 var(--space-xs);color:var(--c-brand-primary);font-size:var(--text-caption);white-space:nowrap}.pl-outcome-zone{display:flex;min-height:110px;flex-direction:column;align-items:center;justify-content:center;gap:2px;border:1.2px dashed currentColor;border-radius:var(--radius-lg);background:transparent;font:inherit;cursor:pointer}.pl-outcome-zone span{font-size:18px}.pl-outcome-zone b{font-size:var(--text-caption)}.pl-outcome-zone small,.pl-outcome-zone em{font-size:var(--text-caption2);font-style:normal}.pl-outcome-zone--won{background:color-mix(in srgb,var(--c-success) 10%,transparent);color:var(--c-success)}.pl-outcome-zone--lost{background:color-mix(in srgb,var(--c-text-tertiary) 6%,transparent);color:var(--c-text-tertiary)}.pl-outcome-zone--over{outline:2px solid currentColor;outline-offset:2px}.pl-lost-reasons{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}
.pl-list-head{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-xs) 0 var(--space-md)}.pl-list-head__title{display:flex;align-items:center;gap:var(--space-sm)}.pl-list-head__title>span{color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:700}.pl-list-head__title .pl-more-wrap{margin-left:auto}.pl-stage-river{display:grid;grid-template-columns:repeat(7,minmax(86px,1fr));overflow-x:auto}.pl-stage-cell{display:flex;min-height:54px;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-xs);border:0;border-right:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator);background:transparent;color:var(--c-text-tertiary);font:inherit;cursor:pointer}.pl-stage-cell:last-child{border-right:0}.pl-stage-cell strong{color:var(--c-text-primary);font-size:var(--text-subhead);font-variant-numeric:tabular-nums}.pl-stage-cell--on{border-bottom:2px solid var(--c-brand-primary);color:var(--c-brand-primary)}.pl-stage-cell--on strong{color:var(--c-brand-primary)}.pl-list-workspace{display:grid;grid-template-columns:minmax(0,1fr) 340px;margin:0 calc(var(--space-md) * -1);border-top:1px solid var(--c-separator)}.pl-list-card{border:0;border-radius:0;background:transparent}.pl-list-table{table-layout:fixed}.pl-list-table th:first-child{width:32%}.pl-list-table th:nth-child(2){width:31%;text-align:right}.pl-list-table th:nth-child(3){width:15%;text-align:right}.pl-list-table th:last-child{text-align:right}.pl-list-table td{height:64px}.pl-person{display:flex;min-width:0;align-items:center;gap:var(--space-sm)}.pl-person>span:nth-of-type(2){min-width:0;display:flex;flex:1;flex-direction:column}.pl-person small,.pl-flow-cell small{overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption2);text-overflow:ellipsis;white-space:nowrap}.pl-flow-cell{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.pl-flow-dots{display:flex;gap:4px}.pl-flow-dots i{width:7px;height:7px;border-radius:50%;background:var(--c-card-border)}.pl-flow-dots i.done{background:var(--c-success)}.pl-flow-dots i.current{background:var(--c-warning);box-shadow:0 0 0 3px color-mix(in srgb,var(--c-warning) 25%,transparent)}.pl-flow-cell small.alarm{color:var(--c-danger)}.pl-value-cell,.pl-next-cell{text-align:right}.pl-value-cell strong{font-variant-numeric:tabular-nums}.pl-value-cell button{padding:2px var(--space-sm);border:1px dashed var(--c-brand-primary);border-radius:var(--radius-pill);background:none;color:var(--c-brand-primary);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}.pl-next-pill{padding:var(--space-xs-sm) var(--space-md);border:0;border-radius:var(--radius-pill);background:var(--c-brand-primary);color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}.pl-next-pill--danger{background:var(--c-danger)}.pl-book-chips{display:flex;justify-content:flex-end;gap:4px}.pl-book-chips button{padding:6px var(--space-sm);border:1px solid color-mix(in srgb,var(--c-warning) 45%,transparent);border-radius:var(--radius-pill);background:transparent;color:var(--c-warning);font:inherit;font-size:10px;font-weight:700;cursor:pointer}.pl-book-chips button:first-child{border-color:var(--c-warning);background:var(--c-warning);color:var(--c-on-brand)}.pl-converted{color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700}.lead-row--selected{background:var(--c-brand-tint)}
.pl-compact-list{display:none}.pl-compact-lead{position:relative;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background)}.pl-compact-lead::before{content:'';position:absolute;inset:0 auto 0 0;width:3px;background:var(--c-text-tertiary)}.pl-compact-lead[data-status="new"]::before{background:var(--c-accent-blue)}.pl-compact-lead[data-status="contacted"]::before{background:var(--c-accent-indigo)}.pl-compact-lead[data-status="qualified"]::before{background:var(--c-warning)}.pl-compact-lead[data-status="proposal"]::before,.pl-compact-lead[data-status="negotiation"]::before{background:var(--c-brand-primary)}.pl-compact-lead[data-status="won"]::before{background:var(--c-success)}.pl-compact-lead[data-status="lost"]::before{background:var(--c-danger)}.pl-compact-lead[data-selected="true"]{border-color:color-mix(in srgb,var(--c-brand-primary) 36%,var(--c-card-border));background:var(--c-brand-tint)}.pl-compact-open{display:flex;width:100%;min-width:0;align-items:center;gap:var(--space-sm-md);padding:var(--space-md) var(--space-md) var(--space-md) var(--space-lg);border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.pl-compact-lead__copy{display:flex;min-width:0;flex:1;flex-direction:column;gap:5px}.pl-compact-lead__identity{display:flex;min-width:0;align-items:center;gap:var(--space-xs-sm)}.pl-compact-lead__identity>strong{overflow:hidden;min-width:0;color:var(--c-text-primary);font-size:var(--text-subhead);text-overflow:ellipsis;white-space:nowrap}.pl-compact-status{margin-left:auto;padding:3px var(--space-sm);border-radius:var(--radius-pill);background:var(--c-control-fill);color:var(--c-text-secondary);font-size:10px;font-weight:750}.pl-compact-lead__meta{display:flex;min-width:0;align-items:center;gap:var(--space-xs);overflow:hidden;color:var(--c-text-secondary);font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap}.pl-compact-lead__meta b{margin-left:auto;color:var(--c-text-primary);font-size:var(--text-caption);font-variant-numeric:tabular-nums}
.pl-summary-rail{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md) var(--space-lg);border-left:1px solid var(--c-separator)}.pl-rail-card{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg)}.pl-rail-card__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm)}.pl-rail-card__head span{font-size:var(--text-caption);font-weight:700}.pl-rail-card .danger{color:var(--c-danger)}.pl-rail-card .warning{color:var(--c-warning)}.pl-rail-card .good{color:var(--c-brand-primary)}.pl-rail-person{display:flex;gap:var(--space-sm-md);padding-top:var(--space-sm);border-top:1px solid var(--c-separator)}.pl-rail-person>span:last-child{display:flex;min-width:0;flex-direction:column;gap:2px}.pl-rail-person small,.pl-rail-person em,.pl-rail-card p,.pl-rail-ok span{font-size:var(--text-caption);font-style:normal}.pl-rail-person em{color:var(--c-text-secondary);font-weight:700}.pl-rail-cta{width:100%}.pl-rail-ok{display:flex;flex-direction:column;gap:var(--space-xs)}.pl-rail-ok strong{color:var(--c-brand-primary)}.pl-forecast-bar{display:flex;height:12px;overflow:hidden;border-radius:var(--radius-sm);background:var(--c-control-fill)}.pl-forecast-bar i:first-child{background:var(--c-brand-pressed)}.pl-forecast-bar i:nth-child(2){background:color-mix(in srgb,var(--c-success) 65%,transparent)}.pl-forecast-values{display:flex;gap:var(--space-sm)}.pl-forecast-values>span{display:flex;min-width:0;flex:1;flex-direction:column}.pl-forecast-values small{color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-rail-link{text-align:left}
.pl-call-head{display:grid;grid-template-columns:minmax(220px,1fr) 180px 280px 40px;align-items:center;gap:var(--space-lg);padding:var(--space-sm) 0 var(--space-md)}.pl-call-progress{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-call-progress i{height:5px;overflow:hidden;border-radius:var(--radius-pill);background:var(--c-control-fill)}.pl-call-progress b{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}.pl-call-workbench{display:grid;grid-template-columns:370px minmax(0,1fr);gap:var(--space-md);align-items:start}.pl-call-queue,.pl-call-focus{min-height:430px;padding:var(--space-lg)}.pl-call-queue h3,.pl-call-outcomes h3{margin:0;color:var(--c-text-primary);font-size:var(--text-subhead)}.pl-call-filters{display:flex;gap:var(--space-xs);margin:var(--space-md) 0}.pl-call-filters button{padding:var(--space-xs-sm) var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-pill);background:var(--c-card-background);color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);cursor:pointer}.pl-call-filters button.on{border-color:color-mix(in srgb,var(--c-brand-primary) 38%,transparent);background:var(--c-brand-tint);color:var(--c-text-primary)}.pl-call-filters span{color:var(--c-text-tertiary)}.pl-call-list{display:flex;flex-direction:column;gap:var(--space-sm)}.pl-call{display:flex;width:100%;align-items:center;gap:var(--space-sm-md);padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}.pl-call--selected{border:1.5px solid color-mix(in srgb,var(--c-brand-primary) 75%,transparent);background:color-mix(in srgb,var(--c-brand-primary) 5.5%,transparent)}.pl-call>span:nth-child(2){display:flex;min-width:0;flex:1;flex-direction:column}.pl-call small{color:var(--c-text-secondary);font-size:var(--text-caption2)}.pl-call-status--danger{color:var(--c-danger)!important}.pl-call-status--warning{color:var(--c-warning)!important}.pl-call-value{display:flex;flex-direction:column;align-items:flex-end;color:var(--c-brand-primary)}.pl-call-value strong{font-size:var(--text-caption);font-variant-numeric:tabular-nums}.pl-call-age{color:var(--c-text-tertiary)!important}.pl-call-focus{display:flex;flex-direction:column;gap:var(--space-lg)}.pl-call-focus__kicker{color:var(--c-text-tertiary);font-size:9px;font-weight:800;letter-spacing:1px}.pl-call-identity{display:flex;width:100%;align-items:center;gap:var(--space-md);padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.pl-call-identity>span:nth-child(2){display:flex;min-width:0;flex:1;flex-direction:column}.pl-call-identity>span:nth-child(2)>strong{font-size:var(--text-title3)}.pl-call-identity small{color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-call-focus__value{display:flex;flex-direction:column;align-items:flex-end}.pl-call-focus__value strong{color:var(--c-brand-primary);font-size:var(--text-title2);font-variant-numeric:tabular-nums}.pl-call-context{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.pl-call-context>span{display:grid;grid-template-columns:24px 1fr;gap:2px var(--space-sm);min-height:62px;padding:var(--space-md);border:1px solid color-mix(in srgb,var(--c-input-border) 65%,transparent);border-radius:var(--radius-row);background:var(--c-input-fill)}.pl-call-context b{grid-row:1 / 3;color:var(--c-text-secondary)}.pl-call-context small{color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-call-context strong{font-size:var(--text-caption)}.pl-call-actions{display:grid;grid-template-columns:minmax(150px,1fr) minmax(120px,1fr) auto;gap:var(--space-sm)}.pl-call-actions .btn{width:100%;justify-content:center}.pl-call-book{grid-column:1 / -1;text-align:left}.pl-call-skip{width:48px;border:1px solid var(--c-input-border);border-radius:var(--radius-row);background:transparent;color:var(--c-text-secondary);font:inherit;cursor:pointer}.pl-call-outcomes{display:flex;flex-direction:column;gap:var(--space-sm)}.pl-call-outcomes>div{display:grid;grid-template-columns:repeat(2,minmax(145px,1fr));gap:var(--space-sm)}.pl-call-outcomes button{padding:var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);cursor:pointer}.pl-call-outcomes p{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption)}.pl-call-nav{display:flex;align-items:center;justify-content:space-between;padding-top:var(--space-md);border-top:1px solid var(--c-card-border);color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-call-nav button{border:0;background:none;color:inherit;font:inherit;cursor:pointer}.pl-call-nav button:disabled{color:var(--c-text-tertiary);cursor:default}.pl-call-none{display:flex;min-height:220px;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);color:var(--c-text-secondary);text-align:center}
.pl-bulk{position:sticky;z-index:12;bottom:var(--space-md);display:flex;align-items:center;gap:var(--space-md);margin:var(--space-lg);padding:var(--space-sm-md) var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:color-mix(in srgb,var(--c-card-background) 92%,transparent);box-shadow:var(--shadow-overlay);backdrop-filter:blur(16px)}.pl-bulk label{display:flex;align-items:center;gap:var(--space-xs);color:var(--c-text-secondary);font-size:var(--text-caption)}.pl-bulk button,.pl-bulk select{min-height:32px;padding:0 var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-row);background:var(--c-input-fill);color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);cursor:pointer}.pl-bulk [data-pl-bulk-delete]{color:var(--c-danger)}.pl-bulk [data-pl-bulk-done]{margin-left:auto;color:var(--c-brand-primary)}
@media(max-width:1180px){.pl-outcome-hero{grid-template-columns:1fr}.pl-board{grid-template-columns:repeat(4,224px) 150px}.pl-list-workspace{grid-template-columns:1fr}.pl-summary-rail{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--c-separator);border-left:0}.pl-call-head{grid-template-columns:1fr 180px 250px auto}.pl-call-workbench{grid-template-columns:330px minmax(0,1fr)}}
@media(max-width:820px){.pl-outcome-hero__metrics{grid-template-columns:1fr 1fr;gap:var(--space-md)}.pl-outcome-hero__metric:nth-child(3){border-left:0}.pl-workbench-head{align-items:flex-start;flex-wrap:wrap}.pl-workbench-filters{width:100%;flex-wrap:wrap;justify-content:flex-start}.pl-search{max-width:none}.pl-summary-rail{grid-template-columns:1fr}.pl-call-head{grid-template-columns:1fr auto}.pl-call-progress{grid-column:1}.pl-call-head .pl-search{grid-column:1 / -1}.pl-call-workbench{grid-template-columns:1fr}.pl-call-context{grid-template-columns:1fr}.pl-list-wide{display:none}.pl-compact-list{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md)}}

/* ── Social deliveries ──────────────────────────────────────────────────
   Per platform, what actually happened. A post can be "published" while one
   platform failed — one badge over the top of that is how a business
   believes it posted for a month and did not. */
.sp-deliveries{display:flex;flex-wrap:wrap;gap:var(--space-xxs)}
/* A delivery pill that is also a link — 21px, so it is a control under the floor rather than a
   label that happens to be small. */
.sp-del{display:inline-flex;align-items:center;min-height:24px;font-size:var(--text-caption2);font-weight:600;padding:2px var(--space-sm);border-radius:var(--radius-pill);text-decoration:none}
.sp-del--ok{background:var(--c-brand-tint);color:var(--c-brand-pressed)}
.sp-del--warn{background:var(--c-warning-tint);color:var(--c-warning)}
.sp-del--bad{background:var(--c-danger-tint);color:var(--c-danger)}
.sp-del--quiet{background:var(--c-field-fill);color:var(--c-text-secondary)}
.sp-del--untracked{background:var(--c-field-fill);color:var(--c-text-tertiary);font-weight:400}
a.sp-del:hover{text-decoration:underline}

/* ── Misclassification signals ──────────────────────────────────────────
   Listed in full rather than summarised to a score: the score is a prompt,
   and the factors are what somebody actually discusses with an accountant. */
.mc-factors{margin:0;padding-left:var(--space-lg);font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.6}

/* ── Inbox (Pipeline → Inbox) ─────────────────────────────────────────────
   Two columns: the conversations, and the one you're in. Same hairlines and card
   surface as everything else — a message thread is not a different product. */
.ib { display: grid; grid-template-columns: minmax(220px, 300px) 1fr; gap: 16px; align-items: start; }
@media (max-width: 820px) { .ib { grid-template-columns: 1fr; } }
.ib-list { display: flex; flex-direction: column; gap: 4px; max-height: 70vh; overflow-y: auto; }
.ib-thread { text-align: left; background: var(--c-surface); border: 1px solid var(--c-card-border);
  border-radius: var(--d-radius-sm); padding: 10px 12px; cursor: pointer; font: inherit; }
.ib-thread:hover { border-color: var(--d-green); }
.ib-thread--active { border-color: var(--d-green); background: var(--d-green-light); }
.ib-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-lg);padding:18px 20px;margin-bottom:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.ib-head__eyebrow{font-size:var(--text-caption2);font-weight:800;letter-spacing:.7px;color:var(--c-brand-primary)}.ib-head h1{font-size:22px;margin:3px 0}.ib-head p{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ib-head__facts{display:grid;grid-template-columns:repeat(3,auto);gap:18px;text-align:center}.ib-head__fact{display:flex;flex-direction:column;gap:1px}.ib-head__facts strong{font-size:20px;font-variant-numeric:tabular-nums}.ib-head__facts span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ib-person{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:12px 14px;border:1px solid var(--c-card-border);border-bottom:0;border-radius:var(--radius-card) var(--radius-card) 0 0;background:var(--c-card-background)}.ib-person>div{display:flex;flex-direction:column}.ib-person strong{font-size:var(--text-body)}.ib-person span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}.ib-unmatched{font-weight:700;color:var(--c-warning)!important}
@media(max-width:760px){.ib-head{align-items:flex-start;flex-direction:column}.ib-head__facts{width:100%}}
.ib-thread__top { display: flex; align-items: center; gap: 8px; }
.ib-thread__name { font-weight: 700; font-size: 13px; flex: 1; }
.ib-thread__unread { background: var(--c-danger); color: var(--c-on-brand); font-size: 11px; font-weight: 700;
  border-radius: 999px; padding: 1px 7px; }
/* The server's name-hint on an unmatched thread — one tap instead of a 500-row search. */
.ib-suggest { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  flex-wrap: wrap; padding: 10px 12px; margin-bottom: 12px; border-radius: 8px;
  background: var(--d-bg-2); border: 1px solid var(--d-border-light); }
.ib-suggest__why { margin: 0; font-size: 12px; color: var(--d-text-2); }

.ib-thread__last { font-size: 12px; color: var(--d-text-2); margin-top: 2px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ib-thread__meta { font-size: 11px; color: var(--d-text-3); margin-top: 2px; }
.ib-panel { background: var(--c-surface); border: 1px solid var(--c-card-border);
  border-radius: var(--d-radius-sm); padding: 14px; }
.ib-convo { display: flex; flex-direction: column; gap: 8px; max-height: 58vh; overflow-y: auto; padding-right: 4px; }
.msg { max-width: 78%; padding: 9px 12px; border-radius: 14px; font-size: 13px; }
.msg--theirs { align-self: flex-start; background: var(--c-control-fill); border-bottom-left-radius: 5px; }
.msg--ours { align-self: flex-end; background: var(--d-green-light); border-bottom-right-radius: 5px; }
.msg__meta { font-size: 11px; color: var(--d-text-3); margin-top: 3px; }
.ib-composer { display: flex; gap: 8px; align-items: flex-end; margin-top: 12px;
  border-top: 1px solid var(--c-card-border); padding-top: 12px; }
.ib-composer textarea { flex: 1; }
.ib-stopped { margin-top: 12px; border-top: 1px solid var(--c-card-border); padding-top: 12px;
  font-size: 12.5px; color: var(--d-text-2); }

/* ── The record's named move (C6f) ────────────────────────────────────────
   A hub that only states facts asks the reader to work out what to do. This is
   the answer, at the top of the rail, and it shouts only when money is owed. */
.record__move { background: var(--c-control-fill); border-radius: var(--d-radius-sm);
  padding: 12px 13px; margin-bottom: var(--space-md); }
.record__move--owed { background: var(--c-warning-tint);
  border: 1px solid var(--c-warning); }
.record__move-text { font-size: 13px; line-height: 1.5; color: var(--d-text-2); }
.record__move-text strong { color: var(--d-text); font-weight: 700; }
.record__move-cta { margin-top: 10px; width: 100%; }
/* An approved change nobody billed — the quiet money-loser, so it reads as owed. */
.co-card__acts--owed { background: var(--c-warning-tint); border-radius: var(--d-radius-sm);
  padding: 10px 12px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.co-card__move { font-size: 13px; color: var(--d-text-2); flex: 1; }
.co-card__move strong { color: var(--d-text); font-weight: 700; }

/* ── Do it here: inline quick-add (C6g) ───────────────────────────────────
   Under the section whose list it feeds — "actions live where their output
   lands". A modal over the record you are reading loses the record. */
.qa { margin-top: 10px; }
.qa__open { display: inline-flex; align-items: center; gap: 7px; background: none; border: 0;
  font: inherit; font-size: 13px; font-weight: 600; color: var(--c-brand-primary);
  cursor: pointer; padding: 4px 0; }
.qa__open:hover { text-decoration: underline; }
/* ⚠️ `display` on a CLASS beats the user-agent's `[hidden] { display: none }`, so `.qa__form`'s own
   `display: flex` was quietly cancelling the `hidden` attribute the component sets — every collapsed
   quick-add on the site rendered EXPANDED, which is what made the job hub look like a form. Any rule
   below that gives a display to something JS hides with `hidden` needs the same line. */
.qa__form[hidden] { display: none; }
.qa__plus { display: inline-grid; place-items: center; width: 18px; height: 18px; border-radius: 50%;
  background: var(--c-brand-tint); font-weight: 700; line-height: 1; }
.qa__form { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-end;
  background: var(--c-control-fill); border-radius: var(--d-radius-sm); padding: 12px; }
.qa__field { display: flex; flex-direction: column; gap: 4px; flex: 1 1 160px; min-width: 0; }
.qa__label { font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--d-text-3); }
.qa__acts { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.qa__more { background: none; border: 0; font: inherit; font-size: 12px; color: var(--d-text-3);
  cursor: pointer; text-decoration: underline; }
.qa__error { flex: 1 0 100%; font-size: 12px; color: var(--c-danger); }
/* The customer's activity log — what was said, where it will be read. */
.cd-activity { padding: 10px 0; border-bottom: 1px solid var(--c-separator); }
.cd-activity:last-of-type { border-bottom: none; }
.cd-activity__what { font-size: 13px; color: var(--d-text); }
.cd-activity__when { font-size: 11.5px; color: var(--d-text-3); margin-top: 2px; }
.cd-meta { margin-top: 14px; font-size: 12px; color: var(--d-text-3); }
/* A merged queue row says what ELSE the thing needs (C6d) — one card, every move. */
.pri-item__also { display: block; font-size: 11px; color: var(--d-text-3); margin-top: 2px; }

/* ── JOBS · LIST lens (C6b) ─────────────────────────────────────────────────
   Bands, not columns: what a job needs from you, alarm-first. The band's colour is a hairline on
   its left edge — a full-colour header would make eight bands read as eight products. */
.jl-band { margin-bottom: 18px; }
.jl-band__head {
  display: flex; align-items: baseline; gap: 10px;
  padding: 0 0 6px 10px; border-left: 2px solid var(--d-border);
}
.jl-band--danger .jl-band__head { border-left-color: var(--c-danger); }
.jl-band--warn   .jl-band__head { border-left-color: var(--c-warning); }
.jl-band--brand  .jl-band__head { border-left-color: var(--c-brand-primary); }
.jl-band--teal   .jl-band__head { border-left-color: var(--c-accent-teal); }
.jl-band--blue   .jl-band__head { border-left-color: var(--c-accent-blue); }
.jl-band--indigo .jl-band__head { border-left-color: var(--c-accent-indigo); }
.jl-band--pink   .jl-band__head { border-left-color: var(--c-accent-pink); }
.jl-band__title { font-size: 11px; font-weight: 700; letter-spacing: .08em; color: var(--d-text-2); }
.jl-band__n { font-size: 11px; color: var(--d-text-3); font-variant-numeric: tabular-nums; }
/* The verdict is the sentence the band is really about, so it gets the room the count doesn't. */
.jl-band__verdict { margin-left: auto; font-size: 12px; color: var(--d-text-2); }
.jl-band--danger .jl-band__verdict { color: var(--c-danger); }
.jl-band--warn   .jl-band__verdict { color: var(--c-warning); }
.jl-band__rows { border: 1px solid var(--d-border); border-radius: 10px; overflow: hidden; background: var(--c-surface); }
.jl-band__more { padding: 6px 12px; font-size: 11px; color: var(--d-text-3); }

.jl-row {
  display: flex; align-items: center; gap: 12px; width: 100%;
  padding: 10px 14px; background: none; border: 0; border-bottom: 1px solid var(--d-border);
  text-align: left; cursor: pointer; color: inherit;
}
.jl-row:last-child { border-bottom: 0; }
.jl-row:hover { background: var(--c-field-fill); }
.jl-row__main { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.jl-row__title { font-size: 13px; font-weight: 600; color: var(--d-text); }
.jl-row__who { font-size: 12px; color: var(--d-text-3); }
.jl-row__meta { display: flex; align-items: center; gap: 10px; font-size: 11px; color: var(--d-text-3); }
.jl-row__when { font-variant-numeric: tabular-nums; }
.jl-row__crew--none { color: var(--c-warning); }
.jl-row__amount { font-size: 13px; font-variant-numeric: tabular-nums; color: var(--d-text); min-width: 84px; text-align: right; }

/* ── JOBS · MONTH lens (C6b) ────────────────────────────────────────────────
   Capacity heat, installs only: a day of sales calls is not a day of committed crew, and colouring
   it as one is how you overpromise a date. */
.jm-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.jm-dow { font-size: 10px; font-weight: 700; letter-spacing: .06em; color: var(--d-text-3); padding: 2px 4px; }
.jm-cell {
  min-height: 92px; padding: 5px; border: 1px solid var(--d-border); border-radius: 8px;
  background: var(--c-surface); display: flex; flex-direction: column; gap: 3px; cursor: pointer;
}
.jm-cell--out { opacity: .45; border-color: transparent; }
.jm-cell--today { border-color: var(--c-brand-primary); border-width: 2px; }
.jm-cell--some { background: color-mix(in srgb, var(--c-brand-primary) 5%, var(--c-surface)); }
.jm-cell--full { background: color-mix(in srgb, var(--c-brand-primary) 11%, var(--c-surface)); }
.jm-cell__head { display: flex; align-items: center; justify-content: space-between; }
.jm-cell__num { font-size: 11px; font-variant-numeric: tabular-nums; color: var(--d-text-2); }
.jm-cell__n { font-size: 9px; font-weight: 700; color: var(--c-brand-primary); }
.jm-cell__more { font-size: 9px; color: var(--d-text-3); }
.jm-chip {
  display: block; font-size: 10px; line-height: 1.3; padding: 2px 4px; border-radius: 4px;
  border-left: 2px solid var(--c-brand-primary); background: var(--c-field-fill);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.jm-chip--visit { background: transparent; }

/* ── MOVE THE MONEY (C6c) ───────────────────────────────────────────────────
   The queue leads the AR page; the aging follows it. A page that opens on buckets answers "how bad
   is it" — which is not the question anybody opens an AR page to ask. */
.ar-moves { margin-bottom: 14px; }
.ar-moves__head { display: flex; align-items: baseline; gap: 8px; padding: 0 2px 6px; }
.ar-moves__title { font-size: 13px; font-weight: 600; color: var(--d-text); }
.ar-moves__hint { font-size: 11px; color: var(--d-text-3); }
.ar-moves__rows { border: 1px solid var(--d-border); border-radius: 10px; overflow: hidden; background: var(--c-surface); }
.ar-move {
  display: flex; align-items: center; gap: 12px; width: 100%;
  padding: 11px 14px; background: none; border: 0; border-bottom: 1px solid var(--d-border);
  text-align: left; cursor: pointer; color: inherit;
}
.ar-move:last-child { border-bottom: 0; }
.ar-move:hover { background: var(--c-field-fill); }
.ar-move__rank {
  flex: 0 0 22px; height: 22px; border-radius: 50%; background: var(--c-field-fill);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700; color: var(--d-text-2); font-variant-numeric: tabular-nums;
}
.ar-move__text { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
.ar-move__title { font-size: 13px; font-weight: 600; color: var(--d-text); }
.ar-move__sub { font-size: 11px; color: var(--d-text-3); }
.ar-move__amt { font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; }
.ar-move--brand  .ar-move__amt { color: var(--c-brand-primary); }
.ar-move--warn   .ar-move__amt { color: var(--c-warning); }
.ar-move--danger .ar-move__amt { color: var(--c-danger); }
.ar-move__cta {
  font-size: 11px; font-weight: 600; padding: 4px 10px; border-radius: 6px;
  background: var(--c-field-fill); color: var(--d-text-2); white-space: nowrap;
}
.ar-move--brand  .ar-move__cta { background: var(--c-brand-tint);  color: var(--c-brand-primary); }
.ar-move--warn   .ar-move__cta { background: var(--c-warning-tint); color: var(--c-warning); }
.ar-move--danger .ar-move__cta { background: var(--c-danger-tint);  color: var(--c-danger); }

/* ── PRICE BOOK (C1) ────────────────────────────────────────────────────────
   A wide grid of numbers is the point: a price book is read across, comparing tiers on one row. */
.pb-grid { display: grid; grid-template-columns: 2fr 1fr 1fr auto; gap: 14px; align-items: end; }
.pb-version { font-size: 11px; color: var(--d-text-3); font-variant-numeric: tabular-nums; }
.pb-check { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--d-text-2); padding-bottom: 8px; }
.pb-table td { padding: 4px 8px; }
.pb-table .form-input--bare {
  border: 1px solid transparent; background: none; padding: 5px 7px; width: 100%;
  font-size: 13px; color: var(--d-text);
}
.pb-table .form-input--bare:hover { border-color: var(--d-border); }
.pb-table .form-input--bare:focus { border-color: var(--c-brand-primary); background: var(--c-surface); }
.pb-num { text-align: right; font-variant-numeric: tabular-nums; }
.pb-unit { max-width: 90px; }
/* An inactive item still prices what was already estimated, so it is dimmed rather than hidden. */
.pb-row--off { opacity: .55; }
.pb-empty { padding: 18px; text-align: center; color: var(--d-text-3); font-size: 13px; }
.pb-was { font-variant-numeric: tabular-nums; color: var(--d-text-2); }
@media (max-width: 900px) { .pb-grid { grid-template-columns: 1fr; } }

/* ── INTEGRATIONS (C2) ──────────────────────────────────────────────────────
   One card per connector, grouped exactly as the app groups them, so the same screen learned once
   reads the same twice. */
.int-section {
  font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--d-text-3); margin: 20px 2px 8px;
}
.int-blurb { font-size: 13px; color: var(--d-text-3); margin-bottom: 12px; }
.int-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.int-badge {
  font-size: 11px; font-weight: 600; color: var(--d-text-3);
  background: var(--c-field-fill); border: 1px solid var(--d-border);
  border-radius: 20px; padding: 3px 10px;
}
.int-badge[data-tone="ok"]     { color: var(--c-success); background: var(--c-success-tint); border-color: var(--c-success-tint); }
.int-badge[data-tone="warn"]   { color: var(--c-warning); background: var(--c-warning-tint); border-color: var(--c-warning-tint); }
.int-badge[data-tone="danger"] { color: var(--c-danger);  background: var(--c-danger-tint);  border-color: var(--c-danger-tint); }
/* Naming what the web deliberately does NOT do is part of the contract, not an apology for it. */
.int-native { background: var(--c-field-fill); }
.int-native .card__body { font-size: 13px; color: var(--d-text-2); }

/* The summary hero — `summaryHeader`, IntegrationsView+Helpers. `Theme.Palette.Drawing.gradient`
   is already tokenised as --c-drawing-gradient, so the two surfaces share one ground. */
.int-hero {
  display: flex; align-items: center; gap: 28px; flex-wrap: wrap;
  padding: 24px; margin-bottom: 4px;
  background: var(--c-drawing-gradient); border-radius: var(--d-radius);
}
.int-hero__copy { flex: 1 1 320px; min-width: 260px; }
.int-hero__kicker {
  display: block; font-size: 11px; font-weight: 700; letter-spacing: .12em;
  color: var(--c-drawing-dim); margin-bottom: 8px;
}
.int-hero__copy h2 { font-size: 20px; font-weight: 800; color: var(--c-drawing-ink); margin: 0 0 8px; }
.int-hero__copy p { font-size: 13px; line-height: 1.5; color: var(--c-drawing-dim); margin: 0; max-width: 60ch; }
.int-hero__metrics {
  display: flex; align-items: center; padding: 12px 0;
  background: var(--c-drawing-soft-fill); border-radius: var(--d-radius);
}
.int-metric { display: flex; flex-direction: column; gap: 4px; min-width: 100px; padding: 0 16px; }
.int-metric__value {
  display: flex; align-items: center; gap: 6px;
  font-size: 19px; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--c-drawing-ink);
}
.int-metric__value svg { width: 13px; height: 13px; flex-shrink: 0; }
.int-metric[data-tone="ok"]   .int-metric__value svg { color: var(--int-hero-ok); }
.int-metric[data-tone="warn"] .int-metric__value svg { color: var(--int-hero-warn); }
.int-metric[data-tone="plain"] .int-metric__value svg { color: var(--c-drawing-dim); }
.int-metric__label { font-size: 11px; font-weight: 600; letter-spacing: .04em; color: var(--c-drawing-dim); }
.int-metric__rule { width: 1px; height: 54px; background: var(--c-drawing-hairline); }
:root { --int-hero-ok: #b9f4c4; --int-hero-warn: #ffd37a; } /* raw-color-ok — frozen Catalyst hero metric palette */

/* The blurb Catalyst puts under every card title. The two hosted panels (Stripe, QuickBooks) own
   their own body, so theirs sits between the header and the body rather than inside it. */
.int-blurb--hosted { padding: 14px 20px 0; margin-bottom: 0; }

/* `benefitsList(_:)` — a checkmark and a line, the same on every card. */
.int-benefits { list-style: none; margin: 0 0 14px; padding: 0; display: grid; gap: 8px; }
.int-benefits li {
  position: relative; padding-left: 22px; font-size: 13px; color: var(--d-text); line-height: 1.4;
}
.int-benefits li::before {
  content: '✓'; position: absolute; left: 0; top: 0;
  font-weight: 700; color: var(--c-success);
}

/* `setupBadge(_:)` — the "~2 min" / "~5 min" clock pill beside a connect button. */
.int-setup {
  font-size: 11px; font-weight: 600; color: var(--d-text-3);
  background: var(--c-field-fill); border-radius: 20px; padding: 4px 10px; white-space: nowrap;
}

/* `accountChip(_:)` — which account this connection actually belongs to. */
.int-chip {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 600; color: var(--d-text);
  background: var(--c-brand-tint); border-radius: 20px; padding: 4px 12px;
}
.int-chip::before { content: '✓'; color: var(--c-brand-pressed); font-weight: 700; }

.int-row { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.int-row__spacer { flex: 1; }

/* `disconnectPill(_:)` — destructive, and never a bare "•••". */
.int-disconnect {
  font-size: 11px; font-weight: 600; color: var(--c-danger);
  background: var(--c-danger-tint); border: 0; border-radius: 20px; padding: 5px 12px; cursor: pointer;
}
.int-disconnect:hover { filter: brightness(.97); }

/* `mappingRow(title:summary:disabled:)`. Disabled it STAYS ON SCREEN: a member who may not change
   the coverage may still read it, which is a different product from hiding the row. */
.int-map {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 12px 14px; border: 0; border-radius: var(--radius-sm, 8px);
  background: var(--c-field-fill); color: var(--d-text); font: inherit; text-align: left; cursor: pointer;
}
.int-map:hover:not(:disabled) { background: var(--c-brand-tint); }
.int-map:disabled { cursor: default; opacity: .55; }
.int-map__icon svg, .int-map__chevron svg { width: 15px; height: 15px; display: block; }
.int-map__icon { color: var(--c-brand-pressed); display: flex; }
.int-map__title { font-size: 13px; font-weight: 600; }
.int-map__summary { margin-left: auto; font-size: 12px; color: var(--d-text-3); }
.int-map__chevron { color: var(--d-text-3); display: flex; }

/* `googleProLockChip` — the PRO lock that replaces the status glyph on an unpaid plan. */
.int-pro {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 10px; font-weight: 800; letter-spacing: .06em; color: var(--c-warning);
  background: var(--c-warning-tint); border-radius: 20px; padding: 3px 9px;
}
.int-pro svg { width: 11px; height: 11px; }

/* `reauthBanner` — the connection is still there, the grant is not. */
.int-banner {
  display: flex; align-items: center; gap: 8px; margin-bottom: 12px;
  padding: 10px 12px; border-radius: var(--radius-sm, 8px);
  background: var(--c-warning-tint); font-size: 12.5px; color: var(--d-text);
}
.int-banner svg { width: 15px; height: 15px; flex-shrink: 0; color: var(--c-warning); }
.int-banner__act {
  margin-left: auto; border: 0; background: none; cursor: pointer;
  font: inherit; font-weight: 700; font-size: 11px; color: var(--c-warning);
}

.int-note { font-size: 11.5px; color: var(--d-text-3); margin: 8px 0 0; line-height: 1.45; }
.int-caption { font-size: 12px; color: var(--d-text-2); margin: 10px 0 0; line-height: 1.45; }

/* `proviaPricingModes(isCost:)` — the toggle silently swings margin, so both readings are spelled
   out and the live one is lit. */
.int-modes { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.int-mode {
  flex: 1 1 200px; padding: 10px 12px; border-radius: var(--radius-sm, 8px);
  background: var(--c-field-fill); border: 1px solid transparent;
}
.int-mode[data-on="true"] { background: var(--c-brand-tint); border-color: var(--c-brand-border, var(--d-border)); }
.int-mode strong { display: block; font-size: 10px; font-weight: 800; letter-spacing: .04em; color: var(--d-text-3); margin-bottom: 3px; }
.int-mode[data-on="true"] strong { color: var(--c-brand-pressed); }
.int-mode span { font-size: 11.5px; color: var(--d-text-2); line-height: 1.4; }

.int-signed, .int-signin { margin-top: 12px; padding: 12px; border-radius: var(--radius-sm, 8px); }
.int-signed { display: flex; align-items: center; gap: 10px; background: var(--c-success-tint); }
.int-signed svg { width: 18px; height: 18px; color: var(--c-success); flex-shrink: 0; }
.int-signed strong { display: block; font-size: 13px; font-weight: 700; color: var(--d-text); }
.int-signed small { font-size: 11.5px; color: var(--d-text-2); }
.int-signin { background: var(--c-field-fill); }
.int-signin strong { display: block; font-size: 13px; font-weight: 700; color: var(--d-text); margin-bottom: 4px; }
.int-signin p { font-size: 11.5px; color: var(--d-text-2); line-height: 1.45; margin: 0; }

/* `CalendarPickerSheet`, over the destinations an .ics can actually be handed to. */
.int-picker { display: grid; gap: 6px; }
.int-picker__row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; padding: 12px 14px; border: 1px solid var(--d-border); border-radius: var(--radius-sm, 8px);
  background: var(--d-card-bg); color: var(--d-text); font: inherit; text-align: left; cursor: pointer;
}
.int-picker__row:hover { background: var(--c-field-fill); }
.int-picker__row strong { display: block; font-size: 13px; font-weight: 600; }
.int-picker__row small { font-size: 11.5px; color: var(--d-text-3); }

@media (max-width: 720px) {
  .int-hero { gap: 18px; padding: 18px; }
  .int-hero__metrics { width: 100%; justify-content: space-between; }
  .int-metric { min-width: 0; padding: 0 10px; }
}

/* ── PHONE & TEXT (C3) ──────────────────────────────────────────────────────
   The number is the biggest thing on the page because it is the thing customers actually have. */
.pt-number { font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--d-text); }
.pt-note { font-size: 13px; color: var(--d-text-3); margin: 6px 0 12px; max-width: 62ch; }
.pt-search { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 10px; }
.pt-candidates { display: grid; gap: 6px; margin: 10px 0; }
.pt-candidate {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  padding: 10px 12px; border: 1px solid var(--d-border); border-radius: 8px;
  background: var(--c-surface); cursor: pointer; color: inherit;
}
.pt-candidate:hover { border-color: var(--c-brand-primary); }
.pt-candidate__num { font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; }
.pt-candidate__where { font-size: 12px; color: var(--d-text-3); flex: 1; }
.pt-candidate__caps { font-size: 11px; color: var(--d-text-3); }
.pt-port { font-size: 12px; color: var(--d-text-3); margin-top: 12px; display: flex; gap: 8px; align-items: center; }
.pt-toggle { display: flex; gap: 8px; align-items: flex-start; font-size: 13px; color: var(--d-text-2); margin: 12px 0; }
.pt-toggle span { max-width: 62ch; }
.pt-hours { padding-left: 22px; border-left: 2px solid var(--d-border); margin-bottom: 12px; }
.pt-days { display: flex; gap: 6px; flex-wrap: wrap; margin: 10px 0; }
.pt-day {
  font-size: 12px; padding: 5px 11px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--d-border); background: none; color: var(--d-text-3);
}
.pt-day--on { border-color: var(--c-brand-primary); background: var(--c-brand-tint); color: var(--c-brand-primary); font-weight: 600; }

/* Phone & Text begins at the company system, then drills into one market. Registration is shared;
   numbers, routing and replies are not. The layout makes that scope boundary visible. */
.pt-system-hero {
  padding: var(--space-lg); margin-bottom: var(--space-md);
  border-radius: var(--d-radius-lg); color: var(--c-on-brand);
  background: linear-gradient(120deg,var(--d-green-dark),var(--d-green));
}
.pt-system-hero__eyebrow,.pt-usage-card>header>span {
  font-size: var(--text-caption2); font-weight: 750; letter-spacing: .08em; text-transform: uppercase;
}
.pt-system-hero__eyebrow,.pt-system-hero__plan { color: var(--c-accent-success); }
.pt-system-hero h2 { margin: var(--space-sm) 0; font-size: var(--text-title2); letter-spacing: -.025em; }
.pt-system-hero p { margin: 0; max-width: 92ch; color: var(--c-on-brand); opacity: .76; line-height: 1.55; }
.pt-system-hero__plan { margin-top: var(--space-sm); font-size: var(--text-caption); font-weight: 650; }
.pt-system-metrics {
  display: grid; grid-template-columns: repeat(3,1fr); margin-top: var(--space-md);
  border-radius: var(--d-radius); overflow: hidden; background: color-mix(in srgb,var(--c-surface) 10%,transparent);
}
.pt-system-metrics>div { display: flex; flex-direction: column; gap: 2px; padding: var(--space-sm-md); border-left: 1px solid color-mix(in srgb,var(--c-surface) 15%,transparent); }
.pt-system-metrics>div:first-child { border-left: 0; }
.pt-system-metrics strong { font-size: var(--text-title2); font-variant-numeric: tabular-nums; }
.pt-system-metrics span { font-size: var(--text-caption2); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; opacity: .75; }
.pt-system-metrics [data-tone="warn"] strong { color: var(--c-accent-warning); }

.pt-registration-card {
  display: grid; grid-template-columns: 38px minmax(0,1fr) auto; align-items: center; gap: var(--space-sm-md);
  padding: var(--space-sm-md); margin-bottom: var(--space-lg); border: 1px solid var(--d-border);
  border-radius: var(--d-radius); background: var(--d-card-bg);
}
.pt-registration-card__icon { display: grid; place-items: center; width: 38px; height: 38px; border-radius: var(--d-radius-sm); background: var(--c-warning-tint); color: var(--c-warning); font-size: var(--text-title3); font-weight: 800; }
.pt-registration-card__title { display: flex; align-items: center; gap: var(--space-sm); font-size: var(--text-subhead); font-weight: 700; }
.pt-registration-card p { margin: 3px 0 0; color: var(--d-text-2); font-size: var(--text-caption); }

.pt-directory { margin-bottom: var(--space-md); }
.pt-directory>header { margin-bottom: var(--space-sm); }
.pt-directory>header h2 { margin: 0; font-size: var(--text-title3); }
.pt-directory>header p { margin: 2px 0 0; color: var(--d-text-2); font-size: var(--text-caption); }
.pt-line-table { border: 1px solid var(--d-border); border-radius: var(--d-radius); overflow: hidden; background: var(--d-card-bg); }
.pt-line-table__head,.pt-line-row { display: grid; grid-template-columns: minmax(260px,2fr) minmax(150px,1fr) minmax(130px,.8fr) minmax(150px,1fr) 84px; align-items: center; gap: var(--space-sm); }
.pt-line-table__head { padding: var(--space-xs) var(--space-sm-md); background: var(--d-content-bg); color: var(--d-text-3); font-size: var(--text-caption2); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.pt-line-row { min-height: 62px; padding: var(--space-xs) var(--space-sm-md); border-top: 1px solid var(--d-border); }
.pt-line-market { display: flex; align-items: center; gap: var(--space-sm); min-width: 0; }
.pt-line-market>span { display: grid; place-items: center; width: 34px; height: 34px; flex: 0 0 34px; border-radius: var(--d-radius-sm); background: var(--d-green); color: var(--c-on-brand); font-size: var(--text-caption); font-weight: 750; }
.pt-line-market>div { display: flex; flex-direction: column; min-width: 0; }
.pt-line-market strong { font-size: var(--text-footnote); }
.pt-line-market small { overflow: hidden; color: var(--d-text-3); font-size: var(--text-caption2); text-overflow: ellipsis; white-space: nowrap; }
.pt-line-number { font-size: var(--text-footnote); font-variant-numeric: tabular-nums; }
.pt-line-number--missing { color: var(--c-warning); }
.pt-line-state { color: var(--d-text-2); font-size: var(--text-caption); white-space: nowrap; }
.pt-line-state[data-tone="ok"] { color: var(--c-success); }
.pt-line-state[data-tone="warn"] { color: var(--c-warning); }
.pt-directory__empty { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-xs); padding: var(--space-lg); border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.pt-directory__empty p { margin: 0 0 var(--space-xs); color: var(--d-text-2); font-size: var(--text-caption); }

.pt-usage-card { padding: var(--space-sm-md); margin-bottom: var(--space-md); border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.pt-usage-card>header { display: flex; align-items: baseline; gap: var(--space-sm); padding-bottom: var(--space-sm); border-bottom: 1px solid var(--d-border); }
.pt-usage-card>header>span { color: var(--d-green); }
.pt-usage-card>header>strong { font-size: var(--text-caption); }
.pt-usage-card>header>small { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-usage-row { display: grid; grid-template-columns: 8px minmax(160px,1fr) auto minmax(130px,auto) 46px; align-items: center; gap: var(--space-sm); min-height: 42px; border-bottom: 1px solid var(--d-border); font-size: var(--text-caption); }
.pt-usage-row>i { width: 6px; height: 6px; border-radius: 50%; background: var(--d-text-3); opacity: .45; }
.pt-usage-row>i[data-active="true"] { background: var(--d-green); opacity: 1; }
.pt-usage-row>small { color: var(--d-text-3); }
.pt-usage-row>span { color: var(--d-text-2); text-align: right; }
.pt-usage-row>b { text-align: right; font-variant-numeric: tabular-nums; }
.pt-usage-row--total { grid-template-columns: minmax(160px,1fr) auto minmax(130px,auto) 46px; border-bottom: 0; }
.pt-usage-row--total>b { color: var(--d-green); }
.pt-usage-meter { height: 6px; margin-top: var(--space-xs); overflow: hidden; border-radius: var(--radius-pill); background: var(--d-content-bg); }
.pt-usage-meter>i { display: block; height: 100%; min-width: 3px; border-radius: inherit; background: var(--d-green); }
.pt-usage-caption { margin-top: var(--space-xs); color: var(--d-text-2); font-size: var(--text-caption); font-weight: 600; }
.pt-usage-card>p { margin: var(--space-xs) 0 0; color: var(--d-text-3); font-size: var(--text-caption2); line-height: 1.5; }
.pt-plan-note { display: grid; grid-template-columns: 20px minmax(0,1fr); gap: var(--space-sm); padding: var(--space-sm-md); border-radius: var(--d-radius); background: var(--c-info-tint); color: var(--d-text-2); }
.pt-plan-note>span { display: grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; background: var(--c-info); color: var(--c-on-brand); font-size: var(--text-caption2); font-weight: 800; }
.pt-plan-note p { margin: 0; font-size: var(--text-caption); line-height: 1.5; }
.pt-plan-note>div { display: grid; gap: var(--space-sm); }
.pt-plan-note a { display: inline-flex; align-items: center; min-height: 24px; color: var(--c-brand-primary); font-size: var(--text-caption); font-weight: 700; }

.pt-child-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-md); padding-bottom: var(--space-sm); border-bottom: 1px solid var(--d-border); }
.pt-child-head a { color: var(--d-green); font-size: var(--text-footnote); font-weight: 650; text-decoration: none; }
.pt-child-head span { color: var(--d-text-3); font-size: var(--text-caption2); font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }

/* The per-market phone destination mirrors the Catalyst hierarchy: destination identity and market
   picker, state hero, then either the selection/review workspace or the active-line lifecycle. */
.pt-market-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-lg); margin-bottom: var(--space-md); }
.pt-market-heading h1 { display: flex; align-items: center; gap: var(--space-sm); margin: 0; font-size: var(--text-title1); }
.pt-market-heading p { margin: var(--space-xs) 0 0; color: var(--d-text-2); font-size: var(--text-footnote); }
.pt-market-heading>label { display: flex; align-items: flex-end; flex-direction: column; gap: 4px; }
.pt-market-heading>label>span { color: var(--d-text-3); font-size: var(--text-caption2); font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }
.pt-market-heading select { min-width: 190px; }
.pt-market-hero { display: grid; grid-template-columns: minmax(0,1fr) minmax(460px,610px); align-items: center; gap: var(--space-xl); margin-bottom: var(--space-md); padding: var(--space-xl); border-radius: var(--d-radius-lg); background: linear-gradient(115deg,var(--d-green-dark),var(--d-green)); color: var(--c-on-brand); }
.pt-market-hero__copy>span { color: var(--c-accent-success); font-size: var(--text-caption2); font-weight: 750; letter-spacing: .09em; text-transform: uppercase; }
.pt-market-hero__copy h2 { margin: var(--space-sm) 0; color: var(--c-on-brand); font-size: var(--text-title2); font-variant-numeric: tabular-nums; letter-spacing: -.025em; }
.pt-market-hero__copy p { margin: 0; color: var(--c-on-brand); font-size: var(--text-footnote); line-height: 1.5; opacity: .78; }
.pt-market-hero__metrics { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); overflow: hidden; border: 1px solid color-mix(in srgb,var(--c-surface) 13%,transparent); border-radius: var(--d-radius); background: color-mix(in srgb,var(--c-surface) 7%,transparent); }
.pt-market-hero__metrics>div { display: flex; align-items: center; gap: var(--space-sm); min-width: 0; padding: var(--space-sm-md); border-left: 1px solid color-mix(in srgb,var(--c-surface) 13%,transparent); }
.pt-market-hero__metrics>div:first-child { border-left: 0; }
.pt-market-hero__metrics i { display: grid; place-items: center; width: 36px; height: 36px; flex: 0 0 36px; border: 1px solid color-mix(in srgb,var(--c-surface) 26%,transparent); border-radius: 50%; font-style: normal; }
.pt-market-hero__metrics span { display: flex; min-width: 0; flex-direction: column; gap: 3px; }
.pt-market-hero__metrics small { color: var(--c-on-brand); font-size: var(--text-caption2); font-weight: 700; letter-spacing: .07em; text-transform: uppercase; opacity: .65; }
.pt-market-hero__metrics strong { overflow: hidden; color: var(--c-on-brand); font-size: var(--text-footnote); text-overflow: ellipsis; white-space: nowrap; }
.pt-market-hero__metrics strong[data-warn="true"] { color: var(--c-accent-warning); }
.pt-market-loading { display: flex; align-items: center; justify-content: center; gap: var(--space-sm); min-height: 280px; color: var(--d-text-3); }
.pt-number-setup { display: grid; grid-template-columns: minmax(0,1fr) 370px; align-items: start; gap: var(--space-md); }
.pt-number-search,.pt-setup-review,.pt-active-card,.pt-line-identity { overflow: hidden; border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.pt-number-search>header,.pt-active-card>header { padding: var(--space-sm-md); border-bottom: 1px solid var(--d-border); }
.pt-number-search h2,.pt-setup-review h2,.pt-active-card h2,.pt-setup-outcomes h2,.pt-number-lifecycle h2 { margin: 0; color: var(--d-text); font-size: var(--text-subhead); }
.pt-number-search header p,.pt-active-card header p { margin: 4px 0 0; color: var(--d-text-3); font-size: var(--text-caption); line-height: 1.45; }
.pt-number-search__form { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm-md); }
.pt-number-search__form input { max-width: 150px; font-variant-numeric: tabular-nums; }
.pt-inline-note,.pt-inline-warning { margin: 0 var(--space-sm-md) var(--space-sm-md); padding: var(--space-sm); border-radius: var(--d-radius-sm); background: var(--d-content-bg); color: var(--d-text-2); font-size: var(--text-caption); }
.pt-inline-warning { background: var(--c-warning-tint); color: var(--c-warning); }
.pt-number-results { border-top: 1px solid var(--d-border); }
.pt-number-result { display: grid; grid-template-columns: minmax(180px,1fr) auto auto 22px; align-items: center; gap: var(--space-sm); width: 100%; min-height: 66px; padding: var(--space-sm) var(--space-sm-md); border: 0; border-bottom: 1px solid var(--d-border); background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; }
.pt-number-result[aria-pressed="true"] { background: var(--c-brand-tint); }
.pt-number-result>span:first-child { display: flex; flex-direction: column; gap: 3px; }
.pt-number-result strong { font-size: var(--text-footnote); font-variant-numeric: tabular-nums; }
.pt-number-result small { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-number-result__caps { padding: 4px 8px; border-radius: var(--radius-pill); background: var(--c-brand-tint); color: var(--d-green); font-size: var(--text-caption2); font-weight: 700; }
.pt-number-result>i { color: var(--d-green); font-size: var(--text-title3); font-style: normal; }
.pt-number-results>footer { display: flex; justify-content: space-between; gap: var(--space-sm); padding: var(--space-sm) var(--space-sm-md); background: var(--d-content-bg); color: var(--d-text-3); font-size: var(--text-caption2); }
.pt-number-results__empty { display: grid; justify-items: center; gap: var(--space-xs); min-height: 220px; place-content: center; padding: var(--space-lg); color: var(--d-text-2); text-align: center; }
.pt-number-results__empty>span { color: var(--d-text-3); font-size: var(--text-title2); }
.pt-number-results__empty small { color: var(--d-text-3); }
.pt-setup-review { padding: var(--space-md); }
.pt-setup-review dl { margin: var(--space-sm) 0; }
.pt-setup-review dl>div { padding: var(--space-sm) 0; border-bottom: 1px solid var(--d-border); }
.pt-setup-review dt { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-setup-review dd { margin: 3px 0 0; color: var(--d-text-2); font-size: var(--text-footnote); font-weight: 650; }
.pt-setup-review dd[data-emphasis="true"] { color: var(--d-text); font-size: var(--text-title3); font-variant-numeric: tabular-nums; }
.pt-setup-review>.btn { justify-content: space-between; width: 100%; }
.pt-setup-review>p,.pt-active-card>p,.pt-active-card__body>p { margin: var(--space-sm) 0 0; color: var(--d-text-3); font-size: var(--text-caption); line-height: 1.45; }
.pt-setup-outcomes { grid-column: 1/-1; padding: var(--space-md); border: 1px solid var(--c-info-tint); border-radius: var(--d-radius); background: var(--c-info-tint); }
.pt-setup-outcomes>div { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: var(--space-md); margin-top: var(--space-sm); }
.pt-setup-outcomes article { display: flex; align-items: flex-start; gap: var(--space-sm); }
.pt-setup-outcomes article>i { display: grid; place-items: center; width: 36px; height: 36px; flex: 0 0 36px; border-radius: 50%; background: var(--c-brand-tint); color: var(--d-green); font-style: normal; }
.pt-setup-outcomes article>span { display: flex; flex-direction: column; gap: 3px; }
.pt-setup-outcomes article strong { font-size: var(--text-caption); }
.pt-setup-outcomes article small { color: var(--d-text-2); font-size: var(--text-caption); line-height: 1.4; }
.pt-active-line { display: grid; gap: var(--space-md); }
.pt-line-identity { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md); }
.pt-line-identity>span { display: grid; place-items: center; width: 48px; height: 48px; flex: 0 0 48px; border-radius: var(--d-radius-sm); background: var(--c-brand-tint); color: var(--d-green); font-size: var(--text-title3); }
.pt-line-identity>div { display: flex; min-width: 0; flex: 1; flex-direction: column; gap: 3px; }
.pt-line-identity>div strong { font-size: var(--text-title3); font-variant-numeric: tabular-nums; }
.pt-line-identity>div small { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-line-identity>b { padding: 5px 10px; border-radius: var(--radius-pill); background: var(--c-success-tint); color: var(--c-success); font-size: var(--text-caption2); }
.pt-line-identity>b[data-tone="warn"] { background: var(--c-warning-tint); color: var(--c-warning); }
.pt-active-grid { display: grid; grid-template-columns: minmax(0,1fr) 330px; align-items: start; gap: var(--space-md); }
.pt-active-card__body { padding: var(--space-sm-md); }
.pt-active-card [hidden],.pt-registration-editing [hidden] { display: none !important; }
.pt-forward-row { display: flex; gap: var(--space-sm); }
.pt-forward-row input { flex: 1; }
.pt-market-usage { display: flex; align-items: center; min-height: 62px; gap: var(--space-md); padding: var(--space-sm-md); }
.pt-market-usage>div { display: flex; flex: 1; flex-direction: column; gap: 3px; }
.pt-market-usage strong { font-size: var(--text-title3); font-variant-numeric: tabular-nums; }
.pt-market-usage span { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-market-usage>i { width: 1px; height: 38px; background: var(--d-border); }
.pt-active-card>p { padding: 0 var(--space-sm-md) var(--space-sm-md); }
.pt-active-card hr { height: 1px; margin: var(--space-md) 0; border: 0; background: var(--d-border); }
.pt-active-card .pt-toggle span { display: flex; flex-direction: column; gap: 2px; }
.pt-active-card .pt-toggle small { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-voice-hours { display: grid; gap: var(--space-sm-md); }
.pt-voice-hours[hidden] { display: none !important; }
.pt-voice-times { display: flex; flex-wrap: wrap; gap: var(--space-sm); }
.pt-voice-times label { display: flex; align-items: center; gap: var(--space-xs); color: var(--d-text-3); font-size: var(--text-caption); }
.pt-voice-times input,.pt-voice-times select { min-height: 36px; padding: 5px 9px; border: 1px solid var(--d-border); border-radius: var(--d-radius-sm); background: var(--d-content-bg); color: var(--d-text); }
.pt-active-card__body>footer { display: flex; justify-content: flex-end; margin-top: var(--space-md); }
.pt-number-lifecycle { padding: var(--space-md); border: 1px solid var(--c-danger-tint); border-radius: var(--d-radius); background: var(--c-danger-tint); }
.pt-number-lifecycle p { color: var(--d-text-2); font-size: var(--text-footnote); line-height: 1.5; }
.pt-number-lifecycle>div { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); }
.pt-port-sheet { display: grid; gap: var(--space-md); }
.pt-port-sheet>p { margin: 0; color: var(--d-text-2); font-size: var(--text-footnote); line-height: 1.5; }

@media (max-width: 1100px) {
  .pt-market-hero { grid-template-columns: 1fr; }
}
@media (max-width: 900px) {
  .pt-number-setup,.pt-active-grid { grid-template-columns: 1fr; }
  .pt-setup-outcomes>div { grid-template-columns: 1fr; }
}
@media (max-width: 680px) {
  .pt-market-heading { align-items: stretch; flex-direction: column; }
  .pt-market-heading>label { align-items: stretch; }
  .pt-market-heading select { width: 100%; }
  .pt-market-hero { padding: var(--space-md); }
  .pt-market-hero__metrics { grid-template-columns: 1fr; }
  .pt-market-hero__metrics>div { border-top: 1px solid color-mix(in srgb,var(--c-surface) 13%,transparent); border-left: 0; }
  .pt-market-hero__metrics>div:first-child { border-top: 0; }
  .pt-number-search__form,.pt-forward-row,.pt-number-lifecycle>div { align-items: stretch; flex-direction: column; }
  .pt-number-search__form input { max-width: none; }
  .pt-number-result { grid-template-columns: minmax(0,1fr) 22px; }
  .pt-number-result__caps { display: none; }
  .pt-number-results>footer { flex-direction: column; }
}

/* Carrier registration is one company-wide state machine, not a form page. The hero explains the
   state; the denser desktop body carries the facts and the next move without repeating it. */
.pt-registration-crumb { display: flex; align-items: center; gap: var(--space-sm); margin-bottom: var(--space-md); color: var(--d-text-3); font-size: var(--text-caption); }
.settings-destination:has(.pt-registration-crumb)>.settings-destination__hero { display: none; }
.pt-registration-crumb a { color: var(--d-green); font-weight: 650; text-decoration: none; }
.pt-registration-crumb a:hover { text-decoration: underline; }
.pt-registration-crumb strong { color: var(--d-text); font-weight: 650; }
.pt-registration-hero { padding: var(--space-lg); overflow: hidden; border-radius: var(--d-radius-lg); background: linear-gradient(120deg,var(--d-green-dark),var(--d-green)); color: var(--c-on-brand); }
.pt-registration-hero__top { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-lg); }
.pt-registration-hero__eyebrow { display: flex; align-items: center; gap: var(--space-xs); color: var(--c-accent-success); font-size: var(--text-caption2); font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }
.pt-registration-hero__eyebrow span { color: var(--c-accent-warning); }
.pt-registration-hero h1 { margin: var(--space-sm) 0; font-size: clamp(24px,2vw,32px); line-height: 1.12; letter-spacing: -.035em; }
.pt-registration-hero__top p { max-width: 90ch; margin: 0; color: var(--c-on-brand); font-size: var(--text-footnote); line-height: 1.5; opacity: .8; }
.pt-registration-hero__status { flex: 0 0 auto; padding: 5px 12px; border: 1px solid var(--c-accent-warning); border-radius: var(--radius-pill); color: var(--c-accent-warning); font-size: var(--text-caption2); font-weight: 750; letter-spacing: .06em; text-transform: uppercase; }
.pt-registration-hero[data-tone="ok"] .pt-registration-hero__status { border-color: var(--c-accent-success); color: var(--c-accent-success); }
.pt-registration-hero[data-tone="danger"] .pt-registration-hero__status { border-color: var(--c-danger); color: var(--c-danger); }
.pt-registration-hero__actions { display: flex; align-items: center; gap: var(--space-md); margin-top: var(--space-md); }
.pt-registration-hero__actions button { display: inline-flex; align-items: center; gap: 6px; padding: 0; border: 0; background: none; color: var(--c-on-brand); font: inherit; font-size: var(--text-caption); font-weight: 700; cursor: pointer; opacity: .88; }
.pt-registration-hero__actions button:hover { color: var(--c-accent-success); opacity: 1; }
.pt-registration-hero__actions button:disabled { cursor: wait; opacity: .55; }
.pt-registration-hero__actions .pt-registration-hero__cancel { margin-left: auto; color: var(--c-on-brand); text-decoration: underline; text-decoration-color: var(--c-danger); text-underline-offset: 3px; }
.pt-registration-steps { display: grid; grid-template-columns: minmax(0,1fr) auto minmax(0,1fr) auto minmax(0,1fr); align-items: center; gap: var(--space-sm); margin-top: var(--space-lg); }
.pt-registration-steps>div { display: flex; align-items: center; gap: var(--space-sm); min-height: 82px; padding: var(--space-sm-md); border: 1px solid color-mix(in srgb,var(--c-surface) 12%,transparent); border-radius: var(--d-radius); background: color-mix(in srgb,var(--c-surface) 6%,transparent); }
.pt-registration-steps>div[data-state="current"] { border-color: var(--c-accent-warning); background: color-mix(in srgb,var(--c-accent-warning) 9%,transparent); }
.pt-registration-steps>div[data-state="done"] { background: color-mix(in srgb,var(--c-accent-success) 7%,transparent); }
.pt-registration-steps i { display: grid; place-items: center; width: 34px; height: 34px; flex: 0 0 34px; border-radius: 50%; background: color-mix(in srgb,var(--c-surface) 14%,transparent); font-style: normal; font-weight: 800; }
.pt-registration-steps [data-state="done"] i { background: var(--c-success); }
.pt-registration-steps [data-state="current"] i { background: var(--c-accent-warning); color: var(--d-green-dark); }
.pt-registration-steps span { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.pt-registration-steps strong { font-size: var(--text-footnote); }
.pt-registration-steps small { color: var(--c-on-brand); font-size: var(--text-caption2); opacity: .72; }
.pt-registration-steps>div[data-state="current"] small { color: var(--c-accent-warning); font-weight: 700; opacity: 1; }
.pt-registration-steps>b { color: var(--c-on-brand); font-size: var(--text-title2); opacity: .48; }

.pt-registration-summary { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); margin: var(--space-md) 0; overflow: hidden; border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.pt-registration-summary>div { display: flex; flex-direction: column; gap: 5px; padding: var(--space-sm-md); border-left: 1px solid var(--d-border); }
.pt-registration-summary>div:first-child { border-left: 0; }
.pt-registration-summary span { color: var(--d-text-3); font-size: var(--text-caption2); font-weight: 650; letter-spacing: .06em; text-transform: uppercase; }
.pt-registration-summary strong { overflow: hidden; font-size: var(--text-footnote); text-overflow: ellipsis; white-space: nowrap; }
.pt-registration-summary strong[data-tone="ok"] { color: var(--c-success); }
.pt-registration-summary strong[data-tone="warn"] { color: var(--c-warning); }
.pt-registration-summary strong[data-tone="danger"] { color: var(--c-danger); }

.pt-registration-grid { display: grid; grid-template-columns: minmax(0,1.15fr) minmax(360px,.85fr); gap: var(--space-md); }
.pt-registration-grid__main { display: grid; align-content: start; gap: var(--space-md); }
.pt-registration-panel { overflow: hidden; border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.pt-registration-panel>header { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); padding: var(--space-sm-md); border-bottom: 1px solid var(--d-border); }
.pt-registration-panel>header>div { display: flex; align-items: center; gap: var(--space-sm); min-width: 0; }
.pt-registration-panel__icon { display: grid; place-items: center; width: 34px; height: 34px; flex: 0 0 34px; border-radius: var(--d-radius-sm); background: var(--c-brand-tint); color: var(--d-green); font-size: var(--text-footnote); font-weight: 800; }
.pt-registration-panel h2,.pt-registration-panel h3 { margin: 0; color: var(--d-text); }
.pt-registration-panel h2 { font-size: var(--text-subhead); }
.pt-registration-panel header p { margin: 3px 0 0; color: var(--d-text-3); font-size: var(--text-caption2); }
.pt-registration-details { display: grid; grid-template-columns: 1fr 1fr; margin: 0; }
.pt-registration-details>div { display: grid; grid-template-columns: minmax(110px,.8fr) minmax(0,1.2fr); gap: var(--space-sm); padding: var(--space-sm-md); border-top: 1px solid var(--d-border); }
.pt-registration-details>div:nth-child(-n+2) { border-top: 0; }
.pt-registration-details>div:nth-child(odd) { border-right: 1px solid var(--d-border); }
.pt-registration-details dt { color: var(--d-text-3); font-size: var(--text-caption); }
.pt-registration-details dd { margin: 0; overflow-wrap: anywhere; font-size: var(--text-caption); font-weight: 650; }
.pt-registration-current__state { display: flex; align-items: flex-start; gap: var(--space-sm); margin: var(--space-sm-md); padding: var(--space-sm-md); border-radius: var(--d-radius-sm); background: var(--c-warning-tint); }
.pt-registration-current[data-tone="ok"] .pt-registration-current__state { background: var(--c-success-tint); }
.pt-registration-current[data-tone="danger"] .pt-registration-current__state { background: var(--c-danger-tint); }
.pt-registration-current__state>span { color: var(--c-warning); font-weight: 800; }
.pt-registration-current[data-tone="ok"] .pt-registration-current__state>span { color: var(--c-success); }
.pt-registration-current[data-tone="danger"] .pt-registration-current__state>span { color: var(--c-danger); }
.pt-registration-current__state h3 { font-size: var(--text-subhead); }
.pt-registration-current__state p { margin: 4px 0 0; color: var(--d-text-2); font-size: var(--text-caption); line-height: 1.5; }
.pt-registration-included { color: var(--c-success); font-size: var(--text-caption2); font-weight: 700; white-space: nowrap; }
.pt-registration-next ol { display: grid; gap: var(--space-sm); margin: 0; padding: var(--space-sm-md); list-style: none; }
.pt-registration-next li { display: grid; grid-template-columns: 30px minmax(0,1fr) auto; align-items: center; gap: var(--space-sm); padding: var(--space-sm-md); border-radius: var(--d-radius-sm); background: var(--d-content-bg); }
.pt-registration-next li>i { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: var(--d-text-3); color: var(--c-on-brand); font-size: var(--text-caption2); font-style: normal; font-weight: 800; }
.pt-registration-next li[data-state="done"]>i { background: var(--c-success); }
.pt-registration-next li[data-state="current"]>i { background: var(--c-warning); }
.pt-registration-next li>div { display: flex; flex-direction: column; gap: 3px; }
.pt-registration-next li strong { font-size: var(--text-caption); }
.pt-registration-next li small { color: var(--d-text-3); font-size: var(--text-caption2); line-height: 1.4; }
.pt-registration-next li>span { padding: 4px 9px; border-radius: var(--radius-pill); background: var(--d-card-bg); color: var(--d-text-2); font-size: var(--text-caption2); white-space: nowrap; }
.pt-registration-next li[data-state="done"]>span { background: var(--c-success-tint); color: var(--c-success); }
.pt-registration-next li[data-state="current"]>span { background: var(--c-warning-tint); color: var(--c-warning); }
.pt-registration-scope { display: flex; align-items: flex-start; gap: var(--space-sm); margin-top: var(--space-md); padding: var(--space-sm-md); border-radius: var(--d-radius); background: var(--c-info-tint); color: var(--d-text-2); }
.pt-registration-scope>span { display: grid; place-items: center; width: 18px; height: 18px; flex: 0 0 18px; border-radius: 50%; background: var(--c-info); color: var(--c-on-brand); font-size: var(--text-caption2); font-weight: 800; }
.pt-registration-scope p { margin: 0; font-size: var(--text-caption); line-height: 1.5; }
.pt-registration-form__intro { margin: 0 0 var(--space-md); }
.pt-registration-form__actions { display: flex; justify-content: flex-end; gap: var(--space-sm); margin-top: var(--space-lg); }

/* QuickBooks is an accounting workflow, not a generic integration card. Keep Intuit's identity in
   the hero while the rest of the destination stays in the Measure Tech PRO settings language. */
.settings-destination:has(.qbo-crumb)>.settings-destination__hero { display: none; }
.qbo-crumb { display: flex; align-items: center; gap: var(--space-sm); margin-bottom: var(--space-md); color: var(--d-text-3); font-size: var(--text-caption); }
.qbo-crumb a { color: var(--d-green); font-weight: 650; text-decoration: none; }
.qbo-crumb a:hover { text-decoration: underline; }
.qbo-crumb strong { color: var(--d-text); }
.qbo-loading { display: grid; justify-items: center; gap: var(--space-sm); padding: 120px var(--space-lg); color: var(--d-text-3); }
.qbo-loading p { margin: 0; }
.qbo-hero { --qbo-brand: var(--c-success); display: grid; grid-template-columns: minmax(0,1fr) 310px; align-items: stretch; gap: var(--space-lg); padding: var(--space-lg); border-radius: var(--d-radius-lg); background: linear-gradient(115deg,var(--qbo-brand),var(--d-green-dark)); color: var(--c-on-brand); }
.qbo-hero__identity { display: flex; align-items: center; gap: var(--space-lg); }
.qbo-logo { display: grid; place-items: center; width: 74px; height: 74px; flex: 0 0 74px; border-radius: var(--d-radius); background: var(--c-surface); color: var(--qbo-brand); }
.qbo-eyebrow { color: var(--c-on-brand); font-size: var(--text-caption2); font-weight: 750; letter-spacing: .1em; text-transform: uppercase; opacity: .8; }
.qbo-hero h1 { margin: var(--space-xs) 0; font-size: clamp(24px,2vw,32px); line-height: 1.12; letter-spacing: -.035em; }
.qbo-hero__identity p { max-width: 80ch; margin: 0; color: var(--c-on-brand); font-size: var(--text-footnote); line-height: 1.5; opacity: .8; }
.qbo-status { display: inline-flex; align-items: center; gap: 6px; margin-top: var(--space-sm); padding: 5px 12px; border-radius: var(--radius-pill); background: color-mix(in srgb,var(--c-warning) 28%,transparent); color: var(--c-accent-warning); font-size: var(--text-caption2); font-weight: 750; }
.qbo-status[data-tone="ok"] { background: color-mix(in srgb,var(--c-success) 28%,transparent); color: var(--c-accent-success); }
.qbo-connection-card { padding: var(--space-sm-md); border: 1px solid color-mix(in srgb,var(--c-surface) 18%,transparent); border-radius: var(--d-radius); background: color-mix(in srgb,var(--d-green-dark) 72%,transparent); }
.qbo-connection-card>div { display: flex; align-items: center; gap: var(--space-sm); }
.qbo-connection-card__icon { display: grid; place-items: center; width: 38px; height: 38px; border-radius: var(--d-radius-sm); background: var(--c-surface); color: var(--qbo-brand); }
.qbo-connection-card>div>span:last-child { display: flex; flex-direction: column; gap: 3px; }
.qbo-connection-card strong { font-size: var(--text-footnote); }
.qbo-connection-card small,.qbo-connection-card p { color: var(--c-on-brand); font-size: var(--text-caption2); opacity: .75; }
.qbo-connection-card p { display: flex; gap: var(--space-sm); margin: var(--space-sm) 0 0; }
.qbo-connection-card .btn { justify-content: center; width: 100%; margin-top: var(--space-sm); border-color: color-mix(in srgb,var(--c-surface) 45%,transparent); color: var(--c-on-brand); }
.qbo-connection-card__actions { align-items: center; gap: var(--space-sm); margin-top: var(--space-sm); }
.qbo-connection-card__actions .btn { width: auto; margin-top: 0; }
.qbo-disconnect-link { padding: 0; border: 0; background: transparent; color: var(--c-danger); font: inherit; font-size: var(--text-caption2); font-weight: 700; cursor: pointer; }
.qbo-disconnect-link:hover { text-decoration: underline; }
.qbo-summary { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); margin: var(--space-md) 0; overflow: hidden; border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.qbo-summary>div { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm-md); border-left: 1px solid var(--d-border); }
.qbo-summary>div:first-child { border-left: 0; }
.qbo-summary__icon,.qbo-row-icon { display: grid; place-items: center; width: 34px; height: 34px; flex: 0 0 34px; border-radius: var(--d-radius-sm); background: var(--c-brand-tint); color: var(--qbo-brand); font-weight: 800; }
.qbo-summary>div>span:last-child,.qbo-rows>div>span:nth-child(2),.qbo-setup__callout>span:nth-child(2),.qbo-setup__tiles>div>span:nth-child(2) { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.qbo-summary strong { overflow: hidden; font-size: var(--text-footnote); text-overflow: ellipsis; white-space: nowrap; }
.qbo-summary small { color: var(--d-text-3); font-size: var(--text-caption2); }
.qbo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-md); }
.qbo-panel { overflow: hidden; border: 1px solid var(--d-border); border-radius: var(--d-radius); background: var(--d-card-bg); }
.qbo-panel>header { padding: var(--space-sm-md); border-bottom: 1px solid var(--d-border); }
.qbo-panel h2 { margin: 0; font-size: var(--text-subhead); }
.qbo-panel header p { margin: 3px 0 0; color: var(--d-text-3); font-size: var(--text-caption2); }
.qbo-rows { padding: 0 var(--space-sm-md); }
.qbo-rows>div { display: grid; grid-template-columns: 34px minmax(0,1fr) auto; align-items: center; gap: var(--space-sm); min-height: 62px; border-bottom: 1px solid var(--d-border); }
.qbo-rows>div:last-child { border-bottom: 0; }
.qbo-rows strong,.qbo-setup__tiles strong,.qbo-setup__callout strong { font-size: var(--text-caption); }
.qbo-rows small,.qbo-setup__tiles small,.qbo-setup__callout small { color: var(--d-text-3); font-size: var(--text-caption2); }
.qbo-pill { padding: 4px 9px; border-radius: var(--radius-pill); background: var(--c-warning-tint); color: var(--c-warning); font-size: var(--text-caption2); font-weight: 700; white-space: nowrap; }
.qbo-pill[data-tone="ok"] { background: var(--c-success-tint); color: var(--c-success); }
.qbo-pill[data-tone="neutral"] { background: color-mix(in srgb,var(--qbo-brand) 10%,transparent); color: var(--qbo-brand); }
.qbo-boundaries footer { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); padding: var(--space-sm) var(--space-sm-md); border-top: 1px solid var(--d-border); }
.qbo-boundaries footer p { display: flex; gap: var(--space-xs); margin: 0; color: var(--d-text-3); font-size: var(--text-caption2); }
.qbo-setup { margin-top: var(--space-md); }
.qbo-setup__callout { display: grid; grid-template-columns: 34px minmax(0,1fr) auto; align-items: center; gap: var(--space-sm); margin: var(--space-sm-md); padding: var(--space-sm); border: 1px solid var(--c-success-tint); border-radius: var(--d-radius-sm); background: var(--c-success-tint); }
.qbo-setup__tiles { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: var(--space-sm); padding: 0 var(--space-sm-md) var(--space-sm-md); }
.qbo-setup__tiles>div { display: grid; grid-template-columns: 34px minmax(0,1fr) auto; align-items: center; gap: var(--space-sm); padding: var(--space-sm); border: 1px solid var(--d-border); border-radius: var(--d-radius-sm); background: var(--d-content-bg); }
.qbo-setup>footer { padding: 0 var(--space-sm-md) var(--space-sm-md); color: var(--d-text-3); font-size: var(--text-caption2); text-align: right; }
.qbo-setup>footer.qbo-connection-footer { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); text-align: left; }

/* DocuSign Settings destination — frozen Catalyst IntegrationsView+DocuSign hierarchy. */
:root { --ds-deep:#101f55;--ds-mid:#163e92;--ds-blue:#2f5fd0;--ds-ok:#b9f4c4;--ds-warn:#ffd37a; } /* raw-color-ok — frozen Catalyst DocuSign palette */
.ds-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.ds-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.ds-crumb a:hover { text-decoration:underline; }
.ds-crumb strong { color:var(--d-text); }
.ds-hero { position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,.62fr);align-items:center;gap:var(--space-xl);min-height:210px;padding:var(--space-xl);overflow:hidden;border-radius:var(--d-radius-lg);background:linear-gradient(115deg,var(--ds-deep),var(--ds-mid));color:var(--c-on-brand); }
.ds-hero__mark { position:absolute;top:var(--space-md);right:var(--space-xl);color:var(--c-on-brand);opacity:.08;pointer-events:none; }
.ds-hero__copy { position:relative;display:grid;justify-items:start;gap:var(--space-xs); }
.ds-eyebrow { color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:750;letter-spacing:.12em;opacity:.8; }
.ds-hero h1 { margin:0;max-width:720px;font-size:clamp(24px,2vw,32px);line-height:1.12;letter-spacing:-.035em; }
.ds-hero__copy>p { max-width:760px;margin:0;color:rgba(255,255,255,.78);font-size:var(--text-footnote);line-height:1.5; }
.ds-status { display:inline-flex;align-items:center;gap:6px;margin-top:var(--space-xs);padding:5px 11px;border-radius:var(--radius-pill);background:rgba(0,0,0,.18);color:var(--ds-warn);font-size:var(--text-caption2);font-weight:750; }
.ds-status[data-tone="ok"] { color:var(--ds-ok); }
.ds-hero__action { display:inline-flex;align-items:center;gap:6px;margin-top:var(--space-sm);min-height:32px;padding:7px 13px;border:0;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--ds-deep);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.ds-hero__action[disabled] { opacity:.75;cursor:default; }
.ds-flow { position:relative;display:grid;grid-template-columns:1fr auto 1fr auto 1fr auto 1fr;align-items:center;gap:var(--space-xs);padding:var(--space-md);border:1px solid rgba(255,255,255,.13);border-radius:var(--d-radius);background:rgba(0,0,0,.13); }
.ds-flow__step { display:grid;justify-items:center;gap:var(--space-xs); }
.ds-flow__step>span { display:grid;place-items:center;width:44px;height:44px;border-radius:var(--d-radius);background:var(--c-surface);color:var(--ds-blue); }
.ds-flow__step[data-final="true"]>span { color:var(--c-success); }
.ds-flow__step small { color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:650; }
.ds-flow>i { display:grid;color:rgba(255,255,255,.6);font-style:normal; }
.ds-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:var(--space-md) 0;overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.ds-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);gap:2px var(--space-sm);align-items:center;padding:var(--space-sm-md);border-left:1px solid var(--d-border); }
.ds-summary>div:first-child { border-left:0; }
.ds-summary>div>span:last-child { display:flex;flex-direction:column;gap:2px;min-width:0; }
.ds-metric__icon { grid-row:1/3;display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:color-mix(in srgb,var(--ds-blue) 10%,transparent);color:var(--ds-blue); }
.ds-summary>div[data-enabled="false"] .ds-metric__icon { background:var(--d-content-bg);color:var(--d-text-3); }
.ds-summary strong { overflow:hidden;font-size:var(--text-footnote);text-overflow:ellipsis;white-space:nowrap; }
.ds-summary small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ds-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md); }
.ds-panel { padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.ds-panel>header { margin-bottom:var(--space-md); }
.ds-panel h2 { margin:0;font-size:var(--text-subhead); }
.ds-panel header p { margin:3px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.ds-steps { display:grid;grid-template-columns:1fr 24px 1fr 24px 1fr 24px 1fr;align-items:start;gap:var(--space-xs); }
.ds-steps__step { display:grid;justify-items:center;gap:var(--space-xs);text-align:center; }
.ds-steps__step>span { display:grid;place-items:center;width:44px;height:44px;border-radius:var(--d-radius);background:color-mix(in srgb,var(--ds-blue) 8%,transparent);color:var(--ds-blue); }
.ds-steps__step>b { display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--ds-blue);color:var(--c-on-brand);font-size:11px; }
.ds-steps__step small { font-size:var(--text-caption2);font-weight:650;line-height:1.35; }
.ds-steps>i { height:1px;margin-top:22px;background:var(--d-border); }
.ds-workflow__note { display:flex;align-items:center;justify-content:center;gap:var(--space-xs);margin:var(--space-md) 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.ds-docs>header { margin-bottom:var(--space-xs); }
.ds-docs__row { display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-height:44px;border-top:1px solid var(--d-border); }
.ds-docs__row:first-of-type { border-top:0; }
.ds-docs__row>span { display:grid;color:var(--ds-blue); }
.ds-docs__row strong { font-size:var(--text-caption); }
.ds-badge { padding:4px 9px;border-radius:var(--radius-pill);font-size:var(--text-caption2);font-weight:700;white-space:nowrap; }
.ds-badge[data-tone="ok"] { background:var(--c-success-tint);color:var(--c-success); }
.ds-badge[data-tone="warn"] { background:var(--c-warning-tint);color:var(--c-warning); }
.ds-account { margin-top:var(--space-md); }
.ds-account__row { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-lg); }
.ds-account__identity { display:flex;flex:1 1 260px;align-items:center;gap:var(--space-sm);min-width:0; }
.ds-account__identity>span:last-child { display:flex;flex-direction:column;gap:3px;min-width:0; }
.ds-account__identity strong { font-size:var(--text-footnote); }
.ds-account__identity small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ds-avatar { display:grid;flex:0 0 40px;place-items:center;width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ds-blue) 12%,transparent);color:var(--ds-blue);font-size:var(--text-caption);font-weight:800; }
.ds-security { display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);white-space:nowrap; }
.ds-account__actions { display:flex;align-items:center;gap:var(--space-sm); }
.ds-account__action { display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:7px 13px;border:1px solid var(--ds-blue);border-radius:var(--d-radius-sm);background:transparent;color:var(--ds-blue);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.ds-account__action[disabled] { opacity:.7;cursor:default; }
.ds-disconnect { min-height:32px;padding:7px 13px;border:1px solid color-mix(in srgb,var(--c-danger) 40%,transparent);border-radius:var(--d-radius-sm);background:transparent;color:var(--c-danger);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
@media (max-width:1050px) { .ds-hero { grid-template-columns:1fr; } .ds-summary { grid-template-columns:1fr 1fr; } .ds-summary>div:nth-child(3) { border-left:0; } .ds-summary>div:nth-child(-n+2) { border-bottom:1px solid var(--d-border); } .ds-grid { grid-template-columns:1fr; } }
@media (max-width:720px) { .ds-flow { grid-template-columns:1fr 1fr; } .ds-flow>i,.ds-steps>i { display:none; } .ds-steps { grid-template-columns:1fr 1fr; } .ds-summary { grid-template-columns:1fr; } .ds-summary>div { border-left:0;border-bottom:1px solid var(--d-border); } .ds-summary>div:last-child { border-bottom:0; } .ds-account__row { flex-direction:column;align-items:stretch; } .ds-security { white-space:normal; } }

/* ProVia Settings destination — frozen Catalyst IntegrationsView+ProVia hierarchy. */
:root { --pv-deep:#174d86;--pv-forest:#174b3a;--pv-blue:#1d5b96;--pv-green:#286c47;--pv-ok:#b8f2c2;--pv-warn:#ffd47d; } /* raw-color-ok — frozen Catalyst ProVia palette */
.pv-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.pv-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.pv-crumb a:hover { text-decoration:underline; }
.pv-crumb strong { color:var(--d-text); }
.pv-hero { position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,.56fr);align-items:center;gap:var(--space-xl);min-height:210px;padding:var(--space-xl);overflow:hidden;border-radius:var(--d-radius-lg);background:linear-gradient(115deg,var(--pv-deep),var(--pv-forest));color:var(--c-on-brand); }
.pv-hero__mark { position:absolute;top:var(--space-md);right:var(--space-xl);color:var(--c-on-brand);opacity:.08;pointer-events:none; }
.pv-hero__copy { position:relative;display:grid;justify-items:start;gap:var(--space-xs); }
.pv-eyebrow { color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:750;letter-spacing:.12em;opacity:.8; }
.pv-hero h1 { margin:0;max-width:720px;font-size:clamp(24px,2vw,32px);line-height:1.12;letter-spacing:-.035em; }
.pv-hero__copy>p { max-width:760px;margin:0;color:rgba(255,255,255,.78);font-size:var(--text-footnote);line-height:1.5; }
.pv-status { display:inline-flex;align-items:center;gap:6px;margin-top:var(--space-xs);padding:5px 11px;border-radius:var(--radius-pill);background:rgba(0,0,0,.18);color:rgba(255,255,255,.86);font-size:var(--text-caption2);font-weight:750; }
.pv-status[data-tone="ok"] { color:var(--pv-ok); }
.pv-status[data-tone="warn"] { color:var(--pv-warn); }
.pv-flow { position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-sm);padding:var(--space-md);border:1px solid rgba(255,255,255,.13);border-radius:var(--d-radius);background:rgba(0,0,0,.13); }
.pv-flow article { display:grid;gap:3px;min-height:104px;padding:var(--space-md);border-radius:var(--d-radius);background:var(--c-surface);color:var(--d-text); }
.pv-flow article small { color:var(--d-text-3);font-size:var(--text-caption2); }
.pv-flow article>span { display:grid;color:var(--pv-green); }
.pv-flow article[data-tint="blue"]>span { color:var(--pv-blue); }
.pv-flow article strong { font-size:var(--text-footnote); }
.pv-flow article em { color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal; }
.pv-flow>i { display:grid;color:rgba(255,255,255,.7);font-style:normal; }
.pv-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:var(--space-md) 0;overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.pv-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);gap:2px var(--space-sm);align-items:center;padding:var(--space-sm-md);border-left:1px solid var(--d-border); }
.pv-summary>div:first-child { border-left:0; }
.pv-summary>div>span:last-child { display:flex;flex-direction:column;gap:2px;min-width:0; }
.pv-metric__icon { grid-row:1/3;display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:color-mix(in srgb,var(--pv-green) 10%,transparent);color:var(--pv-green); }
.pv-summary>div[data-active="false"] .pv-metric__icon { background:var(--d-content-bg);color:var(--d-text-3); }
.pv-summary strong { overflow:hidden;font-size:var(--text-footnote);text-overflow:ellipsis;white-space:nowrap; }
.pv-summary small { color:var(--d-text-3);font-size:var(--text-caption2); }
.pv-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md); }
.pv-panel { padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.pv-panel>header { margin-bottom:var(--space-md); }
.pv-panel h2 { margin:0;font-size:var(--text-subhead); }
.pv-panel header p { margin:3px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.pv-row { display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-height:70px;margin-top:var(--space-sm);padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.pv-row:first-of-type { margin-top:0; }
.pv-row[data-disabled="true"] { opacity:.62; }
.pv-row--readonly { background:var(--d-card-bg); }
.pv-access,.pv-pricing { min-width:0; }
.pv-row__icon { display:grid;place-items:center;width:42px;height:42px;border-radius:var(--d-radius-sm);background:color-mix(in srgb,var(--pv-green) 8%,transparent);color:var(--pv-green); }
.pv-row--upgrade .pv-row__icon { background:var(--c-warning-tint);color:var(--c-warning); }
.pv-row>span:nth-child(2) { display:flex;flex-direction:column;gap:3px;min-width:0; }
.pv-row strong { font-size:var(--text-caption); }
.pv-row small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.pv-switch { position:relative;display:inline-block;width:46px;height:28px; }
.pv-switch input { position:absolute;inset:0;margin:0;opacity:0;cursor:pointer; }
.pv-switch input:disabled { cursor:default; }
.pv-switch span { position:absolute;inset:0;border-radius:var(--radius-pill);background:var(--d-border);transition:background .15s; }
.pv-switch span::after { content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:var(--c-surface);box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .15s; }
.pv-switch input:checked+span { background:var(--pv-green); }
.pv-switch input:checked+span::after { transform:translateX(18px); }
.pv-switch input:focus-visible+span { outline:2px solid var(--pv-blue);outline-offset:2px; }
.pv-chip { padding:4px 9px;border-radius:var(--radius-pill);background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);font-weight:700; }
.pv-chip[data-tone="ok"] { background:var(--c-success-tint);color:var(--c-success); }
.pv-upgrade { padding:7px 13px;border:1px solid var(--pv-blue);border-radius:var(--d-radius-sm);color:var(--pv-blue);font-size:var(--text-caption);font-weight:700;text-decoration:none; }
.pv-divider { margin:var(--space-md) 0;border:0;border-top:1px solid var(--d-border); }
.pv-signed { display:grid;grid-template-columns:24px minmax(0,1fr);align-items:center;gap:var(--space-sm);color:var(--c-success); }
.pv-signed>span:last-child { display:flex;flex-direction:column;gap:2px;color:var(--d-text); }
.pv-signed strong { font-size:var(--text-caption); }
.pv-signed small { color:var(--d-text-3);font-size:var(--text-caption2); }
.pv-signin strong { display:block;margin-bottom:var(--space-xs);font-size:var(--text-caption); }
.pv-signin p { display:flex;gap:var(--space-xs);margin:0;color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.45; }
.pv-note { display:flex;align-items:center;gap:var(--space-xs);margin:var(--space-md) 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.pv-note--center { justify-content:center; }
.pv-choices { display:grid;gap:var(--space-sm); }
.pv-choice { display:grid;grid-template-columns:20px minmax(0,1fr);align-items:start;gap:var(--space-sm);padding:var(--space-sm) var(--space-sm-md);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);font:inherit;text-align:left;cursor:pointer; }
.pv-choice[aria-checked="true"] { border-color:var(--pv-green);background:color-mix(in srgb,var(--pv-green) 6%,var(--d-card-bg)); }
.pv-choice__radio { width:18px;height:18px;margin-top:2px;border:2px solid var(--d-text-3);border-radius:50%; }
.pv-choice[aria-checked="true"] .pv-choice__radio { border-color:var(--pv-green);background:radial-gradient(circle,var(--pv-green) 45%,transparent 50%); }
.pv-choice>span:last-child { display:flex;flex-direction:column;gap:3px; }
.pv-choice strong { font-size:var(--text-caption); }
.pv-choice small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.pv-formula { display:grid;grid-template-columns:1fr auto 1fr auto 1fr;align-items:center;gap:var(--space-xs);margin-top:var(--space-md); }
.pv-formula>span { padding:9px var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);font-size:var(--text-caption2);font-weight:650;text-align:center; }
.pv-formula>span[data-selected="true"] { border-color:var(--pv-green);background:var(--pv-green);color:var(--c-on-brand); }
.pv-formula>i { display:grid;color:var(--d-text-3); }
.pv-included { margin-top:var(--space-md); }
.pv-included__grid { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm); }
.pv-included__grid>div { display:grid;grid-template-columns:30px minmax(0,1fr);align-items:center;gap:3px var(--space-sm);min-height:78px;padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.pv-included__grid>div>span { grid-row:1/3;display:grid;color:var(--pv-blue); }
.pv-included__grid strong { font-size:var(--text-caption); }
.pv-included__grid small { display:flex;align-items:center;gap:4px;color:var(--c-success);font-size:var(--text-caption2); }
@media (max-width:1050px) { .pv-hero { grid-template-columns:1fr; } .pv-summary { grid-template-columns:1fr 1fr; } .pv-summary>div:nth-child(3) { border-left:0; } .pv-summary>div:nth-child(-n+2) { border-bottom:1px solid var(--d-border); } .pv-grid { grid-template-columns:1fr; } .pv-included__grid { grid-template-columns:1fr 1fr; } }
@media (max-width:720px) { .pv-flow { grid-template-columns:1fr; } .pv-flow>i { justify-self:center;transform:rotate(90deg); } .pv-summary { grid-template-columns:1fr; } .pv-summary>div { border-left:0;border-bottom:1px solid var(--d-border); } .pv-summary>div:last-child { border-bottom:0; } .pv-formula { grid-template-columns:1fr; } .pv-formula>i { justify-self:center; } .pv-included__grid { grid-template-columns:1fr; } }

/* Ad integrations Settings destination — frozen Catalyst AdAccountConnectionSheet hierarchy. */
:root { --ads-deep:#063b26;--ads-forest:#051f14;--ads-meta:#4d6fea;--ads-meta2:#1f94e6;--ads-ok:#a8de84;--ads-warn:#ffd37a; } /* raw-color-ok — frozen Catalyst Ad integrations palette */
.ads-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.ads-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.ads-crumb strong { color:var(--d-text); }
.ads-page { display:grid;gap:var(--space-md); }
.ads-loading { display:grid;justify-items:center;gap:var(--space-sm);padding:120px var(--space-lg);color:var(--d-text-3); }
.ads-error { display:flex;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg);color:var(--c-danger); }
.ads-error h1 { margin:0;font-size:var(--text-subhead);color:var(--d-text); }
.ads-hero { display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,.4fr);align-items:center;gap:var(--space-xl);min-height:210px;padding:var(--space-xl);border-radius:var(--d-radius-lg);background:linear-gradient(115deg,var(--ads-deep),var(--ads-forest));color:var(--c-on-brand); }
.ads-hero__pitch { display:flex;align-items:center;gap:var(--space-lg);min-width:0; }
.ads-logo { display:grid;flex:0 0 74px;place-items:center;width:74px;height:74px;border-radius:var(--d-radius);background:var(--c-surface);color:var(--d-green); }
.ads-eyebrow { color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:750;letter-spacing:.12em;opacity:.8; }
.ads-hero h1 { margin:var(--space-xs) 0;font-size:clamp(24px,2vw,32px);line-height:1.12;letter-spacing:-.035em; }
.ads-hero__pitch p { max-width:70ch;margin:0;color:rgba(255,255,255,.78);font-size:var(--text-footnote);line-height:1.5; }
.ads-status { display:inline-flex;align-items:center;gap:6px;margin-top:var(--space-sm);padding:5px 11px;border-radius:var(--radius-pill);background:rgba(0,0,0,.18);color:var(--ads-warn);font-size:var(--text-caption2);font-weight:750; }
.ads-status[data-tone="ok"] { color:var(--ads-ok); }
.ads-account { display:grid;gap:var(--space-sm);padding:var(--space-sm-md);border:1px solid rgba(255,255,255,.17);border-radius:var(--d-radius);background:rgba(0,0,0,.2); }
.ads-account>div:first-child { display:flex;align-items:center;gap:var(--space-sm); }
.ads-account strong { display:block;overflow:hidden;font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap; }
.ads-account small { color:rgba(255,255,255,.7);font-size:var(--text-caption2); }
.ads-account>p { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:rgba(255,255,255,.85);font-size:var(--text-caption2); }
.ads-account>p[data-tone="ok"]>svg { color:var(--ads-ok); }
.ads-account>p[data-tone="warn"]>svg { color:var(--ads-warn); }
.ads-account__actions { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);margin-top:var(--space-xs); }
.ads-hero__cta { display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:7px 13px;border:0;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--ads-deep);font:inherit;font-size:var(--text-caption);font-weight:750;cursor:pointer; }
.ads-outline { display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 12px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);font-weight:650;white-space:nowrap;cursor:pointer; }
.ads-outline--hero { border-color:rgba(255,255,255,.45);color:var(--c-on-brand); }
.ads-primary { display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:7px 14px;border:0;border-radius:var(--d-radius-sm);background:var(--d-green);color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;white-space:nowrap;cursor:pointer; }
.ads-primary[disabled],.ads-hero__cta[disabled] { opacity:.6;cursor:default; }
.ads-text-action { justify-self:start;padding:0;border:0;background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption2);font-weight:700;cursor:pointer; }
.ads-provider { display:grid;flex:0 0 auto;place-items:center;width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,var(--ads-meta),var(--ads-meta2));color:var(--c-on-brand); }
.ads-provider[data-platform="google"] { background:var(--c-surface);border:1px solid var(--d-border);color:var(--d-text); }
.ads-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.ads-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);grid-template-rows:auto auto auto;align-items:start;column-gap:var(--space-sm);row-gap:2px;padding:var(--space-sm-md);border-left:1px solid var(--d-border); }
.ads-summary>div:first-child { border-left:0; }
.ads-summary>div>span { grid-row:1/4;display:grid;place-items:center;align-self:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.ads-summary>div[data-tone="warn"]>span { background:var(--c-warning-tint);color:var(--c-warning); }
.ads-summary>div[data-tone="neutral"]>span { background:var(--d-content-bg);color:var(--d-text-3); }
.ads-summary strong { font-size:var(--text-footnote);line-height:1.2; }
.ads-summary small,.ads-summary em { color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal; }
.ads-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md); }
.ads-panel { padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.ads-panel>h2,.ads-panel>header h2 { margin:0;font-size:var(--text-subhead); }
.ads-panel>h2 { margin-bottom:var(--space-sm); }
.ads-panel>header { display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--d-border); }
.ads-panel>header p { margin:3px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-panel>footer { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--d-border); }
.ads-panel>footer p,.ads-note { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-note { margin-top:var(--space-sm);line-height:1.45; }
.ads-badge,.ads-chip { padding:4px 9px;border-radius:var(--radius-pill);background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal;font-weight:700;white-space:nowrap; }
.ads-badge[data-tone="ok"],.ads-chip[data-tone="ok"] { background:var(--c-success-tint);color:var(--c-success); }
.ads-badge[data-tone="warn"],.ads-chip[data-tone="warn"] { background:var(--c-warning-tint);color:var(--c-warning); }
.ads-badge[data-tone="danger"],.ads-chip[data-tone="danger"] { background:color-mix(in srgb,var(--c-danger) 10%,var(--d-card-bg));color:var(--c-danger); }
.ads-badge[data-tone="brand"],.ads-chip[data-tone="brand"] { background:var(--c-brand-tint);color:var(--d-green); }
.ads-platform { display:grid;grid-template-columns:46px minmax(0,1fr) auto;align-items:start;gap:var(--space-sm);padding:var(--space-sm) 0;border-top:1px solid var(--d-border); }
.ads-platform:first-of-type { border-top:0; }
.ads-platform__body { display:grid;gap:4px;min-width:0; }
.ads-platform__title { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs); }
.ads-platform__title strong { font-size:var(--text-caption); }
.ads-platform__account,.ads-platform__summary { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:var(--d-text-2);font-size:var(--text-caption2); }
.ads-platform__account span { color:var(--d-text-3); }
.ads-menu { position:relative; }
.ads-menu>summary { display:inline-flex;align-items:center;gap:4px;min-height:32px;padding:6px 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);color:var(--d-text);font-size:var(--text-caption2);font-weight:700;list-style:none;cursor:pointer; }
.ads-menu>summary::-webkit-details-marker { display:none; }
.ads-menu>div { position:absolute;right:0;z-index:5;display:grid;min-width:220px;margin-top:4px;padding:var(--space-xs);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);box-shadow:0 8px 24px rgba(0,0,0,.12); }
.ads-menu>div button { display:flex;align-items:center;gap:var(--space-xs);width:100%;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);text-align:left;cursor:pointer; }
.ads-menu>div button:hover { background:var(--d-content-bg); }
.ads-menu>div p { margin:0;padding:8px 10px;color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-menu>div hr { margin:4px 0;border:0;border-top:1px solid var(--d-border); }
.ads-menu__danger { color:var(--c-danger) !important; }
.ads-manual { display:grid;gap:var(--space-sm);margin:0 0 var(--space-sm);padding:var(--space-sm-md);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.ads-manual>strong { font-size:var(--text-caption); }
.ads-manual>small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-candidates { display:grid;gap:var(--space-xs); }
.ads-candidate { display:grid;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);color:inherit;font:inherit;text-align:left;cursor:pointer; }
.ads-candidate .ads-provider { width:30px;height:30px; }
.ads-candidate strong { display:block;font-size:var(--text-caption); }
.ads-candidate small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-manual__entry { display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-sm); }
.ads-manual__entry label { display:grid;flex:1 1 240px;gap:3px;color:var(--d-text-3);font-size:var(--text-caption2);font-weight:650; }
.ads-manual__entry input { min-height:34px;padding:0 var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);font:inherit;font-size:var(--text-caption); }
.ads-reconnect { display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg); }
.ads-reconnect>span { display:grid;color:var(--d-green); }
.ads-reconnect strong { display:block;font-size:var(--text-caption); }
.ads-reconnect small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-row { display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-height:58px;padding:var(--space-xs) 0;border-top:1px solid var(--d-border); }
.ads-row:first-of-type { border-top:0; }
.ads-row strong { display:block;font-size:var(--text-caption); }
.ads-row small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-mark { display:grid;flex:0 0 38px;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.ads-mark[data-tone="warn"] { background:var(--c-warning-tint);color:var(--c-warning); }
.ads-mark[data-tone="quiet"] { color:var(--d-text-3); }
.ads-mark[data-tone="dashed"] { border:1px dashed var(--d-border);background:transparent;color:var(--d-text-3); }
.ads-conversions header { align-items:flex-start; }
.ads-counts { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm);margin:var(--space-sm) 0; }
.ads-counts>div { padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);text-align:center; }
.ads-counts b { display:block;font-size:var(--text-title3);color:var(--d-green); }
.ads-counts>div:nth-child(2) b { color:var(--c-brand-primary); }
.ads-counts>div:nth-child(3) b,.ads-counts>div[data-failed="false"] b { color:var(--d-text-3); }
.ads-counts>div[data-failed="true"] b { color:var(--c-danger); }
.ads-counts small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-conv-account { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);padding:var(--space-xs) 0;border-top:1px solid var(--d-border);font-size:var(--text-caption); }
.ads-conv-account>small { flex-basis:100%;color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-assignment-group { border-top:1px solid var(--d-border); }
.ads-assignment-group:first-of-type { border-top:0; }
.ads-assignment { display:grid;grid-template-columns:38px minmax(0,1fr) 24px 38px minmax(0,1.2fr) minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-height:60px;padding:var(--space-xs) 0; }
.ads-assignment+.ads-assignment { border-top:1px dashed var(--d-border); }
.ads-assignment strong { display:block;font-size:var(--text-caption); }
.ads-assignment small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-assignment .ads-provider { width:38px;height:38px; }
.ads-arrow { display:grid;color:var(--d-text-3); }
.ads-readiness { display:inline-flex;align-items:center;gap:4px;color:var(--c-warning);font-size:var(--text-caption2);font-style:normal;font-weight:650; }
.ads-readiness[data-ready="true"] { color:var(--c-success); }
.ads-menu--assign>div { min-width:260px; }
.ads-growth h2 { margin-bottom:var(--space-sm); }
.ads-growth__grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm); }
.ads-growth__tile { display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);color:inherit;text-decoration:none; }
.ads-growth__tile>span { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--d-green); }
.ads-growth__tile strong { display:block;font-size:var(--text-caption); }
.ads-growth__tile small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ads-footer { display:flex;align-items:center;gap:var(--space-xs);margin:0;padding-top:var(--space-sm);border-top:1px solid var(--d-border);color:var(--d-text-3);font-size:var(--text-caption2); }
@media (max-width:1050px) { .ads-hero { grid-template-columns:1fr; } .ads-summary { grid-template-columns:1fr 1fr; } .ads-summary>div:nth-child(3) { border-left:0; } .ads-summary>div:nth-child(-n+2) { border-bottom:1px solid var(--d-border); } .ads-grid,.ads-growth__grid { grid-template-columns:1fr; } .ads-assignment { grid-template-columns:38px minmax(0,1fr) auto; } .ads-assignment>.ads-arrow,.ads-assignment>.ads-provider,.ads-assignment>.ads-mark[data-tone="dashed"] { display:none; } .ads-assignment>div:nth-child(5) { grid-column:2; } .ads-assignment>.ads-readiness { grid-column:2; } }
@media (max-width:720px) { .ads-summary { grid-template-columns:1fr; } .ads-summary>div { border-left:0;border-bottom:1px solid var(--d-border); } .ads-counts { grid-template-columns:1fr 1fr; } .ads-hero__pitch { flex-direction:column;align-items:flex-start; } }

/* ── Lead Integrations (Catalyst LeadIntegrationSettingsSheet) ──────────────────────────────── */
.li-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.li-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.li-crumb strong { color:var(--d-text); }
.li-page { display:grid;gap:var(--space-md); }
.li-header { display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg); }
.li-heading h1 { display:flex;align-items:center;gap:var(--space-sm);margin:0;font-size:var(--text-title2);line-height:1.15; }
.li-heading p { margin:4px 0 0;color:var(--d-text-2);font-size:var(--text-footnote); }
.li-refreshing { display:inline-flex;align-items:center;gap:6px;color:var(--d-text-3);font-size:var(--text-caption);font-weight:600; }
.li-outline,.li-primary,.li-text-action { display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:7px 12px;border-radius:var(--d-radius-sm);font:inherit;font-size:var(--text-caption);font-weight:700;text-decoration:none;cursor:pointer;white-space:nowrap; }
.li-outline { border:1px solid var(--d-border);background:var(--d-card-bg);color:var(--d-text); }
.li-primary { border:0;background:var(--d-green);color:var(--c-on-brand); }
.li-primary--sm { min-height:30px;padding:5px 10px;font-size:var(--text-caption2); }
.li-text-action { min-height:28px;padding:4px 8px;border:0;background:transparent;color:var(--d-green); }
.li-text-action:disabled,.li-primary:disabled { opacity:.55;cursor:default; }
.li-danger { color:var(--c-danger); }
.li-health { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--d-border);border-radius:var(--d-radius-lg);background:var(--d-card-bg);overflow:hidden; }
.li-metric { display:flex;align-items:center;gap:var(--space-sm);padding:14px 18px;border-right:1px solid var(--d-border);color:var(--d-text); }
.li-metric:last-child { border-right:0; }
.li-metric>svg { flex:0 0 auto;color:var(--d-text-3); }
.li-metric strong { display:block;font-size:var(--text-title3);line-height:1.1; }
.li-metric small { color:var(--d-text-3);font-size:var(--text-caption2);font-weight:600; }
.li-metric[data-tone="ok"]>svg,.li-metric[data-tone="ok"] strong { color:var(--c-success); }
.li-metric[data-tone="brand"]>svg,.li-metric[data-tone="brand"] strong { color:var(--d-green); }
.li-metric[data-tone="quiet"]>svg,.li-metric[data-tone="quiet"] strong { color:var(--d-text-3); }
.li-section { margin:var(--space-xs) 0 calc(-1 * var(--space-xs));color:var(--d-text-3);font-size:var(--text-caption2);font-weight:800;letter-spacing:.09em; }
.li-card { display:grid;gap:var(--space-sm);align-content:start;padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius-lg);background:var(--d-card-bg); }
.li-card__header>div { display:flex;align-items:center;gap:var(--space-sm); }
.li-card__header strong { font-size:var(--text-footnote); }
.li-card__header p { margin:4px 0 0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.li-card__icon { display:grid;place-items:center;width:30px;height:30px;flex:0 0 auto;border-radius:8px;background:var(--d-content-bg);color:var(--d-green); }
.li-card__icon[data-tint="blue"] { color:var(--c-info); }
.li-card__icon[data-tint="purple"] { color:var(--c-accent-purple); }
.li-card__row { display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm); }
.li-card__trailing { display:flex;align-items:center;gap:var(--space-sm);flex:0 0 auto; }
.li-pill { display:inline-flex;align-items:center;gap:4px;flex:0 0 auto;padding:4px 9px;border-radius:999px;background:var(--d-content-bg);color:var(--d-text-2);font-size:var(--text-caption2);font-weight:750;white-space:nowrap; }
.li-pill[data-tone="ok"] { color:var(--c-success);background:var(--c-success-tint); }
.li-pill[data-tone="warn"] { color:var(--c-warning);background:var(--c-warning-tint); }
.li-pill[data-tone="brand"] { color:var(--d-green);background:var(--c-accent-tint); }
.li-pills { display:flex;flex-wrap:wrap;gap:6px; }
.li-fold { display:inline-flex;align-items:center;gap:5px;justify-self:start;padding:0;border:0;background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.li-details { display:grid;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px solid var(--d-border); }
.li-details>small,.li-sheet__label,.li-coverage>small,.li-urlbox>small { display:block;margin-top:var(--space-xs);color:var(--d-text-3);font-size:var(--text-caption2);font-weight:800;letter-spacing:.08em; }
.li-field { display:flex;align-items:center;gap:var(--space-sm);padding:8px 10px;border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.li-field code { flex:1 1 auto;min-width:0;font-size:var(--text-caption2);line-height:1.4;overflow-wrap:anywhere;color:var(--d-text); }
.li-field--address code { font-size:var(--text-caption); }
.li-copy { display:grid;place-items:center;width:28px;height:28px;flex:0 0 auto;border:0;border-radius:6px;background:transparent;color:var(--d-green);cursor:pointer; }
.li-step { display:flex;align-items:flex-start;gap:var(--space-sm); }
.li-step span { display:grid;place-items:center;width:20px;height:20px;flex:0 0 auto;border-radius:50%;background:var(--c-accent-tint);color:var(--d-green);font-size:var(--text-caption2);font-weight:800; }
.li-step p { margin:1px 0 0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.li-muted { display:block;margin:0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.li-inline-loading { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:var(--d-text-3);font-size:var(--text-caption); }
.li-owned { display:grid;grid-template-columns:minmax(0,1fr) 390px;gap:var(--space-md);align-items:start; }
.li-hero { grid-template-columns:minmax(0,1fr) auto;gap:var(--space-lg); }
.li-hero__main { display:grid;gap:var(--space-sm);align-content:start;min-width:0; }
.li-hero__side { display:grid;gap:var(--space-sm);justify-items:end;align-content:start; }
.li-qr { display:block;width:112px;height:112px;border:1px solid var(--d-border);border-radius:8px;background:var(--c-on-brand);image-rendering:pixelated; }
.li-urlbox { display:grid;gap:4px;padding:10px 12px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.li-urlbox>small { margin-top:0; }
.li-urlbox>div { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm); }
.li-urlbox code { min-width:0;font-size:var(--text-caption);font-weight:650;overflow-wrap:anywhere; }
.li-urlbox__recovery { color:var(--d-text-3);font-size:var(--text-caption2); }
.li-menu { position:relative;flex:0 0 auto; }
.li-menu>summary { display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:5px 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);color:var(--d-text);font-size:var(--text-caption2);font-weight:700;list-style:none;cursor:pointer;white-space:nowrap; }
.li-menu>summary::-webkit-details-marker { display:none; }
.li-menu>div { position:absolute;right:0;z-index:5;display:grid;min-width:210px;margin-top:4px;padding:var(--space-xs);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);box-shadow:0 8px 24px rgba(0,0,0,.12); }
.li-menu>div button { padding:8px 10px;border:0;border-radius:6px;background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);text-align:left;cursor:pointer; }
.li-menu>div button:hover { background:var(--d-content-bg); }
.li-chips { display:flex;flex-wrap:wrap;gap:6px; }
.li-chips span { padding:3px 8px;border-radius:999px;background:var(--d-content-bg);color:var(--d-text-2);font-size:var(--text-caption2);font-weight:650; }
.li-actions { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm); }
.li-suggestion { justify-self:start;padding-left:0; }
.li-marketplace { gap:var(--space-md); }
.li-marketplace__grid { display:grid;grid-template-columns:minmax(0,440px) minmax(0,1fr);gap:var(--space-xl); }
.li-inbox { display:grid;gap:var(--space-sm);align-content:start; }
.li-sources { display:grid;align-content:start; }
.li-sources__head,.li-source { display:grid;grid-template-columns:minmax(0,1fr) 120px 150px 62px;align-items:center;gap:var(--space-sm); }
.li-sources__head { padding:0 0 8px;color:var(--d-text-3);font-size:var(--text-caption2);font-weight:800;letter-spacing:.08em; }
.li-sources__head span:last-child,.li-source>:last-child { justify-self:end;text-align:right; }
.li-source { min-height:40px;padding:6px 0;border-top:1px solid var(--d-border);font-size:var(--text-caption); }
.li-source>div { display:flex;align-items:center;gap:var(--space-sm);min-width:0;color:var(--d-text); }
.li-source>div svg { color:var(--d-text-3); }
.li-source>span { color:var(--d-text-2); }
.li-evidence { display:inline-flex;align-items:center;gap:6px;font-weight:700; }
.li-evidence i { width:7px;height:7px;border-radius:50%;background:var(--d-text-3); }
.li-evidence[data-tone="ok"] { color:var(--c-success); } .li-evidence[data-tone="ok"] i { background:var(--c-success); }
.li-evidence[data-tone="warn"] { color:var(--c-warning); } .li-evidence[data-tone="warn"] i { background:var(--c-warning); }
.li-evidence[data-tone="quiet"] { color:var(--d-text-3); }
.li-pair,.li-evidence-grid { display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-md);align-items:start; }
.li-evidence-grid { grid-template-columns:minmax(0,1fr) 330px; }
.li-evidence-grid>.li-card:only-child { grid-column:1 / -1; }
.li-routing-metrics { display:flex;align-items:center;gap:var(--space-lg);padding:10px 14px;border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.li-routing-metrics>div { padding-right:var(--space-lg);border-right:1px solid var(--d-border); }
.li-routing-metrics>div:last-child { border-right:0; }
.li-routing-metrics strong { display:block;font-size:var(--text-title3);line-height:1.1; }
.li-routing-metrics small { color:var(--d-text-2);font-size:var(--text-caption2);font-weight:650; }
.li-routing-metrics [data-tone="brand"] strong { color:var(--d-green); }
.li-coverage>small span { font-weight:600;letter-spacing:0; }
.li-coverage__row { display:flex;align-items:center;gap:var(--space-sm);min-height:40px;padding:6px 0;border-top:1px solid var(--d-border);font-size:var(--text-caption); }
.li-coverage__row:nth-of-type(1) { border-top:0; }
.li-coverage__row strong { flex:1 1 auto;min-width:0; }
.li-coverage__row em { display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;background:var(--c-accent-tint);color:var(--d-green);font-size:var(--text-caption2);font-style:normal;font-weight:750; }
.li-coverage__row em[data-tone="warn"] { color:var(--c-warning);background:var(--c-warning-tint); }
.li-coverage__row b { color:var(--d-text-2);font-weight:650; }
.li-mark { display:grid;place-items:center;width:30px;height:30px;flex:0 0 auto;border-radius:8px;background:var(--c-accent-tint);color:var(--d-green); }
.li-overlap { display:flex;align-items:flex-start;gap:var(--space-sm);margin:0;padding:10px 12px;border-radius:var(--d-radius-sm);background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption);line-height:1.45; }
.li-overlap svg { flex:0 0 auto;margin-top:2px; }
.li-fallback { display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding-top:var(--space-sm);border-top:1px solid var(--d-border); }
.li-fallback strong { display:block;font-size:var(--text-caption); }
.li-fallback small { color:var(--d-text-2);font-size:var(--text-caption2); }
.li-fallback b { color:var(--d-green);font-size:var(--text-caption);white-space:nowrap; }
.li-empty p { display:flex;align-items:center;gap:var(--space-sm);margin:0;color:var(--d-text);font-size:var(--text-caption);font-weight:650; }
.li-empty small { display:block;margin-top:4px;color:var(--d-text-3);font-size:var(--text-caption2); }
.li-arrivals { display:grid;gap:var(--space-sm); }
.li-arrival { display:grid;grid-template-columns:18px minmax(0,1fr) auto;align-items:start;gap:var(--space-sm); }
.li-arrival>span { display:grid;place-items:center;height:18px;color:var(--d-text-3); }
.li-arrival>span[data-tone="ok"] { color:var(--c-success); } .li-arrival>span[data-tone="blue"] { color:var(--c-info); }
.li-arrival>span[data-tone="yellow"] { color:var(--c-warning); } .li-arrival>span[data-tone="red"] { color:var(--c-danger); }
.li-arrival strong { display:block;font-size:var(--text-caption);line-height:1.3; }
.li-arrival small { display:block;margin-top:2px;color:var(--d-text-3);font-size:var(--text-caption2); }
.li-arrival small[data-tone="warn"] { color:var(--c-warning); }
.li-arrival time { color:var(--d-text-3);font-size:var(--text-caption2);white-space:nowrap; }
/* Sheets: Page Address and Estimate Page Services. */
.li-sheet-host { position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:var(--space-md); }
.li-sheet__backdrop { position:absolute;inset:0;background:rgba(0,0,0,.35); }
.li-sheet { position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(780px,100%);max-height:min(720px,92vh);border-radius:var(--d-radius-lg);background:var(--d-content-bg);box-shadow:0 28px 80px rgba(0,0,0,.25);overflow:hidden; }
.li-sheet--wide { width:min(860px,100%); }
.li-sheet>header { display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--d-border);background:var(--d-card-bg); }
.li-sheet>header>div { grid-column:2;text-align:center; }
.li-sheet>header h2 { display:flex;align-items:center;justify-content:center;gap:6px;margin:0;font-size:var(--text-subhead); }
.li-sheet>header p { margin:2px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.li-sheet__cancel { grid-column:1;justify-self:start;padding:0;border:0;background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.li-sheet__body { display:grid;gap:var(--space-sm);align-content:start;padding:var(--space-md);overflow:auto; }
.li-sheet__card { display:grid;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg); }
.li-sheet__card>strong { font-size:var(--text-footnote); }
.li-sheet__card>p,.li-sheet__notice p,.li-market-picker p,.li-preview__head p { margin:0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.li-sheet__notice { grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm); }
.li-sheet__notice strong { display:flex;align-items:center;gap:6px;font-size:var(--text-caption); }
.li-sheet__notice em { padding:2px 7px;border-radius:999px;background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal;font-weight:800;letter-spacing:.06em; }
.li-sheet__notice code { display:block;margin-top:2px;font-size:var(--text-caption);font-weight:650; }
.li-sheet__suggest { display:grid;justify-items:end;gap:2px; }
.li-sheet__suggest code { font-size:var(--text-caption);font-weight:700; }
.li-slug { display:flex;align-items:center;min-height:42px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);overflow:hidden; }
.li-slug span { padding:0 12px;border-right:1px solid var(--d-border);color:var(--d-text-2);font-size:var(--text-caption);font-weight:650;white-space:nowrap; }
.li-slug input { flex:1 1 auto;min-width:0;height:42px;padding:0 12px;border:0;background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);font-weight:650; }
.li-sheet__status { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);flex-wrap:wrap; }
.li-sheet__status small { color:var(--d-text-3);font-size:var(--text-caption2); }
.li-availability { display:inline-flex;align-items:center;gap:5px;font-size:var(--text-caption);font-weight:650;color:var(--d-text-2); }
.li-availability[data-tone="ok"] { color:var(--c-success); } .li-availability[data-tone="warn"] { color:var(--c-warning); } .li-availability[data-tone="brand"] { color:var(--d-green); }
.li-alias { display:flex;align-items:center;gap:var(--space-sm);padding:6px 0;border-top:1px solid var(--d-border);color:var(--d-text-3);font-size:var(--text-caption); }
.li-alias:nth-of-type(1) { border-top:0; }
.li-alias code { flex:1 1 auto;color:var(--d-text);font-weight:650; }
.li-alias em { font-style:normal;font-size:var(--text-caption2);font-weight:700; }
.li-sheet>footer { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-top:1px solid var(--d-border);background:var(--d-card-bg); }
.li-sheet>footer>div { display:flex;gap:var(--space-sm); }
.li-explain strong { display:flex;align-items:center;gap:6px;font-size:var(--text-footnote); }
.li-explain p { margin:4px 0 0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.li-market-picker { grid-template-columns:minmax(0,1fr) auto;align-items:center; }
.li-market-picker .li-sheet__label { margin-top:0; }
.li-select { display:inline-flex;align-items:center;gap:6px;padding:0 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);color:var(--d-green); }
.li-select select { height:36px;border:0;background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);font-weight:700; }
.li-catalog-metrics { grid-template-columns:auto auto auto 1fr;align-items:center;gap:var(--space-xl); }
.li-catalog-metrics>div { padding-right:var(--space-xl);border-right:1px solid var(--d-border); }
.li-catalog-metrics>div:nth-child(3) { border-right:0; }
.li-catalog-metrics strong { display:block;font-size:var(--text-title3);line-height:1.1; }
.li-catalog-metrics small { color:var(--d-text-2);font-size:var(--text-caption2);font-weight:650; }
.li-catalog-metrics [data-tone="ok"] strong { color:var(--c-success); } .li-catalog-metrics [data-tone="brand"] strong { color:var(--d-green); }
.li-search { display:flex;align-items:center;gap:var(--space-sm);padding:0 12px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-card-bg);color:var(--d-text-3); }
.li-search input { flex:1 1 auto;min-width:0;height:38px;border:0;background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption); }
.li-search button { border:0;background:transparent;color:var(--d-text-3);font-size:18px;cursor:pointer; }
.li-services { gap:0;padding:0 var(--space-md); }
.li-services-empty { justify-items:center;padding:var(--space-lg);text-align:center;color:var(--d-text-3); }
.li-services-empty strong { color:var(--d-text);font-size:var(--text-footnote); }
.li-service { display:grid;grid-template-columns:30px minmax(0,1fr) auto auto auto;align-items:center;gap:var(--space-sm);min-height:56px;padding:8px 0;border-top:1px solid var(--d-border); }
.li-service:first-child { border-top:0; }
.li-service strong { display:flex;align-items:center;gap:6px;font-size:var(--text-caption); }
.li-service strong em { padding:2px 7px;border-radius:999px;background:var(--c-accent-tint);color:var(--d-green);font-size:var(--text-caption2);font-style:normal;font-weight:750; }
.li-service small { display:block;margin-top:2px;color:var(--d-text-3);font-size:var(--text-caption2); }
.li-order { display:inline-flex;gap:2px; }
.li-order button,.li-star { display:grid;place-items:center;width:28px;height:28px;border:0;border-radius:6px;background:transparent;color:var(--d-text-2);cursor:pointer; }
.li-order button:disabled { opacity:.35;cursor:default; }
.li-star { color:var(--c-warning); }
.li-switch { position:relative;display:inline-block;width:40px;height:24px; }
.li-switch input { position:absolute;inset:0;margin:0;opacity:0;cursor:pointer; }
.li-switch span { position:absolute;inset:0;border-radius:999px;background:var(--d-border);transition:background .15s; }
.li-switch span::after { content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:var(--c-on-brand);transition:transform .15s; }
.li-switch input:checked+span { background:var(--c-success); }
.li-switch input:checked+span::after { transform:translateX(16px); }
.li-preview { gap:var(--space-sm); }
.li-preview__head { display:flex;align-items:flex-start;gap:var(--space-sm); }
.li-preview__head svg { flex:0 0 auto;margin-top:2px;color:var(--d-green); }
.li-preview__head strong { font-size:var(--text-caption); }
.li-preview__row { display:flex;align-items:center;gap:var(--space-sm); }
.li-preview__row input { width:120px;height:36px;padding:0 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);color:var(--d-text);font:inherit;font-size:var(--text-caption); }
@media (max-width:1050px) { .li-owned,.li-pair,.li-evidence-grid,.li-marketplace__grid { grid-template-columns:1fr; } .li-health { grid-template-columns:1fr 1fr; } .li-metric:nth-child(2) { border-right:0; } .li-metric:nth-child(-n+2) { border-bottom:1px solid var(--d-border); } }
@media (max-width:720px) { .li-header { flex-direction:column;align-items:flex-start; } .li-hero { grid-template-columns:1fr; } .li-hero__side { justify-items:start; } .li-sources__head,.li-source { grid-template-columns:minmax(0,1fr) auto; } .li-sources__head span:nth-child(2),.li-sources__head span:nth-child(3),.li-source>span:nth-child(2),.li-source>.li-evidence { display:none; } .li-routing-metrics { flex-wrap:wrap; } .li-service { grid-template-columns:30px minmax(0,1fr) auto; } .li-service .li-order,.li-service .li-star { grid-column:3; } }

/* Facebook & Instagram Settings destination — frozen Catalyst IntegrationsView+Facebook* hierarchy. */
:root { --fbx-deep:#063b26;--fbx-forest:#051f14;--fbx-fb:#1877f2;--fbx-ig:#c13584;--fbx-meta:#4d6fea; } /* raw-color-ok — frozen Catalyst Meta palette */
.fbx-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.fbx-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.fbx-crumb strong { color:var(--d-text); }
.fbx-page { display:grid;gap:var(--space-md); }
.fbx-loading { display:grid;justify-items:center;gap:var(--space-sm);padding:120px var(--space-lg);color:var(--d-text-3); }
.fbx-hero { display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.45fr);align-items:center;gap:var(--space-xl);min-height:210px;padding:var(--space-xl);border-radius:var(--d-radius-lg);background:linear-gradient(115deg,var(--fbx-deep),var(--fbx-forest));color:var(--c-on-brand); }
.fbx-hero--disconnected { grid-template-columns:minmax(0,1fr) auto;min-height:160px; }
.fbx-hero__identity { display:flex;align-items:center;gap:var(--space-lg);min-width:0; }
.fbx-hero__copy { min-width:0; }
.fbx-logo { display:grid;flex:0 0 82px;place-items:center;width:82px;height:82px;border-radius:var(--d-radius);background:var(--c-surface);color:var(--fbx-fb); }
.fbx-eyebrow { color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:750;letter-spacing:.12em;opacity:.8; }
.fbx-hero h1 { margin:var(--space-xs) 0;font-size:clamp(24px,2vw,32px);line-height:1.12;letter-spacing:-.035em; }
.fbx-hero p { max-width:70ch;margin:0;color:rgba(255,255,255,.78);font-size:var(--text-footnote);line-height:1.5; }
.fbx-status { display:inline-flex;align-items:center;gap:6px;margin-top:var(--space-sm);padding:5px 11px;border-radius:var(--radius-pill);background:rgba(0,0,0,.18);color:var(--calset-ok);font-size:var(--text-caption2);font-weight:750; }
.fbx-status[data-tone="warn"] { color:var(--calset-warn); }
.fbx-hero__action { display:grid;justify-items:center; }
.fbx-hero__note { color:rgba(255,255,255,.8) !important;font-size:var(--text-caption) !important; }
.fbx-connect { display:inline-flex;align-items:center;gap:var(--space-xs);min-height:44px;padding:10px 20px;border:0;border-radius:var(--d-radius);background:var(--c-surface);color:var(--fbx-deep);font:inherit;font-size:var(--text-footnote);font-weight:750;cursor:pointer; }
.fbx-connect[disabled] { opacity:.7;cursor:default; }
.fbx-account { display:grid;gap:var(--space-sm);padding:var(--space-sm-md);border:1px solid rgba(255,255,255,.17);border-radius:var(--d-radius);background:rgba(0,0,0,.2); }
.fbx-account>div:first-child { display:flex;align-items:center;gap:var(--space-sm); }
.fbx-account__monogram { display:grid;flex:0 0 44px;place-items:center;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.18);color:var(--c-on-brand);font-size:var(--text-caption);font-weight:800; }
.fbx-account strong { display:block;overflow:hidden;font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap; }
.fbx-account small { color:rgba(255,255,255,.7);font-size:var(--text-caption2); }
.fbx-account>p { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:rgba(255,255,255,.85);font-size:var(--text-caption2); }
.fbx-account>p[data-tone="ok"]>svg { color:var(--calset-ok); }
.fbx-account>p[data-tone="warn"]>svg { color:var(--calset-warn); }
.fbx-account__actions { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);margin-top:var(--space-xs); }
.fbx-account .fbx-outline { border-color:rgba(255,255,255,.45);color:var(--c-on-brand); }
.fbx-account .fbx-danger { color:#ffb4a8; } /* raw-color-ok — danger on the dark hero */
.fbx-outline { display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 12px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);font-weight:650;white-space:nowrap;cursor:pointer; }
.fbx-outline--sm { min-height:28px;padding:4px 10px;font-size:var(--text-caption2); }
.fbx-primary { display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:8px 14px;border:0;border-radius:var(--d-radius-sm);background:var(--d-green);color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;text-decoration:none;cursor:pointer; }
.fbx-primary[disabled] { opacity:.6;cursor:default; }
.fbx-danger { padding:0;border:0;background:transparent;color:var(--c-danger);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.fbx-text-action { padding:6px 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption2);font-weight:700;cursor:pointer; }
.fbx-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.fbx-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);grid-template-rows:auto auto auto;align-items:start;column-gap:var(--space-sm);row-gap:2px;padding:var(--space-sm-md);border-left:1px solid var(--d-border); }
.fbx-summary>div:first-child { border-left:0; }
.fbx-summary>div>span { grid-row:1/4;display:grid;place-items:center;align-self:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.fbx-summary>div>span[data-tint="fb"] { color:var(--fbx-fb); }
.fbx-summary strong { font-size:var(--text-footnote);line-height:1.2; }
.fbx-summary small,.fbx-summary em { color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal; }
.fbx-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md); }
.fbx-panel { padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.fbx-panel>h2,.fbx-panel>header h2 { margin:0;font-size:var(--text-subhead); }
.fbx-panel>h2 { margin-bottom:var(--space-sm); }
.fbx-panel>header { margin-bottom:var(--space-sm); }
.fbx-panel>header p { margin:3px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-coverage>header { display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm); }
.fbx-panel>footer { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--d-border); }
.fbx-panel>footer p { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-row { display:grid;grid-template-columns:38px minmax(0,1fr) auto auto;align-items:center;gap:var(--space-sm);width:100%;min-height:58px;padding:var(--space-xs) 0;border:0;border-top:1px solid var(--d-border);background:transparent;color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer; }
.fbx-row:first-of-type { border-top:0; }
.fbx-row>span { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.fbx-row>span[data-tint="ig"] { color:var(--fbx-ig); }
.fbx-row>span[data-tint="meta"] { color:var(--fbx-meta); }
.fbx-row>span[data-tint="ads"] { color:var(--c-warning); }
.fbx-row strong { display:block;font-size:var(--text-caption); }
.fbx-row small { color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-row>b { color:var(--d-text-3);font-size:var(--text-caption2);font-weight:650;white-space:nowrap; }
.fbx-row>svg:last-child,.fbx-growth__tile>svg:last-child { color:var(--d-text-3); }
.fbx-badge { padding:4px 9px;border-radius:var(--radius-pill);background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal;font-weight:700;white-space:nowrap; }
.fbx-badge[data-tone="ok"] { background:var(--c-success-tint);color:var(--c-success); }
.fbx-badge[data-tone="warn"] { background:var(--c-warning-tint);color:var(--c-warning); }
.fbx-benefits { display:grid;gap:var(--space-xs);margin:0;padding:0;list-style:none;color:var(--d-text-2);font-size:var(--text-caption); }
.fbx-benefits li,.fbx-upsell li { display:flex;align-items:center;gap:var(--space-xs); }
.fbx-benefits li>svg,.fbx-upsell li>svg { color:var(--c-success); }
.fbx-note { display:flex;align-items:center;gap:var(--space-xs);margin:var(--space-sm) 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-market-list { display:grid; }
.fbx-market { display:grid;grid-template-columns:40px minmax(0,1fr) 24px 38px minmax(0,1.3fr) auto auto;align-items:center;gap:var(--space-sm);min-height:64px;padding:var(--space-xs) 0;border-top:1px solid var(--d-border); }
.fbx-market:first-child { border-top:0; }
.fbx-market strong { display:block;font-size:var(--text-caption); }
.fbx-market small { color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-arrow { display:grid;color:var(--d-text-3); }
.fbx-mark { display:grid;flex:0 0 38px;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.fbx-mark[data-tone="quiet"] { color:var(--d-text-3); }
.fbx-mark[data-tone="fb"] { color:var(--fbx-fb); }
.fbx-mark[data-tone="ig"] { color:var(--fbx-ig); }
.fbx-mark[data-tone="meta"] { color:var(--fbx-meta); }
.fbx-mark[data-tone="dashed"] { border:1px dashed var(--d-border);background:transparent;color:var(--d-text-3); }
.fbx-growth h2 { margin-bottom:var(--space-sm); }
.fbx-growth__grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm); }
.fbx-growth__tile { display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer; }
.fbx-growth__tile>span { display:grid;place-items:center;width:40px;height:40px;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--d-green); }
.fbx-growth__tile strong { display:block;font-size:var(--text-caption); }
.fbx-growth__tile small { color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-upsell h1 { margin:0 0 var(--space-sm);font-size:var(--text-title3); }
.fbx-upsell ul { display:grid;gap:var(--space-xs);margin:0 0 var(--space-md);padding:0;list-style:none;color:var(--d-text-2);font-size:var(--text-caption); }
.fbx-sheet-host { position:fixed;inset:0;z-index:60;display:grid;place-items:center; }
.fbx-sheet__backdrop { position:absolute;inset:0;background:rgba(0,0,0,.35); }
.fbx-sheet { position:relative;width:min(760px,94vw);max-height:88vh;overflow:auto;padding:var(--space-md);border-radius:var(--d-radius-lg);background:var(--d-card-bg); }
.fbx-sheet>header { display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm); }
.fbx-sheet>header h2 { margin:0;font-size:var(--text-subhead);text-align:center; }
.fbx-sheet__back,.fbx-sheet__done { padding:0;border:0;background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.fbx-sheet__back { justify-self:start; }
.fbx-sheet__done { justify-self:end;font-weight:750; }
.fbx-sheet__intro,.fbx-sheet__hero { margin:0 0 var(--space-sm);color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.fbx-sheet__hero strong { color:var(--d-text);font-size:var(--text-footnote); }
.fbx-sheet__label { display:block;margin:var(--space-sm) 0 var(--space-xs);color:var(--d-text-3);font-size:var(--text-caption2);font-weight:750;letter-spacing:.08em; }
.fbx-sheet__row { display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:start;gap:var(--space-sm);padding:var(--space-sm) 0;border-top:1px solid var(--d-border); }
.fbx-sheet__body { min-width:0; }
.fbx-sheet__body>strong { display:block;font-size:var(--text-caption); }
.fbx-sheet__body>.fbx-sheet__label { margin-top:0; }
.fbx-sheet__field { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);margin-top:var(--space-xs); }
.fbx-sheet__field select { flex:1 1 220px;min-height:32px;padding:0 var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);font:inherit;font-size:var(--text-caption); }
.fbx-sheet__detail { display:block;margin-top:4px;color:var(--d-text-3);font-size:var(--text-caption2); }
.fbx-sheet__error { display:block;min-height:1em;color:var(--c-danger);font-size:var(--text-caption2); }
.fbx-sheet>footer { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--d-border);color:var(--d-text-3);font-size:var(--text-caption2); }
@media (max-width:1050px) { .fbx-hero,.fbx-hero--disconnected { grid-template-columns:1fr; } .fbx-summary { grid-template-columns:1fr 1fr; } .fbx-summary>div:nth-child(3) { border-left:0; } .fbx-summary>div:nth-child(-n+2) { border-bottom:1px solid var(--d-border); } .fbx-grid,.fbx-growth__grid { grid-template-columns:1fr; } }
@media (max-width:720px) { .fbx-summary { grid-template-columns:1fr; } .fbx-summary>div { border-left:0;border-bottom:1px solid var(--d-border); } .fbx-market { grid-template-columns:40px minmax(0,1fr) auto; } .fbx-market>.fbx-arrow,.fbx-market>.fbx-mark:nth-child(4) { display:none; } .fbx-market>div:nth-child(5) { grid-column:2; } .fbx-hero__identity { flex-direction:column;align-items:flex-start; } }

/* Google Business Profile Settings destination — frozen Catalyst IntegrationsView+GoogleBusiness*. */
:root { --gbp-deep:#063b26;--gbp-forest:#051f14;--gbp-blue:#3c6fd1;--gbp-meta:#4d6fea; } /* raw-color-ok — frozen Catalyst Google Business palette */
.gbp-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.gbp-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.gbp-crumb strong { color:var(--d-text); }
.gbp-page { display:grid;gap:var(--space-md); }
.gbp-loading { display:grid;justify-items:center;gap:var(--space-sm);padding:120px var(--space-lg);color:var(--d-text-3); }
.gbp-error { display:flex;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg);color:var(--c-danger); }
.gbp-error h1 { margin:0;font-size:var(--text-subhead);color:var(--d-text); }
.gbp-error p { margin:var(--space-xs) 0 var(--space-sm);color:var(--d-text-2); }
.gbp-hero { display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.45fr);align-items:center;gap:var(--space-xl);min-height:210px;padding:var(--space-xl);border-radius:var(--d-radius-lg);background:linear-gradient(115deg,var(--gbp-deep),var(--gbp-forest));color:var(--c-on-brand); }
.gbp-hero__identity { display:flex;align-items:center;gap:var(--space-lg);min-width:0; }
.gbp-logo { display:grid;flex:0 0 74px;place-items:center;width:74px;height:74px;border-radius:var(--d-radius);background:var(--c-surface);color:var(--d-green); }
.gbp-eyebrow { color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:750;letter-spacing:.12em;opacity:.8; }
.gbp-hero h1 { margin:var(--space-xs) 0;font-size:clamp(24px,2vw,32px);line-height:1.12;letter-spacing:-.035em; }
.gbp-hero__identity p { max-width:70ch;margin:0;color:rgba(255,255,255,.78);font-size:var(--text-footnote);line-height:1.5; }
.gbp-status { display:inline-flex;align-items:center;gap:6px;margin-top:var(--space-sm);padding:5px 11px;border-radius:var(--radius-pill);background:rgba(0,0,0,.18);color:rgba(255,255,255,.86);font-size:var(--text-caption2);font-weight:750; }
.gbp-status[data-tone="ok"] { color:var(--calset-ok); }
.gbp-status[data-tone="warn"] { color:var(--calset-warn); }
.gbp-hero__action { display:grid;justify-items:center;gap:var(--space-xs);color:rgba(255,255,255,.75);font-size:var(--text-caption2); }
.gbp-hero__action--locked { justify-items:start;padding:var(--space-sm-md);border:1px solid rgba(255,255,255,.15);border-radius:var(--d-radius);background:rgba(0,0,0,.15);color:var(--c-on-brand); }
.gbp-hero__action--locked strong { display:flex;align-items:center;gap:var(--space-xs);font-size:var(--text-caption); }
.gbp-connect { display:inline-flex;align-items:center;gap:var(--space-xs);min-height:44px;padding:10px 20px;border:0;border-radius:var(--d-radius);background:var(--c-surface);color:var(--gbp-deep);font:inherit;font-size:var(--text-footnote);font-weight:750;cursor:pointer; }
.gbp-connect[disabled] { opacity:.7;cursor:default; }
.gbp-account { display:grid;gap:var(--space-sm);padding:var(--space-sm-md);border:1px solid rgba(255,255,255,.17);border-radius:var(--d-radius);background:rgba(0,0,0,.2); }
.gbp-account>div:first-child { display:flex;align-items:center;gap:var(--space-sm); }
.gbp-account__avatar { display:grid;flex:0 0 36px;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--c-surface);color:var(--gbp-deep); }
.gbp-account strong { display:block;overflow:hidden;font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap; }
.gbp-account small { color:rgba(255,255,255,.7);font-size:var(--text-caption2); }
.gbp-account>p { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:rgba(255,255,255,.85);font-size:var(--text-caption2); }
.gbp-account>p[data-tone="ok"]>svg { color:var(--calset-ok); }
.gbp-account>p[data-tone="warn"]>svg { color:var(--calset-warn); }
.gbp-account__actions { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);margin-top:var(--space-xs); }
.gbp-account .gbp-outline { border-color:rgba(255,255,255,.45);color:var(--c-on-brand); }
.gbp-account .gbp-danger { color:#ffb4a8; } /* raw-color-ok — danger on the dark hero */
.gbp-outline { display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 12px;white-space:nowrap;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.gbp-outline[disabled] { opacity:.6;cursor:default; }
.gbp-primary { display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:8px 14px;border:0;border-radius:var(--d-radius-sm);background:var(--d-green);color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;text-decoration:none;cursor:pointer; }
.gbp-primary--sm { min-height:32px;padding:6px 12px; }
.gbp-danger { padding:0;border:0;background:transparent;color:var(--c-danger);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.gbp-text-action { padding:6px 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption2);font-weight:700;cursor:pointer; }
.gbp-text-action[disabled] { color:var(--d-text-3);cursor:default; }
.gbp-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.gbp-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);grid-template-rows:auto auto auto;align-items:start;column-gap:var(--space-sm);row-gap:2px;padding:var(--space-sm-md);border-left:1px solid var(--d-border); }
.gbp-summary>div:first-child { border-left:0; }
.gbp-summary>div>span { grid-row:1/4;display:grid;place-items:center;align-self:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.gbp-summary strong { font-size:var(--text-footnote);line-height:1.2; }
.gbp-summary small,.gbp-summary em { color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal; }
.gbp-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md); }
.gbp-panel { padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.gbp-panel>h2,.gbp-panel>header h2 { margin:0;font-size:var(--text-subhead); }
.gbp-panel>h2 { margin-bottom:var(--space-sm); }
.gbp-panel>header { margin-bottom:var(--space-sm); }
.gbp-panel>header p { margin:3px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.gbp-coverage>header { display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm); }
.gbp-panel>footer { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--d-border); }
.gbp-panel>footer p { display:flex;align-items:center;gap:var(--space-xs);margin:0;color:var(--d-text-3);font-size:var(--text-caption2); }
.gbp-panel>footer a { display:inline-flex;align-items:center;gap:4px;color:var(--d-green);font-size:var(--text-caption);font-weight:650;text-decoration:none;white-space:nowrap; }
.gbp-row,.gbp-cap,.gbp-stack { display:grid;grid-template-columns:38px minmax(0,1fr) auto auto;align-items:center;gap:var(--space-sm);width:100%;min-height:58px;padding:var(--space-xs) 0;border:0;border-top:1px solid var(--d-border);background:transparent;color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer; }
.gbp-row:first-of-type,.gbp-cap:first-of-type,.gbp-stack:first-of-type { border-top:0; }
div.gbp-row,.gbp-cap { cursor:default; }
.gbp-row[disabled],.gbp-stack[disabled] { cursor:default; }
.gbp-row>span,.gbp-cap>span,.gbp-stack>span { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.gbp-stack>span[data-tint="blue"] { color:var(--gbp-meta); }
.gbp-stack>span[data-tint="warn"] { color:var(--c-warning); }
.gbp-row strong,.gbp-cap strong,.gbp-stack strong { display:block;font-size:var(--text-caption); }
.gbp-row small,.gbp-cap small,.gbp-stack small { color:var(--d-text-3);font-size:var(--text-caption2); }
.gbp-cap>b { color:var(--d-text-3);font-size:var(--text-caption2);font-weight:650; }
.gbp-row>svg:last-child,.gbp-cap>svg:last-child,.gbp-stack>svg:last-child,.gbp-growth__tile>svg:last-child { color:var(--d-text-3); }
.gbp-badge { padding:4px 9px;border-radius:var(--radius-pill);background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal;font-weight:700;white-space:nowrap; }
.gbp-badge[data-tone="ok"] { background:var(--c-success-tint);color:var(--c-success); }
.gbp-badge[data-tone="warn"] { background:var(--c-warning-tint);color:var(--c-warning); }
.gbp-note { display:flex;align-items:center;gap:var(--space-xs);margin:var(--space-sm) 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.gbp-steps { display:grid;grid-template-columns:1fr 20px 1fr 20px 1fr 20px 1fr;align-items:start;gap:var(--space-xs); }
.gbp-steps>div { display:grid;grid-template-columns:24px minmax(0,1fr);gap:var(--space-xs); }
.gbp-steps b { display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--d-green);color:var(--c-on-brand);font-size:11px; }
.gbp-steps strong { display:block;font-size:var(--text-caption); }
.gbp-steps small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.gbp-steps>i { height:2px;margin-top:11px;border-radius:1px;background:var(--d-border); }
.gbp-growth h2 { margin-bottom:var(--space-sm); }
.gbp-growth__grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm); }
.gbp-growth__tile { display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer; }
.gbp-growth__tile[disabled] { cursor:default;opacity:.7; }
.gbp-growth__tile>span { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--d-green); }
.gbp-growth__tile strong { display:block;font-size:var(--text-caption); }
.gbp-growth__tile small { color:var(--d-text-3);font-size:var(--text-caption2); }
.gbp-banner { display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm);padding:var(--space-sm-md);border:1px solid var(--c-warning-tint);border-radius:var(--d-radius-sm);background:var(--c-warning-tint); }
.gbp-banner>span { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--c-warning); }
.gbp-banner strong { display:block;font-size:var(--text-caption); }
.gbp-banner small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.gbp-market-list { display:grid; }
.gbp-market { display:grid;grid-template-columns:40px minmax(0,1fr) 24px 38px minmax(0,1.3fr) auto auto;align-items:center;gap:var(--space-sm);min-height:64px;padding:var(--space-xs) 0;border-top:1px solid var(--d-border); }
.gbp-market:first-child { border-top:0; }
.gbp-market strong { display:block;font-size:var(--text-caption); }
.gbp-market small { color:var(--d-text-3);font-size:var(--text-caption2); }
.gbp-arrow { display:grid;color:var(--d-text-3); }
.gbp-mark { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--d-green); }
.gbp-mark[data-tone="quiet"] { color:var(--d-text-3); }
.gbp-mark[data-tone="blue"] { color:var(--gbp-blue); }
.gbp-mark[data-tone="dashed"] { border:1px dashed var(--d-border);background:transparent;color:var(--d-text-3); }
.gbp-upsell h1 { margin:0 0 var(--space-sm);font-size:var(--text-title3); }
.gbp-upsell ul { display:grid;gap:var(--space-xs);margin:0 0 var(--space-md);padding:0;list-style:none;color:var(--d-text-2);font-size:var(--text-caption); }
.gbp-upsell li { display:flex;align-items:center;gap:var(--space-xs); }
.gbp-upsell li>svg { color:var(--c-success); }
.gbp-sheet-host { position:fixed;inset:0;z-index:60;display:grid;place-items:center; }
.gbp-sheet__backdrop { position:absolute;inset:0;background:rgba(0,0,0,.35); }
.gbp-sheet { position:relative;width:min(720px,94vw);max-height:88vh;overflow:auto;padding:var(--space-md);border-radius:var(--d-radius-lg);background:var(--d-card-bg); }
.gbp-sheet>header { display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm); }
.gbp-sheet>header h2 { margin:0;font-size:var(--text-subhead);text-align:center; }
.gbp-sheet__back { justify-self:start;padding:0;border:0;background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.gbp-sheet__close { justify-self:end;width:32px;height:32px;border:0;border-radius:50%;background:var(--d-content-bg);color:var(--d-text-2);font-size:18px;cursor:pointer; }
.gbp-sheet__intro { margin:0 0 var(--space-sm);color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.gbp-sheet__label { display:block;margin:var(--space-sm) 0 var(--space-xs);color:var(--d-text-3);font-size:var(--text-caption2);font-weight:750;letter-spacing:.08em;text-transform:uppercase; }
.gbp-sheet__row { display:grid;grid-template-columns:38px minmax(0,1fr);gap:var(--space-sm);padding:var(--space-sm) 0;border-top:1px solid var(--d-border); }
.gbp-sheet__body strong { font-size:var(--text-caption); }
.gbp-sheet__field { display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);margin-top:var(--space-xs); }
.gbp-sheet__field select { flex:1 1 220px;min-height:32px;padding:0 var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);font:inherit;font-size:var(--text-caption); }
.gbp-sheet__linked { display:flex;align-items:center;gap:4px;margin-top:var(--space-xs);color:var(--gbp-blue);font-size:var(--text-caption2); }
.gbp-sheet__error { display:block;min-height:1em;color:var(--c-danger);font-size:var(--text-caption2); }
.gbp-sheet>footer { display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);color:var(--d-text-3);font-size:var(--text-caption2); }
@media (max-width:1050px) { .gbp-hero { grid-template-columns:1fr; } .gbp-summary { grid-template-columns:1fr 1fr; } .gbp-summary>div:nth-child(3) { border-left:0; } .gbp-summary>div:nth-child(-n+2) { border-bottom:1px solid var(--d-border); } .gbp-grid,.gbp-growth__grid { grid-template-columns:1fr; } .gbp-steps { grid-template-columns:1fr; } .gbp-steps>i { display:none; } }
@media (max-width:720px) { .gbp-summary { grid-template-columns:1fr; } .gbp-summary>div { border-left:0;border-bottom:1px solid var(--d-border); } .gbp-market { grid-template-columns:40px minmax(0,1fr) auto; } .gbp-market>.gbp-arrow,.gbp-market>.gbp-mark:nth-child(4) { display:none; } .gbp-market>div:nth-child(5) { grid-column:2; } .gbp-hero__identity { flex-direction:column;align-items:flex-start; } }

/* Yelp Reviews Settings destination — Catalyst IntegrationsView+ReviewConnectorsYelp additions. */
.ylp-page .ylp-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);grid-template-rows:auto auto auto;align-items:start;column-gap:var(--space-sm);row-gap:2px; }
.ylp-page .ylp-summary>div>span { grid-row:1/4;align-self:center; }
.ylp-page .ylp-summary>div>strong { font-size:var(--text-footnote);line-height:1.2; }
.ylp-page .ylp-summary>div>small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ylp-summary>div>em { display:block;color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal; }
.ylp-page .ylp-panel:not(.ylp-coverage)>header { display:block; }
.ylp-page .ylp-panel:not(.ylp-coverage)>header p { margin:3px 0 0; }
.ylp-badge { padding:4px 9px;border-radius:var(--radius-pill);background:var(--d-content-bg);color:var(--d-text-3);font-size:var(--text-caption2);font-style:normal;font-weight:700;white-space:nowrap; }
.ylp-badge[data-tone="ok"] { background:var(--c-success-tint);color:var(--c-success); }
.ylp-badge[data-tone="warn"] { background:var(--c-warning-tint);color:var(--c-warning); }
.ylp-row { display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);width:100%;min-height:56px;padding:var(--space-xs) 0;border:0;border-top:1px solid var(--d-border);background:transparent;color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer; }
.ylp-row:first-child { border-top:0; }
.ylp-row[disabled] { cursor:default; }
.ylp-row>span { display:grid;color:var(--d-green); }
.ylp-row strong { display:block;font-size:var(--text-caption); }
.ylp-row small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ylp-text-action { padding:6px 10px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption2);font-weight:700;cursor:pointer; }
.ylp-text-action[disabled] { color:var(--d-text-3);cursor:default; }
.ylp-banner { display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);margin:var(--space-sm) 0;padding:var(--space-sm-md);border:1px solid var(--c-warning-tint);border-radius:var(--d-radius-sm);background:var(--c-warning-tint); }
.ylp-banner[data-connected="true"] { border-color:var(--c-success-tint);background:var(--c-success-tint); }
.ylp-banner>span { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-surface);color:var(--d-green); }
.ylp-banner strong { display:block;font-size:var(--text-caption); }
.ylp-banner small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ylp-market__mark { display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--c-danger); }
.ylp-market__mark[data-mapped="false"] { border:1px dashed var(--d-border);background:transparent;color:var(--d-text-3); }
.ylp-note { display:flex;align-items:center;gap:var(--space-xs);margin:var(--space-sm) 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.ylp-upsell h1 { margin:0 0 var(--space-sm);font-size:var(--text-title3); }
.ylp-upsell ul { display:grid;gap:var(--space-xs);margin:0 0 var(--space-md);padding:0;list-style:none;color:var(--d-text-2);font-size:var(--text-caption); }
.ylp-upsell li { display:flex;align-items:center;gap:var(--space-xs); }
.ylp-upsell li>svg { color:var(--c-success); }
.ylp-sheet { position:relative;z-index:1;width:min(720px,94vw);max-height:88vh;overflow:auto;padding:var(--space-md);border-radius:var(--d-radius-lg);background:var(--d-card-bg); }
.ylp-sheet>header { display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm); }
.ylp-sheet>header h2 { margin:0;font-size:var(--text-subhead);text-align:center; }
.ylp-sheet__back { justify-self:start;padding:0;border:0;background:transparent;color:var(--d-green);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.ylp-sheet__stats { display:flex;gap:var(--space-md);margin-bottom:var(--space-sm); }
.ylp-sheet__stats strong { display:block;font-size:var(--text-footnote); }
.ylp-sheet__stats small { color:var(--d-text-3);font-size:var(--text-caption2); }
.ylp-sheet__intro { margin:0 0 var(--space-sm);color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.ylp-sheet__label { display:block;margin:var(--space-sm) 0 var(--space-xs);color:var(--d-text-3);font-size:var(--text-caption2);font-weight:750;letter-spacing:.08em;text-transform:uppercase; }
.ylp-sheet__row { display:grid;grid-template-columns:38px minmax(0,1fr);gap:var(--space-sm);padding:var(--space-sm) 0;border-top:1px solid var(--d-border); }
.ylp-sheet__body strong { font-size:var(--text-caption); }
.ylp-sheet__field { display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-xs);margin-top:var(--space-xs); }
.ylp-sheet__field input { min-height:32px;padding:0 var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg);font:inherit;font-size:var(--text-caption); }
.ylp-sheet__linked { display:grid;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);margin-top:var(--space-xs);padding:var(--space-xs) var(--space-sm);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.ylp-sheet__linked>svg { color:var(--c-danger); }
.ylp-sheet__linked small { display:block;color:var(--d-text-3);font-size:var(--text-caption2); }
.ylp-sheet__linked a { color:var(--d-green);font-size:var(--text-caption2);font-weight:700;text-decoration:none; }
.ylp-sheet__error { display:block;min-height:1em;color:var(--c-danger);font-size:var(--text-caption2); }
.ylp-sheet>footer { display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);color:var(--d-text-3);font-size:var(--text-caption2); }

/* AI Connector Settings destination — frozen Catalyst McpConnectorSettingsView hierarchy. */
.mcp-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.mcp-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.mcp-crumb a:hover { text-decoration:underline; }
.mcp-crumb strong { color:var(--d-text); }
.mcp-page { display:grid;gap:var(--space-lg);max-width:760px; }
.mcp-head { display:flex;align-items:flex-start;gap:var(--space-md); }
.mcp-head__icon { display:grid;flex:0 0 44px;place-items:center;width:44px;height:44px;border-radius:var(--d-radius-sm);background:var(--c-success-tint);color:var(--c-success); }
.mcp-head h1 { margin:0;font-size:var(--text-title3);letter-spacing:-.02em; }
.mcp-head p { margin:var(--space-xs) 0 0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.mcp-banner { display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:start;gap:var(--space-sm);padding:var(--space-sm-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-content-bg); }
.mcp-banner[data-tone="ok"] { border-color:color-mix(in srgb,var(--c-success) 45%,transparent);background:var(--c-success-tint); }
.mcp-banner[data-tone="warn"] { border-color:color-mix(in srgb,var(--c-warning) 45%,transparent);background:var(--c-warning-tint); }
.mcp-banner[data-tone="danger"] { border-color:color-mix(in srgb,var(--c-danger) 45%,transparent);background:color-mix(in srgb,var(--c-danger) 8%,var(--d-card-bg)); }
.mcp-banner__icon { display:grid;color:var(--d-text-3); }
.mcp-banner[data-tone="ok"] .mcp-banner__icon { color:var(--c-success); }
.mcp-banner[data-tone="warn"] .mcp-banner__icon { color:var(--c-warning); }
.mcp-banner[data-tone="danger"] .mcp-banner__icon { color:var(--c-danger); }
.mcp-banner strong { display:block;font-size:var(--text-caption); }
.mcp-banner p { margin:2px 0 0;color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.mcp-iconbtn { display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:var(--d-radius-sm);background:transparent;color:var(--d-text-3);cursor:pointer; }
.mcp-iconbtn:hover { background:var(--d-card-bg); }
.mcp-card { display:grid;gap:var(--space-sm-md);padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius-lg);background:var(--d-card-bg); }
.mcp-card>p { margin:0;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.5; }
.mcp-summary,.mcp-reveal,.mcp-oauth,.mcp-access,.mcp-do,.mcp-static,.mcp-howto,.mcp-ask { min-width:0; }
.mcp-card hr { margin:0;border:0;border-top:1px solid var(--d-border); }
.mcp-kicker { display:flex;align-items:center;gap:var(--space-xs);font-size:var(--text-caption2);font-weight:750;letter-spacing:.1em; }
.mcp-kicker[data-tone="green"] { color:var(--c-success); }
.mcp-kicker[data-tone="blue"],.mcp-kicker[data-tone="indigo"],.mcp-kicker[data-tone="brand"] { color:var(--c-brand-primary); }
.mcp-kicker[data-tone="teal"] { color:var(--d-green); }
.mcp-kicker[data-tone="purple"] { color:var(--c-accent-purple,var(--c-brand-primary)); }
.mcp-subkicker { color:var(--d-text-3);font-size:var(--text-caption2);font-weight:750;letter-spacing:.08em; }
.mcp-muted { margin:0;color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.45; }
.mcp-line { display:flex;align-items:flex-start;gap:var(--space-xs);margin:0;color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.45; }
.mcp-line[data-tone="warn"] { color:var(--c-warning); }
.mcp-line[data-tone="danger"] { color:var(--c-danger); }
.mcp-line[data-tone="ok"] { color:var(--c-success); }
.mcp-line>svg { flex:0 0 auto;margin-top:1px; }
.mcp-note { padding:0 var(--space-xs); }
.mcp-conn-row { display:grid;grid-template-columns:22px minmax(0,1fr);gap:var(--space-sm);align-items:start; }
.mcp-conn-row>span { display:grid;color:var(--c-success); }
.mcp-conn-row[data-tint="warn"]>span { color:var(--c-warning); }
.mcp-conn-row strong { display:block;font-size:var(--text-caption); }
.mcp-conn-row small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.mcp-danger-link { justify-self:start;padding:0;border:0;background:transparent;color:var(--c-danger);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.mcp-danger-link[disabled] { opacity:.5;cursor:default; }
.mcp-secret { display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.mcp-secret code,.mcp-field code { overflow:auto;color:var(--d-text);font-size:var(--text-caption2);white-space:nowrap; }
.mcp-field small { display:block;margin-bottom:3px;color:var(--d-text-3);font-size:10px;font-weight:750;letter-spacing:.08em; }
.mcp-field>div { display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.mcp-field button { display:grid;place-items:center;width:32px;height:32px;border:0;background:transparent;color:var(--c-brand-primary);cursor:pointer; }
.mcp-pairing { display:grid;gap:3px;padding:var(--space-sm-md);border-radius:var(--d-radius-sm);background:var(--c-brand-tint);text-align:center; }
.mcp-pairing small,.mcp-pairing span { color:var(--d-text-3);font-size:var(--text-caption2); }
.mcp-pairing small { font-weight:750;letter-spacing:.08em; }
.mcp-pairing strong { color:var(--c-brand-primary);font-size:var(--text-title2);letter-spacing:.16em; }
.mcp-actions { display:flex;align-items:center;gap:var(--space-md); }
.mcp-primary { display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:8px 14px;border:0;border-radius:var(--d-radius-sm);background:var(--c-brand-primary);color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.mcp-primary[disabled] { opacity:.6;cursor:default; }
.mcp-outline { display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 12px;border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-text);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.mcp-access-row { display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:var(--space-md);padding:var(--space-sm) 0;border-top:1px solid var(--d-border); }
.mcp-access-row>span { display:flex;flex-direction:column;gap:2px;min-width:0; }
.mcp-access-row strong { font-size:var(--text-caption); }
.mcp-access-row[data-attention="true"] strong { color:var(--c-warning); }
.mcp-access-row small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.mcp-switch { position:relative;display:inline-block;flex:0 0 46px;width:46px;height:28px;margin-top:2px; }
.mcp-switch input { position:absolute;inset:0;margin:0;opacity:0;cursor:pointer; }
.mcp-switch input:disabled { cursor:default; }
.mcp-switch span { position:absolute;inset:0;border-radius:var(--radius-pill);background:var(--d-border);transition:background .15s; }
.mcp-switch span::after { content:"";position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:var(--c-surface);box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .15s; }
.mcp-switch input:checked+span { background:var(--c-success); }
.mcp-switch input:checked+span::after { transform:translateX(18px); }
.mcp-switch input:disabled+span { opacity:.55; }
.mcp-switch input:focus-visible+span { outline:2px solid var(--c-brand-primary);outline-offset:2px; }
.mcp-keystatus p { display:flex;align-items:center;gap:var(--space-xs);margin:0;font-size:var(--text-caption); }
.mcp-keystatus p>svg { color:var(--c-success); }
.mcp-keystatus small { display:block;margin-top:2px;color:var(--d-text-3);font-size:var(--text-caption2); }
.mcp-door { display:inline-flex;align-items:center;gap:var(--space-xs);justify-self:start;padding:8px 12px;border:1px dashed var(--d-border);border-radius:var(--d-radius-sm);background:transparent;color:var(--d-text-2);font:inherit;font-size:var(--text-caption);font-weight:650;cursor:pointer; }
.mcp-steps { display:grid;gap:var(--space-sm);margin:0;padding:0;list-style:none; }
.mcp-steps li { display:grid;grid-template-columns:22px minmax(0,1fr);gap:var(--space-sm);align-items:start;color:var(--d-text-2);font-size:var(--text-caption);line-height:1.45; }
.mcp-steps b { display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:11px; }
.mcp-cap { display:grid;grid-template-columns:22px minmax(0,1fr);gap:var(--space-sm);align-items:start; }
.mcp-cap>span { display:grid;color:var(--c-brand-primary); }
.mcp-cap strong { display:block;font-size:var(--text-caption); }
.mcp-cap small { color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
@media (max-width: 980px) {
  .qbo-hero { grid-template-columns: 1fr; }
  .qbo-grid { grid-template-columns: 1fr; }
  .qbo-setup__tiles { grid-template-columns: 1fr; }
}
@media (max-width: 680px) {
  .qbo-hero__identity { align-items: flex-start; flex-direction: column; }
  .qbo-summary { grid-template-columns: 1fr 1fr; }
  .qbo-summary>div:nth-child(3) { border-left: 0; border-top: 1px solid var(--d-border); }
  .qbo-summary>div:nth-child(4) { border-top: 1px solid var(--d-border); }
  .qbo-boundaries footer { align-items: flex-start; flex-direction: column; }
  .qbo-setup__callout { grid-template-columns: 34px minmax(0,1fr); }
  .qbo-setup__callout .btn,.qbo-setup__callout>.qbo-pill { grid-column: 2; justify-self: start; }
}

/* Calendar is the same focused device-sync destination as Catalyst: hero flow, four facts, two
   working panels and the included payload. The browser's .ics handoff is deliberately below this
   surface in the shared appointment editor, rather than turning Settings into an export report. */
:root { --calset-deep:#174c82;--calset-teal:#148c91;--calset-blue:#2875c7;--calset-kicker:#c7f4f4;--calset-ok:#b9f4c4;--calset-idle:#d3e8ff;--calset-warn:#ffd37a;--calset-arrow:#b9faff;--calendar-color:var(--d-green); } /* raw-color-ok — frozen Catalyst Calendar palette */
.settings-destination:has(.calset-crumb)>.settings-destination__hero { display: none; }
.calset-crumb { display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption); }
.calset-crumb a { color:var(--d-green);font-weight:650;text-decoration:none; }
.calset-crumb a:hover { text-decoration:underline; }
.calset-crumb strong { color:var(--d-text); }
.calset-hero { display:grid;grid-template-columns:minmax(0,1fr) minmax(350px,.72fr);align-items:center;gap:var(--space-xl);min-height:210px;padding:var(--space-xl);overflow:hidden;border-radius:var(--d-radius-lg);background:linear-gradient(115deg,var(--calset-deep),var(--calset-teal));color:var(--c-on-brand); }
.calset-hero__copy>span { color:var(--calset-kicker);font-size:var(--text-caption2);font-weight:750;letter-spacing:.12em; }
.calset-hero h1 { max-width:720px;margin:var(--space-xs) 0;font-size:clamp(24px,2vw,32px);line-height:1.12;letter-spacing:-.035em; }
.calset-hero__copy>p { max-width:760px;margin:0;color:rgba(255,255,255,.78);font-size:var(--text-footnote);line-height:1.5; }
.calset-status { display:table;margin-top:var(--space-sm);padding:5px 11px;border-radius:var(--radius-pill);background:rgba(0,0,0,.18);color:var(--calset-ok);font-size:var(--text-caption2); }
.calset-hero[data-state="idle"] .calset-status { color:var(--calset-idle); }
.calset-hero[data-state="denied"] .calset-status { color:var(--calset-warn); }
.calset-enable { margin-top:var(--space-sm);padding:8px 13px;border:1px solid rgba(255,255,255,.5);border-radius:var(--d-radius-sm);background:transparent;color:var(--c-on-brand);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer; }
.calset-hero__flow { display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-sm);padding:var(--space-lg);border:1px solid rgba(255,255,255,.13);border-radius:var(--d-radius);background:rgba(0,0,0,.13); }
.calset-hero__flow article { display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:5px var(--space-sm);min-height:104px;padding:var(--space-md);border-radius:var(--d-radius);background:var(--c-on-brand);color:var(--d-text); }
.calset-hero__flow article>span { grid-row:1/3;color:var(--calset-blue); }
.calset-hero__flow article>strong { overflow:hidden;font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap; }
.calset-hero__flow article>small { color:var(--d-text-3);font-size:var(--text-caption2); }
.calset-hero__flow article>b { grid-column:1/3;color:var(--c-success);font-size:var(--text-caption); }
.calset-hero__flow>i { color:var(--calset-arrow);font-style:normal; }
.calset-color { display:block;width:13px;height:13px;border-radius:50%;background:var(--calendar-color); }
.calset-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:var(--space-md) 0;overflow:hidden;border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.calset-summary>div { display:grid;grid-template-columns:38px minmax(0,1fr);gap:2px var(--space-sm);align-items:center;padding:var(--space-sm-md);border-left:1px solid var(--d-border); }
.calset-summary>div:first-child { border-left:0; }
.calset-summary>div>span { grid-row:1/3;display:grid;place-items:center;width:38px;height:38px;border-radius:var(--d-radius-sm);background:var(--c-brand-tint);color:var(--calset-blue); }
.calset-summary>div>span.calset-color { width:13px;height:13px;margin:auto;background:var(--calendar-color); }
.calset-summary strong { overflow:hidden;font-size:var(--text-footnote);text-overflow:ellipsis;white-space:nowrap; }
.calset-summary small { color:var(--d-text-3);font-size:var(--text-caption2); }
.calset-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md); }
.calset-panel { padding:var(--space-md);border:1px solid var(--d-border);border-radius:var(--d-radius);background:var(--d-card-bg); }
.calset-panel>header { margin-bottom:var(--space-md); }
.calset-panel h2 { margin:0;font-size:var(--text-subhead); }
.calset-panel header p { margin:3px 0 0;color:var(--d-text-3);font-size:var(--text-caption2); }
.calset-setting { display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-height:70px;padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.calset-setting>span:first-child { display:grid;place-items:center;width:42px;height:42px;border-radius:var(--d-radius-sm);background:color-mix(in srgb,var(--calset-blue) 8%,transparent);color:var(--calset-blue); }
.calset-setting>span:nth-child(2) { display:flex;flex-direction:column;gap:3px;min-width:0; }
.calset-setting strong { font-size:var(--text-caption); }
.calset-setting small,.calset-setting p { margin:0;color:var(--d-text-3);font-size:var(--text-caption2);line-height:1.4; }
.calset-setting--quiet { margin-top:var(--space-sm);grid-template-columns:32px minmax(0,1fr) auto;background:var(--d-card-bg); }
.calset-setting--quiet>span:first-child { width:32px;height:32px;background:transparent; }
.calset-setting--quiet>b { padding:4px 9px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--calset-blue) 10%,transparent);color:var(--calset-blue);font-size:var(--text-caption2);white-space:nowrap; }
.calset-linked { margin:var(--space-sm) 0 0;color:var(--c-success);font-size:var(--text-caption2); }
.calset-switch { position:relative;display:block;width:44px;height:26px; }
.calset-switch input { position:absolute;opacity:0;pointer-events:none; }
.calset-switch span { display:block;width:100%;height:100%;border-radius:var(--radius-pill);background:var(--d-border);cursor:pointer;transition:.15s; }
.calset-switch span::after { content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--c-on-brand);box-shadow:0 1px 3px rgba(0,0,0,.2);transition:.15s; }
.calset-switch input:checked+span { background:var(--calset-teal); }
.calset-switch input:checked+span::after { transform:translateX(18px); }
.calset-switch input:focus-visible+span { outline:3px solid color-mix(in srgb,var(--calset-blue) 30%,transparent);outline-offset:2px; }
.calset-switch input:disabled+span { cursor:not-allowed;opacity:.55; }
.calset-calendar-mark { background:color-mix(in srgb,var(--calendar-color) 12%,transparent)!important; }
.calset-calendar-mark i { width:22px;height:22px;border-radius:50%;background:var(--calendar-color); }
.calset-change { padding:7px 11px;border:1px solid color-mix(in srgb,var(--calset-blue) 74%,transparent);border-radius:var(--d-radius-sm);background:transparent;color:var(--calset-blue);font:inherit;font-size:var(--text-caption2);font-weight:700;cursor:pointer; }
.calset-steps { display:grid;grid-template-columns:1fr 30px 1fr 30px 1fr;align-items:start;gap:var(--space-xs);margin-top:var(--space-md); }
.calset-steps>div { display:grid;justify-items:center;gap:var(--space-xs);text-align:center; }
.calset-steps>div>span { display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--calset-blue) 8%,transparent);color:var(--calset-blue); }
.calset-steps strong { font-size:var(--text-caption2);font-weight:650;line-height:1.35; }
.calset-steps>i { height:1px;margin-top:20px;background:color-mix(in srgb,var(--calset-blue) 32%,transparent); }
.calset-warning { display:flex;gap:var(--space-xs);margin:var(--space-sm) 0 0;color:var(--c-warning);font-size:var(--text-caption2); }
.calset-details { margin-top:var(--space-md); }
.calset-details__grid { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm); }
.calset-details__grid>div { display:grid;grid-template-columns:30px minmax(0,1fr);align-items:center;gap:3px var(--space-sm);min-height:78px;padding:var(--space-sm);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.calset-details__grid>div>span { grid-row:1/3;color:var(--calset-blue); }
.calset-details__grid strong { font-size:var(--text-caption);line-height:1.35; }
.calset-details__grid small { color:var(--c-success);font-size:var(--text-caption2);font-weight:700; }
.calset-details footer { display:flex;align-items:center;justify-content:center;gap:var(--space-xs);margin-top:var(--space-md);color:var(--d-text-3);font-size:var(--text-caption2); }
.calset-picker { display:grid; }
.calset-picker__row { display:grid;grid-template-columns:16px minmax(0,1fr) 22px;align-items:center;gap:var(--space-sm);min-height:62px;padding:var(--space-sm) var(--space-md);border:0;border-bottom:1px solid var(--d-border);background:transparent;color:var(--d-text);font:inherit;text-align:left;cursor:pointer; }
.calset-picker__row:last-child { border-bottom:0; }
.calset-picker__row:hover { background:var(--d-content-bg); }
.calset-picker__dot { width:12px;height:12px;border-radius:50%;background:var(--calendar-color); }
.calset-picker__row>span:nth-child(2) { display:flex;flex-direction:column;gap:3px; }
.calset-picker__row strong { font-size:var(--text-caption); }
.calset-picker__row small { color:var(--d-text-3);font-size:var(--text-caption2); }
.calset-picker__check { color:var(--d-green);font-weight:800; }
.appt-calendar-card { display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-md);padding:var(--space-sm-md);border:1px solid var(--d-border);border-radius:var(--d-radius-sm);background:var(--d-content-bg); }
.appt-calendar-card>label { display:flex;align-items:center;gap:var(--space-sm);min-width:0;cursor:pointer; }
.appt-calendar-card>label>input { width:18px;height:18px;accent-color:var(--d-green); }
.appt-calendar-card__icon { color:var(--calset-blue);font-size:18px; }
.appt-calendar-card>label>span:last-child { display:flex;flex-direction:column;gap:2px; }
.appt-calendar-card strong { font-size:var(--text-caption); }
.appt-calendar-card small { color:var(--d-text-3);font-size:var(--text-caption2); }
.appt-calendar-card__destination { display:flex;align-items:center;gap:6px;color:var(--d-text-3);font-size:var(--text-caption2);white-space:nowrap; }
.appt-calendar-card__destination i { width:8px;height:8px;border-radius:50%;background:var(--calendar-color); }
.appt-calendar-card>a { color:var(--d-green);font-size:var(--text-caption2);font-weight:700; }
@media (max-width:980px) {
  .calset-hero { grid-template-columns:1fr; }
  .calset-grid { grid-template-columns:1fr; }
  .calset-details__grid { grid-template-columns:1fr 1fr; }
}
@media (max-width:680px) {
  .calset-hero { padding:var(--space-md); }
  .calset-hero__flow { padding:var(--space-sm); }
  .calset-summary { grid-template-columns:1fr 1fr; }
  .calset-summary>div:nth-child(3) { border-left:0;border-top:1px solid var(--d-border); }
  .calset-summary>div:nth-child(4) { border-top:1px solid var(--d-border); }
  .calset-setting { grid-template-columns:38px minmax(0,1fr); }
  .calset-setting>.calset-switch,.calset-setting>.calset-change { grid-column:2;justify-self:start; }
  .calset-setting--quiet>b { grid-column:2;justify-self:start; }
  .calset-steps { grid-template-columns:1fr;gap:var(--space-sm); }
  .calset-steps>i { width:1px;height:18px;margin:0 auto; }
  .calset-details__grid { grid-template-columns:1fr; }
  .appt-calendar-card { align-items:flex-start;flex-direction:column; }
}
.pt-registration-editing { display: grid; gap: var(--space-md); }
.pt-registration-editor-grid { display: grid; grid-template-columns: minmax(0,1fr) minmax(360px,.95fr); gap: var(--space-md); }
.pt-registration-editor-forms { display: grid; align-content: start; gap: var(--space-md); }
.pt-registration-editing__badge { padding: 4px 9px; border-radius: var(--radius-pill); background: var(--c-warning-tint); color: var(--c-warning); font-size: var(--text-caption2); font-weight: 750; }
.pt-registration-profile .pt-registration-form { display: grid; gap: var(--space-sm-md); padding: var(--space-sm-md); }
.pt-registration-profile .form-group { margin: 0; }
.pt-registration-address { min-width: 0; margin: 0; padding: 0; border: 0; }
.pt-registration-address>div:first-of-type,.pt-registration-name-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--space-sm); }
.pt-registration-address .form-hint { margin-top: var(--space-xs); }
.form-label__hint { color: var(--d-text-3); font-size: var(--text-caption2); font-weight: 500; }
.pt-registration-entity { min-width: 0; margin: 0; padding: 0; border: 0; }
.pt-registration-entity>div { display: flex; flex-wrap: wrap; gap: var(--space-xs); }
.pt-registration-entity button { padding: 6px 13px; border: 1px solid var(--d-border); border-radius: var(--radius-pill); background: var(--d-content-bg); color: var(--d-text-2); font: inherit; font-size: var(--text-caption2); font-weight: 700; cursor: pointer; }
.pt-registration-entity button[aria-pressed="true"] { border-color: var(--d-green); background: var(--d-green); color: var(--c-on-brand); }
.pt-registration-sensitive { display: grid; grid-template-columns: auto minmax(0,1fr) auto; align-items: center; gap: var(--space-xs); }
.pt-registration-sensitive>span { color: var(--d-text-3); }
.pt-registration-sensitive .form-input[readonly] { color: var(--d-text-2); letter-spacing: .04em; background: var(--d-content-bg); }
.pt-registration-review { display: flex; flex-direction: column; }
.pt-registration-readiness { margin: 0; padding: 0 var(--space-sm-md); list-style: none; }
.pt-registration-readiness li { display: grid; grid-template-columns: 22px minmax(0,1fr) auto; align-items: center; gap: var(--space-sm); min-height: 45px; border-bottom: 1px solid var(--d-border); }
.pt-registration-readiness i { display: grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; background: var(--c-success); color: var(--c-on-brand); font-size: 11px; font-style: normal; font-weight: 800; }
.pt-registration-readiness strong { font-size: var(--text-caption); }
.pt-registration-readiness span { color: var(--c-success); font-size: var(--text-caption2); font-weight: 700; }
.pt-registration-readiness li[data-state="missing"] i { background: var(--c-danger); }
.pt-registration-readiness li[data-state="missing"] span { color: var(--c-danger); }
.pt-registration-readiness li[data-state="optional"] i { background: var(--d-text-3); }
.pt-registration-readiness li[data-state="optional"] span { color: var(--d-text-3); }
.pt-registration-security { display: flex; align-items: flex-start; gap: var(--space-sm); margin: var(--space-sm-md); padding: var(--space-sm); border-radius: var(--d-radius-sm); background: var(--c-brand-tint); color: var(--d-text-2); }
.pt-registration-security>span { color: var(--d-green); }
.pt-registration-security p { margin: 0; font-size: var(--text-caption2); line-height: 1.45; }
.pt-registration-review__actions { display: grid; gap: var(--space-sm); margin-top: auto; padding: var(--space-sm-md); border-top: 1px solid var(--d-border); }
.pt-registration-review__actions .btn { justify-content: center; }
.pt-registration-editor-next ol { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: var(--space-sm); margin: 0; padding: var(--space-sm-md); list-style: none; }
.pt-registration-editor-next li { display: grid; grid-template-columns: 26px minmax(0,1fr); align-items: start; gap: var(--space-sm); padding: var(--space-sm-md); border-radius: var(--d-radius-sm); background: var(--d-content-bg); }
.pt-registration-editor-next li i { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: var(--c-success); color: var(--c-on-brand); font-size: var(--text-caption2); font-style: normal; font-weight: 800; }
.pt-registration-editor-next li div { display: flex; flex-direction: column; gap: 3px; }
.pt-registration-editor-next li strong { font-size: var(--text-caption); }
.pt-registration-editor-next li small { color: var(--d-text-3); font-size: var(--text-caption2); line-height: 1.4; }

@media (max-width: 980px) {
  .pt-line-table__head { display: none; }
  .pt-line-row { grid-template-columns: minmax(220px,1fr) auto auto; }
  .pt-line-row>.pt-line-state { display: none; }
  .pt-registration-grid { grid-template-columns: 1fr; }
  .pt-registration-editor-grid { grid-template-columns: 1fr; }
}
@media (max-width: 680px) {
  .pt-system-metrics { grid-template-columns: 1fr; }
  .pt-system-metrics>div { border-left: 0; border-top: 1px solid color-mix(in srgb,var(--c-surface) 15%,transparent); }
  .pt-system-metrics>div:first-child { border-top: 0; }
  .pt-registration-card { grid-template-columns: 38px 1fr; }
  .pt-registration-card>.btn { grid-column: 1/-1; justify-content: center; }
  .pt-line-row { grid-template-columns: 1fr auto; }
  .pt-line-number { grid-column: 1; padding-left: 42px; }
  .pt-usage-row,.pt-usage-row--total { grid-template-columns: 8px 1fr 40px; }
  .pt-usage-row>small,.pt-usage-row>span { display: none; }
  .pt-usage-row--total>strong { grid-column: 1/3; }
  .pt-registration-hero__top { flex-direction: column; }
  .pt-registration-hero__actions { align-items: flex-start; flex-direction: column; }
  .pt-registration-hero__actions .pt-registration-hero__cancel { margin-left: 0; }
  .pt-registration-steps { grid-template-columns: 1fr; }
  .pt-registration-steps>b { display: none; }
  .pt-registration-summary { grid-template-columns: 1fr 1fr; }
  .pt-registration-summary>div:nth-child(3) { border-left: 0; border-top: 1px solid var(--d-border); }
  .pt-registration-summary>div:nth-child(4) { border-top: 1px solid var(--d-border); }
  .pt-registration-details { grid-template-columns: 1fr; }
  .pt-registration-details>div { border-top: 1px solid var(--d-border); border-right: 0 !important; }
  .pt-registration-details>div:first-child { border-top: 0; }
  .pt-registration-next li { grid-template-columns: 30px minmax(0,1fr); }
  .pt-registration-next li>span { grid-column: 2; justify-self: start; }
  .pt-registration-panel>header { align-items: flex-start; flex-direction: column; }
  .pt-registration-form .form-group { grid-column: span 2 !important; }
  .pt-registration-address>div:first-of-type,.pt-registration-name-grid { grid-template-columns: 1fr; }
  .pt-registration-review__actions { grid-template-columns: 1fr; }
  .pt-registration-editor-next ol { grid-template-columns: 1fr; }
  .pt-registration-sensitive { grid-template-columns: auto minmax(0,1fr); }
  .pt-registration-sensitive .btn { grid-column: 2; justify-self: start; }
}

/* ── NOTIFICATIONS ───────────────────────────────────────────────────────────
   A desktop control surface over the native app's per-user notification contract. */
.nt-skeleton { height: 360px; }
.nt-page { width: 100%; color: var(--d-text); }
.nt-intro { margin: 0 0 18px; color: var(--d-text-2); font-size: 14px; font-weight: 600; }
.nt-summary {
  display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr) minmax(0, 1.3fr);
  align-items: stretch; overflow: hidden; margin-bottom: 18px;
  border: 1px solid var(--d-border); border-radius: 18px; background: var(--c-background);
}
.nt-summary__state,.nt-summary__control { display: flex; align-items: center; gap: 16px; min-width: 0; padding: 20px 22px; }
.nt-summary__state { background: linear-gradient(135deg, color-mix(in srgb, var(--c-brand-primary) 7%, var(--c-card-background)), var(--c-card-background)); }
.nt-summary__control { justify-content: space-between; border-left: 1px solid var(--d-border); min-width: 0; }
.nt-summary__control .nt-switch { flex: 0 0 auto; }
.nt-summary__control > div,.nt-summary__state > div { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 3px; }
.nt-summary strong { color: var(--d-text); font-size: 15px; line-height: 1.3; }
.nt-summary__state > div > strong { font-size: 17px; }
.nt-summary__state > div > span:not(.nt-permission),.nt-summary__control > div > span { color: var(--d-text-3); font-size: 12px; line-height: 1.45; }
.nt-summary__bell {
  display: grid; flex: 0 0 52px; width: 52px; height: 52px; place-items: center;
  border-radius: 50%; background: color-mix(in srgb, var(--c-brand-primary) 12%, var(--c-card-background)); color: var(--c-brand-primary);
}
.nt-summary__bell svg { width: 24px; height: 24px; }
.nt-summary__bell--denied,.nt-summary__bell--unsupported { background: var(--c-danger-tint); color: var(--c-danger); }
.nt-summary__bell--default { background: color-mix(in srgb, var(--c-warning) 12%, var(--c-card-background)); color: var(--c-warning); }
.nt-permission {
  display: inline-flex; align-items: center; align-self: flex-start; gap: 6px; margin-top: 4px;
  border-radius: 999px; padding: 3px 8px; background: var(--c-field-fill); color: var(--d-text-2); font-size: 10px; font-weight: 700;
}
.nt-permission > span { width: 6px; height: 6px; border-radius: 50%; background: var(--d-text-3); }
.nt-permission--granted { background: color-mix(in srgb, var(--c-brand-primary) 11%, var(--c-card-background)); color: var(--c-brand-primary); }
.nt-permission--granted > span { background: var(--c-brand-primary); }
.nt-permission--denied { background: var(--c-danger-tint); color: var(--c-danger); }
.nt-permission--denied > span { background: var(--c-danger); }
.nt-permission--default { background: color-mix(in srgb, var(--c-warning) 12%, var(--c-card-background)); color: var(--c-warning); }
.nt-permission--default > span { background: var(--c-warning); }
.nt-summary__permission-action {
  display: flex; align-items: center; justify-content: space-between; gap: 18px; min-width: 0;
  padding: 20px 22px; border-left: 1px solid var(--d-border); color: var(--d-text-2); font-size: 12px;
}
.nt-summary__permission-action .btn { flex: 0 0 auto; }
.nt-permission-help { margin: 0; color: var(--d-text-2); font-size: 13px; line-height: 1.55; }
.nt-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr); align-items: start; gap: 18px; }
.nt-stack { display: flex; min-width: 0; flex-direction: column; gap: 18px; }
.nt-card { overflow: hidden; border: 1px solid var(--d-border); border-radius: 16px; background: var(--c-background); transition: opacity .18s ease; }
.nt-card h2 { margin: 0; padding: 18px 20px 13px; color: var(--d-text); font-size: 18px; line-height: 1.3; }
.nt-card--muted .nt-rows { opacity: .52; }
.nt-rows { display: flex; flex-direction: column; transition: opacity .18s ease; }
.nt-row { display: flex; min-height: 66px; align-items: center; gap: 13px; padding: 11px 18px; border-top: 1px solid var(--d-border); }
.nt-row:hover { background: color-mix(in srgb, var(--c-field-fill) 72%, transparent); }
.nt-icon {
  display: grid; flex: 0 0 38px; width: 38px; height: 38px; place-items: center;
  border-radius: 9px; background: color-mix(in srgb, var(--c-brand-primary) 10%, var(--c-card-background)); color: var(--c-brand-primary);
}
.nt-icon svg { width: 21px; height: 21px; }
.nt-row__text { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 2px; }
.nt-row__text strong { color: var(--d-text); font-size: 14px; line-height: 1.3; }
.nt-row__text span { color: var(--d-text-3); font-size: 11px; line-height: 1.4; }
.nt-switch { position: relative; display: inline-flex; flex: 0 0 auto; align-items: center; margin-left: 8px; cursor: pointer; }
.nt-switch input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.nt-switch > span { position: relative; width: 46px; height: 26px; border-radius: 999px; background: var(--c-control-fill); transition: background .18s ease, box-shadow .18s ease; }
.nt-switch > span::after {
  position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%;
  background: white; box-shadow: 0 1px 3px rgba(0,0,0,.2); content: ''; transition: transform .18s ease;
}
.nt-switch input:checked + span { background: var(--c-brand-primary); }
.nt-switch input:checked + span::after { transform: translateX(20px); }
.nt-switch input:focus-visible + span { box-shadow: 0 0 0 3px color-mix(in srgb, var(--c-brand-primary) 25%, transparent); }
.nt-switch--disabled { cursor: not-allowed; }
.nt-switch--disabled > span { opacity: .6; }
.nt-save { display: flex; align-items: center; justify-content: center; gap: 7px; min-height: 44px; color: var(--d-text-3); font-size: 11px; }
.nt-save svg { width: 14px; height: 14px; }
.nt-save[data-state="saving"] { color: var(--d-text-2); }
.nt-save[data-state="saved"] { color: var(--c-brand-primary); }
.nt-save[data-state="error"] { color: var(--c-danger); }
@media (max-width: 1180px) {
  .nt-summary { grid-template-columns: 1fr 1fr; }
  .nt-summary__state { grid-column: 1 / -1; border-bottom: 1px solid var(--d-border); }
  .nt-summary__control:nth-child(2) { border-left: 0; }
  .nt-summary__permission-action { grid-column: 1 / -1; border-top: 1px solid var(--d-border); border-left: 0; }
}
@media (max-width: 860px) {
  .nt-grid { grid-template-columns: 1fr; }
  .nt-summary { grid-template-columns: 1fr; }
  .nt-summary__state { grid-column: auto; }
  .nt-summary__control { border-top: 1px solid var(--d-border); border-left: 0; }
  .nt-summary__permission-action { grid-column: auto; }
}
@media (max-width: 560px) {
  .nt-summary__state,.nt-summary__control { padding: 17px; }
  .nt-summary__control--quiet { align-items: flex-start; }
  .nt-row { padding: 10px 14px; }
  .nt-row__text strong { font-size: 13px; }
}

/* ── LEAD SETUP (C5) ────────────────────────────────────────────────────────
   Every row here is something that gets copied into somebody else's window, so Copy sits beside the
   value rather than behind a menu. */
.ls-copy { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ls-code {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px;
  background: var(--c-field-fill); border: 1px solid var(--d-border); border-radius: 6px;
  padding: 6px 10px; color: var(--d-text); overflow-wrap: anywhere; flex: 1; min-width: 0;
}
.ls-prefix { font-size: 13px; color: var(--d-text-3); }
.ls-field { margin-bottom: 18px; }
.ls-field:last-child { margin-bottom: 0; }
.ls-issues { margin: 8px 0 0 18px; font-size: 12px; color: var(--c-danger); }
.ls-dns { margin-top: 6px; }
.ls-dns td, .ls-dns th { padding: 6px 10px; font-size: 12px; }

/* ── DISCOUNT APPROVALS (C6) ────────────────────────────────────────────────
   The dollars given away are the largest thing in the row, because that is the decision. */
.dq-row {
  display: flex; align-items: center; gap: 16px;
  padding: 12px 16px; border-bottom: 1px solid var(--d-border);
}
.dq-row:last-child { border-bottom: 0; }
.dq-row__main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.dq-row__who { font-size: 13px; font-weight: 600; color: var(--d-text); }
.dq-row__why { font-size: 12px; color: var(--d-text-2); }
.dq-row__meta { font-size: 11px; color: var(--d-text-3); }
.dq-row__money { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.dq-row__from { font-size: 12px; color: var(--d-text-3); text-decoration: line-through; margin-right: 6px; }
.dq-row__to { font-size: 14px; font-weight: 600; color: var(--d-text); }
.dq-row__gap { display: block; font-size: 12px; font-weight: 600; color: var(--c-warning); }
.dq-row__act { display: flex; gap: 6px; align-items: center; min-width: 190px; justify-content: flex-end; }
/* Saying WHY the buttons are missing beats hiding them and letting somebody wonder. */
.dq-row__blocked { font-size: 11px; color: var(--d-text-3); text-align: right; max-width: 190px; }

/* ── KEYBOARD (C10) ─────────────────────────────────────────────────────────
   The sheet is generated from the same table that binds the keys, so it cannot promise a shortcut
   that does not exist. */
.kbd-backdrop {
  position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center;
  background: rgba(0,0,0,.35); padding: 24px;  /* raw-color-ok — a scrim, not a themed surface */
}
.kbd-sheet {
  background: var(--c-surface); border: 1px solid var(--d-border); border-radius: 12px;
  max-width: 560px; width: 100%; max-height: 80vh; display: flex; flex-direction: column;
  box-shadow: 0 18px 48px rgba(0,0,0,.22);  /* raw-color-ok */
}
.kbd-sheet__head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 18px; border-bottom: 1px solid var(--d-border);
}
.kbd-sheet__title { font-size: 14px; font-weight: 700; color: var(--d-text); }
.kbd-sheet__body { padding: 8px 18px 18px; overflow-y: auto; }
.kbd-group { margin-top: 14px; }
.kbd-group__name {
  font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--d-text-3); margin-bottom: 6px;
}
.kbd-row { display: flex; align-items: center; gap: 12px; padding: 4px 0; }
.kbd-row__keys { display: flex; gap: 4px; min-width: 76px; }
.kbd-row__what { font-size: 13px; color: var(--d-text-2); }
.kbd-sheet kbd {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px;
  min-width: 20px; text-align: center; padding: 2px 6px; border-radius: 5px;
  background: var(--c-field-fill); border: 1px solid var(--d-border); color: var(--d-text);
}

/* ── PRIORITIES: the honest states (Loop III P1) ────────────────────────────
   "You're caught up" must never be the face of a failed load, and a partial read must not look
   complete — a short queue that looks whole is the same lie in a smaller size. */
.pri-gap {
  font-size: 12px; color: var(--c-warning); background: var(--c-warning-tint);
  border-radius: 8px; padding: 8px 12px; margin-bottom: 12px;
}
.pri-clear--failed .pri-clear__title { color: var(--d-text); }
.pri-clear__mark--failed { color: var(--c-danger); background: var(--c-danger-tint); }
/* A cleared queue sells the next move — the point of finishing the day's work is the room it makes. */
.pri-clear__acts { display: flex; gap: 8px; justify-content: center; margin-top: 14px; }

/* An incomplete lane says so in the legend (Loop III P2) — an empty Install lane is either a quiet
   week or a failed read, and a legend that lets those look alike is worse than no legend. */
.cal-key__warn { font-size: 11px; color: var(--c-warning); margin-left: auto; }

/* A dense table is a listbox: arrows move this highlight, Enter opens it (Loop III P6). Twenty-six
   views render a clickable row as a <tr>, which a mouse can reach and a keyboard cannot — fixed
   once here rather than twenty-six times.
   The marker is a HAIRLINE, not a shadow — the flat redesign forbids shadows on rows, and
   `test/col.test.mjs` says so out loud. Every row carries the transparent border so the highlighted
   one does not shift the text by two pixels as it moves. */
.dash-table tbody > tr > td:first-child { border-left: 2px solid transparent; }
.dash-table__row--cursor > td { background: var(--c-brand-tint); }
.dash-table__row--cursor > td:first-child { border-left-color: var(--c-brand-primary); }

/* The band's own move sits IN the row (Loop III P8a). READY TO SCHEDULE exists to show signed work
   waiting for a date; until this it could name the stall and not clear it. */
.jl-row__act { margin-left: 10px; }
.jl-row__act .btn { white-space: nowrap; }
.sch-sheet .pt-search { align-items: flex-end; }

/* ── DAILY BRIEF (Loop III P16) ─────────────────────────────────────────────
   The finishable numbers above the queue: "46 things" and "92 minutes" turn a wall into a shift,
   and somebody deciding whether to start needs the size before the contents. */
.pri-brief {
  border: 1px solid var(--d-border); border-radius: 12px; background: var(--c-surface);
  padding: 14px 16px; margin-bottom: 14px;
}
.pri-brief__title { font-size: 13px; font-weight: 700; color: var(--d-text); margin-bottom: 10px; }
.pri-brief__cells { display: flex; gap: 0; flex-wrap: wrap; }
.pri-brief__cell {
  display: flex; flex-direction: column; gap: 1px; padding: 0 20px;
  border-left: 1px solid var(--d-border);
}
.pri-brief__cell:first-child { padding-left: 0; border-left: 0; }
.pri-brief__kicker {
  font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--d-text-3);
}
.pri-brief__value { font-size: 22px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--d-text); }
.pri-brief__cell--danger .pri-brief__value { color: var(--c-danger); }
.pri-brief__cell--brand  .pri-brief__value { color: var(--c-brand-primary); }
.pri-brief__unit { font-size: 12px; font-weight: 600; color: var(--d-text-3); margin-left: 3px; }
.pri-brief__sub { font-size: 11px; color: var(--d-text-3); }

/* The verb that clears a bucket — the app has carried these pills the whole time. */
.pri-bucket__verb {
  align-self: center; margin-left: auto; margin-right: 12px;
  font-size: 11px; font-weight: 600; min-height: 24px; padding: 4px 11px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--c-brand-tint); background: var(--c-brand-tint); color: var(--c-brand-primary);
  white-space: nowrap;
}
.pri-bucket__verb:hover { border-color: var(--c-brand-primary); }
.pri-bucket--severe .pri-bucket__verb {
  background: var(--c-danger-tint); border-color: var(--c-danger-tint); color: var(--c-danger);
}

/* The pipeline funnel (Loop III P16): the bar is proportional to the largest stage, so a wide row
   at the top and a narrow one at the bottom IS the story — where money gets stuck. */
.today-rail__funnel { display: flex; align-items: center; gap: 8px; }
.today-rail__bar {
  flex: 1; height: 6px; border-radius: 3px; background: var(--c-field-fill); overflow: hidden;
  min-width: 40px;
}
.today-rail__bar-fill { display: block; height: 100%; background: var(--c-brand-primary); border-radius: 3px; }

/* "No billing yet" rather than a blank cell (Loop III P17) — the app says WHY a value is absent, so
   an empty cell never reads as "nobody filled this in". */
.cust-none { font-size: 11px; }
/* The quiet resting move — present on every row, but never competing with a real alarm. */
.cust-move--quiet {
  background: none; border: 1px solid transparent; color: var(--d-text-3); font-weight: 500;
}
.cust-move--quiet:hover { border-color: var(--d-border); color: var(--d-text-2); }

/* ── Materials: the buying flow and its supply rail ─────────────────────────
   Work left, context right — the `today-rail` arrangement, applied to procurement. The app carries
   the rail at 304pt beside a flow workspace; the desk gets the same two columns with room for the
   columns an iPad can't fit. Below 1100px the rail falls under the flow rather than squeezing it:
   a 200px-wide glance is not a glance. */
.mat-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--space-xxl);align-items:start}
@media (max-width:1100px){ .mat-layout{grid-template-columns:minmax(0,1fr)} }

.mat-flow__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md)}
.mat-flow__title{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.mat-flow__sub{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:var(--space-xxs)}
.mat-flow__count{font-size:var(--text-caption);font-variant-numeric:tabular-nums;color:var(--c-text-tertiary);white-space:nowrap}

.mat-row{cursor:pointer}
.mat-row:hover{background:var(--c-field-fill)}
.mat-num{text-align:right;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.mat-chip{color:var(--c-text-secondary);background:var(--c-field-fill)}
/* An order nobody addressed. Said plainly, because it can't be chased until somebody fixes it. */
.mat-novendor{font-weight:600;color:var(--c-warning)}
.mat-unpriced{font-size:var(--text-caption2);font-weight:600;color:var(--c-warning);margin-top:1px}

/* `takeoffAutomationCard` — where the rows above came from, and the one door to an order that
   starts empty. Dashed, because it is an explanation sitting under a list rather than a record in
   it. */
.mat-takeoff{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-top:var(--space-md);border-style:dashed}
.mat-takeoff__title{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.mat-takeoff__sub{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:var(--space-xxs);line-height:1.4}

.mat-rail__card{border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);margin-bottom:var(--space-md);overflow:hidden}
.mat-rail__card-title{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-separator)}
.mat-rail__card-body{padding:var(--space-sm-md) var(--space-md)}
.mat-rail__line{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-xxs) 0}
.mat-rail__line-icon{flex-shrink:0;width:14px;height:14px;margin-top:1px}
.mat-rail__line-icon svg{width:14px;height:14px;display:block}
.mat-rail__line-text{font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.35}
/* A full-width text button whose WIDTH was never the problem — it is 15px tall with no vertical
   padding, so the strip a thumb can hit is a third of the minimum. Padding is vertical only:
   the label keeps its left edge and its place in the card. */
.mat-rail__link{display:block;width:100%;text-align:left;margin-top:var(--space-xs);padding:var(--space-xs) 0;min-height:24px;background:none;border:none;font-family:inherit;font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);cursor:pointer}
.mat-rail__link:hover{text-decoration:underline}
.mat-rail__hint{font-size:var(--text-caption);color:var(--c-text-tertiary);line-height:1.4;margin:0}
.mat-rail__hint--warn{color:var(--c-warning);font-weight:600}
.mat-rail__chips{display:flex;gap:var(--space-md)}
.mat-rail__chip-value{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}
.mat-rail__chip-label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--c-text-tertiary);margin-top:1px}
.mat-rail__row{display:flex;align-items:baseline;gap:var(--space-sm);padding:var(--space-xxs) 0}
.mat-rail__row-label{flex:1;min-width:0;font-size:var(--text-caption);color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mat-rail__row-value{font-size:var(--text-caption);font-variant-numeric:tabular-nums;color:var(--c-text-secondary);white-space:nowrap}

/* ══ JOBS — one destination, five lenses ═══════════════════════════════════
 *
 * The Jobs surfaces, rebuilt against the app's own `JobScheduleView`. Everything here obeys the
 * flat rules the theme header states: hairlines separate, radius-card is 10, and nothing casts a
 * shadow. Density is the point — the web console is the widest screen the business owns and it was
 * showing a page taller and airier than the iPad's.
 */

/* ── The hub header: three facts and the one door ───────────────────────── */
.jh { --jh-rail:clamp(250px,28vw,350px);position:relative;display:block;padding:var(--space-md) 0 var(--space-sm); }
.jh.jh--list{padding-right:calc(var(--jh-rail) + var(--space-xl))}
.jh__resources[hidden]{display:none}
.jh__resources{position:absolute;top:var(--space-md);right:0;width:var(--jh-rail)}
.jh__resources .rr{position:static}
.jh__top { display: flex; align-items: flex-start; gap: var(--space-md); }
.jh__lead { flex: 1; min-width: 0; }
.jh__title { font-size: var(--text-title3); font-weight: 700; color: var(--c-text-primary); margin: 0; }
.jh__sub { font-size: var(--text-subhead); color: var(--c-text-secondary); margin: 2px 0 0; }
.jh__act { flex-shrink: 0; }
.jh__act .btn__count {
  margin-left: 6px; padding: 0 5px; border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, .22); font-size: var(--text-caption2); font-variant-numeric: tabular-nums;
}
.jh__cards {
  display: grid; grid-template-columns: repeat(3, 1fr); margin-top: 0;
  border: 1px solid var(--c-card-border); border-radius: var(--radius-card); background: var(--c-card-background);
}
.jh__note { padding: var(--space-md); font-size: var(--text-caption); color: var(--c-text-secondary); margin: var(--space-sm) 0 0; }
.jh__note--warn { color: var(--c-warning); }

/* Three metrics split by vertical hairlines — the same grammar as the Priorities header, and not
 * three boxes floating apart. */
.jh-card {
  display: flex; gap: var(--space-sm); align-items: center; text-align: left;
  padding: var(--space-sm-md) var(--space-md); background: none; border: 0;
  border-left: 1px solid var(--c-separator); cursor: pointer; min-width: 0;
}
.jh-card:first-child { border-left: 0; }
.jh-card:hover { background: var(--c-field-fill); }
.jh-card__icon {
  flex-shrink: 0; width: 30px; height: 30px; border-radius: var(--radius-control);
  display: flex; align-items: center; justify-content: center;
  background: var(--c-brand-tint); color: var(--c-brand-primary);
}
.jh-card--danger .jh-card__icon { background: var(--c-danger-tint); color: var(--c-danger); }
.jh-card--warn .jh-card__icon { background: var(--c-warning-tint); color: var(--c-warning); }
.jh-card--gray   .jh-card__icon { background: var(--c-control-fill); color: var(--c-text-tertiary); }
.jh-card--blue   .jh-card__icon { background: var(--c-info-tint); color: var(--c-accent-blue); }
.jh-card--teal   .jh-card__icon { background: var(--c-info-tint); color: var(--c-accent-teal); }
.jh-card__body { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.jh-card__kicker {
  font-size: 10px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
  color: var(--c-text-tertiary);
}
.jh-card--danger .jh-card__kicker { color: var(--c-danger); }
.jh-card--warn .jh-card__kicker { color: var(--c-warning); }
.jh-card__value {
  font-size: var(--text-title3); font-weight: 700; color: var(--c-text-primary);
  font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.jh-card__sub {
  font-size: var(--text-caption2); color: var(--c-text-tertiary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* ── The lens strip ─────────────────────────────────────────────────────── */
.seg--lens .seg__tab { display: inline-flex; align-items: center; gap: 6px; }
.seg__icon { display: inline-flex; opacity: .75; }
.seg__tab--active .seg__icon { opacity: 1; }
/* One sentence for the lens you are in — it used to be five page subtitles. */
.seg__sub {
  font-size: var(--text-caption); color: var(--c-text-secondary);
  margin: calc(var(--space-xs) * -1) 0 var(--space-md); padding-left: 2px;
}

/* ── Settings Payroll · Check company setup and funded run ─────────────── */
.check-payroll-page{display:grid;gap:var(--space-lg);width:min(100%,760px);margin:0 auto;padding:var(--space-lg) 0}
.check-payroll-hero{display:grid;justify-items:start;gap:var(--space-sm)}
.check-payroll-hero>.check-payroll-icon,.check-payroll-approved>.check-payroll-icon{width:54px;height:54px;border-radius:50%;font-size:24px}
.check-payroll-hero h2,.check-payroll-approved h2{margin:0;font-size:var(--text-title2);color:var(--c-text-primary)}
.check-payroll-hero p,.check-payroll-approved p{max-width:650px;margin:0;color:var(--c-text-secondary);font-size:var(--text-subhead);line-height:1.5}
.check-payroll-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;flex:0 0 auto;border-radius:9px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:14px;font-weight:800}
.check-payroll-hero--pending>.check-payroll-icon{background:var(--c-warning-tint);color:var(--c-warning)}
.check-payroll-card{overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-xl);background:var(--d-card-bg);box-shadow:var(--shadow-card)}
.check-payroll-benefits{display:grid;padding:var(--space-lg)}
.check-payroll-benefits>div{display:flex;align-items:flex-start;gap:var(--space-md);padding:var(--space-md) 0}
.check-payroll-benefits>div+div{border-top:1px solid var(--c-separator)}
.check-payroll-benefits span,.check-payroll-row>span{display:grid;min-width:0;gap:2px}
.check-payroll-benefits strong,.check-payroll-row strong{color:var(--c-text-primary);font-size:var(--text-subhead)}
.check-payroll-benefits small,.check-payroll-row small{color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.4}
.check-payroll-primary{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);width:100%;min-height:48px;text-decoration:none}
.check-payroll-secondary{width:100%;min-height:44px;color:var(--c-brand-primary);background:var(--c-brand-tint)}
.check-payroll-disclaimer{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption2);line-height:1.45}
.check-payroll-error{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-md);border-radius:var(--radius-control);background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-footnote)}
.check-payroll-error>b{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;border:1px solid currentColor}
.check-payroll-status{display:flex;align-items:center;gap:var(--space-xs);width:max-content;max-width:100%;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-pill);font-size:var(--text-caption)}
.check-payroll-status i{width:7px;height:7px;border-radius:50%;background:currentColor}
.check-payroll-status--pending{background:var(--c-warning-tint);color:var(--c-warning)}
.check-payroll-status--active{background:var(--c-success-tint);color:var(--c-success)}
.check-payroll-dashboard{display:grid;gap:var(--space-sm)}
.check-payroll-dashboard>h3,.check-payroll-period>h3{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption2);letter-spacing:.06em}
.check-payroll-list{padding:0 var(--space-lg)}
.check-payroll-list>p{margin:0;padding:var(--space-md) 0;color:var(--c-text-tertiary);font-size:var(--text-footnote)}
.check-payroll-row{display:flex;align-items:center;gap:var(--space-md);min-height:58px;padding:var(--space-sm) 0;color:inherit;text-decoration:none}
.check-payroll-row+.check-payroll-row{border-top:1px solid var(--c-separator)}
.check-payroll-row>span{flex:1}.check-payroll-row>b{color:var(--c-text-primary);font-size:var(--text-subhead);font-variant-numeric:tabular-nums}
.check-payroll-loading{padding:var(--space-xl);color:var(--c-text-secondary);text-align:center}
.check-payroll-back{display:flex;align-items:center;justify-content:space-between;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.check-payroll-back a{min-height:44px;display:flex;align-items:center;color:var(--c-brand-primary);font-weight:700;text-decoration:none}
.check-payroll-period{display:grid;gap:var(--space-sm);padding:var(--space-lg)}
.check-payroll-period label{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);min-height:44px;color:var(--c-text-primary);font-size:var(--text-subhead)}
.check-payroll-period label+label{border-top:1px solid var(--c-separator)}
.check-payroll-period input{padding:8px;border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-field-fill);color:var(--c-text-primary);font:inherit}
.check-payroll-run>h2{margin:0;color:var(--c-text-primary);font-size:var(--text-title2)}
.check-payroll-totals{padding:0 var(--space-lg)}
.check-payroll-total{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);min-height:52px;color:var(--c-text-primary);font-size:var(--text-subhead)}
.check-payroll-total+.check-payroll-total{border-top:1px solid var(--c-separator)}
.check-payroll-total b{font-variant-numeric:tabular-nums}.check-payroll-total--strong{font-weight:750}.check-payroll-total--brand{color:var(--c-brand-primary)}
.check-payroll-warning{margin:0;color:var(--c-warning);font-size:var(--text-caption)}
.check-payroll-approved{display:grid;justify-items:start;gap:var(--space-md);padding-top:var(--space-lg)}
.check-payroll-onboard{position:relative;height:min(720px,75vh)}
.check-payroll-onboard>div{position:absolute;inset:0;display:grid;place-items:center;color:var(--c-text-secondary)}
.check-payroll-onboard iframe{position:relative;width:100%;height:100%;border:0;background:var(--d-card-bg)}
.check-worker-enrollment{display:grid;gap:var(--space-md);padding:var(--space-lg)}
.check-worker-enrollment header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.check-worker-enrollment header>span{display:flex;align-items:center;gap:var(--space-sm);color:var(--c-text-secondary);font-size:var(--text-caption2);letter-spacing:.06em}
.check-worker-enrollment header>span>b{color:var(--c-brand-primary);font-size:var(--text-subhead)}
.check-worker-enrollment header>em{display:flex;align-items:center;gap:5px;padding:3px 8px;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-tertiary);font-size:10px;font-style:normal;font-weight:700}
.check-worker-enrollment header>em[data-state="active"]{background:var(--c-success-tint);color:var(--c-success)}
.check-worker-enrollment header>em[data-state="pending"]{background:var(--c-warning-tint);color:var(--c-warning)}
.check-worker-enrollment header>em i{width:6px;height:6px;border-radius:50%;background:currentColor}
.check-worker-enrollment>p{margin:0;color:var(--c-text-secondary);font-size:var(--text-footnote);line-height:1.45}
.check-worker-enrollment>.btn{width:100%;min-height:42px}
@media(max-width:700px){
  .check-payroll-page{padding:var(--space-sm) 0;gap:var(--space-md)}
  .check-payroll-card{border-radius:var(--radius-lg)}
  .check-payroll-row{min-height:64px}
  .check-payroll-onboard{height:78vh}
}

/* ── Payroll · frozen Catalyst three-lens workspace ─────────────────────── */
.payroll-lenses{margin-bottom:var(--space-lg)}
.payroll-hero{margin-bottom:var(--space-lg);padding:var(--space-xl);border:1px solid color-mix(in srgb,var(--c-on-brand) 10%,transparent);border-radius:var(--radius-xl);background:linear-gradient(135deg,var(--c-brand-pressed),color-mix(in srgb,var(--c-brand-primary) 82%,transparent));color:var(--c-on-brand);box-shadow:var(--shadow-card)}
.payroll-hero__kicker{font-size:10px;font-weight:800;letter-spacing:.7px;color:rgba(255,255,255,.64)}
.payroll-hero__title{margin:var(--space-xs) 0 0;font-size:var(--text-title2);line-height:1.18;letter-spacing:-.35px;color:var(--c-on-brand)}
.payroll-hero__guidance{max-width:720px;margin:var(--space-xs-sm) 0 0;font-size:var(--text-footnote);line-height:1.45;color:rgba(255,255,255,.72)}
.payroll-hero__metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:var(--space-lg);padding-top:var(--space-lg);border-top:1px solid rgba(255,255,255,.14)}
.payroll-hero__metric{display:flex;min-width:0;flex-direction:column;align-items:flex-start;gap:2px;padding:0 var(--space-lg);border:0;border-left:1px solid rgba(255,255,255,.14);background:none;color:var(--c-on-brand);text-align:left;font-family:inherit}
.payroll-hero__metric:first-child{padding-left:0;border-left:0}
.payroll-hero__metric:last-child{padding-right:0}
button.payroll-hero__metric{cursor:pointer}
button.payroll-hero__metric:hover strong{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.payroll-hero__metric span{font-size:9px;font-weight:800;letter-spacing:.55px;color:rgba(255,255,255,.58)}
.payroll-hero__metric strong{max-width:100%;overflow:hidden;text-overflow:ellipsis;font-size:var(--text-title2);line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap}
.payroll-hero__metric small{font-size:var(--text-caption2);line-height:1.35;color:rgba(255,255,255,.68)}
.payroll-controls{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-md)}
.payroll-filter-chips{display:flex;align-items:center;gap:var(--space-xs);max-width:100%;overflow-x:auto;scrollbar-width:none}
.payroll-filter-chips::-webkit-scrollbar{display:none}
.payroll-filter-chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:34px;padding:0 var(--space-md);border:1px solid transparent;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font:600 var(--text-caption)/1 var(--font-family);white-space:nowrap;cursor:pointer}
.payroll-filter-chip span{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;opacity:.7}
.payroll-filter-chip--active{border-color:color-mix(in srgb,var(--c-brand-primary) 22%,transparent);background:var(--c-brand-tint);color:var(--c-brand-pressed)}
.payroll-search{flex:1 0 100%;height:40px}
.payroll-readiness{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);margin-bottom:var(--space-lg)}
.payroll-readiness__card{padding:var(--space-lg)}
.payroll-readiness__card h3{margin:0 0 var(--space-md);font-size:var(--text-subhead);color:var(--c-text-primary)}
.payroll-readiness__card>div{display:flex;align-items:flex-start;gap:var(--space-sm);margin-top:var(--space-sm)}
.payroll-readiness__card>div>b{color:var(--c-brand-primary)}
.payroll-readiness__card>div>span{display:flex;flex-direction:column;gap:2px}
.payroll-readiness__card strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.payroll-readiness__card small{font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-tertiary)}
.payroll-readiness__flow p{margin:0 0 var(--space-sm);font-size:var(--text-footnote);font-weight:650;line-height:1.5;color:var(--c-text-primary)}
.payroll-readiness__flow>small{display:block;font-size:var(--text-caption);line-height:1.45;color:var(--c-text-secondary)}
/* `workflowCoaching` — four numbered steps, not one arrow-strung sentence. */
.payroll-coaching{margin:0;padding-left:var(--space-lg);font-size:var(--text-caption);line-height:1.5;color:var(--c-text-secondary)}
.payroll-coaching li+li{margin-top:var(--space-xs)}
[data-payroll-compact]{display:none}
.payroll-list-icon{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;margin-right:var(--space-sm);border-radius:9px;background:var(--c-field-fill);color:var(--c-text-tertiary);font-size:14px;font-style:normal;vertical-align:middle}
.payroll-list-icon[data-status="approved"],.payroll-list-icon[data-status="completed"]{background:var(--c-success-tint);color:var(--c-success)}
.payroll-list-icon[data-status="submitted"]{background:var(--c-warning-tint);color:var(--c-warning)}
.payroll-list-icon[data-status="rejected"],.payroll-list-icon[data-status="voided"]{background:var(--c-danger-tint);color:var(--c-danger)}
.payroll-list-icon[data-status="processed"]{background:var(--c-info-tint);color:var(--c-info)}
.payroll-ot{display:inline-flex;margin-right:var(--space-xs);padding:2px 6px;border-radius:var(--radius-pill);background:var(--c-warning-tint);color:var(--c-warning);font-size:10px;font-weight:800}
.payroll-inline-action{min-height:28px;padding:0 var(--space-sm);border:1px solid color-mix(in srgb,var(--c-success) 24%,transparent);border-radius:var(--radius-pill);background:var(--c-success-tint);color:var(--c-success);font:800 10px/1 var(--font-family);cursor:pointer}
.commission-phone-hero{display:none}
.commission-desktop-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);margin-bottom:var(--space-md)}
.commission-desktop-summary>.card{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs);padding:var(--space-lg)}
.commission-desktop-summary strong{font-size:var(--text-title2);font-variant-numeric:tabular-nums;color:var(--c-brand-primary)}
.commission-desktop-summary span{font-size:var(--text-caption);color:var(--c-text-secondary)}
/* summaryCard's third line — drawn only when the figure above it is zero. */
.commission-summary-hint{font-size:var(--text-caption2);font-style:normal;color:var(--c-text-tertiary)}
/* pipelineCoachingText, under the summary cards. */
.commission-coaching{display:flex;align-items:center;gap:var(--space-sm);margin:0 0 var(--space-md);font-size:var(--text-caption);color:var(--c-text-tertiary)}
.commission-coaching::before{content:"◆";color:var(--c-warning);font-size:10px}
.commission-tiers__detail{margin:calc(var(--space-xs) * -1) 0 var(--space-sm);font-size:var(--text-caption);color:var(--c-text-secondary)}
.commission-payouts-head{display:flex;flex-direction:column;gap:2px;margin-bottom:var(--space-sm)}
.commission-payouts-head strong{font-size:var(--text-subhead)}
.commission-payouts-head small{font-size:var(--text-caption);color:var(--c-text-secondary)}
/* noFilterResults — the ledger's own filtered-empty face, which names the active chip. */
.commission-no-results{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-xxl) var(--space-lg);text-align:center}
.commission-no-results p{margin:0;font-size:var(--text-subhead);font-weight:600;color:var(--c-text-secondary)}
.commission-next-move{display:flex;align-items:flex-start;gap:var(--space-md);margin-bottom:var(--space-md);padding:var(--space-lg)}
.commission-next-move>b{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;background:var(--c-warning-tint);color:var(--c-warning)}
.commission-next-move>span{display:flex;flex-direction:column;gap:2px}
.commission-next-move small{font-size:10px;font-weight:800;letter-spacing:.7px;color:var(--c-warning)}
.commission-next-move strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.commission-next-move p{margin:0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.commission-tiers{margin-bottom:var(--space-lg);padding:var(--space-lg)}
.commission-tiers h3{margin:0 0 var(--space-sm);font-size:10px;letter-spacing:.6px;color:var(--c-text-secondary)}
.commission-tiers>div{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--space-md);min-height:52px}
.commission-tier-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:color-mix(in srgb,var(--c-accent-purple) 10%,transparent);color:var(--c-accent-purple);font-weight:800}
.commission-tiers>div>span:nth-child(2){display:flex;min-width:0;flex-direction:column;gap:2px}
.commission-tiers strong{font-size:var(--text-subhead)}
.commission-tiers small{overflow:hidden;text-overflow:ellipsis;font-size:var(--text-caption);color:var(--c-text-secondary);white-space:nowrap}
.commission-tiers>div>b{color:var(--c-brand-primary);font-size:var(--text-subhead);font-variant-numeric:tabular-nums}
.commission-filter-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}
.commission-filter-heading>span{display:flex;flex-direction:column;gap:2px}
.commission-filter-heading strong{font-size:var(--text-subhead)}
.commission-filter-heading small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.commission-controls .filter-select{min-width:160px}
.commission-actions{display:flex;justify-content:flex-end;gap:var(--space-xs);white-space:nowrap}
[data-commission-phone]{display:none}
.commission-card{padding:var(--space-lg)}
.commission-card+.commission-card{border-top:1px solid var(--c-separator)}
.commission-card__head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--space-sm)}
.commission-avatar{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--c-brand-tint);color:var(--c-brand-pressed);font-size:var(--text-caption);font-weight:800}
.commission-card__head>span:nth-child(2){display:flex;min-width:0;flex-direction:column;gap:2px}
.commission-card__head strong,.commission-card__head small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.commission-card__head small{color:var(--c-text-secondary)}
.commission-card__tags{display:flex;gap:var(--space-xs);margin:var(--space-md) 0}
.commission-card__tags span{padding:4px var(--space-sm);border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700}
.commission-card__metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:var(--space-md) 0;border-block:1px solid var(--c-separator)}
.commission-card__metrics>span{display:flex;min-width:0;flex-direction:column;gap:2px}
.commission-card__metrics small{font-size:10px;font-weight:700;text-transform:uppercase;color:var(--c-text-tertiary)}
.commission-card__metrics strong{overflow:hidden;text-overflow:ellipsis;font-size:var(--text-subhead);font-variant-numeric:tabular-nums;white-space:nowrap}
.commission-card__actions{display:flex;gap:var(--space-sm);margin-top:var(--space-md)}
.commission-card__actions .btn--primary{flex:1;justify-content:center;min-height:44px}
.commission-card__actions .btn--ghost{min-width:52px;min-height:44px}

@media(max-width:700px){
  .payroll-lenses{gap:var(--space-lg)}
  .payroll-lenses .tab-btn{font-size:var(--text-caption)}
  .payroll-hero{padding:var(--space-lg);border-radius:var(--radius-xl)}
  .payroll-hero__title{font-size:22px}
  .payroll-hero__metrics{gap:0}
  .payroll-hero__metric{padding:0 var(--space-sm)}
  .payroll-hero__metric strong{font-size:20px}
  .payroll-hero__metric small{font-size:10px}
  .payroll-controls{align-items:stretch}
  .payroll-filter-chips{flex:1 0 100%;padding-bottom:2px}
  .payroll-controls>.btn,.payroll-controls>.filter-select{min-height:44px}
  .payroll-controls>.btn{margin-left:auto}
  .payroll-search{height:44px;font-size:16px}
  .payroll-readiness{grid-template-columns:minmax(0,1fr)}
  [data-payroll-wide]{display:none}
  [data-payroll-compact]{display:flex;flex-direction:column}
  .payroll-compact-row{position:relative;display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-height:76px;padding:var(--space-md);cursor:pointer;outline:none}
  .payroll-compact-row+.payroll-compact-row{border-top:1px solid var(--c-separator)}
  .payroll-compact-row:focus-visible{box-shadow:inset 0 0 0 2px var(--c-brand-primary)}
  .payroll-compact-row__accent{position:absolute;inset:10px auto 10px 0;width:3px;border-radius:0 3px 3px 0;background:var(--c-text-tertiary)}
  .payroll-compact-row__accent[data-status="approved"],.payroll-compact-row__accent[data-status="completed"]{background:var(--c-success)}
  .payroll-compact-row__accent[data-status="submitted"]{background:var(--c-warning)}
  .payroll-compact-row__accent[data-status="rejected"],.payroll-compact-row__accent[data-status="voided"]{background:var(--c-danger)}
  .payroll-compact-row__accent[data-status="processed"]{background:var(--c-info)}
  .payroll-compact-row .payroll-list-icon{margin:0}
  .payroll-compact-row__body,.payroll-compact-row__end{display:flex;min-width:0;flex-direction:column;gap:var(--space-xs)}
  .payroll-compact-row__body strong{overflow:hidden;text-overflow:ellipsis;font-size:var(--text-subhead);white-space:nowrap}
  .payroll-compact-row__body small{overflow:hidden;text-overflow:ellipsis;color:var(--c-text-secondary);font-size:var(--text-caption);white-space:nowrap}
  .payroll-compact-row__end{align-items:flex-end;text-align:right}
  .payroll-compact-row__end>strong{font-size:var(--text-subhead);font-variant-numeric:tabular-nums;white-space:nowrap}
  .payroll-compact-row__end>strong em{margin-right:var(--space-xs);padding:2px 5px;border-radius:var(--radius-pill);background:var(--c-warning-tint);color:var(--c-warning);font-size:10px;font-style:normal}
  .commission-desktop-summary{display:none}
  .commission-phone-hero{display:block;margin-bottom:var(--space-lg)}
  .commission-phone-hero__kicker{font-size:10px;font-weight:800;letter-spacing:.7px;color:var(--c-brand-primary)}
  .commission-phone-hero h2{margin:var(--space-xs) 0;font-size:22px}
  .commission-phone-hero>p{margin:0 0 var(--space-md);font-size:var(--text-subhead);line-height:1.45;color:var(--c-text-secondary)}
  .commission-phone-hero__metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:var(--space-md)}
  .commission-phone-hero__metrics>div{display:flex;min-width:0;flex-direction:column;gap:2px}
  .commission-phone-hero__metrics span{font-size:10px;font-weight:800;text-transform:uppercase;color:var(--c-text-tertiary)}
  .commission-phone-hero__metrics strong{overflow:hidden;text-overflow:ellipsis;font-size:var(--text-subhead);font-variant-numeric:tabular-nums;white-space:nowrap}
  .commission-phone-hero__metrics small{font-size:10px;color:var(--c-text-secondary)}
  .commission-tiers h3{font-size:var(--text-subhead);letter-spacing:0;color:var(--c-text-primary)}
  .commission-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .commission-controls .filter-select{width:100%;min-width:0;height:44px}
  [data-commission-wide]{display:none}
  [data-commission-phone]{display:block}
}

/* ── List lens ──────────────────────────────────────────────────────────── */
.jl { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-lg); }
.jl__main { min-width: 0; }
.jl__rail { display: none; }
/* Multi-monitor-native: the readiness rail appears where there is genuinely room for it, and the
 * list keeps the whole width when there isn't. */
@media (min-width: 1440px) {
  .jl { grid-template-columns: minmax(0, 1fr) 320px; }
  .jl__rail { display: block; }
}

.jl__controls { display: flex; flex-direction: column; gap: var(--space-sm); margin-bottom: var(--space-md); }
.jl__search {
  width: 100%; padding: 7px var(--space-md); font-size: var(--text-subhead);
  border: 1px solid var(--c-input-border); border-radius: var(--radius-control);
  background: var(--c-input-fill); color: var(--c-text-primary);
}
.jl__scoperow { display: flex; align-items: center; gap: var(--space-md); flex-wrap: wrap; }
.jl__scopes { display: flex; gap: 6px; flex: 1; flex-wrap: wrap; }
.jl__summary { font-size: var(--text-caption); color: var(--c-text-secondary); font-variant-numeric: tabular-nums; }
.jl__summary b { color: var(--c-text-primary); font-weight: 700; }
.jl__summary .jl__alarm { color: var(--c-danger); }
.jl__summary .jl__warn { color: var(--c-warning); }
.jl__unreadable {
  font-size: var(--text-caption); color: var(--c-warning); margin: 0 0 var(--space-sm);
  padding: var(--space-sm) var(--space-md); border: 1px solid var(--c-warning);
  border-radius: var(--radius-row); background: var(--c-warning-tint);
}

.chip {
  padding: 3px 10px; font-size: var(--text-caption); font-weight: 600;
  color: var(--c-text-secondary); background: var(--c-control-fill);
  border: 1px solid transparent; border-radius: var(--radius-pill); cursor: pointer;
}
.chip:hover { color: var(--c-text-primary); }
.chip--on { color: var(--c-brand-primary); background: var(--c-brand-tint); border-color: var(--c-brand-primary); }

/* The five columns. Ready? is the one the web never had, and it is why this is a list you act on. */
/* CROSS-MARKET HITS — a job found in a market you are not looking at. Deliberately unlike a
   .jl-row: these are not rows of this list, they are somewhere else, and pressing one moves the
   whole CRM. The market pill carries that, in the app's blue. */
.jw-day__agendadate, .jw-day__count, .jw-day__nothing { display: none; }
/* JOB PROGRESS — the pipeline as stations. A station with a legal move is a button; one without is
   a label, because a node that opens nothing is a promise the door would refuse. */
/* MAP LAYERS — our own control, top-left over the canvas, in place of Google's. */
.jmap__stage { position: relative; display: flex; min-height: 0; }
.jmap__next { margin: 2px 0 0; color: var(--c-text-tertiary); font-size: var(--text-caption2); }
.jmap__stage > .jmap__canvas { flex: 1; min-width: 0; }
.jmap__layers {
  position: absolute; top: var(--space-sm-md); left: var(--space-sm-md); z-index: 2;
  display: flex; flex-direction: column; gap: 4px;
  padding: var(--space-xs); border-radius: var(--radius-card);
  background: var(--c-card-background); box-shadow: 0 2px 10px rgb(0 0 0 / 18%);
}
.jmap__layers[hidden] { display: none; }
.jmap__layerchips { display: flex; gap: 2px; }
.jmap__layerchip {
  min-height: 26px; padding: 4px var(--space-sm); border: 0; border-radius: var(--radius-row);
  background: transparent; color: var(--c-text-secondary);
  font: inherit; font-size: var(--text-caption2); font-weight: 700; cursor: pointer;
}
.jmap__layerchip.is-on { background: var(--c-brand-tint); color: var(--c-brand-primary); }
.jmap__traffic {
  display: flex; align-items: center; gap: var(--space-xs);
  min-height: 26px; padding: 2px var(--space-sm); border: 0; border-radius: var(--radius-row);
  background: transparent; color: var(--c-text-secondary);
  font: inherit; font-size: var(--text-caption2); cursor: pointer;
}
.jmap__trafficdot {
  width: 10px; height: 10px; border: 1.5px solid var(--c-border); border-radius: 50%;
}
.jmap__traffic.is-on { color: var(--c-brand-primary); }
.jmap__traffic.is-on .jmap__trafficdot { border-color: var(--c-brand-primary); background: var(--c-brand-primary); }
/* Fit to jobs — bottom-left, the corner the app puts it in, opposite the callout. */
.jmap__fit {
  position: absolute; bottom: var(--space-sm-md); left: var(--space-sm-md); z-index: 2;
  display: inline-flex; align-items: center; gap: var(--space-xs);
  min-height: 30px; padding: 4px var(--space-sm-md); border: 0; border-radius: var(--radius-card);
  background: var(--c-card-background); color: var(--c-text-secondary);
  font: inherit; font-size: var(--text-caption2); font-weight: 700; cursor: pointer;
  box-shadow: 0 2px 10px rgb(0 0 0 / 18%);
}
/* Hidden until there are jobs to fit, and `display: inline-flex` above beats the user agent's
   `[hidden] { display: none }` — the same trap the visits key fell into one row earlier. */
.jmap__fit[hidden] { display: none; }
.jmap__fit:hover { color: var(--c-text-primary); }
.jmap__fiticon { width: 13px; height: 13px; display: inline-block; }
/* The zoom rail — trailing edge, vertically centred, + over the track over −. */
.jmap__zoom {
  position: absolute; top: 50%; right: var(--space-sm-md); transform: translateY(-50%); z-index: 2;
  display: flex; flex-direction: column; align-items: center; gap: var(--space-xs);
  padding: var(--space-xs); border-radius: var(--radius-card);
  background: var(--c-card-background); box-shadow: 0 2px 10px rgb(0 0 0 / 18%);
}
.jmap__zoom[hidden] { display: none; }
.jmap__zoombtn {
  width: 26px; height: 26px; padding: 0; border: 0; border-radius: var(--radius-row);
  background: transparent; color: var(--c-text-secondary);
  font: inherit; font-size: var(--text-caption); font-weight: 700; line-height: 1; cursor: pointer;
}
.jmap__zoombtn:hover { background: var(--c-brand-tint); color: var(--c-brand-primary); }
/* A vertical range with its MAX at the top, so up is closer — the direction the + above it promises.
   `writing-mode: vertical-lr` with `direction: rtl` is the standard way to stand a range up; the
   deprecated `slider-vertical` appearance is kept beneath it for older engines. */
.jmap__zoomtrack {
  writing-mode: vertical-lr; direction: rtl;
  -webkit-appearance: none; appearance: none;
  width: 24px; height: 120px; margin: 0; padding: 0;
  cursor: pointer; background: transparent;
}
/* The app draws a plain 5pt capsule with a 16pt thumb on it and NO filled portion — the fill a
   native range paints below the thumb reads as a level, and this is a position. */
.jmap__zoomtrack::-webkit-slider-runnable-track {
  width: 5px; border-radius: 999px;
  background: var(--c-input-fill); border: 1px solid var(--c-input-border);
}
.jmap__zoomtrack::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 16px; height: 16px; border-radius: 50%; border: 0;
  background: var(--c-brand-primary); box-shadow: 0 1px 3px rgb(0 0 0 / 20%); /* raw-color-ok */
  margin-left: -6px;
}
.jmap__zoomtrack::-moz-range-track {
  width: 5px; border-radius: 999px;
  background: var(--c-input-fill); border: 1px solid var(--c-input-border);
}
.jmap__zoomtrack::-moz-range-thumb {
  width: 16px; height: 16px; border-radius: 50%; border: 0;
  background: var(--c-brand-primary); box-shadow: 0 1px 3px rgb(0 0 0 / 20%); /* raw-color-ok */
}
.jmap__zoomtrack:focus-visible { outline: 2px solid var(--c-brand-primary); outline-offset: 2px; }
/* MEASURED TODAY — a quiet secondary door under the next-move band, not a second primary verb. */
.jb-measure-door {
  display: inline-flex; align-items: center; gap: var(--space-xs);
  min-height: 32px; margin-top: var(--space-sm); padding: var(--space-xs) var(--space-md);
  border: 0; border-radius: var(--radius-pill);
  background: var(--c-brand-tint); color: var(--c-brand-primary);
  font: inherit; font-size: var(--text-caption); font-weight: 700; cursor: pointer;
}
.jb-measure-door:hover { background: color-mix(in srgb, var(--c-brand-primary) 18%, transparent); }
.jb-quickbill__amount { display: flex; align-items: center; gap: var(--space-xs); }
.jb-quickbill__amount > span { font-size: 26px; font-weight: 700; color: var(--c-text-secondary); }
.jb-money-verbs { display: flex; flex-wrap: wrap; gap: var(--space-xs); margin-top: var(--space-sm); }
.jb-money-verb { min-height: 30px; padding: 4px var(--space-md); border: 0;
  border-radius: var(--radius-pill); background: var(--c-brand-tint); color: var(--c-brand-primary);
  font: inherit; font-size: var(--text-caption2); font-weight: 700; cursor: pointer; }
.jb-money-verb:hover { background: color-mix(in srgb, var(--c-brand-primary) 18%, transparent); }
/* THE FINISH — a completed job counts down its closeout paper. */
.jb-completed { display: flex; flex-direction: column; gap: var(--space-xs);
  padding: var(--space-md) var(--space-lg); }
.jb-completed__head { display: flex; align-items: center; gap: var(--space-sm); }
.jb-completed__pill { padding: 3px var(--space-sm); border-radius: var(--radius-pill);
  background: color-mix(in srgb, var(--c-success) 14%, transparent); color: var(--c-success);
  font-size: 9px; font-weight: 700; letter-spacing: .05em; }
.jb-completed__when { font-size: var(--text-caption2); color: var(--c-text-tertiary); }
.jb-completed__headline { margin: 0 0 var(--space-xs); font-size: var(--text-subhead);
  font-weight: 600; color: var(--c-text-primary); }
.jb-completed__row { display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-sm); min-height: 32px; font-size: var(--text-caption); color: var(--c-text-secondary); }
.jb-completed__row--done { color: var(--c-text-tertiary); }
.jb-completed__verb { min-height: 28px; padding: 2px var(--space-sm); border: 0;
  border-radius: var(--radius-pill); background: var(--c-brand-tint); color: var(--c-brand-primary);
  font: inherit; font-size: var(--text-caption2); font-weight: 700; cursor: pointer; }
/* THE CLOSED CHAPTER — a cancelled job, drawn from its own facts. Amber when the refund failed,
   because money was taken and the giving back did not land. */
.jb-cancelled { display: flex; flex-direction: column; gap: var(--space-sm);
  padding: var(--space-md) var(--space-lg); }
.jb-cancelled--warn { border-left: 3px solid var(--c-warning); }
.jb-cancelled__head { display: flex; align-items: center; gap: var(--space-sm); }
.jb-cancelled__pill { padding: 3px var(--space-sm); border-radius: var(--radius-pill);
  background: var(--c-field-fill); color: var(--c-text-secondary);
  font-size: 9px; font-weight: 700; letter-spacing: .05em; }
.jb-cancelled--warn .jb-cancelled__pill { background: var(--c-warning-tint); color: var(--c-warning); }
.jb-cancelled__when { font-size: var(--text-caption2); color: var(--c-text-tertiary); }
.jb-cancelled__reason { margin: 0; font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary); }
.jb-cancelled__facts { margin: 0; font-size: var(--text-caption2); color: var(--c-text-secondary); }
.jb-cancelled--warn .jb-cancelled__facts { color: var(--c-warning); }
.jb-cancelled__verbs { display: flex; gap: var(--space-sm); }
/* THE FIELD VIEWER'S BAND — Scheduled · Crew · Drawings, and nothing about money. */
.jb-fieldband { display: flex; gap: var(--space-lg); padding: var(--space-md) var(--space-lg); }
.jb-fieldband__slot { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }
.jb-fieldband__label { font-size: var(--text-caption2); font-weight: 700; letter-spacing: .05em;
  color: var(--c-text-tertiary); text-transform: uppercase; }
.jb-fieldband__value { font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary); }
.jb-fieldband__meta { font-size: var(--text-caption2); color: var(--c-text-secondary); }
/* NO MONEY THREAD YET — the unpriced job's own face, under the progress rail. */
.jb-nomoney { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md) var(--space-lg); }
.jb-nomoney__copy { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }
.jb-nomoney__copy > strong { font-size: var(--text-subhead); color: var(--c-text-primary); }
.jb-nomoney__copy > span { font-size: var(--text-caption2); color: var(--c-text-secondary); }
/* AT RISK (n) — which jobs to go and look at, beside the board rather than on it. */
.jb-risk { padding: var(--space-md) var(--space-lg); margin-bottom: var(--space-md);
  border-left: 3px solid var(--c-danger); }
.jb-risk__head { display: flex; align-items: center; gap: var(--space-xs);
  margin-bottom: var(--space-sm); color: var(--c-danger);
  font-size: var(--text-caption2); font-weight: 700; letter-spacing: .06em; }
.jb-risk__row { display: flex; flex-direction: column; gap: 2px; width: 100%; min-height: 44px;
  padding: var(--space-xs) 0; border: 0; background: transparent; font: inherit;
  text-align: left; cursor: pointer; }
.jb-risk__row + .jb-risk__row { border-top: 1px solid var(--c-separator); }
.jb-risk__name { font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary); }
.jb-risk__why { font-size: var(--text-caption2); color: var(--c-warning); }
.jb-pipeline { padding: var(--space-md) var(--space-lg); }
.jb-pipeline__label { font-size: var(--text-caption2); font-weight: 700; letter-spacing: .06em;
  color: var(--c-text-tertiary); margin-bottom: var(--space-sm); }
.jb-pipeline__rail { display: flex; gap: var(--space-xs); margin: 0; padding: 0; list-style: none;
  overflow-x: auto; }
.jb-pipeline__stop { flex: 1 1 0; min-width: 62px; display: flex; flex-direction: column;
  align-items: center; gap: 4px; text-align: center; }
.jb-pipeline__node { display: flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; min-height: 26px; padding: 0; border-radius: 50%;
  border: 1.5px solid var(--c-border); background: var(--c-card-background);
  color: var(--c-text-tertiary); font: inherit; font-size: var(--text-caption2); font-weight: 700; }
button.jb-pipeline__node { cursor: pointer; }
button.jb-pipeline__node:hover { border-color: var(--c-brand-primary); color: var(--c-brand-primary); }
.jb-pipeline__stop--done .jb-pipeline__node { border-color: var(--c-success); background: var(--c-success); color: var(--c-background); }
.jb-pipeline__stop--current .jb-pipeline__node { border-color: var(--c-brand-primary); background: var(--c-brand-tint); color: var(--c-brand-primary); }
.jb-pipeline__name { font-size: 10px; color: var(--c-text-secondary); }
.jb-pipeline__stop--current .jb-pipeline__name { color: var(--c-text-primary); font-weight: 700; }
.jl-cross { display: flex; flex-direction: column; gap: var(--space-xs); margin-top: var(--space-md); }
.jl-cross__hit {
  display: flex; align-items: center; gap: var(--space-sm-md);
  width: 100%; min-height: 44px; padding: var(--space-sm) var(--space-md);
  border: 1px solid color-mix(in srgb, var(--c-accent-blue) 24%, transparent);
  border-radius: var(--radius-row);
  background: color-mix(in srgb, var(--c-accent-blue) 5%, transparent);
  font: inherit; text-align: left; cursor: pointer;
}
.jl-cross__hit:hover { background: color-mix(in srgb, var(--c-accent-blue) 10%, transparent); }
.jl-cross__name { font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary); }
.jl-cross__who { flex: 1; font-size: var(--text-caption2); color: var(--c-text-secondary); }
.jl-cross__market {
  padding: 2px var(--space-sm); border-radius: var(--radius-pill);
  background: color-mix(in srgb, var(--c-accent-blue) 12%, transparent);
  color: var(--c-accent-blue); font-size: var(--text-caption2); font-weight: 700; white-space: nowrap;
}
.jl-cross__go { color: var(--c-text-tertiary); }
.jl__cols, .jl-row {
  display: grid;
  grid-template-columns: minmax(180px, 1fr) minmax(120px, 170px) minmax(110px, 150px) 96px 104px;
  align-items: center; gap: var(--space-md);
}
.jl__cols:not(:has(.jl__col--amt)), .jl-row:not(:has(.jl-row__amt)) {
  grid-template-columns: minmax(180px, 1fr) minmax(120px, 170px) minmax(110px, 150px) 104px;
}
.jl__cols {
  padding: 0 var(--space-md) var(--space-xs);
  font-size: 10px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
  color: var(--c-text-secondary);
}
.jl__col--when, .jl__col--ready, .jl__col--amt, .jl__col--move { text-align: right; }

.jl-row {
  width: 100%; padding: 7px var(--space-md); background: none; border: 0;
  border-bottom: 1px solid var(--c-separator); cursor: pointer; text-align: left;
}
.jl-row:hover { background: var(--c-field-fill); }
.jl-row__id { display: flex; align-items: center; gap: var(--space-sm); min-width: 0; }
.jl-row__select {
  width: 100%; padding: 0; border: 0; background: none; font: inherit;
  text-align: left; color: inherit; cursor: pointer;
}
.jl-row__select:focus-visible { outline: 2px solid var(--c-brand-primary); outline-offset: 3px; border-radius: var(--radius-sm); }
.jl-row__names { display: flex; flex-direction: column; gap: 0; min-width: 0; }
.jl-row__title {
  font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* The number, and the customer ONLY when it isn't already the headline — this line used to print
 * "Mike" under "Mike", twenty-two rows down the page. */
.jl-row__meta {
  display: block; font-size: var(--text-caption2); color: var(--c-text-tertiary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.jl-row__when {
  text-align: right; font-size: var(--text-caption); color: var(--c-text-secondary);
  font-variant-numeric: tabular-nums;
}
.jl-row__when b { color: var(--c-text-primary); font-weight: 600; }
.jl-row__when--alarm, .jl-row__when--alarm b { color: var(--c-danger); }
.jl-row__ready { text-align: right; }
.jl-row__amt {
  text-align: right; font-size: var(--text-subhead); font-weight: 600;
  color: var(--c-text-primary); font-variant-numeric: tabular-nums;
}
.jl-row__move { text-align: right; }

/* The blocking step, named. Amber is the blocker, green is clear, grey is a fact we don't have. */
.rdy {
  display: inline-block; padding: 2px 8px; border-radius: var(--radius-pill);
  font-size: var(--text-caption2); font-weight: 700; white-space: nowrap;
}
.rdy--estimate, .rdy--contract, .rdy--crew, .rdy--invoice { color: var(--c-warning); background: var(--c-warning-tint); }
.rdy--none    { color: var(--c-brand-primary); background: var(--c-brand-tint); }
.rdy--unknown { color: var(--c-text-tertiary); background: var(--c-control-fill); }

.pill {
  padding: 3px 12px; font-size: var(--text-caption); font-weight: 600;
  border-radius: var(--radius-pill); cursor: pointer; white-space: nowrap; border: 1px solid transparent;
}
.pill--solid { background: var(--c-brand-primary); color: var(--c-on-brand); }
.pill--solid:hover { background: var(--c-brand-pressed); }
.pill--ghost { background: none; color: var(--c-text-secondary); border-color: var(--c-border); }
.pill--ghost:hover { color: var(--c-text-primary); border-color: var(--c-border-strong); }
/* The alarm move. `nextMovePillLabel(_, style: .urgent)` — the third of the pill trio, drawn only
 * beside a solid Start on a row whose date has already gone. */
.pill--urgent { background: var(--c-danger-tint); color: var(--c-danger); border-color: var(--c-danger); }
.pill--urgent:hover { background: var(--c-danger); color: var(--c-on-brand); }

/* The move cell holds up to two controls (Start + Reschedule) and the row menu. */
.jl-row__move { display: flex; align-items: center; justify-content: flex-end; gap: 4px; position: relative; }
.jl-row__dash { color: var(--c-text-tertiary); font-size: var(--text-subhead); }
.jl-row__amt--none { color: var(--c-text-tertiary); font-weight: 400; }
.jl-row__resched { position: relative; display: inline-flex; }
.jl-row__menu {
  flex: 0 0 auto; width: 22px; height: 22px; padding: 0; border: 0; border-radius: var(--radius-sm);
  background: none; color: var(--c-text-tertiary); cursor: pointer; line-height: 1;
}
.jl-row:hover .jl-row__menu, .jl-row__menu:focus-visible { color: var(--c-text-primary); background: var(--c-control-fill); }

/* One person, one colour, everywhere — the palette is generated from Theme.swift. */
.mono {
  flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-md); color: var(--c-on-brand);
  font-size: 10px; font-weight: 700; letter-spacing: .3px;
}

/* ── Resource readiness rail ────────────────────────────────────────────── */
.rr {
  padding: var(--space-md); border: 1px solid var(--c-card-border);
  border-radius: var(--radius-card); background: var(--c-card-background); position: sticky; top: var(--space-md);
}
.rr__title { font-size: var(--text-title3); font-weight: 700; color: var(--c-text-primary); margin: 0; }
.rr__sub { font-size: var(--text-caption); color: var(--c-text-secondary); margin: 2px 0 0; }
.rr__card { padding: var(--space-lg) 0; }
.rr__card--ruled { border-top: 1px solid var(--c-separator); }
.rr__kicker {
  display: block; font-size: 10px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase;
  color: var(--c-text-tertiary); margin: 0 0 var(--space-sm-md);
}
.rr__pulse { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-sm); }
.rr__pulse > div { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.rr__pulse b { font-size: var(--text-subhead); font-weight: 700; color: var(--c-text-primary); font-variant-numeric: tabular-nums; }
.rr__pulse span { font-size: 8px; font-weight: 700; letter-spacing: .4px; color: var(--c-text-tertiary); }
.rr__foot { font-size: var(--text-caption2); color: var(--c-text-tertiary); margin: var(--space-sm) 0 0; }
.rr__row {
  display: flex; align-items: center; gap: var(--space-sm); width: 100%; padding: var(--space-xs-sm) 0;
  background: none; border: 0; border-bottom: 1px solid var(--c-separator); cursor: pointer; text-align: left;
}
.rr__row:last-of-type { border-bottom: 0; }
.rr__row-label {
  flex: 1; min-width: 0; font-size: var(--text-caption); font-weight: 600; color: var(--c-text-primary);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rr__row-warn { font-size: var(--text-caption2); color: var(--c-warning); white-space: nowrap; }
/* CREW TIME THIS WEEK — a reading row, not a door: the rail's other rows open a job and this one
 * has nothing to open. Same shape, no pointer, no hover. */
.rr__row--static { cursor: default; }
.rr__row--quiet .rr__row-label { font-weight: 400; color: var(--c-text-secondary); }
.rr__hours { font-size: var(--text-caption); font-weight: 700; color: var(--c-text-primary); font-variant-numeric: tabular-nums; white-space: nowrap; }
.rr__row--quiet .rr__hours { font-weight: 400; color: var(--c-text-secondary); }
.rr__hours--on { color: var(--c-brand-primary); }
.rr__total { display: flex; justify-content: space-between; align-items: baseline; font-size: var(--text-caption); color: var(--c-text-secondary); }
.rr__total b { color: var(--c-text-primary); font-variant-numeric: tabular-nums; }
.rr__line { display: flex; justify-content: space-between; gap: var(--space-sm); font-size: var(--text-caption2); color: var(--c-text-secondary); padding-top: var(--space-xs-sm); }
.rr__line span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Jobs List — the native reading lens; resources live beside the shared signal strip above. */
.jl{grid-template-columns:minmax(0,1fr);gap:var(--space-xl);align-items:start}
.jl__rail{display:none}
#hub-panel-jobs .jl{padding-right:calc(clamp(250px,28vw,350px) + var(--space-xl))}
.jl__searchrow{display:flex;align-items:center;gap:var(--space-sm)}
.jl__search{flex:1;min-width:220px}
.jl__sort{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 var(--space-md);border:1px solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-card-background);font-family:inherit;font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary);cursor:pointer;white-space:nowrap}
.jl__sort:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.jl__scopes{gap:var(--space-xs)}
.jl__scopes .chip{display:inline-flex;align-items:center;gap:var(--space-xs);background:var(--c-card-background);border-color:var(--c-card-border);border-radius:var(--radius-row)}
.jl__scopes .chip--on{background:var(--c-brand-tint);border-color:var(--c-brand-primary)}
.chip__count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 4px;border-radius:var(--radius-pill);background:var(--c-control-fill);font-size:10px;color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.chip--on .chip__count{background:var(--c-card-background);color:var(--c-brand-pressed)}
.jl__cols,.jl-row{grid-template-columns:minmax(190px,1fr) minmax(145px,180px) minmax(135px,170px) 96px 116px}
.jl__cols:not(:has(.jl__col--amt)),.jl-row:not(:has(.jl-row__amt)){grid-template-columns:minmax(190px,1fr) minmax(145px,180px) minmax(135px,170px) 116px}
.jl-row{min-height:62px;border-left:3px solid transparent;transition:background var(--motion-fast),border-color var(--motion-fast)}
.jl-row--selected{background:linear-gradient(90deg,var(--c-brand-tint),var(--c-card-background));border-left-color:var(--c-brand-primary)}
.jl-row__when,.jl-row__ready{text-align:left}
.jl__col--when,.jl__col--ready{text-align:left}

.jbref{position:sticky;top:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);overflow:hidden}
.jbref--empty{display:flex;flex-direction:column;align-items:center;text-align:center;padding:56px var(--space-lg);color:var(--c-text-secondary)}
.jbref--empty strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.jbref--empty span{font-size:var(--text-caption);margin-top:var(--space-xs)}
.jbref__head{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-lg)}
.jbref__head .mono{width:44px;height:44px;border-radius:50%;font-size:var(--text-caption)}
.jbref__head>span:last-child{min-width:0}
.jbref__head h2{font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jbref__head p{font-size:var(--text-caption2);color:var(--c-text-secondary);margin:2px 0 0}
.jbref__move{margin:0 var(--space-md);padding:var(--space-md);border:1px solid var(--c-warning);border-radius:var(--radius-row);background:var(--c-warning-tint)}
.jbref__kicker{display:block;font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--c-text-tertiary);margin:0 0 var(--space-sm)}
.jbref__move>.jbref__kicker{color:var(--c-warning)}
.jbref__move h3{font-size:var(--text-subhead);font-weight:700;line-height:1.25;color:var(--c-text-primary);margin:0}
.jbref__move p{font-size:var(--text-caption);line-height:1.35;color:var(--c-text-secondary);margin:var(--space-xs) 0 var(--space-md)}
.jbref__move .btn{width:100%;margin-top:var(--space-xs)}
.jbref__section{margin:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--c-separator)}
.jbref-check{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs-sm) 0;border-bottom:1px solid var(--c-separator);font-size:var(--text-caption);color:var(--c-text-secondary)}
.jbref-check:last-child{border-bottom:0}
.jbref-check>span{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex:0 0 18px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:700}
.jbref-check--ok{color:var(--c-brand-primary)}
.jbref-check--open{color:var(--c-danger)}
.jbref-check--neutral{color:var(--c-text-tertiary)}
.jbref__site{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary)}
.jbref__section>a{display:inline-block;font-size:var(--text-caption2);color:var(--c-brand-primary);margin-top:var(--space-xs);text-decoration:underline}
.jbref-money{display:flex;justify-content:space-between;gap:var(--space-md);padding:3px 0;font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.jbref-money strong{color:var(--c-text-primary)}
.jbref__foot{padding:var(--space-sm) var(--space-md);border-top:1px solid var(--c-separator);font-size:var(--text-caption2);color:var(--c-text-tertiary)}

@media(max-width:1180px){
  .jl{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:760px){
  .jl__searchrow{align-items:stretch;flex-wrap:wrap}
  .jl__search{flex:1 0 100%}
  .jl__cols{display:none}
  .jl-row,.jl-row:not(:has(.jl-row__amt)){grid-template-columns:minmax(0,1fr) auto;gap:var(--space-sm)}
  .jl-row__when,.jl-row__ready{grid-column:1}
  .jl-row__move{grid-column:2;grid-row:1/4}
}
@media(max-width:680px){.jh.jh--list{padding-right:0}.jh__resources{display:none}#hub-panel-jobs .jl{padding-right:0}}

/* Week planning workspace — calendar and the selected job share one decision surface. */
.jw-workspace{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:var(--space-xl);align-items:start}
.jw-workspace__main{min-width:0}
.jw-calendar{display:grid;grid-template-columns:44px minmax(0,1fr);min-height:460px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);overflow:hidden}
.jw-timeaxis{display:grid;grid-template-rows:64px repeat(10,1fr);border-right:1px solid var(--c-separator);color:var(--c-text-tertiary);font-size:9px;text-align:right}
.jw-timeaxis span{padding:7px var(--space-xs) 0 0;border-bottom:1px solid var(--c-separator)}
.jw-timeaxis__blank{background:var(--c-field-fill)}
.jw-workspace .jw__grid{display:grid;grid-template-columns:repeat(7,minmax(105px,1fr));min-width:760px}
.jw-workspace .jw-day{min-height:460px;border:0;border-right:1px solid var(--c-separator);border-radius:0;background:var(--c-card-background)}
.jw-workspace .jw-day:last-child{border-right:0}
.jw-workspace .jw-day--today{background:var(--c-brand-tint);box-shadow:inset 0 0 0 1px var(--c-brand-primary)}
.jw-workspace .jw-day__head{height:64px;padding:var(--space-sm);display:grid;grid-template-columns:1fr auto;align-content:start;border-bottom:1px solid var(--c-separator)}
.jw-workspace .jw-day__dow{font-size:9px;letter-spacing:.6px;color:var(--c-text-tertiary)}
.jw-workspace .jw-day__num{font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.jw-workspace .jw-day__free{grid-column:1/-1;font-size:10px;color:var(--c-text-secondary);margin-top:2px}
.jw-workspace .jw-day__body{position:relative;min-height:395px;padding:0;background-image:repeating-linear-gradient(to bottom,transparent 0,transparent 38px,var(--c-separator) 39px)}
.jw-workspace .jw-chip{position:relative;z-index:2;margin:5px;width:calc(100% - 10px)}
.jw-workspace .jw-day__drop{position:absolute;left:6px;right:6px;top:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-sm);border:1px dashed var(--c-input-border);border-radius:var(--radius-row);color:var(--c-text-tertiary);cursor:pointer;background:color-mix(in srgb,var(--c-card-background) 82%,transparent)}
.jw-workspace .jw-day__drop:hover{border-color:var(--c-brand-primary);color:var(--c-brand-primary);background:var(--c-brand-tint)}
.jw-day__suggested{position:absolute;z-index:3;top:38px;left:5px;right:5px;display:flex;flex-direction:column;padding:var(--space-xs-sm);border:1px dashed var(--c-brand-primary);border-radius:var(--radius-sm);background:var(--c-brand-tint);font:inherit;text-align:left;color:var(--c-brand-primary);cursor:pointer}
.jw-day__suggested b{font-size:10px}.jw-day__suggested span{font-size:9px}
.jw__legend{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-md);border:1px solid var(--c-card-border);border-top:0;background:var(--c-card-background)}
.jw__legend:before{content:'Show';font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--c-text-tertiary)}
.jw-tray{margin-top:var(--space-md)}
.jw-tray__cards{display:flex;gap:var(--space-sm);flex-wrap:wrap}
.jw-traycard{max-width:100%;min-width:420px;cursor:pointer}
.jw-traycard--selected{background:var(--c-brand-tint);box-shadow:inset 0 0 0 1px var(--c-brand-primary)}
.jw-traycard__facts{display:flex;gap:var(--space-sm);margin-top:3px;font-size:10px;color:var(--c-text-secondary)}
.jw-traycard__block{color:var(--c-warning)}
.jw-rail{min-width:0}
.jw-brief{position:sticky;top:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);overflow:hidden}
.jw-brief--empty{display:flex;flex-direction:column;gap:var(--space-xs);padding:48px var(--space-lg);text-align:center;color:var(--c-text-secondary)}
.jw-brief--empty strong{color:var(--c-text-primary)}
.jw-brief__head{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-lg)}
.jw-brief__head .mono{width:44px;height:44px;border-radius:50%;font-size:var(--text-caption)}
.jw-brief__head h2{margin:0;font-size:var(--text-subhead);color:var(--c-text-primary)}
.jw-brief__head p{margin:2px 0 0;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.jw-brief__decision{margin:0 var(--space-md);padding:var(--space-md);border:1px solid var(--c-warning);border-radius:var(--radius-row);background:var(--c-warning-tint)}
.jw-brief__decision--clear{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}
.jw-brief__kicker{display:block;margin:0 0 var(--space-sm);font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:var(--c-text-tertiary)}
.jw-brief__decision h3{margin:0;font-size:var(--text-subhead);line-height:1.25;color:var(--c-text-primary)}
.jw-brief__decision p{margin:var(--space-xs) 0 var(--space-md);font-size:var(--text-caption);line-height:1.4;color:var(--c-text-secondary)}
.jw-brief__decision .btn{width:100%;margin-top:var(--space-xs)}
.jw-brief__section{margin:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--c-separator)}
.jw-ready{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs-sm) 0;border-bottom:1px solid var(--c-separator);font-size:var(--text-caption);color:var(--c-text-secondary)}
.jw-ready:last-child{border-bottom:0}
.jw-ready>span{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:700}
.jw-ready--ok{color:var(--c-brand-primary)}.jw-ready--warn{color:var(--c-warning)}.jw-ready--open{color:var(--c-danger)}
.jw-brief__slot{display:flex;flex-direction:column;gap:2px;padding:var(--space-md);border:1px solid var(--c-brand-primary);border-radius:var(--radius-row);background:var(--c-brand-tint)}
.jw-brief__slot b{font-size:var(--text-subhead);color:var(--c-text-primary)}.jw-brief__slot span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.jw-brief__section>.btn{width:100%;margin-top:var(--space-sm)}
.jw-brief__section>.btn:disabled{opacity:.55;cursor:not-allowed}
@media(max-width:1280px){.jw-workspace{grid-template-columns:minmax(0,1fr)}.jw-rail{grid-row:1}.jw-brief{position:static}.jw-calendar{overflow-x:auto}}
/* ── Week lens ──────────────────────────────────────────────────────────── */
.jw__nav, .jm .jw__nav {
  display: flex; align-items: center; gap: var(--space-sm); flex-wrap: wrap;
  padding-bottom: var(--space-md);
}
.jw__label { font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary); }
.jw__util { font-size: var(--text-caption); color: var(--c-text-secondary); margin-left: auto; }
.jw__util b { color: var(--c-text-primary); font-variant-numeric: tabular-nums; }
/* Idle days are the cost this lens exists to show, so they are never neutral once there are any. */
.jw__idle { color: var(--c-warning); font-weight: 700; }
.jw__warn { color: var(--c-warning); }
.jw__lanes { display: flex; gap: 4px; }
.lanechip {
  /* Set inline per lane from `data/lanes.js`, the ONE lane source. The fallback is declared so the
   * token is never undefined — an unset var() drops the whole declaration silently. */
  --lane: var(--c-accent-gray);
  min-height: 24px; padding: 2px 9px; font-size: var(--text-caption2); font-weight: 600; cursor: pointer;
  border-radius: var(--radius-pill); border: 1px solid var(--c-border);
  background: none; color: var(--c-text-tertiary);
}
.lanechip--on { color: var(--lane); border-color: var(--lane); background: color-mix(in srgb, var(--lane) 10%, transparent); }

.jw__grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.jw-day {
  display: flex; flex-direction: column; min-height: 190px;
  border: 1px solid var(--c-card-border); border-radius: var(--radius-card); background: var(--c-card-background);
}
.jw-day--today { border-color: var(--c-brand-primary); background: var(--c-brand-tint); }
.jw-day--past { background: var(--c-background-secondary); }
.jw-day--over { border-color: var(--c-brand-primary); background: var(--c-brand-tint); }
.jw-day__head { display: flex; align-items: baseline; gap: 6px; padding: var(--space-sm) var(--space-sm) var(--space-xs); }
.jw-day__dow { font-size: 9px; font-weight: 700; letter-spacing: .5px; color: var(--c-text-tertiary); }
.jw-day__num { font-size: var(--text-subhead); font-weight: 700; color: var(--c-text-primary); }
.jw-day__free { margin-left: auto; font-size: 9px; color: var(--c-text-tertiary); font-variant-numeric: tabular-nums; }
.jw-day__body { flex: 1; display: flex; flex-direction: column; gap: 4px; padding: 0 6px 6px; }
.jw-day__missed {
  padding: 5px 6px; border-radius: var(--radius-row);
  background: color-mix(in srgb, var(--c-danger) 10%, transparent);
  color: var(--c-danger); font-size: 9px; font-weight: 700; text-align: center;
}
.jw-day__drop {
  flex: 1; min-height: 54px; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px; border: 1px dashed var(--c-border); border-radius: var(--radius-row);
  color: var(--c-text-tertiary); cursor: pointer;
}
.jw-day__drop:hover { border-color: var(--c-brand-primary); color: var(--c-brand-primary); }
.jw-day__plus { font-size: var(--text-callout); }
.jw-day__droplabel { font-size: 9px; }
/* A 7-COLUMN GRID DOES NOT FIT A PHONE, and scrolling it sideways is not the same as reading it.
   The app stops drawing a grid at compact width and stacks the week as a day agenda, each day a
   section headed by its own date (JobScheduleView+Calendar.swift:109-112). Same markup, same chips
   — what changes is that the columns become rows and each one says which day it is. */
@media(max-width:760px){
  .jw-calendar{grid-template-columns:minmax(0,1fr);min-height:0;overflow:visible}
  .jw-timeaxis{display:none}
  /* MATCHING `.jw-workspace .jw__grid`, which is where the 7 columns and the 760px floor actually
     live. A single-class rule loses to it at any width — a media query buys no specificity. */
  .jw-workspace .jw__grid{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0}
  .jw-workspace .jw-day{min-height:0;border:0;border-bottom:1px solid var(--c-separator);border-radius:0}
  .jw-workspace .jw-day:last-child{border-bottom:0}
  .jw-day__dow, .jw-day__num, .jw-day__free{display:none}
  .jw-day__agendadate{
    display:inline-flex;align-items:center;gap:var(--space-xs);
    font-size:var(--text-caption);font-weight:700;letter-spacing:.02em;
    color:var(--c-text-secondary);text-transform:none;
  }
  .jw-day--today .jw-day__agendadate{color:var(--c-brand-primary)}
  .jw-day__todaypill{
    padding:1px 5px;border-radius:var(--radius-pill);
    background:var(--c-brand-primary);color:var(--c-background);font-size:8px;font-weight:700;
  }
  .jw-day__count{display:block;margin-left:auto;color:var(--c-text-tertiary);font-size:var(--text-caption2);
    font-variant-numeric:tabular-nums}
  .jw-day__nothing{display:block;margin:0;padding:var(--space-xs) 0;
    color:var(--c-text-tertiary);font-size:var(--text-caption2)}
  .jw-day__drop{min-height:40px}
  .jw-traycard{min-width:100%}.jw__nav{align-items:stretch}.jw__util{flex-basis:100%;margin-left:0}
}
.jw-day__foot {
  display: flex; align-items: center; gap: 5px; padding: 5px var(--space-sm);
  border-top: 1px solid var(--c-separator); font-size: 9px; color: var(--c-text-tertiary);
}
.jw-day__dot { width: 5px; height: 5px; border-radius: 50%; background: var(--c-brand-primary); }
.jw-day__foot--full { color: var(--c-warning); }
.jw-day__foot--full .jw-day__dot { background: var(--c-warning); }

.jw-chip {
  --lane: var(--c-accent-gray);
  display: flex; flex-direction: column; gap: 0; padding: 4px 6px; text-align: left; cursor: pointer;
  border: 0; border-left: 3px solid var(--lane); border-radius: var(--radius-xs-sm);
  background: color-mix(in srgb, var(--lane) 8%, transparent);
}
.jw-chip:hover { background: color-mix(in srgb, var(--lane) 16%, transparent); }
.jw-chip__tag { font-size: 8px; font-weight: 700; letter-spacing: .4px; color: var(--lane); }
.jw-chip__title { font-size: var(--text-caption2); font-weight: 600; color: var(--c-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jw-chip__time, .jw-chip__who { font-size: 9px; color: var(--c-text-tertiary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* The tray: the other end of the stall the List lens leads with. */
.jw-tray {
  margin-top: var(--space-md); padding: var(--space-md);
  border: 1px solid var(--c-card-border); border-radius: var(--radius-card); background: var(--c-card-background);
}
.jw-tray__head { display: flex; align-items: baseline; gap: var(--space-sm); margin-bottom: var(--space-sm); }
.jw-tray__kicker { font-size: 10px; font-weight: 700; letter-spacing: .5px; color: var(--c-warning); }
.jw-tray__note { font-size: var(--text-caption); color: var(--c-text-tertiary); }
.jw-tray__cards { display: flex; gap: var(--space-sm-md); overflow-x: auto; padding-bottom: 2px; }
.jw-traycard {
  display: flex; align-items: center; gap: var(--space-sm); flex-shrink: 0; cursor: grab;
  padding: 6px var(--space-sm-md) 6px 0; border: 1px solid var(--c-card-border);
  border-radius: var(--radius-row); background: var(--c-card-background-solid); overflow: hidden;
}
.jw-traycard__rule { align-self: stretch; width: 4px; background: var(--c-brand-primary); flex-shrink: 0; }
.jw-traycard--late .jw-traycard__rule { background: var(--c-danger); }
.jw-traycard__body { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.jw-traycard__top { display: flex; align-items: baseline; gap: var(--space-xs); }
.jw-traycard__top b { font-size: var(--text-caption); color: var(--c-text-primary); white-space: nowrap; }
.jw-traycard__num { font-size: 9px; color: var(--c-text-tertiary); font-variant-numeric: tabular-nums; }
.jw-traycard__why { font-size: 9px; font-weight: 700; color: var(--c-brand-primary); white-space: nowrap; }
.jw-traycard--late .jw-traycard__why { color: var(--c-danger); }
.jw-traycard__amt { font-size: var(--text-caption); font-weight: 700; color: var(--c-text-primary); font-variant-numeric: tabular-nums; }

/* ── Month lens ─────────────────────────────────────────────────────────── */
.jm-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)) 96px; gap: 4px; }
.jm-dow { font-size: 10px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; color: var(--c-text-tertiary); padding-bottom: 2px; }
.jm-dow--week { text-align: right; }
.jm-cell--over { border-color: var(--c-brand-primary); background: var(--c-brand-tint); }
/* The right-hand column is the lens's argument: which week can you still SELL. */
.jm-week {
  display: flex; flex-direction: column; gap: 1px; justify-content: center; padding: var(--space-sm);
  border: 1px solid var(--c-card-border); border-radius: var(--radius-card);
  background: var(--c-card-background); cursor: pointer; min-width: 0;
}
.jm-week:hover { border-color: var(--c-brand-primary); }
.jm-week--quiet { color: var(--c-text-tertiary); font-size: 9px; background: none; border-color: transparent; }
.jm-week--open { background: var(--c-info-tint); border-color: transparent; }
.jm-week__kicker { font-size: 10px; font-weight: 700; letter-spacing: .4px; color: var(--c-accent-teal); }
.jm-week__sub { font-size: 9px; color: var(--c-text-secondary); }
.jm-week__booked { font-size: var(--text-subhead); font-weight: 600; color: var(--c-brand-primary); font-variant-numeric: tabular-nums; }
.jm-week__slipped { font-size: 9px; font-weight: 700; color: var(--c-danger); }
.jm__open { color: var(--c-accent-teal); font-weight: 600; }

/* Month command center: calendar and scheduling context share one above-the-fold workspace. */
.jm { min-width: 0; }
.jm__toolbar { display: flex; align-items: center; gap: var(--space-sm-md); margin-bottom: var(--space-xs); }
.jm__nav { flex: 0 0 auto; padding-bottom: 0; }
.jm__filters { display: flex; align-items: center; gap: 5px; }
.jm-filter {
  border: 1px solid var(--c-card-border); border-radius: 999px; padding: 5px 11px;
  background: var(--c-card-background); color: var(--c-text-secondary); cursor: pointer;
  font: inherit; font-size: var(--text-caption2); font-weight: 600;
}
.jm-filter:hover, .jm-filter--active { border-color: var(--c-brand-primary); color: var(--c-brand-primary); }
.jm-filter--active { background: var(--c-brand-tint); }
.jm__legend { display: flex; align-items: center; gap: var(--space-sm); margin-left: auto; white-space: nowrap; }
.jm__legend span { display: inline-flex; align-items: center; gap: 4px; font-size: 9px; color: var(--c-text-tertiary); }
.jm-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c-brand-tint); }
.jm-dot--some { background: color-mix(in srgb, var(--c-warning) 48%, var(--c-surface)); }
.jm-dot--busy { background: color-mix(in srgb, var(--c-danger) 48%, var(--c-surface)); }
.jm__insight { min-height: 20px; margin-bottom: var(--space-xs); text-align: right; font-size: var(--text-caption2); color: var(--c-text-secondary); }
.jm-workspace { display: grid; grid-template-columns: minmax(0, 1fr) 252px; gap: var(--space-md); align-items: start; }
.jm-workspace__main { min-width: 0; }
.jm-grid { grid-template-columns: repeat(7, minmax(0, 1fr)) 86px; gap: 4px; }
.jm-cell {
  min-height: 88px; padding: 6px; gap: 4px; border-radius: var(--radius-row);
  cursor: default; transition: border-color 120ms ease, background 120ms ease;
}
.jm-cell:hover { border-color: var(--c-brand-primary); }
.jm-cell--selected { box-shadow: inset 0 0 0 1px var(--c-brand-primary); }
.jm-cell--today { border-width: 2px; }
.jm-cell--some { background: color-mix(in srgb, var(--c-warning) 4%, var(--c-surface)); }
.jm-cell--full { background: color-mix(in srgb, var(--c-danger) 6%, var(--c-surface)); }
.jm-cell__capacity { font-size: 8px; color: var(--c-text-tertiary); white-space: nowrap; }
.jm-chip {
  width: 100%; padding: 3px 5px; border: 0; border-left: 3px solid var(--lane);
  background: color-mix(in srgb, var(--lane) 7%, var(--c-surface)); text-align: left; cursor: pointer;
}
.jm-chip:hover { background: color-mix(in srgb, var(--lane) 14%, var(--c-surface)); }
.jm-chip span, .jm-chip b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jm-chip span { font-size: 8px; color: var(--c-text-tertiary); }
.jm-chip b { font-size: 9px; color: var(--c-text-primary); }
.jm-week { min-height: 88px; width: 100%; text-align: left; font: inherit; }
.jm-week__kicker { font-size: 9px; }
.jm-rail { display: flex; flex-direction: column; gap: var(--space-sm-md); }
.jm-card { padding: var(--space-md); border: 1px solid var(--c-card-border); border-radius: var(--radius-card); background: var(--c-card-background); }
.jm-card__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-sm); }
.jm-card__head b { font-size: var(--text-caption); color: var(--c-text-primary); }
.jm-count { display: inline-flex; min-width: 19px; height: 19px; align-items: center; justify-content: center; border-radius: 999px; background: var(--c-field-fill); font-size: 10px; color: var(--c-text-secondary); }
.jm-waiting { display: flex; align-items: center; gap: var(--space-sm); cursor: grab; }
.jm-waiting__body { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.jm-waiting__body b { font-size: var(--text-caption); color: var(--c-text-primary); }
.jm-waiting__body span { font-size: 9px; color: var(--c-text-tertiary); }
.jm-waiting__body small { font-size: 9px; font-weight: 700; color: var(--c-brand-primary); }
.jm-card__action { width: 100%; margin-top: var(--space-sm); justify-content: center; }
.jm-card__more, .jm-capacity p { margin: var(--space-xs) 0 0; font-size: 9px; color: var(--c-text-tertiary); }
.jm-card__empty { display: flex; flex-direction: column; gap: 2px; }
.jm-card__empty b { font-size: var(--text-caption); color: var(--c-text-primary); }
.jm-card__empty span { font-size: var(--text-caption2); color: var(--c-text-tertiary); }
.jm-selected__date { display: block; font-size: var(--text-subhead); color: var(--c-text-primary); }
.jm-capacity-pill { display: inline-flex; margin-top: var(--space-xs); padding: 3px 8px; border-radius: 999px; background: var(--c-brand-tint); color: var(--c-brand-primary); font-size: 9px; font-weight: 700; }
.jm-selected__work { display: flex; flex-direction: column; align-items: center; gap: 2px; margin-top: var(--space-sm); text-align: center; }
.jm-selected__work > b { font-size: var(--text-caption); color: var(--c-text-primary); }
.jm-selected__work > small { font-size: 9px; color: var(--c-text-tertiary); }
.jm-selected__icon { display: inline-flex; width: 28px; height: 28px; align-items: center; justify-content: center; border-radius: 50%; background: var(--c-brand-tint); color: var(--c-brand-primary); }
.jm-selected__row { display: flex; width: 100%; align-items: center; justify-content: space-between; padding: 7px 0; border: 0; border-bottom: 1px solid var(--c-separator); background: none; text-align: left; cursor: pointer; color: var(--c-text-secondary); }
.jm-selected__row span:first-child { display: flex; flex-direction: column; min-width: 0; }
.jm-selected__row b { font-size: var(--text-caption2); color: var(--c-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jm-selected__row small { font-size: 9px; color: var(--c-text-tertiary); }
.jm-capacity__facts { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-sm); }
.jm-capacity__facts span { display: flex; flex-direction: column; }
.jm-capacity__facts b { font-size: var(--text-title3); color: var(--c-text-primary); font-variant-numeric: tabular-nums; }
.jm-capacity__facts small { font-size: 9px; color: var(--c-text-tertiary); }
.jm-capacity__track { height: 7px; margin-top: var(--space-sm); border-radius: 999px; background: var(--c-field-fill); overflow: hidden; }
.jm-capacity__track i { display: block; height: 100%; min-width: 3px; border-radius: inherit; background: var(--c-brand-primary); }
@media (max-width: 1180px) {
  .jm__legend { display: none; }
  .jm-workspace { grid-template-columns: minmax(0, 1fr); }
  .jm-rail { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .jm__toolbar { align-items: flex-start; flex-direction: column; }
  .jm__filters { overflow-x: auto; max-width: 100%; }
  .jm-grid { min-width: 840px; }
  .jm-workspace__main { overflow-x: auto; }
  .jm-rail { grid-template-columns: 1fr; }
}

/* ── Map lens ───────────────────────────────────────────────────────────── */
.jmap__bar { display: flex; align-items: center; gap: var(--space-md); flex-wrap: wrap; padding-bottom: var(--space-sm); }
.jmap__legend { display: flex; gap: var(--space-md); margin-left: auto; }
.jmap__leg { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-caption2); color: var(--c-text-secondary); }
.jmap__leg i { width: 7px; height: 7px; border-radius: 50%; }
/* The entry is hidden until a visit is actually pinned, and `display: inline-flex` above beats the
   user agent's `[hidden] { display: none }` — the exact class of bug that painted a loading spinner
   and an error panel over every settings page. */
.jmap__leg[hidden] { display: none; }
.jmap__leg--visits { color: var(--c-text-tertiary); }
/* The visits key is a PIN, not a dot — jobs are number/state dots and visits are icon markers, so
   a fifth circle would say they are a fifth job state. */
.jmap__legpin {
  width: 9px; height: 9px; border-radius: 50% 50% 50% 0; transform: rotate(-45deg);
  background: currentColor;
}
/* ── The visit layer ────────────────────────────────────────────────────────
   A rounded SQUARE where a job pin is a circle, wearing the role's mark instead of a date, with the
   customer's name under it. Shape, mark and name are the three things that let the two layers read
   apart at a glance without a tap. */
/* Both layers stack the same way: the mark, then the name under it. */
.jmap-jobpin,
.jmap-visitpin { display: flex; flex-direction: column; align-items: center; gap: 2px; cursor: pointer; }
.jmap-visitpin__icon {
  width: 24px; height: 24px; border-radius: 7px; display: grid; place-items: center;
  color: #fff; padding: 4px; box-shadow: 0 1px 2px rgb(0 0 0 / .25); /* raw-color-ok */
}
/* One capsule, two borders — the app strokes the job's in the card border and the visit's in its
   lane colour, and that is the only difference between them. */
.jmap-jobpin__label,
.jmap-visitpin__who {
  max-width: 152px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 9px; font-weight: 700; line-height: 1.5; padding: 1px 5px; border-radius: 999px;
  background: var(--c-card-background); color: var(--c-text-primary);
  border: 1px solid var(--c-card-border);
}
.jmap-visitpin__who { border-color: color-mix(in srgb, currentColor 50%, transparent); }
.jmap__pop--visit { display: grid; gap: 2px; }
.jmap__poplane { display: inline-flex; align-items: center; gap: 4px; font-size: 9px; font-weight: 800; letter-spacing: .4px; }
.jmap__poplaneicon { width: 10px; height: 10px; display: inline-block; }
.jmap__popwho { color: var(--c-text-tertiary); }
/* The callout's verb row — the row's own next move, then Open, as the app orders them. */
.jmap__popmoves { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-xs); margin-top: 4px; }
.jmap__popmoves .pill { text-decoration: none; }
.jmap__popdash { color: var(--c-text-tertiary); }
/* A grouped callout lists every job at the spot, each with its own verbs. */
.jmap__pop--group { max-height: 220px; overflow-y: auto; }
.jmap__poprow + .jmap__poprow { margin-top: 6px; padding-top: 6px; border-top: 1px solid var(--c-card-border); }
.jmap__poprowname { display: block; font-weight: 700; margin-top: 4px; }
.jmap__popopen {
  justify-self: start; margin-top: 4px; padding: 3px 12px; border-radius: 999px;
  color: #fff; font-weight: 700; text-decoration: none; /* raw-color-ok */
}
.jmap__body { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: var(--space-md); }
@media (max-width: 1100px) { .jmap__body { grid-template-columns: minmax(0, 1fr); } }
.jmap__run {
  padding: var(--space-md); border: 1px solid var(--c-card-border);
  border-radius: var(--radius-card); background: var(--c-card-background); align-self: start;
}
.jmap__runhead { display: flex; align-items: center; gap: var(--space-sm); }
.jmap__runkicker { font-size: 10px; font-weight: 700; letter-spacing: .5px; color: var(--c-text-tertiary); }
.jmap__runkicker--warn { color: var(--c-danger); }
.jmap__miles { font-size: var(--text-caption2); color: var(--c-text-tertiary); margin: var(--space-xs) 0 0; }
/* The run's two doors: open the whole route, or hand it to the crew. Stacked full-width, as the
 * capsule pair is in the rail. */
.jmap__runverbs { display: flex; flex-direction: column; gap: var(--space-xs-sm); margin-top: var(--space-sm-md); }
.jmap__runverbs .btn { width: 100%; justify-content: center; }
.jmap__none { font-size: var(--text-caption); color: var(--c-text-secondary); margin: var(--space-sm) 0 0; }
.jmap__stops { list-style: none; margin: var(--space-sm) 0 0; padding: 0; }
.jmap__stop {
  display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-xs-sm) 0;
  border-bottom: 1px solid var(--c-separator); cursor: pointer;
}
.jmap__stop:last-child { border-bottom: 0; }
.jmap__stopn {
  flex-shrink: 0; width: 18px; height: 18px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--c-brand-tint); color: var(--c-brand-primary);
  font-size: 9px; font-weight: 700; font-variant-numeric: tabular-nums;
}
.jmap__stop--late .jmap__stopn { background: var(--c-danger-tint); color: var(--c-danger); }
.jmap__stopbody { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0; }
.jmap__stoptitle { font-size: var(--text-caption); font-weight: 600; color: var(--c-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jmap__stopsub { font-size: 9px; color: var(--c-text-tertiary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jmap__stop--late .jmap__stopsub { color: var(--c-danger); }
.jmap__stoptag { font-size: 8px; font-weight: 700; letter-spacing: .4px; color: var(--c-text-tertiary); }
.jmap__squeeze { margin-top: var(--space-md); padding-top: var(--space-md); border-top: 1px solid var(--c-separator); }
.jmap__canvas { position: relative; min-height: 520px; border-radius: var(--radius-card); overflow: hidden; border: 1px solid var(--c-card-border); }
/* An empty map is a claim too — it says WHICH kind of empty it is. */
.jmap__note {
  position: absolute; inset: 50% auto auto 50%; transform: translate(-50%, -50%);
  padding: var(--space-sm) var(--space-md); border-radius: var(--radius-row);
  background: var(--c-card-background-solid); border: 1px solid var(--c-card-border);
  font-size: var(--text-caption); color: var(--c-text-secondary); text-align: center; max-width: 280px;
}
.jmap__note--corner { inset: auto auto var(--space-md) var(--space-md); transform: none; font-size: var(--text-caption2); }
.jmap__pop a { color: var(--c-brand-primary); font-weight: 600; }

/* Map command center: the selected scope owns both the list and the pins. */
.jmap__summary { margin-left: auto; font-size: var(--text-caption2); color: var(--c-text-secondary); }
.jmap__summary b { color: var(--c-text-primary); font-variant-numeric: tabular-nums; }
.jmap__legend { margin-left: 0; }
.jmap__body { grid-template-columns: 340px minmax(0, 1fr); }
.jmap__run { padding: 0; max-height: 590px; overflow-y: auto; }
.jmap-panel__head { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); padding: var(--space-md); border-bottom: 1px solid var(--c-separator); background: var(--c-card-background-solid); }
.jmap-panel__head > span { display: flex; flex-direction: column; }
.jmap-panel__head small { font-size: 9px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; color: var(--c-text-tertiary); }
.jmap-panel__head b { font-size: var(--text-subhead); color: var(--c-text-primary); }
.jmap-section { padding: var(--space-md); border-bottom: 1px solid var(--c-separator); }
.jmap-section__head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); }
.jmap-section__head b { font-size: var(--text-caption); color: var(--c-text-primary); }
.jmap-section__head span { font-size: 9px; color: var(--c-text-tertiary); }
.jmap-section--warn { background: color-mix(in srgb, var(--c-danger) 3%, var(--c-surface)); }
.jmap-section--address { background: color-mix(in srgb, var(--c-warning) 4%, var(--c-surface)); }
.jmap-section--address > p { margin: 3px 0 var(--space-xs); font-size: 9px; color: var(--c-text-tertiary); }
.jmap__stops { display: flex; flex-direction: column; margin-top: var(--space-xs); }
.jmap__stop { width: 100%; border: 0; border-bottom: 1px solid var(--c-separator); background: none; text-align: left; font: inherit; }
.jmap__stop:hover { background: var(--c-field-fill); }
.jmap-sites { display: flex; flex-direction: column; margin-top: var(--space-xs); }
.jmap-site { display: flex; width: 100%; align-items: center; gap: var(--space-sm); padding: 8px 4px; border: 0; border-bottom: 1px solid var(--c-separator); background: none; text-align: left; cursor: pointer; font: inherit; }
.jmap-site:hover, .jmap-site--selected { background: var(--c-brand-tint); }
.jmap-site > i { flex: 0 0 8px; width: 8px; height: 8px; border-radius: 50%; }
.jmap-site > span { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.jmap-site b { overflow: hidden; color: var(--c-text-primary); font-size: var(--text-caption); text-overflow: ellipsis; white-space: nowrap; }
.jmap-site small { color: var(--c-text-tertiary); font-size: 9px; }
.jmap-site em { color: var(--c-text-tertiary); font-size: 9px; font-style: normal; }
.jmap-address { display: flex; align-items: center; gap: var(--space-sm); padding: 6px 0; }
.jmap-address > span { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.jmap-address b { overflow: hidden; color: var(--c-text-primary); font-size: var(--text-caption2); text-overflow: ellipsis; white-space: nowrap; }
.jmap-address small { color: var(--c-text-tertiary); font-size: 9px; }
.jmap-detail { display: flex; flex-direction: column; gap: 3px; padding: var(--space-md); }
.jmap-detail__status { display: inline-flex; align-items: center; gap: 5px; color: var(--c-text-tertiary); font-size: 9px; text-transform: capitalize; }
.jmap-detail__status i { width: 7px; height: 7px; border-radius: 50%; }
.jmap-detail > b { color: var(--c-text-primary); font-size: var(--text-caption); }
.jmap-detail > span:not(.jmap-detail__status) { overflow: hidden; color: var(--c-text-tertiary); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.jmap-detail .btn { margin-top: var(--space-xs); justify-content: center; }
.jmap__canvas { min-height: 590px; }
@media (max-width: 1100px) {
  .jmap__summary { order: 3; width: 100%; margin-left: 0; }
  .jmap__body { grid-template-columns: minmax(0, 1fr); }
  .jmap__run { max-height: none; }
}

/* ── Board lens ─────────────────────────────────────────────────────────── */
.jb-head {
  display: flex; align-items: baseline; gap: var(--space-md); flex-wrap: wrap;
  padding: var(--space-sm-md) var(--space-md); margin-bottom: var(--space-md);
  border: 1px solid var(--c-card-border); border-radius: var(--radius-card); background: var(--c-card-background);
}
.jb-head__lead { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.jb-head__title { font-size: var(--text-subhead); font-weight: 600; color: var(--c-text-primary); }
.jb-head__sub { font-size: var(--text-caption2); color: var(--c-text-tertiary); }
.jb-head__facts { font-size: var(--text-caption); color: var(--c-text-secondary); font-variant-numeric: tabular-nums; }
.jb-head__facts b { color: var(--c-text-primary); }
.jb-head__owed { color: var(--c-brand-primary) !important; }
.jb-card__id { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.jb-card__num { font-size: 9px; color: var(--c-text-tertiary); font-variant-numeric: tabular-nums; flex-shrink: 0; }
/* The card's own next move. Without it the board was a place to look at work, not to move it. */
.jb-card__move {
  margin-top: 6px; padding-top: 5px; border-top: 1px solid var(--c-separator);
  font-size: var(--text-caption2); font-weight: 600; color: var(--c-brand-primary);
}
/* The job hub wears the SHARED hub chrome (`.ch*`) — same hero, same grid, same rail as the
   customer and lead hubs, because three records that read as three products is how a CRM stops
   feeling like one. What stays local to Jobs is the stage chip and the note. */
.jb-stage-chip {
  padding: 1px 7px; border-radius: var(--radius-pill);
  font-size: var(--text-caption2); font-weight: 700;
  background: var(--c-control-fill); color: var(--c-text-secondary);
}
/* Two stages get a colour, and only two: the one where money is waiting on a signature, and the
   one where a crew is on site. Colouring all nine would make the chip decorative. */
.jb-stage-chip--approved   { background: var(--c-accent-tint); color: var(--c-brand-primary); }
.jb-stage-chip--inProgress { background: var(--c-accent-tint); color: var(--c-brand-primary); }
.jb-stage-chip--cancelled  { background: var(--c-danger-tint); color: var(--c-danger); }

/* A rail card's verb, under its facts — full width, so it reads as this card's action and not as a
   stray button floating beside the last fact. */
.ch-card__verb { display: block; width: calc(100% - var(--space-md) * 2); margin: var(--space-sm) var(--space-md); text-align: center; }
/* The irreversible one in a card of endings. Cancelling keeps the record; this does not, so it
   reads differently rather than sitting fourth in a row of identical ghost buttons. */
.ch-card__verb--danger { color: var(--c-danger); }

/* The irreversible one on a change-order card. Void sits next to it and is the safer answer, so
   this reads as the exception rather than as one more equal option. */
.co-act--drop{color:var(--c-danger)}

/* ── The permit inspection trail ────────────────────────────────────────────
   A history, so it reads as rows of what happened rather than as a field. Newest first, because
   the last result is the one that decides whether somebody has to come back. */
.pm-trail{border:1px solid var(--c-card-border);border-radius:var(--radius-card);margin-bottom:var(--space-md);overflow:hidden}
.pm-trail__row{display:flex;align-items:baseline;gap:var(--space-sm);padding:8px 12px;border-bottom:1px solid var(--c-separator);flex-wrap:wrap}
.pm-trail__row:last-child{border-bottom:0}
.pm-trail__result{font-size:var(--text-caption);font-weight:700}
.pm-trail__result--passed{color:var(--c-brand-primary)}
.pm-trail__result--failed{color:var(--c-danger)}
.pm-trail__result--partial{color:var(--c-warning)}
.pm-trail__when{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pm-trail__note{flex:1 0 100%;font-size:var(--text-caption);color:var(--c-text-secondary)}

/* ── The permit register ────────────────────────────────────────────────────
   `PermitListView`'s own furniture: four counted status chips, the NEEDS ATTENTION and BY TYPE
   cards that stand only over the unfiltered list, and the compact row the app draws instead of a
   table on a narrow shell — which is the only place its inspection result is shown. */
/* `.filter-bar` sets display:flex, which outranks the UA's [hidden] rule — so the strip has to be
   told to disappear by the same specificity that made it appear. */
#pm-filter[hidden]{display:none}
.pm-chips{display:flex;align-items:center;gap:var(--space-xs);max-width:100%;overflow-x:auto;scrollbar-width:none}
.pm-chips::-webkit-scrollbar{display:none}
.pm-chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:34px;padding:0 var(--space-md);border:1px solid transparent;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font:600 var(--text-caption)/1 var(--font-family);white-space:nowrap;cursor:pointer}
.pm-chip span{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;opacity:.7}
.pm-chip--active{border-color:color-mix(in srgb,var(--c-brand-primary) 22%,transparent);background:var(--c-brand-tint);color:var(--c-brand-pressed)}

.pm-panel{margin-bottom:var(--space-md);padding:var(--space-lg)}
.pm-panel--warn{border-color:color-mix(in srgb,var(--c-warning) 20%,transparent)}
.pm-panel__head{display:flex;align-items:center;gap:var(--space-xs);margin-bottom:var(--space-sm-md)}
.pm-panel__title{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-secondary)}
.pm-panel__count{margin-left:auto;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.pm-panel__row{padding:var(--space-sm) 0;border-top:1px solid var(--c-separator)}
.pm-panel__row:first-of-type{border-top:0}
.pm-panel__row--split{display:flex;align-items:center;justify-content:space-between;font-size:var(--text-caption)}
.pm-panel__num{font-variant-numeric:tabular-nums;font-weight:700}
.pm-panel__line{display:flex;align-items:baseline;gap:var(--space-sm)}
.pm-panel__name{font-size:var(--text-caption);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pm-panel__when{margin-left:auto;font-size:var(--text-caption2);white-space:nowrap}
.pm-panel__coach{margin-top:2px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* The app's no-results face is a glyph and a line, with no verb: a filter that matched nothing is
   not an empty business, and offering "Add Permit" there answers the wrong question. */
.pm-noresults{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm-md);padding:30px var(--space-lg);color:var(--c-text-tertiary);font-size:var(--text-subhead)}
.pm-noresults span{color:var(--c-text-secondary)}
/* The empty state's description carries an AUTHORED line break, not a wrap. */
.pm-empty .empty-state__sub{white-space:pre-line}

.pm-expiry{font-variant-numeric:tabular-nums}
.pm-insp{font-size:var(--text-caption2);font-weight:700}
.pm-compact{display:none}
.pm-crow{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-separator);cursor:pointer}
.pm-crow:last-child{border-bottom:0}
.pm-crow__body{display:flex;min-width:0;flex-direction:column;gap:2px}
.pm-crow__title{display:flex;align-items:center;gap:var(--space-xs);overflow:hidden;font-size:var(--text-subhead);font-weight:600;white-space:nowrap}
.pm-crow__sub{overflow:hidden;text-overflow:ellipsis;color:var(--c-text-secondary);font-size:var(--text-caption);white-space:nowrap}
.pm-crow__end{display:flex;min-width:0;margin-left:auto;flex-direction:column;align-items:flex-end;gap:2px;font-size:var(--text-caption)}
@media (max-width:700px){
  .pm-table{display:none}
  .pm-compact{display:block}
}

/* The row menu opens at the pointer, so it is placed rather than anchored to a parent. */
.pm-ctx,.pl-ctx,.cl-ctx{position:fixed;right:auto;top:auto;box-shadow:0 10px 28px rgb(0 0 0 / 16%)}

/* ── The punch register ─────────────────────────────────────────────────────
   `PunchListView`'s own furniture on top of the shared register grammar above: the completion bar
   under the three stat cards, the trade colour that makes a punch list scannable by who has to come
   back, and the compact row the app draws instead of a seven-column table on a narrow shell. */
#pl-filter[hidden]{display:none}

/* TWO texts and a rail. The percentage is a separate, right-aligned numeral — the figure somebody
   reads out on a call — and a bar without it loses the only exact number on the card. */
.pl-progress{margin:0 var(--space-xs) var(--space-md)}
.pl-progress__line{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);font-size:var(--text-caption2);color:var(--c-text-secondary)}
.pl-progress__pct{color:var(--c-brand-primary);font-variant-numeric:tabular-nums;font-weight:600}
.pl-progress__rail{overflow:hidden;height:4px;margin-top:var(--space-xs);border-radius:2px;background:var(--c-field-fill)}
.pl-progress__fill{height:100%;border-radius:2px;background:var(--c-brand-primary)}

/* The tertiary arms — "No location", "No due date", the job column's em dash, and the ASSIGNED
   column's own quieter "Unassigned". Deliberately NOT the warning colour the JOB column's
   "Unassigned" wears: same word, different column, different severity. */
.pl-quiet{color:var(--c-text-tertiary)}
.pl-prio{font-weight:700}
.pl-trade{display:inline-flex;align-items:center;gap:var(--space-xs)}
.pl-trade i{width:8px;height:8px;border-radius:50%}
.pl-trade-dot{display:inline-block;width:6px;height:6px;margin-right:var(--space-xs);border-radius:50%;vertical-align:middle}

.pl-req{color:var(--c-danger)}
.pl-toggle{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm);font-size:var(--text-subhead)}
.pl-toggle input{width:16px;height:16px;accent-color:var(--c-brand-primary)}

.pl-compact{display:none}
.pl-crow{position:relative;display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-separator);cursor:pointer}
.pl-crow:last-child{border-bottom:0}
.pl-crow__accent{position:absolute;left:0;top:8px;bottom:8px;width:3px;border-radius:0 2px 2px 0}
.pl-crow__body{display:flex;min-width:0;flex-direction:column;gap:2px}
.pl-crow__title{display:flex;align-items:center;gap:var(--space-xs);overflow:hidden;font-size:var(--text-subhead);font-weight:600;white-space:nowrap}
.pl-crow__sub{display:flex;gap:var(--space-sm);overflow:hidden;color:var(--c-text-secondary);font-size:var(--text-caption);white-space:nowrap}
.pl-crow__end{display:flex;min-width:0;margin-left:auto;flex-direction:column;align-items:flex-end;gap:2px;font-size:var(--text-caption)}
@media (max-width:820px){
  .pl-table{display:none}
  .pl-compact{display:block}
}

/* ── The checklist register ─────────────────────────────────────────────────
   `ChecklistTemplateListView` draws TWO row types with different vocabularies — a template's stage
   pill, step count and Default/Custom source, and a job checklist's count, percent and status pill
   — plus `JobChecklistDetailSheet`, where a ticked item is a signed record rather than a tick. */
.cl-stage{display:inline-block;padding:2px var(--space-xsSm,6px);border-radius:var(--radius-pill);background:var(--c-accent-indigo);color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:600;white-space:nowrap}
.cl-count{font-variant-numeric:tabular-nums;font-weight:700}
.cl-pct{margin-left:var(--space-xs);font-size:var(--text-caption2);font-variant-numeric:tabular-nums;font-weight:700}
.cl-quiet{color:var(--c-text-tertiary)}
/* Default wears the warning tint in the app — it is the flag that says this recipe fires by itself. */
.cl-default{color:var(--c-warning);font-size:var(--text-caption2);font-weight:700;letter-spacing:.4px}
.cl-preview{margin-top:2px;overflow:hidden;color:var(--c-text-tertiary);font-size:var(--text-caption2);text-overflow:ellipsis;white-space:nowrap}
.cl-progress{white-space:nowrap}
.cl-empty .empty-state__sub{max-width:44ch;margin-inline:auto}

.cl-toggle{display:flex;align-items:flex-start;gap:var(--space-sm);cursor:pointer}
.cl-toggle input{width:16px;height:16px;margin-top:2px;accent-color:var(--c-brand-primary)}
.cl-toggle b{display:block;font-size:var(--text-subhead);font-weight:600}
.cl-toggle small{display:block;margin-top:2px;color:var(--c-text-secondary);font-size:var(--text-caption)}

.cl-items__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-sm-md)}
.cl-item-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs-sm)}
.cl-item-row__grip{color:var(--c-text-tertiary);cursor:grab}
.cl-item-row .form-input{flex:1;min-width:0}
.cl-item-row__del{border:0;background:none;color:var(--c-danger);cursor:pointer;line-height:1}
/* The LAST row's delete is disabled rather than removed — the app keeps the control drawn and
   invisible, so the row's shape does not jump when a second step is added. */
.cl-item-row__del:disabled{color:transparent;cursor:default}

.cl-detail__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--c-separator)}
.cl-detail__name{font-size:var(--text-subhead);font-weight:600}
.cl-detail__job{margin-top:2px;color:var(--c-text-secondary);font-size:var(--text-caption)}
.cl-detail__progress{margin:var(--space-md) 0}
.cl-detail__progress-line{display:flex;align-items:baseline;justify-content:space-between;font-size:var(--text-caption);font-weight:700;color:var(--c-text-secondary)}
.cl-detail__rail{overflow:hidden;height:8px;margin-top:var(--space-xs);border-radius:var(--radius-sm);background:var(--c-card-border)}
.cl-detail__fill{height:100%}
.cl-detail__done{margin-top:var(--space-sm);color:var(--c-accent-green);font-size:var(--text-caption);font-weight:600}
.cl-detail__label{margin:var(--space-lg) 0 var(--space-sm);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px}

.cl-item{display:flex;align-items:flex-start;gap:var(--space-md);width:100%;margin-bottom:var(--space-sm);padding:var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background);text-align:left;cursor:pointer}
.cl-item--on{border-color:color-mix(in srgb,var(--c-accent-green) 30%,transparent)}
.cl-item__box{display:flex;align-items:center;justify-content:center;flex:0 0 20px;width:20px;height:20px;border:2px solid var(--c-card-border);border-radius:50%;color:var(--c-on-brand);font-size:11px;font-weight:700}
/* The other half of that flex row, and it had no rule at all. `.cl-item` is a flex container
   whose box is a fixed 20px; without `min-width:0` the text cannot shrink below its longest
   word, so a long checklist item widened the row instead of wrapping inside it. */
.cl-item__text{flex:1 1 auto;min-width:0}
.cl-item--on .cl-item__box{border-color:var(--c-accent-green);background:var(--c-accent-green)}
.cl-item__title{font-size:var(--text-subhead)}
.cl-item--on .cl-item__title{color:var(--c-text-secondary);text-decoration:line-through}
/* WHO ticked it and HOW LONG AGO. On a compliance surface the trail is the artefact. */
.cl-item__by{display:flex;gap:var(--space-sm);margin-top:2px;color:var(--c-text-tertiary);font-size:var(--text-caption)}

.cl-compact{display:none}
.cl-crow{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-separator);cursor:pointer}
.cl-crow:last-child{border-bottom:0}
.cl-crow__body{min-width:0}
.cl-crow__title{overflow:hidden;font-size:var(--text-subhead);font-weight:600;text-overflow:ellipsis;white-space:nowrap}
.cl-crow__meta{display:flex;align-items:center;gap:var(--space-sm);margin-top:2px;font-size:var(--text-caption)}
/* The ring: a conic sweep to the percentage, with the numeral in the middle of it. */
.cl-ring{position:relative;display:flex;align-items:center;justify-content:center;flex:0 0 36px;width:36px;height:36px;border-radius:50%;background:conic-gradient(var(--cl-ring) calc(var(--cl-ring-pct) * 1%),var(--c-card-border) 0)}
.cl-ring::after{position:absolute;width:28px;height:28px;border-radius:50%;background:var(--c-card-background);content:""}
.cl-ring i{position:relative;z-index:1;font-size:9px;font-style:normal;font-variant-numeric:tabular-nums;font-weight:700}
@media (max-width:820px){
  .cl-table{display:none}
  .cl-compact{display:block}
}

/* ── The payroll ledger's Catalyst furniture ────────────────────────────────
   `TimesheetListView`'s quick-add bar, its workflow coaching line and its reviewer's batch bar,
   plus `TimesheetDetailSheet` — the timesheet FILE, which the web did not have: a week's hours as
   a record rather than as an editor. */
.ts-coach{display:flex;align-items:flex-start;gap:var(--space-sm);margin-bottom:var(--space-md);padding:var(--space-md);color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.ts-batch{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-md);padding:var(--space-md);font-size:var(--text-caption);color:var(--c-text-secondary)}
.ts-batch button{color:var(--c-accent-green);font-weight:700}

.ts-qa{margin-bottom:var(--space-md);padding:var(--space-md)}
.ts-qa--shut{display:flex;align-items:center;gap:var(--space-sm);width:100%;text-align:left;cursor:pointer}
.ts-qa--shut .ts-qa__label{color:var(--c-text-secondary);font-size:var(--text-subhead)}
.ts-qa__plus{color:var(--c-brand-primary);font-size:16px;font-weight:700;line-height:1}
.ts-qa__head{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm-md);font-size:var(--text-subhead)}
.ts-qa__close{margin-left:auto;border:0;background:none;color:var(--c-text-tertiary);cursor:pointer;line-height:1}
.ts-qa__row{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.ts-qa__pill{width:auto;min-width:130px;max-width:220px}
.ts-qa__hours{display:inline-flex;align-items:center;gap:2px;padding:0 var(--space-sm-md);border:var(--border-fine) solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-input-fill)}
.ts-qa__hours input{width:56px;border:0;background:transparent;font-variant-numeric:tabular-nums;font-weight:600;text-align:right}
.ts-qa__hours b{color:var(--c-text-secondary);font-size:var(--text-caption2)}
/* The split, BEFORE the write: a foreman typing 45 is told what lands where rather than finding out
   in the pay run. */
.ts-qa__ot{margin-top:var(--space-sm);color:var(--c-text-secondary);font-size:var(--text-caption2)}

.ts-pill{padding:3px var(--space-sm);border:0;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--c-accent-green) 15%,transparent);color:var(--c-accent-green);font-size:11px;font-weight:700;cursor:pointer}
.ts-empty .empty-state__sub{white-space:pre-line}
.ts-ctx{position:fixed;right:auto;top:auto;box-shadow:0 10px 28px rgb(0 0 0 / 16%)}
.tsf-fills{display:flex;gap:var(--space-sm);margin-bottom:var(--space-sm)}

.tsd-head{padding-bottom:var(--space-md);border-bottom:1px solid var(--c-separator);text-align:center}
.tsd-head__name{font-size:var(--text-title3);font-weight:700}
.tsd-head__week{margin-top:2px;color:var(--c-text-secondary);font-size:var(--text-subhead)}
.tsd-head__pill{margin-top:var(--space-sm)}
.tsd-head__coach{margin-top:var(--space-xs);color:var(--c-text-tertiary);font-size:var(--text-caption)}
/* The rejection REASON, in the place a coaching line would sit — because on a rejected sheet the
   reviewer's own words are the coaching. */
.tsd-head__reason{margin-top:var(--space-xs);color:var(--c-danger);font-size:var(--text-caption)}

.tsd-card{margin-top:var(--space-md);padding:var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card)}
.tsd-label{color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px}
.tsd-label small{display:block;margin-top:2px;color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:400;letter-spacing:0}
.tsd-hours{display:flex;justify-content:center;gap:var(--space-xxl,32px);margin:var(--space-md) 0;text-align:center}
.tsd-hours strong,.tsd-total strong{display:block;font-size:var(--text-title2);font-variant-numeric:tabular-nums;font-weight:700}
.tsd-hours span,.tsd-total span{color:var(--c-text-secondary);font-size:var(--text-caption2)}
.tsd-total{padding-top:var(--space-md);border-top:1px solid var(--c-separator);text-align:center}
.tsd-total strong{color:var(--c-brand-primary)}
.tsd-note{margin-top:var(--space-sm);color:var(--c-text-tertiary);font-size:var(--text-caption);text-align:center}
.tsd-entry{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) 0;border-top:1px solid var(--c-separator)}
.tsd-entry:first-of-type{border-top:0}
.tsd-entry--muted{color:var(--c-text-secondary)}
.tsd-entry__day{font-size:var(--text-subhead);font-weight:600}
.tsd-entry__day em{margin-left:var(--space-xs);color:var(--c-text-tertiary);font-size:9px;font-style:normal}
.tsd-entry__job,.tsd-entry__note{margin-top:2px;color:var(--c-text-secondary);font-size:var(--text-caption)}
.tsd-entry__hours{text-align:right;font-variant-numeric:tabular-nums}
.tsd-entry__hours em{display:block;color:var(--c-warning);font-size:var(--text-caption2);font-style:normal;font-weight:600}
.tsd-none{padding:var(--space-md) 0;color:var(--c-text-secondary);font-size:var(--text-subhead);text-align:center}
.tsd-row{display:flex;justify-content:space-between;gap:var(--space-md);margin-top:var(--space-sm);font-size:var(--text-subhead)}
.tsd-row span{color:var(--c-text-secondary);font-size:var(--text-caption2)}
.tsd-payrun{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);font-size:var(--text-caption)}
.tsd-actions{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-lg)}
.tsd-hint{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption);text-align:center}
/* A STATE, not a verb. Where the buttons would be, for a reader who may not press them — without
   it, withheld authority reads as a page that failed to load. */
.tsd-info{margin:0;padding:var(--space-sm) 0;color:var(--c-text-secondary);font-size:var(--text-subhead);text-align:center}
.tsd-danger{color:var(--c-danger)}

/* A lien row that can be opened. The card counted deadlines and offered nothing until 2026-08-28;
   the affordance has to say the row is a door without turning a worklist into a wall of buttons. */
.lien__row--act{cursor:pointer;border-radius:var(--radius-sm)}
.lien__row--act:hover,.lien__row--act:focus-visible{background:var(--c-surface)}

.jb-note__read { font-size: var(--text-caption); color: var(--c-text-primary); line-height: 1.55; white-space: pre-wrap; margin-bottom: var(--space-sm); }
.jb-note__foot { display: flex; justify-content: flex-end; margin-top: var(--space-sm); }
.jb-note__foot[hidden] { display: none; }   /* see the note on .qa__form[hidden] */

/* Where prefilled numbers came from. It sits ABOVE the lines rather than beside one of them: it is
   true of the whole block, and a reader who cannot tell which figures arrived from which they typed
   has to re-check all of them — which hands back the saving the prefill just made. */
.li-takeoff {
  margin: 0 0 10px; padding: 9px 12px;
  border: 1px dashed var(--c-brand-primary);
  border-radius: 8px; background: var(--c-accent-tint);
  font-size: var(--text-caption); line-height: 1.5; color: var(--c-text-secondary);
}

/* ── Service: the queue's controls ───────────────────────────────────────────
   Kind and lifecycle are independent cuts. The lifecycle row is the native ServiceLens enum in
   its exact order, promoted to an operable tablist for dispatchers. */
.sv-filters{display:flex;align-items:center;gap:var(--space-md);margin-top:var(--space-md)}
.sv-kinds{display:flex;flex-wrap:wrap;gap:var(--space-xs-sm);flex:1;min-width:0}
/* 23px — one pixel under the floor, which is the kind of miss that survives every eye and only a
   measurement catches. `inline-flex` with a centred label rather than more padding, so ten chips in
   a row keep their rhythm and only their height changes. */
/* TODAY'S VISITS — the app's rail card, ServiceModuleView+Rail.swift:378-401. A row is a button
   because its only verb is opening the ticket; one with no ticket left is disabled, not hidden. */
.sv-today{padding:var(--space-lg);margin-bottom:var(--space-md)}
.sv-today__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);
  margin-bottom:var(--space-sm)}
.sv-today__title{font-size:10px;font-weight:700;letter-spacing:.8px;color:var(--c-text-tertiary);margin:0}
.sv-today__stamp{font-size:12px;color:var(--c-text-tertiary)}
.sv-today__none{font-size:12px;color:var(--c-text-tertiary);margin:0}
.sv-today__row{display:flex;align-items:flex-start;gap:var(--space-sm);width:100%;padding:6px 0;
  background:none;border:0;text-align:left;cursor:pointer;color:inherit}
.sv-today__row[disabled]{cursor:default}
.sv-today__row + .sv-today__row{border-top:1px solid var(--c-border-subtle)}
.sv-today__time{flex:none;width:58px;font-size:12px;font-weight:500;font-variant-numeric:tabular-nums;
  color:var(--c-brand-primary)}
.sv-today__who{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.sv-today__who strong{font-size:12px;font-weight:500;color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sv-today__where{font-size:11px;color:var(--c-text-tertiary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sv-today__go{flex:none;font-size:12px;color:var(--c-text-tertiary)}
/* COVERAGE WATCH / MAINTENANCE WATCH — the two registers the Service desk reaches daily,
   ServiceModuleView+Rail.swift:449-580. Read-only here: the coverage row's check-in verb is a
   write held for an owner ruling (e067/e068). */
.sv-watch{padding:var(--space-lg);margin-bottom:var(--space-md)}
.sv-watch__head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);
  margin-bottom:var(--space-sm)}
.sv-watch__title{font-size:10px;font-weight:700;letter-spacing:.8px;color:var(--c-text-tertiary);margin:0}
.sv-watch__door{font-size:12px;font-weight:600;color:var(--c-brand-primary);text-decoration:none}
.sv-watch__door:hover{text-decoration:underline}
.sv-watch__none{font-size:12px;color:var(--c-text-tertiary);margin:0}
.sv-watch__row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);
  padding:5px 0;font-size:12px}
.sv-watch__row--stacked{flex-direction:column;align-items:stretch;gap:1px}
.sv-watch__row + .sv-watch__row{border-top:1px solid var(--c-border-subtle)}
.sv-watch__line{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm)}
.sv-watch__who{color:var(--c-text-primary);font-weight:500;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sv-watch__when{flex:none;color:var(--c-warning);font-weight:500;font-variant-numeric:tabular-nums}
.sv-watch__detail{font-size:11px;color:var(--c-text-tertiary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sv-watch__note{font-size:11px;color:var(--c-text-tertiary);margin:0 0 var(--space-md)}
/* THE LOOP — ServiceModuleView+Rail.swift:655-690. The counts are the lens tabs' own; this card
   carries the instruction on each stop, which the tab labels cannot. */
.sv-loop{padding:var(--space-lg);margin-bottom:var(--space-md);display:flex;flex-direction:column;
  gap:var(--space-sm)}
.sv-loop__title{font-size:10px;font-weight:700;letter-spacing:.8px;color:var(--c-text-tertiary);margin:0}
.sv-loop__step{display:flex;align-items:baseline;gap:var(--space-sm)}
.sv-loop__n{flex:none;width:20px;height:20px;border-radius:999px;display:inline-flex;
  align-items:center;justify-content:center;font-size:10px;font-weight:700;
  font-variant-numeric:tabular-nums;background:var(--c-field-fill);color:var(--c-text-secondary)}
.sv-loop__n--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.sv-loop__what{flex:1;font-size:12px;font-weight:500;color:var(--c-text-secondary)}
.sv-loop__count{flex:none;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;
  color:var(--c-brand-primary)}
/* ACTIVITY on the ticket rail — ServiceTicketFileView.swift:655-687. Read-only history: the door
   has been writing these events all along and no surface read them. */
/* THE STAGE RAIL — ServiceTicketFileView.swift:409-461. Presentational: the stops are not buttons,
   the status select below is still the only place this record changes state. */
/* THE VISIT — ServiceTicketFileView.swift:534-580. Read-only: the booking verbs are e101/e102. */
/* THE CUSTOMER on the ticket rail — ServiceTicketFileView+Rail.swift:18-66. Call and Text are
   tel:/sms: links; Text is withheld on an SMS opt-out and Call is not. */
.sv-contact{padding-bottom:var(--space-xs)}
.sv-contact__verbs{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-top:4px}
.sv-contact__verb{font-size:12px;font-weight:600;color:var(--c-brand-primary);text-decoration:none}
.sv-contact__verb:hover{text-decoration:underline}
.sv-contact__none{font-size:11px;color:var(--c-text-tertiary);margin:4px 0 0}
.sv-contact__none.is-warning{color:var(--c-warning)}
/* WHAT FIXED IT — ServiceTicketFileView+Doors.swift:105-150. The closed face's receipt; the Edit
   door is a write and the photo strip is e115/e116. */
/* THE MONEY — ServiceTicketFileView.swift:601-648. No figure on this card, so no financial gate:
   it says free, billed or billable. The amount and the invoice door are e053 and masked. */
/* A record address whose record is not there — the shared pane's answer, replacing a silent
   redirect to a blank half-page. ServiceTicketFileView.swift:202-215. */
/* A warranty's job and customer as DOORS — WarrantyFormSheet+Rail.swift:152-172, warranties
   e057/e058. Brand ink and a chevron, as the app draws them; a plain fact when the id is gone. */
.ac-rail-door{color:var(--c-brand-primary);font-weight:500;text-decoration:none}
.ac-rail-door:hover{text-decoration:underline}
.rec-gone{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);
  padding:var(--space-xxxl) var(--space-lg);text-align:center}
.rec-gone__title{font-size:17px;font-weight:700;color:var(--c-text-primary);margin:0}
.rec-gone__say{font-size:12px;color:var(--c-text-tertiary);margin:0 0 var(--space-sm)}
.sv-money{grid-column:span 2;padding:var(--space-md);border:1px solid var(--c-border-subtle);
  border-radius:var(--radius-md);margin-bottom:var(--space-md)}
.sv-money--billable{border-color:var(--c-warning)}
.sv-money--covered{border-color:var(--c-brand-primary)}
.sv-money__title{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--c-text-tertiary);margin:0 0 6px}
.sv-money--billable .sv-money__title{color:var(--c-warning)}
.sv-money--covered .sv-money__title{color:var(--c-brand-primary)}
.sv-money__say{font-size:12px;color:var(--c-text-secondary);margin:0}
.sv-fixed{grid-column:span 2;padding:var(--space-md);border:1px solid var(--c-brand-primary);
  border-radius:var(--radius-md);margin-bottom:var(--space-md)}
.sv-fixed__title{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--c-brand-primary);margin:0 0 6px}
.sv-fixed__note{font-size:13px;color:var(--c-text-primary);margin:0}
.sv-fixed__note.is-empty{font-size:12px;color:var(--c-text-tertiary)}
.sv-fixed__receipt{font-size:11px;color:var(--c-text-tertiary);margin:6px 0 0}
.sv-visit{grid-column:span 2;padding:var(--space-md);border:1px solid var(--c-border-subtle);
  border-radius:var(--radius-md);margin-bottom:var(--space-md)}
.sv-visit__title{font-size:10px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;
  color:var(--c-text-tertiary);margin:0 0 6px}
.sv-visit__when{display:flex;flex-direction:column;gap:2px}
.sv-visit__when strong{font-size:13px;color:var(--c-text-primary)}
.sv-visit__when span{font-size:12px;color:var(--c-text-tertiary)}
.sv-visit__say{font-size:12px;color:var(--c-text-tertiary);margin:0}
.sv-visit__say.is-warning{color:var(--c-warning)}
.sv-stages{display:flex;list-style:none;margin:0 0 var(--space-lg);padding:0;gap:0}
.sv-stages__stop{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;position:relative}
.sv-stages__stop::before{content:"";position:absolute;top:11px;left:0;width:50%;height:2px;
  background:var(--c-border-subtle)}
.sv-stages__stop::after{content:"";position:absolute;top:11px;right:0;width:50%;height:2px;
  background:var(--c-border-subtle)}
.sv-stages__stop.is-done::before,.sv-stages__stop.is-here::before{background:var(--c-brand-primary)}
.sv-stages__stop.is-done::after{background:var(--c-brand-primary)}
/* ⚠️ AFTER the state rules, not before. These clear the run's two outer ends, and written above
   they lost to `.is-here::before` on equal specificity — the first stop drew a connector coming in
   from nothing, which is exactly the "leading line" the app clears with `index == 0 ? .clear`. */
.sv-stages__stop:first-child::before,.sv-stages__stop:last-child::after{background:transparent}
.sv-stages__mark{position:relative;z-index:1;width:24px;height:24px;border-radius:999px;
  display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;
  font-variant-numeric:tabular-nums;background:var(--c-surface);color:var(--c-text-tertiary);
  border:1.5px solid var(--c-border-subtle)}
.sv-stages__stop.is-done .sv-stages__mark{background:var(--c-brand-primary);color:var(--c-on-brand);
  border-color:var(--c-brand-primary)}
.sv-stages__stop.is-here .sv-stages__mark{border:2px solid var(--c-brand-primary);
  color:var(--c-brand-primary)}
.sv-stages__label{font-size:11px;color:var(--c-text-tertiary);white-space:nowrap}
.sv-stages__stop.is-here .sv-stages__label{color:var(--c-text-primary);font-weight:500}
.sv-activity{padding-top:var(--space-xs)}
.sv-activity__row{display:flex;gap:var(--space-sm);align-items:baseline;padding:3px 0;font-size:12px}
.sv-activity__when{flex:none;width:48px;color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.sv-activity__what{flex:1;color:var(--c-text-secondary)}
.sv-activity__who{color:var(--c-text-tertiary)}
.sv-kind{display:inline-flex;align-items:center;min-height:24px;
  padding:var(--space-xs) var(--space-sm-md);border-radius:999px;border:1px solid var(--c-card-border);
  background:var(--c-card-background);color:var(--c-text-secondary);font-family:inherit;
  font-size:var(--text-caption2);font-weight:600;cursor:pointer;white-space:nowrap}
.sv-kind:hover{background:var(--c-field-fill)}
.sv-kind--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-on-brand)}
/* THE REPEAT BAND'S PIN — the app's `Job: <label> ✕` capsule in brand tint
   (ServiceModuleView.swift:464-476). It sits beside the kind chips because it is the same axis of
   narrowing, and it carries the way out on the chip itself rather than in a separate control. */
.sv-jobpin{display:flex;align-items:center}
.sv-jobpin__chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:24px;
  padding:var(--space-xs) var(--space-sm-md);border-radius:999px;border:1px solid transparent;
  background:var(--c-brand-tint);color:var(--c-brand-primary);font-family:inherit;
  font-size:var(--text-caption2);font-weight:600;cursor:pointer;white-space:nowrap}
.sv-jobpin__chip:hover{border-color:var(--c-brand-primary)}
.sv-legend{display:flex;overflow-x:auto;gap:var(--space-sm);margin:var(--space-sm-md) 0 var(--space-xs);
  scrollbar-width:none}
.sv-legend::-webkit-scrollbar{display:none}
/* A real tab — role="tab", aria-selected, roving tabindex — and 23px tall. Same one-pixel miss as
   .sv-kind beside it, and it only surfaced once that one was fixed: the harness reports the worst
   offenders, so a floor violation can hide behind another. */
.sv-legend__item{display:inline-flex;align-items:center;min-height:24px;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);
  border-radius:var(--radius-row);border:1px solid transparent;background:none;font-family:inherit;
  font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);cursor:pointer}
.sv-legend__item:hover{background:var(--c-field-fill)}
.sv-legend__item--on{border-color:var(--c-card-border);background:var(--c-field-fill);color:var(--c-text-primary)}
.sv-legend__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.sv-legend__count{font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.sv-lens-state{min-height:0;margin:0 0 var(--space-md);font-size:var(--text-caption2)}

/* The warranty flag rides the ticket's own name, the way the app's row wears it — not as a word in
   the Why column, where it competed with the kind for the same glance. */
.sv-warranty{display:inline-block;margin-left:var(--space-xs);padding:1px var(--space-xs);border-radius:999px;
  background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:var(--text-caption2);
  font-weight:700;letter-spacing:.3px;vertical-align:middle}
/* A billing contradiction is a dot with the sentence on hover, not a paragraph wrapped inside a
   table cell — the sentence is still there, in the record, where somebody settles it. */
.sv-warn{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;
  border-radius:50%;background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption2);
  font-weight:700;cursor:help}
.sv-more{width:26px;height:26px;border-radius:var(--radius-sm);border:1px solid transparent;background:none;
  color:var(--c-text-tertiary);font-family:inherit;font-size:var(--text-caption);cursor:pointer;line-height:1}
.sv-more:hover{background:var(--c-field-fill);border-color:var(--c-card-border);color:var(--c-text-primary)}
.col-actions{width:40px;text-align:right}
/* Pipeline wears the LEDGER green, because the app draws its pipeline hero on the money surface —
   the same gradient the money card uses, so a figure about deals reads as money on both surfaces. */
.hub-hero--money{background:var(--c-money-gradient);border-color:var(--c-money-hairline)}
.hub-hero--money .hub-hero__title,.hub-hero--money .hub-hero__value{color:var(--c-money-ink)}
.hub-hero--money .hub-hero__sub,.hub-hero--money .hub-hero__label{color:var(--c-money-dim)}
.hub-hero--money .hub-hero__metric{border-right-color:var(--c-money-hairline)}
.hub-hero--money .hub-hero__value--mint{color:var(--c-money-mint)}
/* A figure that is a door says so on hover, the way a band slot does. */
.hub-hero__metric{background:none;border-top:0;border-bottom:0;border-left:0;font-family:inherit;text-align:left}
.hub-hero__metric--door{cursor:pointer;border-radius:var(--radius-row);transition:background var(--motion-fast)}
.hub-hero__metric--door:hover{background:var(--c-drawing-soft-fill)}
.hub-hero__meta{display:block;font-size:var(--text-caption2);color:var(--c-drawing-dim);opacity:.75;margin-top:1px}
.hub-hero--money .hub-hero__meta{color:var(--c-money-dim)}

/* ══ CATALYST RECORD DESTINATION ══════════════════════════════════════════
 * A selected record replaces its register at every width, matching Catalyst's glassContentArea.
 * The register remains mounted behind it so Back restores the exact scroll/filter state.
 */
.rec-split{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-lg);align-items:start}
.rec-split__list{min-width:0}
.rec-split__pane{display:none;min-width:0}

.rec-split--full .rec-split__list{display:none}
.rec-split--full .rec-split__pane:not([hidden]){display:block}
.rec-split--full .rpane{max-height:none;border:0;border-radius:0;background:transparent}

.rpane{
  display:flex;flex-direction:column;max-height:calc(100vh - 120px);
  width:100%;min-width:0;max-width:100%;
  border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);
  overflow:hidden;
}
.rpane__head{
  display:flex;align-items:center;gap:var(--space-sm);flex:none;
  padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-card-border);
}
.rpane__title{flex:1;min-width:0;font-size:var(--text-subhead);font-weight:650;color:var(--c-text-primary)}
.rpane__close{
  flex:none;width:26px;height:26px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--c-card-border);border-radius:var(--radius-control);
  background:var(--c-card-background);color:var(--c-text-secondary);cursor:pointer;
}
.rpane__close:hover{color:var(--c-text-primary);border-color:var(--c-border-strong)}
.rpane__body{flex:1;min-height:0;overflow-y:auto;padding:var(--space-md)}
.rpane__foot{
  flex:none;display:flex;align-items:center;gap:var(--space-sm);
  padding:var(--space-sm-md) var(--space-md);border-top:1px solid var(--c-card-border);
  background:var(--c-background-secondary);
}
.rpane__foot .btn{flex:none}
.rpane__keys{
  flex:none;margin:0;padding:6px var(--space-md);border-top:1px solid var(--c-separator);
  font-size:var(--text-caption2);color:var(--c-text-tertiary);
}
.rpane__keys kbd{
  font:inherit;font-weight:700;color:var(--c-text-secondary);
  background:var(--c-control-fill);border-radius:4px;padding:1px 5px;
}

/* Hosted records use the same Catalyst cockpit + standing rail as the page. The ordinary
 * `.record` phone breakpoint above owns the single-column fallback; the host must not carry a
 * second, permanently compact layout left over from the retired 404px side pane. */

/* The open row wears the rail, so a triage pass can see where it is. */
.rec-row--open > td{background:var(--c-brand-tint)}
.rec-row--open > td:first-child{box-shadow:inset 3px 0 0 var(--c-brand-primary)}
/* Not every list is a table — a card list wears the same mark on the card itself. */
.rec-row--open:not(tr){background:var(--c-brand-tint);box-shadow:inset 3px 0 0 var(--c-brand-primary)}

/* ══ AFTERCARE — Catalyst's three-desk destination ════════════════════════
 * Destination tabs own the Warranties / Maintenance / Plans switch. Each desk then follows the
 * native grammar: four actionable metrics, one named move, subordinate filters, and a grouped
 * hairline register. The register stays flat; the only card is the next move that asks for action.
 */
.ac{display:flex;flex-direction:column;gap:var(--space-md);max-width:1160px;margin:0 auto}
.ac__tip{display:flex;align-items:flex-start;gap:var(--space-sm-md);padding:var(--space-sm-md) var(--space-md);border-radius:var(--radius-card);background:var(--c-warning-tint);color:var(--c-text-primary);font-size:var(--text-footnote);line-height:1.45}
.ac__tip-icon{flex:none;color:var(--c-warning);font-size:var(--text-caption);line-height:1.5}
.ac-tabs{display:flex;align-items:stretch;gap:var(--space-xl);overflow-x:auto;border-bottom:1px solid var(--c-separator);scrollbar-width:none}
.ac-tabs::-webkit-scrollbar{display:none}
.ac-tabs__tab{position:relative;flex:none;padding:var(--space-sm-md) 0;border:0;background:none;color:var(--c-text-secondary);font:600 var(--text-subhead)/1.35 var(--font-family);cursor:pointer}
.ac-tabs__tab::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:var(--radius-pill);background:transparent}
.ac-tabs__tab:hover{color:var(--c-text-primary)}
.ac-tabs__tab--active{color:var(--c-brand-primary)}
.ac-tabs__tab--active::after{background:var(--c-brand-primary)}
.ac__desk{display:flex;flex-direction:column;gap:var(--space-md);min-width:0}
.ac-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background)}
.ac-metric{position:relative;display:flex;flex-direction:column;align-items:flex-start;min-width:0;min-height:82px;padding:var(--space-md) var(--space-lg);border:0;background:none;color:var(--c-text-primary);font-family:inherit;text-align:left}
.ac-metric + .ac-metric::before{content:'';position:absolute;left:0;top:var(--space-md);bottom:var(--space-md);width:var(--border-fine);background:var(--c-separator)}
.ac-metric:not(:disabled){cursor:pointer}
.ac-metric:not(:disabled):hover{background:var(--c-field-fill)}
.ac-metric:disabled{opacity:1}
.ac-metric__label{overflow:hidden;max-width:100%;color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:700;letter-spacing:.04em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}
.ac-metric__value{overflow:hidden;max-width:100%;margin-top:var(--space-xxs);color:var(--c-text-primary);font-size:var(--text-title3);font-variant-numeric:tabular-nums;line-height:1.15;text-overflow:ellipsis;white-space:nowrap}
.ac-metric--attention .ac-metric__value{color:var(--c-warning)}
.ac-metric__meta{overflow:hidden;max-width:100%;margin-top:var(--space-xxs);color:var(--c-text-secondary);font-size:var(--text-caption);text-overflow:ellipsis;white-space:nowrap}
.ac-move{display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.ac-move>.ac-row__icon{width:38px;height:38px;background:var(--c-warning-tint);color:var(--c-warning)}
.ac-move__copy{display:flex;flex-direction:column;gap:var(--space-xxs);min-width:0}
.ac-move__copy strong{color:var(--c-text-primary);font-size:var(--text-subhead);line-height:1.35}
.ac-move__copy span{color:var(--c-text-secondary);font-size:var(--text-footnote)}
.ac-move__actions{display:flex;align-items:center;gap:var(--space-sm)}
.ac-filters{display:flex;flex-direction:column;gap:var(--space-sm-md)}
.ac-filters__lenses{display:flex;align-items:center;gap:var(--space-sm);overflow-x:auto;padding-bottom:1px;scrollbar-width:none}
.ac-filters__lenses::-webkit-scrollbar{display:none}
.ac-filter,.ac-menu{flex:none;min-height:30px;padding:5px 10px;border:1px solid var(--c-card-border);border-radius:var(--radius-pill);background:var(--c-card-background);color:var(--c-text-secondary);font:700 var(--text-caption2)/1.2 var(--font-family);cursor:pointer;white-space:nowrap}
.ac-filter span{margin-left:3px;color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.ac-filter:hover,.ac-menu:hover{border-color:var(--c-border-strong);color:var(--c-text-primary)}
.ac-filter--active{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.ac-filter--active span{color:currentColor}
.ac-menu{display:inline-flex;align-items:center;padding:0;overflow:hidden}
.ac-menu select{min-height:28px;padding:4px 26px 4px 10px;border:0;outline:0;background:transparent;color:inherit;font:inherit;cursor:pointer}
.ac-menu--button{padding:5px 10px}
.ac-search{display:flex;align-items:center;gap:var(--space-sm);min-height:34px;padding:0 var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-field-fill);color:var(--c-text-tertiary)}
.ac-search:focus-within{border-color:var(--c-brand-primary);background:var(--c-card-background)}
.ac-search input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:var(--text-footnote)/1.4 var(--font-family)}
.ac-columns{display:grid;align-items:center;gap:var(--space-sm-md);padding:var(--space-sm) var(--space-md) var(--space-sm) 50px;border-bottom:1px solid var(--c-separator);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700}
[data-desk="warranties"] .ac-columns{grid-template-columns:minmax(190px,1fr) 150px 90px 84px 110px}
[data-desk="reminders"] .ac-columns{grid-template-columns:minmax(180px,1fr) minmax(110px,.7fr) minmax(110px,.7fr) 100px 130px 150px}
[data-desk="plans"] .ac-columns{grid-template-columns:minmax(190px,1fr) minmax(140px,.8fr) 120px 100px 170px}
.ac-register{min-width:0}
.ac-group+.ac-group{margin-top:var(--space-sm-md)}
.ac-group__head{display:flex;align-items:baseline;gap:var(--space-xs-sm);padding:var(--space-md) var(--space-md) var(--space-xs);color:var(--c-text-secondary)}
.ac-group__head strong{font-size:var(--text-caption2);letter-spacing:.07em}
.ac-group__head span{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:600}
.ac-group__head--warning strong{color:var(--c-warning)}
.ac-group__head--quiet strong{color:var(--c-text-tertiary)}
.ac-row{position:relative;display:grid;align-items:center;gap:var(--space-sm-md);min-height:58px;padding:var(--space-xs) var(--space-md) var(--space-xs) 0;border-bottom:1px solid var(--c-separator);background:transparent;color:var(--c-text-primary);cursor:pointer;transition:background var(--motion-fast)}
.ac-row:hover{background:var(--c-field-fill)}
.ac-row:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:-2px}
.ac-row--warranty{grid-template-columns:3px 32px minmax(190px,1fr) 150px 90px 84px 110px}
.ac-row--reminder{grid-template-columns:3px 32px minmax(180px,1fr) minmax(110px,.7fr) minmax(110px,.7fr) 100px 130px 150px}
.ac-row--plan{grid-template-columns:3px 32px minmax(190px,1fr) minmax(140px,.8fr) 120px 100px 170px}
.ac-row__accent{align-self:stretch;width:3px;border-radius:var(--radius-pill);background:var(--c-brand-primary)}
.ac-row__accent--warning{background:var(--c-warning)}
.ac-row__accent--orange{background:var(--c-accent-orange)}
.ac-row__accent--quiet{background:var(--c-text-tertiary)}
.ac-row__icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-row);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.ac-row__icon svg{width:17px;height:17px}
.ac-row__primary,.ac-row__cell{min-width:0}
.ac-row__primary{display:flex;flex-direction:column;gap:1px}
.ac-row__primary strong{overflow:hidden;color:var(--c-text-primary);font-size:var(--text-footnote);font-weight:650;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}
.ac-row__primary small,.ac-row__cell small{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-style:normal}
.ac-row__primary small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ac-row__cell{overflow:hidden;color:var(--c-text-secondary);font-size:var(--text-caption);text-align:right;text-overflow:ellipsis;white-space:nowrap}
.ac-row__cell small{display:none}
.ac-row__cell em{display:block;overflow:hidden;color:var(--c-brand-primary);font-style:normal;text-overflow:ellipsis}
.ac-row__standing{overflow:visible}
.ac-row__verbs{position:absolute;right:var(--space-sm);top:50%;display:flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);opacity:0;pointer-events:none;transform:translateY(-50%);transition:opacity var(--motion-fast)}
.ac-row:hover .ac-row__verbs,.ac-row:focus-within .ac-row__verbs{opacity:1;pointer-events:auto}
.ac-row__verbs button{display:grid;place-items:center;width:27px;height:27px;padding:0;border:0;border-radius:var(--radius-sm);background:none;color:var(--c-text-secondary);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}
.ac-row__verbs button:hover{background:var(--c-field-fill);color:var(--c-brand-primary)}
.ac-empty{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs);padding:64px var(--space-xl);text-align:center}
.ac-empty strong{color:var(--c-text-primary);font-size:var(--text-subhead)}
.ac-empty span{max-width:440px;color:var(--c-text-secondary);font-size:var(--text-footnote)}
/* The desk's own empty face, which carries doors as well as words. */
.ac-empty--desk{gap:var(--space-md)}
.ac-empty--desk .btn{margin-top:var(--space-xs)}
.ac-empty__quiet{border:0;background:none;color:var(--c-text-secondary);font:800 var(--text-caption)/1.4 var(--font-family);cursor:pointer}
.ac-empty__quiet:hover{color:var(--c-text-primary)}
/* The listener caps the register — never pretend completeness past it. */
.ac-truncation{padding:var(--space-sm) 0;color:var(--c-text-tertiary);font-size:var(--text-caption);text-align:center}
.ac-customer-pick{width:100%;border:0;border-bottom:1px solid var(--c-separator);background:none;color:var(--c-text-primary);font-family:inherit;text-align:left;cursor:pointer}
.ac-customer-pick:hover{background:var(--c-field-fill)}
.ac-file{display:flex;flex-direction:column;min-height:calc(100vh - 128px);max-width:980px;margin:0 auto;background:var(--c-background-secondary)}
.ac-file__head{display:grid;grid-template-columns:minmax(120px,1fr) auto minmax(120px,1fr);align-items:center;gap:var(--space-md);padding:0 0 var(--space-md);border-bottom:1px solid var(--c-separator)}
/* THE HEADER'S ONE NEXT MOVE. `WarrantyFormSheet.swift:193-194` draws it in `Theme.Palette.warning`
   as a plain label with no chrome — a standing asking for something, not a button competing with
   Save. It rides the third grid column of the file head and sits beside the close of a modal. */
.ac-head-cta{justify-self:end;border:0;background:none;padding:0;color:var(--c-warning);
  font:700 var(--text-caption)/1.25 var(--font-family);cursor:pointer;text-align:right}
.ac-head-cta:hover{text-decoration:underline}
.ac-head-cta[hidden]{display:none}
.ac-file__head strong{grid-column:2;color:var(--c-text-primary);font-size:var(--text-headline);text-align:center}
.ac-file__back{grid-column:1;justify-self:start;padding:var(--space-xs) 0;border:0;background:none;color:var(--c-brand-primary);font:600 var(--text-subhead)/1.4 var(--font-family);cursor:pointer}
.ac-file__back:hover{color:var(--c-brand-pressed)}
.ac-file__body{flex:1;padding:var(--space-xl) 0}
.ac-file__foot{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);padding:var(--space-md) 0;border-top:1px solid var(--c-separator)}
.ac-file__body>.cost-note:first-child{margin-top:0}
.ac-file-save-state{margin-right:auto;color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:600}
.ac-file-save-state[data-tone="success"]{color:var(--c-brand-primary)}
.ac-file-save-state[data-tone="danger"]{color:var(--c-danger)}
.ac-editor{display:grid;grid-template-columns:minmax(0,1fr) 320px;align-items:start;gap:var(--space-xl)}
.ac-editor--new{grid-template-columns:minmax(0,820px);justify-content:center}
.ac-editor__main,.ac-editor__rail{display:flex;min-width:0;flex-direction:column;gap:var(--space-lg)}
.ac-editor-card,.ac-rail-card{padding:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.ac-editor-card{display:flex;flex-direction:column;gap:var(--space-md)}
.ac-editor-card__label{color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:750;letter-spacing:.07em}
.ac-choice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-xs-sm)}
.ac-choice{min-height:34px;padding:var(--space-xs-sm);border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-field-fill);color:var(--c-text-secondary);font:700 var(--text-caption)/1.25 var(--font-family);cursor:pointer}
.ac-choice:hover{border-color:var(--c-border-strong);color:var(--c-text-primary)}
.ac-choice--on{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
/* One chip on its own row, not a third of a three-column grid. */
.ac-choice-row{display:flex;flex-wrap:wrap;gap:var(--space-xs-sm)}
/* Open-ended is INFO-toned, not brand — the app draws it that way (WarrantyFormSheet.swift:412) so
   a standing never reads as one more duration to pick. Two classes to beat .ac-choice--on. */
.ac-choice--info.ac-choice--on{border-color:var(--c-info);background:var(--c-info-tint);color:var(--c-info)}
.ac-openended{color:var(--c-info);font:700 var(--text-caption)/1.25 var(--font-family)}
.ac-editor__line{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);color:var(--c-text-primary);font-size:var(--text-footnote)}
.ac-editor__line[hidden]{display:none}
.ac-editor__line>label{flex:1}
.ac-editor__line>span{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-xs);color:var(--c-text-secondary)}
.ac-editor__line .form-input{width:92px;text-align:right}
.ac-editor__line .form-input[type="date"]{width:142px;text-align:left}
.ac-editor__line .form-select{width:auto;min-width:150px}
.ac-print-frame{position:fixed;width:1px;height:1px;inset:auto 0 0 auto;border:0;opacity:0;pointer-events:none}
.ac-rail-stack{display:grid;gap:var(--space-xs-sm)}
.ac-rail-stack .btn{width:100%}
.ac-rail-stack+.form-hint{margin-top:var(--space-sm)}
.ps-section{display:grid;gap:var(--space-sm);margin-bottom:var(--space-lg)}
.ac-complete-options{display:grid;gap:var(--space-xs-sm)}
.ac-complete-option{display:grid;gap:2px;width:100%;padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-card-background);color:var(--c-text-primary);text-align:left;cursor:pointer}
.ac-complete-option span{color:var(--c-text-secondary);font-size:var(--text-caption)}
.ac-complete-option--on{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}
.ac-complete-next{display:flex;justify-content:space-between;gap:var(--space-md);margin-top:var(--space-md);padding:var(--space-sm-md);border-radius:var(--radius-control);background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:var(--text-footnote)}
.ac-editor__checks{display:flex;max-height:190px;overflow-y:auto;flex-direction:column;border:1px solid var(--c-card-border);border-radius:var(--radius-row)}
.ac-editor__check{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md);border-bottom:1px solid var(--c-separator);color:var(--c-text-primary);font-size:var(--text-footnote);cursor:pointer}
.ac-editor__check:last-child{border-bottom:0}
.ac-editor__check:hover{background:var(--c-field-fill)}
.ac-rail-card{padding:var(--space-md)}
.ac-rail-card>header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-sm-md)}
.ac-rail-card>header strong{color:var(--c-text-primary);font-size:var(--text-footnote);font-weight:700}
.ac-rail-card>header button{border:0;background:none;color:var(--c-brand-primary);font:700 var(--text-caption)/1.3 var(--font-family);cursor:pointer}
.ac-rail-card__headline{display:block;margin-bottom:var(--space-sm-md);color:var(--c-text-primary);font-size:var(--text-footnote);line-height:1.45}
.ac-rail-card dl{margin:0}
.ac-rail-card dl>div{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm);padding:var(--space-xs-sm) 0;border-top:1px solid var(--c-separator)}
.ac-rail-card dt{color:var(--c-text-tertiary);font-size:var(--text-caption)}
.ac-rail-card dd{margin:0;color:var(--c-text-primary);font-size:var(--text-caption);font-weight:600;text-align:right}
.ac-rail-list{display:flex;flex-direction:column;border-top:1px solid var(--c-separator)}
.ac-rail-list button{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) 0;border:0;border-bottom:1px solid var(--c-separator);background:none;color:var(--c-brand-primary);font:var(--text-caption)/1.35 var(--font-family);text-align:left;cursor:pointer}
.ac-rail-list button b{color:var(--c-text-secondary);font-weight:600}
.ac-history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) 0;border-bottom:1px solid var(--c-separator);color:var(--c-text-secondary);font-size:var(--text-caption)}
.ac-history-row b{color:var(--c-text-primary);font-weight:600}
.ac-file-actions{display:flex;flex-direction:column}
.ac-file-action{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--space-sm) 0;border:0;border-bottom:1px solid var(--c-separator);background:none;color:var(--c-text-primary);font:500 var(--text-footnote)/1.35 var(--font-family);text-align:left;cursor:pointer}
.ac-file-action:hover{color:var(--c-brand-primary)}
.ac-file-action--danger{color:var(--c-danger)}

@media (max-width:1080px){
  [data-desk="reminders"] .ac-columns span:nth-child(3),.ac-row--reminder>.ac-row__cell:nth-of-type(3){display:none}
  [data-desk="reminders"] .ac-columns{grid-template-columns:minmax(180px,1fr) minmax(110px,.7fr) 100px 130px 150px}
  .ac-row--reminder{grid-template-columns:3px 32px minmax(180px,1fr) minmax(110px,.7fr) 100px 130px 150px}
}
@media (max-width:820px){
  .ac-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ac-metric:nth-child(3)::before{display:none}
  .ac-metric:nth-child(n+3){border-top:1px solid var(--c-separator)}
  .ac-move{grid-template-columns:38px minmax(0,1fr)}
  .ac-move>.ac-row__icon{grid-column:1;grid-row:auto}
  .ac-move__copy{grid-column:2}
  .ac-move__actions{grid-column:2;justify-content:flex-end}
  .ac-columns{display:none}
  .ac-row,.ac-row--warranty,.ac-row--reminder,.ac-row--plan{grid-template-columns:3px 32px minmax(0,1fr);align-items:start;padding-top:var(--space-sm);padding-bottom:var(--space-sm)}
  .ac-row__accent{grid-row:1/span 8}
  .ac-row__icon{grid-column:2;grid-row:1}
  .ac-row__primary{grid-column:3;grid-row:1}
  .ac-row__cell{grid-column:3;display:flex!important;gap:var(--space-sm);justify-content:space-between;text-align:left;white-space:normal}
  .ac-row__cell small{display:inline;flex:none}
  .ac-row__verbs{position:static;grid-column:3;justify-self:end;margin-top:var(--space-xs);opacity:1;pointer-events:auto;transform:none}
  .ac-editor{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:560px){
  .ac{gap:var(--space-sm-md)}
  .ac-tabs{gap:var(--space-lg)}
  .ac-metric{padding:var(--space-sm-md)}
  .ac-move{grid-template-columns:32px minmax(0,1fr);padding:var(--space-md)}
  .ac-move>.ac-row__icon{width:32px;height:32px}
  .ac-move__actions{grid-column:1/-1;justify-content:stretch}
  .ac-move__actions .btn{flex:1}
  .ac-file__head{grid-template-columns:1fr auto}
  .ac-file__head strong{grid-column:2;text-align:right}
  .ac-file__body{padding:var(--space-md) 0}
  .ac-file__foot{flex-wrap:wrap}
  .ac-editor-card,.ac-rail-card{padding:var(--space-md)}
  .ac-editor__line{align-items:flex-start;flex-direction:column;gap:var(--space-xs)}
  .ac-editor__line>span{width:100%;justify-content:flex-start;flex-wrap:wrap}
  .ac-editor__line .form-select{width:100%}
  .ac-choice-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* ══ CUSTOMER HUB ═════════════════════════════════════════════════════════
 *
 * A customer is a PLACE, not a dialog — a Tier-1 activity hub, the same shape as the job hub, and
 * the last record of that shape still opening as a modal. The grammar it now obeys:
 * one hero band carrying identity AND the named move · no fact twice · never a $0.00 tile.
 */
.ch{display:flex;flex-direction:column;gap:var(--space-md)}
.ch__back{
  align-self:flex-start;background:none;border:0;padding:0;min-height:24px;cursor:pointer;
  color:var(--c-brand-primary);font-size:var(--text-subhead);font-weight:600;
}
.ch__grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-md);align-items:start}
@media (min-width:1180px){ .ch__grid{grid-template-columns:minmax(0,1fr) 272px} }
.ch__main{min-width:0;display:flex;flex-direction:column;gap:var(--space-md)}
.ch__side{display:flex;flex-direction:column;gap:var(--space-sm-md)}

/* The hero: identity, and the one thing to do about it. */
.ch-hero{
  display:flex;gap:var(--space-md);align-items:flex-start;flex-wrap:wrap;
  padding:var(--space-md);border:1px solid var(--c-card-border);
  border-radius:var(--radius-card);background:var(--c-card-background);
}
.ch-hero__mono{color:var(--c-on-identity);width:46px;height:46px;border-radius:var(--radius-md);font-size:16px;letter-spacing:.4px}
.ch-hero__id{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.ch-hero__name{margin:0;font-size:var(--text-title2);font-weight:700;letter-spacing:-.4px;line-height:1.15}
.ch-hero__meta{
  display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;
  font-size:var(--text-caption);color:var(--c-text-secondary);
}
.ch-acct{font-variant-numeric:tabular-nums;font-weight:600;color:var(--c-text-primary)}
.ch-dot{color:var(--c-text-tertiary)}
.ch-hero__q{display:flex;gap:6px;flex:none}
.ch-qb{
  display:inline-flex;align-items:center;padding:6px 12px;cursor:pointer;text-decoration:none;
  border:1px solid var(--c-card-border);border-radius:var(--radius-control);
  background:var(--c-card-background);color:var(--c-text-secondary);
  font-size:var(--text-caption);font-weight:600;
}
.ch-qb:hover{color:var(--c-text-primary);border-color:var(--c-border-strong)}
/* The hero's overflow, which is a glyph rather than a word. */
.ch-qb--icon{min-width:32px;padding-left:0;padding-right:0;justify-content:center;letter-spacing:1px}
/* The move closes the card in a tinted row and carries the page's ONLY filled button. */
.ch-move{
  flex:1 1 100%;display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;
  margin:var(--space-md) calc(var(--space-md) * -1) calc(var(--space-md) * -1);
  padding:var(--space-sm-md) var(--space-md);
  background:var(--c-brand-tint);border-top:1px solid var(--c-card-border);
  border-radius:0 0 var(--radius-card) var(--radius-card);
}
.ch-move--owed{background:var(--c-warning-tint)}
.ch-move__t{flex:1;min-width:200px;font-size:var(--text-caption);color:var(--c-text-primary)}

/* Field verify — Catalyst's one-screen measured-vs-sold decision. */
.mr-sheet{display:grid;gap:var(--space-lg);max-width:660px;margin:0 auto}
.mr-card{padding:var(--space-lg);border:1px solid var(--d-border);border-radius:var(--radius-lg);background:var(--d-card-bg)}
.mr-empty{display:grid;justify-items:center;gap:var(--space-md);text-align:center;color:var(--d-text-2)}
.mr-capture header{display:grid;gap:2px;margin-bottom:var(--space-sm)}
.mr-capture header strong{font-size:var(--text-caption);letter-spacing:.08em;color:var(--d-text-2)}
.mr-capture header small,.mr-line small,.mr-verdict p,.mr-choice p,.mr-margin{color:var(--d-text-3);font-size:var(--text-caption)}
.mr-line{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-xs) 0}
.mr-line>div:first-child{display:grid;gap:1px;min-width:0}.mr-line>div:first-child strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mr-stepper{display:flex;overflow:hidden;border:1px solid var(--d-border);border-radius:var(--radius-control)}
.mr-stepper button{width:32px;height:34px;border:0;background:var(--c-input-fill);color:var(--d-text-2);cursor:pointer}
.mr-stepper input{width:54px;border:0;border-inline:1px solid var(--d-border);text-align:center;font:600 var(--text-subhead) ui-monospace,monospace;color:var(--d-text);background:var(--d-card-bg)}
.mr-verdict__head{display:flex;align-items:center;gap:var(--space-md)}.mr-verdict__head h2,.mr-verdict__head p{margin:0}.mr-verdict__icon{display:grid;place-items:center;width:40px;height:40px;border-radius:var(--radius-md);background:var(--c-brand-tint);font-size:var(--text-title3);color:var(--c-brand-primary)}
.mr-verdict--over .mr-verdict__icon,.mr-verdict--over .mr-verdict__head h2{color:var(--c-warning)}
.mr-changes,.mr-margin{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--d-border)}
.mr-change{display:grid;grid-template-columns:18px minmax(0,1fr) auto 76px;align-items:center;gap:var(--space-sm);padding:4px 0;font-size:var(--text-caption)}.mr-change small{color:var(--d-text-2)}.mr-change b{text-align:right}
.mr-primary{width:100%}.mr-small{display:grid;gap:var(--space-sm);text-align:center}.mr-small p{margin:0;color:var(--d-text-2);font-size:var(--text-caption)}
.mr-decisions{display:grid;gap:var(--space-md)}.mr-choice{display:grid;gap:var(--space-sm)}.mr-choice>div{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.mr-choice h3,.mr-choice p{margin:0}.mr-choice>div span{padding:2px 6px;border-radius:999px;background:var(--c-accent-purple);color:var(--c-on-brand);font-size:8px;font-weight:800}.mr-choice--suggested{border-color:color-mix(in srgb,var(--c-accent-purple) 50%,transparent)}
.mr-error{display:block;margin:0}
.jb-verify-menu{position:relative;margin-top:var(--space-xs);font-size:var(--text-caption)}
.jb-verify-menu>summary{width:max-content;margin-left:auto;color:var(--c-brand-primary);font-weight:700;cursor:pointer;list-style:none}
.jb-verify-menu>summary::-webkit-details-marker{display:none}.jb-verify-menu>div{display:grid;gap:2px;margin-top:var(--space-xs);padding:4px;border:1px solid var(--d-border);border-radius:var(--radius-control);background:var(--d-card-bg);box-shadow:var(--shadow-overlay)}
.jb-verify-menu button{padding:8px;border:0;border-radius:var(--radius-sm);text-align:left;color:var(--d-text);background:transparent;cursor:pointer}.jb-verify-menu button:hover{background:var(--d-bg-2)}

/* Money, or the honest absence of it — never a strip of zeroes. */
.ch-band{
  display:grid;grid-template-columns:repeat(3,1fr);overflow:hidden;
  border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);
}
.ch-band__c{
  padding:var(--space-sm-md) var(--space-md);display:flex;flex-direction:column;gap:2px;
  border-left:1px solid var(--c-separator);
}
.ch-band__c:first-child{border-left:0}
.ch-band__k{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--c-text-tertiary)}
.ch-band__v{font-size:var(--text-title3);font-weight:700;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.ch-band__v--alarm{color:var(--c-warning)}
.ch-band__s{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.ch-empty{
  padding:var(--space-sm-md) var(--space-md);border:1px solid var(--c-card-border);
  border-radius:var(--radius-card);background:var(--c-card-background);
}
.ch-empty__t{font-size:var(--text-caption);color:var(--c-text-secondary)}

/* The rail says only what nothing else says. */
.ch-card__h{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md)}
.ch-card__k{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--c-text-tertiary)}
.ch-card__d{height:1px;background:var(--c-card-border)}
.ch-fact{display:flex;flex-direction:column;gap:1px;padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--c-separator)}
.ch-fact:last-child{border-bottom:0}
.ch-fact__k{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--c-text-tertiary)}
.ch-fact__v{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary);word-break:break-word}
/* A missing email is not a blank — it is the thing standing between you and getting paid. */
.ch-fact__v--alarm{color:var(--c-danger)}
.ch-fact__m{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

.ch-badge{
  margin-left:5px;padding:1px 6px;border-radius:var(--radius-pill);
  font-size:10px;font-weight:700;background:var(--c-control-fill);color:var(--c-text-secondary);
}
.ch-badge--owed{background:var(--c-warning-tint);color:var(--c-warning)}

/* Customer destination: the wide-screen density pass. Kept under a modifier so the lead and job
   hubs retain their own rhythm while this relationship record gives its live work more weight. */
@media (min-width:1180px){
  .ch--customer .ch__grid{grid-template-columns:minmax(0,1fr) 304px;gap:var(--space-xl)}
}
@media (min-width:1500px){
  .ch--customer .ch__grid{grid-template-columns:minmax(0,1fr) 320px}
}
.ch--customer .ch__main{gap:var(--space-sm-md)}
.ch--customer .ch-hero{padding:var(--space-lg)}
.ch--customer .ch-hero__mono{width:52px;height:52px;font-size:17px}
.ch--customer .ch-hero__name{font-size:var(--text-title1)}

.ch-move--customer{padding:var(--space-lg);align-items:center;gap:var(--space-xl)}
.ch-move__copy{display:flex;flex:1;min-width:220px;flex-direction:column;align-items:flex-start;gap:3px}
.ch-move__eyebrow{font-size:10px;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--c-brand-primary)}
.ch-move__headline{font-size:var(--text-title3);line-height:1.2;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.ch-move__context{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-move__reason{margin-top:var(--space-xs);font-size:var(--text-caption);color:var(--c-text-secondary)}

.ch-ledger{
  display:grid;grid-template-columns:minmax(150px,.7fr) minmax(240px,1.6fr) minmax(150px,.7fr);
  align-items:center;gap:var(--space-xl);padding:var(--space-md) var(--space-lg);
  border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)
}
.ch-ledger__amount,.ch-ledger__progress{display:flex;flex-direction:column;gap:2px}
.ch-ledger__amount strong,.ch-ledger__progress strong{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.ch-ledger__amount small,.ch-ledger__progress small{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.ch-ledger__label{font-size:var(--text-caption);font-weight:650;color:var(--c-text-secondary)}
.ch-ledger__progress{align-items:center;text-align:center}
.ch-ledger__track{position:relative;width:100%;height:4px;margin-bottom:var(--space-sm);overflow:hidden;border-radius:var(--radius-pill);background:var(--c-control-fill)}
.ch-ledger__track span{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}
.ch-ledger__amount--balance{align-items:flex-end;text-align:right}
.ch-ledger__amount--balance strong{color:var(--c-warning)}

.ch-details{overflow:hidden}
.ch-details__head{padding:var(--space-md);font-size:10px;font-weight:750;letter-spacing:.1em;text-transform:uppercase;color:var(--c-text-secondary);border-bottom:1px solid var(--c-card-border)}
.ch-details__section{display:flex;flex-direction:column;gap:4px;padding:var(--space-md);border-bottom:1px solid var(--c-separator)}
.ch-details__section:last-child{border-bottom:0}
.ch-details__label{font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--c-text-tertiary)}
.ch-details__section strong{font-size:var(--text-subhead);color:var(--c-text-primary);word-break:break-word}
.ch-details__line{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.ch-details__meta{font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-tertiary)}
/* The address row's map thumbnail. Sized in the markup as well as here, because an <img> with
   no intrinsic size reflows the card when it lands — and lazy loading means it lands late. */
.ch-details__map{display:block;width:168px;height:84px;margin:6px 0 2px;border-radius:8px;object-fit:cover;background:var(--c-control-fill);border:1px solid var(--c-separator)}
.ch-details__alarm{color:var(--c-danger)!important}
.ch-details__actions{display:flex;gap:5px;flex:none}
.ch-details__actions--below{margin-top:var(--space-xs)}
.ch-details__action{display:inline-flex;align-items:center;justify-content:center;padding:4px 9px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);font:inherit;font-size:var(--text-caption2);font-weight:650;color:var(--c-text-secondary);text-decoration:none;cursor:pointer}
.ch-details__action:hover{color:var(--c-text-primary);border-color:var(--c-border-strong)}
.ch-details__action--solo{align-self:flex-start;margin-top:var(--space-xs)}
.ch-details__section--account{gap:var(--space-sm)}
.ch-details__fact{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);font-size:var(--text-caption)}
.ch-details__fact span{color:var(--c-text-tertiary)}
.ch-details__fact strong{font-size:var(--text-caption);text-align:right}
.ch-details__fact--stack{align-items:flex-start;flex-direction:column;gap:2px;padding-top:var(--space-xs);border-top:1px solid var(--c-separator)}
.ch-details__fact--stack strong{text-align:left}
.ch-details__fact small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

.ch-work-group{margin-top:var(--space-xs)}
.ch-work-group__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) 2px var(--space-sm-md)}
.ch-work-group__title{font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.ch-work-group__meta{margin-top:2px;font-size:var(--text-caption);color:var(--c-text-tertiary)}
.ch-drawing{
  display:grid;grid-template-columns:minmax(190px,240px) minmax(0,1fr) auto;align-items:center;gap:var(--space-xl);
  min-height:174px;padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)
}
.ch-drawing__thumb{height:146px;overflow:hidden;display:flex;align-items:center;justify-content:center;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-control-fill);color:var(--c-text-tertiary)}
.ch-drawing__thumb img{width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity var(--motion-fast)}
.ch-drawing__thumb--loaded img{opacity:1}
.ch-drawing__thumb--none img{display:none}
.ch-drawing__main{min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:5px}
.ch-drawing__name{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.ch-drawing__meta{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-drawing__state{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-drawing__hint{margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--c-separator);font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-drawing__open{white-space:nowrap}

/* The customer tabs are lenses over one relationship. They read as a rail, not four unrelated
   destinations, and each lens earns its space by naming the work that can move from it. */
.ch--customer .seg--lens{gap:var(--space-xs);padding-top:var(--space-xs);border-bottom:1px solid var(--c-separator)}
.ch--customer .seg--lens .seg__tab{margin-bottom:-1px;padding:9px 12px;border-radius:var(--radius-row) var(--radius-row) 0 0}
.ch--customer .seg--lens .seg__tab--active{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.ch--customer .seg--lens .seg__tab--active::after{height:2px}

.ch-lens-card{overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.ch-lens-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-md) var(--space-md-lg);border-bottom:1px solid var(--c-separator)}
.ch-lens-head h2,.ch-lens-empty h2{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.ch-lens-head p,.ch-lens-empty p{margin:3px 0 0;font-size:var(--text-caption);line-height:1.45;color:var(--c-text-tertiary)}
.ch-lens-head__actions{display:flex;gap:var(--space-xs);flex-wrap:wrap;justify-content:flex-end}
.ch-lens-empty{padding:var(--space-xl);text-align:center;border:1px dashed var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.ch-lens-empty--inside{margin:var(--space-md);border-color:var(--c-separator);background:var(--c-surface)}
.ch-lens-empty__eyebrow{display:block;margin-bottom:var(--space-xs);font-size:10px;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--c-brand-primary)}
.ch-lens-empty .btn{margin-top:var(--space-md)}

/* Money answers one question: what has to happen before cash can arrive? */
.ch-money-lens{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(260px,.85fr);gap:var(--space-md);align-items:stretch}
.ch-qbo-sync{grid-column:1/-1;justify-content:center;min-height:42px}
.ch-open-balance__total{font-size:var(--text-title3);font-variant-numeric:tabular-nums;color:var(--c-warning)}
.ch-invoice-list{display:flex;flex-direction:column}
.ch-invoice-row{display:grid;grid-template-columns:32px minmax(96px,1fr) minmax(76px,.65fr) minmax(76px,.6fr) minmax(96px,.75fr) auto;gap:var(--space-sm-md);align-items:center;padding:var(--space-md) var(--space-md-lg);border-bottom:1px solid var(--c-separator)}
.ch-invoice-row:last-child{border-bottom:0}
.ch-invoice-row__icon{display:grid;width:30px;height:30px;place-items:center;border-radius:50%;background:var(--c-control-fill);color:var(--c-text-secondary)}
.ch-invoice-row__id,.ch-invoice-row__fact{display:flex;flex-direction:column;gap:3px;min-width:0}
.ch-invoice-row__id span,.ch-invoice-row__fact span:first-child{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-tertiary)}
.ch-invoice-row__id strong,.ch-invoice-row__fact strong{font-size:var(--text-caption);font-weight:650;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.ch-invoice-row__actions{display:flex;justify-content:flex-end;gap:var(--space-xs);white-space:nowrap}
.ch-open-balance__helper{margin:0;padding:var(--space-sm) var(--space-md-lg);border-top:1px solid var(--c-separator);font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-payment-path{display:flex;flex-direction:column}
.ch-path-blocker{display:flex;align-items:center;gap:var(--space-xs);margin:0 var(--space-md-lg);padding:var(--space-xs) var(--space-sm);border:1px solid color-mix(in srgb,var(--c-warning) 28%,transparent);border-radius:var(--radius-sm);background:var(--c-warning-tint);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:600}.ch-path-blocker span{display:grid;width:18px;height:18px;place-items:center;border-radius:50%;background:var(--c-warning);color:var(--c-card-background);font-weight:800}
.ch-path{list-style:none;margin:0;padding:var(--space-sm) var(--space-md-lg) var(--space-xs)}
.ch-path__step{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--space-sm);align-items:center;min-height:62px}
.ch-path__step:not(:last-child)::after{content:"";position:absolute;left:13px;top:43px;width:1px;height:38px;background:var(--c-card-border)}
.ch-path__marker{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:1px solid var(--c-card-border);border-radius:50%;background:var(--c-card-background);font-size:var(--text-caption2);font-weight:700;color:var(--c-text-tertiary)}
.ch-path__copy{display:flex;flex-direction:column;gap:1px}
.ch-path__copy span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-path__copy strong{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.ch-path__step small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-path__step--done .ch-path__marker{border-color:var(--c-brand-primary);background:var(--c-brand-primary);color:var(--c-on-brand)}
.ch-path__step--done small{color:var(--c-brand-primary)}
.ch-path__step--current .ch-path__marker{border-color:var(--c-warning);background:var(--c-warning);color:var(--c-on-warning)} /* raw-color-ok: on warning fill */
.ch-path__step--current small{font-weight:700;color:var(--c-warning)}
.ch-work-group__actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-xs);flex-wrap:wrap}
.ch-lens-link{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:auto;padding:var(--space-md) var(--space-md-lg);border:0;border-top:1px solid var(--c-separator);background:none;font:inherit;font-size:var(--text-caption);font-weight:650;color:var(--c-brand-primary);cursor:pointer;text-align:left}

/* A statement is an ordered proof, not an alternate set of dashboard totals. */
.ch-statement__table{margin:0}
.ch-statement .stmt-foot{margin:0;padding:var(--space-md) var(--space-md-lg);border-top:1px solid var(--c-separator)}

/* Activity begins with capture, then becomes a handoff-safe timeline. */
.ch-activity-lens{display:grid;grid-template-columns:minmax(280px,.8fr) minmax(0,1.2fr);gap:var(--space-md);align-items:start}
.ch-activity-compose .qa{padding:var(--space-md) var(--space-md-lg)}
.ch-activity-compose .qa__form{background:var(--c-surface)}
.ch-timeline__list{padding:0 var(--space-md-lg)}
.ch-timeline__item{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:var(--space-sm);padding:var(--space-md) 0;border-bottom:1px solid var(--c-separator)}
.ch-timeline__item:last-child{border-bottom:0}
.ch-timeline__marker{width:8px;height:8px;margin-top:5px;border-radius:50%;background:var(--c-brand-primary);box-shadow:0 0 0 4px var(--c-brand-tint)}
.ch-timeline__body{min-width:0}
.ch-timeline__what{font-size:var(--text-caption);line-height:1.45;color:var(--c-text-primary)}
.ch-timeline__when{margin-top:3px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-timeline__type{align-self:start;display:inline-flex;align-items:center;justify-content:center;min-height:22px;padding:2px 8px;border:1px solid var(--c-separator);border-radius:var(--radius-pill);background:var(--c-control-fill);font-size:10px;line-height:1;font-weight:700;letter-spacing:.02em;white-space:nowrap;text-transform:capitalize;color:var(--c-text-secondary)}
.ch-timeline__meta{padding:var(--space-sm) var(--space-md-lg);border-top:1px solid var(--c-separator);font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* ══ JOB COMMAND CENTER ════════════════════════════════════════════════════
   A job is an ordered operation: bill, book, crew, measure. The command center keeps that sequence
   visible and gives every supporting fact one owner instead of repeating the ledger three times. */
@media (min-width:1180px){.ch--job .ch__grid{grid-template-columns:minmax(0,1fr) 304px;gap:var(--space-xl)}}
.ch--job .ch__main{gap:var(--space-sm-md)}
.ch--job .ch-hero{padding:var(--space-lg)}
.ch--job .ch-hero__mono{width:52px;height:52px;font-size:17px}
.ch--job .ch-hero__name{font-size:var(--text-title1)}
.jb-command-move{padding:var(--space-lg);align-items:center;gap:var(--space-xl)}
.jb-command-move .btn{margin-left:auto}

.jb-readiness{display:grid;grid-template-columns:repeat(4,1fr);padding:var(--space-md) var(--space-lg)}
.jb-readiness__step{position:relative;display:grid;grid-template-columns:30px minmax(0,1fr);gap:var(--space-sm);align-items:center;min-width:0}
.jb-readiness__step:not(:last-child)::after{content:"";position:absolute;left:34px;right:8px;top:14px;height:1px;background:var(--c-card-border)}
.jb-readiness__marker{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid var(--c-card-border);border-radius:50%;background:var(--c-card-background);font-size:var(--text-caption2);font-weight:700;color:var(--c-text-tertiary)}
.jb-readiness__step div{display:flex;flex-direction:column;gap:2px;min-width:0}
.jb-readiness__step strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.jb-readiness__step small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.jb-readiness__step--done .jb-readiness__marker{border-color:var(--c-brand-primary);background:var(--c-brand-primary);color:var(--c-on-brand)}
.jb-readiness__step--current .jb-readiness__marker{border-color:var(--c-warning);background:var(--c-warning);color:var(--c-on-warning)} /* raw-color-ok: on warning fill */
.jb-readiness__step--current small,.jb-readiness__step--blocked small{color:var(--c-warning)}
.jb-readiness__step--progress .jb-readiness__marker{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.jb-readiness__step--progress small{color:var(--c-brand-primary)}

.jb-scope__body{padding:var(--space-md)}
.jb-scope__drawing{display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:var(--space-lg);align-items:center}
.jb-scope__drawing+.jb-scope__drawing{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--c-separator)}
.jb-scope__thumb{height:170px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-surface);overflow:hidden}
.jb-scope__thumb svg{width:100%;height:100%;padding:14px;fill:none;stroke:var(--c-text-tertiary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.jb-scope__thumb .jb-scope__doors{stroke:var(--c-brand-primary);stroke-width:3}
.jb-scope__copy{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-width:0}
.jb-scope__copy>strong{font-size:var(--text-title3);color:var(--c-text-primary)}
.jb-scope__copy>span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.jb-scope__state{display:flex;align-items:center;gap:var(--space-sm);margin:var(--space-xs) 0}
.jb-scope__state small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

.jb-record__head{display:flex;align-items:center;gap:var(--space-lg);padding:0 var(--space-md-lg);border-bottom:1px solid var(--c-separator)}
.jb-record__head>strong{font-size:var(--text-subhead);color:var(--c-text-primary);white-space:nowrap}
.jb-record__tabs{display:flex;align-items:center;gap:var(--space-xs);overflow-x:auto}
.jb-record__tab{position:relative;padding:var(--space-md) var(--space-sm-md);border:0;background:none;font:inherit;font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary);white-space:nowrap;cursor:pointer}
.jb-record__tab::after{content:"";position:absolute;left:8px;right:8px;bottom:0;height:2px;background:transparent}
.jb-record__tab--active{color:var(--c-brand-primary)}
.jb-record__tab--active::after{background:var(--c-brand-primary)}
.jb-record__panel{min-height:136px;padding:var(--space-md) var(--space-md-lg)}
.jb-record__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) 0;border-bottom:1px solid var(--c-separator)}
.jb-record__row--link{text-decoration:none;border-radius:var(--radius-sm);padding-inline:var(--space-xs);margin-inline:calc(var(--space-xs) * -1)}
.jb-record__row--link:hover{background:color-mix(in srgb,var(--c-brand-primary) 5%,var(--c-surface))}
.jb-record__row div{display:flex;flex-direction:column;gap:2px}
.jb-record__row strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.jb-record__row span,.jb-record__row small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.jb-record__empty{display:flex;min-height:88px;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--c-text-tertiary)}
.jb-record__empty strong{font-size:var(--text-caption);color:var(--c-text-secondary)}
.jb-record__empty span{margin-top:3px;font-size:var(--text-caption2)}
.jb-record__action{display:block;margin:var(--space-xs) auto 0}
.jb-record__panel .qa{margin-top:var(--space-sm)}
.jb-note-compose{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-md)}
.jb-note-compose .form-input{flex:1 1 100%}
.jb-note-compose__label{font-size:var(--text-caption);font-weight:650;color:var(--c-brand-primary)}
.jb-note-compose .jb-note__foot{margin-left:auto}

.jb-field-evidence{overflow:hidden}
.jb-progress__summary{display:flex;gap:var(--space-xl);padding:var(--space-sm-md) var(--space-md-lg);border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator);background:var(--c-background-secondary)}
.jb-progress__summary>div{display:flex;align-items:baseline;gap:var(--space-xs-sm)}
.jb-progress__summary strong{font-size:var(--text-title3);font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.jb-progress__summary span{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.jb-progress{display:flex;flex-direction:column;padding:0 var(--space-md-lg)}
.jb-progress__day{position:relative;padding:var(--space-lg) 0 var(--space-lg) var(--space-xl);border-bottom:1px solid var(--c-separator)}
.jb-progress__day:last-child{border-bottom:0}
.jb-progress__day::before{content:"";position:absolute;left:4px;top:30px;bottom:-1px;width:1px;background:var(--c-separator)}
.jb-progress__day:last-child::before{display:none}
.jb-progress__date{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm-md)}
.jb-progress__date strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.jb-progress__date>span:last-child{margin-left:auto;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.jb-progress__dot{position:absolute;left:0;width:9px;height:9px;border-radius:50%;background:var(--c-brand-primary);box-shadow:0 0 0 4px var(--c-brand-tint)}
.jb-progress__photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:var(--space-sm);margin-bottom:var(--space-sm-md)}
.jb-progress__photo{position:relative;min-height:94px;padding:0;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-surface);cursor:pointer}
.jb-progress__photo img{display:block;width:100%;height:112px;object-fit:cover;transition:transform var(--motion-fast)}
.jb-progress__photo:hover img{transform:scale(1.03)}
.jb-progress__photo:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:2px}
.jb-progress__photo span{position:absolute;left:6px;bottom:6px;padding:2px 6px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--c-text-primary) 78%,transparent);font-size:10px;font-weight:700;color:var(--c-card-background)}
.jb-progress__notes{display:flex;flex-direction:column;gap:var(--space-sm)}
.jb-progress__note{padding:var(--space-sm-md);border-left:2px solid color-mix(in srgb,var(--c-brand-primary) 35%,transparent);background:var(--c-background-secondary)}
.jb-progress__weather{display:flex;justify-content:space-between;gap:var(--space-md);font-size:var(--text-caption2);font-weight:650;color:var(--c-text-secondary)}
.jb-progress__note p{margin:6px 0 0;font-size:var(--text-caption);line-height:1.45;color:var(--c-text-primary)}
.jb-progress__issue{margin-top:6px;font-size:var(--text-caption2);font-weight:650;color:var(--c-warning)}
.jb-progress__empty{min-height:150px;margin:var(--space-md-lg)}
.jb-progress__fail{margin:var(--space-md-lg) var(--space-md-lg) 0}

/* A2 · Ad budget optimizer — a decision made from the Ads book, not a second campaign writer. */
.ad-opt{overflow:hidden}
.ad-opt__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-xl);padding:var(--space-lg) var(--space-xl);border-bottom:1px solid var(--c-separator);background:linear-gradient(135deg,var(--c-brand-tint),var(--c-card-background) 58%)}
.ad-opt__eyebrow{font-size:10px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--c-brand-primary)}
.ad-opt__head h2{margin:4px 0 3px;font-size:var(--text-title2);color:var(--c-text-primary)}
.ad-opt__head p{max-width:720px;margin:0;font-size:var(--text-caption);line-height:1.45;color:var(--c-text-secondary)}
.ad-opt__readiness{display:flex;flex-direction:column;flex:0 0 auto;gap:2px;padding:var(--space-sm) var(--space-sm-md);border:1px solid var(--c-warning);border-radius:var(--radius-row);background:var(--c-warning-tint)}
.ad-opt__readiness[data-ready="1"]{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}
.ad-opt__readiness strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.ad-opt__readiness span{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.ad-opt__workspace{display:grid;grid-template-columns:minmax(250px,.72fr) minmax(0,1.5fr);gap:var(--space-xl);padding:var(--space-xl)}
.ad-opt__controls{display:flex;flex-direction:column;gap:var(--space-md)}
.ad-opt__goals{margin:0;padding:0;border:0}
.ad-opt__goals legend,.ad-opt__budget>span:first-child{display:block;margin-bottom:6px;font-size:var(--text-caption2);font-weight:750;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary)}
.ad-opt__goals>div{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px;border-radius:var(--radius-row);background:var(--c-background-secondary)}
.ad-opt__goal{min-height:38px;padding:6px;border:0;border-radius:var(--radius-sm);background:transparent;font:inherit;font-size:var(--text-caption2);font-weight:650;color:var(--c-text-secondary);cursor:pointer}
.ad-opt__goal--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.ad-opt__money{display:flex;align-items:center;height:52px;padding:0 var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-field-fill);font-size:var(--text-title2);font-weight:750;color:var(--c-text-primary)}
.ad-opt__money input{min-width:0;width:100%;border:0;outline:0;background:transparent;font:inherit;color:inherit}
.ad-opt__presets{display:grid;grid-template-columns:repeat(4,1fr);gap:5px}
.ad-opt__presets button{min-height:34px;border:1px solid var(--c-card-border);border-radius:var(--radius-sm);background:var(--c-card-background);font:inherit;font-size:var(--text-caption2);font-weight:650;color:var(--c-text-secondary);cursor:pointer}
.ad-opt__presets .ad-opt__preset--on{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.ad-opt__projection{display:flex;flex-direction:column;gap:2px;padding:var(--space-md);border-radius:var(--radius-row);background:var(--c-background-secondary)}
.ad-opt__projection span,.ad-opt__projection small{font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-secondary)}
.ad-opt__projection strong{font-size:var(--text-title3);color:var(--c-text-primary)}
.ad-opt__decision{display:flex;min-width:0;flex-direction:column;gap:var(--space-md)}
.ad-opt__recommendation{display:flex;flex-direction:column;gap:4px;padding:var(--space-md-lg);border:1px solid color-mix(in srgb,var(--c-brand-primary) 28%,var(--c-card-border));border-radius:var(--radius-row);background:var(--c-brand-tint)}
.ad-opt__recommendation span{font-size:var(--text-caption2);font-weight:750;text-transform:uppercase;color:var(--c-brand-primary)}
.ad-opt__recommendation strong{font-size:var(--text-subhead);line-height:1.4;color:var(--c-text-primary)}
.ad-opt__allocations{display:flex;flex-direction:column;gap:var(--space-md)}
.ad-opt__allocation{display:flex;flex-direction:column;gap:8px}
.ad-opt__allocation-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-lg)}
.ad-opt__allocation-head>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.ad-opt__allocation-head>div:last-child{align-items:flex-end;flex:0 0 auto}
.ad-opt__allocation-head strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.ad-opt__allocation-head small{font-size:var(--text-caption2);line-height:1.4;color:var(--c-text-secondary)}
.ad-opt__allocation-head span{font-size:var(--text-caption2);font-weight:750;color:var(--c-brand-primary)}
.ad-opt__bar{height:8px;overflow:hidden;border-radius:var(--radius-pill);background:var(--c-background-secondary)}
.ad-opt__bar span{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}
.ad-opt__allocation[data-opt-platform="meta"] .ad-opt__bar span{background:var(--c-accent-blue)}
.ad-opt__assumptions{border-top:1px solid var(--c-separator);padding-top:var(--space-sm)}
.ad-opt__assumptions summary{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary);cursor:pointer}
.ad-opt__assumptions ul{display:grid;gap:4px;margin:8px 0 0;padding-left:18px;font-size:var(--text-caption2);line-height:1.4;color:var(--c-text-secondary)}

.jb-rail-card{overflow:hidden}
.jb-rail-card__head{padding:var(--space-md);border-bottom:1px solid var(--c-card-border);font-size:10px;font-weight:750;letter-spacing:.09em;text-transform:uppercase;color:var(--c-text-secondary)}
/* The rail's SCHEDULE block — this job's visits, with the verb in the header the way the app's
   section headers carry theirs. */
.jb-visits .jb-rail-card__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.jb-visits__add{border:0;padding:0;background:none;color:var(--c-brand-primary);font:750 10px/1 var(--font-sans);letter-spacing:.06em;cursor:pointer}
.jb-visits__empty{margin:0;padding:var(--space-md);color:var(--c-text-tertiary);font-size:var(--text-caption);line-height:1.42}
.jb-visit{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--c-separator)}
.jb-visit:last-child{border-bottom:0}
.jb-visit__mark{display:grid;width:20px;height:20px;flex:none;place-items:center;border-radius:50%;background:color-mix(in srgb,var(--c-brand-primary) 12%,transparent);color:var(--c-brand-primary);font-size:10px}
.jb-visit--done .jb-visit__mark{background:color-mix(in srgb,var(--c-text-tertiary) 14%,transparent);color:var(--c-text-tertiary)}
.jb-visit__what{display:grid;min-width:0;gap:1px}
.jb-visit__what strong{overflow:hidden;color:var(--c-text-primary);font-size:var(--text-caption);font-weight:600;text-overflow:ellipsis;white-space:nowrap}
.jb-visit__what small{color:var(--c-text-secondary);font-size:var(--text-caption2)}
.jb-visit--done .jb-visit__what small{color:var(--c-text-tertiary)}
.jb-visit__move{position:relative;margin-left:auto}
.jb-visit__move>summary{color:var(--c-brand-primary);font-size:var(--text-caption2);font-weight:700;cursor:pointer;list-style:none}
.jb-visit__move>summary::-webkit-details-marker{display:none}
.jb-visit__move>div{position:absolute;z-index:5;top:100%;right:0;display:grid;min-width:132px;border:1px solid var(--c-card-border);border-radius:var(--radius-md);background:var(--c-card-background);box-shadow:0 8px 24px rgba(0,0,0,.14)}
.jb-visit__move button{border:0;padding:8px var(--space-md);background:none;color:var(--c-text-primary);font:500 var(--text-caption)/1.2 var(--font-sans);text-align:left;cursor:pointer}
.jb-visit__move button:hover{background:var(--c-field-fill)}
/* The job's timeline. One row shape for every event kind — the kind is a word and a dot colour,
   never a different layout, so a reader scanning for what happened is not also parsing a design. */
.jb-feed{display:grid}
.jb-feed__row{display:grid;grid-template-columns:auto 1fr;gap:var(--space-sm);padding:var(--space-sm) 0;border-bottom:1px solid var(--c-separator)}
.jb-feed__row:last-child{border-bottom:0}
.jb-feed__dot{width:8px;height:8px;margin-top:5px;border-radius:50%;background:var(--c-text-tertiary)}
.jb-feed__row--good .jb-feed__dot{background:var(--c-brand-primary)}
.jb-feed__row--warn .jb-feed__dot{background:var(--c-warning)}
.jb-feed__row--info .jb-feed__dot{background:var(--c-info,var(--c-brand-primary))}
.jb-feed__row--accent .jb-feed__dot{background:color-mix(in srgb,var(--c-brand-primary) 60%,var(--c-text-tertiary))}
.jb-feed__body{display:grid;gap:2px;min-width:0}
.jb-feed__body strong{color:var(--c-text-primary);font-size:var(--text-caption);font-weight:600}
.jb-feed__detail{color:var(--c-text-secondary);font-size:var(--text-caption)}
.jb-feed__meta{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
/* The job's margin account — costs to date, the margin ON THE CONTRACT, and a cash line only when
   cash differs from the contract story. One account, not two verdicts. */
.jb-margin{display:grid;gap:2px;padding:var(--space-md) 0;border-top:1px solid var(--c-separator)}
.jb-margin__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-xs)}
.jb-margin__label{color:var(--c-text-tertiary);font-size:10px;font-weight:750;letter-spacing:.09em}
.jb-margin__row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm);padding:4px 0}
.jb-margin__what{display:grid;min-width:0;gap:1px}
.jb-margin__what strong{color:var(--c-text-primary);font-size:var(--text-caption);font-weight:600}
.jb-margin__what small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.jb-margin__amt{color:var(--c-text-primary);font-size:var(--text-caption);font-variant-numeric:tabular-nums;white-space:nowrap}
.jb-margin__amt--down{color:var(--c-danger)}
.jb-margin__row--strong .jb-margin__amt{font-size:var(--text-subhead);font-weight:700;color:var(--c-brand-primary)}
.jb-margin__row--strong .jb-margin__amt--down{color:var(--c-danger)}
.jb-margin__row--quiet .jb-margin__what strong,.jb-margin__row--quiet .jb-margin__amt{color:var(--c-text-tertiary)}
/* The job crew picker — one row per person, the toggle IS the write. */
.crew-pick{display:grid;gap:2px;max-height:340px;overflow-y:auto}
.crew-pick__row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border-radius:var(--radius-md);cursor:pointer}
.crew-pick__row:hover{background:var(--c-field-fill)}
.crew-pick__row input{width:16px;height:16px;flex:none}
.crew-pick__who{display:grid;gap:1px;min-width:0}
.crew-pick__who strong{color:var(--c-text-primary);font-size:var(--text-subhead);font-weight:600}
.crew-pick__who small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
/* The drawing row's overflow — quiet until wanted, and only drawn for someone who can act. */
.jb-scope__menu{padding:2px 8px;line-height:1;color:var(--c-text-tertiary)}
.jb-scope__menu:hover{color:var(--c-text-primary)}
/* The ghost contract — a stamped price whose proposal is gone. Drawn as a danger block because a
   total supported by nothing is the kind of wrong that spreads into every roll-up it is counted in. */
.jb-dangling{display:grid;gap:var(--space-xs);margin:var(--space-md) 0;padding:var(--space-md);border:1px solid color-mix(in srgb,var(--c-danger) 25%,transparent);border-radius:var(--radius-md);background:color-mix(in srgb,var(--c-danger) 8%,transparent)}
.jb-dangling__head{color:var(--c-danger);font-size:10px;font-weight:750;letter-spacing:.09em}
.jb-dangling__why{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.45}
.jb-dangling__pick{display:flex;width:100%;align-items:center;justify-content:space-between;gap:var(--space-sm);border:0;border-top:1px solid color-mix(in srgb,var(--c-danger) 18%,transparent);padding:var(--space-sm) 0;background:none;color:var(--c-text-primary);font:600 var(--text-subhead)/1.3 var(--font-sans);text-align:left;cursor:pointer}
.jb-dangling__pick:hover{color:var(--c-brand-primary)}
.jb-dangling__unprice{justify-self:start;border:0;padding:var(--space-xs) 0 0;background:none;color:var(--c-warning);font:700 var(--text-caption)/1 var(--font-sans);cursor:pointer}
/* The filed drawing families — one card per LAYOUT, grouped by what the thing is. */
.jb-filed{display:grid;margin-bottom:var(--space-sm)}
.jb-filed__head{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-sm) 0 4px;color:var(--c-text-tertiary);font-size:10px;font-weight:750;letter-spacing:.09em;text-transform:uppercase}
.jb-filed__head span{padding:1px 6px;border-radius:999px;background:var(--c-field-fill);color:var(--c-text-secondary);font-size:var(--text-caption2);letter-spacing:0}
/* Select mode — the lens becomes a picker, and the bar says what is chosen. */
.jb-docbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);background:var(--c-field-fill)}
/* A class display beats the [hidden] attribute, so the bar has to say so itself. */
.jb-docbar[hidden]{display:none}
.jb-doc-select{margin-bottom:var(--space-xs)}
/* The share mark rides the status column, and only for a file the customer can already see. */
.jb-filed__eye{color:var(--c-warning);font-size:var(--text-caption2)}
.jb-filed__add{margin-left:auto;border:0;padding:0;background:none;color:var(--c-brand-primary);font:750 10px/1 var(--font-sans);letter-spacing:.06em;cursor:pointer}
.jb-filed__none{margin:0;padding:var(--space-sm) 0;color:var(--c-text-tertiary);font-size:var(--text-caption)}
/* The contract's line items, one tap down — the breakdown behind a figure that had none. */
.jb-items{margin:var(--space-sm) 0}
.jb-items>summary{color:var(--c-brand-primary);font:700 var(--text-caption)/1.4 var(--font-sans);cursor:pointer;list-style:none}
.jb-items>summary::-webkit-details-marker{display:none}
.jb-items>summary::after{content:" ▾"}
.jb-items[open]>summary::after{content:" ▴"}
.jb-items .jb-items__hide,.jb-items[open] .jb-items__show{display:none}
.jb-items[open] .jb-items__hide{display:inline}
.jb-items__rows{display:grid;gap:2px;padding-top:var(--space-xs)}
.jb-items__row{display:grid;grid-template-columns:1fr auto auto;gap:var(--space-sm);align-items:baseline}
.jb-items__what{color:var(--c-text-primary);font-size:var(--text-caption)}
.jb-items__calc{color:var(--c-text-secondary);font-size:var(--text-caption2);font-variant-numeric:tabular-nums}
.jb-items__amt{color:var(--c-text-primary);font-size:var(--text-caption);font-variant-numeric:tabular-nums}
/* ＋ Photo on the work card — what the crew found, filed as the job's own record. */
.jb-photoadd{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);margin-top:var(--space-sm);padding:var(--space-sm);border-radius:var(--radius-md);background:var(--c-field-fill)}
.jb-photoadd[hidden]{display:none}
.jb-photoadd .form-input{flex:1;min-width:160px}
.jb-photoadd__count{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.jb-docbar span{color:var(--c-text-secondary);font-size:var(--text-caption);font-weight:700}
.is-picking .jb-record__row--link{cursor:copy}
.jb-record__row--picked{box-shadow:inset 3px 0 0 var(--c-brand-primary);background:color-mix(in srgb,var(--c-brand-primary) 7%,transparent)}
.jb-commercial{padding-bottom:var(--space-sm)}
.jb-commercial__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:5px var(--space-md);font-size:var(--text-caption);font-variant-numeric:tabular-nums}
.jb-commercial__row span{color:var(--c-text-secondary)}
.jb-commercial__row strong{color:var(--c-text-primary)}

/* ══ CUSTOMER EDITOR ═══════════════════════════════════════════════════════
   Editing is a bounded data-quality task, not a second customer destination. Relationship lenses
   remain on the hub behind this surface; the modal owns only fields, quality blockers, and Save. */
.modal--record:has(.cedit){display:flex;flex-direction:column;width:min(1120px,100%);max-width:1120px;height:min(760px,calc(100vh - 48px));overflow:hidden}
.modal--record:has(.cedit) .modal__header{flex:none;padding:18px 24px;border-bottom:1px solid var(--c-card-border)}
.modal--record:has(.cedit) .modal__title{font-size:var(--text-title3);font-weight:700}
.modal--record:has(.cedit) .modal__body{flex:1;min-height:0;overflow-y:auto;padding:20px 24px 96px;scroll-padding-bottom:96px}
.modal--record:has(.cedit) .modal__footer{flex:none;align-items:center;padding:14px 24px;border-top:1px solid var(--c-card-border);background:var(--c-background-secondary)}
.record__footer-note{margin-right:auto;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.modal--record:has(.cedit) .record{grid-template-columns:minmax(0,1fr) 280px;gap:var(--space-xl)}
.modal--record:has(.cedit) .record__rail{padding-left:var(--space-md);border-left:1px solid var(--c-card-border)}
.modal--record:has(.cedit) .record__actions{margin-top:var(--space-md);padding-top:var(--space-md)}
.modal--record:has(.cedit) .record__actions-label{display:none}
.modal--record:has(.cedit) .record__action--danger{font-size:var(--text-caption);font-weight:650}

.cedit{display:flex;flex-direction:column;gap:var(--space-lg)}
.cedit__context{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:-4px;font-size:var(--text-caption2)}
.cedit__context span{font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--c-brand-primary)}
.cedit__context strong{padding-left:var(--space-sm);border-left:1px solid var(--c-separator);font-weight:600;color:var(--c-text-secondary)}
.cedit__section{display:flex;flex-direction:column;gap:var(--space-sm)}
.cedit__section h2{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.cedit__section .form-group{margin:0}
.cedit__grid{display:grid;gap:var(--space-md)}
.cedit__grid--two{grid-template-columns:1fr 1fr}
.cedit__grid--location{grid-template-columns:1.15fr .8fr .8fr}
.cedit .form-input,.cedit .form-select{min-height:44px}
.cedit__section--notes .form-textarea{min-height:82px;resize:vertical}
.cedit__helper{margin-top:5px;font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-tertiary)}
.cedit__helper--warn{color:var(--c-warning)}

.cedit-quality{display:flex;flex-direction:column;gap:var(--space-md)}
.cedit-quality>h2{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.cedit-quality__issues{display:flex;flex-direction:column;gap:var(--space-sm)}
.cedit-quality__issue{display:grid;grid-template-columns:22px minmax(0,1fr);gap:var(--space-sm);padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-surface)}
.cedit-quality__issue--warn{border-color:var(--c-warning);background:var(--c-warning-tint)}
.cedit-quality__icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:800;color:var(--c-text-secondary)}
.cedit-quality__issue--warn .cedit-quality__icon{color:var(--c-warning)}
.cedit-quality__issue div{display:flex;flex-direction:column;gap:2px}
.cedit-quality__issue strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.cedit-quality__issue small{font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-secondary)}
.cedit-quality__good,.cedit-quality__empty{padding:var(--space-sm-md);border-radius:var(--radius-row);background:var(--c-brand-tint);font-size:var(--text-caption);line-height:1.4;color:var(--c-brand-primary)}
.cedit-quality__account{overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background)}
.cedit-quality__account h3{margin:0;padding:var(--space-sm-md);border-bottom:1px solid var(--c-separator);font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary)}
.cedit-quality__account>div{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:6px var(--space-sm-md);font-size:var(--text-caption2);font-variant-numeric:tabular-nums}
.cedit-quality__account span{color:var(--c-text-secondary)}
.cedit-quality__account strong{color:var(--c-text-primary)}
.cedit-quality__link{width:100%;padding:var(--space-sm);border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);font:inherit;font-size:var(--text-caption);font-weight:650;text-align:left;color:var(--c-brand-primary);cursor:pointer}

@media (max-width:820px){
  .modal--record:has(.cedit){height:calc(100vh - 24px)}
  .modal--record:has(.cedit) .record{grid-template-columns:1fr}
  .modal--record:has(.cedit) .record__rail{padding:var(--space-lg) 0 0;border-left:0;border-top:1px solid var(--c-card-border)}
}
@media (max-width:580px){
  .cedit__grid--two,.cedit__grid--location{grid-template-columns:1fr}
  .modal--record:has(.cedit) .modal__footer{flex-wrap:wrap}
  .record__footer-note{flex:1 1 100%;margin-right:0}
}

@media (max-width:840px){
  .ad-opt__workspace{grid-template-columns:1fr}
  .jb-readiness{grid-template-columns:1fr 1fr;gap:var(--space-md)}
  .jb-readiness__step::after{display:none}
  .jb-scope__drawing{grid-template-columns:180px minmax(0,1fr)}
  .ch-money-lens,.ch-activity-lens{grid-template-columns:1fr}
  .ch-ledger{grid-template-columns:1fr 1fr}
  .ch-ledger__progress{grid-column:1/-1;grid-row:2}
  .ch-drawing{grid-template-columns:150px minmax(0,1fr)}
  .ch-drawing__thumb{height:112px}
  .ch-drawing__open{grid-column:2;justify-self:start}
}
@media (max-width:580px){
  .ad-opt__head{align-items:stretch;flex-direction:column;padding:var(--space-md-lg)}
  .ad-opt__readiness{align-self:flex-start}
  .ad-opt__workspace{gap:var(--space-lg);padding:var(--space-md-lg)}
  .ad-opt__goals>div{grid-template-columns:1fr}
  .ad-opt__goal{min-height:36px}
  .ad-opt__presets{grid-template-columns:repeat(2,1fr)}
  .ad-opt__allocation-head{flex-direction:column;gap:var(--space-sm)}
  .ad-opt__allocation-head>div:last-child{align-items:flex-start;flex-direction:row;gap:var(--space-sm)}
  .jb-command-move .btn{width:100%;margin-left:0}
  .jb-readiness{grid-template-columns:1fr}
  .jb-scope__drawing{grid-template-columns:1fr}
  .jb-scope__thumb{height:190px}
  .jb-record__head{align-items:flex-start;flex-direction:column;gap:0;padding-top:var(--space-md)}
  .jb-record__tabs{width:100%}
  .jb-progress__summary{gap:var(--space-md);justify-content:space-between}
  .jb-progress{padding:0 var(--space-md)}
  .jb-progress__day{padding-left:var(--space-lg)}
  .jb-progress__photos{grid-template-columns:repeat(2,minmax(0,1fr))}
  .jb-progress__photo img{height:96px}
  .jb-progress__weather{align-items:flex-start;flex-direction:column;gap:2px}
  .ch--customer .seg--lens{overflow-x:auto;flex-wrap:nowrap}
  .ch--customer .seg--lens .seg__tab{white-space:nowrap}
  .ch-invoice-row{grid-template-columns:32px 1fr 1fr}.ch-invoice-row__icon{grid-row:1/3}.ch-invoice-row__actions{grid-column:2/-1;justify-content:flex-start}
  .ch-move--customer .btn{width:100%}
  .ch-ledger{grid-template-columns:1fr;gap:var(--space-md)}
  .ch-ledger__progress{grid-column:auto;grid-row:auto;align-items:flex-start;text-align:left}
  .ch-ledger__amount--balance{align-items:flex-start;text-align:left}
  .ch-drawing{grid-template-columns:1fr;gap:var(--space-md)}
  .ch-drawing__thumb{height:180px}
  .ch-drawing__open{grid-column:auto}
}

/* ── Add from Price Book · Import takeoff ────────────────────────────────────
   The estimate's two new doors. Both are dense scan-then-pick surfaces, so they share a row rhythm:
   a hit target on the left, identity in the middle, money right-aligned and tabular. */
.pbp__search{margin-bottom:var(--space-sm)}
.pbp__chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:var(--space-sm)}
.pbp__chip{font-size:var(--text-caption);padding:3px 10px;border-radius:var(--radius-pill);
  border:1px solid var(--c-card-border);background:none;color:var(--c-text-secondary);
  font-family:inherit;cursor:pointer;white-space:nowrap}
.pbp__chip:hover{color:var(--c-text-primary)}
.pbp__chip--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-on-brand);font-weight:650}  /* raw-color-ok: on the brand fill */
.pbp__chip small{opacity:.7;margin-left:5px;font-variant-numeric:tabular-nums}
.pbp__list{max-height:52vh;overflow-y:auto;border:1px solid var(--c-card-border);border-radius:var(--radius-card)}
.pbp__sec{font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--c-text-tertiary);background:var(--c-surface);padding:7px 12px;
  border-bottom:1px solid var(--c-card-border);position:sticky;top:0;z-index:1}
.pbp__row{display:flex;align-items:center;gap:11px;padding:9px 12px;
  border-bottom:1px solid var(--c-separator);cursor:pointer}
.pbp__row:last-child{border-bottom:0}
.pbp__row:hover{background:var(--c-surface)}
.pbp__row--on{background:var(--c-accent-tint)}
.pbp__box{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--c-card-border);flex:0 0 auto;position:relative}
.pbp__box--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary)}
.pbp__box--on::after{content:"";position:absolute;left:5px;top:1px;width:4px;height:8px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}  /* raw-color-ok: the tick on a filled checkbox */
.pbp__main{flex:1;min-width:0}
/* A picker row that also carries verbs — renaming and retiring a template, next to the name that
   is being renamed. The row itself stops being clickable when it holds its own buttons. */
.pbp__acts{display:flex;gap:6px;flex:0 0 auto}
.pbp__row:has(.pbp__acts){cursor:default}
.pbp__name{font-size:var(--text-caption);font-weight:650;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pbp__book{font-size:9px;color:var(--c-text-tertiary)}
.pbp__type{font-size:9px;font-weight:700;padding:1px 5px;border-radius:var(--radius-pill);
  text-transform:uppercase;letter-spacing:.04em;background:var(--c-control-fill);color:var(--c-text-tertiary)}
.pbp__type--material{background:var(--c-accent-tint);color:var(--c-brand-primary)}
.pbp__desc{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:1px}
.pbp__price{text-align:right;flex:0 0 auto;font-variant-numeric:tabular-nums;min-width:74px}
.pbp__price b{font-size:var(--text-caption);font-weight:700}
.pbp__price span{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.pbp__qty{flex:0 0 92px;display:flex;align-items:center;gap:5px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.pbp__qtyin{height:26px;width:56px;font-size:var(--text-caption);text-align:center}
.pbp__empty{padding:28px;text-align:center;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.pbp__empty b{display:block;color:var(--c-text-primary);margin-bottom:5px}
.pbp__count{flex:1;font-size:var(--text-caption);color:var(--c-text-tertiary)}

.tkp__lede{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-bottom:var(--space-sm)}
.tkp__head,.tkp__row{display:grid;grid-template-columns:18px 1fr 110px minmax(0,1.4fr) 108px;
  gap:11px;align-items:center}
.tkp__head{padding:7px 12px;background:var(--c-surface);border:1px solid var(--c-card-border);
  border-radius:var(--radius-card) var(--radius-card) 0 0;font-size:10px;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;color:var(--c-text-tertiary)}
.tkp__list{border:1px solid var(--c-card-border);border-top:0;border-radius:0 0 var(--radius-card) var(--radius-card)}
.tkp__row{padding:10px 12px;border-bottom:1px solid var(--c-separator)}
.tkp__row:last-child{border-bottom:0}
.tkp__box{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--c-card-border);
  position:relative;cursor:pointer}
.tkp__box--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary)}
.tkp__box--on::after{content:"";position:absolute;left:5px;top:1px;width:4px;height:8px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}  /* raw-color-ok: the tick on a filled checkbox */
.tkp__what b{font-size:var(--text-caption);font-weight:650}
.tkp__sub{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.tkp__meas{font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.tkp__meas b{color:var(--c-text-primary)}
.tkp__pick{min-width:0;display:flex;align-items:center;gap:6px}
.tkp__sel{height:30px;font-size:var(--text-caption);min-width:0;flex:1}
/* A match the picker made, not one the estimator made — marked so it never reads as their choice. */
.tkp__sel--auto{border-color:var(--c-brand-primary)}
.tkp__auto{font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--c-brand-primary);flex:0 0 auto}
.tkp__none{font-size:var(--text-caption2);color:var(--c-text-tertiary);font-style:italic}
.tkp__amt{text-align:right;font-size:var(--text-caption);font-weight:650;font-variant-numeric:tabular-nums}
.tkp__amt small{display:block;font-size:var(--text-caption2);font-weight:500;color:var(--c-text-tertiary)}
.tkp__dash{color:var(--c-text-tertiary)}
.tkp__note{margin-top:var(--space-sm);padding:9px 12px;border:1px dashed var(--c-brand-primary);
  border-radius:8px;background:var(--c-accent-tint);font-size:var(--text-caption);
  color:var(--c-text-secondary);line-height:1.5}
.tkp__note[hidden]{display:none}
.tkp__note b{color:var(--c-brand-primary)}
.tkp__count{flex:1;font-size:var(--text-caption);color:var(--c-text-tertiary)}

/* ── The proposal's derived status, and its readiness ────────────────────────
   The pipeline is READ-ONLY on purpose — status advances by doing the thing, never by picking it
   from a list (see pipelineHtml). */
.pf-pipe{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.pf-pipe__step{font-size:var(--text-caption2);font-weight:650;color:var(--c-text-tertiary)}
.pf-pipe__step--on{color:var(--c-text-secondary)}
.pf-pipe__step--now{color:var(--c-brand-primary);font-weight:700}
.pf-pipe__arrow{font-size:11px;color:var(--c-text-tertiary)}
.pf-pipe__off{font-size:var(--text-caption);font-weight:700}
.pf-pipe__why{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:3px}
.pf-ready{display:flex;flex-direction:column;gap:2px;margin-top:5px}
.pf-ready__row{display:flex;align-items:center;gap:6px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.pf-ready__row--on{color:var(--c-text-secondary)}
.pf-ready__tick{width:11px;text-align:center;color:var(--c-text-tertiary)}
.pf-ready__row--on .pf-ready__tick{color:var(--c-brand-primary);font-weight:700}

/* Customer, document, status and date share two columns only while both columns have room for an
   actual control. The old inline grid kept each select's intrinsic width on a phone, making the
   record wider than the viewport and clipping the contract number, date, scope and lock notice. */
.pf-identity{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-lg)}
.pf-identity__wide{grid-column:span 2}
@media (max-width:680px){
  .pf-identity{grid-template-columns:minmax(0,1fr)}
  .pf-identity__wide{grid-column:auto}
}

/* ── The proposal's pricing strip ────────────────────────────────────────────
   Tier is a decision about how the deal is SOLD, so it sits above the totals rather than in a
   settings drawer: changing it moves every book-priced line, and you should see that happen. */
.pf-pricing{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-md);
  padding:var(--space-sm) var(--space-md);border:1px solid var(--c-card-border);
  border-radius:var(--radius-card);background:var(--c-surface)}
.pf-pricing[hidden]{display:none}
.pf-pricing__row{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}
.pf-pricing__k{font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--c-text-tertiary);min-width:74px}
.pf-pricing__sel{height:28px;font-size:var(--text-caption);max-width:240px}
.pf-tiers{display:flex;gap:4px;flex-wrap:wrap}
.pf-tier{font-size:var(--text-caption);padding:3px 11px;border-radius:var(--radius-pill);
  border:1px solid var(--c-card-border);background:none;color:var(--c-text-secondary);
  font-family:inherit;cursor:pointer}
.pf-tier:hover{color:var(--c-text-primary)}
.pf-tier--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-on-brand);font-weight:650}  /* raw-color-ok: on the brand fill */
/* Only when something IS stale — a banner that always shows is one nobody reads. */
.pf-stale{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  flex-wrap:wrap;font-size:var(--text-caption);color:var(--c-text-secondary);
  border-top:1px solid var(--c-separator);padding-top:var(--space-sm)}

/* ── Terms & conditions ──────────────────────────────────────────────────────
   The legal half of the document. Text is shown RESOLVED — a clause reading "{{depositPercent}} due
   at signing" while you draft tells you nothing about what the customer will read. */
/* LENSES — Build · Present · Track over one record. Underline tabs, matching the app's segmented
   hubs: the record is one page, and these are lenses on it rather than steps through it. */
.pf-lenses{display:flex;gap:0;border-bottom:1px solid var(--c-border);margin:var(--space-lg) 0 var(--space-md)}
.pf-lens-tab{appearance:none;background:none;border:0;border-bottom:2px solid transparent;
  padding:8px 14px;font-size:13px;font-weight:600;color:var(--c-text-tertiary);cursor:pointer;
  font-family:inherit;white-space:nowrap}
.pf-lens-tab:hover{color:var(--c-text-secondary)}
.pf-lens-tab--on{color:var(--c-text-primary);border-bottom-color:var(--d-green)}
.pf-lens-tab:focus-visible{outline:2px solid var(--d-green);outline-offset:-2px;border-radius:4px}
.pf-lens[hidden]{display:none}

/* TRACK — what happened to this record, from what it already knew. */
.pf-track{border:1px solid var(--c-border);border-radius:10px;overflow:hidden}
.pf-track__row{display:flex;align-items:baseline;gap:var(--space-md);padding:10px 13px;
  border-bottom:1px solid var(--d-border-light)}
.pf-track__row:last-child{border-bottom:0}
.pf-track__k{flex:0 0 190px;font-size:13px;color:var(--c-text-secondary)}
.pf-track__v{font-size:13px;color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.pf-track__v--none{color:var(--c-text-tertiary);font-style:italic}
.pf-track__foot{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;margin-top:var(--space-md)}

.pf-terms__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}
.pf-terms__frozen{font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--c-text-tertiary);border:1px solid var(--c-card-border);border-radius:var(--radius-pill);padding:1px 7px}
.pf-terms__empty{font-size:var(--text-caption);color:var(--c-text-tertiary);line-height:1.55;
  border:1px dashed var(--c-card-border);border-radius:var(--radius-card);padding:var(--space-md)}
.pf-clause{border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-sm)}
.pf-clause:last-child{margin-bottom:0}
.pf-clause__h{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.pf-clause__k{font-size:9px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--c-text-tertiary)}
.pf-clause__n{font-size:var(--text-caption);font-weight:650;flex:1;min-width:0}
.pf-clause__lock,.pf-clause__edited{font-size:9px;font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;color:var(--c-text-tertiary)}
.pf-clause__edited{color:var(--c-brand-primary)}
.pf-clause__x{background:none;border:0;color:var(--c-text-tertiary);font-size:15px;line-height:1;
  cursor:pointer;padding:0 2px;font-family:inherit}
.pf-clause__x:hover{color:var(--c-danger)}
.pf-clause__t{font-size:var(--text-caption2);color:var(--c-text-secondary);line-height:1.55;
  margin-top:4px;white-space:pre-wrap}

/* Version history — an audit trail, deliberately read-only. A "restore" button would let somebody
   quietly re-issue an old price under a current number. */
.vh-row{display:flex;align-items:center;gap:var(--space-md);padding:10px 12px;
  border-bottom:1px solid var(--c-separator)}
.vh-row:last-child{border-bottom:0}
.vh-row--now{background:var(--c-accent-tint)}
.vh-row__v{font-size:var(--text-caption);font-weight:700;min-width:64px;color:var(--c-text-secondary)}
.vh-row--now .vh-row__v{color:var(--c-brand-primary)}
.vh-row__m{flex:1;min-width:0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.vh-row__t{font-size:var(--text-caption);font-weight:650;font-variant-numeric:tabular-nums}

/* ── Proposal photos ─────────────────────────────────────────────────────────
   What the customer is shown and what gets baked into the signed PDF. Captions travel with them —
   "existing damage, north wall" is evidence; the same photo uncaptioned is decoration. */
.pp__head{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}
.pp__k{font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary);flex:1}
.pp__n{font-size:var(--text-caption2);color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.pp__ro{font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-tertiary)}
.pp__add{cursor:pointer}
.pp__add--off{opacity:.45;pointer-events:none}
.pp__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:var(--space-sm)}
.pp__cell{position:relative;margin:0;border:1px solid var(--c-card-border);border-radius:var(--radius-card);overflow:hidden;background:var(--c-surface)}
.pp__img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover}
.pp__cap{height:28px;font-size:var(--text-caption2);border:0;border-top:1px solid var(--c-separator);border-radius:0}
.pp__cap-ro{font-size:var(--text-caption2);color:var(--c-text-secondary);padding:5px 8px;border-top:1px solid var(--c-separator)}
.pp__x{position:absolute;top:5px;right:5px;width:22px;height:22px;border:0;border-radius:99px;
  background:rgba(0,0,0,.55);color:#fff;font-size:14px;line-height:1;cursor:pointer;font-family:inherit}  /* raw-color-ok: a scrim over an arbitrary photo */
.pp__empty{font-size:var(--text-caption);color:var(--c-text-tertiary);line-height:1.55;
  border:1px dashed var(--c-card-border);border-radius:var(--radius-card);padding:var(--space-md)}
.pp__busy{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:var(--space-sm)}
.pp__busy[hidden]{display:none}

/* ── Photo strip ─────────────────────────────────────────────────────────────
   `BusinessPhotoPickerView`, ported. Permits, punch items and safety incidents mount it. The app
   lays its thumbnails out as a horizontal 72pt run, not a grid — attachments on a field record are
   a short reel you scan, and a grid would give three permit photos the weight of a gallery. */
.ps__head{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}
.ps__k{font-size:9px;font-weight:700;letter-spacing:.06em;color:var(--c-text-secondary);flex:1;
  font-variant-numeric:tabular-nums}
.ps__add{cursor:pointer}
.ps__strip{display:flex;gap:var(--space-sm);overflow-x:auto;padding-bottom:2px}
.ps__cell{position:relative;margin:0;flex:0 0 auto}
.ps__open{display:block;border-radius:var(--radius-base);overflow:hidden;border:1px solid var(--c-card-border)}
.ps__img{display:block;width:72px;height:72px;object-fit:cover;background:var(--c-surface)}
.ps__x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border:0;border-radius:99px;
  background:var(--c-danger);color:var(--c-on-danger);font-size:13px;line-height:1;cursor:pointer;font-family:inherit}  /* raw-color-ok: the glyph on a danger chip */
.ps__empty{font-size:var(--text-caption);color:var(--c-text-tertiary);line-height:1.55}
.ps__busy{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:var(--space-sm)}
.ps__busy[hidden]{display:none}

/* ── The curation mirror ─────────────────────────────────────────────────────
   One quiet line on the work card saying what the homeowner's portal is showing, and a door to the
   gallery where the eye toggle lives. Deliberately not a card or a badge: the app makes it a plain
   button in secondary text, because it reports a state rather than asking for an action. */
.jb-curation{display:flex;align-items:center;gap:var(--space-xs);width:100%;padding:0 0 var(--space-sm);
  border:0;background:none;cursor:pointer;text-align:left;font:inherit;
  font-size:var(--text-caption);color:var(--c-text-secondary)}
.jb-curation:hover{color:var(--c-text-primary)}
.jb-curation__eye{font-size:var(--text-caption2);line-height:1}

/* The facts verb. Tinted when the rail is showing, the way the app tints its info glyph. */
.jd__facts[aria-pressed="true"]{color:var(--c-brand-primary);border-color:var(--c-brand-primary)}

/* The customer book's empty faces. "Did you mean" keeps the guesses on the sentence's own line —
   they are a continuation of it, not a separate control group. */
.cust-empty__mean{text-align:center;font-size:var(--text-caption);color:var(--c-text-tertiary);
  margin:var(--space-sm) 0 0;display:flex;gap:var(--space-sm);justify-content:center;flex-wrap:wrap}
.cust-empty__guess{border:0;background:none;padding:0;cursor:pointer;font:inherit;font-weight:700;
  font-size:var(--text-caption);color:var(--c-brand-primary)}
.cust-empty__clear{text-align:center;margin:var(--space-sm) 0 0}

/* ── The change order's job picker ───────────────────────────────────────────
   The job first, with its contract beside it — the number the change order is about to move. */
.cojp__lead{font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.5;
  margin:0 0 var(--space-md)}
.cojp__list{display:flex;flex-direction:column;gap:var(--space-xs);margin-top:var(--space-sm)}
.cojp__row{display:flex;align-items:center;gap:var(--space-md);width:100%;text-align:left;
  padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-surface);cursor:pointer;font:inherit}
.cojp__row:hover{border-color:var(--c-brand-primary)}
.cojp__who{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.cojp__who strong{font-size:var(--text-body);color:var(--c-text-primary)}
.cojp__who span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.cojp__money{display:flex;flex-direction:column;align-items:flex-end;gap:1px}
.cojp__money strong{font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.cojp__money span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.cojp__chev{color:var(--c-text-tertiary);font-size:var(--text-body)}
.cojp__empty{border:1px dashed var(--c-card-border);border-radius:var(--radius-card);
  padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-xs);
  font-size:var(--text-caption);color:var(--c-text-tertiary);line-height:1.55}
.cojp__empty strong{color:var(--c-text-secondary);font-size:var(--text-body)}

/* The coaching nudge: quiet by design. It names the next move, and a line that shouted would
   compete with the band's own figures for the same glance. */
.co-nudge{display:flex;align-items:center;gap:var(--space-xs);margin:var(--space-sm) 0 0;
  font-size:var(--text-caption);color:var(--c-text-tertiary)}
.co-nudge__bulb{font-size:var(--text-caption2);line-height:1}
#co-nudge[hidden]{display:none}

/* ── Ready to send? ──────────────────────────────────────────────────────────
   The four conditions that gate Send, shown before the button is pressed. A done tick and an
   undone one differ in weight as well as glyph, so the remaining work reads at a glance. */
.co-ready{border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  padding:var(--space-md);margin:var(--space-md) 0;display:flex;flex-direction:column;
  gap:var(--space-xs)}
.co-ready__h{display:flex;align-items:center;justify-content:space-between;
  margin-bottom:var(--space-xs)}
.co-ready__n{font-size:var(--text-caption);font-weight:700;color:var(--c-text-tertiary);
  font-variant-numeric:tabular-nums}
.co-ready__n--done{color:var(--c-brand-primary)}
.co-ready__row{display:flex;align-items:baseline;gap:var(--space-sm);font-size:var(--text-caption);
  color:var(--c-text-tertiary)}
.co-ready__row.is-done{color:var(--c-text-secondary)}
.co-ready__row.is-done .co-ready__tick{color:var(--c-brand-primary)}
.co-ready__label{font-weight:600}
.co-ready__detail{color:var(--c-text-tertiary);font-weight:400;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── The contract header ─────────────────────────────────────────────────────
   What this change amends, above the form. The three facts read as one line because they answer
   one question; the unchosen ones are invitations, so they stay legible rather than greying out. */
.co-ctx{margin:0 0 var(--space-md);padding-bottom:var(--space-sm);
  border-bottom:1px solid var(--c-separator)}
.co-ctx__title{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}
.co-ctx__title strong{font-size:var(--text-title3)}
.co-ctx__pill{font-size:var(--text-caption2);font-weight:700;padding:1px 7px;
  border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary)}
.co-ctx__pill--warn{background:var(--d-amber-light);color:var(--d-amber)}
.co-ctx__pill--brand{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.co-ctx__pill--danger{background:var(--d-red-light);color:var(--d-red)}
.co-ctx__facts{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;
  font-size:var(--text-caption);color:var(--c-text-secondary)}
.co-ctx__fact{display:inline-flex;align-items:center;gap:4px;min-width:0}
.co-ctx__fact--fixed{color:var(--d-purple)}
.co-ctx__fact--open{color:var(--c-text-tertiary)}
.co-ctx__edit{margin-left:auto;border:0;background:none;padding:0;cursor:pointer;font:inherit;
  font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary)}
#co-job-group[hidden]{display:none}

/* Supporting details: what rides on this paper besides the money. A set chip is ticked and inked;
   an empty one stays quiet and still says what is absent — "No clauses" is a fact about the
   document, where a missing chip would be a fact about the interface. */
.co-details{margin:var(--space-md) 0 0}
.co-details__k{font-size:var(--text-caption2);font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--c-text-tertiary);margin-bottom:var(--space-xs)}
.co-details__chips{display:flex;flex-wrap:wrap;gap:var(--space-sm)}
.co-details__chip{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;
  border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-tertiary);
  font-size:var(--text-caption)}
.co-details__chip.is-set{background:var(--c-brand-tint);color:var(--c-brand-primary);font-weight:600}

/* ── BY CUSTOMER ─────────────────────────────────────────────────────────────
   The name truncates and the amount sizes itself; the BAR absorbs the difference. A fixed box for
   the figure is how "$13,310.00" ends up wrapped as "$13,310.0" over a lone zero. */
.co-bycust{padding:var(--space-md);margin-bottom:var(--space-md)}
.co-bycust__k{font-size:var(--text-caption2);font-weight:700;letter-spacing:.06em;
  color:var(--c-text-secondary);margin-bottom:var(--space-sm)}
.co-bycust__row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:6px}
.co-bycust__who{flex:0 0 120px;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-size:var(--text-caption);color:var(--c-text-secondary)}
.co-bycust__track{flex:1;min-width:0;height:14px;border-radius:3px;background:var(--c-field-fill)}
.co-bycust__bar{display:block;height:100%;border-radius:3px;background:var(--d-blue);opacity:.6}
.co-bycust__amt{flex:0 0 auto;min-width:70px;text-align:right;font-size:var(--text-caption2);
  font-weight:650;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.co-bycust__hint{margin:var(--space-xs) 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
#co-by-customer[hidden]{display:none}

/* The five quick reasons. A lit chip means its phrase is IN the text below — the chip reports the
   sentence rather than owning it, which is why typing the word lights it too. */
.co-reasons{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-bottom:var(--space-xs)}
.co-reason{border:1px solid var(--c-card-border);background:var(--c-surface);cursor:pointer;
  font:inherit;font-size:var(--text-caption2);padding:2px 9px;border-radius:var(--radius-pill);
  color:var(--c-text-secondary)}
.co-reason:hover{border-color:var(--c-brand-primary)}
.co-reason.is-on{background:var(--c-brand-tint);border-color:var(--c-brand-primary);
  color:var(--c-brand-primary);font-weight:600}

/* Out for approval. Said before the typing starts, because told first it is a decision and told
   after it is only news. */
.co-pending-warn{display:flex;gap:var(--space-xs);align-items:flex-start;
  padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-md);
  border-radius:var(--radius-card);background:var(--d-amber-light);color:var(--d-amber);
  font-size:var(--text-caption);line-height:1.5}

/* WHEN THEY APPROVE. Plain sentences with figures in them — the card's job is to say what already
   happens, so it reads as description rather than as a control. */
.co-mach{border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  padding:var(--space-md);margin:var(--space-md) 0;display:flex;flex-direction:column;
  gap:var(--space-xs)}
.co-mach__k{font-size:9px;font-weight:700;letter-spacing:.06em;color:var(--c-text-secondary);
  margin-bottom:var(--space-xs)}
.co-mach__row{display:flex;gap:var(--space-sm);align-items:flex-start;
  font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.5}
.co-mach__i{flex:0 0 auto;color:var(--d-purple)}

/* Waiting on the customer. The unsent line is the one that changes what somebody does next, so it
   is tinted where the sent one stays quiet — a receipt is a fact, an absent receipt is a job. */
.co-wait{margin:var(--space-sm) 0;padding:var(--space-sm) var(--space-md);
  border-radius:var(--radius-card);background:var(--c-field-fill)}
.co-wait__k{font-size:var(--text-caption);font-weight:700;color:var(--d-amber);
  margin-bottom:2px}
.co-wait__l{display:flex;gap:var(--space-xs);align-items:baseline;
  font-size:var(--text-caption2);color:var(--c-text-secondary);line-height:1.5}
.co-wait__l--unsent{color:var(--d-amber);font-weight:600}

/* CHANGES ON THIS CONTRACT. A voided row keeps its place and strikes its figure — it is part of
   what happened, and a history that drops what was voided is one somebody will mis-remember. */
.co-hist{border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  padding:var(--space-md);margin:var(--space-md) 0}
.co-hist__h{display:flex;align-items:baseline;justify-content:space-between;
  margin-bottom:var(--space-sm)}
.co-hist__k{font-size:9px;font-weight:700;letter-spacing:.06em;color:var(--c-text-secondary)}
.co-hist__n{font-size:var(--text-caption2);color:var(--c-text-tertiary);
  font-variant-numeric:tabular-nums}
.co-hist__row{display:flex;align-items:center;gap:var(--space-sm);padding:5px 0;
  border-top:1px solid var(--c-separator)}
.co-hist__row:first-of-type{border-top:0}
.co-hist__dot{flex:0 0 auto;width:8px;height:8px;border-radius:99px;background:var(--c-text-tertiary)}
.co-hist__dot--in{background:var(--d-purple)}
.co-hist__dot--open{background:var(--d-amber)}
.co-hist__dot--dead{background:var(--c-text-tertiary)}
.co-hist__who{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.co-hist__who strong{font-size:var(--text-caption);color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.co-hist__who span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.co-hist__d{flex:0 0 auto;font-size:var(--text-caption);font-weight:650;
  font-variant-numeric:tabular-nums}
.co-hist__d--in{color:var(--d-purple)}
.co-hist__d--open{color:var(--d-amber)}
.co-hist__d--dead{color:var(--c-text-tertiary);text-decoration:line-through}
.co-hist__f{margin:var(--space-sm) 0 0;padding-top:var(--space-sm);
  border-top:1px solid var(--c-separator);font-size:var(--text-caption2);
  color:var(--c-text-tertiary)}
#co-history[hidden]{display:none}

/* Save this draft. Shown only before the first save, and quiet — it explains a state rather than
   asking for anything the Save button is not already asking for. */
.co-save1st{display:flex;flex-direction:column;gap:2px;padding:var(--space-sm) var(--space-md);
  margin:var(--space-md) 0;border-radius:var(--radius-card);background:var(--c-field-fill)}
.co-save1st strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.co-save1st span{font-size:var(--text-caption2);color:var(--c-text-secondary);line-height:1.5}

/* THEIR REASON. Their words in quotes, so it reads as the customer's sentence and not the office's
   summary of it — a refusal is evidence, and evidence is quoted. */
.co-decline{margin:var(--space-sm) 0;padding:var(--space-sm) var(--space-md);
  border-radius:var(--radius-card);background:var(--d-amber-light)}
.co-decline__k{font-size:9px;font-weight:700;letter-spacing:.06em;color:var(--d-amber);
  margin-bottom:2px}
.co-decline__t{margin:0;font-size:var(--text-caption);color:var(--c-text-primary);line-height:1.5}
.co-decline__t--none{color:var(--c-text-tertiary);font-style:italic}
.co-decline__s{margin-top:2px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* ── Good · better · best ────────────────────────────────────────────────────
   One scope, priced two or three ways. The comparison strip carries the SPREAD because that is the
   question an estimator has to answer out loud. */
.po{margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);
  border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-surface)}
.po[hidden]{display:none}
.po__hint{display:block;font-size:var(--text-caption2);color:var(--c-text-tertiary);
  line-height:1.5;margin-top:5px;max-width:62ch}
.po__tabs{display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.po__tab{font-size:var(--text-caption);padding:4px 12px;border-radius:var(--radius-pill);
  border:1px solid var(--c-card-border);background:none;color:var(--c-text-secondary);
  font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.po__tab--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-on-brand);font-weight:650}  /* raw-color-ok: on the brand fill */
.po__star{font-size:10px;color:var(--c-warning)}
.po__tab--on .po__star{color:#fff}  /* raw-color-ok: on the brand fill */
.po__add{width:26px;height:26px;border-radius:99px;border:1px dashed var(--c-card-border);
  background:none;color:var(--c-text-tertiary);cursor:pointer;font-family:inherit;font-size:14px;line-height:1}
.po__edit{display:flex;gap:var(--space-sm);align-items:center;flex-wrap:wrap;margin-top:var(--space-sm)}
.po__name{height:28px;font-size:var(--text-caption);max-width:200px}
.po__cmp{display:flex;gap:var(--space-md);flex-wrap:wrap;align-items:baseline;
  margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--c-separator);
  font-size:var(--text-caption);color:var(--c-text-tertiary)}
.po__cmp-i b{color:var(--c-text-secondary);font-weight:650;margin-right:5px}
.po__cmp-i--rec b{color:var(--c-brand-primary)}
.po__spread{margin-left:auto;font-size:var(--text-caption2)}

/* ── The change-order editor ─────────────────────────────────────────────────
   The one document that exists because the contract is already locked. Its rail leads with the
   contract impact, because that — not the line total — is what a change ORDER is. */
.co-lines{margin-top:var(--space-lg)}
.co-lines__h{display:flex;align-items:baseline;gap:var(--space-md);flex-wrap:wrap;margin-bottom:var(--space-sm)}
.co-lines__k{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--c-text-tertiary)}
.co-lines__hint{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
/* A credit lowers a signed contract — the one honest way to do that, so it is marked, not hidden. */
.co-line--credit td{background:var(--c-warning-tint)}
.co-book{display:block;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--c-text-tertiary)}
.co-money{display:flex;flex-direction:column;align-items:flex-end;gap:5px;margin-top:var(--space-md);font-size:var(--text-caption)}
.co-money__r{display:flex;align-items:center;gap:var(--space-sm)}
.co-money__r span{color:var(--c-text-tertiary)}
.co-money__r strong{min-width:88px;text-align:right;font-variant-numeric:tabular-nums}
.co-money__r--big{font-size:var(--text-subhead);padding-top:5px;border-top:1px solid var(--c-separator)}
.co-cost{margin-top:var(--space-md);max-width:260px}
.co-cost .form-input{height:30px}
.co-hero{font-size:var(--text-title3);font-weight:700;color:var(--c-brand-primary);
  font-variant-numeric:tabular-nums;margin-top:2px}
.co-hero--struck{text-decoration:line-through;color:var(--c-text-tertiary)}
.co-pipe{display:flex;align-items:center;gap:5px;margin-top:3px;flex-wrap:wrap}
.co-pipe__s{font-size:var(--text-caption2);font-weight:650;color:var(--c-text-tertiary)}
.co-pipe__s--on{color:var(--c-brand-primary)}
/* A REACHED step and the step you are ON read differently: reached is filled, current is outlined.
   Voided is red and carries a cross rather than a tick — a refused change wearing a checkmark
   would read as agreed. */
.co-pipe__s--done{color:var(--c-brand-primary)}
.co-pipe__s--now{color:var(--c-brand-primary);text-decoration:underline;text-underline-offset:3px}
.co-pipe__s--danger.co-pipe__s--done{color:var(--d-red)}
.co-pipe__s--info.co-pipe__s--done{color:var(--d-blue)}
.co-pipe__a{font-size:10px;color:var(--c-text-tertiary)}
.co-pipe__a--on{color:var(--c-brand-primary)}
/* Who agreed, and how — visible on the card, not just stored. An approval nobody can attribute is
   the record somebody reaches for when a customer asks why the contract went up. */
.co-card__who{font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-top:4px}

/* The New-job form's crew picker — a roster, not a dropdown: assigning two people is the common
   case and a multi-select hides that behind a modifier key nobody discovers. */
.jf-crew{display:flex;flex-wrap:wrap;gap:6px}
.jf-crew__p{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;
  border:1px solid var(--c-card-border);border-radius:var(--radius-pill);
  font-size:var(--text-caption);cursor:pointer}
.jf-crew__p:has(input:checked){background:var(--c-accent-tint);border-color:var(--c-brand-primary);color:var(--c-brand-primary)}

/* Invoice workspace. The document itself is deliberately absent from this stylesheet: it lives in
 * the canonical server renderer and is hosted here in a sandboxed frame. */
.ipreview{min-width:0;color:var(--c-text-primary)}
.ipreview__header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:22px 28px;border-bottom:1px solid var(--c-card-border);background:var(--c-card-background)}
.ipreview__back{margin:0 0 12px;padding:0;border:0;background:none;color:var(--c-brand-primary);font-size:var(--text-body);font-weight:650;cursor:pointer}
.ipreview__title-line{display:flex;align-items:center;gap:12px}.ipreview__title-line h1{margin:0;font-size:var(--text-title1);line-height:1.05;letter-spacing:-.03em}
.ipreview__header p{margin:8px 0 0;color:var(--c-text-secondary);font-size:var(--text-body)}.ipreview__header p span{margin:0 7px;color:var(--c-text-tertiary)}
.ipreview__status{display:inline-flex;padding:5px 10px;border-radius:999px;background:var(--c-control-fill);color:var(--c-text-secondary);font-size:var(--text-caption);font-weight:700}
.ipreview__status--sent,.ipreview__status--paid{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.ipreview__actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.ipreview__workspace{display:grid;grid-template-columns:minmax(620px,1fr) 308px;gap:20px;padding:20px 28px 32px;background:var(--c-background-secondary)}
.ipreview__canvas{display:flex;min-width:0;min-height:700px;flex-direction:column;align-items:stretch;padding:16px 22px 0;border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-control-fill);overflow:auto}
.ipreview__artifact-note{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:0 0 14px;padding:0 2px;color:var(--c-text-secondary);font-size:var(--text-caption)}
.ipreview__artifact-note span{display:flex;align-items:center;gap:8px;font-weight:700;color:var(--c-brand-primary)}.ipreview__artifact-note i{width:8px;height:8px;border-radius:50%;background:var(--c-brand-primary);box-shadow:0 0 0 4px var(--c-brand-tint)}
.ipreview__artifact-note strong{font-weight:600;color:var(--c-text-tertiary)}
.ipreview__stage{position:relative;flex:1;min-width:0;min-height:620px;padding:22px;background:color-mix(in srgb,var(--c-control-fill) 88%,var(--c-card-border));border-radius:var(--radius-md);overflow:auto}
.ipreview__loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;color:var(--c-text-secondary);text-align:center}.ipreview__loading[hidden]{display:none}.ipreview__loading strong{color:var(--c-text-primary)}.ipreview__loading small{max-width:280px;line-height:1.45}.ipreview__loading .btn{margin-top:8px}
.ipreview__spinner{width:24px;height:24px;border:2px solid var(--c-card-border);border-top-color:var(--c-brand-primary);border-radius:50%;animation:ipreview-spin .8s linear infinite}@keyframes ipreview-spin{to{transform:rotate(360deg)}}
.ipreview__frame-wrap{margin:0 auto;background:var(--c-card-background);box-shadow:0 12px 32px rgba(20,35,26,.14);transition:width 150ms ease,height 150ms ease}.ipreview__frame-wrap[hidden]{display:none}
.ipreview__frame{display:block;width:860px;min-height:880px;border:0;background:var(--c-card-background);transform-origin:top left;transition:transform 150ms ease}
.ipreview__zoom{position:sticky;bottom:0;display:flex;align-items:center;align-self:center;gap:14px;margin-top:14px;padding:8px 12px;border:1px solid var(--c-card-border);border-radius:10px 10px 0 0;background:var(--c-card-background);box-shadow:0 4px 14px rgba(20,35,26,.08);font-size:var(--text-caption);z-index:2}.ipreview__zoom button{width:30px;height:30px;border:1px solid var(--c-card-border);border-radius:7px;background:var(--c-card-background);cursor:pointer}.ipreview__zoom span:last-child{margin-left:22px;color:var(--c-text-secondary)}
.ipreview__rail{display:flex;flex-direction:column;gap:12px}.ipreview-card{padding:16px;border:1px solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background)}.ipreview-card h2{margin:0 0 13px;padding-bottom:12px;border-bottom:1px solid var(--c-card-border);font-size:var(--text-body);font-weight:750}.ipreview-card>p{margin:10px 0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.45}
.ipreview-card__facts{display:grid;grid-template-columns:1fr auto;gap:10px;margin:0}.ipreview-card__facts dt,.ipreview-card__facts dd{margin:0;font-size:12px}.ipreview-card__facts dd{max-width:178px;font-weight:650;text-align:right;overflow-wrap:anywhere}
.ipreview-alert{display:flex;align-items:center;gap:9px;padding:10px;border-radius:var(--radius-md);background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption)}.ipreview-alert>span{display:grid;width:20px;height:20px;place-items:center;border-radius:50%;background:var(--c-warning);color:var(--c-card-background);font-weight:800}.ipreview-alert--ready{background:var(--c-brand-tint);color:var(--c-brand-primary)}.ipreview-alert--ready>span{background:var(--c-brand-primary)}
.ipreview-email{display:grid;gap:8px;margin-top:12px}.ipreview-email[hidden]{display:none}.ipreview-email label{font-size:var(--text-caption);font-weight:700}.ipreview-email input{height:38px;padding:0 10px;border:1px solid var(--c-card-border);border-radius:var(--radius-md);font:inherit}.ipreview-email>div{display:flex;justify-content:flex-end;gap:8px}
.ipreview__missing{color:var(--c-danger);font-weight:750}.ipreview__check{color:var(--c-brand-primary)!important;font-weight:650}.ipreview-card__balance{display:block;margin-bottom:6px;font-size:var(--text-body)}.ipreview-card__link{display:flex;width:100%;justify-content:space-between;margin:14px 0 -4px;padding:12px 0 0;border:0;border-top:1px solid var(--c-card-border);background:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
@media(max-width:1050px){.ipreview__header{align-items:flex-start;flex-direction:column}.ipreview__workspace{grid-template-columns:1fr}.ipreview__rail{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.ipreview__canvas{min-height:620px}}
@media(max-width:700px){.ipreview__header,.ipreview__workspace{padding-left:16px;padding-right:16px}.ipreview__actions{justify-content:flex-start}.ipreview__workspace{display:block}.ipreview__canvas{min-height:520px;padding:12px 10px 0}.ipreview__stage{min-height:500px;padding:12px}.ipreview__artifact-note strong{display:none}.ipreview__rail{display:flex;margin-top:14px}.ipreview__zoom span:last-child{display:none}}

/* Let customer invoice facts yield space before the action buttons clip. */
@media (min-width: 901px) {
  .ch-invoice-row {
    grid-template-columns: 32px minmax(0, 1.1fr) minmax(0, .8fr) minmax(0, .8fr) minmax(0, 1fr) max-content;
  }

  .ch-invoice-row > * {
    min-width: 0;
  }
}

/* Customer activity: the quick note stays in place; Add details opens a focused record sheet. */
.cas-backdrop {
  align-items: stretch;
  justify-content: flex-end;
  padding: 0;
  background: color-mix(in srgb, var(--d-text-2) 34%, transparent);
}

.cas-backdrop .modal--activity-sheet {
  display: flex;
  flex-direction: column;
  width: min(560px, 100vw);
  max-width: 560px;
  max-height: 100vh;
  height: 100vh;
  margin: 0;
  border-radius: 16px 0 0 16px;
  box-shadow: -20px 0 56px rgba(18, 38, 28, .18);
}

.modal--activity-sheet .modal__header {
  padding: 26px 24px 16px;
}

.modal--activity-sheet .modal__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 0 24px 24px;
}

.modal--activity-sheet .modal__footer {
  margin-top: auto;
  padding: 16px 24px 20px;
  background: var(--d-bg-2);
  border-top: 1px solid var(--d-border);
}

.cas {
  display: grid;
  gap: 24px;
}

.cas__context {
  margin: 0;
  color: var(--d-text-3);
  font-size: 12px;
}

/* THE MAP PIN'S MONEY (customers e046). `Annotation` stacks the initials circle over a warning
   capsule when the customer owes — the thing that makes the map lens worth opening. */
.cust-map-pin__stack{display:grid;justify-items:center;gap:2px}
.cust-map-pin__owed{padding:1px 6px;border-radius:20px;background:var(--c-warning);color:var(--c-on-warning);font-size:9px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap} /* raw-color-ok */

/* THE AUTOSAVE STATUS, in place of a Save button (customers e263). `autosaveIndicator` is a quiet
   caption, not a control — it reports, it is not pressed. */
.record__autosave{margin-right:auto;color:var(--c-text-tertiary);font-size:12px;font-weight:600}

.cas__types {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  overflow: hidden;
  border: 1px solid var(--d-border);
  border-radius: 9px;
}

.cas__type {
  /* The kind's own colour, set per chip from CustomerActivityType.color. Declared here so the
     property has a home in the stylesheet and a sane value on a chip that never sets it. */
  --cas-tint: var(--d-green);
  min-height: 42px;
  padding: 8px 10px;
  border: 0;
  border-right: 1px solid var(--d-border);
  background: var(--d-bg-2);
  color: var(--d-text-2);
  font: inherit;
  font-size: 12px;
  font-weight: 650;
  cursor: pointer;
}

.cas__type:nth-child(4n) { border-right: 0; }
.cas__type:nth-child(-n + 4) { border-bottom: 1px solid var(--d-border); }
/* THE SELECTED KIND WEARS ITS OWN COLOUR. The app tints the chip with CustomerActivityType.color —
   call green, email blue, meeting orange, siteVisit indigo — and this was one green for all of
   them, which makes eight kinds read as one kind with eight names. */
.cas__type.is-selected {
  background: color-mix(in srgb, var(--cas-tint) 15%, transparent);
  color: var(--cas-tint);
  box-shadow: inset 0 0 0 1px var(--cas-tint);
}

.cas__field {
  display: grid;
  gap: 7px;
  min-width: 0;
}

.cas__label {
  color: var(--d-text-2);
  font-size: 12px;
  font-weight: 750;
}

.cas__sub-label {
  color: var(--d-text-3);
  font-size: 11px;
  font-weight: 650;
}

.cas__summary {
  line-height: 1.55;
}

.cas__details {
  min-height: 96px;
  resize: vertical;
  line-height: 1.55;
}

.cas__fieldset {
  display: grid;
  gap: 12px;
  margin: 0;
  padding: 0;
  border: 0;
}

.cas__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.cas__chip {
  padding: 8px 12px;
  border: 1px solid var(--d-border);
  border-radius: 9px;
  background: var(--d-bg-2);
  color: var(--d-text-2);
  font: inherit;
  font-size: 11px;
  font-weight: 650;
  cursor: pointer;
}

.cas__chip.is-selected {
  border-color: var(--d-green);
  background: var(--d-green);
  color:var(--c-on-brand);
}

.cas__check {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  width: fit-content;
  color: var(--d-text-2);
  font-size: 12px;
  font-weight: 650;
}

.cas__check input { accent-color: var(--d-green); }

.cas__follow-fields {
  display: grid;
  grid-template-columns: 1fr 1.15fr;
  gap: 12px;
}

.cas__follow-fields[hidden] {
  display: none;
}

/* Priorities command center: urgent work stays open; everything else becomes a decision index. */
.today {
  grid-template-columns: minmax(0, 1fr) 356px;
  gap: 32px;
}

#pri-body { min-width: 0; }

.pri-brief {
  display: grid;
  grid-template-columns: 130px minmax(0, 1fr) auto;
  align-items: stretch;
  margin: 0 0 24px;
  padding: 0;
  overflow: hidden;
  border: 1px solid var(--c-card-border);
  border-radius: var(--radius-card);
  background: var(--c-card-background);
}

.pri-brief__title {
  display: flex;
  align-items: center;
  padding: 18px;
  border-right: 1px solid var(--c-separator);
  font-size: var(--text-footnote);
  font-weight: 700;
  color: var(--c-text-primary);
}

.pri-brief__cells {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.pri-brief__cell {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0;
  min-width: 0;
  padding: 14px 24px;
  border-left: 0;
  border-right: 1px solid var(--c-separator);
}

.pri-brief__cell:first-child { padding-left: 24px; }
.pri-brief__cell:last-child { border-right: 0; }
.pri-brief__kicker { order: 2; margin-top: 3px; font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-tertiary); }
.pri-brief__value { order: 1; font-size: 25px; line-height: 1.1; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--c-brand-primary); }
.pri-brief__cell--danger .pri-brief__value { color: var(--c-danger); }
.pri-brief__unit { margin-left: 4px; font-size: 12px; font-weight: 650; }
.pri-brief__sub { order: 3; margin-top: 2px; font-size: var(--text-caption2); color: var(--c-text-tertiary); }

.pri-brief__work {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  justify-content: center;
  gap: 5px;
  min-width: 158px;
  padding: 14px 18px;
  border-left: 1px solid var(--c-separator);
}

.pri-brief__work-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-height: 34px;
  padding: 0 14px;
  border: 0;
  border-radius: var(--radius-control);
  background: var(--c-brand-primary);
  color: var(--c-on-brand);
  font: 700 var(--text-caption)/1 var(--font-family);
  white-space: nowrap;
  cursor: pointer;
}

.pri-brief__work-button:hover { background: var(--c-brand-pressed); }
.pri-brief__work-button:focus-visible { outline: 3px solid color-mix(in srgb, var(--c-brand-primary) 28%, transparent); outline-offset: 2px; }
.pri-brief__work-button svg { width: 14px; height: 14px; }
.pri-brief__work > span { font-size: var(--text-caption2); color: var(--c-text-tertiary); }

/* Catalyst's persistent FocusSession, rendered as a modal card above the current CRM route. */
.pri-focus-modal { position: fixed; inset: 0; z-index: 10020; display: grid; place-items: center; padding: 24px; }
.pri-focus-modal__scrim { position: absolute; inset: 0; background: rgb(0 0 0 / 60%); }
.pri-focus-mode {
  position: relative;
  width: min(480px, 100%);
  overflow: visible;
  border: 1px solid var(--c-card-border);
  border-radius: var(--radius-xl);
  background: var(--c-card-background);
  color: var(--c-text-primary);
  box-shadow: 0 20px 50px rgb(0 0 0 / 28%);
}

.pri-focus-mode__head {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 10px;
  padding: 20px 22px 14px;
  border-bottom: 1px solid var(--c-separator);
}

.pri-focus-mode__kicker { font-size: 10px; font-weight: 800; letter-spacing: .08em; color: var(--c-brand-primary); }
.pri-focus-mode__close {
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  margin: -7px -5px 0 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--c-text-tertiary);
  font: 600 20px/1 var(--font-family);
  cursor: pointer;
}
.pri-focus-mode__close:hover { background: var(--c-control-fill); color: var(--c-text-primary); }
.pri-focus-mode__progress { grid-column: 1 / -1; height: 6px; overflow: hidden; border-radius: 99px; background: var(--c-control-fill); }
.pri-focus-mode__progress > span { display: block; height: 100%; border-radius: inherit; background: var(--c-brand-primary); transition: width var(--motion-base); }
.pri-focus-mode__status { grid-column: 1 / -1; display: flex; align-items: center; gap: 6px; min-height: 18px; font-size: var(--text-caption); color: var(--c-text-secondary); }
.pri-focus-mode__status strong { color: var(--c-brand-primary); }
.pri-focus-mode__status small { margin-left: auto; font-size: inherit; color: var(--c-text-tertiary); }
.pri-focus-mode__status button { margin-left: auto; border: 0; background: transparent; color: var(--c-brand-primary); font: 700 inherit/1 var(--font-family); cursor: pointer; }

.pri-focus-mode__body { display: grid; gap: 22px; padding: 24px; }
.pri-focus-mode__identity { display: grid; grid-template-columns: 52px minmax(0, 1fr); align-items: start; gap: 14px; }
.pri-focus-mode__icon { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 14px; background: var(--c-brand-tint); color: var(--c-brand-primary); }
.pri-focus-mode__icon svg { width: 24px; height: 24px; }
.pri-focus-mode__identity h2 { margin: 0; font-size: var(--text-title2); line-height: 1.2; color: var(--c-text-primary); }
.pri-focus-mode__identity p { margin: 5px 0 0; font-size: var(--text-subhead); line-height: 1.35; color: var(--c-text-secondary); }
.pri-focus-mode__stake { display: inline-flex; margin-top: 7px; padding: 3px 9px; border-radius: 99px; background: var(--c-warning-tint); color: var(--c-warning); font-size: var(--text-caption); font-weight: 700; }

.pri-focus-mode__actions { display: grid; grid-template-columns: 1fr auto; gap: 8px; }
.pri-focus-mode__primary {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  gap: 7px;
  width: 100%;
  min-height: 42px;
  padding: 0 14px;
  border: 0;
  border-radius: var(--radius-control);
  background: var(--c-brand-primary);
  color: var(--c-on-brand);
  font: 700 var(--text-footnote)/1 var(--font-family);
  cursor: pointer;
}
.pri-focus-mode__primary > span { margin-left: auto; }
.pri-focus-mode__open,
.pri-focus-mode__handled {
  min-height: 34px;
  padding: 0 12px;
  border: 1.5px solid var(--c-input-border);
  border-radius: var(--radius-control);
  background: transparent;
  color: var(--c-text-secondary);
  font: 700 var(--text-caption)/1 var(--font-family);
  cursor: pointer;
}
.pri-focus-mode__handled { border-color: transparent; background: var(--c-brand-tint); color: var(--c-brand-primary); }
.pri-focus-mode__truth { align-self: center; padding: 4px 0; font-size: var(--text-caption); color: var(--c-text-tertiary); }

.pri-focus-mode__foot { display: flex; align-items: center; gap: 18px; min-height: 28px; }
.pri-focus-mode__foot > button,
.pri-focus-mode__snooze summary { border: 0; background: transparent; color: var(--c-text-secondary); font: 700 var(--text-caption)/1 var(--font-family); cursor: pointer; list-style: none; }
.pri-focus-mode__snooze { position: relative; }
.pri-focus-mode__snooze summary::-webkit-details-marker { display: none; }
.pri-focus-mode__snooze > div {
  position: absolute;
  left: 0;
  bottom: calc(100% + 8px);
  z-index: 2;
  display: grid;
  width: 210px;
  overflow: hidden;
  border: 1px solid var(--c-card-border);
  border-radius: var(--radius-control);
  background: var(--c-card-background);
  box-shadow: 0 10px 28px rgb(0 0 0 / 18%);
}
.pri-focus-mode__snooze button { min-height: 36px; padding: 0 12px; border: 0; background: transparent; color: var(--c-text-primary); font: 500 var(--text-caption)/1.2 var(--font-family); text-align: left; cursor: pointer; }
.pri-focus-mode__snooze button:hover { background: var(--c-control-fill); }
.pri-focus-mode__snooze button:last-child { color: var(--c-danger); }
.pri-focus-mode__foot > span { margin-left: auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-caption); color: var(--c-text-tertiary); }

.pri-focus-mode__done { display: grid; justify-items: center; gap: 8px; padding: 40px 24px; text-align: center; }
.pri-focus-mode__done > span { font-size: 48px; }
.pri-focus-mode__done h2 { margin: 0; font-size: var(--text-title2); }
.pri-focus-mode__done p { margin: 0; color: var(--c-text-secondary); font-size: var(--text-subhead); }
.pri-focus-mode__done button { min-height: 38px; margin-top: 10px; padding: 0 24px; border: 0; border-radius: 99px; background: var(--c-brand-primary); color: var(--c-on-brand); font: 700 var(--text-footnote)/1 var(--font-family); cursor: pointer; }
.pri-focus-mode button:focus-visible,
.pri-focus-mode summary:focus-visible { outline: 3px solid color-mix(in srgb, var(--c-brand-primary) 28%, transparent); outline-offset: 2px; }

.pri-focus,
.pri-plan { margin-top: 24px; }

.pri-focus__head,
.pri-plan__head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 10px;
}

.pri-focus__title { display: inline; font-size: var(--text-title3); line-height: 1.2; font-weight: 750; color: var(--c-text-primary); }
.pri-focus__caption { display: inline; margin-left: 8px; font-size: var(--text-caption); color: var(--c-text-tertiary); }
.pri-focus__summary { display: flex; align-items: baseline; gap: 12px; font-size: var(--text-footnote); color: var(--c-text-secondary); font-variant-numeric: tabular-nums; }
.pri-focus__summary strong { font-size: var(--text-subhead); color: var(--c-text-primary); }

.pri-focus__body { display: grid; gap: 10px; }
.pri-focus__clear { padding: 18px; border: 1px solid var(--c-card-border); border-radius: var(--radius-card); background: var(--c-card-background); font-size: var(--text-footnote); color: var(--c-text-secondary); }

.pri-focus .pri-bucket {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  overflow: hidden;
  margin: 0;
  border: 1px solid var(--c-card-border);
  border-radius: var(--radius-card);
  background: var(--c-card-background);
}

.pri-focus .pri-bucket--severe { border-color: color-mix(in srgb, var(--c-danger) 22%, var(--c-card-border)); }
.pri-focus .pri-bucket__head {
  display: grid;
  grid-template-columns: 12px 30px minmax(150px, 1fr) minmax(110px, .8fr) auto auto;
  align-items: center;
  gap: 10px;
  min-width: 0;
  min-height: 52px;
  padding: 10px 12px;
  border: 0;
  background: transparent;
  text-align: left;
}

.pri-focus .pri-bucket__head:hover { background: var(--c-field-fill); }
.pri-bucket__icon,
.pri-plan__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--c-brand-tint);
  color: var(--c-brand-primary);
}

.pri-bucket--severe .pri-bucket__icon { background: var(--c-danger-tint); color: var(--c-danger); }
.pri-bucket__icon svg,
.pri-plan__icon svg { width: 15px; height: 15px; }
.pri-focus .pri-bucket__title { min-width: 0; font-size: var(--text-footnote); font-weight: 700; color: var(--c-text-primary); }
.pri-focus .pri-bucket__caption { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-caption); color: var(--c-text-tertiary); }
.pri-focus .pri-bucket__count { min-width: 22px; padding: 2px 7px; border-radius: var(--radius-pill); background: var(--c-control-fill); font-size: 10px; font-weight: 700; text-align: center; color: var(--c-text-secondary); }
.pri-focus .pri-bucket__amount { font-size: var(--text-footnote); font-weight: 700; font-variant-numeric: tabular-nums; color: var(--c-text-primary); }
.pri-focus .pri-bucket__verb { align-self: center; margin-right: 12px; white-space: nowrap; }
.pri-focus .pri-bucket__items { grid-column: 1 / -1; border-top: 1px solid var(--c-separator); }
.pri-focus .pri-bucket__items[hidden] { display: none; }

.pri-focus .pri-item {
  display: grid;
  grid-template-columns: minmax(180px, 1.2fr) minmax(130px, 1fr) auto auto;
  align-items: center;
  gap: 14px;
  width: 100%;
  min-height: 52px;
  padding: 9px 14px 9px 48px;
  border: 0;
  border-bottom: 1px solid var(--c-separator);
  background: transparent;
  text-align: left;
}

.pri-focus .pri-item:last-child { border-bottom: 0; }
.pri-focus .pri-item:hover { background: var(--c-field-fill); }
.pri-focus .pri-item__text { min-width: 0; }
.pri-focus .pri-item__title { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-footnote); font-weight: 650; color: var(--c-text-primary); }
.pri-focus .pri-item__sub { display: block; margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-caption); color: var(--c-text-secondary); }
.pri-focus .pri-item__meta { justify-self: end; font-size: var(--text-caption); color: var(--c-text-tertiary); }
.pri-focus .pri-item__meta--severe { color: var(--c-danger); font-weight: 650; }
.pri-focus .pri-item__also { display: block; margin-top: 1px; font-size: 10px; color: var(--c-text-tertiary); }
.pri-focus .pri-item__amount { min-width: 66px; text-align: right; font-size: var(--text-footnote); font-weight: 700; font-variant-numeric: tabular-nums; color: var(--c-text-primary); }
.pri-item__action { align-self: center; padding: 5px 10px; border: 1px solid var(--c-brand-primary); border-radius: 7px; font-size: 11px; line-height: 1; font-weight: 700; color: var(--c-brand-primary); }

.pri-plan__list {
  overflow: hidden;
  border: 1px solid var(--c-card-border);
  border-radius: var(--radius-card);
  background: var(--c-card-background);
}

.pri-plan__row {
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr) auto auto 16px;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 48px;
  padding: 8px 14px;
  border: 0;
  border-bottom: 1px solid var(--c-separator);
  background: transparent;
  text-align: left;
}

.pri-plan__row:last-child { border-bottom: 0; }
.pri-plan__row:hover { background: var(--c-field-fill); }
.pri-plan__text { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.pri-plan__text strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-footnote); color: var(--c-text-primary); }
.pri-plan__text span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--text-caption); color: var(--c-text-tertiary); }
.pri-plan__count { min-width: 24px; padding: 2px 7px; border-radius: var(--radius-pill); background: var(--c-control-fill); font-size: 10px; font-weight: 700; text-align: center; color: var(--c-text-secondary); }
.pri-plan__amount { min-width: 68px; text-align: right; font-size: var(--text-footnote); font-weight: 700; font-variant-numeric: tabular-nums; color: var(--c-text-primary); }
.pri-plan__arrow { color: var(--c-text-tertiary); }

.today-rail { position: sticky; top: 84px; }
.today-rail__card-title { padding: 12px 14px; }
.today-rail__row { padding: 10px 14px; }
.today-rail__card--start { overflow: hidden; }
.today-rail__launch,
.today-rail__week {
  display: grid;
  grid-template-columns: 40px minmax(0, 1fr) auto;
  align-items: center;
  gap: 12px;
  width: 100%;
  padding: 14px;
  border: 0;
  background: transparent;
  text-align: left;
}

.today-rail__launch:hover,
.today-rail__week:hover { background: var(--c-field-fill); }
.today-rail__launch-icon,
.today-rail__week-icon { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 50%; background: var(--c-brand-tint); font-size: 24px; font-weight: 400; color: var(--c-brand-primary); }
.today-rail__week-icon svg { width: 19px; height: 19px; }
.today-rail__launch-copy,
.today-rail__week > span:nth-child(2) { display: flex; flex-direction: column; min-width: 0; }
.today-rail__launch-copy strong,
.today-rail__week strong { font-size: var(--text-footnote); color: var(--c-text-primary); }
.today-rail__launch-copy span,
.today-rail__week small { margin-top: 2px; font-size: var(--text-caption2); line-height: 1.35; color: var(--c-text-secondary); }
.today-rail__launch-arrow { font-size: 20px; color: var(--c-text-tertiary); transition: transform .16s ease; }
.today-rail__week-arrow { font-size: 20px; color: var(--c-text-tertiary); transition: transform .16s ease; }
.today-rail__launch-arrow.is-open,
.today-rail__week-arrow.is-open { transform: rotate(90deg); }
.today-rail__start-menu { border-top: 1px solid var(--c-separator); }
.today-rail__week-menu { border-top: 1px solid var(--c-separator); }
.today-rail__start-menu[hidden],
.today-rail__week-menu[hidden] { display: none; }

@media (max-width: 1240px) {
  .today { grid-template-columns: minmax(0, 1fr) 320px; gap: 20px; }
  .pri-focus .pri-bucket__caption { display: none; }
  .pri-focus .pri-bucket__head { grid-template-columns: 12px 30px minmax(130px, 1fr) auto auto; }
}

@media (max-width: 1100px) {
  .today { grid-template-columns: minmax(0, 1fr); }
  .today-rail { position: static; }
}

@media (max-width: 760px) {
  .pri-brief { grid-template-columns: 1fr; }
  .pri-brief__title { border-right: 0; border-bottom: 1px solid var(--c-separator); }
  .pri-brief__cells { grid-template-columns: 1fr; }
  .pri-brief__cell { border-right: 0; border-bottom: 1px solid var(--c-separator); }
  .pri-brief__work { align-items: stretch; min-width: 0; border-left: 0; }
  .pri-focus-modal { align-items: end; padding: 12px; }
  .pri-focus-mode { width: 100%; max-height: calc(100dvh - 24px); overflow-y: auto; border-radius: var(--radius-xl); }
  .pri-focus-mode__body { padding: 20px; }
  .pri-focus-mode__actions { grid-template-columns: 1fr; }
  .pri-focus-mode__open,
  .pri-focus-mode__handled { width: 100%; }
  .pri-focus-mode__foot { flex-wrap: wrap; }
  .pri-focus-mode__foot > span { width: 100%; margin-left: 0; }
  .pri-focus .pri-bucket { grid-template-columns: 1fr; }
  .pri-focus .pri-bucket__head { grid-template-columns: 12px 28px minmax(0, 1fr) auto; }
  .pri-focus .pri-bucket__caption,
  .pri-focus .pri-bucket__amount { display: none; }
  .pri-focus .pri-bucket__verb { grid-column: 1; justify-self: start; margin: 0 12px 10px 52px; }
  .pri-focus .pri-item { grid-template-columns: minmax(0, 1fr) auto; padding-left: 14px; }
  .pri-focus .pri-item__meta { grid-column: 1; justify-self: start; }
  .pri-focus .pri-item__amount { grid-column: 2; grid-row: 1; }
  .pri-item__action { grid-column: 2; }
  .pri-plan__row { grid-template-columns: 28px minmax(0, 1fr) auto 14px; }
  .pri-plan__text span,
  .pri-plan__amount { display: none; }
}

.cas__helper {
  margin: -8px 0 0;
  color: var(--d-text-3);
  font-size: 11px;
}

.ch-timeline__details,
.ch-timeline__follow {
  margin-top: 3px;
  color: var(--d-text-2);
  font-size: 11px;
}

.ch-timeline__follow {
  color: var(--d-green);
  font-weight: 700;
}

@media (max-width: 700px) {
  .cas-backdrop .modal--activity-sheet {
    width: 100vw;
    max-width: none;
    border-radius: 0;
  }

  .cas__types { grid-template-columns: repeat(2, 1fr); }
  .cas__type:nth-child(2n) { border-right: 0; }
  .cas__type:nth-child(2n + 1) { border-right: 1px solid var(--d-border); }
  .cas__type:not(:nth-last-child(-n + 2)) { border-bottom: 1px solid var(--d-border); }
.cas__follow-fields { grid-template-columns: 1fr; }
}

/* Settings workspace: Settings owns the primary rail while it is open. */
.dash-topbar__settings-back{height:32px;padding:0 10px 0 0;border:0;border-right:1px solid var(--c-separator);background:none;color:var(--c-brand-primary);font:inherit;font-weight:600;cursor:pointer}
.dash-topbar__settings-back:hover{color:var(--c-brand-pressed)}
.dash-topbar__settings-icon{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;color:var(--c-text-tertiary);font-size:15px}
.settings-rail__search-wrap{position:relative;margin:var(--space-sm-md) var(--space-sm)}
.settings-rail__search-wrap svg{position:absolute;left:10px;top:50%;width:14px;height:14px;transform:translateY(-50%);fill:none;stroke:var(--c-text-tertiary);stroke-width:2;pointer-events:none}
.settings-rail__search-wrap input{width:100%;height:34px;padding:0 10px 0 32px;border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;outline:none}
.settings-rail__search-wrap input:focus{border-color:var(--c-brand-primary);box-shadow:0 0 0 2px var(--c-brand-tint)}
.settings-rail__scroll{padding-top:0}
.settings-rail__group{padding:0 var(--space-sm);margin-bottom:var(--space-md)}
.settings-rail__label{padding:var(--space-sm) var(--space-sm) var(--space-xs);font-size:var(--text-caption2);font-weight:700;letter-spacing:.65px;color:var(--c-text-tertiary)}
.settings-rail__item{width:100%;margin:1px 0}
.settings-rail__foot{padding-top:0}
.settings-rail__reset{display:flex;width:100%;align-items:center;gap:8px;padding:10px 12px;border:0;border-bottom:1px solid var(--c-separator);background:none;color:var(--c-text-tertiary);font:inherit;font-size:var(--text-caption);text-align:left;cursor:pointer}
.settings-rail__reset:hover{color:var(--c-text-primary);background:var(--c-field-fill)}
.settings-workspace{padding-top:var(--space-xl);padding-bottom:var(--space-xxl)}
.settings-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,420px);align-items:center;gap:var(--space-xxl);padding:22px 24px;margin-bottom:var(--space-md);border-radius:var(--radius-lg);background:var(--c-brand-pressed);color:var(--c-on-brand)}
.settings-hero h1{margin:0 0 4px;font-size:20px;line-height:1.25;letter-spacing:-.25px}
.settings-hero p{margin:0;color:color-mix(in srgb,var(--c-on-brand) 68%,transparent);font-size:var(--text-footnote)}
.settings-hero__progress{min-width:0}.settings-hero__progress-head{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:var(--text-footnote)}
.settings-hero__track{height:5px;margin:7px 0 5px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--c-on-brand) 18%,transparent);overflow:hidden}
.settings-hero__track span{display:block;height:100%;border-radius:inherit;background:var(--c-success-tint)}
.settings-hero__progress button{padding:0;border:0;background:none;color:var(--c-success-tint);font:inherit;font-size:var(--text-caption);font-weight:700;cursor:pointer}
.settings-overview-section{margin-top:var(--space-md)}.settings-section-title{margin-bottom:var(--space-sm)}
.settings-section-title h2{margin:0;font-size:var(--text-headline);line-height:1.3}.settings-section-title p{margin:1px 0 0;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.settings-attention-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm-md)}
.settings-attention{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm-md);min-height:64px;padding:10px 12px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}
.settings-attention:hover,.settings-category-card:hover,.settings-shortcut:hover,.settings-leaf-row.is-actionable:hover{background:var(--c-field-fill);border-color:var(--c-brand-tint)}
.settings-attention strong,.settings-attention small,.settings-shortcut strong,.settings-shortcut small,.settings-leaf-row strong,.settings-leaf-row small{display:block}
.settings-attention small,.settings-shortcut small,.settings-leaf-row small{margin-top:1px;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.settings-ui-icon{display:flex;width:34px;height:34px;align-items:center;justify-content:center;border-radius:var(--radius-row);background:var(--c-brand-tint);color:var(--c-brand-primary);flex-shrink:0}
.settings-ui-icon svg{width:17px;height:17px}.settings-attention--amber .settings-ui-icon{background:var(--c-warning-tint);color:var(--c-warning)}.settings-attention--blue .settings-ui-icon{background:var(--c-info-tint);color:var(--c-info)}
.settings-arrow{color:var(--c-text-tertiary);font-size:20px;line-height:1}
.settings-connections{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);padding:9px 12px;margin-top:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.settings-connections>div:first-child strong,.settings-connections>div:first-child span{display:block}.settings-connections>div:first-child span{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.settings-connection-chips{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}.settings-connection-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:700}
.settings-connection-chip i{width:5px;height:5px;border-radius:50%;background:var(--c-text-tertiary)}.settings-connection-chip.is-connected{color:var(--c-text-secondary)}.settings-connection-chip.is-connected i{background:var(--c-success)}
.settings-category-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm-md)}
.settings-category-card{position:relative;display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:start;gap:var(--space-sm-md);min-height:108px;padding:16px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}
.settings-category-card__copy strong,.settings-category-card__copy small,.settings-category-card__copy em{display:block}.settings-category-card__copy strong{font-size:var(--text-subhead)}.settings-category-card__copy small{color:var(--c-text-tertiary);font-size:var(--text-caption);margin-top:1px}
.settings-category-card__copy em{position:absolute;left:16px;right:42px;bottom:12px;color:var(--c-text-secondary);font-size:var(--text-caption2);font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-category-card__count{min-width:22px;padding:2px 7px;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700;text-align:center}.settings-category-card__arrow{position:absolute;right:16px;bottom:10px;color:var(--c-brand-primary)}
.settings-leaf-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-xl);padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--c-separator)}
.settings-leaf-header h1{margin:0;font-size:22px;line-height:1.25;letter-spacing:-.3px}.settings-leaf-header p{margin:3px 0 0;color:var(--c-text-secondary);font-size:var(--text-footnote)}

.settings-leaf-row{display:grid;width:100%;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:var(--space-md);min-height:74px;padding:12px 16px;border:0;border-bottom:1px solid var(--c-separator);background:none;color:var(--c-text-primary);font:inherit;text-align:left;text-decoration:none}.settings-leaf-row:last-child{border-bottom:0}.settings-leaf-row.is-actionable{cursor:pointer}
.settings-status{padding:3px 9px;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700}
.settings-shortcut-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm-md);margin-bottom:var(--space-md)}
.settings-shortcut{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:var(--space-sm-md);padding:12px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}

@media (max-width:1100px){.settings-hero{grid-template-columns:1fr}.settings-attention-grid{grid-template-columns:1fr}.settings-category-grid{grid-template-columns:1fr}}
@media (max-width:700px){.dash-topbar__settings-back{display:none}.settings-workspace{padding:var(--space-md)}.settings-hero{padding:18px}.settings-connections{align-items:flex-start;flex-direction:column}.settings-connection-chips{justify-content:flex-start}.settings-shortcut-grid{grid-template-columns:1fr}.settings-leaf-header{display:block}}

/* Glass navigation: a stable context bar for tools hosted inside Settings. */
.dash-topbar{background:color-mix(in srgb,var(--c-card-background) 88%,transparent);backdrop-filter:blur(18px) saturate(1.12);-webkit-backdrop-filter:blur(18px) saturate(1.12)}
.settings-workspace--inline{padding-top:0}
.settings-glass-nav{position:sticky;top:0;z-index:25;display:grid;grid-template-columns:minmax(140px,auto) minmax(0,1fr) auto;align-items:center;gap:var(--space-md);min-height:54px;margin:0 calc(var(--size-page-margin) * -1) var(--space-lg);padding:8px var(--size-page-margin);border-bottom:1px solid color-mix(in srgb,var(--c-card-border) 72%,transparent);background:color-mix(in srgb,var(--c-background-secondary) 82%,transparent);backdrop-filter:blur(20px) saturate(1.16);-webkit-backdrop-filter:blur(20px) saturate(1.16)}
.settings-glass-nav button{border:0;background:none;font:inherit;font-weight:650;cursor:pointer}
.settings-glass-nav__back{justify-self:start;color:var(--c-brand-primary)}.settings-glass-nav__back:hover{color:var(--c-brand-pressed)}
.settings-glass-nav__title{display:flex;align-items:center;justify-content:center;gap:7px;min-width:0;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.settings-glass-nav__title span,.settings-glass-nav__title strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-glass-nav__title strong{color:var(--c-text-primary)}.settings-glass-nav__title i{font-style:normal;color:var(--c-separator)}
.settings-glass-nav__all{justify-self:end;color:var(--c-text-secondary)}.settings-glass-nav__all:hover{color:var(--c-text-primary)}
.settings-inline-host{min-width:0}.settings-inline-host>.dash-loading__spinner{margin:72px auto}
@media (max-width:700px){.settings-glass-nav{grid-template-columns:1fr auto;margin:calc(var(--space-md) * -1) calc(var(--space-md) * -1) var(--space-md);padding:8px var(--space-md)}.settings-glass-nav__title{display:none}}

/* Hidden must always beat component display rules. */
.dash-topbar__settings-icon[hidden] { display: none; }
/* Semantic accents shared by settings destinations. */
:root {
  --c-accent-success: var(--c-accent-mint);
  --c-accent-warning: var(--c-accent-orange);
}

/* ── Goals cards and the Shared-links ledger ──────────────────────────────────
   Both were shipped 2026-08-28 naming classes that this stylesheet did not
   define, so they rendered as stacked unstyled divs — the data was right and
   the page looked broken, which is the failure that reads as "the site is
   down". Written against the existing tokens rather than fresh values so they
   inherit both themes.                                                      */
.goal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-md)}
.goal-card{background:var(--c-card-background);border:1px solid var(--c-card-border);
  border-radius:var(--radius-card);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}
.goal-card__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.goal-card__title{font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.goal-card__figure{font-size:var(--text-stat);font-weight:700;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
.goal-card__of{font-size:var(--text-footnote);font-weight:500;color:var(--c-text-secondary)}
/* The pace marker sits ON the bar: the fill is what has been made, the tick is where the calendar
   is. Reading either one alone gives the wrong answer in half the month. */
.goal-bar{position:relative;height:8px;border-radius:var(--radius-pill);background:var(--c-control-fill);overflow:hidden}
.goal-bar__fill{height:100%;background:var(--c-brand-primary);border-radius:var(--radius-pill);max-width:100%}
.goal-bar__pace{position:absolute;top:-2px;width:2px;height:12px;background:var(--c-text-tertiary)}
.goal-card__foot{display:flex;justify-content:space-between;gap:var(--space-sm);
  font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.goal-card__acts{display:flex;gap:var(--space-xs);margin-top:var(--space-xxs)}

/* ── Goals, the rest of the app's card ───────────────────────────────────────
   `GoalsView+Cards` states the anatomy in its own header: identity + status chip ·
   big current-of-target + expected-by-today · pace bar with a TODAY marker ·
   run-rate sentence + the gap-closing move. Only the first, third and fourth of
   those had classes; the sentences that make a target readable had none.       */
.goal-card__head{flex-wrap:wrap}
.goal-card__meta{flex:1 1 auto;font-size:var(--text-caption);color:var(--c-text-tertiary)}
.goal-card__figure{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-xs)}
.goal-card__expect{margin-left:auto;font-size:var(--text-caption);font-weight:500;
  color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
/* Behind pace is the ONE state the bar recolours — the app tints the fill with the status color,
   and every other status shares the brand green. */
.goal-bar__fill--warn{background:var(--c-warning)}
.goal-card__run{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.goal-card__rate{font-size:var(--text-caption);color:var(--c-text-secondary)}
.goal-card__move{flex:0 0 auto}

/* The pace report — measurement, not scolding. */
.goal-pace{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  margin-bottom:var(--space-md)}
.goal-pace__lines{display:flex;flex-direction:column;gap:1px;min-width:0}
.goal-pace__title{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.goal-pace__parts{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.goal-pace__new{flex:0 0 auto}

/* Starter and suggested rows: dashed, because they are an offer rather than a record. */
.goal-starters{display:flex;flex-direction:column;gap:var(--space-sm);
  max-width:480px;margin:0 auto var(--space-md)}
.goal-starter{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);
  width:100%;padding:var(--space-md);text-align:left;cursor:pointer;
  background:var(--c-card-background);border:1px dashed var(--c-card-border);
  border-radius:var(--radius-card)}
.goal-starter:hover{border-color:var(--c-brand-primary)}
.goal-starter--lead{border-color:var(--c-brand-primary)}
.goal-starter__reason{font-size:var(--text-caption);color:var(--c-text-secondary)}
.goal-starter__amount{font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);
  font-variant-numeric:tabular-nums;white-space:nowrap}
.goal-suggested{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-lg)}
.goal-suggested__head{margin:0;font-size:var(--text-footnote);font-weight:700;
  color:var(--c-text-secondary)}

/* The Set-a-Goal dialog: one decision — type, target, period. */
.goal-dialog{display:flex;flex-direction:column;gap:var(--space-md)}
.goal-chipgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:var(--space-xs)}
.goal-chipgrid .chip{text-align:center}
.goal-grounded{margin:0;font-size:var(--text-caption);color:var(--c-text-tertiary)}
.goal-picks{display:flex;gap:var(--space-sm)}
.goal-pick{display:flex;flex:1 1 0;flex-direction:column;align-items:center;gap:1px;cursor:pointer;
  padding:var(--space-xs) var(--space-sm);background:var(--c-brand-tint);
  border:1px dashed var(--c-brand-primary);border-radius:var(--radius-base)}
.goal-pick__value{font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);
  font-variant-numeric:tabular-nums}
.goal-pick__label{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.goal-target{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);
  background:var(--c-field-fill);border-radius:var(--radius-base)}
.goal-target input{flex:1 1 auto;min-width:0;border:0;background:transparent;color:var(--c-text-primary);
  font-size:var(--text-subhead);font-weight:600;font-variant-numeric:tabular-nums}
.goal-target input:focus{outline:none}
.goal-target__symbol,.goal-target__unit{font-size:var(--text-subhead);color:var(--c-text-tertiary)}
.goal-periods{display:flex;gap:var(--space-xs)}
.goal-periods .pill{flex:1 1 0;text-align:center}

/* The full Set a Goal form — approved scope, so it owns the column the way the app's
   inline forms do rather than opening a second modal over the list. */
.goal-form{display:flex;flex-direction:column;gap:var(--space-lg);max-width:660px}
.goal-form__back{align-self:flex-start}
.goal-form__title{margin:0;font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.goal-form__card{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-lg);
  background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-card)}
.goal-form__label{margin:0;font-size:var(--text-caption);font-weight:700;letter-spacing:.04em;
  color:var(--c-text-secondary)}
.goal-form__hint{margin:0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.goal-form__hint--italic{font-style:italic}
.goal-form__ok{color:var(--c-brand-primary)}
.goal-form__warn{color:var(--c-warning)}
.goal-form__presets{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.goal-form__foot{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-md)}
.goal-form__valid{font-size:var(--text-caption);color:var(--c-warning)}

.share-group{margin-bottom:var(--space-lg)}
.share-group__head{font-size:var(--text-caption);font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--c-text-tertiary);margin-bottom:var(--space-sm)}
.share-row{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);
  border:1px solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-card-background);
  margin-bottom:var(--space-xs)}
/* Expired rows stay legible rather than vanishing: they still have a record, and for a report they
   still have a PDF sitting in storage. */
.share-row--expired{opacity:.62}
.share-row__main{flex:1 1 auto;min-width:0}
.share-row__title{font-size:var(--text-callout);font-weight:600;color:var(--c-text-primary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.share-row__where{font-size:var(--text-footnote);color:var(--c-text-secondary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.share-row__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:2px}
.share-row__facts{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex:0 0 auto}
.share-row__views{font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.share-row__acts{flex:0 0 auto}
/* 680 is this stylesheet’s own phone breakpoint, used twelve times. 640 would be a thirteenth
   number nobody chose, and a guard in measure.test.mjs refuses that literal outright. */
@media (max-width:680px){
  .share-row{flex-wrap:wrap}
  .share-row__facts{align-items:flex-start}
}

/* ── Crew compliance ─────────────────────────────────────────────────────────
   The certificates that stop work. Lapsed rows carry a left edge rather than a
   fill, because the row already ends in a red chip and two reds compete.     */
.cmp-group{margin-bottom:var(--space-lg)}
.cmp-group__head{font-size:var(--text-caption);font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--c-text-tertiary);margin-bottom:var(--space-xs)}
.cmp-group__note{font-size:var(--text-footnote);color:var(--c-text-secondary);
  margin-bottom:var(--space-sm);max-width:60ch}
.cmp-worker{border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-card-background);padding:var(--space-md);margin-bottom:var(--space-sm)}
.cmp-worker--flag{border-left:3px solid var(--c-warning)}
.cmp-worker__head{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--space-sm);margin-bottom:var(--space-sm)}
.cmp-worker__name{font-size:var(--text-callout);font-weight:600;color:var(--c-text-primary)}
.cmp-worker__kind{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.cmp-docs{display:grid;gap:6px}
.cmp-doc{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);
  padding:4px 0;border-top:1px solid var(--c-border)}
.cmp-doc:first-child{border-top:0}
.cmp-doc__label{font-size:var(--text-footnote);color:var(--c-text-secondary)}

/* ── Cross-market search ─────────────────────────────────────────────────────
   A hit from another market says which one, and the offer to look there is a
   row rather than a toggle: the reads happen when somebody takes it.        */
.cmdbar__hit-market{flex:0 0 auto;font-size:var(--text-caption2);font-weight:700;
  letter-spacing:.03em;text-transform:uppercase;color:var(--c-text-tertiary);
  border:1px solid var(--c-border);border-radius:var(--radius-pill);padding:1px var(--space-xs);
  white-space:nowrap;margin-left:var(--space-xs)}
.cmdbar__wide{display:block;width:100%;text-align:left;background:none;border:0;
  border-top:1px solid var(--c-border);padding:var(--space-sm) var(--space-md);cursor:pointer;
  font-size:var(--text-footnote);font-weight:600;color:var(--c-brand-primary)}
.cmdbar__wide:hover{background:var(--c-control-fill)}
.cmdbar__wide:disabled{color:var(--c-text-tertiary);cursor:default}

/* ── Price change log ────────────────────────────────────────────────────────
   A diff, not a feed: the middle line is what actually moved.               */
.pc-row{border:1px solid var(--c-card-border);border-radius:var(--radius-row);
  background:var(--c-card-background);padding:var(--space-sm) var(--space-md);
  margin-bottom:var(--space-xs)}
.pc-row__main{min-width:0}
.pc-row__head{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.pc-row__book{font-size:var(--text-callout);font-weight:600;color:var(--c-text-primary)}
.pc-row__what{font-size:var(--text-footnote);color:var(--c-text-secondary);margin-top:3px;
  font-variant-numeric:tabular-nums}
.pc-row__who{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:3px}

/* ── Call log ────────────────────────────────────────────────────────────────
   A voicemail carries its recording inline; an answered call carries only how
   long it lasted, so the row has to read well with the player absent.       */
.call-row{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;
  border:1px solid var(--c-card-border);border-radius:var(--radius-row);
  background:var(--c-card-background);padding:var(--space-sm) var(--space-md);
  margin-bottom:var(--space-xs)}
.call-row__main{flex:1 1 260px;min-width:0}
.call-row__head{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}
.call-row__num{font-size:var(--text-callout);font-weight:600;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
.call-row__who{font-size:var(--text-footnote);color:var(--c-text-secondary)}
.call-row__who--none{color:var(--c-text-tertiary);font-style:italic}
.call-row__body{font-size:var(--text-footnote);color:var(--c-text-secondary);margin-top:3px}
.call-row__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:3px}
.call-row__audio{flex:0 0 auto;max-width:100%;height:32px}

/* The composer's recipient line. `form-label`, `form-textarea` and `form-hint` are the house
   form classes — the composer uses those rather than inventing its own. */
.cm__to{font-size:var(--text-footnote);color:var(--c-text-secondary);margin-bottom:var(--space-sm)}

/* ── Team & Access: what a collaborator can open ─────────────────────────────
   "No jobs yet" is the state where an installer opens the app and finds it
   empty, so it reads as a problem rather than as a tidy zero.               */
.ta-access{background:none;border:0;padding:0;cursor:pointer;font:inherit;
  font-size:var(--text-footnote);font-weight:600;color:var(--c-brand-primary);text-align:left}
.ta-access:hover{text-decoration:underline}
.ta-access--none{color:var(--c-warning)}
.ta-acc-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);
  padding:var(--space-xs) 0;border-top:1px solid var(--c-border)}
.ta-acc-row:first-of-type{border-top:0}

/* ── Pipeline stages ─────────────────────────────────────────────────────────
   Deliberately equal-width columns rather than a tapering funnel: the shape of
   a funnel is itself a claim about flow-through, and this data cannot make it. */
.pl-stages{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-md)}
.pl-stage{padding:var(--space-sm) 0}
.pl-stage__value{font-size:var(--text-stat);font-weight:700;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
.pl-stage__label{font-size:var(--text-footnote);font-weight:600;color:var(--c-text-secondary)}
.pl-stage__meta{font-size:var(--text-caption);color:var(--c-text-tertiary);margin-top:2px}

/* ── Debt retired 2026-08-28 (css-class ratchet): three classes views already
   name but nothing defined. .billing-notice carries only the base its four
   inline variants all repeat — their inline copies restate, never fight, it. */
.billing-notice { padding: 12px 14px; border: 1px solid var(--d-border);
  border-radius: var(--d-radius-sm); margin-bottom: 16px; font-size: 13px; }
.ad-row { cursor: pointer; }
.ad-row:hover td { background: var(--d-content-bg); }

/* Catalyst Campaign portfolio: columnar ledger on a desk, compact campaign cards on a phone. */
.campaign-ledger{overflow:hidden}
.campaign-ledger-wide{display:block}
.campaign-compact-list{display:none}
.campaign-compact-card{position:relative;overflow:hidden;border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background)}
.campaign-compact-card__open{display:flex;width:100%;min-height:44px;flex-direction:column;gap:var(--space-sm-md);padding:var(--space-md);border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}
.campaign-compact-card__header{display:flex;width:100%;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding-right:36px}
.paid-campaign-compact-card .campaign-compact-card__header{padding-right:0}
.campaign-compact-card__identity{display:flex;min-width:0;flex-direction:column;gap:2px}
.campaign-compact-card__name{overflow:hidden;font-size:var(--text-subhead);font-weight:650;line-height:1.25;color:var(--c-text-primary);text-overflow:ellipsis;white-space:nowrap}
.campaign-compact-card__meta{font-size:var(--text-caption2);font-weight:500;line-height:1.35;color:var(--c-text-secondary)}
.campaign-compact-chip{display:inline-flex;flex:0 0 auto;align-items:center;min-height:22px;padding:2px var(--space-sm);border-radius:var(--radius-pill);background:var(--c-field-fill);font-size:var(--text-caption2);font-weight:650;color:var(--c-text-secondary);white-space:nowrap}
.campaign-compact-chip[data-tone="active"]{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.campaign-compact-chip[data-tone="danger"]{background:var(--c-danger-tint);color:var(--c-danger)}
.campaign-compact-stats{display:grid;width:100%;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch}
.campaign-compact-stat{display:flex;min-width:0;flex-direction:column;gap:3px;padding:0 var(--space-sm);border-left:var(--border-hairline) solid var(--c-separator)}
.campaign-compact-stat:first-child{padding-left:0;border-left:0}
.campaign-compact-stat:last-child{padding-right:0}
.campaign-compact-stat>span{font-size:var(--text-caption2);font-weight:650;color:var(--c-text-secondary)}
.campaign-compact-stat>strong{overflow:hidden;font-size:var(--text-footnote);font-weight:650;color:var(--c-text-primary);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}
.campaign-compact-roi{display:flex;width:100%;align-items:center;justify-content:center;padding:var(--space-xs-sm);border-radius:var(--radius-md);background:var(--c-brand-tint);font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary)}
.campaign-compact-roi[data-tone="danger"]{background:var(--c-danger-tint);color:var(--c-danger)}
.campaign-compact-card__more{position:absolute;top:8px;right:8px;display:flex;width:36px;height:36px;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--radius-control);background:transparent;color:var(--c-text-secondary);font:inherit;font-size:11px;font-weight:800;letter-spacing:1px;cursor:pointer}
.campaign-compact-card__more:hover{background:var(--c-field-fill);color:var(--c-danger)}
.campaign-compact-card__footer{display:flex;width:100%;align-items:flex-end;justify-content:space-between;gap:var(--space-sm)}
.campaign-compact-signals{display:flex;min-width:0;flex-wrap:wrap;gap:var(--space-xs)}
.campaign-compact-return,.campaign-compact-health{display:inline-flex;align-items:center;min-height:22px;padding:2px var(--space-sm);border-radius:var(--radius-pill);background:var(--c-brand-tint);font-size:var(--text-caption2);font-weight:650;color:var(--c-brand-primary)}
.campaign-compact-health[data-tone="danger"]{background:var(--c-danger-tint);color:var(--c-danger)}
.campaign-compact-health[data-tone="warning"]{background:var(--c-warning-tint);color:var(--c-warning)}
.campaign-compact-health[data-tone="info"]{background:var(--c-info-tint);color:var(--c-info)}
.campaign-compact-cta{flex:0 0 auto;font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);white-space:nowrap}
.campaign-compact-card__market{font-size:var(--text-caption2);font-weight:600;color:var(--c-brand-primary)}
.campaign-compact-setup{grid-column:1/-1;display:flex;width:100%;align-items:flex-start;padding-top:var(--space-sm-md);border-top:var(--border-fine) solid var(--c-separator);font-size:var(--text-caption);line-height:1.4;color:var(--c-text-secondary)}

/* Growth · Campaigns — Catalyst's single command center. */
.growth-command{display:flex;max-width:1320px;margin:0 auto;flex-direction:column;gap:var(--space-lg)}
.growth-command__hero{display:flex;flex-direction:column;gap:var(--space-lg);padding:var(--space-xxl);overflow:hidden;border:var(--border-fine) solid var(--c-drawing-hairline);border-radius:var(--radius-xl);background:var(--c-drawing-gradient);color:var(--c-drawing-ink)}
.growth-command__hero-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-lg);padding-bottom:var(--space-lg);border-bottom:var(--border-fine) solid var(--c-drawing-hairline)}
.growth-command__eyebrow{font-size:10px;font-weight:800;letter-spacing:.07em;color:var(--c-drawing-dim)}
.growth-command__hero h1{margin:var(--space-xs-sm) 0 var(--space-xs);font-size:var(--text-title2);line-height:1.15;color:var(--c-drawing-ink)}
.growth-command__hero p{margin:0;color:var(--c-drawing-dim);font-size:var(--text-subhead)}
.growth-command__hero-actions{display:flex;flex:0 0 auto;align-items:center;gap:var(--space-sm)}
.growth-command__hero-actions button,.growth-command__market{display:inline-flex;min-height:var(--size-control-small);align-items:center;border:var(--border-fine) solid color-mix(in srgb,var(--c-drawing-ink) 24%,transparent);border-radius:var(--radius-pill);background:var(--c-drawing-soft-fill);color:var(--c-drawing-ink);font:700 var(--text-caption)/1 var(--font-family);white-space:nowrap}
.growth-command__hero-actions button{padding:0 var(--space-md);cursor:pointer}
.growth-command__hero-actions .growth-command__new{background:color-mix(in srgb,var(--c-drawing-ink) 16%,transparent)}
.growth-command__market select{min-height:34px;padding:0 30px 0 var(--space-md);border:0;outline:0;background:transparent;color:inherit;font:inherit;cursor:pointer}
.growth-command__market option{color:var(--c-text-primary);background:var(--c-card-background)}
.growth-command__metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.growth-command__metric{position:relative;display:flex;min-width:0;align-items:center;gap:var(--space-md);padding:0 var(--space-lg)}
.growth-command__metric:first-child{padding-left:0}
.growth-command__metric+.growth-command__metric::before{content:'';position:absolute;left:0;top:0;bottom:0;width:var(--border-fine);background:var(--c-drawing-hairline)}
.growth-command__metric-icon{display:flex;width:40px;height:40px;flex:0 0 40px;align-items:center;justify-content:center;border-radius:50%;background:var(--c-drawing-soft-fill);color:var(--c-drawing-mint);font-size:var(--text-title3);font-weight:800}
.growth-command__metric-icon[data-icon="chart"]::before{content:'▥'}
.growth-command__metric-icon[data-icon="money"]::before{content:'$'}
.growth-command__metric-icon[data-icon="people"]::before{content:'○'}
.growth-command__metric-icon[data-icon="trend"]::before{content:'↗'}
.growth-command__metric>span:last-child{display:flex;min-width:0;flex-direction:column;gap:2px}
.growth-command__metric strong{overflow:hidden;color:var(--c-drawing-ink);font-size:var(--text-title2);font-variant-numeric:tabular-nums;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}
.growth-command__metric small{color:var(--c-drawing-dim);font-size:var(--text-caption);white-space:nowrap}
.growth-command__workspace{display:grid;grid-template-columns:minmax(610px,1fr) 350px;grid-template-areas:'portfolio rail' 'performance rail';align-items:start;gap:var(--space-lg)}
.growth-command__portfolio,.growth-command__performance,.growth-command__rail-card{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-xl);background:var(--c-card-background)}
.growth-command__portfolio{grid-area:portfolio;display:flex;min-width:0;flex-direction:column;gap:var(--space-md);padding:var(--space-lg)}
.growth-command__portfolio h2,.growth-command__performance h2,.growth-command__rail-card h2{margin:0;color:var(--c-text-primary);font-size:var(--text-title3)}
.growth-command__filters{display:flex;align-items:center;gap:var(--space-sm);overflow-x:auto;scrollbar-width:none}
.growth-command__filters::-webkit-scrollbar{display:none}
.growth-command__filters button{display:inline-flex;min-height:32px;flex:none;align-items:center;gap:var(--space-xs);padding:0 var(--space-sm-md);border:0;border-radius:var(--radius-pill);background:var(--c-control-fill);color:var(--c-text-secondary);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}
.growth-command__filters button span{padding:2px var(--space-xs);border-radius:var(--radius-pill);background:var(--c-input-fill);font-size:var(--text-caption2);font-variant-numeric:tabular-nums}
.growth-command__filters button[aria-pressed="true"]{background:var(--c-brand-primary);color:var(--c-on-brand)}
.growth-command__filters button[aria-pressed="true"] span{background:color-mix(in srgb,var(--c-on-brand) 20%,transparent)}
.growth-command__filters .growth-command__filter--warning:not([aria-pressed="true"]){background:var(--c-warning-tint);color:var(--c-warning)}
.campaign-ledger--portfolio .campaign-ledger-wide{display:none}
.campaign-ledger--portfolio .campaign-compact-list{display:grid;gap:var(--space-sm-md)}
.campaign-ledger--portfolio .campaign-compact-card{overflow:visible}
.campaign-ledger--portfolio .campaign-compact-card__open{display:grid;grid-template-columns:minmax(160px,1fr) auto minmax(330px,1.35fr);align-items:center;gap:var(--space-md);padding-right:52px}
.campaign-ledger--portfolio .campaign-compact-card__header{display:contents}
.campaign-ledger--portfolio .campaign-compact-stats{grid-column:3}
.campaign-ledger--portfolio .campaign-compact-card__footer{grid-column:1/-1}
.campaign-card-menu{top:8px;right:52px}
.campaign-card-menu .campaign-menu-action--danger{color:var(--c-danger)}
.campaign-send-hero{padding:var(--space-xl);border-radius:var(--radius-xl);background:var(--c-drawing-gradient);color:var(--c-drawing-ink)}
.campaign-send-hero>span{font-size:10px;font-weight:800;letter-spacing:.07em;color:var(--c-drawing-dim)}
.campaign-send-hero h2{margin:var(--space-xs-sm) 0 var(--space-xs);font-size:var(--text-title2);color:var(--c-drawing-ink)}
.campaign-send-hero p{margin:0 0 var(--space-md);color:var(--c-drawing-dim);font-size:var(--text-caption);line-height:1.45}
.campaign-send-hero small{font-size:var(--text-caption);font-weight:700;color:var(--c-drawing-ink)}
.campaign-send-card{display:flex;flex-direction:column;gap:var(--space-md);margin-top:var(--space-md);padding:var(--space-lg);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-xl);background:var(--c-card-background)}
.campaign-send-card h3{margin:0;font-size:var(--text-subhead);color:var(--c-text-primary)}
.campaign-send-methods{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm)}
.campaign-send-methods button{min-height:var(--size-control-medium);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-control-fill);color:var(--c-text-secondary);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}
.campaign-send-methods button[aria-pressed="true"]{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.campaign-send-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.campaign-send-card>header>span{display:flex;flex-direction:column;gap:2px}
.campaign-send-card>header strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.campaign-send-card>header small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.campaign-send-card>header b{font-size:var(--text-caption2);color:var(--c-brand-primary)}
.campaign-send-audience-tools{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-sm)}
.campaign-send-audience-tools button{min-height:var(--size-control-medium);padding:0 var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-control-fill);color:var(--c-text-primary);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}
.campaign-send-list{display:flex;max-height:280px;overflow-y:auto;flex-direction:column;border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-row)}
.campaign-send-lead{display:flex;align-items:center;gap:var(--space-sm-md);min-height:52px;padding:var(--space-sm-md);border-bottom:var(--border-fine) solid var(--c-separator);cursor:pointer}
.campaign-send-lead:last-child{border-bottom:0}
.campaign-send-lead input{width:20px;height:20px;accent-color:var(--c-brand-primary)}
.campaign-send-lead span{display:flex;min-width:0;flex-direction:column;gap:2px}
.campaign-send-lead strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.campaign-send-lead small{overflow:hidden;font-size:var(--text-caption2);color:var(--c-text-tertiary);text-overflow:ellipsis;white-space:nowrap}
.modal--picker:has(.campaign-send-workspace){width:min(1120px,100%);max-width:1120px}
.modal--picker:has(.campaign-send-workspace) .modal__body{padding:16px 24px 8px;background:var(--c-background-secondary)}
.campaign-send-workspace{display:flex;flex-direction:column;gap:var(--space-lg)}
.campaign-send-workspace .campaign-send-card{margin-top:0}
.campaign-send-workspace .campaign-send-card[hidden]{display:none}
.campaign-send-hero{display:flex;align-items:center;justify-content:space-between;gap:var(--space-xl)}
.campaign-send-hero>div:first-child{min-width:0}
.campaign-send-progress{display:flex;width:360px;flex:0 0 360px;align-items:center}
.campaign-send-progress>span{display:flex;width:72px;flex:0 0 72px;align-items:center;flex-direction:column;gap:var(--space-xs);color:var(--c-drawing-dim)}
.campaign-send-progress>span b{display:grid;width:30px;height:30px;place-items:center;border:var(--border-fine) solid color-mix(in srgb,var(--c-drawing-ink) 22%,transparent);border-radius:50%;background:var(--c-drawing-soft-fill);color:var(--c-drawing-ink);font-size:var(--text-caption);font-variant-numeric:tabular-nums}
.campaign-send-progress>span:first-child b,.campaign-send-progress>span[data-complete="true"] b{border-color:color-mix(in srgb,var(--c-drawing-mint) 30%,transparent);background:var(--c-brand-primary)}
.campaign-send-progress>span small{font-size:var(--text-caption2);font-weight:600}
.campaign-send-progress>i{height:var(--border-fine);flex:1;background:var(--c-drawing-hairline)}
.campaign-send-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;align-items:start;gap:var(--space-lg)}
.campaign-send-composer,.campaign-send-review{display:flex;min-width:0;flex-direction:column;gap:var(--space-md)}
.campaign-send-help{margin:-8px 0 0;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.campaign-send-message-tools{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.campaign-send-message-tools>div{display:flex;gap:var(--space-sm);flex-wrap:wrap}
.campaign-send-message-tools button{padding:5px var(--space-sm);border:0;border-radius:var(--radius-pill);background:var(--c-brand-tint);color:var(--c-brand-primary);font:600 var(--text-caption2)/1 var(--font-family);cursor:pointer}
.campaign-send-message-tools>small{color:var(--c-text-tertiary);font-size:var(--text-caption2);font-variant-numeric:tabular-nums;text-align:right}
.campaign-send-audience-tools{grid-template-columns:auto minmax(150px,260px) auto;align-items:center}
.campaign-send-filter{display:inline-flex;min-height:var(--size-control-medium);align-items:center;padding:0 var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-control-fill);color:var(--c-text-secondary);font-size:var(--text-caption);font-weight:700}
.campaign-send-list{border:0;gap:var(--space-sm);border-radius:0}
.campaign-send-lead{min-height:58px;border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-row);background:var(--c-background-secondary)}
.campaign-send-lead[data-selected="true"]{border-color:color-mix(in srgb,var(--c-brand-primary) 36%,var(--c-card-border));background:color-mix(in srgb,var(--c-brand-tint) 70%,var(--c-card-background))}
.campaign-send-lead>b{display:grid;width:28px;height:28px;flex:0 0 28px;place-items:center;border-radius:50%;background:color-mix(in srgb,var(--c-brand-primary) 70%,transparent);color:var(--c-on-brand);font-size:10px}
.campaign-send-lead>span{flex:1}
.campaign-send-lead>em{color:var(--c-text-tertiary);font-size:10px;font-style:normal;font-weight:700}
.campaign-send-readiness>header{align-items:center}
.campaign-send-readiness>header>strong{font-size:var(--text-subhead)}
.campaign-send-readiness>header>b{padding:4px var(--space-sm);border-radius:var(--radius-pill);background:var(--c-brand-tint)}
.campaign-send-readiness>div{display:flex;flex-direction:column;gap:var(--space-sm-md)}
.campaign-send-readiness>div>div{display:flex;align-items:center;gap:var(--space-sm);color:var(--c-text-tertiary)}
.campaign-send-readiness>div>div[data-complete="true"]{color:var(--c-brand-primary)}
.campaign-send-readiness>div strong{color:var(--c-text-primary);font-size:var(--text-caption);font-weight:600}
.campaign-send-preview{display:flex;width:100%;align-items:stretch;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-xl);background:var(--c-background-secondary);color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}
.campaign-send-preview>b{font-size:var(--text-caption)}
.campaign-send-preview>span{padding:var(--space-md);border-radius:var(--radius-lg);background:color-mix(in srgb,var(--c-brand-tint) 72%,var(--c-card-background));font-size:var(--text-caption);line-height:1.45;white-space:pre-wrap}
.campaign-send-preview>small{color:var(--c-text-tertiary);font-size:var(--text-caption2);text-align:center}
.campaign-send-summary>div{display:flex;justify-content:space-between;gap:var(--space-sm);font-size:var(--text-caption)}
.campaign-send-summary>div span{color:var(--c-text-secondary)}
.campaign-send-summary>div strong{color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.campaign-send-review-button{width:100%;min-height:var(--size-control-medium);border:0;border-radius:var(--radius-control);background:var(--c-brand-primary);color:var(--c-on-brand);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}
.campaign-send-review-button:disabled{background:var(--c-control-fill);color:var(--c-text-tertiary);cursor:not-allowed}
.campaign-send-review-help{color:var(--c-text-tertiary);font-size:var(--text-caption2);line-height:1.4;text-align:center}
.campaign-send-preview-sheet h2{margin:0;color:var(--c-text-primary);font-size:var(--text-title2)}
.campaign-send-preview-sheet>p{margin:var(--space-xs) 0 var(--space-lg);color:var(--c-text-secondary)}
.campaign-send-preview-sheet>div{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-xl);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-xl);background:var(--c-background-secondary)}
.campaign-send-preview-sheet header{display:flex;justify-content:space-between;gap:var(--space-md)}
.campaign-send-preview-sheet header small{color:var(--c-text-tertiary)}
.campaign-send-preview-sheet label{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--c-text-tertiary);font-size:10px;letter-spacing:.06em}
.campaign-send-preview-sheet label strong{color:var(--c-text-primary);font-size:var(--text-subhead);letter-spacing:0}
.campaign-send-preview-sheet blockquote{margin:0;padding:var(--space-xl);border-radius:var(--radius-xl);background:color-mix(in srgb,var(--c-brand-tint) 72%,var(--c-card-background));color:var(--c-text-primary);font-size:var(--text-subhead);line-height:1.5;white-space:pre-wrap}
.campaign-send-result{display:flex;min-height:420px;align-items:center;justify-content:center;flex-direction:column;gap:var(--space-md);padding:var(--space-xl);text-align:center}
.campaign-send-result>span{display:grid;width:72px;height:72px;place-items:center;border-radius:50%;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:36px;font-weight:800}
.campaign-send-result[data-success="false"]>span{background:var(--c-warning-tint);color:var(--c-warning)}
.campaign-send-result h2{margin:0;color:var(--c-text-primary);font-size:var(--text-title2)}
.campaign-send-result>div{display:grid;grid-template-columns:auto auto;gap:var(--space-xs) var(--space-xl);align-items:baseline}
.campaign-send-result>div strong{color:var(--c-brand-primary);font-size:var(--text-title2);font-variant-numeric:tabular-nums}
.campaign-send-result>div small{color:var(--c-text-secondary)}
.growth-command__paid{display:flex;flex-direction:column;gap:var(--space-sm-md)}
.growth-command__paid[hidden]{display:none}
.growth-command__divider{height:var(--border-fine);margin:var(--space-xs) 0;background:var(--c-separator)}
.growth-command__paid h3{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:750;letter-spacing:.06em;text-transform:uppercase}
.growth-command__rail{grid-area:rail;display:flex;flex-direction:column;gap:var(--space-md)}
.growth-command__rail-card{padding:var(--space-lg)}
.growth-command__rail-card>header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-md)}
.growth-command__rail-card>header span{color:var(--c-text-secondary);font-size:var(--text-caption2)}
.growth-command__progress{height:5px;margin-bottom:var(--space-sm);overflow:hidden;border-radius:var(--radius-pill);background:var(--c-control-fill)}
.growth-command__progress span{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}
.growth-command__step{display:grid;width:100%;grid-template-columns:18px minmax(0,1fr) 12px;align-items:start;gap:var(--space-sm);padding:var(--space-sm-md) 0;border:0;border-bottom:var(--border-fine) solid var(--c-separator);background:transparent;color:var(--c-text-secondary);font:inherit;text-align:left;cursor:pointer}
.growth-command__step>span:first-child{color:var(--c-brand-primary)}
.growth-command__step>span:nth-child(2){display:flex;min-width:0;flex-direction:column;gap:2px}
.growth-command__step strong{color:var(--c-text-primary);font-size:var(--text-caption)}
.growth-command__step small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.growth-command__step b{font-size:18px;color:var(--c-text-tertiary)}
.growth-command__continue{width:100%;min-height:var(--size-control-small);margin-top:var(--space-md);border:0;border-radius:var(--radius-control);background:var(--c-brand-primary);color:var(--c-on-brand);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}
.growth-command__launch>h2{margin-bottom:var(--space-sm)}
.growth-command__launch>div{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm-md) 0;border-top:var(--border-fine) solid var(--c-separator)}
.growth-command__launch>div>span{display:flex;flex-direction:column;gap:2px}
.growth-command__launch strong{color:var(--c-text-primary);font-size:var(--text-caption)}
.growth-command__launch small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.growth-command__launch button{min-height:32px;padding:0 var(--space-sm-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-control-fill);color:var(--c-brand-primary);font:700 var(--text-caption2)/1 var(--font-family);cursor:pointer}
.growth-command__health p{margin:0;color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.45}
.growth-command__health[data-healthy="true"] header span{color:var(--c-brand-primary)}
.growth-command__health[data-healthy="false"] header span{color:var(--c-warning)}
.growth-command__performance{grid-area:performance;padding:var(--space-lg)}
.growth-command__chart-empty{display:flex;min-height:138px;align-items:center;justify-content:center;gap:var(--space-sm);margin-top:var(--space-md);background:repeating-linear-gradient(to bottom,transparent 0 33px,var(--c-separator) 34px);color:var(--c-text-secondary)}
.growth-command__chart-empty p{margin:0;padding:var(--space-md);border-radius:var(--radius-md);background:var(--c-control-fill);font-size:var(--text-caption)}
.growth-command__bars{display:flex;flex-direction:column;gap:var(--space-sm-md);padding-top:var(--space-lg)}
.growth-command__bars>div{display:grid;grid-template-columns:120px minmax(0,1fr) 28px;align-items:center;gap:var(--space-md);font-size:var(--text-caption)}
.growth-command__bars>div>span{overflow:hidden;color:var(--c-text-primary);text-overflow:ellipsis;white-space:nowrap}
.growth-command__bars i{height:8px;overflow:hidden;border-radius:var(--radius-pill);background:var(--c-control-fill)}
.growth-command__bars b{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}
.growth-command__bars strong{text-align:right;color:var(--c-brand-primary);font-variant-numeric:tabular-nums}

@media(max-width:1100px){
  .growth-command__workspace{grid-template-columns:minmax(0,1fr);grid-template-areas:'portfolio' 'rail' 'performance'}
  .growth-command__rail{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  .campaign-send-layout{grid-template-columns:minmax(0,1fr)}
}

@media(max-width:700px){
  .campaign-ledger{border:0;background:transparent}
  .campaign-ledger-wide{display:none}
  .campaign-compact-list{display:grid;gap:var(--space-sm-md)}
  .campaign-compact-card__open{padding:var(--space-md)}
  .paid-campaign-compact-stats{grid-template-columns:repeat(4,minmax(0,1fr))}
  .growth-command{gap:var(--space-md)}
  .growth-command__hero{gap:var(--space-md);padding:var(--space-lg)}
  .growth-command__hero-head{flex-direction:column}
  .growth-command__hero-actions{width:100%;overflow-x:auto;padding-bottom:1px;scrollbar-width:none}
  .growth-command__metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}
  .growth-command__metric{padding:0;gap:var(--space-sm)}
  .growth-command__metric+.growth-command__metric::before{display:none}
  .growth-command__metric-icon{width:32px;height:32px;flex-basis:32px;font-size:var(--text-subhead)}
  .growth-command__metric strong{font-size:var(--text-title3)}
  .growth-command__portfolio,.growth-command__performance,.growth-command__rail-card{padding:var(--space-md)}
  .growth-command__rail{display:flex}
  .campaign-ledger--portfolio .campaign-compact-card__open{display:flex;padding-right:52px}
  .campaign-ledger--portfolio .campaign-compact-card__header{display:flex}
  .campaign-ledger--portfolio .campaign-compact-stats{display:none}
  .modal--picker:has(.campaign-send-workspace) .modal__body{padding:12px}
  .campaign-send-hero{align-items:flex-start;flex-direction:column}
  .campaign-send-progress{width:100%;flex-basis:auto}
  .campaign-send-progress>span{width:64px;flex-basis:64px}
  .campaign-send-audience-tools{grid-template-columns:auto auto}
  .campaign-send-audience-tools input{grid-column:1/-1;grid-row:2}
  .campaign-send-message-tools{align-items:flex-start;flex-direction:column}
  .campaign-send-message-tools>small{text-align:left}
}

@media(max-width:400px){
  .campaign-compact-card__footer{align-items:flex-start;flex-direction:column}
}

/* ── The iPhone sweep's tap-target floor (IPHONE_SWEEP_LOOP S7) ──────────────
   Every class here was NAMED by the 390×844 sweep as an interactive target under
   WCAG's 24px floor. Phone width only, and deliberately at the END of the file —
   an equal-specificity override written before its base rule silently loses
   (see the .pricing-grid note at the mobile block above).
   Two techniques: zero-padding text verbs grow through padding a negative margin
   gives back, so nothing moves; capsule buttons gain real padding — a slightly
   taller pill is what a thumb wants anyway. */
@media (max-width:680px){
  .tip-strip__close{width:32px;height:32px}
  .pill,.cust-move,.lanechip,.sv-kind,.dwg-filing-jump,.pri-bucket__verb,.chip{padding-top:6px;padding-bottom:6px}
  .seg--compact .seg__tab{padding-top:var(--space-sm-md);padding-bottom:var(--space-sm-md)}
  /* Horizontal padding, NOT min-width: an explicit min-width replaces the flex default
     min-width:auto, which lets the whole strip shrink tabs under their own text and overlap.
     Padding widens the 18px "All" tab past the floor while tabs keep refusing to shrink. */
  .seg__tab{padding-left:4px;padding-right:4px}
  .hub-band__empty-verb,.vendor-foot__link,.mat-rail__link,.ar-rc__drill,.btn--verb{padding-top:8px;padding-bottom:8px;margin-top:-4px;margin-bottom:-4px}
  .ar-rc__book{padding-top:6px;padding-bottom:6px}
  /* Bare text links that live in card headers and job reference blocks */
  .card__header a,.jbref__section a,.card__body > a{display:inline-block;padding:8px 6px;margin:-8px -6px}
  .sv-legend__item{padding-top:6px;padding-bottom:6px}
  .sv-closed input{width:24px;height:24px}
  /* The filter bar goes column at this width, which flips the flex axis: an inline flex:1 that
     meant "grow wide" in the row becomes a zero-basis VERTICAL squeeze (people's search input
     computed 21px tall against a height rule saying 44). Children keep their own heights. */
  .filter-bar > *{flex:0 0 auto !important} /* !important: the squeeze arrives as an INLINE flex:1 */
  /* In-table text buttons the LIVE sweep surfaced (fixture data never rendered them): the
     row-open name buttons in People and Payroll, the access pill on Team, and alert links. */
  /* !important: pp-row-open and wk-open set padding:0 INLINE in their markup, and an inline
     style beats any stylesheet weight short of this. */
  .pp-row-open,.wk-open,.ta-access,.billing-alert a{padding-top:8px !important;padding-bottom:8px !important;margin-top:-4px;margin-bottom:-4px}
  .gl-search input{padding-top:8px;padding-bottom:8px;margin-top:-8px;margin-bottom:-8px}
}
.rv-toolbar { align-items: end; display: flex; gap: 16px; justify-content: space-between; margin: 16px 0; }
.rv-picker { display: grid; gap: 6px; min-width: min(520px, 65vw); }
.rv-picker > span { color: var(--d-text-3); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.rv-picker select { background: var(--d-card-bg); border: 1px solid var(--d-border); border-radius: 8px; color: var(--d-text); min-height: 40px; padding: 0 34px 0 12px; }
.rv-record { align-items: center; display: flex; gap: 20px; justify-content: space-between; margin-bottom: 16px; padding: 20px; }
.rv-record h2 { font-size: 20px; margin: 3px 0 5px; }
.rv-record__address { color: var(--d-text-2); font-size: 13px; margin-top: 5px; }
.rv-record__actions { display: flex; flex: none; gap: 8px; }
.rv-output { overflow: hidden; }
.rv-output__head { align-items: start; display: flex; gap: 16px; justify-content: space-between; padding: 18px 20px; }
.rv-output__head .muted { font-size: 12px; margin-top: 3px; }
.rv-readonly { background: var(--d-bg-2); border: 1px solid var(--d-border); border-radius: 999px; color: var(--d-text-3); flex: none; font-size: 11px; font-weight: 650; padding: 5px 9px; }

/* Assembly library — Catalyst's Settings → Business → Assemblies workspace. */
.asm-lib{max-width:1180px;margin:0 auto;padding:0 0 32px;color:var(--d-text)}
.asm-lib__hero{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;padding:24px 0 18px}
.asm-lib__hero h1{font-size:28px;line-height:1.1;margin:5px 0 7px}.asm-lib__hero p{color:var(--d-text-2);margin:0}
.asm-lib__eyebrow{display:block;color:var(--c-brand-primary);font-size:10px;font-weight:750;letter-spacing:.1em}
.asm-lib__context{display:inline-flex;align-items:center;gap:5px;margin-top:10px;padding:6px 10px;border-radius:999px;background:var(--d-bg-2);color:var(--d-text-2);font-size:11px}
.asm-lib__context i{width:6px;height:6px;border-radius:50%;background:currentColor}.asm-lib__context i.is-ready{color:var(--c-success)}.asm-lib__context i.is-warning{color:var(--c-warning)}
.asm-lib__actions{display:flex;gap:8px;flex:none}.asm-lib__metrics{display:grid;grid-template-columns:repeat(4,1fr);background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:12px;margin-bottom:18px;overflow:hidden}
.asm-lib__metrics div{display:grid;gap:3px;padding:15px 18px;border-right:1px solid var(--d-border)}.asm-lib__metrics div:last-child{border:0}
.asm-lib__metrics strong{font-size:20px;font-variant-numeric:tabular-nums}.asm-lib__metrics span{color:var(--d-text-3);font-size:11px}
.asm-lib__workspace{display:grid;grid-template-columns:minmax(0,1fr) 292px;gap:18px;align-items:start}
.asm-lib__panel,.asm-lib__rail-card{background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:12px;padding:16px}
.asm-lib__panel-head{margin-bottom:14px}.asm-lib__panel-head h2,.asm-lib__rail-card h2{font-size:15px;margin:0}.asm-lib__panel-head p{font-size:11px;color:var(--d-text-2);margin:4px 0 0}
.asm-lib__tabs{display:flex;gap:6px;background:var(--d-bg-2);border-radius:9px;padding:4px;overflow-x:auto}
.asm-lib__tabs button{border:0;border-radius:999px;background:transparent;color:var(--d-text-2);font:600 12px inherit;padding:8px 12px;white-space:nowrap;min-height:36px}.asm-lib__tabs button.is-on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.asm-lib__tabs span{margin-left:6px;font-variant-numeric:tabular-nums}.asm-lib__toolbar{display:flex;align-items:center;gap:12px;margin:14px 0}.asm-lib__search{display:flex;align-items:center;gap:8px;flex:1;min-width:170px;min-height:40px;border:1px solid var(--d-border);border-radius:8px;background:var(--d-bg-2);padding:0 11px;color:var(--d-text-3)}
.asm-lib__search input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--d-text)}
.asm-lib__filters{display:flex;gap:4px}.asm-lib__filters button{min-height:32px;border:0;border-radius:999px;padding:6px 10px;background:var(--d-bg-2);color:var(--d-text-2);font-size:11px;font-weight:650}.asm-lib__filters button.is-on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.asm-lib__attention{margin:0 0 10px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--c-warning) 30%,transparent);border-radius:9px;background:color-mix(in srgb,var(--c-warning) 10%,transparent);color:var(--d-text);font-size:11px;font-weight:650}
.asm-lib__row{display:grid;width:100%;grid-template-columns:36px minmax(180px,1fr) 105px 125px 18px;align-items:center;gap:12px;border:1px solid var(--d-border);border-radius:9px;margin-top:10px;padding:12px;background:var(--d-bg-2);color:var(--d-text);text-align:left;font-size:12px}
.asm-lib__row:hover{border-color:color-mix(in srgb,var(--c-brand-primary) 45%,var(--d-border))}.asm-lib__row-copy{display:grid;gap:3px}.asm-lib__row small,.asm-lib__row>span:nth-last-child(3),.asm-lib__row>span:last-child{color:var(--d-text-3)}
.asm-lib__row b,.asm-lib__starter b,.asm-lib__rail-card>header b{justify-self:end;border-radius:999px;padding:5px 7px;font-size:9px;letter-spacing:.05em;background:color-mix(in srgb,currentColor 12%,transparent)}.asm-lib .is-ready{color:var(--c-success)}.asm-lib .is-warning{color:var(--c-warning)}
.asm-lib__icon{display:grid;place-items:center;width:34px;height:34px;border-radius:8px;background:var(--c-brand-tint);color:var(--c-brand-primary)}
.asm-lib__starters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:10px}.asm-lib__starter{display:grid;gap:10px;min-height:138px;text-align:left;border:1px solid var(--d-border);border-radius:10px;background:var(--d-bg-2);color:var(--d-text);padding:15px}
.asm-lib__starter-head{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:start;gap:10px}.asm-lib__starter-head>span:nth-child(2){display:grid;gap:2px}.asm-lib__starter em{color:var(--c-accent-purple,var(--c-brand-primary));font-size:10px}.asm-lib__starter p{color:var(--d-text-2);font-size:12px;line-height:1.4;margin:0}.asm-lib__starter>small{display:flex;justify-content:space-between;gap:10px;color:var(--d-text-3);font-weight:600}.asm-lib__starter>small span:last-child{color:var(--c-brand-primary)}
.asm-lib__empty{display:grid;place-items:center;min-height:120px;color:var(--d-text-2);font-size:13px}
.asm-lib__rail{display:grid;gap:12px}.asm-lib__rail-card{display:grid;gap:12px}.asm-lib__rail-card>header{display:flex;align-items:center;justify-content:space-between;gap:8px}.asm-lib__book{display:flex;align-items:center;gap:10px}.asm-lib__book>span:last-child{display:grid;gap:3px;min-width:0}.asm-lib__book small,.asm-lib__rail-copy,.asm-lib__guide small{color:var(--d-text-2);font-size:11px;line-height:1.4}.asm-lib__rail-card hr{width:100%;border:0;border-top:1px solid var(--d-border);margin:0}.asm-lib__rail-card .btn{justify-content:center;width:100%}
.asm-lib__check{margin:0;font-size:11px;font-weight:650}.asm-lib__guide{display:flex;gap:10px;align-items:flex-start}.asm-lib__guide>b{display:grid;place-items:center;flex:none;width:25px;height:25px;border-radius:50%;background:var(--c-brand-primary);color:var(--c-on-brand);font-size:11px}.asm-lib__guide>span{display:grid;gap:2px}.asm-lib__guide strong{font-size:12px}
.asm-lib__row,.asm-lib__starter{text-decoration:none}

/* Routed Assembly Builder and Starter Setup — Catalyst owns these as pages, not library modals. */
.asm-workspace{max-width:1180px;margin:0 auto;padding:22px 0 38px;color:var(--d-text)}
.settings-destination:has(.asm-lib,.asm-workspace)>.settings-destination__crumb a{display:inline-flex;align-items:center;min-height:32px;padding-inline:2px}
.asm-workspace__hero{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:22px}
.asm-workspace__hero>div:first-child{display:grid;gap:5px}.asm-workspace__hero span{font-size:10px;font-weight:750;letter-spacing:.09em;color:var(--c-brand-primary)}
.asm-workspace__hero h1{margin:0;font-size:26px;line-height:1.15}.asm-workspace__hero p{margin:0;color:var(--d-text-2);font-size:13px}
.asm-workspace__actions{display:flex;align-items:center;gap:8px;flex:none}.asm-workspace__columns{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:22px;align-items:start}
.asm-setup .asm-workspace__columns{grid-template-columns:minmax(0,1fr) 330px}.asm-workspace__main,.asm-workspace__aside{display:grid;gap:16px;min-width:0}
.asm-workspace__panel{display:grid;gap:16px;padding:18px;border:1px solid var(--d-border);border-radius:12px;background:var(--d-card-bg)}
.asm-workspace__section-head{display:grid;gap:4px}.asm-workspace__section-head h2,.asm-workspace__panel h2{margin:0;font-size:16px}.asm-workspace__section-head p{margin:0;color:var(--d-text-2);font-size:11px}
.asm-workspace__field{display:grid;gap:7px}.asm-workspace__field>span,.asm-builder__component-labels,.asm-setup__labels,.asm-pricing__labels{color:var(--d-text-3);font-size:9px;font-weight:750;letter-spacing:.07em}
.asm-workspace__field>input,.asm-workspace__field select,.asm-setup select{width:100%;min-height:42px;border:1px solid var(--d-border);border-radius:8px;background:var(--d-bg-2);color:var(--d-text);padding:0 11px}
.asm-workspace__field>small,.asm-workspace__panel>small{color:var(--d-text-3);font-size:11px}.asm-workspace__select{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;min-height:42px;padding:0 11px;border:1px solid var(--d-border);border-radius:8px;background:var(--d-bg-2)}
.asm-workspace__select select{min-height:38px;padding:0;border:0;background:transparent}.asm-workspace__select b,.asm-workspace__driver b{font-size:10px;color:var(--c-success);white-space:nowrap}.asm-workspace__driver{display:flex;align-items:center;gap:10px}.asm-workspace__driver select{flex:1}.asm-workspace__equation{justify-self:start;padding:6px 9px;border-radius:6px;background:var(--d-bg-2);font-variant-numeric:tabular-nums}
.asm-builder__component-card>header,.asm-setup__components>header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.asm-builder__empty{display:grid;place-items:center;gap:7px;min-height:140px;border:1px dashed var(--d-border);border-radius:9px;background:var(--d-bg-2);color:var(--d-text);text-align:center}.asm-builder__empty>b{font-size:24px;color:var(--c-brand-primary)}.asm-builder__empty>span{font-size:11px;color:var(--d-text-2)}
.asm-builder__component-labels,.asm-builder__component{display:grid;grid-template-columns:34px minmax(160px,1fr) 118px 88px 88px 26px;gap:9px;align-items:center}.asm-builder__component-labels{padding:0}.asm-builder__component{padding:10px 0;border-top:1px solid var(--d-border);font-size:11px}.asm-builder__component>span:nth-child(2){display:grid;gap:3px}.asm-builder__component small{color:var(--d-text-3)}.asm-builder__component>label{position:relative}.asm-builder__component input{width:100%;min-height:38px;padding:0 35px 0 8px;border:1px solid var(--d-border);border-radius:7px;background:var(--d-bg-2);color:var(--d-text)}.asm-builder__component>label>small{position:absolute;right:8px;top:13px}.asm-builder__component>span:nth-last-child(3),.asm-builder__component>strong{text-align:right;font-variant-numeric:tabular-nums}.asm-builder__component>button{min-width:32px;min-height:32px;border:0;background:transparent;color:var(--d-text-3);font-size:18px}.asm-builder__add-row{width:100%;min-height:42px;border:1px dashed var(--d-border);border-radius:8px;background:var(--d-bg-2);color:var(--c-brand-primary);font-size:11px;font-weight:700}
.asm-preview-card{display:grid;gap:14px;padding:20px;border-radius:16px;color:var(--c-money-ink);background:var(--c-money-gradient)}.asm-preview-card>span{color:var(--c-money-mint);font-size:9px;font-weight:750;letter-spacing:.08em}.asm-preview-card h2{margin:0;font-size:22px}.asm-preview-card p{margin:0;color:var(--c-money-dim);font-size:11px}.asm-preview-card hr{width:100%;border:0;border-top:1px solid var(--c-money-meter-track);margin:0}.asm-preview-card__metrics{display:grid;grid-template-columns:1fr 1fr;gap:13px}.asm-preview-card__metrics>div{display:grid;gap:2px}.asm-preview-card__metrics strong{font-size:16px;font-variant-numeric:tabular-nums}.asm-preview-card__metrics small{color:var(--c-money-dim);font-size:10px}.asm-preview-card__status{justify-self:start;padding:5px 9px;border-radius:999px;background:var(--c-money-ghost);color:var(--c-money-mint);font-size:10px}
.asm-scale-card>div{display:flex;align-items:center;gap:7px}.asm-scale-card>div span{display:grid;place-items:center;flex:1;gap:2px;padding:9px 4px;border-radius:8px;background:var(--d-bg-2)}.asm-scale-card>div strong{font-size:17px}.asm-scale-card>div small{font-size:9px;color:var(--d-text-3)}.asm-scale-card>div i{color:var(--d-text-3)}.asm-scale-card>p,.asm-workspace__tip p{margin:0;color:var(--d-text-2);font-size:11px}.asm-workspace__tip{display:grid;gap:7px;padding:18px;border-radius:12px;background:color-mix(in srgb,var(--c-brand-primary) 9%,var(--d-card-bg))}.asm-workspace__tip strong{color:var(--c-brand-primary);font-size:12px}
.asm-workspace__error,.asm-workspace__warning{margin:0;padding:11px 13px;border-radius:8px;background:color-mix(in srgb,var(--c-danger) 8%,transparent);color:var(--c-danger);font-size:11px;font-weight:650}.asm-workspace__warning{background:color-mix(in srgb,var(--c-warning) 9%,transparent);color:var(--c-warning)}
.asm-workspace__missing{display:grid;justify-items:start;gap:10px}.asm-workspace__missing h1,.asm-workspace__missing p{margin:0}

/* Assembly component picker sheet. */
.asm-picker__intro{display:flex;align-items:center;justify-content:space-between;gap:16px}.asm-picker__intro p{margin:0;color:var(--d-text-2);font-size:11px}.asm-picker__tools{display:grid;gap:10px;margin:15px -20px 0;padding:13px 20px;background:var(--d-bg-2)}.asm-picker__tools>label{display:flex;align-items:center;gap:8px;min-height:40px;padding:0 11px;border:1px solid var(--d-border);border-radius:8px;background:var(--d-card-bg)}.asm-picker__tools input{width:100%;border:0;outline:0;background:transparent;color:var(--d-text)}.asm-picker__tools>div{display:flex;gap:6px}.asm-picker__tools button{min-height:32px;padding:5px 11px;border:0;border-radius:999px;background:var(--d-card-bg);color:var(--d-text-2);font-size:11px}.asm-picker__tools button.is-on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.asm-picker__list{display:grid;gap:8px;max-height:480px;overflow:auto;margin:0 -20px;padding:16px 20px;background:linear-gradient(var(--c-background),var(--d-bg-2))}.asm-picker__row{display:grid;grid-template-columns:34px minmax(0,1fr) auto 20px;align-items:center;gap:11px;padding:12px;border:1px solid var(--d-border);border-radius:9px;background:var(--d-card-bg);color:var(--d-text);text-align:left}.asm-picker__row>span:nth-child(2){display:grid;gap:3px}.asm-picker__row small{color:var(--d-text-2)}.asm-picker__row.is-selected{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}.asm-picker__row>b{color:var(--c-brand-primary)}
.asm-picker__empty,.asm-picker__state{display:grid;justify-items:center;gap:10px;min-height:320px;padding:30px;text-align:center}.asm-picker__empty>b,.asm-picker__state>b{display:grid;place-items:center;width:56px;height:56px;border-radius:15px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:24px}.asm-picker__empty>span{font-size:9px;font-weight:750;letter-spacing:.08em;color:var(--c-brand-primary)}.asm-picker__empty h2,.asm-picker__state h2,.asm-picker__empty p,.asm-picker__state p{margin:0}.asm-picker__empty p,.asm-picker__state p{max-width:440px;color:var(--d-text-2);font-size:12px}.asm-picker__benefits{display:flex;width:100%;margin-top:10px;border-block:1px solid var(--d-border)}.asm-picker__benefits>span{display:grid;place-items:center;flex:1;gap:5px;padding:14px;border-right:1px solid var(--d-border);color:var(--c-brand-primary)}.asm-picker__benefits>span:last-child{border:0}.asm-picker__benefits b{font-size:10px;color:var(--d-text)}.asm-picker__empty aside{justify-self:stretch;padding:13px;border-radius:8px;background:var(--c-brand-tint);text-align:left}.asm-picker__empty aside p{margin-top:4px}.asm-picker__empty aside strong{font-size:11px;color:var(--c-brand-primary)}.asm-picker__intro~footer{display:flex;align-items:center;justify-content:space-between;margin:0 -20px -20px;padding:13px 20px;border-top:1px solid var(--d-border);font-size:11px;color:var(--d-text-2)}

.modal--picker:has(.asm-pricebook-sheet){width:min(1180px,calc(100vw - 36px));max-width:1180px}.modal--picker:has(.asm-pricebook-sheet)>.modal__body{padding:16px 18px 24px}.asm-pricebook-sheet{min-height:420px}.asm-pricebook-sheet .price-book-breadcrumb{display:none}

/* Three-step starter setup. */
.asm-setup__progress{display:flex;align-items:center;gap:9px;margin-bottom:20px}.asm-setup__progress>span{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--d-text-3)}.asm-setup__progress>span>b{display:grid;place-items:center;width:28px;height:28px;border:1px solid var(--d-border);border-radius:50%}.asm-setup__progress>span.is-ready{color:var(--d-text)}.asm-setup__progress>span.is-ready>b{border-color:var(--c-brand-primary);background:var(--c-brand-primary);color:var(--c-on-brand)}.asm-setup__progress>i{height:1px;flex:1;background:var(--d-border)}.asm-setup__progress>strong{font-size:10px;color:var(--d-text-2);white-space:nowrap}
.asm-setup__book>div{display:flex;align-items:center;flex-wrap:wrap;gap:11px}.asm-setup__book>div>span:nth-child(2){display:grid;gap:3px;flex:1;min-width:140px}.asm-setup__book small{color:var(--d-text-2);font-size:11px}.asm-setup__book>div>b{padding:4px 7px;border-radius:999px;background:var(--c-success-tint);color:var(--c-success);font-size:9px}.asm-setup__book select{width:auto;max-width:150px;min-width:0;min-height:38px}.asm-setup__book button:not(.btn){flex:none;min-height:38px;padding:0 8px;border:0;background:transparent;color:var(--c-brand-primary);font-weight:650}.asm-setup__book>p{margin:0;color:var(--d-text-2);font-size:11px}
.asm-setup__locked{display:flex;align-items:center;gap:12px;padding:13px;border-radius:9px;background:var(--d-bg-2)}.asm-setup__locked>span:nth-child(2){display:grid;gap:3px;flex:1}.asm-setup__locked small{color:var(--d-text-2);font-size:11px}.asm-setup__measurement{display:flex;align-items:center;gap:11px;padding:13px;border:1px solid color-mix(in srgb,var(--c-brand-primary) 42%,var(--d-border));border-radius:9px;background:color-mix(in srgb,var(--c-brand-primary) 4%,var(--d-card-bg))}.asm-setup__measurement>span:nth-child(2){display:grid;gap:3px;flex:1}.asm-setup__measurement em{padding:3px 6px;border-radius:999px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:9px}.asm-setup__measurement small{color:var(--d-text-2);font-size:11px}.asm-setup__measurement>b{color:var(--c-success);font-size:10px}.asm-setup__existing{display:flex;align-items:center;gap:8px;color:var(--c-brand-primary);font-size:11px;font-weight:650}.asm-setup__existing select{flex:1}
.asm-setup__labels,.asm-setup__component{display:grid;grid-template-columns:minmax(160px,1fr) 280px 106px 92px 20px;align-items:center;gap:12px}.asm-setup__labels{padding-left:32px}.asm-setup__component{grid-template-columns:20px minmax(145px,1fr) 280px 106px 92px 20px;padding:10px 0;border-top:1px solid var(--d-border);font-size:11px}.asm-setup__component>span:nth-child(2){display:grid;gap:3px}.asm-setup__component>span:nth-child(2)>strong{font-size:12px}.asm-setup__component em{padding:2px 5px;border-radius:999px;background:var(--d-bg-2);color:var(--d-text-3);font-size:8px}.asm-setup__component small{color:var(--d-text-2)}.asm-setup__component>select{min-width:0}.asm-setup__component>button{display:flex;justify-content:space-between;align-items:center;min-height:42px;border:1px solid var(--c-warning);border-radius:8px;background:var(--d-bg-2);color:var(--c-warning);padding:0 10px}.asm-setup__component>label{position:relative}.asm-setup__component input{width:100%;min-height:42px;padding:0 35px 0 8px;border:1px solid var(--d-border);border-radius:8px;background:var(--d-bg-2);color:var(--d-text)}.asm-setup__component>label small{position:absolute;right:8px;top:15px}.asm-setup__component>span:nth-last-child(2){text-align:right;font-variant-numeric:tabular-nums}.asm-setup__components>button{justify-self:start;min-height:38px;padding:0 8px;border:0;background:transparent;color:var(--c-brand-primary);font-size:11px;font-weight:650}
.asm-setup__checklist>div{display:flex;align-items:flex-start;gap:9px}.asm-setup__checklist>div>span{display:grid;gap:2px}.asm-setup__checklist small{color:var(--d-text-2);font-size:10px}.asm-setup__checklist>p{margin:0;font-size:10px;font-weight:700}.asm-setup__behavior h2{color:var(--c-brand-primary)}.asm-setup__behavior p{margin:0;color:var(--d-text-2);font-size:11px}

/* Focused starter pricing sheet. */
.modal--record:has(.asm-pricing){width:min(1180px,calc(100vw - 36px));max-width:1180px}.modal--record:has(.asm-pricing)>.modal__header{display:none}.modal--record:has(.asm-pricing)>.modal__body{padding:0;max-height:min(86vh,820px)}.modal--record:has(.asm-pricing)>.modal__footer{display:none}
.asm-pricing>header{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 20px;border-bottom:1px solid var(--d-border)}.asm-pricing>header>span{display:block;color:var(--c-brand-primary);font-size:9px;font-weight:750;letter-spacing:.08em}.asm-pricing>header>p{flex:1;margin:0;color:var(--d-text-2);font-size:11px}.asm-pricing>header>div{display:flex;align-items:center;gap:7px}.asm-pricing>header>div>b{font-size:10px}
.asm-pricing__context{display:grid;grid-template-columns:repeat(4,1fr);margin:18px;border:1px solid var(--d-border);border-radius:11px;background:var(--d-card-bg)}.asm-pricing__context>span{display:grid;gap:4px;padding:14px;border-right:1px solid var(--d-border)}.asm-pricing__context>span:last-child{border:0}.asm-pricing__context small{color:var(--d-text-2);font-size:9px}.asm-pricing__context strong{font-size:11px}
.asm-pricing__columns{display:grid;grid-template-columns:minmax(0,1fr) 288px;gap:16px;padding:0 18px 20px}.asm-pricing__columns>aside{display:grid;align-content:start;gap:14px}.asm-pricing__table{border:1px solid var(--d-border);border-radius:11px;background:var(--d-card-bg);overflow:hidden}.asm-pricing__table>.asm-workspace__section-head{padding:16px}.asm-pricing__labels,.asm-pricing__row{display:grid;grid-template-columns:minmax(180px,1fr) 44px 118px 100px 50px 106px;align-items:center;gap:10px}.asm-pricing__labels{padding:0 16px 8px}.asm-pricing__row{padding:12px 16px;border-top:1px solid var(--d-border);font-size:10px}.asm-pricing__row>span:first-child{display:grid;gap:3px}.asm-pricing__row small{color:var(--d-text-2)}.asm-pricing__row>label{display:flex;align-items:center;gap:4px}.asm-pricing__row input{width:100%;min-height:38px;border:1px solid var(--d-border);border-radius:7px;background:var(--d-bg-2);color:var(--d-text);padding:0 7px}.asm-pricing__row>strong,.asm-pricing__row>span:nth-last-child(2){text-align:right;font-variant-numeric:tabular-nums}.asm-pricing__row>b{text-align:right}.asm-pricing__guidance{margin:12px 16px;padding:10px;border:1px solid currentColor;border-radius:8px;background:color-mix(in srgb,currentColor 7%,transparent);font-size:10px;font-weight:650}.asm-pricing__rules{display:flex;align-items:center;gap:9px;width:100%;padding:14px 16px;border:0;border-top:1px solid var(--d-border);background:transparent;color:var(--d-text);text-align:left}.asm-pricing__rules>span{display:grid;gap:2px;flex:1}.asm-pricing__rules small{color:var(--d-text-2)}.asm-pricing__rules em{color:var(--d-text-3);font-size:9px}.asm-pricing__rule-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:0 16px 16px}.asm-pricing__rule-grid>span{display:grid;gap:3px;padding:9px;border-radius:8px;background:var(--d-bg-2)}.asm-pricing__rule-grid small{color:var(--d-text-2);font-size:9px}
/* Catalyst measures the destination pane, not the whole window. The persistent 196px CRM rail,
   destination padding, and the setup's 330px preview need a wider browser threshold so the
   component table and Price Book controls never continue underneath that preview. */
@media (max-width: 1400px) {
  .asm-lib__workspace{grid-template-columns:1fr}
  .asm-workspace__columns,.asm-setup .asm-workspace__columns{grid-template-columns:1fr}
  .asm-workspace__aside{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start}
  .asm-setup .asm-workspace__aside{grid-template-columns:repeat(3,minmax(0,1fr))}
  .asm-pricing__columns{grid-template-columns:1fr}.asm-pricing__columns>aside{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width: 680px) {
  .asm-lib__hero{align-items:stretch;flex-direction:column}.asm-lib__actions{display:grid;grid-template-columns:1fr 1fr}.asm-lib__metrics{grid-template-columns:1fr 1fr}.asm-lib__metrics div:nth-child(2){border-right:0}.asm-lib__metrics div:nth-child(-n+2){border-bottom:1px solid var(--d-border)}
  .asm-lib__toolbar{align-items:stretch;flex-direction:column}.asm-lib__filters{overflow-x:auto}.asm-lib__filters button{min-height:36px}.asm-lib__row{grid-template-columns:36px minmax(0,1fr) 18px}.asm-lib__row>span:nth-last-child(3),.asm-lib__row>b{display:none}.asm-lib__starters{grid-template-columns:1fr}
  .asm-workspace{padding-top:14px}.asm-workspace__hero{align-items:stretch;flex-direction:column}.asm-workspace__actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.asm-workspace__actions .btn:last-child{grid-column:1/-1}.asm-workspace__aside,.asm-setup .asm-workspace__aside,.asm-pricing__columns>aside{grid-template-columns:1fr}.asm-builder__component-card>header,.asm-setup__components>header{align-items:stretch;flex-direction:column}.asm-builder__component-labels,.asm-setup__labels{display:none}.asm-builder__component{grid-template-columns:34px minmax(0,1fr) 24px}.asm-builder__component>label,.asm-builder__component>span:nth-last-child(3),.asm-builder__component>strong{grid-column:2}.asm-builder__component>button{grid-column:3;grid-row:1}.asm-workspace__select{grid-template-columns:auto minmax(0,1fr)}.asm-workspace__select>b{grid-column:2}.asm-workspace__driver{align-items:stretch;flex-direction:column}.asm-workspace__driver b{align-self:flex-start}.asm-setup__progress{align-items:flex-start;display:grid;grid-template-columns:1fr}.asm-setup__progress>i{display:none}.asm-setup__progress>strong{justify-self:start}.asm-setup__book>div,.asm-setup__measurement{align-items:stretch;flex-wrap:wrap}.asm-setup__book select{width:100%;max-width:none}.asm-setup__existing{align-items:stretch;flex-direction:column}.asm-setup__component{grid-template-columns:20px minmax(0,1fr) 20px}.asm-setup__component>select,.asm-setup__component>button,.asm-setup__component>label,.asm-setup__component>span:nth-last-child(2){grid-column:2}.asm-setup__component>b:last-child{grid-column:3;grid-row:1}.asm-picker__intro{align-items:stretch;flex-direction:column}.asm-picker__tools>div{overflow-x:auto}.asm-picker__row{grid-template-columns:34px minmax(0,1fr) 20px}.asm-picker__row>strong{grid-column:2}.asm-picker__benefits{flex-direction:column}.asm-picker__benefits>span{border-right:0;border-bottom:1px solid var(--d-border)}.asm-pricing>header{align-items:stretch;flex-direction:column}.asm-pricing>header>div{display:grid;grid-template-columns:1fr 1fr}.asm-pricing>header>div>b{grid-column:1/-1}.asm-pricing>header>div .btn:last-child{grid-column:1/-1}.asm-pricing__context{grid-template-columns:1fr 1fr}.asm-pricing__context>span:nth-child(2){border-right:0}.asm-pricing__context>span:nth-child(-n+2){border-bottom:1px solid var(--d-border)}.asm-pricing__labels{display:none}.asm-pricing__row{grid-template-columns:minmax(0,1fr) auto}.asm-pricing__row>label{grid-column:1}.asm-pricing__row>strong,.asm-pricing__row>span:nth-last-child(2),.asm-pricing__row>b{grid-column:2;text-align:right}.asm-pricing__rules{align-items:flex-start}.asm-pricing__rules em{display:none}.asm-pricing__rule-grid{grid-template-columns:1fr 1fr}
  .rv-toolbar, .rv-record { align-items: stretch; flex-direction: column; }
  .rv-picker { min-width: 0; width: 100%; }
  .rv-record__actions { display: grid; grid-template-columns: 1fr 1fr; }
  .rv-record__actions .btn { justify-content: center; }
  .rv-output__head { align-items: start; flex-direction: column; }
}

/* ── Priorities: Catalyst ActionQueueView parity ────────────────────────────
   This block intentionally follows the earlier command-center rules. The markup below is the
   frozen Catalyst hierarchy: Daily brief → Action queue → consequence bands, with TodayRailView
   beside it. Keeping the parity rules together makes visual comparison mechanical. */
.pri-page-head{margin:0 0 16px}.pri-page-head h1{margin:0;font-size:30px;line-height:1.12;font-weight:760;letter-spacing:-.025em;color:var(--c-text-primary)}
.pri-page-head p{margin:5px 0 0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.today{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:28px;align-items:start}.today--nofinance{grid-template-columns:minmax(0,1fr)}

.pri-brief{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px 20px;margin:0 0 26px;padding:16px;overflow:visible;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}
.pri-brief__title{grid-column:1/-1;display:block;padding:0;border:0;font-size:var(--text-headline);font-weight:750;color:var(--c-text-primary)}
.pri-brief__cells{display:flex;align-items:flex-start;min-width:0}.pri-brief__cell{display:flex;flex-direction:row;align-items:center;gap:10px;min-width:0;padding:0 20px;border:0;border-left:1px solid var(--c-separator)}
.pri-brief__cell:first-child{padding-left:0;border-left:0}.pri-brief__cell:last-child{padding-right:0}
.pri-brief__icon{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;border-radius:var(--radius-control);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.pri-brief__icon svg{width:17px;height:17px}.pri-brief__cell--danger .pri-brief__icon{background:var(--c-danger-tint);color:var(--c-danger)}
.pri-brief__cell--warning .pri-brief__icon{background:var(--c-warning-tint);color:var(--c-warning)}
.pri-brief__copy{display:grid;min-width:0;gap:1px}.pri-brief__copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:19px;line-height:1.08;font-weight:760;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.pri-brief__cell--danger .pri-brief__copy strong,.pri-brief__cell--danger .pri-brief__copy small{color:var(--c-danger)}
.pri-brief__copy>span{font-size:var(--text-caption);color:var(--c-text-secondary)}.pri-brief__copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--c-text-tertiary)}
.pri-brief__work{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:5px;min-width:0;padding:0;border:0}.pri-brief__work-button{min-height:36px;padding:0 16px}

.pri-queue-head{display:flex;align-items:center;justify-content:space-between;gap:24px;margin:0 0 18px}.pri-queue-head>span{display:grid;gap:2px}.pri-queue-head strong{font-size:20px;line-height:1.15;color:var(--c-text-primary)}.pri-queue-head small{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pri-search{display:flex;align-items:center;gap:7px;width:min(320px,45%);min-height:38px;padding:0 11px;border:1px solid var(--c-input-border);border-radius:var(--radius-control);background:var(--c-input-fill);color:var(--c-text-tertiary)}
.pri-search input{min-width:0;width:100%;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:var(--text-footnote)/1 var(--font-family)}.pri-search:focus-within{border-color:var(--c-brand-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--c-brand-primary) 15%,transparent)}
.pri-queue-section{display:grid;gap:12px;margin:0 0 26px}.pri-queue-section__label{display:grid;grid-template-columns:7px auto auto minmax(18px,1fr);align-items:center;gap:7px;min-width:0}.pri-queue-section__dot{width:7px;height:7px;border-radius:50%;background:var(--c-brand-primary)}
.pri-queue-section__label strong{font-size:10px;letter-spacing:.075em;color:var(--c-text-secondary)}.pri-queue-section__count{padding:1px 7px;border-radius:999px;background:var(--c-control-fill);font-size:10px;font-weight:750;font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.pri-queue-section__rule{height:1px;background:var(--c-separator)}.pri-queue-section__label small{grid-column:2/-1;font-size:10px;color:var(--c-text-tertiary)}
.pri-queue-section__label--danger .pri-queue-section__dot{background:var(--c-danger)}.pri-queue-section__label--danger strong{color:var(--c-danger)}
.pri-queue-section__label--warning .pri-queue-section__dot{background:var(--c-warning)}.pri-queue-section__label--warning strong{color:var(--c-warning)}
.pri-queue-section__label--info .pri-queue-section__dot{background:var(--c-info)}.pri-queue-section__label--info strong{color:var(--c-info)}

.pri-action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.pri-action-grid--single{grid-template-columns:minmax(0,1fr)}
.pri-card{position:relative;display:grid;grid-template-columns:40px minmax(0,1fr) auto;grid-template-rows:auto auto;align-items:start;gap:5px 11px;min-height:98px;padding:14px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card);cursor:pointer;transition:border-color var(--motion-fast),transform var(--motion-fast),background var(--motion-fast)}
.pri-card:hover{border-color:color-mix(in srgb,var(--c-brand-primary) 35%,var(--c-card-border));transform:translateY(-1px)}.pri-card:focus-visible{outline:3px solid color-mix(in srgb,var(--c-brand-primary) 25%,transparent);outline-offset:2px}
.pri-card--compact{min-height:72px;grid-template-columns:34px minmax(0,1fr) auto;padding:11px 12px}.pri-card--severe{border-color:color-mix(in srgb,var(--c-danger) 25%,var(--c-card-border))}
.pri-card__icon{grid-row:1/3;display:grid;place-items:center;width:40px;height:40px;border-radius:11px;background:var(--c-brand-tint);color:var(--c-brand-primary)}.pri-card--compact .pri-card__icon{width:34px;height:34px;border-radius:9px}.pri-card__icon svg{width:19px;height:19px}.pri-card--compact .pri-card__icon svg{width:16px;height:16px}
.pri-card--severe .pri-card__icon{background:var(--c-danger-tint);color:var(--c-danger)}.pri-card__copy{display:grid;gap:3px;min-width:0}.pri-card__copy>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-footnote);color:var(--c-text-primary)}
.pri-card__icon--danger{background:var(--c-danger-tint);color:var(--c-danger)}.pri-card__icon--warning{background:var(--c-warning-tint);color:var(--c-warning)}.pri-card__icon--info{background:var(--c-info-tint);color:var(--c-info)}.pri-card__icon--purple{background:color-mix(in srgb,var(--c-accent-purple) 11%,transparent);color:var(--c-accent-purple)}.pri-card__icon--teal{background:color-mix(in srgb,var(--c-accent-teal) 11%,transparent);color:var(--c-accent-teal)}
.pri-card__copy>small{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-secondary)}.pri-card__also{margin-left:4px;color:var(--c-text-tertiary)}
.pri-card__moves{grid-column:2/4;display:flex;align-items:center;gap:7px;min-height:26px}.pri-card__move{min-height:28px;padding:0 10px;border:1px solid var(--c-brand-primary);border-radius:7px;background:transparent;color:var(--c-brand-primary);font:700 11px/1 var(--font-family);cursor:pointer}.pri-card__move--call{background:var(--c-brand-primary);color:var(--c-on-brand)}.pri-card__move--navigate{border-color:var(--c-accent-blue);color:var(--c-accent-blue)}.pri-card__move--done{border-color:var(--c-accent-green);color:var(--c-accent-green)}.pri-card__move--noshow{border-color:var(--c-accent-orange);color:var(--c-accent-orange)}.pri-card__reschedule{position:relative;display:inline-block}.pri-card__reschedule>summary{list-style:none;display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:0 10px;cursor:pointer}.pri-card__reschedule>summary::-webkit-details-marker{display:none}.pri-card__reschedule>div{position:absolute;right:0;top:calc(100% + 5px);z-index:5;display:grid;width:150px;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-card-background);box-shadow:0 10px 28px rgb(0 0 0 / 18%)}.pri-card__reschedule>div>button{min-height:32px;padding:0 10px;border:0;background:transparent;color:var(--c-text-primary);font:600 12px/1 var(--font-family);text-align:left;cursor:pointer}.pri-card__reschedule>div>button:hover{background:var(--c-field-fill)}.pri-card__move--danger{border-color:var(--c-danger);color:var(--c-danger)}
.pri-card__snooze{position:relative;align-self:start}.pri-card__snooze summary{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;list-style:none;color:var(--c-text-tertiary);cursor:pointer}.pri-card__snooze summary::-webkit-details-marker{display:none}.pri-card__snooze summary:hover{background:var(--c-control-fill);color:var(--c-text-primary)}
.pri-card__snooze>div{position:absolute;right:0;top:calc(100% + 5px);z-index:5;display:grid;width:150px;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-card-background);box-shadow:0 10px 28px rgb(0 0 0 / 18%)}.pri-card__snooze button{min-height:36px;padding:0 12px;border:0;background:transparent;color:var(--c-text-primary);font:500 var(--text-caption)/1 var(--font-family);text-align:left;cursor:pointer}.pri-card__snooze button:hover{background:var(--c-control-fill)}.pri-card__snooze button:last-child{color:var(--c-danger)}

.pri-bucket-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:10px}.pri-bucket-grid>div{display:grid;gap:10px;min-width:0}.pri-bucket-card{overflow:visible;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}.pri-bucket-card--severe{border-color:color-mix(in srgb,var(--c-danger) 25%,var(--c-card-border))}
.pri-bucket-card__head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:11px}.pri-bucket-card__toggle{display:grid;grid-template-columns:34px minmax(0,1fr) auto 14px;align-items:center;gap:9px;min-width:0;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}
.pri-bucket-card__icon{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--c-brand-tint);color:var(--c-brand-primary)}.pri-bucket-card--severe .pri-bucket-card__icon{background:var(--c-danger-tint);color:var(--c-danger)}.pri-bucket-card__icon svg{width:16px;height:16px}
.pri-bucket-card__icon--sendDrafts,.pri-bucket-card__icon--schedule,.pri-bucket-card__icon--chaseApproval,.pri-bucket-card__icon--closeVisit,.pri-bucket-card__icon--lienWaiver{background:var(--c-warning-tint);color:var(--c-warning)}.pri-bucket-card__icon--priceJob,.pri-bucket-card__icon--touchLead{background:color-mix(in srgb,var(--c-accent-purple) 11%,transparent);color:var(--c-accent-purple)}.pri-bucket-card__icon--compliance,.pri-bucket-card__icon--growth{background:color-mix(in srgb,var(--c-accent-teal) 11%,transparent);color:var(--c-accent-teal)}
.pri-bucket-card__copy{display:grid;gap:2px;min-width:0}.pri-bucket-card__copy>span{display:flex;align-items:center;gap:6px;min-width:0}.pri-bucket-card__copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-footnote);color:var(--c-text-primary)}.pri-bucket-card__copy b{padding:1px 6px;border-radius:999px;background:var(--c-control-fill);font-size:9px;color:var(--c-text-secondary)}.pri-bucket-card__copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--c-text-tertiary)}
.pri-bucket-card__amount{display:grid;justify-items:end;font-size:var(--text-caption);font-weight:750;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}.pri-bucket-card__amount small{font-size:9px;font-weight:500;color:var(--c-text-tertiary)}.pri-bucket-card__caret{width:14px;height:14px;color:var(--c-text-tertiary);transition:transform var(--motion-fast)}.pri-bucket-card__caret.is-open{transform:rotate(90deg)}
.pri-bucket-card__work{min-height:29px;padding:0 9px;border:1px solid var(--c-brand-primary);border-radius:7px;background:transparent;color:var(--c-brand-primary);font:700 10px/1 var(--font-family);white-space:nowrap;cursor:pointer}.pri-bucket-card__amount--small{color:var(--c-text-tertiary);font-weight:600}.pri-bucket-card__work--quiet{border-color:var(--c-border);color:var(--c-text-secondary)}.pri-bucket-card__items{display:grid;gap:8px;padding:0 10px 10px}.pri-bucket-card__items[hidden]{display:none}.pri-bucket-card__items .pri-card{box-shadow:none;background:var(--c-field-fill)}
.pri-search-empty{display:grid;justify-items:center;gap:5px;padding:42px 16px;color:var(--c-text-secondary)}.pri-search-empty span{font-size:var(--text-caption);color:var(--c-text-tertiary)}

/* TodayRailView */
.today-rail{position:sticky;top:84px;display:grid;gap:14px}.today-rail__card{margin:0;padding:14px;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}.today-rail__card-title{padding:0 0 11px;border:0;font-size:10px;font-weight:750;letter-spacing:.08em;color:var(--c-text-tertiary)}
.today-rail button{font-family:var(--font-family)}.today-rail__proposal{display:grid;grid-template-columns:28px minmax(0,1fr);align-items:center;gap:9px;width:100%;padding:11px;border:0;border-radius:var(--radius-control);background:var(--c-brand-tint);color:var(--c-brand-primary);text-align:left;cursor:pointer}.today-rail__proposal>span:first-child,.today-rail__quick>span{display:grid;place-items:center}.today-rail__proposal svg{width:20px;height:20px}.today-rail__proposal>span:last-child{display:grid;gap:1px}.today-rail__proposal strong{font-size:var(--text-footnote)}.today-rail__proposal small{font-size:10px;opacity:.8}
.today-rail__quick-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}.today-rail__quick{display:flex;align-items:center;gap:6px;min-width:0;min-height:38px;padding:8px 9px;border:0;border-radius:var(--radius-control);background:var(--c-input-fill);color:var(--c-text-secondary);text-align:left;cursor:pointer}.today-rail__quick:hover,.today-rail__proposal:hover{filter:brightness(.98)}.today-rail__quick svg{width:14px;height:14px}.today-rail__quick strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}
.today-rail__money{display:grid;gap:7px;width:100%;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.today-rail__money-row{display:grid;grid-template-columns:68px minmax(20px,1fr) 62px;align-items:center;gap:8px}.today-rail__money-label{font-size:10px;color:var(--c-text-secondary)}.today-rail__bar{height:9px;overflow:hidden;border-radius:999px;background:var(--c-input-fill)}.today-rail__bar-fill{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}.today-rail__bar-fill--purple{background:var(--c-accent-purple)}.today-rail__bar-fill--warning{background:var(--c-warning)}.today-rail__bar-fill--blue{background:var(--c-info)}
.today-rail__money-value{text-align:right;font-size:10px;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}.today-rail__owed{display:flex;justify-content:space-between;gap:10px;margin-top:3px;padding-top:9px;border-top:1px solid var(--c-separator);font-size:10px;color:var(--c-text-secondary)}.today-rail__owed strong{color:var(--c-warning);font-variant-numeric:tabular-nums}.today-rail__overdue{font-size:9px;color:var(--c-text-tertiary)}.today-rail__overdue--danger{color:var(--c-danger)}
.today-rail__week-copy{display:flex;align-items:center;width:100%;min-height:24px;padding:0;border:0;background:transparent;color:var(--c-text-secondary);font-size:10px;line-height:1.45;text-align:left;cursor:pointer}.today-rail__week-copy strong{color:var(--c-brand-primary)}

@media(max-width:1240px){.today{grid-template-columns:minmax(0,1fr) 285px;gap:20px}.pri-brief__cell{padding:0 14px}.pri-brief__icon{display:none}.pri-bucket-card__amount{display:none}.pri-bucket-card__toggle{grid-template-columns:34px minmax(0,1fr) 14px}}
@media(max-width:1100px){.today{grid-template-columns:minmax(0,1fr)}.today-rail{position:static;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start}.today-rail__card{height:100%}}
@media(max-width:760px){.pri-page-head h1{font-size:26px}.pri-brief{grid-template-columns:1fr;padding:14px}.pri-brief__title{border:0}.pri-brief__cells{display:grid;gap:14px}.pri-brief__cell,.pri-brief__cell:first-child{padding:0;border:0}.pri-brief__icon{display:grid}.pri-brief__work{align-items:stretch;padding:0}.pri-queue-head{align-items:stretch;flex-direction:column;gap:10px}.pri-search{width:100%}.pri-action-grid,.pri-bucket-grid{grid-template-columns:1fr}.pri-card{grid-template-columns:36px minmax(0,1fr) auto;min-height:78px;padding:12px}.pri-card__icon{width:36px;height:36px}.pri-bucket-card__toggle{grid-template-columns:34px minmax(0,1fr) auto 14px}.pri-bucket-card__amount{display:grid}.today-rail{grid-template-columns:1fr}.today-rail__quick,.today-rail__week-copy{min-height:44px}.pri-card__move,.pri-bucket-card__work{min-height:32px}}
@media(max-width:460px){.pri-bucket-card__amount{display:none}.pri-bucket-card__toggle{grid-template-columns:34px minmax(0,1fr) 14px}.pri-card__copy>small{-webkit-line-clamp:3}.pri-card__moves{grid-column:1/4}.pri-queue-section__label strong{white-space:normal}.today-rail__quick-grid{grid-template-columns:1fr 1fr}}

/* ── Dispatch: Catalyst hosted-inline parity ────────────────────────────────
   The shell owns the destination title and Schedule stop action. Catalyst begins with the run-day
   band, then the operating board, so Dispatch uses only the compact gutters between those layers. */
.dash-content.dispatch-host{padding:12px 24px 20px;overflow:auto}
@media(max-width:680px){.dash-content.dispatch-host{padding:10px 12px 18px}}

/* ── Project Map: Catalyst hosted-inline parity ─────────────────────────────
   The shell already owns the Project Map title and command search. Catalyst places the map
   directly under that bar, edge to edge; this destination therefore deliberately opts out of the
   ordinary page inset and scrolling frame. */
.dash-content.project-map-host{position:relative;flex:1 1 auto;height:calc(100dvh - var(--d-topbar-h));min-height:0;padding:0;overflow:hidden;background:var(--c-background-secondary)}
.pmap{position:absolute;inset:0;overflow:hidden;background:#dce8d8} /* raw-color-ok: cartographic fallback surface */
.pmap__canvas,.pmap__fallback{position:absolute;inset:0;width:100%;height:100%}
.pmap__fallback{overflow:hidden;background:
  radial-gradient(circle at 73% 34%,rgb(255 255 255 / 75%) 0 1px,transparent 2px),
  radial-gradient(circle at 49% 62%,rgb(255 255 255 / 70%) 0 1px,transparent 2px),
  linear-gradient(118deg,transparent 0 28%,rgb(152 197 218 / 55%) 28.2% 35%,transparent 35.2%),
  repeating-linear-gradient(16deg,transparent 0 67px,rgb(255 255 255 / 58%) 68px 70px),
  linear-gradient(150deg,#d7e9cf 0 45%,#e9e3c9 45% 70%,#c9e4ef 70%)} /* raw-color-ok: cartographic fallback palette */
.pmap__fallback::before{content:"UNITED STATES";position:absolute;left:42%;top:48%;font:800 13px/1 var(--font-family);letter-spacing:.14em;color:rgb(61 96 67 / 28%);transform:rotate(-4deg)}
.pmap__stats{position:absolute;z-index:5;top:12px;left:50%;transform:translateX(-50%);padding:5px 12px;border:1px solid rgb(255 255 255 / 72%);border-radius:999px;background:rgb(255 255 255 / 88%);box-shadow:0 2px 8px rgb(0 0 0 / 12%);backdrop-filter:blur(12px);font-size:var(--text-caption2);font-weight:750;font-variant-numeric:tabular-nums;color:var(--c-text-primary);white-space:nowrap}
.pmap__locate{position:absolute;z-index:5;top:14px;right:14px;display:grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid rgb(255 255 255 / 70%);border-radius:50%;background:rgb(255 255 255 / 90%);box-shadow:0 2px 9px rgb(0 0 0 / 16%);color:var(--c-brand-primary);cursor:pointer;backdrop-filter:blur(12px)}
.pmap__locate svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.pmap__locate:hover{background:var(--c-card-background)}
.pmap__loading,.pmap__empty,.pmap__message{position:absolute;z-index:4;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;margin:auto;width:min(330px,calc(100% - 40px));height:max-content;padding:20px;border:1px solid rgb(255 255 255 / 72%);border-radius:var(--radius-lg);background:rgb(255 255 255 / 88%);box-shadow:0 8px 28px rgb(0 0 0 / 14%);backdrop-filter:blur(15px);text-align:center;color:var(--c-text-secondary)}
.pmap__loading{flex-direction:row;width:max-content;font-size:var(--text-caption);font-weight:650}.pmap__spinner{width:16px;height:16px;border:2px solid var(--c-separator);border-top-color:var(--c-brand-primary);border-radius:50%;animation:pmapSpin .8s linear infinite}
@keyframes pmapSpin{to{transform:rotate(360deg)}}
.pmap__empty svg{width:30px;height:30px;fill:none;stroke:var(--c-text-tertiary);stroke-width:1.6;stroke-linejoin:round}.pmap__empty strong,.pmap__message strong{font-size:var(--text-subhead);color:var(--c-text-primary)}.pmap__empty span,.pmap__message span{max-width:260px;font-size:var(--text-caption);line-height:1.4}.pmap__message strong{color:var(--c-danger)}
.pmap__loading[hidden],.pmap__empty[hidden],.pmap__message[hidden],.pmap__stats[hidden],.pmap__fallback[hidden]{display:none}
.pmap-pin{display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:50%;background:var(--c-text-tertiary);box-shadow:0 2px 7px rgb(0 0 0 / 34%);cursor:pointer;transition:width var(--motion-fast),height var(--motion-fast),transform var(--motion-fast)}
.pmap-pin>span{display:block;width:9px;height:9px;border-radius:50%;background:white}.pmap-pin--draft{background:#8A9488}.pmap-pin--built{background:#D68A29}.pmap-pin--ready{background:#3A9657}.pmap-pin--selected{width:34px;height:34px;transform:translateY(-2px);box-shadow:0 3px 14px rgb(0 0 0 / 38%)}.pmap-pin--selected>span{width:14px;height:14px} /* raw-color-ok: native map status pin palette */
.pmap-pin--fallback{--pin-x:50%;--pin-y:50%;position:absolute;z-index:2;left:var(--pin-x);top:var(--pin-y);transform:translate(-50%,-50%)}.pmap-pin--fallback.pmap-pin--selected{transform:translate(-50%,calc(-50% - 2px))}
.pmap__callout-host{position:absolute;z-index:7;left:0;right:0;bottom:0;display:flex;justify-content:center;padding:0 18px 16px;pointer-events:none}.pmap-callout{width:min(560px,100%);padding:14px;border:1px solid rgb(255 255 255 / 80%);border-radius:var(--radius-lg);background:rgb(255 255 255 / 91%);box-shadow:0 10px 30px rgb(0 0 0 / 22%);backdrop-filter:blur(16px);pointer-events:auto;color:var(--c-text-primary)}
.pmap-callout__head{display:flex;align-items:flex-start;gap:14px}.pmap-callout__head>span{display:grid;gap:2px;min-width:0;flex:1}.pmap-callout__head strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-subhead);font-weight:750}.pmap-callout__head small{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:var(--text-caption);line-height:1.35;color:var(--c-text-secondary)}.pmap-callout__head button{display:grid;place-items:center;flex:0 0 28px;width:28px;height:28px;padding:0;border:0;border-radius:50%;background:var(--c-control-fill);color:var(--c-text-tertiary);font:700 17px/1 var(--font-family);cursor:pointer}
.pmap-callout__status{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:var(--text-caption2)}.pmap-callout__status strong{font-weight:700}.pmap-callout__status span{color:var(--c-text-secondary)}.pmap-status{display:block;width:8px;height:8px;border-radius:50%;background:var(--c-text-tertiary)}.pmap-status--draft{background:#8A9488}.pmap-status--built{background:#D68A29}.pmap-status--ready{background:#3A9657}.pmap-callout__meta{margin-top:5px;font-size:var(--text-caption2);color:var(--c-text-tertiary)} /* raw-color-ok: native map status pin palette */
.pmap-callout__actions{display:flex;align-items:center;gap:7px;margin-top:12px}.pmap-action{display:flex;align-items:center;justify-content:center;gap:6px;flex:1;min-height:42px;padding:0 12px;border:0;border-radius:var(--radius-control);color:white;font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}.pmap-action svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.pmap-action--call{background:var(--c-success);color:var(--c-on-success)}.pmap-action--route{background:var(--c-info);color:var(--c-on-info)}.pmap-action--open{background:var(--c-brand-primary);color:var(--c-on-brand)}
.pmap-more{position:relative;flex:0 0 42px}.pmap-more summary{display:grid;place-items:center;width:42px;height:42px;border-radius:var(--radius-control);list-style:none;background:var(--c-control-fill);font-size:11px;font-weight:800;letter-spacing:1px;cursor:pointer}.pmap-more summary::-webkit-details-marker{display:none}.pmap-more>div{position:absolute;right:0;bottom:calc(100% + 7px);display:grid;width:174px;overflow:hidden;border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-card-background);box-shadow:0 10px 28px rgb(0 0 0 / 22%)}.pmap-more button,.pmap-more>div>span{min-height:36px;padding:0 12px;border:0;background:transparent;color:var(--c-text-primary);font:500 var(--text-caption)/1 var(--font-family);text-align:left}.pmap-more button{cursor:pointer}.pmap-more button:hover{background:var(--c-control-fill)}.pmap-more button[aria-current="true"]{color:var(--c-brand-primary);font-weight:750}.pmap-more>div>span{display:flex;align-items:center;border-top:1px solid var(--c-separator);font-size:10px;font-weight:750;letter-spacing:.05em;color:var(--c-text-tertiary)}
/* ── The map's trailing controls and its four pushed pages ───────────────
   `mapTrailingButtons` is an ellipsis menu plus a filter control, and the app
   fills the filter glyph in when a status or market filter is set — the only
   sign, once the page is dismissed, that the pin set is narrowed. */
.pmap__trailing{position:absolute;z-index:6;top:14px;right:60px;display:flex;align-items:center;gap:8px}
.pmap-menu{position:relative}
.pmap-menu summary{display:grid;place-items:center;width:38px;height:38px;border:1px solid rgb(255 255 255 / 70%);
  border-radius:50%;background:rgb(255 255 255 / 90%);box-shadow:0 2px 9px rgb(0 0 0 / 16%);
  color:var(--c-brand-primary);font:800 11px/1 var(--font-family);letter-spacing:1px;cursor:pointer;list-style:none}
.pmap-menu summary::-webkit-details-marker{display:none}
.pmap-menu__sheet{position:absolute;right:0;top:calc(100% + 7px);display:grid;width:210px;overflow:hidden;
  border:1px solid var(--c-card-border);border-radius:var(--radius-control);background:var(--c-card-background);
  box-shadow:0 10px 28px rgb(0 0 0 / 22%)}
.pmap-menu__sheet button{min-height:34px;padding:0 12px;border:0;background:transparent;text-align:left;
  font:500 var(--text-caption)/1 var(--font-family);color:var(--c-text-primary);cursor:pointer}
.pmap-menu__sheet button:hover{background:var(--c-control-fill)}
.pmap-menu__sheet button[aria-current="true"]{color:var(--c-brand-primary);font-weight:750}
.pmap-menu__section{padding:8px 12px 3px;font:750 10px/1 var(--font-family);letter-spacing:.05em;
  text-transform:uppercase;color:var(--c-text-tertiary);border-top:1px solid var(--c-separator)}
.pmap-menu__sheet>.pmap-menu__section:first-child{border-top:0}
.pmap-menu__label{padding:2px 12px 4px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.pmap-menu__rule{height:1px;background:var(--c-separator);margin:4px 0}
.pmap-menu__tick{margin-right:6px;color:var(--c-brand-primary);font-weight:700}
.pmap-filter-btn{display:grid;place-items:center;width:38px;height:38px;padding:0;
  border:1px solid rgb(255 255 255 / 70%);border-radius:50%;background:rgb(255 255 255 / 90%);
  box-shadow:0 2px 9px rgb(0 0 0 / 16%);color:var(--c-brand-primary);cursor:pointer}
.pmap-filter-btn svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.pmap-filter-btn--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.pmap__timeline{position:absolute;z-index:6;left:50%;bottom:18px;transform:translateX(-50%);
  display:flex;align-items:center;gap:10px;width:min(420px,calc(100% - 40px));padding:8px 14px;
  border:1px solid rgb(255 255 255 / 72%);border-radius:999px;background:rgb(255 255 255 / 90%);
  box-shadow:0 3px 12px rgb(0 0 0 / 14%)}
.pmap__timeline[hidden]{display:none}
.pmap__timeline input{flex:1}
.pmap__timeline-label{font:750 var(--text-caption2)/1 var(--font-family);color:var(--c-text-secondary)}
.pmap__timeline-pct{font:700 var(--text-caption2)/1 var(--font-family);font-variant-numeric:tabular-nums;
  color:var(--c-text-primary);min-width:34px;text-align:right}

.pmap-page{position:absolute;inset:0;z-index:8;overflow-y:auto;background:var(--c-background)}
.pmap-page[hidden]{display:none}
.pmap-page__bar{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:var(--space-md);
  padding:var(--space-sm-md) var(--space-lg);border-bottom:1px solid var(--c-separator);
  background:var(--c-card-background)}
.pmap-page__back{border:0;background:none;font-family:inherit;font-size:var(--text-caption);
  font-weight:700;color:var(--c-brand-primary);cursor:pointer}
.pmap-page__title{flex:1;margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.pmap-page__trailing{display:flex;align-items:center;gap:var(--space-sm)}
.pmap-page__add{width:30px;height:30px;border:0;border-radius:50%;background:var(--c-brand-tint);
  font:700 17px/1 var(--font-family);color:var(--c-brand-primary);cursor:pointer}
.pmap-page__body{display:flex;flex-direction:column;gap:var(--space-lg);
  max-width:var(--size-form-column);margin:0 auto;padding:var(--space-xl) var(--space-lg)}
.pmap-blurb{margin:0;font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.5}
.pmap-card{padding:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  background:var(--c-card-background)}
.pmap-card__label{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);
  font:750 10px/1.4 var(--font-family);letter-spacing:.05em;text-transform:uppercase;
  color:var(--c-text-secondary);margin-bottom:var(--space-sm-md)}
.pmap-card__label--sub{margin-top:var(--space-lg)}
.pmap-card__label b{font-size:var(--text-caption);letter-spacing:0;text-transform:none;color:var(--c-brand-primary)}
.pmap-search{position:relative;display:flex;align-items:center;gap:var(--space-sm)}
.pmap-search input{flex:1}
.pmap-search button{border:0;background:none;font:700 16px/1 var(--font-family);color:var(--c-text-tertiary);cursor:pointer}
.pmap-segs{display:flex;flex-wrap:wrap;gap:4px}
.pmap-segs button{flex:1 0 auto;min-height:32px;padding:0 var(--space-md);border:1px solid var(--c-card-border);
  border-radius:var(--radius-row);background:none;font-family:inherit;font-size:var(--text-caption);
  color:var(--c-text-secondary);cursor:pointer}
.pmap-segs button[aria-current="true"]{background:var(--c-brand-primary);border-color:var(--c-brand-primary);
  color:var(--c-on-brand);font-weight:700}
.pmap-market{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);width:100%;
  min-height:38px;padding:0 var(--space-md);margin-bottom:4px;border:1px solid transparent;
  border-radius:var(--radius-row);background:var(--c-field-fill);font-family:inherit;
  font-size:var(--text-caption);color:var(--c-text-primary);cursor:pointer;text-align:left}
.pmap-market[aria-current="true"]{border-color:var(--c-brand-primary);color:var(--c-brand-primary);font-weight:700}
.pmap-market b{font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.pmap-reset{align-self:center;border:0;background:none;font-family:inherit;font-size:var(--text-caption);
  font-weight:700;color:var(--c-danger);cursor:pointer}
.pmap-pick{display:flex;align-items:center;gap:var(--space-md);width:100%;padding:var(--space-sm-md) var(--space-md);
  margin-bottom:4px;border:1px solid transparent;border-radius:var(--radius-row);background:var(--c-field-fill);
  font-family:inherit;text-align:left;cursor:pointer}
.pmap-pick[aria-current="true"]{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}
.pmap-pick__tick{color:var(--c-brand-primary);font-weight:700}
.pmap-pick__body{display:flex;flex-direction:column;min-width:0}
.pmap-pick__name{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary)}
.pmap-pick__where{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.pmap-empty-line{font-size:var(--text-caption);color:var(--c-text-secondary);padding:var(--space-md) 0}
.pmap-optimize{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);width:100%;
  min-height:44px;border:0;border-radius:var(--radius-card);background:var(--c-brand-primary);
  font-family:inherit;font-size:var(--text-subhead);font-weight:700;color:var(--c-on-brand);cursor:pointer}
.pmap-optimize:disabled{background:var(--c-text-tertiary);cursor:default}
.pmap-optimize--busy{background:var(--c-text-tertiary)}
.pmap-route__sum{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}
.pmap-route__sum div{display:flex;flex-direction:column}
.pmap-route__sum span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.pmap-route__strip{display:flex;gap:var(--space-md);overflow-x:auto;margin:var(--space-md) 0 0;padding:0;
  list-style:none;font-size:var(--text-caption2)}
.pmap-route__strip li{display:flex;flex-direction:column;align-items:center;gap:3px;width:80px;
  text-align:center;overflow:hidden}
.pmap-route__n{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;
  background:var(--c-brand-primary);color:var(--c-on-brand);font-weight:700}
.pmap-toggle{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);
  font-size:var(--text-caption);color:var(--c-text-primary)}
.pmap-sum{display:flex;gap:var(--space-lg)}
.pmap-sum div{flex:1;display:flex;flex-direction:column;align-items:center;padding:var(--space-md);
  border-radius:var(--radius-row);background:var(--c-field-fill)}
.pmap-sum b{font-size:var(--text-title3);font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.pmap-sum span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.pmap-export__err{margin-top:var(--space-sm)}
.pmap-brow{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-sm-md) 0;
  border-bottom:1px solid var(--c-separator);font-size:var(--text-caption)}
.pmap-brow:last-child{border-bottom:0}
.pmap-brow__dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}
.pmap-brow__name{flex:1;font-weight:600;color:var(--c-text-primary)}
.pmap-brow__n{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.pmap-brow button{border:0;background:none;font-family:inherit;font-size:var(--text-caption2);
  font-weight:700;color:var(--c-brand-primary);cursor:pointer}
.pmap-brow__del{color:var(--c-danger)!important}
.pmap-bempty{display:flex;flex-direction:column;align-items:center;gap:4px;padding:var(--space-xxl) 0;
  text-align:center;font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pmap-bempty strong{font-size:var(--text-subhead);color:var(--c-text-secondary)}
.pmap-swatches{display:flex;gap:var(--space-sm)}
.pmap-swatch{width:28px;height:28px;border:2px solid transparent;border-radius:50%;cursor:pointer}
.pmap-swatch--on{border-color:#fff;box-shadow:0 0 0 2px var(--c-brand-primary)} /* raw-color-ok */
.pmap-point{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) 0;
  border-bottom:1px solid var(--c-separator);font-size:var(--text-caption)}
.pmap-point b{flex:1;font-variant-numeric:tabular-nums;font-weight:600;color:var(--c-text-primary)}
.pmap-point button{border:0;background:none;font:700 15px/1 var(--font-family);color:var(--c-danger);cursor:pointer}
.pmap-addpoint{width:100%;min-height:36px;margin-top:var(--space-md);border:1px dashed var(--c-card-border);
  border-radius:var(--radius-row);background:none;font-family:inherit;font-size:var(--text-caption);
  font-weight:700;color:var(--c-brand-primary);cursor:pointer}

@media(max-width:680px){.dash-content.project-map-host{padding:0}.pmap__locate{width:44px;height:44px}
  .pmap__trailing{top:14px;right:14px}.pmap__locate{top:60px}.pmap__callout-host{padding:0 10px 10px}.pmap-callout{padding:12px}.pmap-callout__actions{flex-wrap:wrap}.pmap-action{min-width:calc(50% - 6px);min-height:44px}.pmap-more{flex-basis:44px}.pmap-more summary{width:44px;height:44px}.pmap__fallback::before{left:32%;font-size:10px}}

/* ── Drawings: Catalyst catalog parity ─────────────────────────────────────
   ProjectsSheet is hosted bare inside the CRM shell. Its hierarchy is outcome hero → device-only
   notice → Find the Work → list-first Drawing Library. These rules intentionally override the
   retired office-only catalog lower in this file. */
.dash-content.drawings-host{padding:22px 26px 34px;overflow:auto;background:var(--c-background-secondary)}
.dc-hero{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(260px,.65fr);gap:24px;min-height:186px;margin-bottom:16px;padding:26px 28px;border:1px solid color-mix(in srgb,var(--c-brand-primary) 68%,black);border-radius:22px;background:linear-gradient(128deg,color-mix(in srgb,var(--c-brand-primary) 92%,#07150d),color-mix(in srgb,var(--c-brand-primary) 68%,#173224));box-shadow:0 12px 30px rgb(0 0 0 / 14%);color:var(--c-on-brand)} /* raw-color-ok: branded hero depth */
.dc-hero__story{display:flex;min-width:0;flex-direction:column;justify-content:center}.dc-hero__eyebrow{margin-bottom:5px;font-size:10px;font-weight:800;letter-spacing:.12em;opacity:.7}.dc-hero h1{margin:0;font-size:clamp(26px,3vw,38px);font-weight:790;letter-spacing:-.035em}.dc-hero p{max-width:610px;margin:5px 0 0;font-size:var(--text-body);line-height:1.45;opacity:.78}
.dc-hero__counts{display:flex;align-items:stretch;gap:8px;flex-wrap:wrap;margin-top:20px}.dc-count{display:grid;grid-template-columns:auto auto;align-items:baseline;gap:6px;min-height:39px;padding:6px 11px;border:1px solid rgb(255 255 255 / 16%);border-radius:10px;background:rgb(255 255 255 / 8%);color:inherit;font-family:var(--font-family);cursor:pointer}.dc-count:hover{background:rgb(255 255 255 / 15%)}.dc-count strong{font-size:18px;font-weight:800;font-variant-numeric:tabular-nums}.dc-count span{font-size:10px;font-weight:700;opacity:.78}
.dc-continue{position:relative;display:flex;min-width:0;flex-direction:column;justify-content:center;align-items:flex-start;padding:20px 46px 20px 20px;border:1px solid rgb(255 255 255 / 19%);border-radius:16px;background:rgb(255 255 255 / 9%);color:inherit;text-align:left;font-family:var(--font-family);cursor:pointer;backdrop-filter:blur(10px)}.dc-continue:not(:disabled):hover{background:rgb(255 255 255 / 15%);transform:translateY(-1px)}.dc-continue:disabled{cursor:default;opacity:.66}.dc-continue__label{margin-bottom:12px;font-size:9px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;opacity:.68}.dc-continue strong{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:17px}.dc-continue small{max-width:100%;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;opacity:.68}.dc-continue__arrow{position:absolute;right:19px;top:50%;font-size:21px;transform:translateY(-50%)}
.dc-load-error{font-size:var(--text-caption);opacity:.75}

.dc-device{display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;margin:0 0 16px;padding:12px 15px;border:1px solid color-mix(in srgb,var(--c-warning) 34%,var(--c-card-border));border-radius:var(--radius-card);background:color-mix(in srgb,var(--c-warning-tint) 78%,var(--c-card-background));color:var(--c-text-primary);font-family:var(--font-family);text-align:left;cursor:pointer}.dc-device:hover{border-color:color-mix(in srgb,var(--c-warning) 62%,var(--c-card-border))}.dc-device--failed{border-color:color-mix(in srgb,var(--c-danger) 30%,var(--c-card-border));background:color-mix(in srgb,var(--c-danger-tint) 72%,var(--c-card-background))}.dc-device__icon{display:grid;place-items:center;width:34px;height:34px;border-radius:10px;background:var(--c-warning);color:var(--c-on-warning);font-size:16px;font-weight:800}.dc-device--failed .dc-device__icon{background:var(--c-danger);color:var(--c-on-danger)}.dc-device>span:nth-child(2){display:grid;gap:2px;min-width:0}.dc-device strong{font-size:var(--text-footnote)}.dc-device small{font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-secondary)}.dc-device__verb{font-size:var(--text-caption2);font-weight:750;color:var(--c-warning);white-space:nowrap}
.dc-sync-copy{margin:0 0 14px;font-size:var(--text-caption);line-height:1.5;color:var(--c-text-secondary)}.dc-sync-list{display:grid;border-top:1px solid var(--c-separator)}.dc-sync-row{display:grid;grid-template-columns:9px minmax(0,1fr);align-items:start;gap:10px;padding:11px 0;border-bottom:1px solid var(--c-separator)}.dc-sync-row__dot{width:8px;height:8px;margin-top:5px;border-radius:50%;background:currentColor}.dc-sync-row>span:last-child{display:grid;gap:2px}.dc-sync-row strong{font-size:var(--text-caption);color:var(--c-text-primary)}.dc-sync-row small{font-size:var(--text-caption2);line-height:1.35;color:var(--c-text-tertiary)}.dc-sync-row__error{color:var(--c-danger)!important}

.dc-find{margin-bottom:21px;padding:14px 15px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}.dc-find__label{margin:0 0 9px 2px;font-size:9px;font-weight:800;letter-spacing:.1em;color:var(--c-text-tertiary)}.dc-find__row{display:flex;align-items:center;gap:10px;min-width:0}.dc-find__row--search{margin-top:10px}.dc-find__spacer{flex:1}.dc-stage-tabs,.dc-find__actions{display:flex;align-items:center;gap:4px;min-width:0}.dc-stage{display:flex;align-items:center;gap:6px;min-height:34px;padding:0 11px;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--c-text-secondary);font:650 var(--text-caption2)/1 var(--font-family);white-space:nowrap;cursor:pointer}.dc-stage:hover,.dc-tool:hover{background:var(--c-control-fill);color:var(--c-text-primary)}.dc-stage--on{border-color:color-mix(in srgb,var(--c-brand-primary) 25%,transparent);background:var(--c-brand-tint);color:var(--c-brand-primary)}.dc-stage span,.dc-tool>span:not(.dc-tool__wide){font-size:9px;font-variant-numeric:tabular-nums;opacity:.65}
.dc-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-height:34px;padding:0 9px;border:1px solid var(--c-input-border);border-radius:9px;background:transparent;color:var(--c-text-secondary);font:650 var(--text-caption2)/1 var(--font-family);white-space:nowrap;cursor:pointer}.dc-tool--on{border-color:color-mix(in srgb,var(--c-brand-primary) 25%,var(--c-input-border));background:var(--c-brand-tint);color:var(--c-brand-primary)}.dc-search{display:flex;align-items:center;gap:7px;flex:1;min-width:190px;max-width:580px;min-height:36px;padding:0 11px;border:1px solid var(--c-input-border);border-radius:9px;background:var(--c-input-fill);color:var(--c-text-tertiary)}.dc-search:focus-within{border-color:var(--c-brand-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--c-brand-primary) 13%,transparent)}.dc-search input{min-width:0;width:100%;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:var(--text-caption)/1 var(--font-family)}
.dc-view-switch{display:flex;margin-left:auto;padding:2px;border:1px solid var(--c-input-border);border-radius:9px;background:var(--c-input-fill)}.dc-view-switch button{display:grid;place-items:center;width:31px;height:29px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--c-text-tertiary);cursor:pointer}.dc-view-switch button:hover{color:var(--c-text-primary)}.dc-view-switch .dc-view-switch--on{background:var(--c-card-background);box-shadow:0 1px 3px rgb(0 0 0 / 12%);color:var(--c-brand-primary)}
.dc-selection{display:grid;grid-template-columns:auto auto 1fr auto auto;align-items:center;gap:8px;margin-top:11px;padding-top:11px;border-top:1px solid var(--c-separator)}.dc-selection[hidden]{display:none}.dc-selection>strong{font-size:var(--text-caption);font-variant-numeric:tabular-nums;color:var(--c-text-primary)}

.dc-library{min-width:0}.dc-library__head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:9px;padding:0 2px}.dc-library h2{margin:0;font-size:18px;font-weight:780;letter-spacing:-.015em;color:var(--c-text-primary)}.dc-library__head p{margin:2px 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}.dc-library__recent{font-size:var(--text-caption2);color:var(--c-text-tertiary);white-space:nowrap}.dc-columns{display:grid;grid-template-columns:minmax(0,1fr) 142px 96px 30px;gap:10px;padding:0 14px 6px 94px;font-size:9px;font-weight:750;letter-spacing:.07em;text-transform:uppercase;color:var(--c-text-tertiary)}.dc-columns[hidden]{display:none}
.drawings-host .dwg-group{overflow:visible;margin:0 0 12px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);box-shadow:var(--shadow-card)}.drawings-host .dwg-group__header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:50px;padding:9px 13px;border-bottom:1px solid var(--c-separator)}.drawings-host .dwg-group__header h3{display:flex;align-items:baseline;gap:8px;margin:0;font-size:var(--text-footnote);font-weight:750;color:var(--c-text-primary)}.drawings-host .dwg-group__header h3 span{font-size:10px;font-weight:650;font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}.drawings-host .dwg-group__header p{margin:2px 0 0;font-size:10px;color:var(--c-text-tertiary)}.dwg-group__verbs{display:flex;align-items:center;gap:5px}.dwg-list{display:grid}
.drawings-host .dwg-row{position:relative;display:flex;align-items:center;gap:10px;width:100%;min-height:66px;padding:8px 12px;border:0;border-top:1px solid var(--c-separator);background:transparent;color:inherit;text-align:left}.drawings-host .dwg-row:first-child{border-top:0}.drawings-host .dwg-row:hover{background:var(--c-field-fill)}.drawings-host .dwg-row--selected{background:var(--c-brand-tint)}.dwg-row__door{display:flex;align-items:center;gap:12px;flex:1;min-width:0;padding:0;border:0;background:transparent;color:inherit;text-align:left;font-family:var(--font-family);cursor:pointer}.drawings-host .dwg-thumb{width:62px;height:42px}.dwg-row__main{display:grid;gap:2px;min-width:0}.drawings-host .dwg-row__name{display:block;font-size:var(--text-caption);font-weight:700}.drawings-host .dwg-row__meta{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:450;color:var(--c-text-tertiary)}.drawings-host .dwg-row__stamp{margin-left:7px}.drawings-host .dwg-row__when{flex:0 0 96px;min-width:0;text-align:left;font-size:10px;color:var(--c-text-tertiary)}
.dwg-status-select{display:block;flex:0 0 142px}.dwg-status-select select{max-width:132px;min-height:30px;padding:0 25px 0 9px;border:1px solid var(--c-input-border);border-radius:999px;background:var(--c-input-fill);color:var(--c-text-secondary);font:700 10px/1 var(--font-family);cursor:pointer}.drawings-host .dwg-status{flex:0 0 auto;font-size:9px}.dwg-more{position:relative;display:grid;place-items:center;flex:0 0 30px;width:30px;height:30px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--c-text-tertiary);font:800 10px/1 var(--font-family);letter-spacing:1px;cursor:pointer}.dwg-more:hover{background:var(--c-control-fill);color:var(--c-text-primary)}
.dc-check{display:grid;place-items:center;flex:0 0 22px;width:22px;height:22px;padding:0;border:1px solid var(--c-input-border);border-radius:50%;background:var(--c-card-background);color:white;font:800 11px/1 var(--font-family);cursor:pointer}.dc-check--on{border-color:var(--c-brand-primary);background:var(--c-brand-primary)}
.dwg-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:10px}.dwg-tile{position:relative;min-width:0;overflow:hidden;border:1px solid var(--c-card-border);border-radius:11px;background:var(--c-card-background)}.dwg-tile--selected{border-color:var(--c-brand-primary);box-shadow:0 0 0 2px var(--c-brand-tint)}.dwg-tile>.dc-check{position:absolute;z-index:2;left:8px;top:8px}.dwg-tile>.dwg-more{position:absolute;z-index:2;right:5px;top:5px;background:color-mix(in srgb,var(--c-card-background) 86%,transparent)}.dwg-tile__door{display:grid;width:100%;padding:0;border:0;background:transparent;color:inherit;text-align:left;font-family:var(--font-family);cursor:pointer}.dwg-tile__door .dwg-thumb{width:100%;height:120px;border:0;border-bottom:1px solid var(--c-separator);border-radius:0}.dwg-tile__copy{display:grid;gap:3px;padding:10px 11px}.dwg-tile__copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-caption);color:var(--c-text-primary)}.dwg-tile__copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--c-text-tertiary)}.dwg-tile__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 11px 10px;font-size:9px;color:var(--c-text-tertiary)}
.dc-popover{position:absolute;z-index:30;right:8px;top:44px;display:grid;width:150px;overflow:hidden;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background);box-shadow:0 12px 30px rgb(0 0 0 / 19%)}.dc-popover button{min-height:36px;padding:0 12px;border:0;background:transparent;color:var(--c-text-primary);font:550 var(--text-caption)/1 var(--font-family);text-align:left;cursor:pointer}.dc-popover button:hover{background:var(--c-control-fill)}.dc-popover .dc-popover__danger{color:var(--c-danger)}
.dlc-state--quiet{color:var(--c-text-tertiary)}.dlc-state--private{color:var(--c-text-secondary)}.dlc-state--pending{color:var(--c-warning)}.dlc-state--failed{color:var(--c-danger)}.dlc-state--registered{color:var(--c-info)}.dlc-state--shared{color:var(--c-success)}

/* Sortable column headers — `sortableHeader`: the column you are on carries the arrow. */
.dc-columns__sort{min-height:24px;padding:0;border:0;background:transparent;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;text-align:left;cursor:pointer}.dc-columns__sort:hover{color:var(--c-text-primary)}.dc-columns__sort--on{color:var(--c-text-primary)}.dc-columns__sort--on::after{content:"";margin-left:4px}.dc-columns__sort[aria-sort=ascending]::after{content:"\2191"}.dc-columns__sort[aria-sort=descending]::after{content:"\2193"}
.dc-columns [data-sort-col]:last-of-type{text-align:right}
.dc-sort{display:flex;align-items:center;min-height:34px;padding:0 6px;border:1px solid var(--c-input-border);border-radius:9px;background:transparent}.dc-sort select{border:0;outline:0;background:transparent;color:var(--c-text-secondary);font:650 var(--text-caption2)/1 var(--font-family);cursor:pointer}
/* A refusal shown as a dimmed control rather than a message — the empty field IS the reason. */
.is-dim{opacity:.4}

/* ── Pick or create the job (`JobPickerOrCreateSheet`) ─────────────────────── */
.mjp{min-width:0}
.mjp__layout{display:grid;gap:16px;min-width:0}
.mjp__layout--rail{grid-template-columns:minmax(0,1fr) 330px}
.mjp__list{min-width:0}
.mjp__rail{align-self:start;padding:15px;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.mjp-rail__head strong{display:block;font-size:var(--text-footnote);font-weight:750;color:var(--c-text-primary)}
.mjp-rail__head p{margin:3px 0 12px;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.mjp-rail__go{width:100%;margin-top:12px}
.mjp-rail__foot{margin:8px 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary);text-align:center}
.mjp-fields{display:grid;gap:10px}
.mjp__search{display:flex;align-items:center;min-height:36px;margin-bottom:12px;padding:0 11px;border:1px solid var(--c-input-border);border-radius:9px;background:var(--c-input-fill)}
.mjp__search input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--c-text-primary);font:var(--text-caption)/1 var(--font-family)}
.mjp__or{margin:12px 2px 8px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.mjp__empty{padding:26px 12px;text-align:center}
.mjp__empty strong{display:block;font-size:var(--text-footnote);font-weight:750;color:var(--c-text-primary)}
.mjp__empty p{margin:5px auto 0;max-width:34em;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.mjp__nomatch{margin:22px 0;font-size:var(--text-caption);color:var(--c-text-secondary);text-align:center}
.mjp-group{margin-bottom:14px}
.mjp-group__label{margin:0 2px 6px;font-size:9px;font-weight:800;letter-spacing:.09em;color:var(--c-text-tertiary)}
.mjp-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:56px;padding:9px 12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background);margin-bottom:6px}
.mjp-row__identity{display:grid;gap:2px;min-width:0}
.mjp-row__identity strong{font-size:var(--text-caption);font-weight:700;color:var(--c-text-primary)}
/* RECORD PAYMENT — THE BALANCE CARD.
   Three figures, each NAMED for what it measures. The sheet used to print one number called
   "Balance" while the job hub printed a different one under the same word, so the labels are the
   feature and are not abbreviated away at small widths. The job line is prose, not a fourth
   figure: it appears only when the job disagrees with this invoice, and the reader is about to
   type an amount. */
/* INVOICE EDITOR — THE OPEN CARD.
   Four doors to what this ask is attached to. Each row leads with a glyph and carries the reason
   you would go there, because the reader picks by purpose and not by which noun holds the number
   they want. Rows are buttons, not links: they change the hash, and a link would offer a
   middle-click that opens a second copy of the dashboard. */
/* RECURRING — THE ROSTER HERO.
   Four figures, each with the count it is FROM underneath, and a move band that appears only when
   something is wrong. The band is not a card: it spans the metric row so it reads as a consequence
   of the figures above it rather than a fifth tile. */
.inv-row__menu{border:0;background:transparent;color:var(--c-text-tertiary);font-size:14px;line-height:1;min-width:24px;min-height:24px;padding:4px 6px;border-radius:6px;cursor:pointer}
.inv-row:hover .inv-row__menu,.inv-row__menu:focus-visible{background:var(--c-field-fill);color:var(--c-text-primary)}
.rec-row__acts{display:inline-flex;align-items:center;gap:4px}
.rec-row__menu{border:0;background:transparent;color:var(--c-text-tertiary);font-size:14px;line-height:1;min-width:24px;min-height:24px;padding:4px 6px;border-radius:6px;cursor:pointer}
.pr-row__menu{border:0;background:transparent;color:var(--c-text-tertiary);font-size:14px;line-height:1;min-width:24px;min-height:24px;padding:4px 6px;border-radius:6px;cursor:pointer;margin-left:var(--space-xs)}
.pr-row__menu:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.rec-row__menu:hover{background:var(--c-field-fill);color:var(--c-text-primary)}
.rc-metric__meta{margin-top:2px;font-size:10px;color:var(--c-text-secondary)}
.stat-card--danger .stat-card__value{color:var(--c-danger)}
.rc-move{grid-column:1/-1;display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:10px;border-left:3px solid var(--c-warning);background:var(--c-warning-tint)}
.rc-move--danger{border-left-color:var(--c-danger);background:var(--c-danger-tint)}
.rc-move__say{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.rc-move__headline{font:600 13px/1.3 var(--font-family);color:var(--c-text-primary)}
.rc-move__detail{font-size:11px;color:var(--c-text-secondary);text-wrap:pretty}
/* INVOICE EDITOR — THIS JOB'S OTHER ASKS.
   A list you read before deciding, so the verdict sits ON the header rather than under the rows:
   the number is the point and the rows are the evidence. The warn face is the only coloured thing
   in the card, because it is the only thing that changes the decision. */
.if-sibs{margin-top:16px;padding:12px 14px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background)}
.if-sibs__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:8px}
.if-sibs__kicker{font-size:10px;font-weight:700;letter-spacing:.06em;color:var(--c-text-secondary)}
.if-sibs__verdict{font-size:11px;color:var(--c-text-secondary)}
.if-sibs__verdict--warn{color:var(--c-warning);font-weight:600}
.if-sib{display:flex;align-items:center;gap:10px;padding:6px 0;border-top:1px solid var(--c-card-border)}
.if-sib__state{flex-shrink:0;width:76px;font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;text-align:center}
.if-sib__state--success{color:var(--c-success);background:var(--c-success-tint)}
.if-sib__state--danger{color:var(--c-danger);background:var(--c-danger-tint)}
.if-sib__state--warning{color:var(--c-warning);background:var(--c-warning-tint)}
.if-sib__state--info{color:var(--c-info);background:var(--c-info-tint)}
.if-sib__say{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.if-sib__title{font:600 12px/1.3 var(--font-family);color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.if-sib__detail{font-size:10px;color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.if-sib__amount{flex-shrink:0;font:600 12px/1 var(--font-family);font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
/* INVOICE EDITOR — THE CONTRACT GREW AFTER THIS WENT OUT.
   A whisper, not an alarm: the document is issued and cannot change, so the card states the fact
   and offers the one move that is still honest. Accent rather than warning tint — nothing is
   wrong, something is unbilled. */
.if-grown{display:flex;align-items:flex-start;gap:10px;margin-top:16px;padding:12px 14px;border-radius:10px;border:1px solid var(--c-accent-tint);background:var(--c-accent-tint)}
.if-grown__mark{flex-shrink:0;color:var(--c-accent-brown);font-size:13px;line-height:1.4}
.if-grown__say{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.if-grown__headline{font:600 13px/1.35 var(--font-family);color:var(--c-text-primary)}
.if-grown__detail{font-size:11px;color:var(--c-text-secondary);text-wrap:pretty}
.if-related{display:flex;flex-direction:column;gap:2px;margin-top:16px;padding:12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background)}
.if-related__label{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-secondary);margin-bottom:4px}
.if-related__row{display:flex;align-items:center;gap:10px;width:100%;padding:8px;border:0;border-radius:8px;background:transparent;text-align:left;cursor:pointer;font:inherit;color:inherit}
.if-related__row:hover{background:var(--c-field-fill)}
.if-related__glyph{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:6px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:12px}
.if-related__text{display:flex;flex-direction:column;gap:1px;min-width:0}
.if-related__title{font:600 13px/1.3 var(--font-family);color:var(--c-text-primary)}
.if-related__sub{font-size:11px;color:var(--c-text-secondary)}
.rp-card{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px;margin-bottom:16px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background)}
.rp-card__num{font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-tertiary)}
.rp-card__who{font:600 14px/1.2 var(--font-family);color:var(--c-text-primary);text-align:center}
.rp-card__figs{display:flex;justify-content:center;gap:28px;margin-top:2px}
.rp-fig{display:flex;flex-direction:column;align-items:center;gap:2px}
.rp-fig__label{font-size:10px;color:var(--c-text-secondary)}
.rp-fig__value{font:700 15px/1 var(--font-family);font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.rp-fig__value--paid{color:var(--c-brand-primary)}
.rp-fig__value--owed{color:var(--c-warning)}
.rp-card__job{font-size:10px;color:var(--c-text-secondary);text-align:center;text-wrap:balance}
.mjp-row__num{font-size:10px;font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.mjp-row__addr{font-size:10px;color:var(--c-text-secondary)}
/* The absence of an address is a signal, not silence — routing and dispatch depend on it. */
.mjp-row__addr--missing{color:var(--c-warning)}
.mjp-row__chip{font-size:10px;color:var(--c-text-tertiary)}
.mjp-row__verbs{display:flex;align-items:center;gap:6px;flex-shrink:0}
.mjp-row__continue{border:0;background:transparent;color:var(--c-text-secondary);font:550 10px/1 var(--font-family);cursor:pointer}
.mjp-row__continue:hover{color:var(--c-brand-primary)}
.mjp-row__more{border:0;background:transparent;color:var(--c-text-tertiary);font:650 10px/1 var(--font-family);cursor:pointer}
.mjp-row__more:hover{color:var(--c-brand-primary)}
.mjp-card{display:grid;gap:3px;width:100%;padding:13px;border:0;border-radius:11px;background:var(--c-brand-primary);color:var(--c-on-brand);text-align:left;cursor:pointer}
.mjp-card__label{font-size:var(--text-caption);font-weight:750}
.mjp-card__sub{font-size:10px;opacity:.85}
.mjp-dialog__msg{margin:0 0 12px;font-size:var(--text-caption);color:var(--c-text-secondary)}
.mjp-matched{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border-radius:9px;background:var(--c-success-tint)}
.mjp-matched__body{display:grid;gap:1px;min-width:0}
.mjp-matched__body strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.mjp-matched__body small{font-size:10px;color:var(--c-text-secondary)}
.mjp-matched__clear{border:0;background:transparent;color:var(--c-text-tertiary);font-size:12px;cursor:pointer}
.mjp-nudge{display:block;width:100%;margin-top:8px;padding:9px 11px;border:0;border-radius:9px;background:var(--c-warning-tint);color:var(--c-text-primary);font:550 10px/1.35 var(--font-family);text-align:left;cursor:pointer}

/* ── Share with Collaborator (`ProjectShareSheet`) ─────────────────────────── */
.psh__label{margin:14px 2px 7px;font-size:9px;font-weight:800;letter-spacing:.09em;color:var(--c-text-tertiary)}
.psh__label:first-child{margin-top:0}
.psh__note{margin:0 2px 8px;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.psh__empty{margin:6px 2px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.psh-list{display:grid;gap:6px}
.psh-row{display:flex;align-items:center;gap:10px;min-height:48px;padding:8px 12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background)}
.psh-row__avatar{display:grid;place-items:center;flex:0 0 28px;width:28px;height:28px;border-radius:50%;background:var(--c-control-fill);color:var(--c-text-tertiary);font:800 12px/1 var(--font-family)}
.psh-row__main{display:grid;gap:1px;flex:1;min-width:0}
.psh-row__main strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.psh-row__main small{font-size:10px;color:var(--c-text-secondary)}

/* The template picker inside the schedule sheet — rows, not cards: five choices that differ only
   by name and size do not need five boxes. */
.psx-tpl{display:grid;gap:6px;margin:8px 0}
.psx-tpl__row{display:grid;gap:1px;justify-items:start;text-align:left;padding:8px 12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background);cursor:pointer}
.psx-tpl__row:hover{border-color:var(--c-brand-border)}
.psx-tpl__row strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.psx-tpl__row small{font-size:10px;color:var(--c-text-secondary)}

/* ── Add Collaborator (`AddCollaboratorSheet`) ─────────────────────────────── */
/* The share sheet's own idiom, reused rather than re-invented: same row height, same border and
   radius, same label weight. The one addition is the muted row, which is a person you cannot add
   because they already reach every drawing in the market. */
.acs__note{margin:0 2px 10px;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.acs__search{display:block;margin:0 0 10px}
.acs__search input{width:100%;min-height:36px;padding:6px 12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background);color:var(--c-text-primary);font-size:var(--text-caption)}
.acs__label{margin:14px 2px 7px;font-size:9px;font-weight:800;letter-spacing:.09em;color:var(--c-text-tertiary)}
.acs__empty{margin:12px 2px;text-align:center}
.acs__empty strong{display:block;font-size:var(--text-caption);color:var(--c-text-primary)}
.acs__empty p{margin:3px 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.acs-list{display:grid;gap:6px}
.acs-row{display:flex;align-items:center;gap:10px;min-height:48px;padding:8px 12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background)}
.acs-row--muted{opacity:.62}
.acs-row__main{display:grid;gap:1px;flex:1;min-width:0}
.acs-row__main strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.acs-row__main small{font-size:10px;color:var(--c-text-secondary)}
.acs__invite{margin-top:14px;padding-top:12px;border-top:1px solid var(--c-card-border)}
/* The advice under a job-delete confirm — quieter than the cascade it follows, and the same on
   every one of the five surfaces that raise it. */
.dlg-aside{display:block;margin-top:2px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* ── Schedule & Phases (`ProjectScheduleSheet`) ────────────────────────────── */
.psx__label{margin:16px 2px 8px;font-size:var(--text-footnote);font-weight:750;color:var(--c-text-primary)}
.psx__empty{padding:26px 12px;text-align:center}
.psx__empty strong{display:block;font-size:var(--text-footnote);font-weight:750;color:var(--c-text-primary)}
.psx__empty p{margin:5px auto 0;max-width:34em;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.psx-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;margin-bottom:10px}
.psx-card{display:grid;gap:2px;padding:11px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background)}
.psx-card span{font-size:9px;font-weight:750;letter-spacing:.07em;text-transform:uppercase;color:var(--c-text-tertiary)}
.psx-card strong{font-size:16px;font-weight:780;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.psx-list{display:grid;gap:6px}
/* The schedule sheet's Add bar and its inline create form. The form sits INSIDE the sheet rather
   than opening a modal over a modal — a second layer over a sheet is where focus and Escape start
   disagreeing, and this one is four fields. */
.psx-add{display:flex;gap:8px;margin:0 0 10px}
/* The app separates this item from the three that create things with a Menu Divider;
   this bar is a button row, so the separation is spatial. */
.psx-add__sync{margin-left:auto}
.psx-form{display:grid;gap:8px;margin:0 0 12px;padding:12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-control-fill)}
.psx-form label{display:grid;gap:4px;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.psx-form input{min-height:36px;padding:6px 10px;border:1px solid var(--c-separator);border-radius:8px;background:var(--c-card-background);color:var(--c-text-primary);font-size:var(--text-body)}
.psx-form__acts{display:flex;gap:8px;margin-top:2px}
/* The editor sheet — one form for create and edit, so every rule here is shared by both. */
.psx-form__title{font-size:var(--text-caption);color:var(--c-text-primary)}
.psx-form__dated{display:grid;gap:4px}
.psx-form__toggle{display:flex;align-items:center;gap:6px}
.psx-form__toggle input{min-height:auto;width:auto}
.psx-form input:disabled{opacity:.5}
.psx-swatches{display:flex;flex-wrap:wrap;gap:6px}
/* The hex comes from the row inline, so the default here is what renders if it does not. */
.psx-swatch{--psx-swatch:var(--c-separator);width:26px;height:26px;padding:0;border:2px solid transparent;border-radius:50%;background:var(--psx-swatch);cursor:pointer}
.psx-swatch.is-on{border-color:var(--c-text-primary)}
.psx-form__progress output{font-size:var(--text-caption);color:var(--c-text-primary)}
.psx-progress{min-height:auto;padding:0;border:0;background:transparent;accent-color:var(--c-text-secondary)}
/* The app tints the slider by band: orange under 40, blue under 80, green above. */
.psx-progress.is-low{accent-color:var(--c-warning)}
.psx-progress.is-mid{accent-color:var(--c-brand-border)}
.psx-progress.is-high{accent-color:var(--c-success)}
.psx-form__kill{margin-left:auto}
.psx-row{display:flex;align-items:center;gap:10px;min-height:44px;padding:8px 12px;border:1px solid var(--c-card-border);border-radius:10px;background:var(--c-card-background);width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer}
/* A phase row is a BUTTON now — the app opens its detail sheet on a plain tap, and the web had
   only the context menu, so a plain press did nothing. The reset above is what lets the same
   class carry a button; a milestone row keeps the div and stays unpressable, because the app
   gives it no tap either. */
.psx-row--flat{cursor:default}
.psx-row:is(button):hover{border-color:var(--c-brand-primary)}
.psx-row:is(button):focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:2px}
.psx-row__main{display:grid;gap:1px;min-width:0}
.psx-row__main strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.psx-row__main small{font-size:10px;color:var(--c-text-secondary)}

@media(max-width:900px){.mjp__layout--rail{grid-template-columns:1fr}.mjp__rail{order:-1}}

@media(max-width:1080px){.dc-hero{grid-template-columns:minmax(0,1fr) minmax(230px,.7fr)}.dc-find__row:first-of-type{align-items:flex-start;flex-wrap:wrap}.dc-find__spacer{display:none}.dc-find__actions{margin-left:auto}.dwg-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:780px){.dash-content.drawings-host{padding:14px 14px 26px}.dc-hero{grid-template-columns:1fr;gap:15px;padding:21px}.dc-continue{min-height:104px}.dc-stage-tabs{width:100%;overflow-x:auto;padding-bottom:2px}.dc-find__actions{width:100%;margin:0;overflow-x:auto;padding-bottom:2px}.dc-tool{min-height:38px}.dc-tool__wide{display:none}.dc-columns{display:none!important}.drawings-host .dwg-row{flex-wrap:wrap}.dwg-row__door{flex-basis:calc(100% - 34px)}.dwg-status-select{flex:0 0 auto;margin-left:34px}.drawings-host .dwg-row__when{flex:1}.drawings-host .dwg-group__header{align-items:flex-start}.dwg-group__verbs{flex-direction:column;align-items:flex-end}.dc-device{grid-template-columns:34px minmax(0,1fr)}.dc-device__verb{grid-column:2}.dc-library__head{align-items:flex-start}.dc-library__recent{white-space:normal;text-align:right}}
@media(max-width:520px){.dash-content.drawings-host{padding:10px 10px 22px}.dc-hero{border-radius:16px;padding:18px}.dc-hero__counts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.dc-count{display:grid;grid-template-columns:1fr;gap:1px;padding:7px}.dc-count strong{font-size:16px}.dc-find{padding:12px 10px}.dc-find__row--search{align-items:stretch}.dc-view-switch{flex:none}.dc-selection{grid-template-columns:auto auto 1fr}.dc-selection #dc-export,.dc-selection #dc-delete{grid-row:2}.dc-selection #dc-export{grid-column:1/3}.dc-selection #dc-delete{grid-column:3}.dwg-grid{grid-template-columns:1fr}.drawings-host .dwg-row{padding:9px}.dwg-status-select{margin-left:0}.drawings-host .dwg-row__when{display:none}.drawings-host .dwg-group__header{display:grid}.dwg-group__verbs{flex-direction:row;align-items:center}.dc-device__verb{white-space:normal}.dc-library__recent{display:none}}

/* ── Catalyst drawing authoring workspace ─────────────────────────────────── */
.drawing-editor-host{--c-surface-primary:var(--c-surface);--c-surface-secondary:var(--c-control-fill);--c-positive:var(--c-success);--c-border-subtle:var(--c-separator);--d-shadow-xs:none;--d-shadow-md:none;--font-sans:var(--font-family);--de-wall:var(--c-accent-cyan);--texture:var(--c-accent-blue);--pick:var(--c-brand-primary);height:calc(100dvh - 55px);min-height:680px;margin:-24px;overflow:hidden;background:var(--c-surface-primary)}
.de{display:grid;grid-template-rows:38px 64px 42px 46px minmax(0,1fr) 42px 58px;height:100%;min-height:0;color:var(--c-text-primary);background:var(--c-surface-primary)}
.de [hidden]{display:none!important}
.de-loading,.de-error{display:flex;min-height:560px;align-items:center;justify-content:center;flex-direction:column;gap:10px;color:var(--c-text-secondary)}
.de-loading strong,.de-error strong{font-size:18px;color:var(--c-text-primary)}
.de-loading__mark{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:var(--c-brand-primary);color:var(--c-on-brand);font-size:24px;font-weight:900}
.de-context{display:flex;align-items:center;gap:5px;padding:0 16px;border-bottom:1px solid var(--c-border-subtle);font-size:12px;background:var(--c-surface-primary)}
.de-context button{border:0;background:none;color:var(--c-text-secondary);font:inherit;font-weight:650;cursor:pointer;padding:5px;display:flex;align-items:center;gap:2px}
.de-context button:hover{color:var(--c-brand-primary)}.de-context button:disabled{cursor:default;color:var(--c-text-tertiary)}
.de-context__sep{color:var(--c-text-tertiary)}
.de-context__sync{display:flex;align-items:center;gap:6px;margin-left:auto;padding:4px 9px;border:1px solid color-mix(in srgb,var(--c-positive) 22%,var(--c-border-subtle));border-radius:999px;background:color-mix(in srgb,var(--c-positive) 8%,var(--c-surface-primary));color:var(--c-positive);font-size:10px;font-weight:750}
.de-context__sync i{width:5px;height:5px;border-radius:50%;background:currentColor}
.de-brandbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:0 20px;border-bottom:1px solid var(--c-border-subtle);background:var(--c-surface-primary)}
.de-brand{display:flex;align-items:center;gap:9px;font-size:20px;color:color-mix(in srgb,var(--c-brand-primary) 70%,var(--c-text-primary))}
.de-brand strong{font-weight:760;letter-spacing:-.5px}.de-brand strong span{color:var(--c-brand-primary)}
.de-brand__mark{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--c-brand-primary);color:var(--c-on-brand);font-weight:900}
.de-loaded{padding:7px 16px;border:1px solid var(--c-border-subtle);border-radius:999px;box-shadow:var(--d-shadow-xs);font-size:11px;font-weight:650;color:var(--c-text-secondary)}
.de-stage{justify-self:end}.de-stage select{appearance:none;padding:5px 23px 5px 12px;border:1px solid color-mix(in srgb,var(--c-positive) 25%,var(--c-border-subtle));border-radius:999px;background:color-mix(in srgb,var(--c-positive) 8%,var(--c-surface-primary));color:var(--c-positive);font:700 10px/1 var(--font-sans);text-align:center;cursor:pointer}
.de-layoutbar{display:flex;align-items:stretch;gap:3px;padding:0 13px;border-bottom:1px solid var(--c-border-subtle);overflow:hidden;background:var(--c-surface-primary)}
.de-layouts{display:flex;align-items:stretch;min-width:0;overflow-x:auto;scrollbar-width:none}.de-layouts::-webkit-scrollbar{display:none}
.de-layout-tab{position:relative;display:flex;align-items:stretch;flex:none;border-bottom:2px solid transparent}
.de-layout-tab--on{border-color:var(--c-brand-primary)}
.de-layout-tab>button:first-child{display:flex;align-items:center;gap:5px;border:0;background:none;padding:0 12px;color:var(--c-text-secondary);font:620 11px/1 var(--font-sans);white-space:nowrap;cursor:pointer}
.de-layout-tab--on>button:first-child{color:var(--c-text-primary);font-weight:760}
.de-layout-tab>button:first-child span{font-size:10px;color:color-mix(in srgb,var(--c-brand-primary) 78%,var(--c-text-secondary))}
.de-layout-tab>[data-close-layout]{align-self:center;border:0;background:none;color:var(--c-text-tertiary);font-size:14px;cursor:pointer;padding:0 5px}
.de-layout-action{align-self:center;display:grid;place-items:center;flex:none;width:28px;height:28px;border:0;border-radius:7px;background:none;color:var(--c-text-secondary);cursor:pointer}.de-layout-action:hover{background:var(--c-surface-secondary);color:var(--c-brand-primary)}
.de-toolrow{display:flex;align-items:center;min-width:0;border-bottom:1px solid var(--c-border-subtle);background:var(--c-surface-primary);box-shadow:0 2px 7px rgb(0 0 0 / 6%);z-index:4} /* raw-color-ok: shallow toolbar separation */
.de-tools{display:flex;align-items:stretch;height:100%;min-width:0;overflow-x:auto;padding-left:8px;scrollbar-width:thin}
.de-tools button{display:grid;place-items:center;grid-template-rows:24px 12px;align-content:center;gap:1px;min-width:44px;padding:3px;flex:none;min-height:44px;width:44px;border:0;border-bottom:2px solid transparent;background:none;color:var(--c-text-secondary);cursor:pointer}
.de-tools button b{font:760 20px/1 var(--font-sans)}
.de-tools button:hover{background:var(--c-surface-secondary);color:var(--c-text-primary)}
.de-tools .de-tool--on{border-color:var(--c-brand-primary);background:color-mix(in srgb,var(--c-brand-primary) 10%,var(--c-surface-primary));color:var(--c-brand-primary)}
.de-zoom{display:flex;flex:none;align-items:center;gap:8px;margin-left:auto;padding:0 16px;font-size:11px;color:var(--c-text-secondary)}
.de-zoom input{width:145px;accent-color:var(--c-brand-primary)}.de-zoom strong{min-width:34px;color:var(--c-text-primary)}
.de-stage-wrap{position:relative;min-height:0;overflow:hidden;background:#0d2137} /* raw-color-ok: drawing canvas artwork */
.de-canvas-scroll{position:absolute;inset:0;overflow:hidden;overscroll-behavior:contain}
.de-canvas{display:block;width:100%;height:100%;min-width:0;min-height:0;touch-action:none;cursor:crosshair;transform-origin:center}
.de-canvas--custom-crosshair{cursor:none}
.de-crosshair{position:absolute;width:64px;height:64px;pointer-events:none;z-index:8;transform:translate(-32px,-32px)}
.de-crosshair[hidden]{display:none}
.de-crosshair svg{display:block;shape-rendering:geometricPrecision}
.de-canvas-bg{fill:#0d2137}.de-grid{stroke:#365069;stroke-width:1;opacity:.6} /* raw-color-ok: frozen Catalyst dark-grid palette */
.de-cell{fill:#3f708d;stroke:var(--de-wall,#14cde3);stroke-width:5}.de-texture{fill:var(--texture,#3d718e);opacity:.65;stroke:color-mix(in srgb,var(--texture) 65%,white);stroke-width:1} /* raw-color-ok: user-authored canvas colors */
.de-stroke{fill:none;stroke:#f5f8fa;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke} /* raw-color-ok: visible ink on dark canvas */
.de-plan-overlay{pointer-events:none}
.de-canvas--sketch{background:#edf0f2} /* raw-color-ok: paper desk in the Catalyst sketch workspace */
.de-sketch-page{fill:#fff} /* raw-color-ok: document paper */
.de-sketch-rule{stroke:#a7bad0;stroke-width:1;opacity:.56}.de-sketch-dot{fill:#94a9bf;opacity:.7} /* raw-color-ok: frozen paper guides */
.de-sketch-stroke,.de-sketch-annotation{fill:none;stroke-linecap:round;stroke-linejoin:round;pointer-events:stroke}.de-native-ink rect{fill:#17202a;opacity:.78}.de-native-ink text{fill:#fff;font:650 15px/1 var(--font-sans)} /* raw-color-ok: legible preserved-ink notice */
.de-document-desk{fill:#dfe4e8}.de-document-page>rect{fill:#fff;stroke:#c7d0d8;stroke-width:2;filter:drop-shadow(0 12px 18px rgb(0 0 0 / 16%))} /* raw-color-ok: frozen document paper and shadow */
.de-document-brand{fill:#294e3c;font:800 19px/1 var(--font-sans)}.de-document-page-no,.de-document-meta{fill:#71808c;font:600 12px/1 var(--font-sans)}.de-document-divider,.de-document-rule,.de-document-sign{stroke:#cbd5dc;stroke-width:1}.de-document-initial{fill:#2356ad;font:italic 700 14px/1 var(--font-sans)} /* raw-color-ok: printed document ink */
.de-drafting-grid{stroke:#365069;stroke-width:1;opacity:.48}.de-drafting-entity{fill:none;stroke-linecap:round;stroke-linejoin:round;pointer-events:stroke}.de-drafting-entity--selected{filter:drop-shadow(0 0 7px color-mix(in srgb,var(--c-brand-primary) 88%,transparent));stroke-width:4}.de-drafting-empty text:first-child{fill:#d7e2eb;font:700 20px/1 var(--font-sans)}.de-drafting-empty text:last-child{fill:#7891a5;font:500 14px/1 var(--font-sans)}.de-drafting-status rect{fill:#102b45;stroke:#45627b}.de-drafting-status text{fill:#c8d8e4;font:700 15px/1 ui-monospace,SFMono-Regular,Menlo,monospace} /* raw-color-ok: frozen drafting-blueprint palette */
.de-elevation-bg{fill:#0b1f33}.de-elevation-title{fill:#7f9bb1;font:800 16px/1 var(--font-sans);letter-spacing:2px}.de-elevation-card>rect{fill:#102a43;stroke:#355a73;stroke-width:2}.de-elevation-card path,.de-elevation-card>rect:not(:first-child){fill:none;stroke:#33d2e5;stroke-width:4}.de-elevation-name{fill:#ecf4f8;font:800 20px/1 var(--font-sans);text-transform:capitalize}.de-elevation-confidence{fill:#62c995;font:700 13px/1 var(--font-sans)}.de-elevation-empty text:first-child{fill:#d7e5ed;font:750 22px/1 var(--font-sans)}.de-elevation-empty text:last-child{fill:#7895a9;font:500 15px/1 var(--font-sans)} /* raw-color-ok: frozen elevation blueprint palette */
.de-annotation{font-weight:650;paint-order:stroke;stroke:#0d2137;stroke-width:4px;stroke-linejoin:round} /* raw-color-ok: text halo follows canvas */
.de-label text{font:750 16px/1 var(--font-sans);pointer-events:none}.de-label{cursor:pointer}.de-label__saved{fill:#35c86b}.de-label__check{font-size:13px;fill:white} /* raw-color-ok: saved-tag badge */
.de-label--flash{animation:de-label-pulse .8s ease}@keyframes de-label-pulse{50%{filter:drop-shadow(0 0 16px #fff);transform:scale(1.08)}} /* raw-color-ok: momentary canvas locator */
.de-tag-measurements{display:flex;flex-direction:column;gap:10px;margin:12px 0 16px}
.de-measure-tabs{display:grid;grid-template-columns:1fr 1fr;padding:3px;border-radius:9px;background:var(--c-surface-secondary)}
.de-measure-tabs button{min-height:30px;border:0;border-radius:7px;background:transparent;color:var(--c-text-secondary);font:700 11px/1 var(--font-sans);cursor:pointer}
.de-measure-tabs button[aria-selected="true"]{background:var(--c-surface-primary);box-shadow:var(--d-shadow-xs);color:var(--c-text-primary)}
.de-measure-stepper{display:grid;grid-template-columns:62px minmax(0,1fr);align-items:center;gap:7px 10px;padding:10px 0;border-bottom:1px solid var(--c-border-subtle)}
.de-measure-stepper__label{font-size:9px;font-weight:800;letter-spacing:.7px;color:var(--c-text-tertiary)}
.de-measure-stepper__hero{display:flex;align-items:baseline;gap:3px}.de-measure-stepper__hero strong{font:800 28px/1 var(--font-sans);font-variant-numeric:tabular-nums}.de-measure-stepper__hero b{font-size:15px;color:var(--c-text-secondary)}
.de-measure-stepper__controls{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:7px}.de-measure-stepper__controls>span{display:grid;grid-template-columns:28px minmax(28px,1fr) 28px auto;align-items:center;height:30px;border:1px solid var(--c-border-subtle);border-radius:8px;background:var(--c-surface-primary);overflow:hidden}.de-measure-stepper__controls button{height:30px;border:0;background:var(--c-surface-secondary);color:var(--c-text-primary);font-size:16px;cursor:pointer}.de-measure-stepper__controls output{text-align:center;font-size:11px;font-weight:750;font-variant-numeric:tabular-nums}.de-measure-stepper__controls small{padding:0 5px;color:var(--c-text-tertiary);font-size:8px}
.de-measure-manual{margin:0}.de-measure-manual .form-group{min-width:0}
.de-measure-exact{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--c-brand-primary) 24%,var(--c-border-subtle));border-radius:9px;background:color-mix(in srgb,var(--c-brand-primary) 7%,var(--c-surface-primary))}.de-measure-exact[hidden]{display:none}.de-measure-exact span{font-size:8px;font-weight:800;letter-spacing:.8px;color:var(--c-text-tertiary)}.de-measure-exact strong{font-size:14px;font-variant-numeric:tabular-nums}.de-measure-exact small{color:var(--c-text-secondary);font-size:9px}
.de-measure-warning>p{margin:0 0 12px;color:var(--c-text-secondary);font-size:11px;text-align:center}.de-measure-warning__row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;padding:10px 0;border-top:1px solid var(--c-border-subtle)}.de-measure-warning__row>strong,.de-measure-warning__row>em{grid-column:1/-1}.de-measure-warning__row>strong{font-size:10px}.de-measure-warning__row>span{display:flex;flex-direction:column;gap:2px;padding:7px;border-radius:7px;background:var(--c-surface-secondary);text-align:center}.de-measure-warning__row small{font-size:8px;color:var(--c-text-tertiary)}.de-measure-warning__row del,.de-measure-warning__row ins{font-size:11px;font-weight:750;text-decoration:none;font-variant-numeric:tabular-nums}.de-measure-warning__row del{text-decoration:line-through;color:var(--c-text-secondary)}.de-measure-warning__row ins{color:var(--c-warning)}.de-measure-warning__row em{color:var(--c-warning);font-size:9px;font-style:normal;text-align:center}
.de-floating{position:absolute;z-index:5;display:flex;flex-direction:column;gap:2px;padding:4px;border:1px solid color-mix(in srgb,var(--c-border-subtle) 70%,transparent);border-radius:10px;background:color-mix(in srgb,var(--c-surface-primary) 94%,transparent);box-shadow:var(--d-shadow-md)}
.de-floating--left{left:10px;top:10px}.de-floating button{display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:7px;background:none;color:var(--c-text-secondary);cursor:pointer}.de-floating button:hover{background:var(--c-surface-secondary);color:var(--c-brand-primary)}
.de-floating button.de-floating--on{background:color-mix(in srgb,var(--c-brand-primary) 13%,var(--c-surface-primary));color:var(--c-brand-primary)}
.de-mode-pop{position:absolute;z-index:5;left:64px;top:10px;display:none;gap:4px;padding:8px;border-radius:11px;background:color-mix(in srgb,var(--c-surface-primary) 96%,transparent);box-shadow:var(--d-shadow-md)}
.de-mode-pop button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;width:54px;height:54px;border:0;border-radius:8px;background:none;color:var(--c-text-secondary);font:800 18px/1 var(--font-sans);cursor:pointer}.de-mode-pop button small{font-size:8px;text-transform:uppercase;letter-spacing:.4px}.de-mode-pop .de-mode--on{background:color-mix(in srgb,var(--c-brand-primary) 12%,var(--c-surface-primary));color:var(--c-brand-primary)}
.de-panel-toggle{position:absolute;z-index:8;right:8px;top:10px;width:28px;height:36px;border:1px solid var(--c-border-subtle);border-radius:9px;background:var(--c-surface-primary);box-shadow:var(--d-shadow-sm);color:var(--c-text-secondary);font-size:24px;cursor:pointer;transition:right .2s}.de-panel-toggle--shift{right:278px}
.de-tag-panel,.de-takeoff-panel{position:absolute;z-index:7;right:0;top:0;bottom:0;width:270px;padding:15px;overflow:auto;transform:translateX(102%);transition:transform .2s;border-left:1px solid color-mix(in srgb,var(--c-border-subtle) 55%,transparent);background:color-mix(in srgb,var(--c-surface-primary) 96%,transparent);box-shadow:-12px 0 30px rgb(0 0 0 / 14%)} /* raw-color-ok: overlay depth */
.de-tag-panel--open,.de-takeoff-panel--open{transform:translateX(0)}.de-takeoff-panel{z-index:9}
.de-overlay-pop{position:absolute;z-index:10;left:54px;top:10px;width:310px;max-height:calc(100% - 20px);padding:14px;overflow:auto;border:1px solid var(--c-border-subtle);border-radius:14px;background:color-mix(in srgb,var(--c-surface-primary) 97%,transparent);box-shadow:var(--d-shadow-lg);transform:translateX(-15px);opacity:0;pointer-events:none;transition:transform .18s,opacity .18s}
.de-overlay-pop--open{transform:translateX(0);opacity:1;pointer-events:auto}
.de-overlay-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}.de-overlay-head>div{display:flex;min-width:0;flex-direction:column;gap:3px}.de-overlay-head strong{font-size:14px}.de-overlay-head small{overflow:hidden;color:var(--c-text-tertiary);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.de-overlay-head>button{border:0;background:none;color:var(--c-text-secondary);font-size:20px;cursor:pointer}
.de-overlay-import{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;height:40px;margin-bottom:12px;border:0;border-radius:10px;background:var(--c-brand-primary);color:var(--c-on-brand);font:700 11px/1 var(--font-sans);cursor:pointer}
.de-overlay-list{display:flex;flex-direction:column;gap:6px}.de-overlay-row{display:grid;grid-template-columns:minmax(0,1fr) 30px 30px;align-items:center;border:1px solid var(--c-border-subtle);border-radius:10px;background:var(--c-surface-primary);overflow:hidden}.de-overlay-row--on{border-color:color-mix(in srgb,var(--c-brand-primary) 45%,var(--c-border-subtle));background:color-mix(in srgb,var(--c-brand-primary) 7%,var(--c-surface-primary))}
.de-overlay-select{display:grid;grid-template-columns:50px minmax(0,1fr);align-items:center;gap:9px;min-width:0;padding:7px;border:0;background:none;text-align:left;cursor:pointer}.de-overlay-select>span:last-child{display:flex;min-width:0;flex-direction:column;gap:3px}.de-overlay-select strong,.de-overlay-select small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.de-overlay-select strong{font-size:11px}.de-overlay-select small{color:var(--c-text-tertiary);font-size:9px}.de-overlay-thumb{display:grid;place-items:center;width:50px;height:38px;border-radius:7px;background:#0d2137;color:#8ba8bd;overflow:hidden} /* raw-color-ok: drawing-overlay thumbnail */
.de-overlay-thumb img{width:100%;height:100%;object-fit:cover}.de-overlay-row>[data-overlay-rename],.de-overlay-row>[data-overlay-delete]{display:grid;place-items:center;width:28px;height:28px;border:0;border-radius:7px;background:none;color:var(--c-text-secondary);cursor:pointer}.de-overlay-row>[data-overlay-delete]{font-size:18px}.de-overlay-row>button:hover{background:var(--c-surface-secondary);color:var(--c-brand-primary)}
.de-overlay-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.de-overlay-actions button{min-height:36px;padding:7px;border:1px solid var(--c-border-subtle);border-radius:9px;background:var(--c-surface-primary);color:var(--c-text-primary);font:650 9px/1.2 var(--font-sans);cursor:pointer}.de-overlay-actions button:hover{border-color:var(--c-brand-primary);color:var(--c-brand-primary)}.de-overlay-empty{padding:18px 8px;color:var(--c-text-tertiary);font-size:10px;line-height:1.5;text-align:center}
.de-panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.de-panel-head strong{font-size:14px}.de-panel-head span{display:grid;place-items:center;min-width:23px;height:23px;border-radius:999px;background:var(--c-surface-secondary);font-size:10px}.de-panel-head button{border:0;background:none;font-size:20px;color:var(--c-text-secondary);cursor:pointer}
.de-tag-panel>button{display:flex;flex-direction:column;align-items:flex-start;width:100%;gap:3px;padding:10px;border:0;border-bottom:1px solid var(--c-border-subtle);background:none;text-align:left;cursor:pointer}.de-tag-panel>button:hover{background:var(--c-surface-secondary)}.de-tag-panel>button b{font-size:12px}.de-tag-panel>button small{font-size:10px;color:var(--c-text-tertiary)}
.de-tag-panel p,.de-takeoff-panel p{font-size:11px;color:var(--c-text-tertiary)}
.de-takeoff-total{padding:15px;border-radius:12px;background:var(--c-surface-secondary);margin-bottom:12px}.de-takeoff-total strong{display:block;font-size:28px}.de-takeoff-total span{font-size:10px;color:var(--c-text-secondary)}
.de-takeoff-row{display:flex;justify-content:space-between;padding:10px 2px;border-bottom:1px solid var(--c-border-subtle);font-size:12px;text-transform:capitalize}
.de-undo{position:absolute;z-index:5;left:10px;bottom:48px;display:flex;padding:3px;border-radius:9px;background:var(--c-surface-primary);box-shadow:var(--d-shadow-md)}.de-undo button{display:grid;place-items:center;width:34px;height:32px;border:0;background:none;color:var(--c-text-secondary);cursor:pointer}.de-undo button:disabled{opacity:.3;cursor:default}
.de-command{display:grid;grid-template-columns:34px minmax(0,1fr) 34px;align-items:center;gap:5px;padding:5px 11px;border-top:1px solid var(--c-border-subtle);border-bottom:1px solid var(--c-border-subtle);background:var(--c-surface-primary)}
.de-command input{height:31px;border:1px solid var(--c-border-subtle);border-radius:7px;padding:0 10px;background:var(--c-surface-secondary);color:var(--c-text-primary);font:11px/1 var(--font-sans);outline:none}.de-command input:focus{border-color:var(--c-brand-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--c-brand-primary) 12%,transparent)}
.de-command button{height:31px;border:0;border-radius:7px;background:none;color:var(--c-text-secondary);cursor:pointer}.de-command button:hover,.de-command .de-command__ai-on{background:var(--c-surface-secondary);color:var(--c-brand-primary)}
.de-report-prompt{text-align:center}.de-report-prompt__icon{display:grid;place-items:center;width:52px;height:52px;margin:0 auto 12px;border-radius:15px;background:var(--c-brand-tint);color:var(--c-brand-primary);font-size:25px}.de-report-prompt p,.de-report-question{margin:0 0 16px;color:var(--c-text-secondary)}
.de-report-presets{display:grid;gap:8px}.de-report-presets button{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;padding:13px 14px;border:1px solid var(--c-border-subtle);border-radius:10px;background:var(--c-surface-primary);color:var(--c-text-primary);text-align:left;cursor:pointer}.de-report-presets button:hover{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}.de-report-presets span{display:grid;gap:3px}.de-report-presets small{color:var(--c-text-secondary);font-weight:450}.de-report-presets i{color:var(--c-text-tertiary);font-size:24px;font-style:normal}
.de-report-frame{display:block;width:min(100%,920px);height:min(72vh,820px);margin:auto;border:1px solid var(--c-border-subtle);border-radius:9px;background:var(--c-surface-secondary)}.de-report-frame--layout{height:min(68vh,720px)}
.report-page,.report-plan,.report-content,.report-brand,.report-brand__company,.report-drawing,.report-plan__image,.report-section,.report-item,.report-item--flagged,.report-item__number,.report-item__meta,.report-item__photos,.report-notes,.report-empty,.report-disclaimer{box-sizing:border-box}
.de-footer{display:flex;align-items:stretch;border-top:1px solid var(--c-border-subtle);background:var(--c-surface-primary);overflow:hidden}
.de-footer__actions{display:flex;align-items:stretch;min-width:0;overflow-x:auto;scrollbar-width:none}.de-footer__actions::-webkit-scrollbar{display:none}
.de-footer__actions button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;flex:none;width:58px;border:0;background:none;color:var(--c-text-secondary);cursor:pointer}.de-footer__actions button:hover{background:var(--c-surface-secondary);color:var(--c-brand-primary)}.de-footer__actions button b{font:700 15px/1 var(--font-sans)}.de-footer__actions button span{display:none;font-size:8px;white-space:nowrap}
.de-footer__identity{display:flex;align-items:center;gap:8px;margin-left:auto;padding:0 17px;border-left:1px solid var(--c-border-subtle);white-space:nowrap}.de-footer__identity span{font-size:8px;letter-spacing:1.1px;color:var(--c-text-tertiary)}.de-footer__identity strong{font-size:11px}
.de-layout-picker{display:grid;grid-template-columns:1fr 1fr;gap:8px}.de-layout-picker button{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--c-border-subtle);border-radius:11px;background:var(--c-surface-primary);text-align:left;cursor:pointer}.de-layout-picker button:hover{border-color:var(--c-brand-primary);background:color-mix(in srgb,var(--c-brand-primary) 5%,var(--c-surface-primary))}.de-layout-picker button>b{font-size:22px;color:var(--c-brand-primary)}.de-layout-picker button span{display:flex;flex-direction:column;gap:3px}.de-layout-picker button strong{font-size:12px}.de-layout-picker button small{font-size:10px;color:var(--c-text-tertiary)}
.de-background-picker{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.de-background-picker button{display:flex;min-height:78px;flex-direction:column;align-items:center;justify-content:center;gap:7px;border:1px solid var(--c-border-subtle);border-radius:10px;background:var(--c-surface-primary);color:var(--c-text-secondary);cursor:pointer}.de-background-picker button b{font-size:22px}.de-background-picker button span{font-size:10px}.de-background-picker button:hover,.de-background-picker .de-background-picker--on{border-color:var(--c-brand-primary);background:color-mix(in srgb,var(--c-brand-primary) 8%,var(--c-surface-primary));color:var(--c-brand-primary)}
.de-choice-list{display:flex;flex-direction:column;gap:5px}.de-choice-list button{display:flex;align-items:center;justify-content:space-between;min-height:42px;padding:0 12px;border:1px solid var(--c-border-subtle);border-radius:9px;background:var(--c-surface-primary);color:var(--c-text-primary);font:600 11px/1.2 var(--font-sans);cursor:pointer}.de-choice-list button b{color:var(--c-brand-primary)}.de-choice-list button:hover,.de-choice-list .de-choice-list--on{border-color:var(--c-brand-primary);background:color-mix(in srgb,var(--c-brand-primary) 7%,var(--c-surface-primary))}
.de-page-list,.de-layer-list,.de-snap-list,.de-facade-list{display:flex;flex-direction:column;gap:7px}.de-page-list>div,.de-facade-list>div{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px;border:1px solid var(--c-border-subtle);border-radius:9px}.de-page-list>div>span{display:flex;min-width:0;flex-direction:column;gap:3px}.de-page-list small{color:var(--c-text-tertiary);font-size:9px}.de-page-list button{border:0;background:none;color:var(--c-danger);font:650 10px/1 var(--font-sans);cursor:pointer}.de-page-list button:disabled{opacity:.35;cursor:default}.de-facade-list span{color:var(--c-positive);font-size:10px;font-weight:700}
.de-layer-list label,.de-snap-list label{display:flex;align-items:center;gap:10px;min-height:42px;padding:8px 10px;border:1px solid var(--c-border-subtle);border-radius:9px;cursor:pointer}.de-layer-list label>i{width:14px;height:14px;border-radius:50%;box-shadow:0 0 0 1px var(--c-border-strong)}.de-layer-list label>span{display:flex;flex-direction:column;gap:2px}.de-layer-list small{color:var(--c-text-tertiary);font-size:9px}.de-snap-list{display:grid;grid-template-columns:1fr 1fr;margin-bottom:14px}.de-snap-list label{min-height:36px;font-size:10px}
.de-color-picks{display:grid;grid-template-columns:repeat(6,1fr);gap:9px}.de-color-picks button{aspect-ratio:1;border:3px solid var(--c-surface-primary);outline:1px solid var(--c-border-subtle);border-radius:10px;background:var(--pick);cursor:pointer}.de-color-picks button:hover{outline:2px solid var(--c-brand-primary)}
.de-capability{text-align:center;padding:20px}.de-capability>b{display:block;font-size:38px;color:var(--c-brand-primary)}.de-capability strong{display:block;margin:9px}.de-capability p{font-size:12px;line-height:1.55;color:var(--c-text-secondary)}
.de-notes{width:100%;min-height:220px;resize:vertical}.de-calc__input{font-size:20px;text-align:right}.de-calc__result{margin-top:12px;padding:20px;border-radius:10px;background:var(--c-surface-secondary);font-size:28px;font-weight:750;text-align:right;word-break:break-all}
.de-level{position:relative;height:100px;margin:10px 0;border:2px solid var(--c-border-strong);border-radius:50px;background:var(--c-surface-secondary)}.de-level::before{content:'';position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--c-brand-primary)}.de-level__bubble{position:absolute;left:calc(50% - 24px);top:25px;width:48px;height:48px;border-radius:50%;background:color-mix(in srgb,var(--c-positive) 35%,transparent);border:2px solid var(--c-positive)}.de-level__copy{text-align:center;font-size:11px;color:var(--c-text-secondary);line-height:1.5}
@media(min-width:1220px){.de-footer__actions button{width:68px}.de-footer__actions button span{display:block}}
@media(max-width:900px){.drawing-editor-host{margin:-16px}.de{grid-template-rows:36px 52px 39px 44px minmax(0,1fr) 42px 54px}.de-brand{font-size:15px}.de-loaded{display:none}.de-brandbar{grid-template-columns:1fr auto}.de-tools button{width:37px}.de-zoom span{display:none}.de-zoom input{width:90px}.de-mode-pop{display:none}.de-layout-picker{grid-template-columns:1fr}.de-footer__identity{display:none}}
@media(max-width:680px){.drawing-editor-host{height:calc(100dvh - 50px);min-height:420px}.de-brand strong{display:none}.de-zoom{padding:0 7px}.de-zoom input{width:60px}.de-tools{overflow-x:auto}.de-tools button{width:35px;flex:none}.de-panel-toggle{display:none}.de-tag-panel,.de-takeoff-panel{width:min(86vw,300px)}.de-floating--left{left:5px;top:5px}.de-canvas{min-width:0}.de-footer__actions button{width:48px}.de-context{padding:0 8px}}
@media print{body:has(.de) .sidebar,body:has(.de) .topbar,body:has(.de) .de-context,body:has(.de) .de-brandbar,body:has(.de) .de-layoutbar,body:has(.de) .de-toolrow,body:has(.de) .de-command,body:has(.de) .de-footer,body:has(.de) .de-floating,body:has(.de) .de-mode-pop,body:has(.de) .de-panel-toggle,body:has(.de) .de-undo{display:none!important}body:has(.de) .main{margin:0!important}body:has(.de) .drawing-editor-host{height:100vh;margin:0}.de{display:block}.de-stage-wrap{height:100vh}.de-canvas{width:100%!important;height:100%!important}}

/* Catalyst Photos — hosted controls, maintenance state, gallery-link sheet, and stamp choice. */
.gl-controls{display:grid;gap:var(--space-sm-md);margin-bottom:var(--space-sm-md);padding:var(--space-sm-md) var(--space-md);background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-base)}
.gl-controls__row{display:flex;align-items:flex-end;gap:var(--space-md)}
.gl-controls .gl-tabs{flex:1;margin-bottom:0}.gl-controls .gl-search{margin-bottom:0}
.gl-controls__actions{display:flex;align-items:center;gap:var(--space-lg);padding-bottom:var(--space-sm-md)}
.gl-control-action{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:0;border:0;background:none;color:var(--c-text-secondary);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.gl-control-action:hover,.gl-control-action--active{color:var(--c-brand-primary)}
.gl-admin-actions{position:relative}.gl-admin-menu{width:30px;justify-content:center;font-size:18px;letter-spacing:1px}
.gl-admin-pop{position:absolute;right:0;top:34px;z-index:30;min-width:190px;padding:6px;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:10px;box-shadow:0 12px 35px rgba(0,0,0,.14)}
.gl-admin-pop[hidden]{display:none}
.gl-admin-pop button{display:flex;align-items:center;gap:8px;width:100%;border:0;border-radius:7px;background:none;padding:9px 10px;color:var(--c-text-primary);font:inherit;font-size:12px;font-weight:650;text-align:left;cursor:pointer}.gl-admin-pop button:hover{background:var(--c-input-fill)}
.gl-backfill{display:grid;gap:7px;margin:-4px 0 var(--space-sm-md);padding:12px 14px;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-base)}.gl-backfill[hidden]{display:none}
.gl-backfill__row{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:650;color:var(--c-text-secondary)}.gl-backfill__bar{height:5px;border-radius:999px;background:var(--c-input-fill);overflow:hidden}.gl-backfill__bar span{display:block;height:100%;background:var(--c-brand-primary);transition:width .2s}.gl-backfill__meta{font-size:11px;color:var(--c-text-tertiary)}

.gshare-backdrop{position:fixed;inset:0;z-index:1200;background:rgba(17,24,21,.48);display:flex;align-items:center;justify-content:center;padding:20px}
.gshare{width:min(560px,100%);max-height:min(760px,calc(100vh - 40px));overflow:auto;background:var(--c-background-secondary);border:1px solid var(--c-card-border);border-radius:18px;box-shadow:0 24px 80px rgba(0,0,0,.22);color:var(--c-text-primary)}
.gshare__head{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:10px;padding:16px 18px;background:color-mix(in srgb,var(--c-card-background) 94%,transparent);backdrop-filter:blur(14px);border-bottom:1px solid var(--c-separator)}
.gshare__head svg{color:var(--c-brand-primary)}.gshare__title{font-size:17px;font-weight:700;flex:1}.gshare__close{width:32px;height:32px;border:0;border-radius:50%;background:var(--c-input-fill);color:var(--c-text-secondary);cursor:pointer;font-size:18px}
.gshare__body{display:grid;gap:20px;padding:20px}.gshare__project{display:flex;align-items:center;gap:12px;padding:14px;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:12px}
.gshare__project-icon{display:grid;place-items:center;width:44px;height:44px;border-radius:10px;background:var(--c-brand-tint);color:var(--c-brand-primary);flex:0 0 auto}.gshare__project-main{min-width:0}.gshare__project-name{font-size:14px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gshare__project-meta{font-size:12px;color:var(--c-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.gshare__label{font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-secondary);margin-bottom:8px}.gshare__expiry{display:flex;gap:7px;overflow-x:auto;padding-bottom:2px}
.gshare__pill{border:1px solid var(--c-input-border);background:var(--c-input-fill);border-radius:999px;padding:7px 13px;color:var(--c-text-secondary);font:inherit;font-size:12px;font-weight:700;white-space:nowrap;cursor:pointer}.gshare__pill--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-on-brand)}
.gshare__toggle{display:flex;align-items:center;gap:10px;margin:14px 0}.gshare__toggle input{width:18px;height:18px;accent-color:var(--c-brand-primary)}.gshare__toggle strong{display:block;font-size:13px}.gshare__toggle span{display:block;font-size:11px;color:var(--c-text-secondary);margin-top:2px}
.gshare__primary{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;border-radius:9px;background:var(--c-brand-primary);color:var(--c-on-brand);font:inherit;font-size:13px;font-weight:750;padding:10px 16px;cursor:pointer}.gshare__primary:disabled{opacity:.55;cursor:wait}
.gshare__result{display:grid;gap:8px}.gshare__url{font:12px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--c-brand-primary);padding:11px;background:var(--c-input-fill);border:1px solid var(--c-input-border);border-radius:8px;overflow-wrap:anywhere}.gshare__actions{display:flex;gap:9px;flex-wrap:wrap}.gshare__secondary{border:1px solid var(--c-input-border);border-radius:999px;background:var(--c-card-background);color:var(--c-text-primary);font:inherit;font-size:12px;font-weight:700;padding:8px 13px;cursor:pointer}
.gshare__links{display:grid;gap:8px}.gshare__row{display:flex;align-items:center;gap:10px;padding:11px;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:10px}.gshare__row-main{min-width:0;flex:1}.gshare__row-title{font-size:12px;color:var(--c-text-secondary)}.gshare__row-meta{font-size:11px;color:var(--c-text-tertiary);margin-top:3px}.gshare__revoke{border:0;border-radius:999px;background:color-mix(in srgb,var(--c-danger) 8%,transparent);color:var(--c-danger);font:inherit;font-size:11px;font-weight:750;padding:6px 10px;cursor:pointer}.gshare__loading,.gshare__empty,.gshare__error{font-size:12px;color:var(--c-text-secondary)}.gshare__error{color:var(--c-danger)}

.pstamp-backdrop{position:fixed;inset:0;z-index:10100;background:rgba(17,24,21,.5);display:grid;place-items:center;padding:20px}.pstamp{width:min(430px,100%);background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.24);padding:20px;color:var(--c-text-primary)}
.pstamp__icon{display:grid;place-items:center;width:42px;height:42px;border-radius:11px;background:var(--c-brand-tint);color:var(--c-brand-primary);margin-bottom:12px}.pstamp__title{font-size:17px;font-weight:750}.pstamp__message{font-size:13px;line-height:1.45;color:var(--c-text-secondary);margin:6px 0 16px}
.pstamp__choices{display:grid;gap:8px}.pstamp__choice{display:flex;align-items:center;gap:10px;width:100%;border:1px solid var(--c-input-border);border-radius:10px;background:var(--c-input-fill);padding:11px 12px;color:var(--c-text-primary);font:inherit;font-size:13px;font-weight:700;text-align:left;cursor:pointer}.pstamp__choice:hover,.pstamp__choice--current{border-color:var(--c-brand-primary);color:var(--c-brand-primary)}.pstamp__choice-mark{margin-left:auto;color:var(--c-brand-primary)}.pstamp__cancel{display:block;margin:14px auto 0;border:0;background:none;color:var(--c-text-secondary);font:inherit;font-size:13px;font-weight:650;cursor:pointer}
@media(max-width:760px){.gl-controls__row{flex-wrap:wrap}.gl-controls .gl-tabs{flex:1 0 100%;width:100%}.gl-controls__actions{margin-left:auto;padding-bottom:0}}
@media(max-width:600px){.gshare-backdrop{align-items:flex-end;padding:0}.gshare{width:100%;max-height:92vh;border-radius:18px 18px 0 0;border-bottom:0}.gshare__body{padding:16px}.pstamp-backdrop{place-items:end center;padding:0}.pstamp{width:100%;border-radius:16px 16px 0 0;border-bottom:0;padding:20px 18px calc(20px + env(safe-area-inset-bottom))}}

/* ── Reports: frozen Catalyst one-spine + 332pt rail ───────────────────────
   This is not a record split view. The rail is the native Goals/Safety/Public Access insight
   column; at compact width Catalyst stacks that same column below the analytics spine. */
.rp-periods{display:flex;align-items:stretch;gap:22px;min-width:0;margin:0 0 22px;border-bottom:1px solid var(--c-separator);overflow-x:auto;scrollbar-width:none}.rp-periods::-webkit-scrollbar,.rp-report-picker::-webkit-scrollbar{display:none}
.rp-periods button{position:relative;flex:0 0 auto;min-height:44px;padding:0 1px;border:0;background:transparent;color:var(--c-text-secondary);font:650 var(--text-caption)/1 var(--font-family);cursor:pointer}.rp-periods button::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:transparent}.rp-periods button.is-selected{color:var(--c-text-primary)}.rp-periods button.is-selected::after{background:var(--c-brand-primary)}
.rp-layout{display:grid;grid-template-columns:minmax(0,1fr) 332px;align-items:start;min-width:0}.rp-spine{display:grid;gap:22px;min-width:0;padding-right:24px}.rp-rail{display:grid;gap:0;min-width:0;padding-left:24px;border-left:1px solid var(--c-separator)}
.rp-band,.rp-answer-band,.rp-workbench>section{display:grid;gap:10px;min-width:0}.rp-kicker{display:flex;align-items:first baseline;justify-content:space-between;gap:14px;min-width:0;color:var(--c-text-tertiary);font-size:10px;font-weight:800;letter-spacing:.055em}.rp-kicker>span:first-child{min-width:0}.rp-kicker small{font-size:9px;font-weight:500;letter-spacing:0;text-align:right}.rp-rule{height:1px;background:var(--c-separator)}
.rp-story{display:grid;grid-template-columns:minmax(0,1fr) 32px minmax(0,1fr) 32px minmax(0,1fr) 32px minmax(0,1fr);align-items:start;padding:2px}.rp-story__stage{display:grid;gap:2px;min-width:0}.rp-story__stage>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:20px;line-height:1.15;font-weight:760;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}.rp-story__stage>b{font-size:10px;color:var(--c-text-secondary)}.rp-story__stage>small{font-size:9px;line-height:1.35;color:var(--c-text-tertiary)}.rp-story__arrow{padding-top:15px;text-align:center;color:var(--c-text-tertiary)}
.rp-tone--brand>strong,.rp-tone--brand{color:var(--c-brand-primary)!important}.rp-tone--info>strong,.rp-tone--info{color:var(--c-info)!important}.rp-tone--danger>strong,.rp-tone--danger{color:var(--c-danger)!important}.rp-tone--warning>strong,.rp-tone--warning{color:var(--c-warning)!important}.rp-tone--teal>strong,.rp-tone--teal{color:var(--c-accent-teal)!important}.rp-tone--purple>strong,.rp-tone--purple{color:var(--c-accent-purple)!important}.rp-tone--positive>strong,.rp-tone--positive{color:var(--c-brand-primary)!important}
.rp-leaks{display:flex;align-items:center;gap:8px;min-width:0;padding-top:11px;border-top:1px solid var(--c-separator);overflow-x:auto}.rp-leak{flex:0 0 auto;min-height:32px;padding:5px 11px;border:0;border-radius:999px;background:var(--c-warning-tint);color:var(--c-warning);font:600 10px/1.25 var(--font-family);cursor:pointer}.rp-leak--danger{background:var(--c-danger-tint);color:var(--c-danger)}
.rp-funnel{display:grid;grid-template-columns:minmax(0,1fr) 56px minmax(0,1fr) 56px minmax(0,1fr);align-items:start;padding:2px}.rp-funnel__arrow{display:grid;justify-items:center;gap:2px;padding-top:10px;color:var(--c-text-tertiary)}.rp-funnel__arrow>b{font-size:10px;color:var(--c-brand-primary)}
.rp-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}.rp-metric{display:grid;align-content:start;gap:2px;min-width:0;padding:12px 14px;border-left:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent)}.rp-metric:first-child{border-left:0}.rp-metric>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:18px;font-weight:760;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}.rp-metric>span{font-size:10px;font-weight:750;color:var(--c-text-secondary)}.rp-metric>small{font-size:9px;line-height:1.35;color:var(--c-text-tertiary)}
.rp-legend{display:flex;align-items:center;gap:5px;font-size:9px;font-weight:500;letter-spacing:0;white-space:nowrap}.rp-legend i{width:10px;height:10px;border-radius:2px;background:var(--c-brand-primary)}.rp-legend .rp-legend__ghost{border:1px dashed color-mix(in srgb,var(--c-brand-primary) 45%,transparent);background:var(--c-brand-tint)}
.rp-cash{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));align-items:end;gap:14px;min-height:116px;padding:2px;border-bottom:1px solid var(--c-separator)}.rp-cash__month{display:grid;gap:4px;min-width:0;text-align:center}.rp-cash__month>span{font-size:9px;color:var(--c-text-tertiary)}.rp-cash__bars{display:flex;align-items:flex-end;justify-content:center;height:92px}.rp-cash__bars>i{display:block;width:min(17px,42%);min-height:0;border-radius:3px 3px 0 0}.rp-cash__booked{border:1px dashed color-mix(in srgb,var(--c-brand-primary) 40%,transparent);background:var(--c-brand-tint)}.rp-cash__collected{background:var(--c-brand-primary)}.rp-cash__bars>em{font-style:normal;color:var(--c-text-tertiary)}
.rp-answers{display:grid;gap:22px}.rp-answer-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}.rp-answer{position:relative;display:grid;align-content:start;gap:6px;min-width:0;min-height:112px;padding:12px 14px;border:0;border-left:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent);background:transparent;color:inherit;text-align:left;cursor:pointer}.rp-answer:first-child{border-left:0}.rp-answer:hover{background:var(--c-input-fill)}.rp-answer__head{display:grid;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:6px;min-width:0}.rp-answer__head>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--c-text-secondary)}.rp-answer__head>span:last-child{color:var(--c-text-tertiary)}.rp-answer__mark{display:grid;place-items:center;width:18px;height:18px;border-radius:5px;background:var(--c-input-fill);font-size:10px;font-style:normal}.rp-answer>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:18px;font-weight:760;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}.rp-answer>small{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:10px;line-height:1.35;color:var(--c-text-secondary)}.rp-goal-ring{--rp-goal:0%;position:absolute;right:12px;top:38px;display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:conic-gradient(var(--c-brand-primary) var(--rp-goal),var(--c-input-fill) 0);font-size:8px;font-weight:800;color:var(--c-text-secondary)}.rp-goal-ring::before{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--c-background-secondary)}.rp-goal-ring{isolation:isolate}.rp-goal-ring::before{z-index:-1}
.rp-report-pill--brand{color:var(--c-brand-primary)}.rp-report-pill--danger{color:var(--c-danger)}.rp-report-pill--info{color:var(--c-info)}.rp-report-pill--positive{color:var(--c-brand-primary)}.rp-report-pill--teal{color:var(--c-accent-teal)}.rp-report-pill--purple{color:var(--c-accent-purple)}.rp-report-pill--warning{color:var(--c-warning)}
.rp-rail-card{display:grid;gap:10px;padding:0 0 22px}.rp-rail-card+.rp-rail-card{padding-top:22px;border-top:1px solid var(--c-separator)}.rp-rail-card p{margin:0;color:var(--c-text-secondary);font-size:11px;line-height:1.45}.rp-rail-link,.rp-copy-button{justify-self:start;min-height:32px;padding:0;border:0;background:transparent;color:var(--c-brand-primary);font:700 11px/1.3 var(--font-family);text-align:left;cursor:pointer}.rp-copy-button{color:var(--c-text-secondary);font-weight:500}.rp-goals{display:grid;gap:12px}.rp-goal{display:grid;gap:4px}.rp-goal>span{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px}.rp-goal>span b{color:var(--c-text-primary)}.rp-goal>span small{color:var(--c-text-secondary);font-variant-numeric:tabular-nums}.rp-goal__bar{position:relative;height:8px;border-radius:999px;background:var(--c-input-fill)}.rp-goal__bar>i{display:block;height:100%;border-radius:inherit;background:var(--c-brand-primary)}.rp-goal__bar>i.is-behind{background:var(--c-warning)}.rp-goal__bar>b{position:absolute;top:0;width:2px;height:8px;background:var(--c-text-tertiary)}.rp-goal>em{font-size:9px;font-style:normal;color:var(--c-text-tertiary)}.rp-goal>em.is-behind{color:var(--c-warning)}
.rp-pulse{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.rp-pulse .rp-metric{padding:9px;border:0;border-radius:8px;background:var(--c-input-fill)}.rp-pulse .rp-metric>strong{font-size:14px}.rp-pulse .rp-metric>span{font-size:8px}.rp-incident{min-height:36px;border:1px solid color-mix(in srgb,var(--c-danger) 50%,transparent);border-radius:8px;background:transparent;color:var(--c-danger);font:700 11px/1 var(--font-family);cursor:pointer}
.rp-drill-head{display:grid;gap:12px;margin-bottom:22px}.rp-drill-head>button,.rp-back{justify-self:start;min-height:36px;padding:0;border:0;background:transparent;color:var(--c-brand-primary);font:700 var(--text-caption)/1 var(--font-family);cursor:pointer}.rp-report-picker{display:flex;gap:8px;min-width:0;overflow-x:auto}.rp-report-pill{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;min-height:40px;padding:0 13px;border:1px solid var(--c-card-border);border-radius:999px;background:var(--c-card-background);font:650 11px/1 var(--font-family);cursor:pointer}.rp-report-pill>span{font-size:12px}.rp-report-pill.is-selected{border-color:var(--c-brand-primary);background:var(--c-brand-primary);color:var(--c-on-brand)}.rp-report-pill--danger.is-selected{border-color:var(--c-danger);background:var(--c-danger)}.rp-report-pill--info.is-selected{border-color:var(--c-info);background:var(--c-info)}.rp-report-pill--teal.is-selected{border-color:var(--c-accent-teal);background:var(--c-accent-teal)}.rp-report-pill--purple.is-selected{border-color:var(--c-accent-purple);background:var(--c-accent-purple)}.rp-report-pill--warning.is-selected{border-color:var(--c-warning);background:var(--c-warning)}.rp-report-pill.is-selected>span{color:inherit}.rp-drill-copy{display:flex;align-items:center;justify-content:space-between;gap:14px}.rp-drill-copy p{margin:0;color:var(--c-text-secondary);font-size:13px;line-height:1.45}.rp-workbench{display:grid;gap:24px;min-width:0}.rp-workbench>.rp-metrics{margin-bottom:2px}
.rp-table-wrap{max-width:100%;overflow-x:auto;border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}.rp-table{width:100%;border-collapse:collapse;font-size:11px;color:var(--c-text-secondary)}.rp-table th,.rp-table td{padding:10px 12px;border-bottom:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent);text-align:left;white-space:nowrap}.rp-table tr:last-child td{border-bottom:0}.rp-table th{font-size:9px;letter-spacing:.04em;color:var(--c-text-tertiary)}.rp-table td:not(:first-child),.rp-table th:not(:first-child){text-align:right}.rp-table__primary{max-width:280px;overflow:hidden;text-overflow:ellipsis;color:var(--c-text-primary)}.rp-table a{color:var(--c-brand-primary);font-weight:700;text-decoration:none}.rp-empty{padding:26px 12px;border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator);color:var(--c-text-tertiary);font-size:11px;text-align:center}.rp-status{display:inline-flex;padding:3px 7px;border-radius:999px;background:var(--c-input-fill);font-size:9px;font-weight:750}.rp-status--danger{background:var(--c-danger-tint);color:var(--c-danger)}.rp-status--warning{background:var(--c-warning-tint);color:var(--c-warning)}.rp-copy--danger{color:var(--c-danger)!important}.rp-copy--warning{color:var(--c-warning)!important}.rp-waterfall{display:grid;grid-template-columns:repeat(3,minmax(0,1fr) auto);align-items:center;border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}.rp-waterfall>.rp-metric{border:0}.rp-waterfall>span{color:var(--c-text-tertiary)}.rp-tax-line{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:12px 0;border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}.rp-tax-line span{font-size:9px;color:var(--c-text-secondary)}.rp-note{margin:0;color:var(--c-text-secondary);font-size:11px;line-height:1.45}.rp-aux{display:grid;gap:12px}.rp-loading{display:grid;grid-template-columns:1fr 332px;gap:24px}

@media(max-width:1080px){.rp-layout{grid-template-columns:minmax(0,1fr)}.rp-spine{padding-right:0}.rp-rail{grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:24px;padding:24px 0 0;border-top:1px solid var(--c-separator);border-left:0}.rp-rail-card,.rp-rail-card+.rp-rail-card{padding:0;border:0}.rp-answer-row{grid-template-columns:repeat(2,minmax(0,1fr))}.rp-answer:nth-child(3){border-left:0;border-top:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent)}.rp-answer:nth-child(4){border-top:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent)}}
@media(max-width:760px){.rp-rail{grid-template-columns:1fr}.rp-rail-card+.rp-rail-card{padding-top:20px;border-top:1px solid var(--c-separator)}.rp-story{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.rp-story__arrow{display:none}.rp-leaks{display:grid;overflow:visible}.rp-leak{white-space:normal;text-align:left}.rp-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.rp-metric:nth-child(odd){border-left:0}.rp-metric:nth-child(n+3){border-top:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent)}.rp-funnel{grid-template-columns:minmax(0,1fr) 34px minmax(0,1fr) 34px minmax(0,1fr)}.rp-funnel .rp-metric{padding:8px;border:0}.rp-funnel .rp-metric:nth-child(n){border:0}.rp-report-pill{min-height:44px}.rp-tax-line{grid-template-columns:repeat(2,minmax(0,1fr))}.rp-waterfall{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);grid-auto-rows:auto}.rp-waterfall>.rp-metric:last-child{grid-column:1/4;border-top:1px solid var(--c-separator)}}
@media(max-width:480px){.rp-periods{gap:18px;margin-bottom:18px}.rp-story__stage>strong{font-size:18px}.rp-answer{min-height:124px;padding:11px}.rp-answer>strong{font-size:16px}.rp-goal-ring{display:none}.rp-kicker{align-items:flex-start;flex-direction:column;gap:4px}.rp-kicker small{text-align:left}.rp-legend{white-space:normal}.rp-cash{gap:7px}.rp-cash__bars>i{width:min(13px,44%)}.rp-drill-copy{align-items:flex-start;flex-direction:column}.rp-drill-copy .btn{min-height:40px}.rp-pulse{gap:6px}.rp-pulse .rp-metric{padding:8px 6px}.rp-table th,.rp-table td{padding:9px 10px}}
.rp-table a{display:inline-flex;align-items:center;min-height:28px}
/* Reports — the teaching band, the workbench verbs, and the waterfall's clickable lines. */
.rp-teach{display:grid;gap:10px;padding:12px 0;border-bottom:1px solid var(--c-separator)}
.rp-teach__head{display:grid;grid-template-columns:24px minmax(0,1fr) 28px 28px;align-items:start;gap:10px}
.rp-teach__head p{margin:0;color:var(--c-text-secondary);font-size:12px;line-height:1.45}
.rp-teach__icon{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--c-warning-tint);color:var(--c-warning);font-size:10px}
.rp-teach__toggle{width:28px;height:28px;border:0;border-radius:50%;background:var(--c-input-fill);color:var(--c-text-secondary);font-size:11px;cursor:pointer}
.rp-teach__body{display:grid;gap:8px;padding-top:8px;border-top:1px solid var(--c-separator)}
.rp-teach__label{margin:0;color:var(--c-text-tertiary);font-size:9px;font-weight:800;letter-spacing:.05em}
.rp-teach__bullets{margin:0;padding-left:16px;color:var(--c-text-secondary);font-size:11px;line-height:1.6}
.rp-teach__tip{margin:0;padding:9px 11px;border-radius:8px;background:var(--c-warning-tint);color:var(--c-text-secondary);font-size:11px;font-style:italic;line-height:1.45}
.rp-teach__more{color:var(--c-brand-primary);font-size:11px;font-weight:600;text-decoration:none}
.rp-blank{min-height:120px}
.rp-pill{display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:0 12px;border:0;border-radius:999px;background:var(--c-brand-primary);color:var(--c-on-brand);font:700 10px/1 var(--font-family);text-decoration:none;white-space:nowrap;cursor:pointer}
.rp-pill--urgent{background:var(--c-danger)}
.rp-pill--ghost{border:1px solid var(--c-card-border);background:var(--c-card-background);color:var(--c-text-secondary)}
.rp-metric__action{padding-top:8px}
.rp-quiet{color:var(--c-text-tertiary)}
.rp-sub{display:block;padding-top:2px;color:var(--c-text-tertiary);font-size:9px;font-weight:400;white-space:nowrap}
.rp-lane{display:grid;gap:8px;padding:18px 0;border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}
.rp-lane__actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-start}
.rp-note--quiet{color:var(--c-text-tertiary);font-size:10px}
.rp-rows{display:grid;border-top:1px solid var(--c-separator);border-bottom:1px solid var(--c-separator)}
.rp-row{display:flex;align-items:center;justify-content:space-between;gap:14px;min-width:0;padding:10px 2px;border-bottom:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent)}
.rp-row:last-child{border-bottom:0}
.rp-row__id{display:grid;min-width:0;font-size:12px;font-weight:650}
.rp-row__id a{color:var(--c-text-primary);text-decoration:none}
.rp-row__verbs{display:flex;flex:0 0 auto;gap:8px}
.rp-pnl-line{display:flex;align-items:center;justify-content:space-between;gap:14px;width:100%;padding:11px 12px;border:0;border-bottom:1px solid color-mix(in srgb,var(--c-separator) 65%,transparent);background:transparent;color:inherit;text-align:left;cursor:pointer}
.rp-pnl-line:hover{background:var(--c-input-fill)}
.rp-pnl-line span{display:grid;gap:1px;min-width:0}
.rp-pnl-line b{font-size:12px;font-weight:650;color:var(--c-text-primary)}
.rp-pnl-line small,.rp-pnl-kept small{font-size:9px;color:var(--c-text-tertiary)}
.rp-pnl-line strong,.rp-pnl-kept strong{font-size:14px;font-weight:760;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.rp-pnl-kept{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:8px;padding:12px;border-radius:8px;background:var(--c-brand-tint)}
.rp-pnl-kept span{display:grid;gap:1px;min-width:0}
.rp-pnl-kept b{font-size:12px;font-weight:650;color:var(--c-text-primary)}
.rp-pnl-kept.is-loss{background:var(--c-danger-tint)}
.rp-pnl-kept.is-loss strong{color:var(--c-danger)}
.rp-breakeven,.rp-prequal{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px;border:1px solid color-mix(in srgb,var(--c-warning) 35%,transparent);border-radius:10px;background:var(--c-warning-tint)}
.rp-prequal{border-color:color-mix(in srgb,var(--c-brand-primary) 25%,transparent);background:var(--c-brand-tint)}
.rp-breakeven p,.rp-prequal p{margin:0;color:var(--c-text-secondary);font-size:12px;line-height:1.45}
.rp-copy-row{display:flex;justify-content:flex-start;padding-top:6px}
.rp-copy{min-height:34px;padding:0 12px;border:1px solid var(--c-card-border);border-radius:8px;background:var(--c-card-background);color:var(--c-text-secondary);font:650 11px/1 var(--font-family);cursor:pointer}
.rp-waterfall{display:block;border-top:1px solid var(--c-separator);border-bottom:0}
@media(max-width:480px){.rp-row{flex-direction:column;align-items:flex-start}.rp-breakeven,.rp-prequal{flex-direction:column;align-items:flex-start}}

/* ── Growth · Reviews ───────────────────────────────────────────────────────
 * reviewsCommandCenter: an inbox beside a 350px action rail, stacking when the
 * width will not carry both. The rail owns the three ways to collect. */
.rv-reputation{display:flex;align-items:baseline;gap:var(--space-md);margin-bottom:var(--space-md);padding:0 2px}
.rv-reputation__kicker{font-size:10px;font-weight:800;letter-spacing:.5px;color:var(--c-text-tertiary)}
.rv-reputation__verdict{margin-left:auto;font-size:var(--text-caption);color:var(--c-text-secondary);text-align:right}
.rv-reputation__verdict strong{color:var(--c-text-primary);font-variant-numeric:tabular-nums}
.rv-reputation__warn{color:var(--c-warning)}
.rv-sync{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-caption);font-weight:650;color:var(--c-text-secondary);white-space:nowrap}
.rv-sync em{font-style:normal;font-weight:500;color:var(--c-text-tertiary)}
.rv-sync--ok{color:var(--c-success)}
.rv-sync--warn{color:var(--c-warning)}
.rv-workspace{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-lg);align-items:start}
@media(min-width:980px){.rv-workspace{grid-template-columns:minmax(0,1fr) 350px}}
.rv-inbox{padding:var(--space-lg)}
.rv-inbox__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.rv-inbox__head h3{margin:0;font-size:var(--text-title3);color:var(--c-text-primary)}
.rv-inbox__head p{margin:2px 0 0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.rv-reply-filter{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin:var(--space-md) 0}
.rv-chip{display:inline-flex;align-items:center;gap:4px;min-height:30px;padding:0 var(--space-smMd,10px);border:0;border-radius:var(--radius-pill);background:var(--c-control-fill,var(--c-input-fill));color:var(--c-text-secondary);font:650 var(--text-footnote)/1 var(--font-family);cursor:pointer}
.rv-chip span{padding:1px 5px;border-radius:var(--radius-pill);background:var(--c-input-fill);font-size:10px;font-weight:800;font-variant-numeric:tabular-nums}
.rv-chip--queue{color:var(--c-warning)}
.rv-chip--queue span{background:var(--c-warning-tint)}
.rv-chip--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.rv-chip--on span{background:color-mix(in srgb,var(--c-on-brand) 25%,transparent)}
.rv-chip--on.rv-chip--queue{background:var(--c-warning)}
.rv-filter-empty{margin:0;padding:var(--space-lg) 0;color:var(--c-text-tertiary);font-size:var(--text-caption);text-align:center}
.rv-card--needs{border-color:color-mix(in srgb,var(--c-warning) 28%,transparent)}
.rv-state{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-pill);background:var(--c-warning-tint);color:var(--c-warning);font-size:10px;font-weight:700;white-space:nowrap}
.rv-state--done{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.rv-nudge{display:flex;align-items:center;gap:6px;margin:10px 0 0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.rv-nudge::before{content:"◆";color:var(--c-warning);font-size:10px}
.rv-source{display:inline-block;margin-top:10px;color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:600;text-decoration:none}
.rv-source:hover{color:var(--c-text-secondary)}
.rv-rail{display:flex;flex-direction:column;gap:var(--space-md)}
.rv-rail__card{padding:var(--space-lg)}
.rv-rail__card h4{margin:0 0 var(--space-sm);font-size:var(--text-headline);color:var(--c-text-primary)}
.rv-rail__card p{margin:0 0 var(--space-md);font-size:var(--text-footnote);color:var(--c-text-secondary);line-height:1.45}
.rv-rail__cta{width:100%;justify-content:center}
.rv-way{display:flex;align-items:center;gap:var(--space-smMd,10px);width:100%;min-height:40px;padding:0;border:0;border-top:1px solid var(--c-separator);background:none;color:var(--c-text-primary);font:500 var(--text-footnote)/1.4 var(--font-family);text-align:left;cursor:pointer}
.rv-ways .rv-way:first-of-type{border-top:0}
.rv-way>span{width:24px;color:var(--c-brand-primary);text-align:center}
.rv-way>em{margin-left:auto;color:var(--c-text-tertiary);font-style:normal;font-weight:800;font-size:11px}
.rv-momentum{height:6px;margin-bottom:var(--space-md);border-radius:var(--radius-pill);background:var(--c-input-fill);overflow:hidden}
.rv-momentum i{display:block;height:100%;border-radius:var(--radius-pill);background:var(--c-brand-primary)}
/* A full-width disclosure whose 14px line-height was its whole height. The floor, unconditionally. */
.rv-disclose{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:24px;border:0;background:none;color:var(--c-brand-primary);font:800 var(--text-caption)/1 var(--font-family);cursor:pointer}
.rv-disclose em{font-style:normal}
.rv-insights{margin-top:var(--space-lg);padding:var(--space-lg)}
.rv-insights h3{margin:0 0 var(--space-md);font-size:var(--text-title3)}
.rv-insights h5{margin:var(--space-md) 0 2px;font-size:10px;font-weight:800;letter-spacing:.5px;color:var(--c-text-secondary)}
.rv-insights>p{margin:0 0 var(--space-sm);font-size:var(--text-caption);color:var(--c-text-tertiary)}
.rv-insight-row{display:flex;align-items:center;gap:var(--space-md);min-height:28px;font-size:var(--text-caption)}
.rv-insight-row>span{min-width:64px;color:var(--c-text-secondary)}
.rv-insight-row>b{font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.rv-insight-row>em{margin-left:auto;color:var(--c-text-tertiary);font-style:normal;font-variant-numeric:tabular-nums}
.rv-insight-bar{flex:1;height:6px;border-radius:var(--radius-pill);background:var(--c-input-fill);overflow:hidden}
.rv-insight-bar b{display:block;height:100%;background:var(--c-warning)}
/* ReviewFormSheet's dialog face: the promise line and the Manual entry pill. */
.rf-promise{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}
.rf-promise p{margin:0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.rf-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--radius-pill);background:var(--c-input-fill);color:var(--c-text-tertiary);font-size:10px;font-weight:700;white-space:nowrap}
.rf-anon{margin-left:var(--space-sm);border:0;background:none;color:var(--c-brand-primary);font:700 10px/1 var(--font-family);cursor:pointer}
/* ReviewRequestSheet's dialog face: subtitle, timing callout and the blocker line. */
.rq-subtitle{margin:0 0 var(--space-md);font-size:var(--text-footnote);color:var(--c-text-secondary)}
.rq-callout{display:flex;flex-direction:column;gap:2px;margin-bottom:var(--space-md);padding:var(--space-md);border-radius:var(--radius-md);background:var(--c-brand-tint)}
.rq-callout strong{font-size:var(--text-footnote);color:var(--c-text-primary)}
.rq-callout span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.rq-blocker{display:flex;align-items:center;gap:5px;margin-top:var(--space-sm);color:var(--c-warning);font-size:var(--text-caption2);font-weight:600}
.rq-blocker[hidden]{display:none}
.rq-blocker::before{content:"!";display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:var(--c-warning);color:var(--c-on-brand);font-size:9px;font-weight:800}


/* ── Mileage ────────────────────────────────────────────────────────────────
   `MileageTrackingView` and `MileageEntryFormSheet`, on the web. Scoped `.mi-*`, so nothing here
   reaches another destination. The shapes that needed their own rules are the ones the shared
   register grammar has no word for: the two-column TAX DEDUCTION card, the BY PURPOSE bars, the
   coaching lines the app draws in three different places under three different conditions, the
   THIS MONTH / PREVIOUS rule, and the form's seven labelled cards. */

/* The tax card. Two columns because the app's is two: the all-time total on the left with its
   caption under it, and this month plus the rate that produced it on the right. */
.mi-ded{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-lg);margin-bottom:var(--space-sm);padding:var(--space-lg);border:1px solid color-mix(in srgb,var(--c-brand-primary) 20%,transparent);border-radius:var(--radius-xl);background:var(--c-card-background)}
.mi-ded__left{display:grid;gap:var(--space-xs)}
.mi-ded__right{display:grid;justify-items:end;gap:var(--space-xs);text-align:right}
.mi-ded__kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-brand-primary)}
.mi-ded__total{font-size:22px;font-weight:760;font-variant-numeric:tabular-nums;color:var(--c-brand-primary)}
.mi-ded__month{font-size:var(--text-subhead);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-warning)}
.mi-ded__caption{font-size:var(--text-caption);color:var(--c-text-secondary)}
.mi-ded__rate{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}

/* The coaching lines. THREE of them, on three independent conditions, so they stack rather than
   replace one another — a book of three address-less trips draws all three at once, which is what
   the app does and why this is a repeating row and not a slot. */
.mi-coach{padding:2px var(--space-lg) var(--space-xs);color:var(--c-text-tertiary);font-size:var(--text-caption);line-height:1.45}

/* BY PURPOSE. Longest bar first, and it disappears entirely while a search is running — the app
   hides it on `searchText.isEmpty`, because a breakdown of the whole book over a narrowed list
   would be two answers to one question. */
.mi-breakdown{margin-bottom:var(--space-md);padding:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.mi-breakdown__kicker{margin-bottom:var(--space-sm-md);font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-secondary)}
.mi-bar{display:flex;align-items:center;gap:var(--space-sm);padding:3px 0}
.mi-bar__label{flex:0 0 92px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-caption)}
.mi-bar__track{flex:1 1 auto;height:14px;border-radius:3px;background:var(--c-field-fill)}
.mi-bar__track i{display:block;height:100%;border-radius:3px;opacity:.6}
.mi-bar__value{flex:0 0 54px;text-align:right;font-size:var(--text-caption2);font-variant-numeric:tabular-nums}

/* The counted chip row. The counts are the WHOLE book's, matching the app; see the view header. */
.mi-chips{display:flex;align-items:center;gap:var(--space-xs);max-width:100%;overflow-x:auto;scrollbar-width:none}
.mi-chips::-webkit-scrollbar{display:none}
.mi-chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:34px;padding:0 var(--space-md);border:1px solid transparent;border-radius:var(--radius-pill);background:var(--c-field-fill);color:var(--c-text-secondary);font:600 var(--text-caption)/1 var(--font-family);white-space:nowrap;cursor:pointer}
.mi-chip span{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;opacity:.7}
.mi-chip--active{border-color:color-mix(in srgb,var(--c-brand-primary) 22%,transparent);background:var(--c-brand-tint);color:var(--c-brand-pressed)}

/* One control for the direction, and it names the CURRENT direction rather than offering both —
   the app's single Button reads "Descending" on the row you first meet, because that is the state
   and not the action. A two-option segment would show both words and mean something else. */
.mi-sort{display:flex;align-items:center;gap:var(--space-xs)}
.mi-sort select{min-height:34px;padding:0 var(--space-sm);border:1px solid var(--c-input-border);border-radius:var(--radius-base);background:var(--c-input-fill);color:var(--c-text-secondary);font:600 var(--text-caption)/1 var(--font-family)}

/* THIS MONTH / PREVIOUS. A header with the group's own mileage beside it and a rule running out to
   the edge, which is how the app draws the split — and it collapses to one flat list the moment a
   purpose filter is on. */
.mi-timehead{display:flex;align-items:center;gap:var(--space-sm);margin:var(--space-md) 0 var(--space-xs)}
.mi-timehead b{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-secondary)}
.mi-timehead span{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.mi-timehead::after{content:"";flex:1;height:1px;background:var(--c-separator)}

.mi-row{cursor:pointer}
/* The purpose colour, as the app's leading accent rather than as a coloured word. */
.mi-accent{display:inline-block;width:3px;height:12px;margin-right:8px;border-radius:2px;vertical-align:-1px}
.mi-round{display:inline-flex;align-items:center;padding:1px 5px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--c-info) 12%,transparent);color:var(--c-info);font-size:9px;font-weight:700}

/* The compact face — a different row, not a squeezed table. */
.mi-compact{display:none}
.mi-crow{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-md);border-bottom:1px solid var(--c-separator)}
.mi-crow:last-child{border-bottom:0}
.mi-crow__body{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}
.mi-crow__title{display:flex;align-items:center;gap:var(--space-xs);overflow:hidden;font-size:var(--text-subhead);font-weight:600;white-space:nowrap}
.mi-crow__title b{margin-left:auto;color:var(--c-info);font-variant-numeric:tabular-nums}
.mi-crow__sub{display:flex;gap:var(--space-xs);overflow:hidden;color:var(--c-text-secondary);font-size:var(--text-caption);white-space:nowrap}
.mi-crow__sub em{margin-left:auto;color:var(--c-text-tertiary);font-style:normal}
@media (max-width:700px){
  .mi-table{display:none}
  .mi-compact{display:block}
}

/* The app's no-results face is a line with no verb: a filter that matched nothing is not an empty
   book, and offering "Log Trip" there answers a question nobody asked. */
.mi-noresults{padding:40px var(--space-lg);color:var(--c-text-secondary);font-size:var(--text-subhead);font-weight:600;text-align:center}
/* The empty state's description carries an AUTHORED line break, not a wrap. */
#mi-list .empty-state__sub{white-space:pre-line}

.mi-ctx{position:fixed;right:auto;top:auto;box-shadow:0 10px 28px rgb(0 0 0 / 16%)}

/* ── The trip form ──────────────────────────────────────────────────────────
   Seven labelled cards in the app's order — ROUTE, DISTANCE, PURPOSE, JOB / CUSTOMER, DATE,
   MILEAGE RATE, Notes — rather than one flat grid of nine inputs. The labels are the app's own
   section labels and they are what make the form readable as a trip rather than as a record. */
.mi-form{display:grid;gap:var(--space-md)}
.mi-card{display:grid;gap:var(--space-sm);padding:var(--space-lg);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background)}
.mi-card__kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-secondary)}
.mi-card input,.mi-card select,.mi-card textarea{width:100%;padding:9px var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-base);background:var(--c-input-fill);color:var(--c-text-primary);font:400 var(--text-subhead)/1.4 var(--font-family)}
.mi-toggle{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--text-subhead)}
.mi-toggle input{width:auto}
.mi-inline{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);font-size:var(--text-subhead)}
.mi-inline input{max-width:200px}
.mi-hint{margin:0;color:var(--c-text-tertiary);font-size:var(--text-caption);line-height:1.45}
.mi-distance{display:flex;align-items:center;gap:var(--space-sm)}
.mi-distance input{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.mi-distance span{flex:0 0 auto;color:var(--c-text-secondary);font-size:var(--text-subhead)}
/* The live preview exists only once a positive distance is typed, and the doubled TOTAL only on a
   round trip — two conditions, not one. */
.mi-live{margin:0;min-height:16px;color:var(--c-brand-primary);font-size:var(--text-caption);font-variant-numeric:tabular-nums;white-space:pre}
.mi-rate{display:flex;align-items:center;gap:var(--space-xs)}
.mi-rate span{color:var(--c-text-secondary);font-size:var(--text-caption)}
.mi-purpose{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-sm)}
.mi-purpose__chip{padding:var(--space-sm) var(--space-xs);border:1px solid var(--c-input-border);border-radius:var(--radius-md);background:var(--c-input-fill);color:var(--c-text-secondary);font:600 var(--text-caption2)/1.2 var(--font-family);cursor:pointer}
.mi-purpose__chip--on{border-width:1.5px;border-color:var(--mi-tint,var(--c-brand-primary));background:color-mix(in srgb,var(--mi-tint,var(--c-brand-primary)) 15%,transparent);color:var(--mi-tint,var(--c-brand-primary))}
@media (max-width:560px){.mi-purpose{grid-template-columns:repeat(2,1fr)}}
/* The refusal that IS reachable. A greyed Save still answers when it is pressed — the app gives its
   header `allowsTapWhenDisabled: true` for exactly this, so the sentence has somewhere to land. */
.mi-banner{margin:0;padding:var(--space-sm) var(--space-sm-md);border-radius:var(--radius-base);background:var(--c-danger-tint);color:var(--c-danger);font-size:var(--text-caption);font-weight:600}
.btn.is-quiet{opacity:.55}

/* ── Follow-ups (the Pipeline hub's Call Sheet lens) ────────────────────────
   `FollowUpCenterView`'s own furniture on top of the `.pl-call*` grammar already in the hub: the
   automation banner, the render-time channel captions, the Book the Callback dialog and the
   playbook sheet. Scoped `.fu-*`. */

/* Drawn only while automatic follow-ups are OFF, because that is the state it explains. Amber
   rather than red: nothing is broken, a setting is off and the queue is longer for it. */
.fu-auto{display:flex;align-items:center;gap:var(--space-md);margin:var(--space-sm) 0 var(--space-md);padding:var(--space-sm-md) var(--space-md);border:1px solid color-mix(in srgb,var(--c-warning) 30%,transparent);border-radius:var(--radius-card);background:var(--c-warning-tint)}
.fu-auto__text{flex:1;font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary)}

/* The channel captions. Three sentences, three answers — STOP leaves email and the phone open, so
   it reads differently from a missing number. */
.fu-channel{margin:0 0 var(--space-sm);color:var(--c-text-tertiary);font-size:var(--text-caption)}
.fu-channel--stop{color:var(--c-warning)}

.fu-book__why{margin:0 0 var(--space-md);color:var(--c-text-secondary);font-size:var(--text-subhead);line-height:1.5}
.fu-book__field{display:grid;gap:var(--space-xs);font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary)}
.fu-book__field input{padding:9px var(--space-sm-md);border:1px solid var(--c-input-border);border-radius:var(--radius-base);background:var(--c-input-fill);color:var(--c-text-primary);font:400 var(--text-subhead)/1.4 var(--font-family)}

/* ── The playbook sheet ─────────────────────────────────────────────────────
   Five cadences, each showing the ladder it will schedule. The steps are drawn rather than
   summarised because "5 steps" and "five emails over a month" are different promises. */
.fu-pb{display:grid;gap:var(--space-sm)}
.fu-pb__kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;color:var(--c-text-secondary)}
.fu-pb__row{border:1px solid var(--c-card-border);border-radius:var(--radius-card);overflow:hidden}
.fu-pb__row--on{border-color:var(--fu-tint,var(--c-brand-primary));box-shadow:inset 3px 0 0 var(--fu-tint,var(--c-brand-primary))}
.fu-pb__pick{display:grid;grid-template-columns:1fr auto;gap:2px var(--space-md);width:100%;padding:var(--space-md);border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}
.fu-pb__name{font-size:var(--text-subhead);font-weight:650;color:var(--c-text-primary)}
.fu-pb__desc{grid-column:1;color:var(--c-text-secondary);font-size:var(--text-caption)}
.fu-pb__count{grid-row:1/3;align-self:center;color:var(--c-text-tertiary);font-size:var(--text-caption);white-space:nowrap}
.fu-pb__steps{margin:0;padding:0 var(--space-md) var(--space-md);list-style:none}
.fu-pb__row--on .fu-pb__steps{border-top:1px solid var(--c-separator);padding-top:var(--space-sm)}
.fu-pb__step{display:flex;align-items:baseline;gap:var(--space-sm);padding:3px 0}
.fu-pb__when{flex:0 0 54px;color:var(--fu-tint,var(--c-text-tertiary));font-size:var(--text-caption2);font-weight:700}
.fu-pb__type{flex:0 0 14px;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.fu-pb__what{display:grid;gap:1px;min-width:0}
.fu-pb__what strong{font-size:var(--text-caption);font-weight:600;color:var(--c-text-primary)}
.fu-pb__what small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
/* The steps of an unselected cadence are still readable, just quieter — the list is a comparison. */
.fu-pb__row:not(.fu-pb__row--on) .fu-pb__steps{display:none}
.fu-pb__note{margin:var(--space-sm) 0 0;padding:var(--space-sm) var(--space-sm-md);border-radius:var(--radius-base);background:var(--c-danger-tint);color:var(--c-danger);font-size:var(--text-caption);font-weight:600}

/* ── Service — the close dialog's unbilled interception ─────────────────────
   Billable work about to close with nothing billed. The SENTENCE and the escape hatch are one
   surface: the button without the sentence is a control with no reason, and the sentence without
   the button is a warning with no answer. */
.sv-unbilled{display:grid;gap:var(--space-xs);margin-top:var(--space-md);padding:var(--space-sm-md);border-radius:var(--radius-base);background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption);line-height:1.45}
.sv-unbilled__verb{justify-self:start;padding:0;border:0;background:transparent;color:var(--c-brand-primary);font:700 var(--text-caption)/1.4 var(--font-family);cursor:pointer}

/* ── DASHBOARD ──────────────────────────────────────────────────────────────
   The business overview. Catalyst has the page and no door to it; the owner ruled the web builds
   both. Layout follows `BusinessDashboardView.body`'s two branches: one column when compact, and a
   main stream plus a 340pt rail when not. MONEY THIS MONTH is in BOTH branches — its grid is
   mounted twice in the source — while DOCUMENT OVERVIEW is compact-only. */
.dsh-head{margin-bottom:var(--space-lg)}
.dsh-head h1{font-size:var(--text-title2);font-weight:700;color:var(--c-text-primary);margin:0}
.dsh-head p{font-size:var(--text-subhead);color:var(--c-text-secondary);margin:2px 0 0}
.dsh-two{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:var(--space-xl);align-items:start}
.dsh-col{display:grid;gap:var(--space-xl);min-width:0}
.dsh-rail{display:grid;gap:var(--space-xl);position:sticky;top:84px}
@media (max-width:1100px){.dsh-two{grid-template-columns:minmax(0,1fr)}.dsh-rail{position:static}}

.dsh-label{display:grid;gap:2px}
.dsh-label>span{font-size:var(--text-caption2);font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:var(--c-text-tertiary)}
.dsh-label>small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsh-viewall{padding:0;border:0;background:none;color:var(--c-brand-primary);font:700 var(--text-caption)/1.4 var(--font-family);cursor:pointer}

/* The welcome panel REPLACES every card on an account with no customers, invoices or proposals. */
.dsh-welcome{padding:var(--space-xxl);text-align:center}
.dsh-welcome h1{font-size:var(--text-title3);font-weight:700;margin:0 0 var(--space-xs)}
.dsh-welcome p{font-size:var(--text-subhead);color:var(--c-text-secondary);margin:0 0 var(--space-lg)}
.dsh-welcome__steps{display:grid;gap:var(--space-sm);max-width:460px;margin:0 auto;text-align:left}
.dsh-step{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-base);background:var(--c-card-background);cursor:pointer;font-family:inherit}
.dsh-step:hover{background:var(--c-field-fill)}
.dsh-step__n{width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:var(--c-brand-primary);color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:700}
.dsh-step strong{display:block;font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary)}
.dsh-step small{display:block;font-size:var(--text-caption);color:var(--c-text-secondary)}

.dsh-quick{display:grid;gap:var(--space-sm)}
.dsh-quick__tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-sm)}
.dsh-tile{padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-base);background:var(--c-card-background);font:600 var(--text-footnote)/1.3 var(--font-family);color:var(--c-text-primary);cursor:pointer}
.dsh-tile:hover{background:var(--c-field-fill)}
.dsh-tile--sm{padding:var(--space-sm-md);font-size:var(--text-caption)}
.dsh-quick__secondary{display:flex;flex-wrap:wrap;gap:var(--space-md)}
.dsh-link{padding:0;border:0;background:none;color:var(--c-brand-primary);font:600 var(--text-caption)/1.4 var(--font-family);cursor:pointer}

/* The one-line morning briefing — absent entirely when every part is zero. */
.dsh-briefing{display:flex;align-items:center;gap:var(--space-sm);margin:0 0 var(--space-lg);padding:var(--space-md);border:1px solid var(--c-warning);border-radius:var(--radius-card);background:var(--c-warning-tint);font-size:var(--text-subhead);font-weight:500;color:var(--c-text-primary)}

.dsh-needs{padding:var(--space-lg);position:relative}
.dsh-needs__count{position:absolute;top:var(--space-lg);right:var(--space-lg);padding:1px 8px;border-radius:999px;background:var(--c-field-fill);font-size:var(--text-caption2);font-weight:700;color:var(--c-text-secondary)}
.dsh-needs__rows{display:grid;gap:var(--space-xs);margin-top:var(--space-md)}
.dsh-need{display:flex;align-items:center;gap:var(--space-md);width:100%;padding:var(--space-sm-md);border:0;border-left:3px solid var(--c-text-tertiary);border-radius:var(--radius-base);background:var(--c-field-fill);text-align:left;cursor:pointer;font-family:inherit}
.dsh-need:hover{filter:brightness(.98)}
.dsh-need--danger{border-left-color:var(--c-danger)}
.dsh-need--orange{border-left-color:var(--c-accent-orange)}
.dsh-need--purple{border-left-color:var(--c-accent-purple)}
.dsh-need--brand{border-left-color:var(--c-brand-primary)}
.dsh-need--info{border-left-color:var(--c-accent-blue)}
.dsh-need--pink{border-left-color:var(--c-accent-pink)}
.dsh-need--teal{border-left-color:var(--c-accent-teal)}
.dsh-need--indigo{border-left-color:var(--c-accent-indigo)}
.dsh-need__copy{flex:1;min-width:0}
.dsh-need__copy strong{display:block;font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary)}
.dsh-need__copy small{display:block;font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsh-need__cta{font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary)}
.dsh-empty{margin-top:var(--space-md);text-align:center}
.dsh-empty strong{display:block;font-size:var(--text-footnote);color:var(--c-text-primary)}
.dsh-empty small{font-size:var(--text-caption);color:var(--c-text-secondary)}

.dsh-pipeline{padding:var(--space-lg)}
.dsh-pipeline header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}
.dsh-pipeline__row{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:var(--space-md);margin-top:var(--space-md)}
.dsh-winrate small,.dsh-stage small{display:block;font-size:var(--text-caption2);letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary)}
.dsh-winrate strong,.dsh-stage strong{display:block;font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.dsh-stage span{font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.dsh-stage.is-quiet{opacity:.5}
.dsh-stage--info strong{color:var(--c-accent-blue)}
.dsh-stage--warning strong{color:var(--c-warning)}
.dsh-stage--brand strong{color:var(--c-brand-primary)}
.dsh-stage--success strong{color:var(--c-brand-primary)}

.dsh-money{display:grid;gap:var(--space-sm-md)}
.dsh-money__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--space-md)}
.dsh-kpi{display:grid;gap:var(--space-sm);padding:var(--space-md-lg);min-height:76px;text-align:left;border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);cursor:pointer;font-family:inherit}
/* SHOWN AND NARROWED, not hidden: the Overdue tile is always drawn and simply cannot be pressed
   when nothing is late (`.disabled(action == nil)`), reading "All clear — no late invoices". */
.dsh-kpi[disabled]{cursor:default;opacity:1}
.dsh-kpi__head{display:flex;align-items:center;gap:var(--space-xs)}
.dsh-kpi__label{flex:1;font-size:var(--text-subhead);font-weight:500;color:var(--c-text-secondary)}
.dsh-kpi__trend{font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary)}
.dsh-kpi__trend.is-down{color:var(--c-danger)}
.dsh-kpi__value{font-size:var(--text-title2);font-weight:800;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.dsh-kpi__value.is-attention{color:var(--c-danger)}
.dsh-kpi__coach{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsh-kpi__coach.is-action{color:var(--c-brand-primary)}
.dsh-kpi--quiet .dsh-kpi__value{color:var(--c-text-tertiary)}

.dsh-docs,.dsh-list,.dsh-chart,.dsh-pl,.dsh-aging,.dsh-feed,.dsh-integrations,.dsh-rail-card{padding:var(--space-lg)}
.dsh-doc{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);margin-top:var(--space-md)}
.dsh-doc strong{font-size:var(--text-footnote);font-weight:600}
.dsh-doc span{display:flex;gap:var(--space-sm);font-size:var(--text-caption)}
.dsh-doc b{font-weight:600;color:var(--c-text-secondary)}
.dsh-doc b.is-pending{color:var(--c-warning)}
.dsh-doc b.is-approved{color:var(--c-brand-primary)}

.dsh-list header,.dsh-aging header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-sm)}
.dsh-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);padding:var(--space-xs) 0;border-bottom:1px solid var(--c-separator)}
.dsh-row:last-of-type{border-bottom:0}
.dsh-row strong{font-size:var(--text-footnote);font-weight:600}
.dsh-row small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsh-more{margin:var(--space-xs) 0 0;font-size:var(--text-caption);color:var(--c-text-tertiary)}

.dsh-fin-toggle{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) 0;border:0;background:none;color:var(--c-text-secondary);font:700 var(--text-caption)/1.4 var(--font-family);cursor:pointer}
.dsh-bars{display:flex;align-items:flex-end;gap:var(--space-sm);height:120px;margin-top:var(--space-md)}
.dsh-bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;gap:2px}
.dsh-bar i{display:block;width:100%;border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:var(--c-brand-primary)}
.dsh-bar small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsh-bar b{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}

.dsh-pl__row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-top:var(--space-sm-md)}
.dsh-pl__row strong{display:block;font-size:var(--text-title3);font-weight:700;color:var(--c-brand-primary)}
.dsh-pl.is-loss .dsh-pl__row strong{color:var(--c-danger)}
.dsh-pl__row small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsh-pl__margin{text-align:right}
.dsh-pl__legend{display:flex;gap:var(--space-md);margin-top:var(--space-sm);font-size:var(--text-caption);color:var(--c-text-tertiary)}

.dsh-aging__row{display:grid;grid-template-columns:70px minmax(0,1fr) 90px;align-items:center;gap:var(--space-sm-md);margin-top:var(--space-sm)}
.dsh-aging__row>small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsh-aging__row i{display:block;height:18px;border-radius:var(--radius-sm);background:var(--c-field-fill)}
.dsh-aging__row i span{display:block;height:100%;min-width:4px;border-radius:var(--radius-sm);background:var(--c-warning)}
.dsh-aging.is-overdue .dsh-aging__row i span{background:var(--c-danger)}
.dsh-aging__amt{text-align:right}
.dsh-aging__amt b{display:block;font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums}
.dsh-aging__amt small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

.dsh-feed__rows{display:grid;gap:var(--space-xs);margin-top:var(--space-md)}
.dsh-feed__row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--space-md);padding:var(--space-xs) 0;border-bottom:1px solid var(--c-separator)}
.dsh-feed__row:last-child{border-bottom:0}
.dsh-feed__row strong{display:block;font-size:var(--text-footnote);font-weight:600}
.dsh-feed__row small{display:block;font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsh-feed__when{font-size:var(--text-caption2);color:var(--c-text-tertiary);white-space:nowrap}
.dsh-feed__cta{padding:2px 8px;border:1px solid var(--c-card-border);border-radius:999px;background:none;color:var(--c-brand-primary);font:700 var(--text-caption2)/1.4 var(--font-family);cursor:pointer}
.dsh-feed__cta.is-none{border-color:transparent;min-width:44px}

.dsh-integration{display:flex;align-items:center;gap:var(--space-md);width:100%;margin-top:var(--space-md);padding:var(--space-sm-md);border:1px solid var(--c-warning);border-radius:var(--radius-base);background:var(--c-warning-tint);text-align:left;cursor:pointer;font-family:inherit}
.dsh-integration span{flex:1}
.dsh-integration strong{display:block;font-size:var(--text-footnote);font-weight:600}
.dsh-integration small{display:block;font-size:var(--text-caption);color:var(--c-warning)}

.dsh-rail-stats{display:flex;gap:var(--space-md);margin-top:var(--space-md)}
.dsh-rail-stats strong{display:block;font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums}
.dsh-rail-stats small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.dsh-rail-open{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--c-separator);font-size:var(--text-caption)}
.dsh-rail-open b{font-weight:700;font-variant-numeric:tabular-nums}
.dsh-rail-creates{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-top:var(--space-md)}
.dsh-rail-creates .dsh-tile--sm:first-child{grid-column:1 / -1}
.dsh-rail-week{display:block;width:100%;margin-top:var(--space-md);padding:var(--space-md);border:0;border-radius:var(--radius-base);background:var(--c-field-fill);text-align:left;cursor:pointer;font-family:inherit}
.dsh-rail-week strong{display:block;font-size:var(--text-title3);font-weight:700}
.dsh-rail-week small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.dsh-rail-empty{margin:var(--space-md) 0 0;font-size:var(--text-caption);color:var(--c-text-tertiary)}


/* ── Safety — the board by the door ─────────────────────────────────────────
   The number a shop paints on a sign: days without a recordable. It leads because it is the one
   fact everybody on site already knows, and the best streak sits beside it so a clean run has
   something to beat rather than only something to lose. */
.sf-hero{padding:var(--space-lg);border-radius:var(--radius-card);background:color-mix(in srgb,var(--c-brand-primary) 7%,transparent);border:1px solid color-mix(in srgb,var(--c-brand-primary) 25%,transparent);margin-bottom:var(--space-md)}
.sf-hero__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.sf-hero__days{font-size:44px;font-weight:700;line-height:1;color:var(--c-brand-primary);font-variant-numeric:tabular-nums}
.sf-hero__best{display:grid;justify-items:end;gap:1px}
.sf-hero__best-label{font-size:9px;color:var(--c-text-tertiary)}
.sf-hero__best-value{font-size:var(--text-subhead);font-weight:600;color:var(--c-accent-teal,var(--c-brand-primary));font-variant-numeric:tabular-nums}
.sf-hero__headline{margin-top:2px;font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.sf-hero__context{font-size:var(--text-caption);color:var(--c-text-secondary)}

/* The severity ladder. Three rungs, and the note under them is the argument for using the
   cheapest one: a near miss reported costs nothing and is the only incident you get for free. */
.sf-ladder{padding:var(--space-lg);border-radius:var(--radius-card);border:1px solid var(--c-card-border);margin-bottom:var(--space-md)}
.sf-ladder__head{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary)}
.sf-ladder__rungs{display:flex;gap:var(--space-sm);margin-top:var(--space-sm);flex-wrap:wrap}
.sf-rung{flex:1 1 140px;display:grid;gap:2px;padding:var(--space-sm-md);border-radius:var(--radius-base);border:1px solid var(--sf-rung-colour);background:transparent;text-align:left;cursor:pointer}
.sf-rung__title{font-size:var(--text-caption);font-weight:700;color:var(--sf-rung-colour)}
.sf-rung__detail{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.sf-ladder__note{margin:var(--space-sm) 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary);line-height:1.45}

/* What protects the streak — three signals, each stating its own consequence rather than a count
   the reader has to interpret. */
.sf-protect-head{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-accent-teal,var(--c-text-secondary));margin:var(--space-md) 0 var(--space-xs)}
.sf-protect{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-md)}
.sf-signal{flex:1 1 200px;display:grid;gap:2px;align-content:start;padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border)}
.sf-signal__title{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.sf-signal__value{font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.sf-signal--warn .sf-signal__value{color:var(--c-warning)}
.sf-signal--ok .sf-signal__value{color:var(--c-brand-primary)}
.sf-signal__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary);line-height:1.4}
/* 23px: the 3px padding and a 1.4 line-height on caption2 land just under. */
.sf-signal__pill{display:inline-flex;align-items:center;min-height:24px;justify-self:start;margin-top:var(--space-xs);padding:3px 10px;border-radius:999px;border:1px solid var(--c-card-border);background:var(--c-card-background);color:var(--c-text-secondary);font:700 var(--text-caption2)/1.4 var(--font-family);cursor:pointer}

/* Unresolved and critical. A banner rather than a row, because the answer is to go and do
   something today and a row in a sorted table can be scrolled past. */
.sf-critical{display:grid;gap:2px;padding:var(--space-sm-md);border-radius:var(--radius-base);background:var(--c-danger-tint);margin-bottom:var(--space-sm)}
.sf-critical__title{font-size:var(--text-caption);font-weight:700;color:var(--c-danger)}
.sf-critical__detail{font-size:var(--text-caption2);color:var(--c-danger)}

/* The log's own header, so the count of what is shown never has to be inferred from the rows. */
.sf-log-head{display:flex;align-items:baseline;gap:var(--space-sm);padding:var(--space-sm) var(--space-sm-md);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary);border-bottom:1px solid var(--c-separator)}
.sf-log-head__count{color:var(--c-text-primary)}
.sf-log-head__totals{margin-left:auto;text-transform:none;letter-spacing:0;font-weight:500;color:var(--c-text-tertiary)}

/* The row's second line. "fix open: …" is not the same fact as "12d open" and must not look like
   it — one says somebody is on it, the other says nobody is. */
.sf-story{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.sf-story--stale{color:var(--c-danger);font-weight:600}

/* OSHA, demystified — the panel that answers "do I even have to post this?" in one line. */
.sf-osha{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);margin-top:var(--space-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border)}
.sf-osha__title{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.sf-osha__detail{font-size:var(--text-caption2);color:var(--c-text-tertiary);line-height:1.45}
.sf-osha button{margin-left:auto;flex:0 0 auto}

/* ── Purchase orders — the register's own controls ──────────────────────────
   A chip per status that HAS orders, and none for a status that does not: a filter which can only
   return an empty register is a control that wastes a click to say nothing. The count rides the
   chip so the size of each bucket is legible before choosing it. */
.po-chips{display:flex;gap:var(--space-xs);flex-wrap:wrap;margin-bottom:var(--space-sm)}
.po-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;border:1px solid var(--c-card-border);background:transparent;color:var(--c-text-secondary);font:600 var(--text-caption)/1.4 var(--font-family);cursor:pointer}
.po-chip span{color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.po-chip--on{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.po-chip--on span{color:var(--c-brand-primary)}
/* An order whose cost will not reach a job. Said on the row, because a blank cell reads as "not
   filled in yet" and this is the way a job's committed cost quietly goes missing. */
.po-nojob{font-size:var(--text-caption2);color:var(--c-warning)}

/* ── Vendors & Subs — the two tabs the section's own copy promises ──────────
   The help text and the locked upsell both name a Vendors tab and a Subcontractors tab. The page
   had one register, so half the section's name pointed at nothing. */
.vn-tabs{display:flex;gap:var(--space-xs);margin-bottom:var(--space-md);border-bottom:1px solid var(--c-separator)}
.vn-tab{padding:8px 14px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--c-text-secondary);font:600 var(--text-subhead)/1.4 var(--font-family);cursor:pointer}
.vn-tab--on{color:var(--c-text-primary);border-bottom-color:var(--c-brand-primary)}
/* One line of advice at a time, and only while it is actionable. */
.vendor-coach{align-items:flex-start;text-align:left;color:var(--c-text-secondary)}
.vn-preferred{padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);margin-bottom:var(--space-sm)}
.vn-preferred__head{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-warning)}
.vn-preferred__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.vn-preferred__row{display:flex;gap:var(--space-xs);flex-wrap:wrap;margin-top:var(--space-xs)}
.vn-pref{padding:4px 11px;border-radius:999px;border:1px solid var(--c-warning);background:transparent;color:var(--c-warning);font:600 var(--text-caption)/1.4 var(--font-family);cursor:pointer}
/* "No contact on file" and "No orders yet" are FACTS, not missing data — an em dash in a row whose
   other cells are full reads as a load that has not finished. */
.vn-nocontact{color:var(--c-text-tertiary)}
.vn-subs-band{display:flex;gap:var(--space-md);flex-wrap:wrap;padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);margin-bottom:var(--space-md)}
.vn-subs-band > div{display:grid;gap:1px;min-width:110px}
.vn-subs-band span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.vn-subs-band strong{font-size:var(--text-subhead);font-variant-numeric:tabular-nums}
.vn-warn{color:var(--c-warning)}

/* ── Lien waivers — protect the payment before it leaves ────────────────────
   The intro states the argument for the page rather than titling it: a waiver collected before the
   money goes is protection, and one asked for afterwards is a favour. */
.lw-intro{display:grid;gap:2px;margin-bottom:var(--space-md)}
.lw-intro strong{font-size:var(--text-subhead)}
.lw-intro span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.lw-signals{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-md)}
.lw-signal{flex:1 1 150px;display:grid;gap:1px;padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border)}
.lw-signal span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.lw-signal strong{font-size:var(--text-subhead);font-variant-numeric:tabular-nums}
.lw-signal small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.lw-signal--risk strong{color:var(--c-danger)}
.lw-signal--warn strong{color:var(--c-warning)}
/* NEXT TO PROTECT. The numeral marks position; the BUTTON marks urgency, and the two are allowed
   to disagree — a conditional release ranked third is still the one to chase first. */
.lw-protect{padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);margin-bottom:var(--space-md)}
.lw-protect__head{display:flex;align-items:baseline;gap:var(--space-sm);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary);margin-bottom:var(--space-xs)}
.lw-protect__head span{text-transform:none;letter-spacing:0;font-weight:500;color:var(--c-text-tertiary)}
.lw-protect__row{display:flex;align-items:center;gap:var(--space-sm);padding:6px 0;border-bottom:1px solid var(--c-separator)}
.lw-protect__row:last-child{border-bottom:0}
.lw-rank{flex:0 0 20px;height:20px;display:grid;place-items:center;border-radius:999px;background:var(--c-field-fill);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700}
.lw-rank--lead{background:var(--c-brand-primary);color:var(--c-on-brand)}
.lw-protect__who{display:grid;gap:1px;min-width:0;flex:1}
.lw-protect__who strong{font-size:var(--text-subhead);font-variant-numeric:tabular-nums}
.lw-protect__who small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.lw-next{padding:4px 12px;border-radius:999px;border:1px solid var(--c-brand-primary);background:transparent;color:var(--c-brand-primary);font:700 var(--text-caption)/1.4 var(--font-family);cursor:pointer;white-space:nowrap}
.lw-next--filled{background:var(--c-brand-primary);color:var(--c-on-brand)}
.lw-register-head{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary);margin-bottom:var(--space-xs)}
/* A pending waiver with nothing entered. The words, not an em dash: the figure is what the waiver
   is protecting, and a record with none protects an unknown amount. */
.lw-amount-missing{color:var(--c-warning);font-weight:600}
/* The caption under the figure, not in place of it — `lienWaivers LW-F5`. Catalyst stacks
   `No amount set` beneath the amount in the same warning ink (LienWaiverListView.swift:318-321). */
.lw-amount-missing__note{font-size:11px;font-weight:500;color:var(--c-warning)}

/* ── Appointments — the visits, not the week they sit in ────────────────────
   A show rate is a fact about a period, not about a day, which is why these cards cannot live on
   the calendar. "no visits held yet" is not 0%: a shop that has held none has no rate at all, and
   printing a zero would report the worst one. */
.ap-cards{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-xs)}
.ap-card{flex:1 1 150px;display:grid;gap:1px;padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border)}
.ap-card span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ap-card strong{font-size:var(--text-title3,20px);font-variant-numeric:tabular-nums}
.ap-card small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ap-next{margin:0 0 var(--space-md);font-size:var(--text-caption);color:var(--c-text-secondary)}
/* The day header inside the register. Grouping is what makes a list of visits readable as a diary
   rather than as rows that happen to be sorted. */
.ap-group td{padding:10px var(--space-sm-md) 4px;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-tertiary);background:transparent}
.ap-lane{display:inline-block;width:6px;height:6px;border-radius:999px;margin-right:6px;vertical-align:middle}
.ap-allday{color:var(--c-text-tertiary)}
/* THE DISPOSITION, on the row. In the app it is echoed on the editor's status card and nowhere
   else, so last week's outcomes could not be read without opening every visit in it. */
.ap-outcome-line{font-size:var(--text-caption2);color:var(--c-brand-primary)}
.ap-outcome-line--missing{color:var(--c-warning)}
.ap-outcomes{display:grid;gap:6px}
.ap-outcome{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--radius-base);border:1px solid var(--c-card-border);cursor:pointer;font-size:var(--text-subhead)}
.ap-outcome:has(input:checked){border-color:var(--c-brand-primary);background:var(--c-brand-tint)}

/* ── Field Logs — two faces behind one door ─────────────────────────────────
   `if canManageFinancials { FieldLogsHubView } else { FieldJobView }`. The hub is a three-lens
   analytics desk; the shell is an installer's list of their own jobs with four verbs on it. They
   share tokens and share almost no layout, which is the honest shape of a substitution gate. */

/* BizStatCard. The subtitle only exists at zero — it is the line that says WHY a figure reads
   nothing, and printing it beside a real number would turn coaching into noise. */
/* `--fl-accent` is set per element in a style attribute — a weather tone on a log row, the badge
   colour on a timeline row. Declared here so the token has a home in the stylesheet and an element
   that never gets one still paints something rather than nothing. */
.fl-card,.fl-row,.fl-weather__chip,.fl-verb{--fl-accent:var(--c-brand-primary)}
.fl-cards{display:flex;gap:var(--space-md);flex-wrap:wrap;margin:var(--space-md) 0}
.fl-card{flex:1 1 150px;display:grid;gap:2px;padding:var(--space-sm-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);border-top:2px solid var(--fl-accent,var(--c-brand-primary))}
.fl-card__title{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.fl-card__value{font-size:var(--text-title3,20px);font-weight:700;color:var(--fl-accent,var(--c-brand-primary));font-variant-numeric:tabular-nums}
.fl-card__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* The logged-today row is UNCONDITIONAL; only its face changes. Hiding it when today is unlogged
   would delete the nudge on precisely the day it is for. */
.fl-indicator{padding:var(--space-sm-md);border-radius:var(--radius-base);background:var(--c-field-fill);font-size:var(--text-caption);font-weight:600;color:var(--c-warning);margin-bottom:var(--space-md)}
.fl-indicator--ok{color:var(--c-accent-green,var(--c-success))}

.fl-photo-btn{display:flex;width:100%;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm-md);margin-bottom:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card);background:transparent;cursor:pointer;font-family:inherit;text-align:left}
.fl-photo-btn strong{display:block;font-size:var(--text-subhead);color:var(--c-text-primary)}
.fl-photo-btn small{display:block;font-size:var(--text-caption2);color:var(--c-text-secondary)}

/* The job chips are capped at eight, after a leading All. A business with more jobs than that
   cannot filter to the ninth — the app's cap, kept rather than quietly widened. */
.fl-chips{display:flex;gap:var(--space-xs);flex-wrap:wrap;margin-bottom:var(--space-sm)}
.fl-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;border:1px solid var(--c-card-border);background:transparent;color:var(--c-text-secondary);font:600 var(--text-caption)/1.4 var(--font-family);cursor:pointer}
.fl-chip span{color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.fl-chip--on{border-color:var(--c-brand-primary);background:var(--c-brand-tint);color:var(--c-brand-primary)}
.fl-search{margin-bottom:var(--space-md)}

.fl-panel{padding:var(--space-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);margin-bottom:var(--space-md)}
.fl-panel--warn{border-color:color-mix(in srgb,var(--c-accent-orange) 20%,transparent)}
.fl-panel__head{display:flex;justify-content:space-between;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary);margin-bottom:var(--space-sm)}
.fl-panel--warn .fl-panel__head{color:var(--c-warning)}
.fl-panel__head span{font-weight:500;letter-spacing:0;text-transform:none;color:var(--c-text-secondary)}
.fl-bar{display:grid;grid-template-columns:80px 1fr 44px;align-items:center;gap:var(--space-sm);font-size:var(--text-caption);padding:3px 0}
.fl-bar__track{display:block;height:14px;border-radius:3px;background:var(--c-field-fill);overflow:hidden}
.fl-bar__fill{display:block;height:100%;background:color-mix(in srgb,var(--c-accent-indigo) 60%,transparent)}
.fl-bar b{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.fl-issue{display:grid;grid-template-columns:90px 1fr;gap:var(--space-sm);padding:4px 0;border-bottom:1px solid var(--c-separator);font-size:var(--text-caption)}
.fl-issue:last-child{border-bottom:0}
.fl-issue span{color:var(--c-text-secondary)}
.fl-issue b{font-weight:500;color:var(--c-text-primary)}

/* The day header on the unified timeline — Today, Yesterday, then a date. */
.fl-day-head{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary);padding:var(--space-md) 0 var(--space-xs)}

.fl-cols{display:grid;gap:var(--space-sm);padding:6px var(--space-sm-md);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary)}
.fl-cols--log{grid-template-columns:1.2fr 1.4fr 70px 60px 110px 36px}
.fl-cols--time{grid-template-columns:1.4fr 110px 1.2fr 90px 100px 36px}
.fl-row{display:flex;align-items:center;gap:var(--space-sm);padding:9px var(--space-sm-md);border-bottom:1px solid var(--c-separator);cursor:pointer}
.fl-row--cols{display:grid;align-items:center}
.fl-row:hover{background:var(--c-field-fill)}
.fl-row.rec-row--open{background:var(--c-brand-tint)}
.fl-row__icon{flex:0 0 8px;height:8px;border-radius:999px;background:var(--fl-accent,var(--c-brand-primary))}
.fl-row__body{flex:1;display:grid;gap:1px;min-width:0}
.fl-row__body strong{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-row__body small{font-size:var(--text-caption2);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-row__badge{padding:2px 8px;border-radius:999px;font-size:9px;font-weight:700;color:var(--fl-accent);background:color-mix(in srgb,var(--fl-accent) 12%,transparent)}
.fl-row--cols > span{font-size:var(--text-subhead);color:var(--c-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-row__date{font-weight:600;color:var(--c-text-primary)}
.fl-row__menu{justify-self:end}
.fl-row__more{border:0;background:transparent;color:var(--c-text-tertiary);cursor:pointer;padding:2px;line-height:0}
/* "Unassigned" is a FACT, not a blank. An em dash beside full cells reads as a load that has not
   finished; the warning colour says the log is attached to nothing. */
.fl-warn{color:var(--c-warning)}
.fl-noresults{padding:30px 0;text-align:center;font-size:var(--text-subhead);color:var(--c-text-secondary)}

/* The BizEmptyState description carries a HARD line break inside the localized string — a \n, not
   a wrap — so a port that collapses whitespace loses the sentence's shape. */
.fl-empty{padding:40px var(--space-lg);text-align:center;display:grid;gap:var(--space-sm);justify-items:center}
.fl-empty__title{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.fl-empty__desc{margin:0;white-space:pre-line;font-size:var(--text-caption);color:var(--c-text-secondary);line-height:1.5}
.fl-empty__verbs{display:flex;gap:var(--space-sm)}

.fl-timer{padding:var(--space-lg);border-radius:var(--radius-card);border:1px solid color-mix(in srgb,var(--c-brand-primary) 30%,transparent);display:grid;gap:var(--space-sm);justify-items:center;margin-bottom:var(--space-md)}
.fl-timer__head{align-self:start;justify-self:start;font-size:10px;font-weight:700;letter-spacing:.04em;color:var(--c-brand-primary)}
.fl-timer__clock{font-size:48px;font-weight:700;font-variant-numeric:tabular-nums;font-family:var(--font-mono,ui-monospace,monospace);color:var(--c-text-primary);line-height:1}
.fl-timer__job{font-size:var(--text-subhead);color:var(--c-text-secondary)}
.fl-timer__cust{font-size:var(--text-caption);color:var(--c-text-secondary)}
.fl-timer__verbs,.fl-start__verbs{display:flex;gap:var(--space-md);width:100%}
.fl-timer__verbs .btn,.fl-start__verbs .btn{flex:1}
.fl-start{padding:var(--space-lg);border-radius:var(--radius-card);border:1px solid var(--c-card-border);display:grid;gap:var(--space-md);justify-items:center;margin-bottom:var(--space-md)}
.fl-start p{margin:0;font-size:var(--text-caption2);color:var(--c-text-tertiary);text-align:center}

/* The nudge fires when nothing was tracked TODAY and entries exist — not on a first run, where it
   would be scolding somebody for not having a history. */
.fl-nudge{padding:var(--space-sm-md);border-radius:var(--radius-base);background:var(--c-warning-tint);color:var(--c-text-tertiary);font-size:var(--text-caption2);margin-bottom:var(--space-md)}
.fl-legend{display:flex;gap:var(--space-lg);font-size:var(--text-caption2);color:var(--c-text-tertiary);margin-bottom:var(--space-sm)}
.fl-legend span::before{content:'';display:inline-block;width:6px;height:6px;border-radius:999px;margin-right:6px;background:var(--c-accent-gray)}
.fl-legend__billable::before{background:var(--c-brand-primary)!important}
.fl-legend__non::before{background:var(--c-accent-gray)}
.fl-band{display:flex;justify-content:space-between;align-items:baseline;padding:var(--space-md) var(--space-sm-md) var(--space-xs);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary)}
.fl-band b{font-variant-numeric:tabular-nums}

/* COMPACT IS A STATE, not a squeeze. Catalyst gates both column headers on `!isCompact` and swaps
   each row for a different label builder — `compactLogLabel` / `columnarLabel` — so a narrow window
   is not the wide one with the columns crushed. The header goes, and the row stacks its facts. */
@media (max-width:820px){
  .fl-cols{display:none}
  .fl-row--cols{grid-template-columns:1fr auto 36px;row-gap:2px}
  .fl-row--cols > span:nth-child(1){grid-column:1;font-weight:600;color:var(--c-text-primary)}
  .fl-row--cols > span:nth-child(2){grid-column:1;grid-row:2;font-size:var(--text-caption)}
  .fl-row--cols > span:nth-child(3){grid-column:2;grid-row:1;text-align:right}
  .fl-row--cols > span:nth-child(4),.fl-row--cols > span:nth-child(5){grid-column:2;grid-row:2;font-size:var(--text-caption2);text-align:right}
  .fl-row__menu{grid-column:3;grid-row:1 / span 2}
  .fl-weather{grid-template-columns:repeat(3,1fr)}
}

/* ── The forms ──────────────────────────────────────────────────────────── */
.fl-form{display:grid;gap:var(--space-md)}
.fl-form__card{padding:var(--space-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);display:grid;gap:var(--space-sm)}
.fl-form__label{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-secondary)}
.fl-form__label em{font-style:normal;font-weight:500;letter-spacing:0;text-transform:none;color:var(--c-text-tertiary);margin-left:6px;font-size:var(--text-caption2)}
.fl-form__req{color:var(--c-danger)!important}
.fl-form__hint{margin:0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.fl-form__labor{font-size:var(--text-caption);color:var(--c-text-secondary)}
.fl-form__duration{display:flex;justify-content:space-between;align-items:baseline;font-size:var(--text-subhead)}
/* `hidden` MUST MEAN HIDDEN. Both of these are toggled by the attribute — the estimated-amount row
   when there is no rate, the MORE DETAILS body when the disclosure is shut — and a plain `display`
   rule outranks the user agent's `[hidden]{display:none}`. */
.fl-form__duration[hidden]{display:none}
.fl-form__duration strong{color:var(--c-brand-primary);font-variant-numeric:tabular-nums}
.fl-toggle{display:flex;align-items:center;gap:8px;font-size:var(--text-subhead);cursor:pointer}
.fl-weather{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.fl-weather__chip{padding:8px 4px;border-radius:var(--radius-base);border:1px solid var(--c-input-border,var(--c-card-border));background:var(--c-field-fill);color:var(--c-text-secondary);font:600 10px/1.3 var(--font-family);cursor:pointer}
.fl-weather__chip--on{border-color:var(--fl-accent);border-width:1.5px;color:var(--fl-accent);background:color-mix(in srgb,var(--fl-accent) 15%,transparent)}
.fl-more{display:flex;width:100%;align-items:center;justify-content:space-between;border:0;background:transparent;padding:0;cursor:pointer;font-family:inherit}
.fl-more__chev{color:var(--c-text-tertiary);font-size:10px}
.fl-more__body{display:grid;gap:var(--space-sm);margin-top:var(--space-sm)}
.fl-more__body[hidden]{display:none}
.fl-incident{justify-self:start;border:0;background:transparent;color:var(--c-danger);font:600 var(--text-caption)/1.4 var(--font-family);cursor:pointer;padding:0}
.fl-photos{display:flex;gap:var(--space-xs);flex-wrap:wrap}
.fl-photos__cell{margin:0;position:relative;width:80px;height:80px}
.fl-photos__cell img{width:80px;height:80px;object-fit:cover;border-radius:var(--radius-base)}
.fl-photos__cell button,.fl-photos__pending button{position:absolute;top:2px;right:2px;border:0;border-radius:999px;width:18px;height:18px;background:var(--c-danger);color:var(--c-on-brand);cursor:pointer;line-height:1}
.fl-photos__pending{position:relative;display:inline-flex;align-items:center;padding:6px 22px 6px 8px;border-radius:var(--radius-base);background:var(--c-field-fill);font-size:var(--text-caption2)}
.fl-photos__pending button{position:static;margin-left:6px}
.fl-photos__add{justify-self:start}

/* The validation banner. `handleSave` shows the message INSTEAD of saving, and the control stays
   pressable so the sentence is reachable — a truly disabled button swallows the one explanation. */
.fl-banner{display:flex;align-items:center;gap:var(--space-sm);padding:10px var(--space-md);margin-bottom:var(--space-md);border-radius:var(--radius-base);background:color-mix(in srgb,var(--c-danger) 92%,transparent);color:var(--c-on-brand);font-size:var(--text-subhead);font-weight:500}
.fl-banner button{margin-left:auto;border:0;background:transparent;color:var(--c-on-brand);opacity:.7;cursor:pointer;font-size:16px;line-height:1}
.btn--dim{opacity:.55}
/* Autosave replaces the Save button rather than disabling it — there is no press to make. */
.fl-saved{font-size:var(--text-caption2);color:var(--c-text-tertiary);align-self:center}

/* ── Progress Photos ────────────────────────────────────────────────────── */
.fl-pr__job{font-size:var(--text-subhead);font-weight:600;margin-bottom:var(--space-md)}
.fl-pr__day{padding:var(--space-md);border-radius:var(--radius-card);border:1px solid var(--c-card-border);margin-bottom:var(--space-sm);display:grid;gap:var(--space-sm)}
.fl-pr__head{display:flex;align-items:center;gap:var(--space-sm)}
.fl-pr__dot{width:10px;height:10px;border-radius:999px;background:var(--c-brand-primary)}
.fl-pr__weather{margin-left:auto;font-size:var(--text-caption);color:var(--c-text-secondary)}
.fl-pr__grid{display:flex;gap:6px;flex-wrap:wrap}
.fl-pr__thumb{border:0;padding:0;background:transparent;cursor:pointer;line-height:0}
.fl-pr__thumb img{width:80px;height:80px;object-fit:cover;border-radius:var(--radius-base)}
.fl-pr__work{margin:0;font-size:var(--text-caption);color:var(--c-text-secondary);border-left:2px solid color-mix(in srgb,var(--c-brand-primary) 30%,transparent);padding-left:var(--space-sm)}
.fl-pr__meta{display:flex;gap:var(--space-md);font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.fl-pr__issue{margin:0;font-size:var(--text-caption);color:var(--c-warning)}
/* The viewer has no download, no delete and no share, because the 165-line sheet has none. */
.fl-gallery{display:flex;align-items:center;gap:var(--space-sm);background:#000;border-radius:var(--radius-base);min-height:320px}  /* raw-color-ok: the app's gallery ignores the theme and paints black behind a photo */
.fl-gallery__stage{flex:1;margin:0;display:grid;place-items:center;min-height:320px}
.fl-gallery__stage{overflow:hidden}
.fl-gallery__stage img{max-width:100%;max-height:60vh;object-fit:contain;touch-action:pinch-zoom;transform-origin:center;transition:transform .12s ease-out}
.fl-gallery__failed{color:var(--c-text-secondary);font-size:var(--text-caption)}
.fl-gallery__nav{border:0;background:transparent;color:#fff;font-size:32px;cursor:pointer;padding:0 var(--space-sm)}  /* raw-color-ok: ink on the black gallery ground, which is not a themed surface */
.fl-gallery__nav[disabled]{opacity:.25;cursor:default}

/* ── The installer shell ────────────────────────────────────────────────── */
.fl-job{padding:var(--space-md) var(--space-sm-md);border-bottom:1px solid var(--c-separator);display:grid;gap:4px}
.fl-job__head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-sm)}
.fl-job__head strong{font-size:var(--text-subhead);font-weight:600}
.fl-job__head span{font-size:var(--text-caption);color:var(--c-text-secondary)}
.fl-job__meta{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.fl-job__address{font-size:var(--text-caption);color:var(--c-info)}
.fl-job__scope{font-size:var(--text-caption);color:var(--c-text-secondary)}
.fl-job__change{font-size:var(--text-caption2);font-weight:600;color:var(--c-warning)}
.fl-verbs{display:flex;gap:var(--space-sm);flex-wrap:wrap;padding-top:var(--space-xs)}
.fl-verb{display:inline-flex;align-items:center;padding:5px 12px;border-radius:999px;border:0;font:700 var(--text-caption)/1.4 var(--font-family);cursor:pointer;text-decoration:none}
.fl-verb--filled{background:var(--c-brand-primary);color:var(--c-on-brand)}
.fl-verb--stop{background:var(--c-danger)}
.fl-verb--punch{background:color-mix(in srgb,var(--c-accent-orange) 12%,transparent);color:var(--c-accent-orange)}
.fl-verb--log{background:color-mix(in srgb,var(--c-accent-blue) 12%,transparent);color:var(--c-accent-blue)}
.fl-verb--photo{background:color-mix(in srgb,var(--c-accent-purple) 12%,transparent);color:var(--c-accent-purple)}
.fl-verb--onmyway{background:color-mix(in srgb,var(--c-accent-blue) 12%,transparent);color:var(--c-accent-blue)}
/* THE THIRD ARM IS A LABEL, NOT A DISABLED BUTTON. `fieldVerbs` wraps two of its three arms in a
   Button and calls the label bare for the third — no control, nothing to focus, nothing to press.
   A <button disabled> here would be wrong in both directions: reachable by keyboard, and reporting
   itself to assistive tech as a control that exists. */
.fl-verb--inert{background:color-mix(in srgb,var(--c-text-tertiary) 12%,transparent);color:var(--c-text-tertiary);opacity:.6;cursor:default}
.fl-capture{display:grid;gap:var(--space-sm);padding-top:var(--space-xs)}
.fl-capture__staged{font-size:var(--text-caption2);color:var(--c-text-tertiary)}

/* ── Costs — the two tabs `BusinessSection.costs` promises ───────────────────
   `ExpenseListView` (THE LEDGER) and `BudgetView` (JOB BUDGETS) compile in the frozen app and no
   producer constructs either, so neither has ever been drawn. These are their surfaces on the web,
   appended in one block scoped to this destination — the `.mi-*` and `.pm-*` precedent. */
.ct-band-kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-tertiary);margin:var(--space-lg) 0 var(--space-sm)}
.ct-dot{color:var(--c-text-tertiary);padding:0 var(--space-xxs)}
.ct-spend-line{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap}
.ct-spend-line .ct-band-kicker{margin:var(--space-lg) 0 var(--space-sm)}
.ct-spend-line__facts{font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.ct-spend-line__facts strong{color:var(--c-text-primary)}
.ct-spend-line__warn{color:var(--c-warning);font-weight:700}
.ct-spend-line__ok{color:var(--c-brand-primary)}

.ct-profit{border:var(--border-hairline) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);padding:var(--space-lg);display:grid;gap:var(--space-sm-md)}
.ct-profit--down{border-color:var(--c-danger)}
.ct-profit__top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-lg)}
.ct-profit__block{display:grid;gap:var(--space-xxs)}
.ct-profit__block--right{text-align:right;justify-items:end}
.ct-profit__label{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ct-profit__value{font-size:var(--text-title3);font-weight:700;font-variant-numeric:tabular-nums}
.ct-profit__foot{font-size:var(--text-caption);color:var(--c-text-secondary);margin:0}
.ct-profit__warn{font-size:var(--text-caption);color:var(--c-warning);margin:0}

.ct-cats{display:grid;gap:var(--space-xs)}
.ct-cats__row{display:grid;grid-template-columns:88px 1fr 40px;align-items:center;gap:var(--space-sm);font-size:var(--text-caption)}
.ct-cats__name{color:var(--c-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ct-cats__track{display:block;height:8px;border-radius:var(--radius-pill);background:var(--c-field-fill);overflow:hidden}
.ct-cats__fill{display:block;height:100%;border-radius:var(--radius-pill);background:var(--c-brand-primary)}
.ct-cats__pct{text-align:right;font-variant-numeric:tabular-nums;color:var(--c-text-secondary);font-weight:700}

.ct-coach{font-size:var(--text-caption);color:var(--c-text-tertiary);margin:var(--space-sm) 0;line-height:1.45}
/* The BUTTON variant of the coaching line — same words, but this one is pressable, and `padding:0`
   on a 17px text line left a control a third of the floor. The base .ct-coach stays a paragraph and
   is not a control at all, which is why only this modifier is padded. */
.ct-coach--act{display:block;width:100%;text-align:left;border:none;background:none;font-family:inherit;cursor:pointer;padding:var(--space-xs) 0;min-height:24px}
.ct-coach--act:hover{color:var(--c-text-secondary)}

.ct-quick-add__shut{display:block;width:100%;text-align:left;padding:var(--space-sm-md) var(--space-md);border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background);color:var(--c-text-secondary);font:inherit;font-size:var(--text-subhead);cursor:pointer}
.ct-quick-add{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-lg);background:var(--c-card-background);padding:var(--space-md);display:grid;gap:var(--space-sm-md)}
.ct-quick-add__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.ct-quick-add__x{border:none;background:none;color:var(--c-text-tertiary);cursor:pointer;font:inherit}
.ct-quick-add__grid{display:grid;grid-template-columns:110px 1fr 140px 160px auto;gap:var(--space-sm);align-items:center}

.ct-filter{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap;margin:var(--space-sm-md) 0}
.ct-filter__chips{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.ct-filter__tools{display:flex;align-items:center;gap:var(--space-sm)}
.ct-filter__search{max-width:220px}
.ct-filter__sort{max-width:140px}
.ct-chip{border:var(--border-fine) solid var(--c-card-border);background:var(--c-card-background);color:var(--c-text-secondary);border-radius:var(--radius-pill);padding:2px var(--space-md);font:inherit;font-size:var(--text-caption2);font-weight:700;cursor:pointer}
.ct-chip--on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-on-brand)}
.ct-chip__n{opacity:.65;margin-left:var(--space-xxs)}

.ct-stats{display:flex;flex-wrap:wrap;gap:var(--space-md)}
.ct-stat{flex:1 1 120px;border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);padding:var(--space-md-lg) var(--space-md);display:grid;gap:var(--space-xxs);text-align:center}
.ct-stat__title{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.ct-stat__value{font-size:var(--text-body);font-weight:700;font-variant-numeric:tabular-nums}

.ct-row-note{font-size:var(--text-caption2);font-weight:600;margin-top:1px}
.ct-row-note--over{color:var(--c-danger)}
.ct-row-note--near{color:var(--c-warning)}

.ct-budget-empty{text-align:center;padding:var(--space-xxl) var(--space-lg);display:grid;gap:var(--space-md);justify-items:center}
.ct-budget-empty__title{font-size:var(--text-body);font-weight:700;color:var(--c-text-primary);margin:0}
.ct-budget-empty__sub{font-size:var(--text-subhead);color:var(--c-text-secondary);margin:0}
.ct-budget-empty__steps{list-style:none;margin:0;padding:var(--space-md-lg);background:var(--c-field-fill);border-radius:var(--radius-base);display:grid;gap:var(--space-sm-md);text-align:left;font-size:var(--text-subhead);color:var(--c-text-secondary)}
.ct-budget-empty__steps li{display:flex;align-items:flex-start;gap:var(--space-sm)}
.ct-budget-empty__n{flex:0 0 auto;width:20px;height:20px;border-radius:var(--radius-pill);background:var(--c-brand-primary);color:var(--c-on-brand);font-size:var(--text-caption2);font-weight:700;display:inline-flex;align-items:center;justify-content:center}

/* The form's three cards — THE COST · WHERE IT LANDS · PAPER TRAIL. */
.ct-card{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);padding:var(--space-lg);margin-bottom:var(--space-lg)}
.ct-kicker{font-size:var(--text-caption2);font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--c-text-secondary);margin:0 0 var(--space-md)}
.ct-kicker--brand{color:var(--c-brand-primary)}
.ct-amount{margin-bottom:var(--space-md)}
.ct-back{font-size:var(--text-caption);color:var(--c-text-tertiary);margin:0 0 var(--space-md)}

.ct-cat-chips{display:flex;flex-wrap:wrap;gap:var(--space-sm)}
.ct-cat-chip{border:none;background:var(--c-field-fill);color:var(--c-text-secondary);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md-lg);font:inherit;font-size:var(--text-caption2);font-weight:600;cursor:pointer}
.ct-cat-chip--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.ct-cat-chip--more{background:none;border:1px dashed var(--c-card-border);color:var(--c-brand-primary)}

.ct-warn{font-size:var(--text-caption);color:var(--c-text-secondary);margin:var(--space-sm) 0;line-height:1.45}
.ct-budget-read{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--text-caption);color:var(--c-text-secondary);margin:var(--space-sm) 0}
.ct-budget-read strong{font-variant-numeric:tabular-nums}
.ct-budget-read .cost-bar{flex:1;min-width:60px}

.ct-disclose{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);width:100%;border:none;background:none;padding:var(--space-sm) 0;font:inherit;cursor:pointer;text-align:left}
.ct-disclose__label{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.ct-disclose__aside{font-size:var(--text-caption);font-weight:400;color:var(--c-text-tertiary)}
.ct-disclose__verb{font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);white-space:nowrap}
.ct-toggle{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--text-subhead);color:var(--c-text-primary);margin:var(--space-sm) 0}
.ct-autosave{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-tertiary);align-self:center}

.ct-hours{border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-card);background:var(--c-card-background);padding:var(--space-lg);margin-bottom:var(--space-lg);display:grid;gap:var(--space-sm)}
.ct-hours__line{margin:0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.ct-hours__line strong{font-size:var(--text-title3);font-variant-numeric:tabular-nums;margin-right:var(--space-xs)}
.ct-hours__note{margin:0;font-size:var(--text-caption);color:var(--c-text-secondary)}

/* THE VALIDATION BANNER — `BusinessFormContainer.validationBannerView`, and NOT a save bar. White
   on danger at 0.92, an ✕ labelled Dismiss, and it clears itself after four seconds. It appears on
   a PRESS and never on render, because `validationMessage`'s only consumer is `handleSave()`. */
.ct-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm-md) var(--space-md-lg);margin-bottom:var(--space-md);border-radius:var(--radius-control);background:color-mix(in srgb,var(--c-danger) 92%,transparent);color:var(--c-on-brand)}
.ct-banner__icon{font-weight:700}
.ct-banner__text{flex:1;font-size:var(--text-subhead);font-weight:600}
.ct-banner__x{border:none;background:none;color:var(--c-on-brand);opacity:.7;cursor:pointer;font:inherit}

@media (max-width:700px){
  .ct-quick-add__grid{grid-template-columns:1fr 1fr}
  .ct-filter{align-items:flex-start;flex-direction:column}
  .ct-filter__search{max-width:none;width:100%}
}

/* The receipt row — a dashed drop target, the count, and the strip of what is attached. */
.ct-receipt{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);width:100%;padding:var(--space-md);border:1.2px dashed var(--c-card-border);border-radius:var(--radius-md);background:none;font:inherit;text-align:left;cursor:pointer}
.ct-receipt__label{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.ct-receipt__strip{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}
.ct-receipt__thumb{position:relative;display:inline-flex;align-items:center;justify-content:center;width:64px;height:64px;border:var(--border-fine) solid var(--c-card-border);border-radius:var(--radius-sm);overflow:hidden;background:var(--c-field-fill);font-size:var(--text-caption2);color:var(--c-text-tertiary);text-align:center;padding:2px}
.ct-receipt__thumb img{width:100%;height:100%;object-fit:cover}
.ct-receipt__thumb--pending{opacity:.65}
.ct-receipt__thumb button{position:absolute;top:2px;right:2px;border:none;border-radius:var(--radius-pill);background:var(--c-text-primary);color:var(--c-on-brand);opacity:.75;width:16px;height:16px;line-height:1;font-size:10px;cursor:pointer;padding:0}

/* ── The proposals desk ─────────────────────────────────────────────────────
   The status chip row, the section bands and the row's stacked signals — the app's
   `ProposalListView` filter bar, `sectionCoaching` headers and `columnarProposalLabel`.

   The chips are the `.chip` primitive; only their row needs a rule. The section band reuses the
   table-row shape the money desks already wear, with the coaching caption on its own line — the
   caption is the reason the band exists, so it is never truncated away. */
.prop-chips{display:flex;flex-wrap:wrap;gap:var(--space-sm);padding-bottom:var(--space-sm-md)}

.dash-table .prop-section-row,.dash-table .prop-section-row:hover{background:var(--c-background-secondary)}
.dash-table .prop-section-row td{padding:var(--space-sm) var(--space-md)}
.prop-section-row td{display:flex;flex-direction:column;gap:2px}
.prop-section-row__head{color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700;letter-spacing:.45px;text-transform:uppercase}
.prop-section-row__head b{color:var(--c-text-tertiary);font-weight:700}
.prop-section-row__coach{color:var(--c-text-tertiary);font-size:var(--text-caption);font-weight:400;text-transform:none;letter-spacing:0}

/* The number cell carries the document's identity AND its urgency: tier, version, then how long it
   has been waiting. The age line is the one a follow-up call is made from. */
.prop-row__num{font-weight:600}
.prop-row__tier,.prop-row__ver,.prop-row__correction{
  display:inline-block;margin-left:5px;padding:1px 5px;border-radius:var(--radius-pill);
  font-size:var(--text-caption2);font-weight:700;vertical-align:middle;
}
.prop-row__tier{color:var(--d-purple);background:var(--d-purple-light)}
.prop-row__ver{color:var(--d-blue);background:var(--d-blue-light)}
/* Amber, not blue: a revision in flight is a state to notice, where a version number is a fact. */
.prop-row__correction{color:var(--d-amber);background:var(--d-amber-light)}
.prop-row__age{margin-top:2px;color:var(--c-text-tertiary);font-size:var(--text-caption2);font-weight:400}

/* ── THE MONEY BANDS (MoneyHubView+Bands · MoneyBandHeader) ─────────────────
   A band = ONE card with its header and its rows INSIDE. The WHOLE header row is the button, with
   a rectangular hit shape, and a folded band keeps its header, its verdict sentence and its $
   total on screen — only the rows fold, so a folded band never hides its number. */
.money-band {
  border: 1px solid var(--d-border); border-radius: 12px; background: var(--c-surface);
  margin-bottom: 14px; overflow: hidden;
}
.money-band__head {
  display: flex; align-items: center; gap: 12px; width: 100%;
  padding: 12px 14px; background: none; border: 0; text-align: left; cursor: pointer; color: inherit;
}
.money-band__head:hover { background: var(--c-field-fill); }
.money-band__tile {
  flex: 0 0 32px; height: 32px; border-radius: 9px; background: var(--c-brand-tint);
}
.money-band--warn .money-band__tile { background: var(--c-warning-tint); }
.money-band--blue .money-band__tile { background: var(--c-brand-tint); }
.money-band__text { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }
.money-band__title { font-size: 13px; font-weight: 600; color: var(--d-text); }
.money-band__verdict {
  font-size: 11px; color: var(--d-text-2);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.money-band__verdict--brand  { color: var(--c-brand-primary); }
.money-band__verdict--danger { color: var(--c-danger); }
.money-band__total {
  font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--d-text);
  white-space: nowrap;
}
.money-band__total--warn   { color: var(--c-warning); }
.money-band__total--danger { color: var(--c-danger); }
.money-band__caret { font-size: 12px; color: var(--d-text-3); flex: 0 0 auto; }
.money-band__body { padding: 0 14px 12px; }
.money-band__clear {
  margin: 0; padding: 6px 0; font-size: 12px; color: var(--c-brand-primary);
}
.money-band__clear::before { content: '✓ '; }
/* A 12px-tall text button is a 12px TAP TARGET, and the harness's own check has been reporting it.
   The padding is vertical only, so the link keeps its place in the flow and the words do not move
   — what grows is the area a thumb can land on. */
.money-band__more {
  display: inline-block; margin-top: 2px; padding: 6px 0; border: 0; background: none; cursor: pointer;
  min-height: 24px; font-size: 11px; font-weight: 600; color: var(--c-brand-primary);
}
.money-band__foot { display: flex; justify-content: flex-end; padding-top: 10px; border-top: 1px solid var(--d-border); margin-top: 8px; }

/* An unmade-ask row: identity · amount · verb pills. At phone width the amount and two pills
   starved the identity column, so identity takes the whole first line and the rest wraps under it. */
.money-ask {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 9px 0; border-top: 1px solid var(--d-border);
}
.money-ask:first-child { border-top: 0; }
.money-ask__id { display: flex; flex-direction: column; gap: 1px; flex: 1 1 200px; min-width: 0; }
.money-ask__title {
  font-size: 13px; font-weight: 600; color: var(--d-text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.money-ask__meta {
  font-size: 11px; color: var(--d-text-3);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.money-ask__meta--stale { color: var(--c-warning); }
.money-ask__amt { font-size: 13px; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--d-text); }
.money-ask__amt--none { color: var(--d-text-3); }
.money-ask__acts { display: flex; gap: 6px; flex: 0 0 auto; }
.money-pill {
  font-size: 11px; font-weight: 600; padding: 4px 11px; border-radius: 999px; border: 0;
  background: var(--c-brand-primary); color: var(--c-on-brand); cursor: pointer; white-space: nowrap;
}
/* THE QUIET SECOND VERB. A row gets ONE filled pill — the move its band is named for — and
   everything else wears an outline, so fourteen rows present fourteen decisions rather than
   twenty-eight equally weighted ones. */
.money-pill--outline {
  background: none; color: var(--d-text-2); border: 1px solid var(--d-border);
}
.money-manifest__line { font-size: 12px; color: var(--d-text-2); font-variant-numeric: tabular-nums; }
.money-manifest__foot { margin: 10px 0 0; font-size: 12px; color: var(--d-text-3); }
.ar-move__cta--filled { background: var(--c-brand-primary); color: var(--c-on-brand); }

/* ── THE WRITTEN-OFF REGISTER (MoneyHubView+WrittenOff) ─────────────────────
   The other side of the write-off door: every forgiven balance, each reversible. */
.wo-register { padding: 4px 0 20px; }
.wo-register__title { margin: 0 0 2px; font-size: 20px; font-weight: 700; color: var(--d-text); }
.wo-register__lede { margin: 0 0 14px; font-size: 13px; color: var(--d-text-2); }
.wo-register__rows { padding: 0 14px; }
.wo-register__note { margin: 10px 0 0; font-size: 11px; color: var(--d-text-3); }
.wo-row {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 0; border-top: 1px solid var(--d-border);
}
.wo-row:first-child { border-top: 0; }
.wo-row__id { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
.wo-row__number { font-size: 13px; font-weight: 600; color: var(--d-text); font-variant-numeric: tabular-nums; }
.wo-row__meta { font-size: 11px; color: var(--d-text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wo-row__amt { font-size: 13px; font-weight: 600; color: var(--d-text-2); font-variant-numeric: tabular-nums; }
.wo-row__open { border: 0; background: none; cursor: pointer; color: var(--d-text-3); font-size: 15px; padding: 0 4px; }

/* The rail's two labelled health rows, and its quiet notes. */
.ar-health__row { display: flex; align-items: baseline; gap: 8px; }
.ar-health__label { display: flex; flex-direction: column; font-size: 12px; color: var(--d-text); flex: 1; }
.ar-health__detail { font-size: 10px; color: var(--d-text-3); }
.ar-rc__note { margin: 6px 0 0; font-size: 11px; color: var(--d-text-3); }
.ar-rc__note--warn { color: var(--c-warning); }
.ar-rc__head--warn { color: var(--c-warning); }
.ar-rc--warn { border-color: var(--c-warning); }

/* The collections row's promise chip and its calendar badge (MoneyHubView+ARWorklist). */
.ar-promise { display: block; margin-top: 2px; font-size: 10px; font-weight: 700; }
.ar-promise--open    { color: var(--c-brand-primary); }
.ar-promise--broken  { color: var(--c-danger); }
.ar-promise--late    { color: var(--c-danger); }
.ar-promise--current { color: var(--c-brand-primary); font-weight: 500; }
.ar-promise-badge {
  width: 24px; height: 24px; border-radius: 50%; border: 0; cursor: pointer;
  background: var(--c-brand-tint); color: var(--c-brand-primary); font-size: 14px; line-height: 1;
  margin-right: 6px;
}

/* The aging card's collapsed empty buckets, and its late verdict. */
.ar-bands__empty { margin: 0; padding: 8px 12px; font-size: 11px; color: var(--d-text-3); align-self: center; }
.ar-soon--late { color: var(--c-warning); font-weight: 600; }

/* THE QR GENERATOR SHEET. A picture, a destination, and three things to do with it. */
.qr-sheet__lede{margin:0 0 var(--space-md);font-size:var(--text-footnote);color:var(--c-text-secondary)}
.qr-sheet__types{margin-bottom:var(--space-md)}
.qr-sheet__field{display:flex;flex-direction:column;gap:var(--space-xs);margin-bottom:var(--space-md)}
.qr-sheet__field span{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-secondary)}
/* Two columns where there is room and one where there is not — the preview must never shrink below
   the 212px the encoder draws, because a scaled QR is a QR that does not scan. */
.qr-sheet__split{display:flex;flex-wrap:wrap;gap:var(--space-lg);align-items:flex-start}
.qr-sheet__preview{flex:0 0 212px;display:flex;flex-direction:column;gap:var(--space-sm-md);align-items:center}
.qr-sheet__preview img{display:block;border-radius:var(--radius-md);background:#fff}  /* raw-color-ok: a QR code is scanned and printed — it must be dark-on-white in every theme, not tinted by one */
.qr-sheet__empty{width:212px;height:212px;display:flex;align-items:center;justify-content:center;padding:var(--space-md);text-align:center;font-size:var(--text-caption2);color:var(--c-text-secondary);background:var(--c-card-background-solid);border:1px dashed var(--c-card-border);border-radius:var(--radius-md)}
.qr-sheet__caption{margin:0;font-size:var(--text-caption2);color:var(--c-text-secondary);text-align:center}
.qr-sheet__destination{flex:1 1 260px;min-width:0}
.qr-sheet__eyebrow{margin:0 0 var(--space-xs);font-size:9px;font-weight:800;letter-spacing:.06em;color:var(--c-text-tertiary)}
.qr-sheet__dest-title{margin:0;font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.qr-sheet__dest-sub{margin:0 0 var(--space-sm-md);font-size:var(--text-caption2);color:var(--c-text-secondary)}
/* The destination value is a URL and a vCard is a paragraph: both wrap rather than overflow, and a
   long link breaks anywhere rather than pushing the dialog sideways. */
.qr-sheet__dest-value{margin:0 0 var(--space-sm-md);font-size:var(--text-caption2);color:var(--c-text-secondary);overflow-wrap:anywhere}
.qr-sheet__badge{margin:0;padding:var(--space-sm-md);font-size:var(--text-caption2);border-radius:var(--radius-md)}
.qr-sheet__badge--success{color:var(--c-success);background:var(--c-success-tint)}
.qr-sheet__badge--warning{color:var(--c-warning);background:var(--c-warning-tint)}
.qr-sheet__actions{display:flex;flex-wrap:wrap;gap:var(--space-sm-md);margin-top:var(--space-lg)}
.qr-sheet__status{margin-top:var(--space-sm-md);padding:var(--space-sm-md);border-radius:var(--radius-md)}
.qr-sheet__status--success{background:var(--c-success-tint)}
.qr-sheet__status--warning{background:var(--c-warning-tint)}
.qr-sheet__status-title{margin:0;font-size:var(--text-caption2);font-weight:700}
.qr-sheet__status--success .qr-sheet__status-title{color:var(--c-success)}
.qr-sheet__status--warning .qr-sheet__status-title{color:var(--c-warning)}
.qr-sheet__status-msg{margin:var(--space-xs) 0 0;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.qr-sheet__status-action{display:inline-block;margin-top:var(--space-sm-md);font-size:var(--text-caption2);font-weight:600;color:var(--c-brand-primary)}

/* THE TAG IMPORT PICKER — a chooser, then a list. */
.tip-search{display:block;margin-bottom:var(--space-md)}
.tip-group{margin:0 0 var(--space-sm);font-size:9px;font-weight:800;letter-spacing:.06em;color:var(--c-text-tertiary)}
.tip-drawings{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-xs)}
.tip-drawing{display:flex;width:100%;align-items:center;justify-content:space-between;gap:var(--space-sm-md);padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-md);background:var(--c-card-background-solid);cursor:pointer;text-align:left}
.tip-drawing:hover{border-color:var(--c-brand-primary)}
.tip-drawing__name{font-size:var(--text-footnote);color:var(--c-text-primary)}
.tip-drawing__go{color:var(--c-text-tertiary)}
.tip-back{margin:0 0 var(--space-md);padding:0;border:none;background:none;font-size:var(--text-caption2);color:var(--c-brand-primary);cursor:pointer}
.tip-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm-md);margin-bottom:var(--space-sm-md)}
.tip-items{list-style:none;margin:0 0 var(--space-sm-md);padding:0;display:flex;flex-direction:column;gap:var(--space-xs);max-height:320px;overflow-y:auto}
.tip-item{display:flex;align-items:center;gap:var(--space-sm-md);padding:var(--space-sm) var(--space-sm-md);border-radius:var(--radius-sm);cursor:pointer}
.tip-item:hover{background:var(--c-card-background-solid)}
.tip-item__name{flex:1;min-width:0;font-size:var(--text-footnote);color:var(--c-text-primary)}
.tip-item__qty{font-size:var(--text-caption2);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.tip-advisory{margin:0 0 var(--space-sm-md);font-size:var(--text-caption2);color:var(--c-warning)}
.tip-empty{margin:0;padding:var(--space-lg) 0;text-align:center;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.tip-actions{display:flex;justify-content:flex-end;gap:var(--space-sm-md)}
.tip-empty__title{margin:0 0 var(--space-xs);font-size:var(--text-body);font-weight:600;color:var(--c-text-secondary)}
.tip-refusal{margin:0 0 var(--space-sm-md);padding:var(--space-sm-md);font-size:var(--text-caption2);color:var(--c-warning);background:var(--c-warning-tint);border-radius:var(--radius-md)}

/* SIGNING A LIEN WAIVER. */
.sw-identity{margin:0 0 var(--space-md);display:flex;flex-direction:column;gap:2px}
.sw-identity span{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.sw-modes{margin-bottom:var(--space-md)}
.sw-field{display:flex;flex-direction:column;gap:var(--space-xs);margin-bottom:var(--space-md)}
.sw-field span{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-secondary)}
.sw-consent{display:flex;gap:var(--space-sm-md);align-items:flex-start;margin:var(--space-md) 0;font-size:var(--text-caption2);color:var(--c-text-secondary);cursor:pointer}
.sw-error{margin:0 0 var(--space-sm-md);font-size:var(--text-caption2);color:var(--c-danger)}
.sw-actions{display:flex;justify-content:flex-end;gap:var(--space-sm-md)}
.sw-identity{display:flex;align-items:center;gap:var(--space-sm-md);margin:0 0 var(--space-md)}
.sw-identity>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.sw-identity__icon{flex-shrink:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:var(--c-accent-teal-tint,var(--c-card-background-solid));color:var(--c-text-secondary)}
.sw-identity__amount{font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.sw-pad-wrap{position:relative}
.sw-baseline{position:absolute;left:10px;bottom:10px;font-size:var(--text-caption2);font-weight:700;color:var(--c-text-tertiary);pointer-events:none}
.sw-pad-verbs{display:flex;gap:var(--space-sm-md);margin-top:var(--space-xs)}
.sw-typed{min-height:180px;display:flex;align-items:center;padding:0 var(--space-lg);margin:0;font:italic 44px/1.2 "Snell Roundhand","Apple Chancery","Segoe Script",cursive;color:#12181f;background:#fff;border-radius:var(--radius-md)}  /* raw-color-ok: a signature is exported and printed, so it is ink on white in every theme — and this pair must match signature-pad.js, which draws the same ink on the same ground */
.sw-typed--empty{font:var(--text-caption2)/1.4 inherit;font-style:normal;color:var(--c-text-secondary)}
.sw-legal{flex:1;margin:0;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.ap-addr-status{margin:var(--space-xs) 0 0;font-size:var(--text-caption2)}
.ap-addr-status--warning{color:var(--c-warning)}
.ap-addr-status--success{color:var(--c-success)}
.ap-addr-status--brand{color:var(--c-brand-primary)}
.ap-addr-status--quiet{color:var(--c-text-secondary)}
.dsp-preview{margin-top:var(--space-md);padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-md);background:var(--c-card-background-solid)}
.dsp-preview__eyebrow{margin:0 0 var(--space-sm-md);font-size:9px;font-weight:800;letter-spacing:.08em;color:var(--c-text-tertiary)}
.dsp-preview__line{margin:0 0 var(--space-xs);font-size:var(--text-footnote);color:var(--c-text-primary)}
.dsp-preview__verdict{display:flex;flex-direction:column;gap:2px;margin:var(--space-sm-md) 0;padding:var(--space-sm-md);border-radius:var(--radius-sm)}
.dsp-preview__verdict--success{background:var(--c-success-tint)}
.dsp-preview__verdict--warning{background:var(--c-warning-tint)}
.dsp-preview__verdict strong{font-size:var(--text-footnote)}
.dsp-preview__verdict span{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.dsp-preview__rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.dsp-preview__rows li{font-size:var(--text-caption2);color:var(--c-text-secondary)}
.dsp-preview__rows li.is-ready{color:var(--c-success)}
.ap-auto-title{margin:var(--space-xs) 0 0;font-size:var(--text-caption2);color:var(--c-brand-primary)}

/* WHERE THIS ASK STANDS AGAINST ITS CONTRACT. */
.if-standing{margin-top:var(--space-sm-md);padding:var(--space-sm-md);border:1px solid var(--c-card-border);border-radius:var(--radius-md);background:var(--c-card-background-solid)}
.if-standing__verdict{margin:0 0 var(--space-xs);font-size:9px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-tertiary)}
.if-standing__fact{margin:0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.if-standing__fact strong{font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.if-standing__fact--alarm strong{color:var(--c-warning)}
.if-standing__absent{margin:0;font-size:var(--text-caption2);color:var(--c-text-secondary)}
.if-standing__verb{margin:var(--space-sm-md) 0 0;font-size:var(--text-caption2);font-weight:600;color:var(--c-brand-primary)}

/* ── Custom properties that had no definition ────────────────────────────────
   Two different things were failing the token gate under one heading.

   FIVE of them are not global tokens at all: --cl-ring, --cl-ring-pct,
   --sf-rung-colour, --fu-tint and --mi-tint are set INLINE, per element, by the
   view that renders the row (`style="--cl-ring:${tint}"`). The gate scans CSS
   for var() and asks the palette for a definition, which an element-scoped
   variable was never going to have. They get their default on the class that
   owns them, which is both what the gate wants and a statement of the contract:
   this class expects its view to supply this value. JS sets them on every
   render, so nothing changes on screen — the default is what shows if a future
   caller forgets.

   The other SIX were relying on a var() fallback to paint. Each is defined here
   at EXACTLY the value its fallback already produced, so this is a rename of
   nothing and a redraw of nothing. --space-xsSm (6px) and --space-smMd (10px)
   sit off the 2/4/8/12 scale; they are recorded rather than rounded, because
   snapping them to the nearest real token would move two paddings by 2px, and
   that is a design change wearing a cleanup's clothes. */
:root{
  --font-mono:ui-monospace,monospace;
  /* The palette already has this white as --c-on-brand; a second literal would be a second
     source of truth for the same colour. */
  --c-inverse-text:var(--c-on-brand);
  --c-brand-border:var(--d-border);
  --c-accent-teal-tint:var(--c-card-background-solid);
  --space-xsSm:6px;
  --space-smMd:10px;
}
.cl-ring{--cl-ring:var(--c-brand-primary);--cl-ring-pct:0}
.sf-rung{--sf-rung-colour:var(--c-card-border)}
.fu-pb__row{--fu-tint:var(--c-brand-primary)}
.mi-purpose__chip{--mi-tint:var(--c-brand-primary)}

/* ── Target size ─────────────────────────────────────────────────────────────
   WCAG 2.2 SC 2.5.8 asks 24x24 CSS px of a control. A render sweep measured these at 13px to
   23px — all of them text buttons with `padding:0` and nothing setting a height, so the hit area
   was the glyph and no more. `min-height` with `inline-flex` grows the target without moving the
   text: the label sits where it always did, there is simply more of it to hit. The dispatch
   measure button was the worst at 13px, and it is the one a dispatcher taps on a laptop trackpad
   to price a drive. */
.dsp-capacity__measure,.dsp-route__go,.dsh-viewall{display:inline-flex;align-items:center;min-height:24px}
.ct-chip,.dsh-feed__cta{min-height:24px}
/* 26, not 24: the measured rect came back a hair under 24 at exactly 24px — sub-pixel layout
   rounding — and a target that only just clears the line does not clear it. */
/* 26, not 24: the measured rect came back under 24 at exactly 24px — sub-pixel rounding — and a
   target that only just clears the line does not clear it. `flex:none` matters more: this sits in a
   flex row, so it was being SHRUNK below whatever width it asked for, which is why setting the
   width alone changed the reported number and not the verdict. */
.cust-reach{flex:none;width:26px;height:26px}
/* Sortable column headers are buttons, and they measured 17px — the glyph and its arrow, with no
   height of their own. Targeted by the attribute that MAKES them sortable rather than by a table
   class, so a new sortable header is the right size the day it is written. */
[data-sort-column]{display:inline-flex;align-items:center;gap:4px;min-height:24px}
.money-pill{display:inline-flex;align-items:center;min-height:24px}
/* The AR receipt card's three row-buttons are siblings in one body; each was measured only once the
   one before it was fixed, so they are sized together rather than one per pass. */
.ar-rc__row,.ar-rc__drill,.ar-rc__book{min-height:24px}
.jl-row__menu{width:26px;height:26px}
/* `chip` and `pill` are shared names with rules all over this sheet, so these are scoped to the
   two containers the sweep measured rather than resized globally — a generic bump would move
   every chip in the dashboard to fix two. */
/* Pills and chips that are pressable, given the 24px floor where they are used as controls.
   Scoped rather than applied to bare `.pill`, because the same class is also a static badge
   in places where a min-height would change a label's look for no reason. */
.jl__scopes .chip,.jl-row__move .pill,.goal-pace .pill,.goal-card__run .pill{display:inline-flex;align-items:center;min-height:24px}
/* Activity's two bare buttons — no class of their own, styled by their containers. A 13px
   "Mark day read" and a 15px "Waiting in Priorities" are both real verbs. */
.act-hero__sub button,.act-day__head button{min-height:24px;padding-top:2px;padding-bottom:2px}

/* The auto-chase line on an AR account (invoices e129). Two tones, because one of the four
   sentences is a WARNING that the server is refusing to send reminders at all, and the other three
   are ordinary status. */
.ar-chase{margin:0 0 var(--space-md);font-size:var(--text-caption);line-height:1.4;
  color:var(--c-text-tertiary)}
.ar-chase--warn{color:var(--c-warning);font-weight:500}

/* The AR account panel's settled state — the app's sentence for a zero balance. It replaces the
   hero, the invoice table and the dunning verbs, because every one of those is about money that is
   no longer owed. */
.ar-settled{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs);
  padding:var(--space-xxl) 0;text-align:center}
.ar-settled__title{font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.ar-settled__sub{font-size:var(--text-subhead);color:var(--c-text-secondary)}

/* JOB PICKER — "Move to which job?" (e386–e389, e422, e441). Selection-only: each row is one
   plain pick target, so the verb reads Select and nothing else competes with it. */
.jp{display:flex;flex-direction:column;gap:var(--space-md)}
.jp-newjob{display:flex;align-items:center;gap:var(--space-sm);width:100%;text-align:left;
  padding:var(--space-md);border:0;border-radius:var(--radius-card);cursor:pointer;
  background:var(--c-brand-primary);color:var(--c-on-brand);font:inherit}
.jp-newjob__plus{font-size:var(--text-title3);line-height:1}
.jp-newjob__main{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.jp-newjob__title{font-weight:600}
.jp-newjob__sub{font-size:var(--text-footnote);opacity:.85}
.jp-newjob__chev{opacity:.85}
.jp-search{display:flex;flex-direction:column;gap:var(--space-xs)}
.jp-results{display:flex;flex-direction:column;gap:var(--space-md)}
.jp-group{display:block}
.jp-group__title{margin:0 0 var(--space-xs);font-size:var(--text-footnote);font-weight:700;
  letter-spacing:.04em;color:var(--c-text-tertiary)}
.jp-group__rows{border:1px solid var(--c-card-border);border-radius:var(--radius-card);
  overflow:hidden;background:var(--c-card-background)}
.jp-row{display:flex;align-items:center;gap:var(--space-sm);width:100%;text-align:left;
  padding:var(--space-sm) var(--space-md);border:0;border-bottom:1px solid var(--c-card-border);
  background:none;font:inherit;color:inherit;cursor:pointer}
.jp-row:last-child{border-bottom:0}
.jp-row:hover,.jp-row:focus-visible{background:var(--c-field-fill)}
.jp-row__main{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.jp-row__name{font-weight:600;display:flex;align-items:center;gap:var(--space-xs)}
.jp-row__stage{font-size:var(--text-caption2);font-weight:600;padding:1px 6px;border-radius:999px;
  background:var(--c-surface-secondary);color:var(--c-text-secondary)}
.jp-row__addr{font-size:var(--text-footnote);color:var(--c-text-secondary);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jp-row__verb{font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary);flex:none}
.jp-empty{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-xl);
  text-align:center;color:var(--c-text-secondary)}

/* JOB DOCUMENT DESTINATION — the facts rail (e392–e394). The customer toggle says which state it
   is IN, not only what it would do, because the dangerous direction is believing you have made
   something private when you have not. */
.jd{display:flex;flex-direction:column;gap:var(--space-md)}
.jd__meta{margin:0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.jd-rail{display:flex;flex-direction:column;gap:var(--space-lg)}
/* `display:flex` above outranks the UA's [hidden] rule, so the facts verb could set the
   attribute and the rail would stay on screen. */
.jd-rail[hidden]{display:none}
.jd-rail__section{display:flex;flex-direction:column;gap:var(--space-xs)}
.jd-rail__label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.04em;
  color:var(--c-text-tertiary)}
.jd-rail__link{display:block;width:100%;text-align:left;padding:var(--space-xs) 0;border:0;
  background:none;font:inherit;color:var(--c-brand-primary);cursor:pointer}
.jd-rail__only{margin:0;font-size:var(--text-caption);color:var(--c-text-tertiary)}
.jd-vis{display:flex;align-items:flex-start;gap:var(--space-sm);cursor:pointer}
.jd-vis__text{display:flex;flex-direction:column;gap:1px}
.jd-vis__text strong{font-size:var(--text-subhead);font-weight:600}
.jd-vis__text small{font-size:var(--text-caption);color:var(--c-text-tertiary)}
.jd__verbs{display:flex;gap:var(--space-sm);flex-wrap:wrap}
.jd__preview{border:1px solid var(--c-card-border);border-radius:var(--radius-card);overflow:hidden;
  min-height:220px;display:flex}
.jd__preview img,.jd__preview iframe{width:100%;border:0;display:block}
.jd__preview iframe{min-height:420px}
.jd__nopreview{display:flex;flex-direction:column;align-items:center;gap:var(--space-xs);
  padding:var(--space-xxl);text-align:center;border:1px dashed var(--c-card-border);
  border-radius:var(--radius-card);color:var(--c-text-secondary)}
.jd__nopreview strong{font-size:var(--text-subhead)}
.jd__nopreview small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
/* Double-booking signal on the job form (e378) — a heads-up, never a block. */
.jf-crew__warn{margin:0 0 var(--space-xs);font-size:var(--text-caption);font-weight:600;
  color:var(--c-warning)}
.jf-crew__busy{font-size:9px;font-weight:800;font-style:normal;padding:1px 5px;border-radius:999px;
  background:var(--c-warning-tint);color:var(--c-warning)}
/* The duplicate-job nudge (e423) — a QUESTION under the customer, not a refusal above the form.
   Warning TINT rather than warning text: it is a thing to consider, and a red sentence beside a
   field people fill in every day is one they stop seeing by the second week. */
.jf-dupe{display:grid;gap:var(--space-xs)}
.jf-dupe:not(:empty){margin-top:var(--space-xs)}
.jf-dupe__row{display:flex;align-items:center;gap:var(--space-sm);width:100%;
  padding:var(--space-sm) var(--space-md);border:0;border-radius:var(--radius-md);
  background:var(--c-warning-tint);color:var(--c-text-primary);font:inherit;
  font-size:var(--text-caption);font-weight:600;text-align:left;cursor:pointer}
.jf-dupe__mark{color:var(--c-warning);font-weight:800}
.jf-dupe__go{margin-left:auto;color:var(--c-text-tertiary)}
/* Cancellation charge chips (e400) — three answers, not a free field, so the fee cannot exceed
   what is held and the refund cannot disagree with it. */
.su-chips{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-xs)}
.su-chip{padding:var(--space-sm) var(--space-md);border:0;border-radius:var(--radius-md);
  background:var(--c-input-fill);color:var(--c-text-secondary);font:inherit;font-size:var(--text-caption);
  font-weight:700;cursor:pointer}
.su-chip--on{background:var(--c-brand-primary);color:var(--c-on-brand)}
.su-refund{margin:0;font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
.su-owed{display:flex;gap:var(--space-xs);margin:var(--space-md) 0 0;font-size:var(--text-footnote);
  font-weight:600;color:var(--c-warning)}
/* Call history filters (activity e066/e068) — the picker beside the search, under the band whose
   cells set the same filter. */
.call-controls{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap;
  margin:var(--space-md) 0}
.call-search{max-width:260px}

/* ── Collect payment sheet ──────────────────────────────────────────────────
   The job's Collect verb and the invoice desk's both raise this. Card chrome rather than a form:
   every row is a way to ASK for money, and the one that writes money down sits last. */
.cp-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--c-card-border)}
.cp-summary__who{min-width:0}
.cp-summary__name{margin:0;font-size:var(--text-body);font-weight:600;color:var(--c-text-primary)}
.cp-summary__number{margin:2px 0 0;font-size:var(--text-caption2);font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.cp-summary__money{text-align:right}
.cp-summary__amount{margin:0;font-size:var(--text-title2);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.cp-summary__eyebrow{margin:2px 0 0;font-size:9px;font-weight:800;letter-spacing:.05em;color:var(--c-text-tertiary)}
.cp-lede{margin:var(--space-md) 0 var(--space-sm-md);font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.cp-card{margin-bottom:var(--space-sm-md);padding:var(--space-lg);background:var(--c-card-background-solid);border:1px solid var(--c-card-border);border-radius:var(--radius-md)}
.cp-card__head{min-width:0}
.cp-card__title{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.cp-card__sub{margin:2px 0 0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.cp-card__hint{margin:var(--space-sm-md) 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.cp-paylink{display:block}
.cp-paylink__actions{display:flex;flex-wrap:wrap;gap:var(--space-sm-md);margin-top:var(--space-md)}
.cp-paylink__actions>*{flex:1 1 180px;justify-content:center}
.cp-qr{display:flex;align-items:center;gap:var(--space-lg)}
.cp-qr__image{flex:0 0 auto;display:block;border-radius:var(--radius-md);background:#fff}  /* raw-color-ok: a QR is read by a phone camera — dark-on-white in every theme, as .qr-sheet__preview img is; a tinted code does not scan */
.cp-qr__say{min-width:0}
.cp-prepare{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}
.cp-prepare--failed .cp-card__title{color:var(--c-warning)}
.cp-options{padding:0;overflow:hidden}
.cp-option{display:flex;width:100%;align-items:center;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:none;border:0;border-top:1px solid var(--c-card-border);text-align:left;cursor:pointer;color:inherit}
.cp-option:first-child{border-top:0}
.cp-option:hover{background:var(--c-input-fill)}
.cp-option__say{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:1px}
.cp-option__title{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.cp-option__sub{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.cp-option__chev{flex:0 0 auto;font-size:var(--text-body);color:var(--c-text-tertiary)}
.cp-settled{margin-top:var(--space-lg);padding:var(--space-xl);text-align:center;background:var(--c-card-background-solid);border:1px solid var(--c-card-border);border-radius:var(--radius-md)}
.cp-settled__title{margin:0;font-size:var(--text-title3);font-weight:700;color:var(--c-brand-primary)}
.cp-settled__why{margin:var(--space-xs) 0 var(--space-md);font-size:var(--text-footnote);color:var(--c-text-secondary)}
/* The capability refusal. Same card as the settled state — it stands INSTEAD OF the flow, not
   above it — but neutral rather than brand-tinted: a lock is not an achievement. */
.cp-locked{margin-top:var(--space-lg);padding:var(--space-xl);text-align:center;background:var(--c-card-background-solid);border:1px solid var(--c-card-border);border-radius:var(--radius-md)}
.cp-locked__title{margin:0;font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary)}
.cp-locked__why{margin:var(--space-xs) 0 0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
/* The retainer's collection row. Stacked rather than gridded: the hint, the vault door, the
   test-key warning and the last-failure line are all consequences of the switch above them, and a
   column reads that way. */
.rf-collection{display:flex;flex-direction:column;gap:var(--space-xs)}
.rf-collection__toggle{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary);cursor:pointer}
.rf-collection__toggle:has(input:disabled){cursor:default;color:var(--c-text-tertiary)}
.rf-collection__hint{margin:0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.rf-collection__vault{align-self:flex-start;padding:0;background:none;border:0;font-size:var(--text-footnote);font-weight:600;color:var(--c-brand-primary);cursor:pointer}
.rf-collection__vault:disabled{color:var(--c-text-tertiary);cursor:default}
.rf-collection__warn{margin:0;font-size:var(--text-caption2);color:var(--c-warning)}
.rf-collection__failed{margin:0;font-size:var(--text-footnote);color:var(--c-danger)}
/* The retainer form's two header faces, and the stuck-date callout that stands beside them. */
.rf-hint{margin:0 0 var(--space-md);font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.rf-stuck{margin:0 0 var(--space-md);font-size:var(--text-footnote);color:var(--c-danger)}
/* Ends: a mode, whichever field that mode needs, and one line saying what it means in dates and
   counts rather than in settings. */
.rf-ends{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-xs)}
.rf-ends__mode{max-width:280px}
.rf-ends__field{max-width:200px}
.rf-ends__count{display:flex;align-items:center;gap:var(--space-sm);font-size:var(--text-subhead);color:var(--c-text-secondary)}
.rf-ends__count input{width:90px}
.rf-ends__line{margin:0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.rf-ends__line--warn{color:var(--c-warning)}
/* THE MOVE. One state, one sentence, one verb — and the state's tint is the only chrome that
   distinguishes a retainer that needs attention from one that does not. */
.rf-move{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-xs);margin-bottom:var(--space-lg);padding:var(--space-md);background:var(--c-card-background-solid);border:1px solid var(--c-card-border);border-radius:var(--radius-md)}
.rf-move__state{font-size:var(--text-caption2);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--c-text-tertiary)}
.rf-move__state--stalled,.rf-move__state--unreadableDate{color:var(--c-danger)}
.rf-move__state--asleep,.rf-move__state--dueNow{color:var(--c-warning)}
.rf-move__state--billing{color:var(--c-brand-primary)}
.rf-move__headline{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.rf-move__detail{margin:0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
/* The retainer ledger: three facts when there is money to report, one sentence when there is not. */
.rf-ledger{display:flex;flex-wrap:wrap;gap:var(--space-lg);margin-bottom:var(--space-md)}
.rf-ledger__fact{display:flex;flex-direction:column;gap:2px}
.rf-ledger__label{font-size:var(--text-caption2);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--c-text-tertiary)}
.rf-ledger__meta{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.rf-ledger__headline{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.rf-ledger__detail{margin:0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
/* The schedule, stated as what the engine will do. */
.rf-schedule{display:flex;flex-direction:column;gap:2px;margin-bottom:var(--space-md)}
.rf-schedule__line{margin:0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.rf-schedule__line--warn{color:var(--c-warning)}
/* The plan it bills. The drift is warning-tinted because only one of the two prices reaches the
   customer, and it is not the one on the plan record. */
.rf-plan{display:flex;flex-direction:column;align-items:flex-start;gap:2px;margin-bottom:var(--space-md)}
.rf-plan__name{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.rf-plan__term{margin:0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.rf-plan__drift{margin:var(--space-xs) 0 0;font-size:var(--text-caption2);color:var(--c-warning)}
.rf-plan__match{padding:0;background:none;border:0;font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary);cursor:pointer}
.rf-plan__match:disabled{color:var(--c-text-tertiary);cursor:default}
/* The invoice readiness card. Present only while something is unmet. */
.if-ready{display:flex;flex-direction:column;gap:var(--space-xs);margin-top:var(--space-md)}
.if-ready__summary{margin:0;font-size:var(--text-caption2);font-weight:700;color:var(--c-text-secondary)}
.if-ready__summary--warn{color:var(--c-warning)}
.if-ready__row{display:flex;align-items:baseline;gap:var(--space-sm);flex-wrap:wrap}
.if-ready__title{font-size:var(--text-footnote);font-weight:600;color:var(--c-text-primary)}
.if-ready__detail{flex:1 1 auto;min-width:0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.if-ready__fix{padding:0;background:none;border:0;font-size:var(--text-caption2);font-weight:700;color:var(--c-brand-primary);cursor:pointer}
.if-lock{margin:var(--space-md) 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
/* This job's money — what the ask being written joins. */
.if-money{display:flex;flex-direction:column;gap:2px;margin-top:var(--space-md);padding:var(--space-md);background:var(--c-card-background-solid);border:1px solid var(--c-card-border);border-radius:var(--radius-md)}
.if-money:empty{display:none}
.if-money__head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-md);margin-bottom:var(--space-xs)}
.if-money__label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.04em;color:var(--c-text-secondary)}
.if-money__caption{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.if-money__row{display:flex;justify-content:space-between;gap:var(--space-md);font-size:var(--text-footnote);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.if-money__row--total{margin-top:var(--space-xs);padding-top:var(--space-xs);border-top:1px solid var(--c-card-border);color:var(--c-text-primary);font-weight:700}
.if-money__row--total strong{color:var(--c-brand-primary)}
/* Who it goes to. The advice is advisory: it names what still works. */
.if-delivery{display:flex;flex-direction:column;gap:2px;margin-top:var(--space-md)}
.if-delivery:empty{display:none}
.if-delivery__head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-md)}
.if-delivery__label{font-size:var(--text-caption2);font-weight:700;letter-spacing:.04em;color:var(--c-text-secondary)}
.if-delivery__verdict{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.if-delivery__advice{margin:0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
/* The send rail — one shape per face of the ask. */
.if-rail{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-md)}
.if-rail:empty{display:none}
.if-rail__quiet{margin-left:auto}
/* An account panel row is a door to its invoice. */
.ar-inv-row:hover{background:var(--c-field-fill)}
/* THE LIEN RIGHT SHEET. Three named bands, each stating what it is for — the app's structure, and
   the reason the sheet reads as a legal record rather than a form. */
.lr-lede{margin:0 0 var(--space-md);font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.lr-band{margin-bottom:var(--space-lg)}
.lr-band__title{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.lr-band__sub{margin:2px 0 var(--space-sm);font-size:var(--text-caption2);color:var(--c-text-secondary)}
.lr-locked{display:flex;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) 0}
.lr-locked__label{font-size:var(--text-caption2);font-weight:600;color:var(--c-text-secondary)}
.lr-locked__value{font-size:var(--text-subhead);color:var(--c-text-primary)}
.lr-instruments{display:flex;flex-direction:column;gap:var(--space-sm)}
.lr-inst{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:var(--space-md)}
.lr-inst__toggle{display:flex;align-items:center;gap:var(--space-sm);cursor:pointer}
.lr-inst__name{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary)}
.lr-inst__state{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.lr-inst__due{display:flex;align-items:center;gap:var(--space-sm)}
.lr-inst__due-label{font-size:var(--text-caption2);color:var(--c-text-secondary);white-space:nowrap}
.lr-inst__due input{max-width:170px}
.lr-inst__acts{display:flex;justify-content:flex-end;min-width:0}
.lr-disclaimer{margin:var(--space-md) 0 0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
@media (max-width:680px){.lr-inst{grid-template-columns:1fr;gap:var(--space-xs)}}

/* THE PEEK PANEL — beside the roster, taking real space rather than covering it. */
.cust-roster-split{display:flex;align-items:flex-start;gap:var(--space-lg)}
.cust-roster-split__list{flex:1 1 auto;min-width:0}
.cust-peek[hidden]{display:none}
.cust-peek{flex:0 0 396px;width:396px;position:sticky;top:var(--space-lg);display:flex;flex-direction:column;max-height:calc(100vh - var(--space-xl));background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-card);overflow:hidden}
.cust-peek__head{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-lg);border-bottom:1px solid var(--c-border)}
.cust-peek__identity{display:flex;flex-direction:column;min-width:0}
.cust-peek__identity strong{font-size:var(--text-subhead);font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cust-peek__identity small{color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cust-peek__close{margin-left:auto;width:28px;height:28px;border:0;background:none;color:var(--c-text-tertiary);cursor:pointer;border-radius:var(--radius-sm)}
.cust-peek__close:hover{background:var(--c-control-fill)}
.cust-peek__body{flex:1 1 auto;overflow-y:auto;padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}
.cust-peek__reach{display:flex;gap:var(--space-sm)}
.cust-peek__verb{flex:1 1 0;padding:var(--space-sm);font-size:var(--text-caption);font-weight:700;background:none;border:1px solid var(--c-card-border);border-radius:var(--radius-md);color:var(--c-text-primary);cursor:pointer}
.cust-peek__verb:disabled{color:var(--c-text-tertiary);cursor:default}
.cust-peek__card{padding:var(--space-md);border:1px solid var(--c-card-border);border-radius:var(--radius-card)}
.cust-peek__card h3{margin:0 0 var(--space-xs);font-size:var(--text-caption2);letter-spacing:.06em;color:var(--c-text-tertiary)}
.cust-peek__row{display:flex;align-items:center;gap:var(--space-sm);margin:0;padding:1px 0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.cust-peek__row strong{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.cust-peek__row.is-warn strong{color:var(--c-warning)}
.cust-peek__collect{margin-left:var(--space-sm);padding:2px var(--space-sm);font-size:var(--text-caption2);font-weight:700;background:none;border:1px solid var(--c-card-border);border-radius:var(--radius-pill);color:var(--c-brand-primary);cursor:pointer}
.cust-peek__move{display:block;font-size:var(--text-subhead)}
.cust-peek__why{margin:2px 0 var(--space-sm);font-size:var(--text-footnote);color:var(--c-text-secondary)}
.cust-peek__composer{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}
.cust-peek__composer .form-input{flex:1 1 auto;min-width:0}
.cust-peek__refusal{margin:0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.cust-peek__result{flex:1 1 100%;margin:0;font-size:var(--text-caption2);color:var(--c-brand-primary)}
.cust-peek__foot{display:flex;align-items:center;gap:var(--space-lg);padding:var(--space-lg);border-top:1px solid var(--c-border)}
.cust-peek__foot small{margin-left:auto;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cust-peek__full{padding:0;font-size:var(--text-caption);font-weight:700;background:none;border:0;color:var(--c-brand-primary);cursor:pointer;text-decoration:none}
@media (max-width:1100px){.cust-peek{display:none}}

/* THE ROW'S QUICK VERBS — a floating bar on hover, and on keyboard focus, which hover alone
   would strand. Hidden rather than absent so the row's height never moves under the pointer. */
.cust-ledger__table td.cust-col-move,.cust-ledger__table td.cust-col-relationship{position:relative}
.cust-row__verbs{position:absolute;right:var(--space-sm);top:50%;transform:translateY(-50%);display:flex;gap:2px;padding:3px;background:var(--c-card-background);border:1px solid var(--c-card-border);border-radius:var(--radius-md);box-shadow:0 3px 8px rgba(0,0,0,.08);opacity:0;pointer-events:none;transition:opacity .12s ease}
.cust-row:hover .cust-row__verbs,.cust-row__verbs:focus-within{opacity:1;pointer-events:auto}
.cust-row__verb{display:grid;place-items:center;width:26px;height:26px;padding:0;background:none;border:0;border-radius:var(--radius-sm);color:var(--c-text-secondary);cursor:pointer}
.cust-row__verb:hover{background:var(--c-control-fill);color:var(--c-text-primary)}
.cust-row__verb svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
@media (hover:none){.cust-row__verbs{display:none}}
.msg__receipt--good{color:var(--c-success)}
.msg__receipt--bad{color:var(--c-danger)}
.msg__receipt--warn{color:var(--c-warning)}
.msg__receipt--brand{color:var(--c-brand-primary)}

/* THE CONVERSATION, ON THE CUSTOMER'S PAGE. */
.ch-messages{display:block}
.ch-messages__head{display:flex;align-items:baseline;gap:var(--space-sm);margin-bottom:var(--space-sm)}
.ch-messages__kicker{font-size:var(--text-caption2);letter-spacing:.06em;color:var(--c-text-tertiary)}
.ch-messages__verdict{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-messages__full{margin-left:auto;padding:0;font-size:var(--text-caption);font-weight:700;background:none;border:0;color:var(--c-brand-primary);cursor:pointer}
.ch-messages__body{display:flex;flex-direction:column;gap:var(--space-xs);max-height:420px;overflow-y:auto}
.ch-msg{max-width:80%;padding:var(--space-sm) var(--space-md);border-radius:var(--radius-lg)}
.ch-msg--theirs{align-self:flex-start;background:var(--c-control-fill)}
.ch-msg--ours{align-self:flex-end;background:var(--c-brand-tint)}
.ch-msg__body{font-size:var(--text-footnote);white-space:pre-wrap}
.ch-msg__meta{margin-top:2px;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-msg__receipt--good{color:var(--c-success)}
.ch-msg__receipt--bad{color:var(--c-danger)}
.ch-msg__receipt--warn{color:var(--c-warning)}
.ch-msg__receipt--brand{color:var(--c-brand-primary)}
.ch-msg__quiet,.ch-msg__notice{margin:0;padding:var(--space-sm) 0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.ch-msg__route{display:flex;align-items:center;gap:var(--space-sm);padding-top:var(--space-sm);font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-msg__route.is-warn{color:var(--c-warning)}
.ch-msg__add{padding:0;font-size:var(--text-caption);font-weight:700;background:none;border:0;color:var(--c-brand-primary);cursor:pointer}
.ch-msg__composer{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--space-sm);padding-top:var(--space-sm)}
.ch-msg__composer .form-input{flex:1 1 100%}
.ch-msg__voicemail{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}
.ch-msg__voicemail audio{max-width:220px;height:32px}
.ch-msg__duration{font-size:var(--text-caption2);font-variant-numeric:tabular-nums;color:var(--c-text-tertiary)}
.ch-messages__body--full{max-height:min(70vh,640px)}
.ch-job{display:flex;align-items:stretch;gap:var(--space-sm)}
.ch-job__open{flex:1 1 auto;min-width:0}
.ch-job__collect{align-self:center;padding:var(--space-xs) var(--space-md);font-size:var(--text-caption);font-weight:700;color:var(--c-inverse-text);background:var(--c-brand-primary);border:0;border-radius:var(--radius-pill);cursor:pointer}

/* The job thread's beats, in the relationship timeline. Derived, so no Remove verb. */
.ch-timeline__list--beats{margin-bottom:var(--space-md)}
.ch-timeline__item--beat{opacity:.92}
.ch-timeline__marker--beat{background:var(--c-brand-primary)}
.ch-domains{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-bottom:var(--space-sm)}
.ch-domain{padding:var(--space-xs) var(--space-md);font-size:var(--text-caption);font-weight:700;background:none;border:1px solid var(--c-card-border);border-radius:var(--radius-pill);color:var(--c-text-secondary);cursor:pointer}
.ch-domain.is-on{background:var(--c-brand-primary);border-color:var(--c-brand-primary);color:var(--c-inverse-text)}

/* POSSIBLY THIS CUSTOMER — jobs carrying the name without the link. */
.ch-unlinked{display:block}
.ch-unlinked__kicker{margin-bottom:var(--space-sm);font-size:var(--text-caption2);letter-spacing:.06em;color:var(--c-text-tertiary)}
.ch-unlinked__row{display:flex;align-items:center;gap:var(--space-smMd);padding:var(--space-sm) 0;border-top:1px solid var(--c-border)}
.ch-unlinked__row:first-of-type{border-top:0}
.ch-unlinked__mark{display:grid;place-items:center;width:20px;height:20px;flex:0 0 20px;border-radius:50%;background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption2);font-weight:700}
.ch-unlinked__what{display:flex;flex-direction:column;min-width:0}
.ch-unlinked__what small{color:var(--c-text-secondary);font-size:var(--text-caption2)}
.ch-unlinked__link{margin-left:auto;padding:var(--space-xs) var(--space-md);font-size:var(--text-caption);font-weight:700;color:var(--c-inverse-text);background:var(--c-brand-primary);border:0;border-radius:var(--radius-pill);cursor:pointer}

/* ATTACH A PLACEHOLDER — the picker, with its consequence above the search. */
.cust-attach{display:flex;flex-direction:column;gap:var(--space-sm)}
.cust-attach__why{margin:0;font-size:var(--text-footnote);color:var(--c-text-secondary)}
.cust-attach__list{display:flex;flex-direction:column;max-height:340px;overflow-y:auto}
.cust-attach__row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xs);font-size:var(--text-subhead);text-align:left;background:none;border:0;border-top:1px solid var(--c-border);color:var(--c-text-primary);cursor:pointer}
.cust-attach__row:first-child{border-top:0}
.cust-attach__row:hover{background:var(--c-control-fill)}
.cust-attach__row small{margin-left:auto;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cust-attach__none{margin:0;padding:var(--space-md) 0;font-size:var(--text-footnote);color:var(--c-text-tertiary)}
.ch-details__verb{margin-top:var(--space-xs);padding:0;font-size:var(--text-caption);font-weight:700;background:none;border:0;color:var(--c-brand-primary);cursor:pointer}
.ch-details__verb--danger{color:var(--c-danger)}
.if-queue{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--c-text-secondary);font-size:var(--text-caption)}
.if-queue__step{display:inline-flex;align-items:center;justify-content:center;min-width:24px;min-height:24px;border:1px solid var(--c-input-border);border-radius:var(--radius-row);background:var(--c-card-background);color:var(--c-text-primary);font:inherit;cursor:pointer}
.if-queue__step:disabled{color:var(--c-text-tertiary);cursor:default}
.if-queue__label{font-variant-numeric:tabular-nums}
.ch-relationship{margin-top:var(--space-md)}
.ch-gauge{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) 0}
.ch-gauge__ring{--pct:0;position:relative;flex:0 0 auto;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--ring) calc(var(--pct) * 1%),var(--c-control-fill) 0)}
.ch-gauge__ring::after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--c-surface)}
.ch-gauge__ring span{position:relative;font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums;color:var(--c-text-primary)}
.ch-gauge__ring--good{--ring:var(--c-brand-primary)}
.ch-gauge__ring--warn{--ring:var(--c-warning)}
.ch-gauge__ring--bad{--ring:var(--c-danger)}
.ch-gauge__say{display:flex;flex-direction:column;gap:1px;min-width:0}
.ch-gauge__say strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.ch-gauge__say small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-gauge__quiet{margin:0;padding:var(--space-sm) 0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-chips{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.ch-chip{display:inline-block;padding:3px var(--space-sm-md);border:0;border-radius:999px;font-size:var(--text-caption);font-weight:500;background:var(--c-control-fill);color:var(--c-text-secondary)}
button.ch-chip{cursor:pointer}
.ch-chip--brand{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.ch-chip--warn{background:var(--c-warning-tint);color:var(--c-warning)}
.ch-chip--info{background:var(--c-info-tint);color:var(--c-info)}
.ch-job__start{flex:0 0 auto;padding:3px var(--space-md);border:1.5px solid var(--c-brand-primary);border-radius:999px;background:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.ch-job__start:hover{background:var(--c-brand-tint)}
.ch-move__line{display:flex;align-items:center;gap:var(--space-sm)}
.ch-move__urgency{padding:2px var(--space-sm);border-radius:999px;background:var(--c-danger-tint);color:var(--c-danger);font-size:var(--text-caption2);font-weight:700;letter-spacing:.04em}
.ch-placeholder{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--c-warning);border-radius:var(--radius-lg);background:var(--c-warning-tint)}
.ch-placeholder__mark{flex:0 0 auto;font-size:var(--text-title3);color:var(--c-warning);line-height:1}
.ch-placeholder__say{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.ch-placeholder__say strong{font-size:var(--text-subhead);color:var(--c-text-primary)}
.ch-placeholder__say small{font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-placeholder__make{flex:0 0 auto;padding:var(--space-sm) var(--space-md);border:0;border-radius:999px;background:var(--c-brand-primary);color:var(--c-on-brand);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.ch-placeholder__archive{flex:0 0 auto;padding:var(--space-sm) 0;border:0;background:none;color:var(--c-text-secondary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.cd-closed{margin-top:var(--space-md);border-top:1px solid var(--c-separator);padding-top:var(--space-sm)}
.cd-closed__line{display:flex;align-items:center;gap:var(--space-sm);width:100%;padding:var(--space-xs) 0;border:0;background:none;text-align:left;cursor:pointer}
.cd-closed__mark{flex:0 0 auto;color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cd-closed__say{flex:1 1 auto;min-width:0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.cd-closed__say strong{color:var(--c-text-primary);font-weight:700}
.cd-closed__verb{flex:0 0 auto;font-size:var(--text-caption);font-weight:700;color:var(--c-brand-primary)}
.cd-closed__rows{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);opacity:.72}
.cd-closed__row{display:flex;align-items:center;gap:var(--space-sm)}
.cd-closed__what{display:flex;flex-direction:column;min-width:0;flex:1 1 auto}
.cd-closed__what strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.cd-closed__what small{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.cd-closed__amount{flex:0 0 auto;font-size:var(--text-caption);font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.ch-trail{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border-radius:var(--radius-sm);font-size:var(--text-caption);color:var(--c-text-tertiary)}
.ch-trail--good{background:var(--c-success-tint)}
.ch-trail--warn{background:var(--c-warning-tint)}
.ch-trail--quiet{background:var(--c-control-fill)}
.ch-trail__mark{flex:0 0 auto}
.ch-trail__say{flex:1 1 auto;min-width:0}
.ch-trail__verb{flex:0 0 auto;padding:0;border:0;background:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.ch-referred{display:flex;flex-direction:column;gap:var(--space-xs)}
.ch-referred__row{display:flex;align-items:center;gap:var(--space-sm)}
.ch-referred__dot{flex:0 0 auto;width:6px;height:6px;border-radius:50%;background:var(--c-text-tertiary)}
.ch-referred__dot--won{background:var(--c-success)}
.ch-referred__dot--lost{background:var(--c-text-tertiary)}
.ch-referred__dot--new{background:var(--c-info)}
.ch-referred__name{flex:1 1 auto;min-width:0;font-size:var(--text-caption);font-weight:500;color:var(--c-text-primary)}
.ch-referred__value{flex:0 0 auto;font-size:var(--text-caption2);font-variant-numeric:tabular-nums;color:var(--c-text-secondary)}
.ch-referred__status{flex:0 0 auto;font-size:var(--text-caption2);font-weight:700;color:var(--c-text-tertiary)}
.ch-referred__more{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-empty__d{display:block;margin-top:2px;font-size:var(--text-caption);color:var(--c-text-secondary)}
.ch-details__pick{margin-left:auto;display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border:0;border-radius:var(--radius-sm);background:none;color:var(--c-text-primary);font-size:var(--text-subhead);font-weight:500;cursor:pointer}
.ch-details__pick:hover{background:var(--c-control-fill)}
.ch-details__pick.is-warn{color:var(--c-warning)}
.ch-details__pick span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-lens-menu{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border:0;border-radius:var(--radius-sm);background:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.ch-lens-menu:hover{background:var(--c-brand-tint)}
.ch-lens-menu span{font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.ch-archived__writeoff{padding:var(--space-sm) var(--space-md);border:0;background:none;color:var(--c-danger);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.ch-archived__writeoff:hover{text-decoration:underline}
.cd-reg__badge{flex:0 0 auto;padding:2px var(--space-sm);border-radius:999px;background:var(--c-control-fill);color:var(--c-text-secondary);font-size:var(--text-caption2);font-weight:700}
.cd-reg__row.is-dim .cd-reg__total,.cd-reg__row.is-dim .cd-reg__what strong{color:var(--c-text-tertiary)}
.cd-reg__decide{flex:0 0 auto;padding:2px var(--space-sm);border-radius:999px;background:var(--c-warning-tint);color:var(--c-warning);font-size:var(--text-caption2);font-weight:700;cursor:pointer}
.ch-jobs__new{margin-left:auto;padding:2px var(--space-sm);border:0;border-radius:var(--radius-sm);background:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.ch-jobs__new:hover{background:var(--c-brand-tint)}
.cedit__sub{margin:-2px 0 var(--space-sm);font-size:var(--text-caption);color:var(--c-text-tertiary)}
.cedit__coach{display:flex;align-items:flex-start;gap:var(--space-sm);margin:0 0 var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);background:var(--c-warning-tint);font-size:var(--text-caption);color:var(--c-text-secondary)}
.cust-headline{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);margin:0;padding:var(--space-md);border-radius:var(--radius-lg);background:var(--c-surface);border:1px solid var(--c-separator);font-size:var(--text-subhead);color:var(--c-text-secondary)}
.cust-headline__dot{color:var(--c-text-tertiary)}
.cust-headline__act{padding:5px var(--space-sm);border:0;border-radius:var(--radius-sm);background:none;color:var(--c-warning);font-size:var(--text-subhead);font-weight:600;text-decoration:underline;cursor:pointer}
.cust-headline__act.is-active{background:var(--c-warning);color:var(--c-on-brand);text-decoration:none}
.cust-map-coverage__pin{margin-left:auto;padding:2px var(--space-sm);border:0;border-radius:var(--radius-sm);background:none;color:var(--c-brand-primary);font-size:var(--text-caption);font-weight:700;cursor:pointer}
.cust-map-coverage__pin:disabled{color:var(--c-text-tertiary);cursor:default}
.card-head{display:flex;align-items:baseline;gap:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--c-separator);margin-bottom:var(--space-sm-md)}
.card-head__kicker{flex:0 0 auto;font-size:var(--text-caption2);font-weight:700;letter-spacing:.06em;color:var(--c-brand-primary)}
.card-head--warn .card-head__kicker{color:var(--c-warning)}
.card-head--purple .card-head__kicker{color:var(--c-info)}
.card-head__verdict{flex:1 1 auto;min-width:0;font-size:var(--text-caption);color:var(--c-text-secondary)}
.card-head__verbs{flex:0 0 auto;display:flex;align-items:center;gap:var(--space-sm)}
.card-quiet{margin:0;padding:var(--space-md);border:1.2px dashed var(--c-separator);border-radius:var(--radius-lg);font-size:var(--text-caption);color:var(--c-text-secondary)}

/* ── The phase detail sheet — projects e203–e211 ─────────────────────────────
   The app's phase row opens this on a plain tap; the web had only a context menu, so a press did
   nothing. Everything here is read except the composer: editing stays on the row's Edit item, and
   two ways to change one phase is how two clients come to disagree about what it says. */
.pdx-head{display:grid;gap:10px}
.pdx-head__row{display:flex;align-items:center;gap:10px}
.pdx-chip{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;
  background:color-mix(in srgb, var(--c-text-secondary) 14%, transparent);color:var(--c-text-secondary)}
.pdx-chip--in_progress{background:color-mix(in srgb, var(--c-accent-blue) 14%, transparent);color:var(--c-accent-blue)}
.pdx-chip--complete{background:color-mix(in srgb, var(--c-brand-primary) 14%, transparent);color:var(--c-brand-primary)}
.pdx-chip--delayed,.pdx-chip--on_hold{background:color-mix(in srgb, var(--c-accent-orange) 16%, transparent);color:var(--c-accent-orange)}
.pdx-pct{margin-left:auto;font-size:var(--text-title3);font-weight:700;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
.pdx-bar{height:6px;border-radius:999px;background:var(--c-card-border);overflow:hidden}
.pdx-bar>span{display:block;height:100%;background:var(--c-brand-primary)}
.pdx-head__meta{display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:var(--text-caption);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.pdx-overdue{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--c-accent-red)}
.pdx-fields{display:flex;flex-wrap:wrap;gap:18px}
.pdx-field{display:grid;gap:2px}
.pdx-field span{font-size:10px;letter-spacing:.04em;color:var(--c-text-tertiary)}
.pdx-field strong{font-size:var(--text-caption);font-weight:600;color:var(--c-text-secondary);
  font-variant-numeric:tabular-nums}
.pdx-notes{margin:0;font-size:var(--text-subhead);color:var(--c-text-secondary);line-height:1.5}
.pdx-activity{margin-top:20px;display:grid;gap:10px}
.pdx-activity__head{display:flex;align-items:center;gap:8px}
.pdx-activity__head h4{margin:0;font-size:var(--text-subhead);font-weight:700;color:var(--c-text-primary)}
.pdx-count{margin-left:auto;font-size:var(--text-caption);font-weight:700;color:var(--c-text-secondary);
  font-variant-numeric:tabular-nums}
.pdx-quiet{margin:0;padding:14px 0;text-align:center;font-size:var(--text-caption);color:var(--c-text-tertiary)}
.pdx-quiet--warn{color:var(--c-accent-orange)}
.pdx-comment{display:grid;gap:3px;padding:10px 12px;border:1px solid var(--c-card-border);
  border-radius:10px;background:var(--c-card-background)}
.pdx-comment__head{display:flex;align-items:baseline;gap:8px}
.pdx-comment__head strong{font-size:var(--text-caption);color:var(--c-text-primary)}
.pdx-comment__head time{margin-left:auto;font-size:10px;color:var(--c-text-tertiary)}
.pdx-comment p{margin:0;font-size:var(--text-subhead);color:var(--c-text-secondary);line-height:1.5;
  overflow-wrap:anywhere}
.pdx-compose{display:flex;gap:8px}
.pdx-compose input{flex:1;min-width:0;padding:9px 12px;border:1px solid var(--c-card-border);
  border-radius:10px;background:var(--c-card-background);color:var(--c-text-primary);font:inherit;
  font-size:var(--text-subhead)}
.pdx-err{margin:0;font-size:var(--text-caption);color:var(--c-accent-red)}
.pdx-files{margin-top:20px;display:grid;gap:10px}
.pdx-files .pdx-activity__head #pdx-add{margin-left:8px}
.pdx-file{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--c-card-border);
  border-radius:10px;background:var(--c-card-background)}
.pdx-file__main{display:grid;gap:1px;min-width:0}
.pdx-file__main strong{font-size:var(--text-caption);color:var(--c-text-primary);overflow-wrap:anywhere}
.pdx-file__main strong a{color:var(--c-brand-primary);text-decoration:none}
.pdx-file__main strong a:hover{text-decoration:underline}
.pdx-file__main small{font-size:10px;color:var(--c-text-tertiary);font-variant-numeric:tabular-nums}
.pdx-file__drop{margin-left:auto;flex:none;min-height:32px;padding:0 10px;border:1px solid var(--c-card-border);
  border-radius:8px;background:transparent;color:var(--c-accent-red);font:inherit;
  font-size:var(--text-caption);cursor:pointer}
.pdx-file__drop:hover{border-color:var(--c-accent-red)}
/* The phase weather card — e207/e208. Absent entirely when the drawing has no coordinates or the
   forecast could not be read; the app draws nothing in those cases too, and a card reading "—°F"
   for a jobsite is a worse answer than no card. */
.pdx-weather{display:flex;align-items:center;gap:12px;margin-top:14px;padding:12px 14px;
  border:1px solid var(--c-card-border);border-radius:12px;background:var(--c-card-background)}
.pdx-weather--alert{border-color:color-mix(in srgb, var(--c-accent-orange) 45%, transparent)}
.pdx-weather__icon{font-size:26px;line-height:1;flex:none}
.pdx-weather__main{display:grid;gap:1px;min-width:0}
.pdx-weather__main small{font-size:10px;color:var(--c-text-tertiary)}
.pdx-weather__main strong{font-size:var(--text-subhead);font-weight:600;color:var(--c-text-primary);
  font-variant-numeric:tabular-nums}
.pdx-weather__alert{margin-left:auto;flex:none;font-size:11px;font-weight:700;letter-spacing:.03em;
  padding:4px 10px;border-radius:999px;color:var(--c-accent-orange);
  background:color-mix(in srgb, var(--c-accent-orange) 14%, transparent)}
/* The template picker's two steps — e221–e226. Choosing a template used to WRITE, laying down as
   many as ten phases with no preview and no way back but deleting them one at a time. */
.psx-tpl__step{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--c-text-tertiary)}
.psx-tpl__name{font-size:var(--text-headline);color:var(--c-text-primary)}
.psx-tpl__preview{display:grid;gap:6px;padding:12px 14px;border:1px solid var(--c-card-border);
  border-radius:12px;background:var(--c-card-background)}
.psx-tpl__label{font-size:var(--text-caption);font-weight:700;color:var(--c-text-secondary)}
.psx-tpl__line{display:flex;align-items:center;gap:9px;font-size:var(--text-subhead);
  color:var(--c-text-primary)}
.psx-tpl__line em{margin-left:auto;font-style:normal;font-size:var(--text-caption);
  color:var(--c-text-secondary);font-variant-numeric:tabular-nums}
.psx-tpl__dot{width:10px;height:10px;border-radius:50%;flex:none}
.psx-tpl__flag{color:var(--c-accent-orange);flex:none}
.psx-tpl__total{margin-top:2px;text-align:right;font-size:var(--text-caption);font-weight:700;
  color:var(--c-brand-primary);font-variant-numeric:tabular-nums}
/* The command bar's universal New — projects e106/e107. Its OWN slot, because the section's add
   control owns #topbar-actions and three views mount into that from inside themselves; two controls
   sharing one slot would clobber each other depending on render order. */
.dash-topbar__new{display:flex;align-items:center;margin-left:auto}
.dash-topbar__new:empty{display:none}
.dash-topbar__new + .dash-topbar__actions{margin-left:8px}

/* THE CAMPAIGN FORM'S SIDE RAIL — CampaignFormSheet+Rail.swift's three cards. Readiness, the live
   summary recomputed from the unsaved editor, and the next action. None of them writes anything. */
.cf-layout{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:var(--space-lg);align-items:start}
@media (max-width:900px){.cf-layout{grid-template-columns:minmax(0,1fr)}}
.cf-rail{display:flex;flex-direction:column;gap:var(--space-md);min-width:0}
.cf-rail__card{border:1px solid var(--c-card-border);border-radius:var(--radius-md);
  background:var(--c-card-background);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}
.cf-rail__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.cf-rail__count{font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;
  padding:2px var(--space-sm);border-radius:999px;background:var(--c-field-fill);color:var(--c-text-secondary)}
.cf-rail__count--on{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.cf-rail__row{display:flex;gap:var(--space-sm);align-items:flex-start}
.cf-rail__row small{display:block;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cf-rail__row strong{font-size:var(--text-caption);font-weight:600}
.cf-rail__tick{color:var(--c-text-tertiary);font-size:var(--text-caption)}
.cf-rail__row--done .cf-rail__tick{color:var(--c-brand-primary)}
.cf-rail__row--warn .cf-rail__tick{color:var(--c-warning)}
.cf-rail__glance{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--c-card-border);
  border-radius:var(--radius-md);overflow:hidden;background:var(--c-background-secondary)}
.cf-rail__glance div{padding:var(--space-sm);display:flex;flex-direction:column;gap:2px;
  border-right:1px solid var(--c-card-border);border-bottom:1px solid var(--c-card-border)}
.cf-rail__glance div:nth-child(2n){border-right:0}
.cf-rail__glance div:nth-last-child(-n+2){border-bottom:0}
.cf-rail__glance small{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.cf-rail__glance b{font-size:var(--text-subhead);font-variant-numeric:tabular-nums}
.cf-rail__next small{color:var(--c-text-secondary);font-size:var(--text-caption2);line-height:1.45}

/* THE CONTENT CALENDAR — contentCalendarCard's month grid, dot legend and selected-day list. */
.sp-cal{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-md)}
.sp-cal__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.sp-cal__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--space-xs)}
.sp-cal__wd{text-align:center;font-size:var(--text-caption2);font-weight:700;color:var(--c-text-tertiary);padding-bottom:var(--space-xs)}
.sp-cal__pad{min-height:56px}
.sp-cal__day{min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  gap:var(--space-xs);padding:var(--space-xs);border:1px solid transparent;border-radius:var(--radius-sm);
  background:transparent;color:var(--c-text-primary);font:inherit;font-variant-numeric:tabular-nums;cursor:pointer}
.sp-cal__day:hover{background:var(--c-field-fill)}
.sp-cal__day--today{background:var(--c-brand-tint)}
.sp-cal__day--on{border-color:var(--c-brand-primary);background:var(--c-brand-tint)}
.sp-cal__dots{display:flex;gap:3px;flex-wrap:wrap;justify-content:center;min-height:6px}
.sp-cal__dot{width:6px;height:6px;border-radius:50%;display:inline-block}
.sp-cal__dot--draft{background:var(--c-warning)}
.sp-cal__dot--scheduled{background:var(--c-accent-blue)}
.sp-cal__dot--published{background:var(--c-brand-primary)}
.sp-cal__legend{display:flex;gap:var(--space-md);flex-wrap:wrap;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.sp-cal__legend span{display:inline-flex;align-items:center;gap:var(--space-xs)}
.sp-cal__day-list{display:flex;flex-direction:column;gap:var(--space-xs);border-top:1px solid var(--c-card-border);padding-top:var(--space-md)}
.sp-cal__post{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);
  border:1px solid var(--c-card-border);border-radius:var(--radius-sm);background:var(--c-card-background);
  color:var(--c-text-primary);font:inherit;font-size:var(--text-caption);text-align:left;cursor:pointer}
.sp-cal__post:hover{background:var(--c-field-fill)}
.sp-cal__empty,.sp-cal__dropped{margin:0;font-size:var(--text-caption2);color:var(--c-text-tertiary)}
.sp-cal__dropped{color:var(--c-warning)}

/* THE CONTENT HUB'S GUIDANCE — Next best action, the quick ideas and the insight strip. */
.sp-guide{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--space-lg);padding:var(--space-md)}
@media (max-width:820px){.sp-guide{grid-template-columns:minmax(0,1fr)}}
.sp-guide__main{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0}
.sp-guide__kicker{font-size:var(--text-caption2);letter-spacing:.06em;text-transform:uppercase;color:var(--c-text-tertiary)}
.sp-guide__action{display:flex;gap:var(--space-md);align-items:flex-start}
.sp-guide__action small,.sp-guide__idea small{display:block;color:var(--c-text-secondary);font-size:var(--text-caption2);line-height:1.45}
.sp-guide__icon{width:34px;height:34px;flex:0 0 34px;border-radius:50%;background:var(--c-brand-tint);
  color:var(--c-brand-primary);display:inline-flex;align-items:center;justify-content:center;font-size:var(--text-caption)}
.sp-guide__hint{color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.sp-guide__insight{margin:var(--space-xs) 0 0;padding-top:var(--space-sm);border-top:1px solid var(--c-card-border);
  color:var(--c-text-secondary);font-size:var(--text-caption);line-height:1.5}
.sp-guide__ideas{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}
.sp-guide__idea{display:flex;gap:var(--space-sm);align-items:flex-start;padding:var(--space-xs) var(--space-sm);
  border:1px solid var(--c-card-border);border-radius:var(--radius-sm);background:var(--c-card-background);
  color:var(--c-text-primary);font:inherit;text-align:left;cursor:pointer}
.sp-guide__idea:hover{background:var(--c-field-fill)}
.sp-guide__idea strong{font-size:var(--text-caption);font-weight:600}

/* DESTINATION VARIATIONS — one row per selected platform, and the Customize sheet's media toggle. */
.pf-var{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);width:100%;
  padding:var(--space-sm) var(--space-md);margin-bottom:var(--space-xs);border:1px solid var(--c-card-border);
  border-radius:var(--radius-sm);background:var(--c-card-background);color:var(--c-text-primary);
  font:inherit;text-align:left;cursor:pointer}
.pf-var:hover{background:var(--c-field-fill)}
.pf-var small{display:block;color:var(--c-text-secondary);font-size:var(--text-caption2)}
.pf-var__hide{display:flex;gap:var(--space-sm);align-items:flex-start;padding:var(--space-sm);
  border:1px solid var(--c-card-border);border-radius:var(--radius-sm);cursor:pointer}
.pf-var__hide small{display:block;color:var(--c-text-tertiary);font-size:var(--text-caption2)}

/* THE COMPOSER'S PROGRESS HERO AND CALENDAR-READINESS CARD. */
.pf-steps{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;margin-bottom:var(--space-sm)}
.pf-step{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:var(--text-caption2);
  font-weight:600;color:var(--c-text-tertiary)}
.pf-step b{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:var(--c-field-fill);color:var(--c-text-tertiary);font-size:10px}
.pf-step--active{color:var(--c-text-primary)}
.pf-step--active b{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.pf-step--done{color:var(--c-brand-primary)}
.pf-step--done b{background:var(--c-brand-primary);color:var(--c-on-brand)}
.pf-steps__link{flex:1 1 18px;min-width:18px;height:2px;background:var(--c-card-border);border-radius:2px}
.pf-steps__link--on{background:var(--c-brand-primary)}
.pf-calready{border:1px solid var(--c-card-border);border-radius:var(--radius-md);padding:var(--space-md);
  display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-sm)}
.pf-calready__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}
.pf-calready__count{font-size:var(--text-caption2);font-weight:700;font-variant-numeric:tabular-nums;
  padding:2px var(--space-sm);border-radius:999px;background:var(--c-warning-tint,var(--c-field-fill));color:var(--c-warning)}
.pf-calready__count--on{background:var(--c-brand-tint);color:var(--c-brand-primary)}
.pf-calready__row{display:flex;gap:var(--space-sm);align-items:flex-start;font-size:var(--text-caption)}
.pf-calready__row small{display:block;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.pf-calready__row em{font-style:normal;font-weight:400;color:var(--c-text-tertiary);font-size:var(--text-caption2)}
.pf-calready__row--done>span:first-child{color:var(--c-brand-primary)}
.pf-calready__delivery{margin:0;padding-top:var(--space-sm);border-top:1px solid var(--c-card-border);
  font-size:var(--text-caption2);color:var(--c-warning)}
.pf-calready__delivery--ok{color:var(--c-brand-primary)}

/* THE OPTIMIZER'S READINESS ROWS, EMPTY FACE AND SETUP GUIDE. */
.ad-opt__ready-rows{list-style:none;margin:var(--space-sm) 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.ad-opt__ready-rows li{display:flex;gap:var(--space-xs);align-items:flex-start;font-size:var(--text-caption2);
  color:var(--c-text-tertiary)}
.ad-opt__ready-rows li.is-done>span:first-child{color:var(--c-brand-primary)}
.ad-opt__ready-rows b{display:block;font-weight:600;color:var(--c-text-secondary)}
.ad-opt__ready-rows small{display:block;color:var(--c-text-tertiary)}
.ad-opt__empty{margin-top:var(--space-sm);padding:var(--space-sm);border-radius:var(--radius-sm);
  background:var(--c-background-secondary);display:flex;flex-direction:column;gap:4px}
.ad-opt__empty small{color:var(--c-text-secondary);font-size:var(--text-caption2)}
.ad-opt__guide{list-style:none;margin:var(--space-xs) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--space-xs)}
.ad-opt__guide li{display:flex;gap:var(--space-sm);align-items:flex-start;font-size:var(--text-caption2)}
.ad-opt__guide b{width:18px;height:18px;flex:0 0 18px;border-radius:50%;background:var(--c-brand-tint);
  color:var(--c-brand-primary);display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:700}
.ad-opt__guide small{display:block;color:var(--c-text-tertiary)}

/* THE COMPOSER'S DELIVERY CAPABILITY LINE, and the mode each platform chip states. */
.pf-platform__mode{margin-left:4px;font-size:9px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:var(--c-text-tertiary)}
.pf-capability{display:flex;gap:var(--space-sm);align-items:flex-start;padding:var(--space-sm);
  border:1px solid var(--c-card-border);border-radius:var(--radius-sm);margin-bottom:var(--space-sm)}
.pf-capability small{display:block;color:var(--c-text-secondary);font-size:var(--text-caption2);line-height:1.45}
.pf-capability strong{font-size:var(--text-caption)}
.pf-capability>span:first-child{color:var(--c-warning)}
.pf-capability--ok>span:first-child{color:var(--c-brand-primary)}
.pf-capability button{margin-left:auto;flex:0 0 auto}

/* THE CONTENT TEMPLATES PICKER. */
.pf-templates{display:flex;flex-direction:column;gap:var(--space-xs);max-height:60vh;overflow-y:auto}
.pf-template{display:flex;flex-direction:column;gap:2px;padding:var(--space-sm) var(--space-md);text-align:left;
  border:1px solid var(--c-card-border);border-radius:var(--radius-sm);background:var(--c-card-background);
  color:var(--c-text-primary);font:inherit;cursor:pointer}
.pf-template:hover{background:var(--c-field-fill)}
.pf-template small{color:var(--c-text-secondary);font-size:var(--text-caption2);line-height:1.45}
.pf-template em{font-style:normal;color:var(--c-brand-primary);font-size:var(--text-caption2)}

/* THE COMPOSER MEDIA CARD. Two pools in one strip: saved URLs and files that upload on save. */
.pf-media{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}
.pf-media__sub{display:block;color:var(--c-text-secondary);font-size:var(--text-caption2);
  margin-bottom:var(--space-xs)}
.pf-media__strip{display:flex;gap:var(--space-sm);overflow-x:auto;width:100%;padding-bottom:2px}
.pf-media__cell{position:relative;flex:0 0 auto;margin:0;width:108px}
.pf-media__cell img{width:108px;height:82px;object-fit:cover;display:block;
  border-radius:var(--radius-sm);border:1px solid var(--c-card-border)}
.pf-media__cell--new img{border-style:dashed;border-color:var(--c-brand-primary)}
.pf-media__cell figcaption{color:var(--c-text-secondary);font-size:var(--text-caption2);
  text-align:center;margin-top:2px}
.pf-media__x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;line-height:1;
  border:none;border-radius:50%;background:var(--c-danger);color:var(--c-on-danger);  /* raw-color-ok: the glyph on a danger chip, as .ps__x sets it */
  font-size:var(--text-caption);cursor:pointer;font-family:inherit}
.pf-media__add{cursor:pointer;margin:0}
.pf-media__count{color:var(--c-text-secondary);font-size:var(--text-caption2);
  font-variant-numeric:tabular-nums}
.pf-media__count--full{color:var(--c-text-primary);font-weight:600}

/* The reminder register's listener cap, stated rather than left silent. */
.co-truncated{margin:var(--space-sm) 0 0;text-align:center;color:var(--c-text-tertiary);
  font-size:var(--text-caption)}

/* Drawing navigation and recovery controls remain reachable at phone widths. */
.de-canvas--pan,.de-canvas--pan.de-canvas--custom-crosshair{cursor:grab}
.de-canvas--pan:active{cursor:grabbing}
.de-zoom button,.de-canvas-notice button{border:1px solid var(--c-border-subtle);border-radius:6px;background:var(--c-surface-primary);color:var(--c-text-primary);font:inherit;cursor:pointer;padding:6px 9px;min-height:32px}
.de-canvas-notice{position:absolute;bottom:12px;left:64px;right:86px;z-index:5;width:fit-content;max-width:calc(100% - 150px);padding:8px 12px;border:1px solid var(--c-border-subtle);border-radius:9px;background:var(--c-surface-primary);color:var(--c-text-secondary);font:500 12px/1.45 var(--font-sans);box-shadow:var(--d-shadow-xs)}
.de-canvas-notice[hidden],.de-save-retry[hidden]{display:none}
.de-dialog-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.de button:focus-visible,.de input:focus-visible{outline:2px solid var(--c-brand-primary);outline-offset:2px}
.de-stage-wrap:fullscreen{height:100dvh;width:100vw}
@media(max-width:680px){.de-zoom{gap:4px}.de-zoom input{width:48px}.de-zoom strong{display:none}.de-context__job{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.de-context__sync{flex-shrink:0}.de-canvas-notice{left:10px;right:10px;bottom:60px;max-width:calc(100% - 20px);font-size:11px}}

.de-tool-hint{position:absolute;top:10px;left:58px;right:42px;pointer-events:none;z-index:3;width:fit-content;max-width:calc(100% - 100px);border-radius:7px;padding:5px 9px;background:var(--c-surface-primary);color:var(--c-text-secondary);font:500 11px/1.4 var(--font-sans);opacity:.94}
.de-tool-hint button{pointer-events:auto;border:1px solid var(--c-border-subtle);background:var(--c-surface-secondary);color:var(--c-text-primary);padding:5px 9px;min-height:32px;border-radius:5px;cursor:pointer}
.de-property-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}

.de-layer-editor__row{display:flex;align-items:center;flex-wrap:wrap;gap:12px;border-bottom:1px solid var(--c-border-subtle);padding:12px 0}
.de-layer-editor__row label{display:flex;align-items:center;gap:5px;font-size:12px}.de-layer-editor__row label:first-child{margin-right:auto;min-width:110px}

.de-tools button small{font:600 9px/1 var(--font-sans);white-space:nowrap}

.de-context__sync[data-state="error"]{color:var(--c-danger);border-color:var(--c-danger);background:var(--c-surface-primary)}
.de-context__sync[data-state="saving"]{color:var(--c-text-secondary);border-color:var(--c-border-subtle);background:var(--c-surface-primary)}

.de-shape-picker{flex:none;padding:0 5px}.de-shape-picker[hidden]{display:none}.de-shape-picker select{max-width:108px;border:1px solid var(--c-border-subtle);border-radius:6px;background:var(--c-surface-primary);color:var(--c-text-primary);font:600 11px var(--font-sans);min-height:34px;padding:4px}
@media(max-width:680px){.de-shape-picker select{max-width:82px}}

.de-transform-controls{margin-top:16px;padding-top:12px;border-top:1px solid var(--c-border-subtle)}.de-transform-controls summary{cursor:pointer;font-weight:600;margin-bottom:12px}

/* Drawing photo collection; media is separate from the canvas background. */
.de-photo-actions{display:flex;gap:8px;flex-wrap:wrap}
.de-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:16px}
.de-photo-card{min-width:0;border:1px solid var(--c-card-border);border-radius:12px;padding:10px}
.de-photo-card img{width:100%;height:150px;object-fit:contain;border-radius:6px;background:var(--c-background-secondary)}
.de-photo-card p{overflow-wrap:anywhere;margin:8px 0}
.de-photo-card small{display:block;color:var(--c-danger)}
.de-photo-card .btn{white-space:normal;width:100%;margin-top:8px}

/* Optional billing promotion entry stays compact until requested. */
.billing-promo{margin:20px 0}

/* Foregrounds follow the selected theme when a shared control changes fill. */
.po__tab--on .po__star,.dc-check--on{color:var(--c-on-brand)}





:where(input,textarea)::placeholder{color:var(--c-text-secondary);opacity:1}

/* Compact headers wrap contextual actions instead of pushing controls off-screen. */
@media(max-width:680px){
  .dash-topbar{height:auto;flex:0 0 auto;flex-wrap:wrap;padding-block:8px}
  .dash-topbar__title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dash-topbar__actions{max-width:100%;flex-wrap:wrap}
  .cmdbar{min-width:80px}
}


/* Owner console: website acquisition reports. */
.admin-acq{color:var(--d-text);font-size:13px;min-width:0}
.admin-acq *{box-sizing:border-box}
.admin-acq h3{font-size:15px;margin:0 0 14px}
.admin-acq p{color:var(--d-text-2);line-height:1.55;margin:8px 0}
.admin-acq button,.admin-acq select,.admin-acq input{font:inherit;color:var(--d-text);background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:7px;padding:9px 11px;max-width:100%}
.admin-acq button{cursor:pointer}
.admin-acq button:hover{border-color:var(--d-green)}
.admin-acq button:focus-visible,.admin-acq input:focus-visible,.admin-acq select:focus-visible{outline:2px solid var(--d-green);outline-offset:3px}
.admin-acq button[aria-selected=true],.admin-acq button[aria-pressed=true]{background:var(--d-green);color:var(--d-bg-2);font-weight:600}
.aq-toolbar,.aq-actions,.aq-dates{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.aq-toolbar{justify-content:space-between;margin-bottom:14px}
.aq-dates label{display:flex;gap:5px;align-items:center}
.aq-tabs{display:flex;gap:7px;flex-wrap:wrap;margin:20px 0}
.aq-tabs button{flex:1;min-width:110px}
.aq-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.aq-tile,.aq-panel{background:var(--d-card-bg);border:1px solid var(--d-border);border-radius:12px;padding:18px}
.aq-tile{display:flex;flex-direction:column;gap:8px}
.aq-tile>span{color:var(--d-text-2)}
.aq-tile strong{font-size:28px;line-height:1.1}
.aq-tile small{color:var(--d-text-2);line-height:1.4}
.aq-panel{margin-bottom:16px;min-width:0}
.aq-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.aq-ranked{list-style:none;margin:0;padding:0}
.aq-ranked li{display:flex;gap:12px;align-items:center;padding:9px 0;border-bottom:1px solid var(--d-border)}
.aq-ranked li>span:first-child{flex:1;min-width:0;overflow-wrap:anywhere}
.aq-ranked strong{min-width:32px;text-align:right}
.aq-bar{width:80px;height:6px;background:var(--d-border);border-radius:5px;overflow:hidden}
.aq-bar i{display:block;height:100%;background:var(--d-green)}
.aq-note{padding:12px 15px;border-left:3px solid var(--d-green);background:var(--d-bg-2);margin:12px 0;color:var(--d-text-2);line-height:1.6}
.aq-scroll{overflow:auto;margin-top:12px}
.aq-table{width:100%;border-collapse:collapse;text-align:left;white-space:nowrap}
.aq-table th,.aq-table td{padding:11px 10px;border-bottom:1px solid var(--d-border)}
.aq-table th{font-size:12px;color:var(--d-text-2);font-weight:500}
.aq-table td button{padding:4px 0;border:none;color:var(--d-green);background:none;text-align:left}
.aq-table td:not(:first-child){font-variant-numeric:tabular-nums}
.aq-filter{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:12px 0}
.aq-filter label{display:flex;align-items:center;gap:7px}
.aq-error{border-left:3px solid var(--d-red);padding:14px}
.aq-muted{color:var(--d-text-2);font-size:12px}
.aq-builder{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:15px 0}
.aq-builder label{display:flex;flex-direction:column;gap:6px}
.admin-acq summary{cursor:pointer;font-weight:600;padding:4px 0}
.aq-chart{display:flex;align-items:end;gap:3px;height:100px;margin:16px 0}
.aq-chart i{display:block;flex:1;background:var(--d-green);min-width:2px;border-radius:3px 3px 0 0}
.aq-between{display:flex;justify-content:space-between;gap:8px}
.aq-exclusion{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:12px 0}
.aq-exclusion input{accent-color:var(--d-green)}

.aq-table td:first-child{white-space:normal;min-width:155px;max-width:280px}
.aq-table td:first-child button{white-space:normal}
.aq-table th:first-child{white-space:normal}

@media(max-width:650px){.aq-tabs button{flex:1 1 40%}
.aq-grid{grid-template-columns:1fr}
.aq-panel{padding:13px}
.aq-bar{width:42px}
.aq-builder{grid-template-columns:1fr}
.aq-toolbar{align-items:flex-start}
.aq-dates label{flex-direction:column;align-items:start}
.aq-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
.aq-tile{padding:14px}
.aq-tile strong{font-size:24px}
}
