@import url("/static/inheris-kit/inheris-fonts.css");
  :root {
    --navy:#213D51; --turq:#0D9B97; --teal:#85B6B4; --green:#D1F2BD;
    --mist:#E9F6FD; --slate:#4E5B62; --line:#D6DEE2; --ink:#091616;
  }
  * { box-sizing:border-box; }
  body { margin:0; font-family:'Nunito Sans',-apple-system,sans-serif; color:var(--ink);
    background:#f6fafc; font-size:15px; line-height:1.5; }
  h1,h2,h3 { font-family:'Nunito','Nunito Sans',sans-serif; color:var(--navy); margin:0 0 .5em; }
  button { font:inherit; cursor:pointer; }
  .btn { background:var(--turq); color:#fff; border:none; border-radius:999px;
    padding:9px 20px; font-weight:700; }
  .btn:hover { filter:brightness(1.08); }
  .btn.ghost { background:#fff; color:var(--navy); border:1.5px solid var(--line); }
  .btn.ghost.danger { color:#B42318; border-color:#F2C9C4; }
  .btn.ghost.danger:hover { background:#B42318; color:#fff; border-color:#B42318; filter:none; }
  .btn:disabled { opacity:.5; cursor:not-allowed; filter:none; }
  .btn.ghost.danger:disabled:hover { background:#fff; color:#B42318; border-color:#F2C9C4; }
  .cp-dupe-hint { background:#FBF3E2; border:1px solid #EAD9AE; color:#7A5B12; border-radius:10px;
    padding:8px 12px; margin-bottom:12px; font-size:.85rem; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
  .dupe-group { border:1px solid var(--line); border-radius:10px; padding:12px 14px; margin-bottom:12px; }
  .dupe-reason { font-size:.72rem; font-weight:800; letter-spacing:.04em; text-transform:uppercase; color:var(--slate); margin-bottom:8px; }
  .dupe-row { display:flex; align-items:center; gap:10px; padding:6px 0; border-bottom:1px solid var(--line); cursor:pointer; }
  .dupe-row:last-of-type { border-bottom:none; }
  .dupe-row .dupe-nm { font-weight:700; }
  .dupe-row .dupe-meta { color:var(--slate); font-size:.82rem; }
  .dupe-actions { display:flex; align-items:center; gap:10px; margin-top:10px; }
  .dupe-actions .btn { margin-left:auto; }
  .btn.small { padding:5px 14px; font-size:.85rem; }
  input, select, textarea { font:inherit; padding:8px 10px; border:1px solid var(--line);
    border-radius:8px; width:100%; background:#fff; color:var(--ink); }
  input:focus, select:focus, textarea:focus { outline:none; border-color:var(--turq);
    box-shadow:0 0 0 3px #0d9b9722; }
  label { font-size:.82rem; font-weight:700; color:var(--navy); display:block; margin-bottom:4px; }
  a { color:var(--turq); }

  header.top { background:linear-gradient(105deg,var(--turq),#0b7d7a 60%,var(--navy));
    color:#fff; padding:14px 26px; display:flex; align-items:center; justify-content:space-between; }
  header.top .brand { display:flex; align-items:center; gap:11px; }
  header.top .brand img { width:30px; height:30px; filter:brightness(0) invert(1); }
  header.top h1 { color:#fff; font-size:1.15rem; margin:0; }
  header.top .sub { color:#d3fffb; font-size:.8rem; font-weight:600; }
  header.top .who { color:#eafffe; font-size:.85rem; margin-right:12px; }
  .switch-app { display:inline-flex; align-items:center; gap:6px; color:#fff; text-decoration:none;
    border:1px solid rgba(255,255,255,.55); border-radius:999px; padding:5px 14px; font-size:.85rem;
    font-weight:700; margin-right:14px; white-space:nowrap; transition:background .15s,color .15s; }
  .switch-app:hover { background:#fff; color:var(--navy); }
  .switch-app .swap { font-size:1rem; line-height:1; }
  nav.tabs { display:flex; gap:4px; background:#fff; border-bottom:1px solid var(--line);
    padding:0 18px; flex-wrap:wrap; }
  nav.tabs button { background:none; border:none; padding:13px 16px; font-weight:700;
    color:var(--slate); border-bottom:3px solid transparent; }
  nav.tabs button.active { color:var(--turq); border-bottom-color:var(--turq); }
  /* Claire and Athena are agents, not data tabs: present each as a pill with a
     small portrait. Active state fills turquoise instead of the underline. */
  nav.tabs button.agent-tab { display:inline-flex; align-items:center; gap:7px; align-self:center;
    padding:5px 15px 5px 6px; margin:0 0 0 8px; border:1.5px solid var(--teal); border-radius:999px;
    background:var(--mist); color:var(--navy); }
  nav.tabs button.agent-tab img { width:24px; height:24px; border-radius:50%; object-fit:cover;
    border:1px solid #fff; }
  nav.tabs button.agent-tab.active { background:var(--turq); color:#fff; border-color:var(--turq); }
  /* Desktop-only console: fluid width, no artificial gutter. Padding scales
     gently with the viewport so ultrawide monitors get the full canvas. */
  main { padding:26px clamp(30px, 2.6vw, 52px); max-width:none; margin:0; }
  .panel { display:none; } .panel.active { display:block; }
  /* Calendar tab */
  .cal-grid { display:grid; grid-template-columns:1fr 1fr; gap:4px 16px; }
  .cal-grid .cal-wide { grid-column:1 / -1; }
  @media (max-width:560px){ .cal-grid { grid-template-columns:1fr; } }
  .cal-day { font-family:'Nunito',sans-serif; font-weight:800; color:var(--navy); font-size:.92rem;
             margin:16px 0 6px; padding-bottom:5px; border-bottom:1px solid var(--line); }
  .cal-ev { display:flex; gap:14px; padding:9px 2px; border-bottom:1px solid var(--mist); }
  .cal-ev .when { min-width:140px; color:var(--slate); font-size:.85rem; font-variant-numeric:tabular-nums; }
  .cal-ev .what { flex:1; }
  .cal-ev .what .t { font-weight:700; color:var(--ink); }
  .cal-ev .what .m { font-size:.78rem; color:var(--slate); margin-top:2px; }
  .cal-ev .acts { display:flex; gap:6px; opacity:0; transition:opacity .1s; }
  .cal-ev:hover .acts { opacity:1; }
  .cal-banner { padding:10px 14px; border-radius:10px; font-size:.9rem; margin-bottom:2px; }
  .cal-banner.ok { background:#EEF5E5; color:#3F6B2A; border:1px solid #cfe3bd; }
  .cal-banner.warn { background:#FBF4E4; color:#8A6414; border:1px solid #ecdcb0; }

  /* --- Full calendar (Day / Week / Month / Agenda) --- */
  .cal-app { display:grid; grid-template-columns:232px 1fr; gap:18px; align-items:start; }
  @media (max-width:860px){ .cal-app { grid-template-columns:1fr; } .cal-side { order:2; } }
  .cal-side { display:flex; flex-direction:column; gap:16px; }
  .cal-side .btn.create { width:100%; }
  /* Mini month */
  .cal-mini .mini-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
  .cal-mini .mini-title { font-family:'Nunito',sans-serif; font-weight:800; color:var(--navy); font-size:.9rem; }
  .cal-mini .mini-nav { background:none; border:0; cursor:pointer; color:var(--slate); font-size:1rem; padding:2px 6px; border-radius:6px; }
  .cal-mini .mini-nav:hover { background:var(--mist); color:var(--navy); }
  .cal-mini table { width:100%; border:0; border-radius:0; background:transparent; }
  .cal-mini th, .cal-mini td { padding:0; border:0; background:transparent; text-align:center; }
  .cal-mini th { font-size:.62rem; color:var(--slate); font-weight:700; letter-spacing:0; text-transform:none; padding-bottom:2px; }
  .cal-mini td button { width:26px; height:26px; border:0; background:none; border-radius:50%; cursor:pointer;
      font-size:.74rem; color:var(--ink); font-variant-numeric:tabular-nums; }
  .cal-mini td button:hover { background:var(--mist); }
  .cal-mini td button.other { color:#b9c2c9; }
  .cal-mini td button.today { background:var(--turq); color:#fff; font-weight:800; }
  .cal-mini td button.sel { outline:2px solid var(--turq); }
  /* Calendar toggles list */
  .cal-cals .cc-group { font-size:.68rem; text-transform:uppercase; letter-spacing:.06em; color:var(--slate);
      font-weight:800; margin:4px 0 6px; }
  .cc-item { display:flex; align-items:center; gap:8px; padding:3px 0; cursor:pointer; font-size:.86rem; color:var(--ink); }
  .cc-item input { width:auto; margin:0; }
  .cc-box { width:14px; height:14px; border-radius:4px; flex:0 0 auto; border:1px solid rgba(0,0,0,.12); }
  .cc-item .cc-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  /* Main pane header */
  .cal-head { display:flex; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
  .cal-head .cal-title { font-family:'Nunito',sans-serif; font-weight:800; color:var(--navy); font-size:1.15rem;
      min-width:160px; }
  .cal-nav-btn { width:32px; height:32px; border:1px solid var(--line); background:#fff; border-radius:8px; cursor:pointer;
      color:var(--slate); font-size:1rem; display:inline-flex; align-items:center; justify-content:center; }
  .cal-nav-btn:hover { border-color:var(--turq); color:var(--navy); }
  .cal-seg { display:inline-flex; border:1px solid var(--line); border-radius:9px; overflow:hidden; background:#fff; }
  .cal-seg button { border:0; background:none; padding:7px 13px; cursor:pointer; font-size:.85rem; color:var(--slate);
      font-weight:700; border-left:1px solid var(--line); }
  .cal-seg button:first-child { border-left:0; }
  .cal-seg button.on { background:var(--navy); color:#fff; }
  /* Shared surface */
  .cal-surface { border:1px solid var(--line); border-radius:12px; overflow:hidden; background:#fff; }
  /* Month grid */
  .mgrid { display:grid; grid-template-columns:repeat(7,1fr); }
  .mgrid .mh { text-align:right; padding:7px 10px; font-size:.7rem; font-weight:800; text-transform:uppercase;
      letter-spacing:.05em; color:var(--navy); background:var(--mist); border-bottom:1px solid var(--line); }
  .mcell { min-height:104px; border-right:1px solid var(--line); border-bottom:1px solid var(--line);
      padding:4px 5px; display:flex; flex-direction:column; gap:2px; cursor:pointer; position:relative; }
  .mcell:nth-child(7n){ border-right:0; }
  .mcell:hover { background:#fbfdfe; }
  .mcell.other { background:#fafbfc; }
  .mcell .mdate { align-self:flex-end; font-size:.78rem; color:var(--slate); font-variant-numeric:tabular-nums;
      width:22px; height:22px; display:flex; align-items:center; justify-content:center; border-radius:50%; }
  .mcell.other .mdate { color:#b9c2c9; }
  .mcell.today .mdate { background:var(--turq); color:#fff; font-weight:800; }
  .chip { display:flex; align-items:center; gap:5px; font-size:.74rem; line-height:1.25; padding:1px 5px;
      border-radius:5px; cursor:pointer; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; color:#25323b; }
  .chip:hover { filter:brightness(.94); }
  .chip .dot { width:7px; height:7px; border-radius:50%; flex:0 0 auto; }
  .chip.timed { background:transparent; padding-left:2px; }
  .chip.timed .tm { color:var(--slate); font-variant-numeric:tabular-nums; }
  .chip.allday { color:#fff; }
  .mcell .more { font-size:.7rem; color:var(--slate); font-weight:700; padding:0 4px; }
  .mcell .more:hover { color:var(--turq); }
  /* Time grid (week + day) */
  .tgrid-wrap { max-height:640px; overflow:auto; }
  .tgrid-head { display:grid; position:sticky; top:0; z-index:3; background:#fff; border-bottom:1px solid var(--line); }
  .tgrid-head .gutter-h { border-right:1px solid var(--line); }
  .tgrid-head .dcol { text-align:center; padding:6px 4px; border-right:1px solid var(--line); }
  .tgrid-head .dcol:last-child { border-right:0; }
  .tgrid-head .dow { font-size:.68rem; text-transform:uppercase; letter-spacing:.05em; color:var(--slate); font-weight:800; }
  .tgrid-head .dnum { font-family:'Nunito',sans-serif; font-weight:800; font-size:1.15rem; color:var(--navy);
      width:34px; height:34px; line-height:34px; margin:2px auto 0; border-radius:50%; }
  .tgrid-head .dcol.today .dnum { background:var(--turq); color:#fff; }
  .allday-row { display:grid; border-bottom:1px solid var(--line); background:#fcfdfe; }
  .allday-row .gutter-h { border-right:1px solid var(--line); font-size:.62rem; color:var(--slate); padding:3px 6px; text-align:right; }
  .allday-row .adcol { border-right:1px solid var(--line); padding:2px 3px; display:flex; flex-direction:column; gap:2px; }
  .allday-row .adcol:last-child { border-right:0; }
  .tgrid { display:grid; position:relative; }
  .tgrid .gutter { border-right:1px solid var(--line); }
  .tgrid .hrow { height:44px; border-bottom:1px solid #eef1f3; position:relative; }
  .tgrid .gutter .hrow { padding-right:6px; }
  .tgrid .gutter .hlabel { position:absolute; top:-7px; right:6px; font-size:.66rem; color:var(--slate); background:#fff; }
  .tcol { border-right:1px solid var(--line); position:relative; cursor:pointer; }
  .tcol:last-child { border-right:0; }
  .tev { position:absolute; left:2px; right:2px; border-radius:6px; padding:2px 6px; font-size:.74rem; overflow:hidden;
      cursor:pointer; color:#25323b; border-left:3px solid rgba(0,0,0,.25); box-shadow:0 1px 2px rgba(33,61,81,.12); }
  .tev .tt { font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .tev .tm { font-size:.68rem; opacity:.8; }
  .nowline { position:absolute; left:0; right:0; height:2px; background:#E4572E; z-index:4; pointer-events:none; }
  .nowline::before { content:''; position:absolute; left:-4px; top:-3px; width:8px; height:8px; border-radius:50%; background:#E4572E; }

  /* --- Email (Gmail) tab --- */
  .mail-app { display:grid; grid-template-columns:190px 340px 1fr; gap:0; align-items:stretch;
      border:1px solid var(--line); border-radius:12px; overflow:hidden; background:#fff; min-height:560px; }
  @media (max-width:1000px){ .mail-app { grid-template-columns:170px 1fr; } .mail-reader { display:none; } .mail-app.reading .mail-list { display:none; } .mail-app.reading .mail-reader { display:flex; grid-column:2; } }
  .mail-side { border-right:1px solid var(--line); padding:14px 10px; display:flex; flex-direction:column; gap:4px; background:#fafbfc; }
  .mail-side .btn.compose { width:100%; margin-bottom:10px; }
  .mail-lbl { display:flex; align-items:center; justify-content:space-between; gap:6px; padding:7px 10px; border-radius:8px;
      cursor:pointer; font-size:.88rem; color:var(--ink); }
  .mail-lbl:hover { background:var(--mist); }
  .mail-lbl.on { background:var(--navy); color:#fff; font-weight:700; }
  .mail-lbl .ct { font-size:.72rem; opacity:.8; font-variant-numeric:tabular-nums; }
  .mail-search { padding:10px; border-bottom:1px solid var(--line); }
  .mail-search input { width:100%; }
  .mail-list { border-right:1px solid var(--line); overflow-y:auto; max-height:640px; display:flex; flex-direction:column; }
  .mrow { padding:10px 13px; border-bottom:1px solid var(--mist); cursor:pointer; display:flex; flex-direction:column; gap:2px; }
  .mrow:hover { background:#fbfdfe; }
  .mrow.sel { background:#eef6f8; box-shadow:inset 3px 0 0 var(--turq); }
  .mrow.unread .mr-from, .mrow.unread .mr-subj { font-weight:800; color:var(--ink); }
  .mrow .mr-top { display:flex; justify-content:space-between; gap:8px; align-items:baseline; }
  .mrow .mr-from { font-size:.86rem; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .mrow .mr-date { font-size:.72rem; color:var(--slate); white-space:nowrap; flex:0 0 auto; }
  .mrow .mr-subj { font-size:.83rem; color:var(--navy); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .mrow .mr-snip { font-size:.78rem; color:var(--slate); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .mrow .star { color:#E8B93B; }
  /* DRM link state on the live Gmail list + Calendar */
  .mrow.drm-linked { box-shadow:inset 3px 0 0 var(--drmc, #0b7285); }
  .mrow.drm-known  { box-shadow:inset 3px 0 0 #8a6d3b; }
  .drm-chip { display:inline-block; font-size:.62rem; font-weight:800; letter-spacing:.04em;
    text-transform:uppercase; color:#fff; background:var(--drmc,#0b7285); border-radius:6px;
    padding:1px 6px; margin-left:6px; vertical-align:middle; white-space:nowrap; }
  .drm-chip.known { background:#8a6d3b; }
  .drm-chip.funder { background:#5b6b76; }
  .drm-chip.add { background:transparent; color:#8a6d3b; border:1px dashed #c8b58f; cursor:pointer; }
  .mr-drmbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:8px 20px;
    border-bottom:1px solid var(--line); background:#f7fbfc; font-size:.82rem; }
  .mr-drmbar .lbl { color:var(--slate); }
  .drm-tag { display:inline-flex; align-items:center; gap:5px; background:#eef6f8; color:var(--navy);
    border:1px solid var(--mist); border-radius:999px; padding:2px 9px; font-size:.76rem; }
  .drm-tag .x { cursor:pointer; color:var(--slate); font-weight:800; }
  .ct-badge.google { background:#e8f0ea; color:#3F6B2A; }
  /* DRM link modal */
  #dlg-drmlink .dl-picker { display:flex; gap:8px; margin:8px 0; }
  #dlg-drmlink .dl-results { max-height:180px; overflow:auto; border:1px solid var(--mist);
    border-radius:8px; margin-top:6px; }
  #dlg-drmlink .dl-res { padding:7px 10px; cursor:pointer; border-bottom:1px solid var(--mist); font-size:.85rem; }
  #dlg-drmlink .dl-res:hover { background:#eef6f8; }
  #dlg-drmlink .dl-chosen { display:flex; flex-wrap:wrap; gap:6px; margin-top:10px; min-height:24px; }
  /* Linked-correspondence list on gift/ack detail */
  .drm-linkrow { display:flex; gap:8px; align-items:baseline; padding:6px 0; border-bottom:1px solid var(--mist);
    cursor:pointer; font-size:.84rem; }
  .drm-linkrow .k { font-size:.68rem; font-weight:800; text-transform:uppercase; color:#fff;
    background:#0b7285; border-radius:5px; padding:1px 5px; }
  .drm-linkrow .k.cal { background:#a03d6e; }
  .mail-reader { display:flex; flex-direction:column; overflow:hidden; }
  .mail-reader .mr-head { padding:16px 20px 12px; border-bottom:1px solid var(--line); }
  .mail-reader .mr-h-subj { font-family:'Nunito',sans-serif; font-weight:800; color:var(--navy); font-size:1.15rem; margin-bottom:8px; }
  .mail-reader .mr-h-meta { font-size:.82rem; color:var(--slate); line-height:1.5; }
  .mail-reader .mr-h-meta b { color:var(--ink); font-weight:700; }
  .mail-acts { display:flex; gap:8px; flex-wrap:wrap; margin-top:12px; align-items:center; }
  .mail-body { flex:1; width:100%; border:0; min-height:340px; background:#fff; }
  .mail-body-text { flex:1; padding:16px 20px; white-space:pre-wrap; font-size:.9rem; color:var(--ink); line-height:1.55; overflow:auto; }
  .mail-empty { display:flex; align-items:center; justify-content:center; color:var(--slate); font-size:.9rem; height:100%; padding:40px; text-align:center; }
  .mail-attach { display:inline-flex; align-items:center; gap:5px; font-size:.78rem; color:var(--slate); background:var(--mist);
      border:1px solid var(--line); border-radius:6px; padding:3px 8px; margin:2px 4px 0 0; }
  .mail-imgbar { background:#FBF4E4; border:1px solid #ecdcb0; color:#8A6414; font-size:.8rem; padding:6px 12px;
      display:flex; align-items:center; gap:10px; }
  /* Consistent vertical rhythm between the stacked sections of every tab, so
     nothing butts up against the next block. Block-margin collapse folds any
     per-element margins into this, keeping the spacing uniform app-wide. */
  .panel.active > * + * { margin-top:22px; }
  /* Sortable table headers: click to sort, arrow shows direction. */
  th.th-sort { cursor:pointer; user-select:none; white-space:nowrap; }
  th.th-sort:hover { color:var(--turq); }
  th.th-sort.sorted { color:var(--turq); }
  th.th-sort.sorted[data-dir="asc"]::after { content:" \2191"; font-weight:800; }
  th.th-sort.sorted[data-dir="desc"]::after { content:" \2193"; font-weight:800; }

  table { width:100%; border-collapse:collapse; background:#fff; border:1px solid var(--line);
    border-radius:12px; overflow:hidden; }
  th { text-align:left; font-size:.83rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em;
    color:var(--navy); background:var(--mist); padding:10px 13px; }
  td { padding:9px 12px; border-top:1px solid var(--line); vertical-align:top; }
  tr.click:hover { background:var(--mist); cursor:pointer; }
  .cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:14px;
    margin-bottom:20px; }
  .card { background:#fff; border:1px solid var(--line); border-top:4px solid var(--turq);
    border-radius:12px; padding:18px 20px; }
  .card .num { font-size:1.55rem; font-weight:800; color:var(--navy); font-family:'Nunito',sans-serif; }
  .card .lbl { font-size:.8rem; color:var(--slate); }
  .card-spark{display:block;width:100%;height:22px;margin-top:8px;color:var(--turq);opacity:.8}
  .card-delta{display:inline-block;margin-top:5px;font-size:11px;font-weight:800;letter-spacing:.02em;color:#1e9e57}
  .inh-cmd .card-spark{color:var(--inh-accent)} .inh-cmd .card-delta{color:#34D399}
  #chart-month .mc-grid{stroke:#E9F6FD} #chart-month .mc-axl{fill:#4E5B62}
  .inh-cmd #chart-month .mc-grid{stroke:#1E3A44} .inh-cmd #chart-month .mc-axl{fill:#7E96A1}
  .card.click:hover { border-color:var(--turq); cursor:pointer; }
  /* State-driven tiles: amber when something needs attention, green when clear. */
  .card.attention { border-top-color:#C99A2E; background:#FBF4E4; }
  .card.attention .num { color:#8A6414; }
  .card.attention:hover { border-color:#C99A2E; }
  .card.clearstate { border-top-color:#5A8F3C; background:#EEF5E5; }
  .card.clearstate .num { color:#3F6B2A; }
  .card.clearstate:hover { border-color:#5A8F3C; }
  .toolbar { display:flex; gap:10px; margin-bottom:14px; align-items:center; flex-wrap:wrap; }
  .toolbar input, .toolbar select { width:auto; }
  /* Reporting workspace */
  .rep-grid { display:grid; grid-template-columns:minmax(320px,1fr) minmax(340px,1.2fr); gap:14px; margin:14px 0; }
  @media (max-width:1000px) { .rep-grid { grid-template-columns:1fr; } }
  .rep-presets { display:flex; gap:10px; flex-wrap:wrap; }
  .rep-preset { text-align:left; background:#fff; border:1px solid var(--line); border-left-width:5px;
    border-radius:10px; padding:11px 14px; cursor:pointer; max-width:230px;
    box-shadow:0 1px 2px rgba(33,61,81,.05); transition:box-shadow .12s, transform .06s; }
  .rep-preset:hover { box-shadow:0 3px 10px rgba(33,61,81,.12); transform:translateY(-1px); }
  .rep-preset b { display:flex; align-items:center; gap:7px; font-size:.94rem; margin-bottom:4px; }
  .rep-preset .rp-ico { width:26px; height:26px; flex:none; border-radius:7px; display:flex;
    align-items:center; justify-content:center; font-size:.95rem; color:#fff; }
  .rep-preset span.rp-desc { display:block; font-size:.76rem; color:var(--slate); line-height:1.35; }
  .rep-columns { max-height:300px; overflow:auto; border:1px solid var(--line); border-radius:10px;
    padding:6px; background:#fbfdff; }
  .rep-col-head { display:flex; align-items:center; gap:6px; font-size:.68rem; font-weight:800;
    text-transform:uppercase; letter-spacing:.06em; color:var(--slate); padding:8px 8px 4px; }
  .rep-col-head .cnt { color:var(--turq); }
  .rep-col-head.avail { border-top:1px solid var(--line); margin-top:4px; }
  .rep-col-row { display:flex; align-items:center; gap:10px; font-size:.87rem; padding:6px 8px;
    border-radius:8px; cursor:pointer; }
  .rep-col-row:hover { background:var(--mist); }
  .rep-col-row.on { background:#fff; border:1px solid var(--line); box-shadow:0 1px 2px rgba(33,61,81,.05);
    margin:3px 0; }
  .rep-col-row .num { width:18px; height:18px; flex:none; border-radius:5px; background:var(--turq); color:#fff;
    font-size:.68rem; font-weight:800; display:flex; align-items:center; justify-content:center; }
  .rep-col-row label { display:flex; align-items:center; gap:9px; margin:0; flex:1; cursor:pointer; min-width:0; }
  .rep-col-row.on label { font-weight:700; color:var(--navy); }
  .rep-col-row label input[type=checkbox] { width:16px; height:16px; flex:none; margin:0; padding:0; accent-color:var(--turq); }
  .rep-col-ord { display:flex; gap:2px; flex:none; }
  .rep-col-row .ord { background:none; border:none; color:var(--turq); cursor:pointer; font-size:.8rem;
    padding:2px 4px; line-height:1; border-radius:5px; }
  .rep-col-row .ord:hover:not([disabled]) { background:var(--mist); }
  .rep-col-row .ord[disabled] { color:#c7d6db; cursor:default; }
  .rep-filters { display:flex; flex-wrap:wrap; gap:8px 12px; align-items:flex-end; }
  .rep-filters > div { display:flex; flex-direction:column; }
  .rep-filters label { font-size:.75rem; margin-bottom:2px; }
  .rep-filters input, .rep-filters select { width:auto; min-width:120px; font-size:.85rem; padding:5px 8px; }
  .rep-actions { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:10px 0; }
  .rep-preview { max-height:520px; overflow:auto; border:1px solid var(--line); border-radius:8px; }
  .rep-preview table { width:100%; border-collapse:collapse; font-size:.82rem; }
  .rep-preview th { position:sticky; top:0; background:var(--mist); color:var(--navy); text-align:left;
    padding:7px 8px; font-weight:800; text-transform:uppercase; letter-spacing:.04em; font-size:.72rem;
    box-shadow:inset 0 -2px 0 var(--turq); }
  .rep-preview td { padding:5px 8px; border-bottom:1px solid var(--line); }
  .rep-preview tr:nth-child(even) td { background:#F3F9FC; }
  .rep-group-row td { background:var(--teal) !important; color:var(--navy); font-weight:800; }
  .rep-card { border:1px solid var(--line); border-top:3px solid var(--turq); border-radius:10px;
    padding:10px 12px; margin:8px; }
  .rep-card .rc-name { font-weight:800; color:var(--navy); font-size:1rem; }
  .rep-card .rc-sub { color:var(--teal); font-size:.8rem; margin-bottom:6px; }
  .rep-card .rc-stats { display:flex; gap:16px; flex-wrap:wrap; margin:6px 0; }
  .rep-card .rc-stat b { display:block; font-size:1.05rem; color:var(--navy); }
  .rep-card .rc-stat span { font-size:.72rem; color:var(--slate); text-transform:uppercase; letter-spacing:.03em; }
  .rep-saved-row { display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); flex-wrap:wrap; }
  .rep-saved-row .rs-name { font-weight:700; color:var(--navy); }
  .rep-saved-row .rs-meta { font-size:.78rem; color:var(--slate); }
  /* Contacts (address book) */
  .ct-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(272px,1fr)); gap:12px; }
  /* position:relative so the reach icons can sit in the top right corner
     regardless of how tall the card's text runs. */
  .ct-card { position:relative; display:flex; gap:11px; align-items:flex-start; background:#fff;
    border:1px solid var(--line); border-radius:12px; padding:11px 13px; cursor:pointer;
    transition:border-color .12s, box-shadow .12s; }
  .ct-card:hover { border-color:var(--turq); box-shadow:0 2px 8px rgba(33,61,81,.08); }
  .ct-av { width:38px; height:38px; border-radius:50%; flex:none; object-fit:cover;
    background:var(--mist); display:flex; align-items:center; justify-content:center;
    color:var(--turq); font-weight:800; font-size:1rem; overflow:hidden; }
  .ct-av img { width:100%; height:100%; object-fit:cover; }
  .ct-av.mini { width:30px; height:30px; font-size:.72rem; }
  .ct-av.lg { width:72px; height:72px; font-size:1.5rem; }
  /* Room on the right for the reach icons, which are pinned to the corner. */
  .ct-main { min-width:0; flex:1; padding-right:66px; }
  .ct-nm { font-weight:700; color:var(--navy); font-size:.92rem; line-height:1.25;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ct-sub { font-size:.76rem; color:var(--slate); line-height:1.3; margin:0;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ct-badge { display:inline-block; padding:1px 8px; border-radius:999px; font-size:.64rem; font-weight:800;
    text-transform:uppercase; letter-spacing:.03em; margin-top:4px; }
  .ct-badge.contact { background:var(--mist); color:#3E6E8E; }
  .ct-badge.prospect { background:#F8F1E0; color:#8A6414; }
  .ct-badge.donor { background:#EEF5E5; color:#3F6B2A; }
  .ct-badge.archived { background:#ECEEF1; color:#5B6570; }
  .ct-badge.registered { background:var(--mist); color:#3E6E8E; }
  /* Donor Portal chip: the reach-button doctrine in badge form. Green = they
     hold a portal account, red = they do not, a statement of fact. */
  .ct-badge.portal-on { background:#EEF5E5; color:#3F6B2A; border:1px solid #D3E5C4; }
  .ct-badge.portal-off { background:#FBEEEC; color:#B42318; border:1px solid #F2C9C4; }
  /* Text consent, the reach doctrine in badge form: green yes, red no, grey
     not asked. Clicking it records consent (proof required for an opt-in). */
  .ct-badge.sms-opt_in { background:#EEF5E5; color:#3F6B2A; border:1px solid #D3E5C4; cursor:pointer; }
  .ct-badge.sms-opt_out { background:#FBEEEC; color:#B42318; border:1px solid #F2C9C4; cursor:pointer; }
  .ct-badge.sms-unknown { background:#ECEEF1; color:#5B6570; border:1px solid #D8DDE3; cursor:pointer; }
  /* Item 11: the category paints the card's frame and a matching chip, so a
     grid reads by colour before it reads by name. An uncategorised card stays
     plain, which makes an unset category visible rather than invisible. */
  .ct-card.cat { border-color:var(--cat); box-shadow:inset 3px 0 0 0 var(--cat); }
  .ct-card.cat:hover { box-shadow:inset 3px 0 0 0 var(--cat), 0 2px 10px rgba(33,61,81,.13); }
  .cat-chip { display:inline-block; margin-top:4px; font-size:.63rem; font-weight:800;
    text-transform:uppercase; letter-spacing:.03em; border-radius:999px; padding:1px 8px;
    color:var(--cat-ink); background:var(--cat-tint); max-width:100%;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; }
  /* Item 12: a company is not a person, and should not need reading to tell. */
  .ct-av.company { border-radius:11px; background:#EDEFF2; color:var(--slate); }
  .ct-av.company svg { width:24px; height:24px; }
  .ct-av.mini.company svg { width:16px; height:16px; }
  /* Items 14 and 9: the icon is the state AND the door. Green means there is
     something to reach them on and opens the composer; red is a fact and is
     inert; the text bubble adds a muted grey for a number we hold but may not
     text yet. Never colour alone: each carries a label and a tooltip. */
  .reach { display:flex; gap:5px; flex:none; }
  .ct-card > .reach { position:absolute; top:10px; right:11px; }
  .reach-btn { width:26px; height:26px; border-radius:8px; border:1px solid transparent;
    display:flex; align-items:center; justify-content:center; cursor:pointer; padding:0;
    background:transparent; transition:transform .1s, filter .1s; }
  .reach-btn svg { width:16px; height:16px; display:block; }
  .reach-btn.on { background:#EEF5E5; color:#3F6B2A; border-color:#D3E5C4; }
  .reach-btn.off { background:#FBEEEC; color:#B42318; border-color:#F2C9C4; cursor:not-allowed; }
  /* The text bubble with a number but no recorded opt-in: reachable in theory,
     not textable in fact. Muted grey, the same tongue as the Texts chip's
     not-asked state, and inert until consent is on file. */
  .reach-btn.idle { background:#ECEEF1; color:#5B6570; border-color:#D8DDE3; cursor:not-allowed; }
  .reach-btn.on:hover { filter:brightness(.96); transform:translateY(-1px); }
  .reach-btn:focus-visible { outline:2px solid var(--turq); outline-offset:2px; }
  .ct-reach { font-family:ui-monospace,Menlo,monospace; font-size:.76rem; color:var(--navy);
    font-variant-numeric:tabular-nums; margin-top:2px; letter-spacing:-.02em; line-height:1.3;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ct-reach.mail { font-family:'Nunito Sans',sans-serif; letter-spacing:0; }
  .ct-reach.none { color:#8A959B; font-family:'Nunito Sans',sans-serif; font-style:italic; }
  /* Item 15: the donor list as a contact list. */
  .dn-list { border-collapse:separate; border-spacing:0; width:100%; }
  .dn-list th.sortable { cursor:pointer; user-select:none; white-space:nowrap; }
  .dn-list th.sortable:hover { color:var(--turq); }
  .dn-list th .arrow { font-size:.7em; opacity:.75; }
  .dn-list td { vertical-align:middle; }
  .dn-list td.rail { width:4px; padding:0; }
  .dn-list td.rail i { display:block; width:4px; min-height:48px; height:100%; background:var(--cat); }
  .dn-who { display:flex; align-items:center; gap:11px; min-width:0; }
  .dn-who .nm { font-weight:700; color:var(--navy); white-space:nowrap; }
  .dn-org { font-size:.8rem; color:var(--slate); max-width:220px; overflow:hidden;
    text-overflow:ellipsis; white-space:nowrap; }
  .dn-org .t { display:block; font-size:.73rem; color:#7E8D95; }
  .dn-cell { display:flex; align-items:center; gap:8px; white-space:nowrap; }
  .dn-cell .val { font-family:ui-monospace,Menlo,monospace; font-size:.79rem;
    color:var(--navy); font-variant-numeric:tabular-nums; }
  .dn-cell .val.mail { font-family:'Nunito Sans',sans-serif; max-width:190px;
    overflow:hidden; text-overflow:ellipsis; display:inline-block; vertical-align:middle; }
  .dn-cell .none { font-size:.78rem; color:#A0ABB1; font-style:italic; }
  .dn-num { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
  .dn-num.total { font-weight:800; color:var(--navy); }
  .dn-stats { font-size:.78rem; color:var(--slate); margin-top:2px; line-height:1.3;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .dn-stats b { color:var(--navy); font-weight:800; }
  .dn-stats .uid { margin-left:2px; }
  /* Contacts: view toggle + alphabetical list view */
  .ct-toolbar { gap:16px; row-gap:12px; align-items:center; margin-bottom:18px; }
  .ct-toolbar #ct-count { margin-left:2px; white-space:nowrap; }
  .ct-spacer { flex:1; min-width:20px; }
  .ct-actions { display:inline-flex; align-items:center; gap:10px; flex-wrap:wrap; }
  .ct-viewtoggle { display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
  .ct-viewtoggle button { background:#fff; border:none; padding:6px 13px; font-size:.82rem; font-weight:700;
    color:var(--slate); cursor:pointer; }
  .ct-viewtoggle button.active { background:var(--turq); color:#fff; }
  .ct-list { display:block; }
  .ct-az { display:flex; flex-wrap:wrap; gap:1px; margin-bottom:8px; position:sticky; top:0;
    background:#f6fafc; padding:7px 0; z-index:3; }
  .ct-az a { font-size:.72rem; font-weight:800; color:var(--turq); padding:2px 7px; border-radius:5px;
    cursor:pointer; text-decoration:none; }
  .ct-az a:hover { background:var(--mist); }
  .ct-az a.off { color:var(--line); pointer-events:none; }
  .ct-pager { display:flex; align-items:center; justify-content:center; gap:16px;
    margin-top:16px; padding-top:12px; border-top:1px solid var(--line); }
  .ct-pager #ct-range { white-space:nowrap; }
  .ct-pager button:disabled { opacity:.45; cursor:default; }
  .ct-alpha { font-family:'Nunito',sans-serif; font-weight:800; color:var(--navy); font-size:.95rem;
    padding:10px 6px 5px; border-bottom:2px solid var(--turq); margin-top:4px; position:sticky; top:34px;
    background:#f6fafc; z-index:2; }
  .ct-row { display:flex; align-items:center; gap:12px; padding:8px 8px; border-bottom:1px solid var(--line);
    cursor:pointer; }
  .ct-row:hover { background:var(--mist); }
  .ct-row .ct-rnm { font-weight:700; color:var(--navy); flex:0 0 30%; min-width:0;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ct-row .ct-rmeta { color:var(--slate); font-size:.82rem; flex:1; min-width:0;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ct-row .ct-rmail { color:var(--slate); font-size:.82rem; flex:0 0 24%; min-width:0;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .ct-row .ct-badge { flex:none; margin:0; }
  @media (max-width:820px) { .ct-row .ct-rmail { display:none; } }
  /* Contact profile dialog */
  .cp-top { display:flex; gap:16px; align-items:center; margin-bottom:14px; }
  .cp-drop { width:96px; height:96px; border-radius:50%; flex:none; border:2px dashed var(--line);
    background:var(--mist); display:flex; align-items:center; justify-content:center; text-align:center;
    color:var(--slate); font-size:.68rem; cursor:pointer; overflow:hidden; position:relative; }
  .cp-drop.hasimg { border-style:solid; }
  .cp-drop img { width:100%; height:100%; object-fit:cover; }
  .cp-drop.drag { border-color:var(--turq); background:#e3f4f3; }
  .cp-sect { font-size:.7rem; font-weight:800; text-transform:uppercase; letter-spacing:.05em;
    color:var(--slate); margin:16px 0 8px; border-bottom:1px solid var(--line); padding-bottom:4px; }
  /* Labelled, repeating rows for numbers and addresses. The lead row (mobile,
     primary) has its label locked: those two values are what sign-in, dedup and
     gift matching read, so they cannot be relabelled out from under them. */
  /* One donor picker, used by the gift form and soft credit. */
  .dp-row { padding:8px 10px; cursor:pointer; border-bottom:1px solid var(--line);
    font-size:.88rem; }
  .dp-row:last-child { border-bottom:none; }
  .dp-row:hover { background:var(--mist); }
  .dp-nm { font-weight:700; color:var(--navy); }
  .dp-sub { display:block; font-size:.76rem; color:var(--slate); }
  #g-donor-results, #sc-donor-results { position:absolute; top:100%; left:0; right:0;
    z-index:40; background:#fff; border:1px solid var(--line); border-radius:10px;
    box-shadow:0 6px 20px rgba(33,61,81,.14); max-height:260px; overflow-y:auto; }
  .g-donor-picked { display:flex; align-items:center; gap:11px; padding:10px 12px;
    border:1px solid var(--turq); border-radius:10px; background:var(--mist); margin-bottom:8px; }
  .g-donor-picked .nm { font-weight:700; color:var(--navy); }
  .g-donor-picked .sub { font-size:.78rem; color:var(--slate); }
  .cp-mvrow { display:flex; align-items:center; gap:9px; margin-bottom:7px; }
  .cp-mvdel { width:20px; height:20px; border-radius:50%; flex:none; border:none;
    background:#E5484D; display:flex; align-items:center; justify-content:center; padding:0; }
  .cp-mvdel span { display:block; width:9px; height:2px; background:#fff; border-radius:1px; }
  .cp-mvdel:hover { filter:brightness(1.08); }
  .cp-mvkind { width:104px; flex:none; font-size:.8rem; color:var(--turq); font-weight:700; }
  .cp-mvkind:disabled { opacity:1; color:var(--slate); background:var(--mist); cursor:default; }
  .cp-mvval { flex:1; min-width:0; }
  .cp-addrow { margin-top:2px; }
  .cp-companycheck { display:flex; align-items:center; gap:7px; margin-top:10px;
    font-size:.85rem; font-weight:700; color:var(--navy); cursor:pointer; }
  .cp-companycheck input { width:auto; margin:0; }
  .cp-social { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
  .cp-social label { width:82px; margin:0; font-size:.78rem; color:var(--slate); flex:none; }
  .ct-drop-import { border:2px dashed var(--line); border-radius:12px; padding:26px; text-align:center;
    color:var(--slate); cursor:pointer; background:var(--mist); }
  .ct-drop-import.drag { border-color:var(--turq); background:#e3f4f3; }
  .pill { display:inline-block; padding:2px 10px; border-radius:999px; font-size:.72rem;
    font-weight:700; text-transform:uppercase; letter-spacing:.03em; }
  .pill.donorbox { background:#e8f4fd; color:#1565a0; }
  .pill.daf { background:#f3e8fd; color:#6a3fa0; }
  .pill.check { background:var(--green); color:#2c5e1f; }
  .pill.eft { background:#fdf3e0; color:#8a6414; }
  .pill.crypto { background:#e6e9fd; color:#3d4ba0; }
  .pill.stock { background:#fdeaf3; color:#a03d6e; }
  .pill.other { background:#eee; color:#555; }
  .pill.ok { background:var(--green); color:#2c5e1f; }
  .pill.muted { background:#eee; color:#555; }
  .pill.open { background:#fdeaea; color:#9c3838; }
  .pill.matched { background:var(--green); color:#2c5e1f; }
  .pill.closed { background:#eee; color:#555; }
  .pill.pending { background:#fff3d6; color:#8a6414; }
  .pill.sent { background:var(--green); color:#2c5e1f; }
  .pill.skipped { background:#eee; color:#555; }
  .pill.funded { background:#d9f0ef; color:#0a6b68; }
  .pill.disbursed { background:var(--green); color:#2c5e1f; }
  .muted { color:var(--slate); font-size:.85rem; }
  .msg { font-size:.85rem; }
  .msg.ok { color:#2c5e1f; }
  .msg.err { color:#9c3838; }
  /* DRM console */
  .drm-form { display:grid; grid-template-columns:repeat(3,1fr); gap:16px 20px; align-items:end; }
  .drm-form .field label { display:block; font-size:.74rem; font-weight:700; color:var(--slate);
    text-transform:uppercase; letter-spacing:.04em; margin-bottom:4px; }
  @media (max-width:760px){ .drm-form { grid-template-columns:1fr; } }
  /* Section headings inside the About Inheris form span the whole grid row. */
  .drm-form .org-section { grid-column:1/-1; align-self:start; margin:16px 0 2px;
    font-size:.82rem; font-weight:800; letter-spacing:.03em; text-transform:uppercase;
    color:var(--inh-ink-2,var(--slate)); border-bottom:1px solid var(--inh-line,var(--line));
    padding-bottom:5px; }
  .drm-form .org-section:first-child { margin-top:0; }
  .drm-board-head { display:flex; align-items:center; gap:12px; margin-bottom:12px; }
  /* Boards render through the shared kit component (inheris-board.css/js:
     .inh-board / .inh-board-col / .inh-board-card). The old private
     .drm-board/.drm-col/.drm-card rules moved into the kit. */
  .gstatus { display:inline-block; padding:2px 9px; border-radius:999px; font-size:.7rem; font-weight:700; }
  .gstatus.open { background:var(--mist); color:var(--navy); }
  .gstatus.submitted { background:#fdf3e0; color:#8a6414; }
  .gstatus.awarded { background:var(--green); color:#2c5e1f; }
  .gstatus.declined { background:#fdeaea; color:#9c3838; }
  .gstatus.closed { background:#eee; color:#555; }
  .grant-work { border-top:3px solid var(--turq); }
  .grant-work .empty-note { padding:24px; text-align:center; color:var(--slate); }
  .gdoc { display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); }
  .gdoc .gk { font-size:.68rem; text-transform:uppercase; letter-spacing:.04em; color:var(--turq);
    font-weight:800; flex:none; width:78px; }
  .gdoc .gt { flex:1; color:var(--navy); font-size:.9rem; }
  .gdraft-out { white-space:pre-wrap; background:var(--mist); border-radius:10px; padding:14px 16px;
    margin-top:10px; font-size:.92rem; line-height:1.5; color:var(--ink); }
  /* Pro forma budgets */
  .pf-required { display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:10px 14px; border-radius:10px;
    background:var(--mist); border:1px solid var(--line); margin:6px 0 12px; }
  .pf-required.unknown { background:#fdf3e0; border-color:#e7c98b; }
  .pf-required .q { font-weight:700; color:var(--navy); font-size:.9rem; flex:1; min-width:220px; }
  .pf-required .pf-pill { font-size:.7rem; font-weight:800; text-transform:uppercase; letter-spacing:.04em;
    padding:2px 9px; border-radius:999px; }
  .pf-required .pf-pill.yes { background:var(--green); color:#2c5e1f; }
  .pf-required .pf-pill.no { background:#eee; color:#555; }
  .pf-required .pf-pill.unknown { background:#f6d68a; color:#7a5a12; }
  .pf-card { border:1px solid var(--line); border-radius:12px; padding:14px 16px; margin-top:12px; }
  .pf-card .pf-head { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
  .pf-card .pf-head .pf-title { font-weight:800; color:var(--navy); flex:1; font-family:'Nunito',sans-serif; }
  .pf-row { display:flex; align-items:center; gap:8px; padding:6px 0; border-bottom:1px solid var(--line); }
  .pf-table { width:100%; border-collapse:collapse; margin-top:8px; font-size:.86rem; }
  .pf-table th { text-align:left; font-size:.66rem; text-transform:uppercase; letter-spacing:.04em; color:var(--slate);
    padding:6px 6px; border-bottom:2px solid var(--line); }
  .pf-table td { padding:4px 6px; border-bottom:1px solid var(--line); vertical-align:top; }
  .pf-table td.num, .pf-table th.num { text-align:right; font-variant-numeric:tabular-nums; }
  .pf-table input, .pf-table select { padding:5px 6px; font-size:.84rem; }
  .pf-table input.amt { text-align:right; width:104px; }
  .pf-table input.cat { width:100%; }
  .pf-x { background:none; border:0; color:#b5484a; cursor:pointer; font-size:1rem; line-height:1; padding:2px 6px; }
  .pf-totals { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px; margin-top:14px; }
  .pf-totals .cell { background:var(--mist); border-radius:10px; padding:10px 12px; }
  .pf-totals .cell .n { font-size:1.15rem; font-weight:800; color:var(--navy); font-family:'Nunito',sans-serif;
    font-variant-numeric:tabular-nums; }
  .pf-totals .cell .l { font-size:.72rem; color:var(--slate); }
  .pf-totals .cell.warn { background:#fdf3e0; }
  .pf-warn { color:#8a6414; font-size:.82rem; margin-top:6px; }
  .athena-scorecard { display:grid; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:12px; }
  .athena-scorecard .cell { background:var(--mist); border-radius:10px; padding:12px 14px; }
  .athena-scorecard .cell .n { font-size:1.35rem; font-weight:800; color:var(--navy); font-family:'Nunito',sans-serif; }
  .athena-scorecard .cell .l { font-size:.74rem; color:var(--slate); }
  /* Phase 3: activity timeline, tasks, Stuart chat */
  .tl-log { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:8px 0; }
  .tl-log input:not([type=date]) { flex:1; min-width:160px; }
  .tl-feed { border-left:2px solid var(--line); margin:8px 0 4px; padding-left:2px; }
  .tl-item { display:flex; gap:10px; align-items:flex-start; padding:8px 10px; border-bottom:1px solid var(--line); }
  .tl-kind { flex:none; font-size:.64rem; text-transform:uppercase; letter-spacing:.04em; font-weight:800;
    padding:2px 8px; border-radius:999px; background:var(--mist); color:var(--navy); min-width:64px; text-align:center; }
  .tl-kind.gift { background:var(--green); color:#2c5e1f; }
  .tl-kind.conversation { background:#e8f4fd; color:#1565a0; }
  .tl-kind.intention { background:#f3e8fd; color:#6a3fa0; }
  .tl-kind.impact { background:#fdf3e0; color:#8a6414; }
  .tl-kind.gratitude { background:#fdeaf3; color:#a03d6e; }
  .tl-kind.call, .tl-kind.meeting, .tl-kind.email, .tl-kind.note { background:var(--mist); color:var(--navy); }
  .tl-kind.system { background:#eee; color:#555; }
  .cell-sel { padding:4px 6px; font-size:.82rem; min-width:118px; }
  /* Settings / configuration console */
  /* One responsive grid for every Settings card: three or four columns on a
     wide monitor, one on a laptop half-screen, no hard-coded two-up and no
     half-empty rows. #cfg-pipelines renders its cards as children, so
     display:contents lets them join the same grid. */
  /* A capped responsive grid, not CSS multicol. columns:320px had no upper
     bound, so a wide monitor spawned six or more skinny 320px columns and any
     card whose contents could not shrink below 320px (the org-profile form, the
     giving-logistics inputs, a date field with its autofill icons) spilled
     sideways into its neighbor. A grid makes each card a real cell that shares
     slack through 1fr and never overflows; align-items:start tops-aligns each
     one so a short card does not inherit a tall neighbor's height, and the
     max-width holds it to three or four columns rather than packing an
     ultrawide monitor with six-plus skinny ones. */
  .cfg-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(320px, 1fr));
    gap:14px; align-items:start; max-width:1560px; }
  /* The directory hides this grid with the `hidden` attribute; display:grid above
     would otherwise beat [hidden]'s user-agent display:none, so the domain cards
     leaked in below the directory. This makes hidden actually hide it. */
  .cfg-grid[hidden] { display:none; }
  .cfg-grid > .card, #cfg-pipelines > .card { min-width:0; }
  /* Inside a settings column the 3-across profile form cannot hold its shape:
     the fields' intrinsic widths beat 1fr tracks and spill past the card. Let
     the columns re-count to whatever fits. */
  .cfg-grid .drm-form { grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); }
  .cfg-grid .drm-form .field { min-width:0; }
  #cfg-pipelines { display:contents; }
  /* Settings directory: one entry per domain, each opening a standard drawer.
     Surface + ink tokens with light fallbacks so it reads in both skins. */
  .set-dir { display:grid; grid-template-columns:repeat(auto-fill, minmax(300px, 1fr));
    gap:14px; align-items:stretch; max-width:1560px; }
  .set-dir-card { display:flex; flex-direction:column; gap:8px; text-align:left; cursor:pointer;
    background:var(--inh-surface,#fff); border:1px solid var(--inh-line,var(--line));
    border-top:4px solid var(--turq); border-radius:12px; padding:15px 18px 16px; font:inherit;
    transition:box-shadow .15s ease, transform .15s ease; }
  .set-dir-card:hover { box-shadow:0 6px 20px #213d5122; transform:translateY(-1px); }
  .set-dir-card:focus-visible { outline:2px solid var(--turq); outline-offset:2px; }
  .set-dir-top { display:flex; align-items:center; justify-content:space-between; gap:10px; }
  .set-dir-title { font-weight:800; font-size:1.02rem; color:var(--inh-ink-1,var(--navy)); }
  .set-dir-lede { color:var(--inh-ink-2,var(--slate)); font-size:.86rem; line-height:1.45; flex:1; }
  .set-dir-open { font-weight:800; font-size:.92rem; color:var(--turq); }
  .set-chip-warn { display:inline-block; background:#FBF4E4; color:#8A6414; border:1px solid #ecdcb0;
    border-radius:999px; padding:2px 9px; font-size:.72rem; font-weight:700; white-space:nowrap; }
  /* A domain card borrowed into the drawer drops its own card chrome, its
     duplicate h3, and its lede (the drawer head and lede already carry them) and
     flows as drawer content. Nested pipeline cards keep their own chrome. */
  #set-drawer-mount > .card { border:0; border-radius:0; padding:0; margin:0; background:transparent; }
  #set-drawer-mount > .card > h3:first-child { display:none !important; }
  /* Keep the h3 for cards whose "Move selected" reorder toolbar lives inside it
     (the config lists, custom fields, tab order), shrunk to a muted controls
     eyebrow so it does not compete with the drawer title. */
  #set-drawer-mount > .card > h3:first-child:has([data-movetool]) {
    display:flex !important; align-items:center; gap:8px; margin:0 0 10px !important;
    font-size:.75rem; font-weight:700; letter-spacing:.04em; text-transform:uppercase;
    color:var(--inh-ink-2,var(--slate)); }
  #set-drawer-mount > .card > p.muted { display:none !important; }
  /* About Inheris: each missing fact in the banner is a link to its field. The
     banner is the fleet's self-contained warn amber (as .cal-banner.warn), which
     reads on either skin, so it needs no inh-cmd pair and no inline colour. */
  .org-gaps, .stage-warn { margin:0; background:#FBF4E4; color:#8A6414; border:1px solid #ecdcb0;
    padding:8px 11px; border-radius:8px; font-size:.86rem; line-height:1.4; }
  .stage-warn { margin:0 0 10px; }
  .stage-warn strong { font-weight:800; }
  .org-gaps .gap-link { background:none; border:0; padding:0; font:inherit; font-weight:800;
    color:inherit; text-decoration:underline; text-underline-offset:2px; cursor:pointer; }
  .org-gaps .gap-link:hover { text-decoration:none; }
  .field-flash { border-radius:8px; animation:fieldFlash 1.4s ease; }
  @keyframes fieldFlash { 0%,100% { box-shadow:0 0 0 0 transparent; }
    15%,55% { box-shadow:0 0 0 3px var(--turq); } }
  .cfg-row { display:flex; align-items:center; gap:8px; padding:5px 0; border-bottom:1px solid var(--line); flex-wrap:wrap; }
  .cfg-row.retired { opacity:.5; }
  /* Drag-and-drop reorder: the grip arms draggable; the row shows a drop edge. */
  .cfg-grip { cursor:grab; color:var(--inh-ink-3,#8aa0a6); user-select:none; padding:0; margin-right:-2px;
    font-size:1.05rem; line-height:1; opacity:.55; }
  .cfg-grip:hover { opacity:1; }
  .cfg-row[draggable="true"] .cfg-grip { cursor:grabbing; }
  .cfg-row.cfg-dragging { opacity:.45; }
  .cfg-row.cfg-drop-before { box-shadow:inset 0 3px 0 -1px var(--turq); }
  .cfg-row.cfg-drop-after { box-shadow:inset 0 -3px 0 -1px var(--turq); }
  /* Reordering re-renders the whole card, so the row being moved used to vanish
     into the new markup with nothing marking where it went. The row you last
     moved stays lit until you move another, so multi-step moves keep their
     place. Outline, not border or inset shadow, so nothing shifts when it
     lights up. See cfgKeepMoving() in the script below. */
  .cfg-moving { background:var(--mist); border-radius:6px;
    outline:2px solid var(--turq); outline-offset:2px; }
  .scr-row.cfg-moving > td { background:var(--mist); }
  .cfg-move { display:flex; flex-direction:column; gap:2px; flex:none; }
  .cfg-move button { border:1px solid var(--inh-line, var(--line)); background:var(--inh-surface, #fff);
    color:var(--inh-accent, var(--turq)); width:26px; height:19px;
    line-height:1; font-size:.62rem; border-radius:5px; cursor:pointer; padding:0; }
  .cfg-move button:hover { border-color:var(--inh-accent, var(--turq)); }
  .cfg-move button:disabled { color:var(--inh-line, var(--line)); border-color:var(--inh-line, var(--line)); cursor:default; }
  /* The pinned per-card mover: a stationary target that always acts on the
     selected row, so repeated clicks move the same field every time. */
  .cfg-movetool { display:inline-flex; gap:4px; align-items:center; margin-left:auto;
    font-size:.68rem; color:var(--inh-ink-3, var(--slate)); font-weight:600; }
  /* Always the accent, never a disabled grey: the light-skin --inh-line glyph
     was invisible on the dark Command card (1.5:1) and near-invisible on white
     (1.4:1), so the toolbar looked broken before a row was picked. The arrows
     now always read; cfgMoveSelected() no-ops until a row is selected. */
  .cfg-movetool button { width:28px; height:22px; border:1px solid var(--inh-accent, var(--turq));
    background:var(--inh-surface, #fff); color:var(--inh-accent, var(--turq)); border-radius:6px;
    font-size:.66rem; line-height:1; cursor:pointer; }
  /* Plain :focus, not :focus-visible: focus is restored programmatically after
     the re-render, which the focus-visible heuristic does not light up. */
  .cfg-move button:focus, .scr-acts button:focus, .rep-col-ord button:focus {
    border-color:var(--turq); color:var(--turq); outline:2px solid var(--turq); outline-offset:1px; }
  .import-warn { background:#FBF3E2; border:1px solid #EAD9AE; color:#7A5B12;
    border-radius:10px; padding:10px 13px; margin-bottom:10px; font-size:.86rem;
    line-height:1.45; }
  .import-warn strong { color:#6A4E0C; }
  .cfg-swatches { display:inline-flex; gap:3px; flex:none; align-items:center; flex-wrap:wrap;
    max-width:150px; }
  .cfg-swatch { width:14px; height:14px; border-radius:4px; border:1.5px solid transparent;
    padding:0; cursor:pointer; }
  .cfg-swatch.on { border-color:var(--navy); box-shadow:0 0 0 1.5px #fff inset; }
  .cfg-swatch.none { background:#fff; border-color:var(--line); position:relative; }
  .cfg-swatch.none::after { content:''; position:absolute; inset:2px; border-top:1.5px solid #C0392B;
    transform:rotate(45deg); transform-origin:center; }
  /* The name is the row's whole point: it never shrinks into illegibility.
     Crowded rows (pipeline headers, stage meta) wrap instead of squeezing. */
  .cfg-name { flex:1 1 130px; min-width:130px; padding:5px 8px; font-size:.9rem; }
  /* Stage meta (likelihood + role) is a deliberate second line, indented under
     the name, compact, always horizontal. It stopped borrowing .cfg-move,
     whose column direction stacked the two controls and read as scatter. */
  .cfg-stagemeta { flex:0 0 100%; display:flex; align-items:center; gap:6px;
    padding-left:34px; font-size:.8rem; }
  .cfg-stagemeta input[type="number"] { width:58px; flex:none;
    font-variant-numeric:tabular-nums; text-align:right; }
  .cfg-stagemeta .muted { white-space:nowrap; }
  .cfg-stagemeta select { width:auto; max-width:100%; }
  /* Rows read at a glance: controls inside them stay small so the card's
     whitespace goes to the names, not the chrome. */
  .cfg-row input, .cfg-row select { padding:4px 8px; font-size:.85rem; }
  .cfg-row .btn { padding:4px 10px; font-size:.8rem; }
  .cfg-row.retired .cfg-name { text-decoration:line-through; }
  .cfg-add { display:flex; gap:8px; margin-top:10px; }
  .cfg-add input { flex:1; }
  .cf-type { flex:none; font-size:.72rem; font-weight:700; color:var(--slate); background:var(--mist);
    padding:2px 9px; border-radius:999px; white-space:nowrap; }
  .cf-opts { flex:1.4; padding:5px 8px; font-size:.82rem; }
  /* Reporting: saved views + column chooser */
  .rv-wrap { position:relative; display:flex; gap:6px; align-items:center; }
  .rv-wrap select { width:auto; }
  .col-menu { position:absolute; top:calc(100% + 4px); right:0; z-index:40; background:#fff;
    border:1px solid var(--line); border-radius:10px; box-shadow:0 8px 24px rgba(9,22,22,.14);
    padding:10px 12px; min-width:200px; max-height:320px; overflow:auto; }
  .col-menu .cm-title { font-size:.72rem; font-weight:800; text-transform:uppercase; letter-spacing:.04em;
    color:var(--slate); margin-bottom:6px; }
  .col-menu .cm-row { display:flex; align-items:center; gap:8px; padding:3px 0; font-size:.88rem; }
  .col-menu .cm-row input { width:auto; }
  .tl-kind.email { background:#e6e9fd; color:#3d4ba0; }
  .tl-kind.calendar { background:#fdeaf3; color:#a03d6e; }
  .tl-item.click { cursor:pointer; }
  .tl-item.click:hover { background:var(--mist); }
  /* Phase 5: relationship (correspondence + calendar + files) */
  .rel-bar { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-top:18px; flex-wrap:wrap; }
  .rel-actions { display:flex; gap:6px; flex-wrap:wrap; }
  .rel-form { background:var(--mist); border-radius:10px; padding:12px 14px; margin-top:10px; }
  .rel-files { display:flex; flex-wrap:wrap; gap:12px; }
  .rel-file { width:104px; display:flex; flex-direction:column; align-items:center; gap:4px; position:relative; }
  .rf-thumb { display:flex; align-items:center; justify-content:center; width:104px; height:72px; border:1px solid var(--line);
    border-radius:8px; overflow:hidden; background:#fff; }
  .rf-thumb img { width:100%; height:100%; object-fit:cover; }
  .rf-thumb .ft { font-size:.8rem; font-weight:800; color:var(--turq); letter-spacing:.04em; }
  .rf-name { font-size:.72rem; color:var(--slate); text-align:center; max-width:104px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .rf-del { position:absolute; top:-6px; right:-6px; width:20px; height:20px; border-radius:50%; border:none;
    background:#9c3838; color:#fff; font-size:.9rem; line-height:1; cursor:pointer; }
  .tl-body { flex:1; font-size:.9rem; color:var(--ink); }
  .tl-body .meta { font-size:.8rem; color:var(--slate); margin-top:2px; }
  .tl-when { flex:none; font-size:.75rem; white-space:nowrap; }
  .tl-task { display:flex; gap:8px; align-items:center; padding:6px 0; border-bottom:1px solid var(--line); }
  .tl-task.done .tt { text-decoration:line-through; color:var(--slate); }
  .stuart-log { max-height:340px; overflow-y:auto; display:flex; flex-direction:column; gap:8px;
    padding:6px; background:var(--mist); border-radius:10px; }
  .stuart-log:empty::before { content:'Ask Stuart a question to begin.'; color:var(--slate); font-size:.85rem; padding:10px; }
  #athena-chat-log:empty::before { content:'Ask Athena a question to begin.'; }
  .sb.athena { align-self:flex-start; background:#fff; border:1px solid var(--line); color:var(--ink); border-bottom-left-radius:3px; }
  .sb { max-width:82%; padding:8px 12px; border-radius:12px; font-size:.9rem; line-height:1.45; white-space:pre-wrap; }
  .sb.user { align-self:flex-end; background:var(--turq); color:#fff; border-bottom-right-radius:3px; }
  .sb.stuart { align-self:flex-start; background:#fff; border:1px solid var(--line); color:var(--ink); border-bottom-left-radius:3px; }
  .sb-task { align-self:flex-start; font-size:.78rem; color:#2c5e1f; background:var(--green); padding:5px 10px; border-radius:999px; }
  .amount { font-weight:700; color:var(--navy); white-space:nowrap; }
  .uid { font-family:ui-monospace,Menlo,monospace; font-size:.8rem; color:var(--slate);
    background:var(--mist); border-radius:6px; padding:1px 7px; white-space:nowrap; }

  .chartbox { background:#fff; border:1px solid var(--line); border-radius:12px;
    padding:18px 18px 10px; }
  .chartbox h3 { font-size:1rem; margin-bottom:10px; }
  .charts2 { display:grid; grid-template-columns:1.25fr 1fr; gap:18px; margin-bottom:20px; }
  @media(max-width:900px){ .charts2 { grid-template-columns:1fr; } }
  .dash2 { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
  @media(max-width:900px){ .dash2 { grid-template-columns:1fr; } }
  /* Charts scale with their column but stop growing vertically on ultrawide
     monitors (the SVG letterboxes inside its card instead of towering). */
  .chartbox svg { max-height:360px; }
  /* On ultrawide screens, charts and the summary tables share one band. */
  @media(min-width:1800px){
    .dashwide { display:grid; grid-template-columns:1.5fr 1fr; gap:18px; align-items:start; }
    .dashwide .charts2 { margin-bottom:0; }
    .dashwide .dash2 { grid-template-columns:1fr; }
  }
  #tooltip { position:fixed; display:none; background:#213D51; color:#fff;
    border-radius:8px; padding:7px 12px; font-size:.82rem; pointer-events:none; z-index:300;
    box-shadow:0 6px 18px #213d5133; }
  #tooltip .tt-big { font-weight:800; font-family:'Nunito',sans-serif; }
  /* Command (dark) skin: --navy flips to a light tint, so the light-theme
     "navy bg + white text" tooltip would render white-on-grey. Give it its
     own dark surface with a hairline so it reads as a floating card. */
  .inh-cmd #tooltip { background:#0C2029; color:#E8F0F5;
    border:1px solid #22404B; box-shadow:0 8px 22px #00000066; }
  .bar { cursor:pointer; }
  .bar:hover { filter:brightness(1.12); }

  dialog { border:none; border-radius:14px; padding:0; max-width:640px; width:94vw;
    box-shadow:0 18px 60px #213d5140; }
  dialog::backdrop { background:#213d5166; }
  .dlg-head { background:var(--navy); color:#fff; padding:14px 22px; font-weight:800;
    font-family:'Nunito',sans-serif; }
  .dlg-body { padding:20px 22px; max-height:70vh; overflow-y:auto; }
  .dlg-foot { padding:14px 22px; border-top:1px solid var(--line); display:flex;
    justify-content:flex-end; gap:10px; }
  /* The body used to carry the whole height budget, which left the head and the
     foot to fit in whatever was over. On a short window they did not, the three
     parts came to more than the box a modal dialog is allowed, and the footer
     rendered past the bottom edge with its buttons half off the screen. Bound the
     dialog and let the body take what is left: head and foot always reachable,
     only the middle scrolls. Excludes the pill-rail drawers, which are already
     flexed and full height by design, and the two dialogs that do not use this
     chrome (the gift-intent card has no scrolling body to shrink, and the Claire
     chat sizes its own and has no foot to clip). */
  dialog:not(.inh-drawer):not(#dlg-giftintent):not(#dlg-claire-chat)[open] {
    display:flex; flex-direction:column; max-height:calc(100dvh - 40px); }
  .dlg-head, .dlg-foot { flex:0 0 auto; }
  .dlg-body { flex:1 1 auto; min-height:0; }
  /* Acknowledgment review dialog */
  .ack-preview { border:1px solid var(--line); border-radius:10px; overflow:hidden; }
  .ack-hdr { background:var(--mist); padding:12px 14px; font-size:.88rem;
    display:flex; flex-direction:column; gap:7px; border-bottom:2px solid var(--turq); }
  .ack-hdr .ack-k { display:inline-block; width:62px; color:var(--slate); font-weight:800;
    font-size:.72rem; text-transform:uppercase; letter-spacing:.04em; }
  .ack-subj-row { display:flex; align-items:center; gap:8px; }
  .ack-subj-row input { flex:1; }
  .ack-preview .err { color:#c0492f; font-weight:600; }
  .ack-body { width:100%; min-height:300px; border:none; padding:16px; font-family:inherit;
    font-size:.92rem; line-height:1.6; resize:vertical; color:var(--ink); background:#fff; }
  .ack-body:focus { outline:none; }
  .ack-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:14px; }
  .grid2 { display:grid; grid-template-columns:1fr 1fr; gap:12px 16px; }
  .grid3 { display:grid; grid-template-columns:repeat(3,1fr); gap:12px 16px; }
  @media (max-width:640px){ .grid3 { grid-template-columns:1fr; } }
  .grid2 .full { grid-column:1 / -1; }
  .checkrow { display:flex; align-items:center; gap:8px; }
  .checkrow input { width:auto; }
  .checkrow label { margin:0; }

  #login-overlay { position:fixed; inset:0; z-index:100; }

  /* --- Claire console --- */
  .claire-head { display:flex; align-items:center; gap:16px; margin-bottom:18px; flex-wrap:wrap; }
  .claire-id { display:flex; align-items:center; gap:12px; }
  /* Claire is the Chief Donor Steward: her portrait sits at twice a standard
     agent avatar (46px), filling the circle with a teal ring. */
  .claire-id .avatar { width:92px; height:92px; border-radius:50%; object-fit:cover;
    border:2px solid var(--teal); box-shadow:0 3px 10px #213d5122; }
  .claire-id h2 { margin:0; font-size:1.35rem; }
  /* Her name sits in a bordered chip to stand out; a small portrait also anchors
     the far right of the ribbon, beside the Talk with Claire button. */
  .claire-id .name-chip { border:1.5px solid var(--teal); border-radius:12px; padding:6px 15px;
    background:var(--mist); }
  .claire-id .name-chip h2 { font-size:1.5rem; color:var(--navy); letter-spacing:.2px; }
  .claire-id .name-chip .muted { color:var(--slate); }
  .avatar-sm { width:52px; height:52px; border-radius:50%; object-fit:cover; flex:none;
    border:2px solid var(--teal); box-shadow:0 2px 8px #213d5122; }
  .claire-actions { display:flex; align-items:center; gap:12px; }
  .claire-status { display:flex; gap:8px; flex-wrap:wrap; }
  .cbadge { display:inline-flex; align-items:center; gap:6px; font-size:.76rem; font-weight:700;
    padding:5px 12px; border-radius:999px; background:var(--mist); color:var(--navy); }
  .cbadge .dot { width:8px; height:8px; border-radius:50%; background:var(--slate); }
  .cbadge.on .dot { background:#1f9d57; } .cbadge.off .dot { background:#c48a1a; }
  .claire-grid { display:grid; grid-template-columns:1.15fr 1fr; gap:18px; align-items:start; }
  @media(max-width:1100px){ .claire-grid { grid-template-columns:1fr; } }
  .ccard { background:#fff; border:1px solid var(--line); border-radius:12px; padding:18px 20px;
    margin-bottom:18px; }
  .ccard h3 { font-size:1.02rem; margin:0 0 6px; }
  .ccard label { margin-top:12px; }
  .ccard-foot { display:flex; align-items:center; justify-content:flex-end; gap:12px; margin-top:14px; }
  .ccard-foot .muted { margin-right:auto; }
  /* Situational Scripts. Every color reads a kit token with a light fallback, so
     the drawer is correct with the Command skin on or off. The table itself is
     bare and already skinned; only these annotations are new. */
  .scr-pill { display:inline-block; padding:2px 9px; border-radius:999px; font-size:.68rem;
    font-weight:700; text-transform:uppercase; letter-spacing:.03em; margin:4px 4px 0 0;
    border:1px solid var(--inh-line, #cfe0e6); color:var(--inh-ink-2, #4E5B62);
    background:var(--inh-surface-2, #f2f7f9); }
  .scr-pill.live { border-color:var(--inh-accent, #0D9B97); color:var(--inh-accent, #0D9B97); }
  .scr-pill.wait { border-color:var(--inh-warn, #a15c00); color:var(--inh-warn, #a15c00); }
  .scr-pill.off { border-color:var(--inh-danger, #B42318); color:var(--inh-danger, #B42318); }
  .scr-pill.sched { border-color:var(--inh-warn, #a15c00); color:var(--inh-warn, #a15c00); }
  .scr-pill.expired { border-color:var(--inh-danger, #B42318); color:var(--inh-danger, #B42318); }
  .scr-dates { display:flex; align-items:center; gap:6px; margin-top:6px; font-size:.75rem;
    color:var(--inh-ink-2, #4E5B62); flex-wrap:wrap; }
  .scr-dates input[type=date] { font-size:.75rem; padding:3px 6px; width:auto; }
  /* The console's own red and amber are chosen against white and are unreadable
     on the Command skin's dark surface: #B42318 on #16303A measures 2.1 to 1.
     Name the tokens here so the pills lift to a legible weight with the skin on,
     and keep the light values as the fallback for the skin off. */
  .inh-cmd { --inh-danger:#F27166; --inh-warn:#E0A32E; }
  /* The first pill on a row is the switch, so it has to be a real button while
     reading as a pill: the state and the control are one thing in one place. */
  .scr-pill.sw { cursor:pointer; font:inherit; font-size:.68rem; font-weight:700;
    line-height:inherit; text-transform:uppercase; letter-spacing:.03em;
    padding:2px 9px; border-radius:999px; }
  .scr-pill.sw:hover { filter:brightness(.94); }
  .scr-pill.sw:focus-visible { outline:2px solid var(--inh-accent, #0D9B97); outline-offset:2px; }
  .scr-acts { display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
  .kpi-block { border:1px solid var(--line); border-radius:10px; padding:12px 14px; margin-bottom:12px;
    background:#fbfdfe; }
  .kpi-block .kpi-name { font-weight:800; color:var(--navy); font-size:.9rem; margin-bottom:8px; }
  .kpi-block label { font-size:.72rem; margin-top:8px; }
  .kpi-row2 { display:grid; grid-template-columns:1fr 160px; gap:10px; }
  .pill.web { background:#e8f4fd; color:#1565a0; }
  .pill.voice { background:#e6e9fd; color:#3d4ba0; }
  .pill.sms, .pill.rcs { background:#f3e8fd; color:#6a3fa0; }
  .pill.email { background:#e6e9fd; color:#3d4ba0; }
  .pill.whatsapp { background:#e3f4ea; color:#1f7a4d; }
  .pill.queued { background:#fff3d6; color:#8a6414; }
  .pill.sent { background:var(--green); color:#2c5e1f; }
  .pill.failed { background:#fdeaea; color:#9c3838; }
  .pill.blocked { background:#FBF3E2; color:#7A5B12; }
  .pill.suppressed { background:#eee; color:#555; }
  .tl-kind.message { background:#e6e9fd; color:#3d4ba0; }
  .pill.acknowledged { background:#d9f0ef; color:#0a6b68; }
  .pill.on_track { background:var(--green); color:#2c5e1f; }
  .pill.watch { background:#fff3d6; color:#8a6414; }
  .pill.off_track { background:#fdeaea; color:#9c3838; }
  .pill.unmeasured { background:#eee; color:#666; }
  .docrow { display:flex; align-items:center; gap:10px; padding:10px 0; border-top:1px solid var(--line); }
  .docrow:first-child { border-top:none; }
  .docrow .dname { font-weight:700; color:var(--navy); }
  .docrow .dmeta { font-size:.78rem; color:var(--slate); }
  .docrow .spacer { flex:1; }
  .toggle { display:inline-flex; align-items:center; gap:6px; font-size:.76rem; font-weight:700;
    color:var(--slate); cursor:pointer; }
  .pill.admin-console { background:var(--navy); color:#fff; }
  #dlg-claire-chat { max-width:600px; width:96vw; }
  .cchat-meta { display:flex; align-items:center; gap:10px; padding:12px 22px; border-bottom:1px solid var(--line);
    flex-wrap:wrap; background:var(--mist); }
  .cchat-meta label { margin:0; }
  .cchat-meta input { width:auto; flex:1; min-width:140px; }
  .cchat-body { height:min(52vh,440px); overflow-y:auto; padding:18px 22px; background:#f6fafc;
    display:flex; flex-direction:column; gap:10px; }
  .cbubble { max-width:82%; padding:10px 14px; border-radius:14px; font-size:.92rem; line-height:1.45;
    white-space:pre-wrap; }
  .cbubble.claire { align-self:flex-start; background:#fff; border:1px solid var(--line); color:var(--ink); }
  .cbubble.you { align-self:flex-end; background:var(--turq); color:#fff; }
  .cchat-status { font-size:.8rem; color:var(--slate); min-height:1em; padding:2px 22px; }
  .cchat-composer { display:flex; align-items:center; gap:10px; padding:14px 22px; border-top:1px solid var(--line); }
  .cchat-composer input { flex:1; }
  /* Idle mic is a prominent turquoise call-to-action that gently pulses to draw
     the eye ("tap to talk"); in a live call it switches to a red pulse. */
  .mic { width:46px; height:46px; flex:none; border-radius:50%; border:none; background:var(--turq);
    display:flex; align-items:center; justify-content:center; color:#fff; cursor:pointer;
    animation:micattract 1.8s ease-in-out infinite; }
  .mic svg { width:22px; height:22px; }
  .mic:hover { filter:brightness(1.08); }
  .mic.live { background:#d3211c; animation:micpulse 1.1s infinite; }
  @keyframes micattract {
    0%   { box-shadow:0 0 0 0 rgba(13,155,151,.55); transform:scale(1); }
    70%  { box-shadow:0 0 0 13px rgba(13,155,151,0); transform:scale(1.06); }
    100% { box-shadow:0 0 0 0 rgba(13,155,151,0); transform:scale(1); } }
  @keyframes micpulse {
    0%,100% { box-shadow:0 0 0 0 rgba(211,33,28,.55); transform:scale(1); }
    50%     { box-shadow:0 0 0 11px rgba(211,33,28,0); transform:scale(1.06); } }
  @media (prefers-reduced-motion: reduce) { .mic, .mic.live { animation:none; } }
  .mic.hidden { display:none; }
  .csend { width:42px; height:42px; flex:none; border-radius:50%; border:none; background:var(--turq); color:#fff;
    font-size:1.2rem; }
  /* The preview dialog sizes to its mode: a phone (narrow) or a computer (wide). */
  #dlg-claire-preview.mode-mobile { max-width:466px; }
  #dlg-claire-preview.mode-desktop { max-width:min(1120px,95vw); width:95vw; }
  /* Desktop: a browser-window frame (traffic lights + address bar) around the
     donor site rendered at computer width. */
  .desktop-wrap { padding:16px 16px 4px; }
  .desktop-frame { border:1px solid var(--line); border-radius:12px; overflow:hidden; background:#fff;
    box-shadow:0 16px 44px #213d5122; }
  .desktop-bar { display:flex; align-items:center; gap:7px; padding:9px 14px; background:#eef3f6;
    border-bottom:1px solid var(--line); }
  .desktop-bar .dot { width:11px; height:11px; border-radius:50%; flex:none; }
  .desktop-bar .dot.r { background:#ff5f57; } .desktop-bar .dot.y { background:#febc2e; }
  .desktop-bar .dot.g { background:#28c840; }
  .desktop-bar .url { margin-left:10px; flex:1; background:#fff; border:1px solid var(--line);
    border-radius:999px; padding:5px 14px; font-size:.8rem; color:var(--slate);
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .desktop-frame iframe { width:100%; height:min(70vh,660px); border:none; display:block; background:#fff; }
  /* iPhone-style device frame around the live donor site: titanium bezel, a
     Dynamic Island, a home indicator, and side buttons, so the mobile demo reads
     as a real phone. The overlays are pointer-events:none so they never block the
     page underneath. */
  .phone-wrap { position:relative; width:394px; max-width:100%; margin:20px auto 8px; }
  .phone-wrap::before { content:''; position:absolute; left:-3px; top:150px; width:4px; height:72px;
    background:#0b0b0d; border-radius:4px 0 0 4px; }         /* volume rocker */
  .phone-wrap::after { content:''; position:absolute; right:-3px; top:186px; width:4px; height:98px;
    background:#0b0b0d; border-radius:0 4px 4px 0; }         /* side button */
  .phone-frame { position:relative; width:100%; height:min(74vh,720px); background:#000;
    border:13px solid #0c0c0e; border-radius:54px; overflow:hidden;
    box-shadow:0 22px 55px #213d5140, inset 0 0 3px 1px #34343c; }
  .phone-frame iframe { width:100%; height:100%; border:none; background:#fff; display:block; }
  .phone-island { position:absolute; top:11px; left:50%; transform:translateX(-50%); width:118px; height:30px;
    background:#000; border-radius:16px; z-index:4; pointer-events:none; }
  .phone-home { position:absolute; bottom:8px; left:50%; transform:translateX(-50%); width:135px; height:5px;
    background:rgba(18,18,20,.55); border-radius:3px; z-index:4; pointer-events:none; }
  #login-box .msg.ok { color:#2c5e1f; }
  /* Donor workspace: the donor dialog grown into a full-size inset with the
     contact record up top and the live read-only portal mirror below. */
  #dlg-donor { max-width:min(1500px,97vw); width:97vw; }
  /* The portal mirror makes this one tall on purpose, so its body takes the whole
     height the dialog has rather than stopping at the 70vh the others use. The
     bounding itself is the shared rule above. */
  #dlg-donor .dlg-body { max-height:none; }
  .dw-grid { display:grid; grid-template-columns:minmax(340px,5fr) minmax(340px,7fr);
    gap:0 32px; align-items:start; }
  @media (max-width:1000px){ .dw-grid { grid-template-columns:1fr; } }
  .dw-transcript { margin:6px 0 12px; padding:10px 12px; background:#f6f9fb;
    border:1px solid var(--line); border-radius:10px; max-height:340px; overflow-y:auto; }
  #dw-portal { margin-top:24px; border-top:1px solid var(--line); padding-top:16px; }
  #dw-portal .desktop-wrap { padding:10px 0 0; }
  #dw-portal iframe { height:min(78vh,860px); }
  /* Sits above the fleet's bottom-right "Ask Ash" launcher (#inheris-ash-btn,
     ~60px tall) so a persistent guided error never covers it. */
  /* Literal navy, not var(--navy): the toast is a dark overlay in BOTH skins,
     and --navy remaps to a light tint under Command (white text would vanish).
     #213D51 is navy's own Atrium value, so the light skin is unchanged. */
  #toast { position:fixed; bottom:74px; right:22px; background:#213D51; color:#fff;
    padding:12px 18px; border-radius:10px; display:none; z-index:200; font-weight:600;
    gap:14px; align-items:flex-start; max-width:min(440px, calc(100vw - 44px));
    box-shadow:0 6px 24px rgba(9,22,22,.28); }
  /* Guided kinds: an error waits and can carry a next step, so it earns a
     stronger ground than a passing "Saved." confirmation. White text holds on
     all three in either skin (the pill is dark in both). */
  #toast.toast-error { background:#7A2E1B; }
  #toast.toast-warn  { background:#8A6414; }
  #toast.toast-ok    { background:#2C5E1F; }
  #toast .toast-msg  { line-height:1.4; }
  #toast .toast-action { background:#fff; color:#213D51; border:0; border-radius:7px;
    padding:6px 11px; font-weight:700; cursor:pointer; white-space:nowrap; flex:none; }
  #toast .toast-x { background:transparent; border:0; color:#fff; font-size:19px; line-height:1;
    cursor:pointer; opacity:.75; padding:0 2px; flex:none; }
  #toast .toast-x:hover { opacity:1; }
  .empty { padding:26px; text-align:center; color:var(--slate); background:#fff;
    border:1px dashed var(--line); border-radius:12px; }
  /* A guided empty state paints with the kit surface + ink tokens (with light
     fallbacks, per the fleet SKIN RULE) so it reads in both skins, rather than
     inheriting the base .empty white ground where Command's light ink would
     vanish. */
  .empty.guided { background:var(--inh-surface,#fff); border-color:var(--inh-line,var(--line)); }
  .empty.guided .empty-title { font-weight:700; color:var(--inh-ink-1,var(--navy)); margin-bottom:4px; }
  .empty.guided .empty-hint { color:var(--inh-ink-2,var(--slate)); font-size:.9rem; margin:0 auto 12px;
    max-width:42ch; line-height:1.45; }
  .report { background:var(--mist); border-radius:10px; padding:14px 18px; margin-top:14px; }
  pre.mailbody { white-space:pre-wrap; font-family:inherit; font-size:.88rem; margin:6px 0 0;
    color:var(--slate); }
  .conv-row { display:flex; justify-content:space-between; align-items:center; gap:10px;
    padding:9px 12px; border:1px solid var(--line); border-radius:10px; margin-bottom:8px; background:#fff; }
  .conv-row .meta { font-size:.82rem; color:var(--slate); }
  .intent-row { background:var(--green); color:#2c5e1f; border-radius:10px; padding:9px 12px;
    margin-bottom:8px; font-size:.9rem; }
  .tbubble { max-width:82%; padding:10px 13px; border-radius:14px; font-size:.92rem; margin-bottom:8px;
    line-height:1.5; }
  .tbubble.donor { margin-left:auto; background:var(--navy); color:#fff; border-bottom-right-radius:4px; }
  .tbubble.steward { background:var(--mist); border:1px solid var(--line); border-bottom-left-radius:4px; }
  .tbubble .stamp { display:block; font-size:.68rem; opacity:.65; margin-top:3px; }
  .audio-note { background:var(--mist); border:1px dashed var(--teal); border-radius:10px;
    padding:10px 14px; margin-bottom:12px; font-size:.85rem; color:var(--slate); }
  @media print {
    header.top, nav.tabs, .toolbar, #toast { display:none !important; }
    .panel { display:none !important; }
    #panel-form990 { display:block !important; }
    body { background:#fff; }
  }
  /* ---- Command palette (Cmd/Ctrl-K) ---- */
  .cmdk{position:fixed;inset:0;z-index:9000;display:none;align-items:flex-start;justify-content:center;background:rgba(9,22,22,.5);padding:12vh 16px 16px}
  .cmdk[data-open]{display:flex}
  .cmdk-box{width:100%;max-width:560px;background:#fff;border:1px solid #dce6ea;border-radius:14px;box-shadow:0 24px 60px -18px rgba(15,42,58,.5);overflow:hidden}
  .cmdk-in{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid #dce6ea}
  .cmdk-in svg{width:18px;height:18px;color:#5b7480;flex:0 0 auto}
  .cmdk-in input{flex:1;border:0;outline:0;font:inherit;font-size:15px;background:transparent;color:#16323a;padding:0}
  .cmdk-list{max-height:52vh;overflow:auto;padding:6px}
  .cmdk-sec{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:#5b7480;font-weight:800;padding:10px 12px 4px}
  .cmdk-row{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px;cursor:pointer;color:#16323a;text-decoration:none;font-size:14px}
  .cmdk-row small{color:#5b7480;margin-left:auto;font-size:12px}
  .cmdk-tag{width:40px;height:24px;border-radius:6px;display:grid;place-items:center;font-weight:800;font-size:10px;background:#eef4f6;color:#1a4b52;flex:0 0 auto}
  .cmdk-row[aria-selected="true"],.cmdk-row:hover{background:#eef4f6}
  .cmdk-trigger{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid #5b7480;border-radius:8px;padding:6px 10px;color:#5b7480;cursor:pointer;font-size:13px;font-family:inherit;transition:border-color .14s,color .14s}
  .cmdk-trigger svg{width:14px;height:14px;transition:color .14s}
  .cmdk-trigger kbd{display:inline-flex;align-items:center;justify-content:center;gap:5px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:1;border:1px solid #5b7480;border-radius:4px;padding:3px 7px;background:#eef4f6;transition:border-color .14s,color .14s}
  .cmdk-trigger:hover{border-color:var(--turq,#0D9B97);color:var(--turq,#0D9B97)}
  .cmdk-trigger:hover kbd{border-color:var(--turq,#0D9B97)}
  .inh-cmd .cmdk-box{background:var(--inh-surface);border-color:var(--inh-line)}
  .inh-cmd .cmdk-in{border-color:var(--inh-line)}
  .inh-cmd .cmdk-in input,.inh-cmd .cmdk-row{color:#E8F0F5}
  .inh-cmd .cmdk-in svg,.inh-cmd .cmdk-sec,.inh-cmd .cmdk-row small{color:var(--inh-ink-3)}
  .inh-cmd .cmdk-row[aria-selected="true"],.inh-cmd .cmdk-row:hover{background:var(--inh-surface-2)}
  .inh-cmd .cmdk-tag{background:var(--inh-surface-2);color:var(--inh-accent)}
  .inh-cmd .cmdk-trigger{background:var(--inh-surface);border-color:var(--inh-ink-3);color:var(--inh-ink-3)}
  .inh-cmd .cmdk-trigger kbd{border-color:var(--inh-ink-3);background:var(--inh-surface-2)}
  .inh-cmd .cmdk-trigger:hover{border-color:var(--inh-accent);color:var(--inh-accent)}
  .inh-cmd .cmdk-trigger:hover kbd{border-color:var(--inh-accent)}

  /* ====================================================================
     Inheris pill rail + slide-out drawer (agent console pattern; Claire
     pilots it, Athena and Stuart can adopt the same rail later).
     Self-contained and kit-ready: every color reads a skin-remapped
     local var or var(--inh-*, light-fallback), so the block is correct
     with the Command skin on or off and needs no .inh-cmd overrides.
     Drawers are native dialogs reusing the shared .dlg-head / .dlg-body
     / .dlg-foot chrome. Pills are 999px.
     ==================================================================== */
  .inh-pillrail { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin:2px 0 18px; }
  .inh-pillrail .rail-sep { width:1px; height:22px; background:var(--line); margin:0 4px; }
  .inh-pillbtn { display:inline-flex; align-items:center; gap:8px; border-radius:999px;
    border:1.5px solid var(--line); background:var(--inh-surface,#fff);
    color:var(--navy); font-weight:700; font-size:.85rem; padding:7px 16px; }
  .inh-pillbtn:hover { border-color:var(--turq); color:var(--turq); }
  .inh-pillbtn .cnt { min-width:20px; text-align:center; border-radius:999px; padding:1px 7px;
    font-size:.72rem; background:var(--turq); color:var(--inh-bg,#fff); }
  .inh-pillbtn .cnt:empty { display:none; }
  .inh-pillbtn .dot { width:8px; height:8px; border-radius:50%; background:var(--slate); }
  .inh-pillbtn .dot.on { background:#1f9d57; }

  dialog.inh-drawer { position:fixed; inset:0 0 0 auto; margin:0; height:100dvh; max-height:100dvh;
    /* 930, half again on the 620 these opened at, because the tables and the
       long-form text inside them read better with the room. The 92vw cap still
       decides on anything narrower than about 1010 wide. */
    width:min(930px,92vw); max-width:none; border-radius:0; padding:0;
    background:var(--inh-surface,#fff); border-left:1px solid var(--line);
    box-shadow:-18px 0 60px #213d5140; transform:translateX(102%); transition:transform .28s ease; }
  dialog.inh-drawer[open] { display:flex; flex-direction:column; }
  dialog.inh-drawer.in { transform:translateX(0); }
  dialog.inh-drawer::backdrop { background:#213d5152; }
  dialog.inh-drawer .dlg-head { display:flex; align-items:center; gap:12px; flex:none; }
  dialog.inh-drawer .dlg-head .dlg-close { margin-left:auto; background:transparent; border:1.5px solid
    rgba(255,255,255,.5); color:#fff; border-radius:999px; padding:3px 13px; font-size:.85rem; font-weight:700; }
  dialog.inh-drawer .dlg-head .dlg-close:hover { background:#fff; color:var(--navy); }
  dialog.inh-drawer .dlg-body { flex:1; max-height:none; overflow-y:auto; overscroll-behavior:contain; }
  dialog.inh-drawer .dlg-foot { flex:none; background:var(--inh-surface,#fff); }
  @media (prefers-reduced-motion: reduce) {
    dialog.inh-drawer { transition:none; transform:none; }
  }

  /* Behavior equalizer deck, ported from the Ash agent admin console. Faders
     tune manner, never integrity; the vertical range trick (writing-mode +
     rtl) is load-bearing. */
  .eq-sub { color:var(--slate); font-size:12.5px; margin:0 0 10px; }
  .eq-integrity { display:flex; align-items:center; gap:10px; flex-wrap:wrap; border:1px solid var(--line);
    border-radius:10px; padding:8px 12px; margin:6px 0 14px; background:var(--mist); }
  .eq-integrity .lbl { font-size:10.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--slate); }
  .eq-integrity .items { display:flex; gap:14px; flex-wrap:wrap; font-size:12.5px; color:var(--navy); font-weight:700; }
  .eq-integrity .nh { margin-left:auto; font-size:10.5px; color:var(--slate); }
  .eq-stage { display:inline-block; font-size:11px; font-weight:700; border-radius:20px; padding:2px 10px; }
  .eq-stage.live { background:var(--inh-ok-bg,#e7f6f1); color:var(--inh-ok,#137e78); }
  .eq-stage.staged { background:var(--inh-warn-bg,#fff3e0); color:var(--inh-warn,#a15c00); }
  .eq-explain { font-size:13px; color:var(--slate); margin:0 0 12px; font-style:italic; }
  .eq-presets { display:flex; gap:7px; flex-wrap:wrap; margin:0 0 14px; }
  .eq-chip { cursor:pointer; font-size:12px; padding:4px 11px; border-radius:20px; border:1px solid var(--line);
    background:var(--inh-surface,#fff); color:var(--ink); }
  .eq-chip:hover { border-color:var(--teal); color:var(--turq); }
  .eq-bands { display:flex; gap:14px; align-items:flex-start; overflow-x:auto; padding:2px 0; }
  .eq-bandgroup { display:flex; flex-direction:column; gap:6px; }
  .eq-bandgroup+.eq-bandgroup { padding-left:14px; border-left:1px dashed var(--line); }
  .eq-band-label { font-size:10px; text-transform:uppercase; letter-spacing:.05em; color:var(--slate); font-weight:800; }
  .eq-deck { display:flex; gap:10px; align-items:flex-start; }
  .eq-fader { width:64px; display:flex; flex-direction:column; align-items:center; gap:5px; }
  .eq-cap { font-size:9px; color:var(--slate); text-align:center; height:26px; line-height:1.1; overflow:hidden; width:100%; }
  .eq-slot { position:relative; height:132px; display:flex; align-items:center; justify-content:center; }
  .eq-slot::after { content:""; position:absolute; left:50%; top:50%; width:18px; height:1px;
    background:var(--slate); opacity:.55; transform:translate(-50%,-50%); pointer-events:none; }
  .eq-slot input[type=range] { writing-mode:vertical-lr; direction:rtl; width:22px; height:130px; margin:0;
    cursor:pointer; background:transparent; padding:0; border:none; }
  .eq-slot input[type=range]:disabled { cursor:not-allowed; opacity:.6; }
  .eq-name { font-size:10.5px; font-weight:700; color:var(--navy); text-align:center; line-height:1.15;
    min-height:24px; width:100%; overflow-wrap:break-word; }
  .eq-val { font-size:10px; color:var(--slate); }
  /* The gated/lock badge sits on its own line under the name, anchored to its
     fader; inline it wrapped inside the narrow column and the dot floated. */
  .eq-gate { display:block; color:var(--inh-warn,#a15c00); font-size:9px; margin-top:2px; text-align:center; }
  .eq-lock { display:block; color:var(--slate); font-size:9px; margin-top:2px; text-align:center; }
  .eq-preview { margin-top:14px; border-top:1px solid var(--line); padding-top:12px; }
  .eq-preview .lbl { font-size:10.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--slate); margin-bottom:6px; }
  .eq-prow { display:flex; gap:8px; }
  .eq-prow input { flex:1; }
  .eq-reply { font-size:13.5px; color:var(--ink); line-height:1.55; background:var(--inh-surface-2,#f6fafc);
    border-radius:9px; padding:10px 12px; margin-top:8px; min-height:20px; white-space:pre-wrap; }
  .eq-reply.muted { color:var(--slate); font-style:italic; }
  .eq-foot { margin-top:14px; border-top:1px solid var(--line); padding-top:12px; display:flex;
    align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; }
  .eq-status { font-size:12px; color:var(--slate); }
  .eq-status.dirty { color:var(--inh-warn,#a15c00); font-weight:700; }
  .eq-unavail { color:var(--slate); font-size:13px; padding:8px 0; }

/* --- Opportunities reporting panel (Reporting tab, wireframe 2026-08-25) --- */
.oppr-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:12px; }
.oppr-head select, .oppr-head input[type=date] { width:auto; }
.oppr-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:22px; align-items:start; }
.oppr-sec h4 { margin:0 0 10px; font-size:.92rem; color:var(--inh-ink-1, var(--navy)); }
.oppr-stats { display:grid; grid-template-columns:repeat(2, 1fr); gap:8px; margin-bottom:12px; }
.oppr-stat { border:1px solid var(--inh-line, var(--line)); border-radius:10px; padding:8px 10px;
  background:var(--inh-surface, #fff); }
.oppr-stat b { display:block; font-family:'Nunito',sans-serif; font-size:1.12rem;
  color:var(--inh-ink-1, var(--navy)); }
.oppr-stat span { color:var(--inh-ink-3, var(--slate)); font-size:.72rem; }
.oppr-pill { display:inline-block; padding:1px 9px; border-radius:999px; font-size:.68rem;
  font-weight:800; text-transform:uppercase; }
.oppr-pill.won { background:var(--green, #D1F2BD); color:#2c5e1f; }
.oppr-pill.lost { background:#FBEEEC; color:#B42318; }
.oppr-pill.aging { background:#F8F1E0; color:#8A6414; }
.inh-cmd .oppr-pill.won { background:rgba(52,211,153,.16); color:#34D399; }
.inh-cmd .oppr-pill.lost { background:rgba(248,113,113,.14); color:#F87171; }
.inh-cmd .oppr-pill.aging { background:rgba(251,191,36,.14); color:#FBBF24; }
.oppr-funnel-row { margin:6px 0; }
.oppr-funnel-row .lbl { font-size:.76rem; color:var(--inh-ink-3, var(--slate));
  display:flex; justify-content:space-between; gap:8px; }
.oppr-bar { height:12px; background:var(--inh-surface-2, var(--mist)); border-radius:6px;
  overflow:hidden; margin-top:2px; }
.oppr-bar i { display:block; height:100%; background:var(--inh-accent, var(--turq)); }
.oppr-note { font-size:.76rem; line-height:1.5; margin:10px 0 0; }
#oppr-outcomes table td, #oppr-aging table td { font-size:.8rem; }
#oppr-aging tr.click { cursor:pointer; }
#oppr-aging tr.click:hover td { background:var(--inh-surface-2, var(--mist)); }
