/**
 * OP-UI (2026-07-04): the SHARED Home-grid look for every portal grid
 * (OASIS + DC + SNV). Extracted from the OASIS portal after Jairus
 * approved its final form, so the look is defined ONCE — a future
 * tweak lands on all portals with one edit.
 *
 * The numbers are MEASURED against the Home grid (assets/styles.css
 * .grid-view-table): 28px rows = 15px content line + 12px padding +
 * 1px border; 10px vertical gaps between tabs / grid / bottom line.
 * Known row-inflaters this file guards against: the global input
 * margin (+3px), line-height 1.3 (+2px), and the inline-baseline gap
 * under native selects (fixed by display:block + 15px height).
 */

/* ----------------------------------------------------------------
 * Panel rhythm — kill the portal panel's 14px flex gap; explicit
 * 10px margins like Home.
 * ---------------------------------------------------------------- */
.portal-panel {
  gap: 0;
}
.portal-panel .snv-tabs-row {
  margin-bottom: 10px;
}
.portal-panel .grid-bottom-bar {
  margin-top: 10px;
}

/* ----------------------------------------------------------------
 * Header search (sits next to the tabs, Home-style) + the tiny
 * filter dropdown beside it.
 * ---------------------------------------------------------------- */
.portal-search-bar {
  display: flex;
  align-items: center;
  gap: 8px;
}
.portal-search-bar .board-search-field {
  margin: 0;
}
.portal-type-mini {
  height: 40px;
  box-sizing: border-box;
  width: auto;
  flex: 0 0 auto;
  font-size: 0.82rem;
  padding: 0 8px;
}

/* ----------------------------------------------------------------
 * The grid — Home density.
 * ---------------------------------------------------------------- */
.portal-grid-table {
  font-size: 0.82rem;
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  width: max-content;
  min-width: 100%;
}
.portal-grid-table thead th {
  padding: 8px 10px;
  font-size: 0.7rem;
  letter-spacing: 0.05em;
  font-weight: 700;
  color: var(--moss, #1f5d4d);
  background: var(--cream-deep, #f4ecdb);
  border-right: 1px solid var(--border-soft, #d4d4d4);
}
.portal-grid-table tbody td {
  padding: 6px 10px;
  line-height: normal;
  white-space: nowrap;
  border-right: 1px solid var(--border-soft, #e6e0d0);
  border-bottom: 1px solid var(--border-soft, #e6e0d0);
  max-width: 240px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.portal-grid-table tbody tr:hover td {
  background: color-mix(in srgb, var(--teal) 8%, var(--surface));
  box-shadow: inset 0 2px 0 0 var(--teal), inset 0 -2px 0 0 var(--teal);
}
/* The global input margin (3-4px/side) is the tallest thing in a row
   — kill it on grid checkboxes. */
.portal-grid-table input[type="checkbox"] {
  margin: 0;
  display: block;
  margin-inline: auto;
}
.portal-col-check {
  width: 34px;
  text-align: center;
}
.portal-dash {
  color: var(--muted, #607274);
  opacity: 0.55;
}
.portal-cell-sub {
  color: var(--muted, #607274);
  font-size: 0.74rem;
}

/* Flat status cells — the Home grid's exact colors, plus Missed
   (rose, matching the SNV pill palette) for the portals that use it. */
.portal-grid-table td.pg-done,
.portal-grid-table tbody tr:hover td.pg-done {
  background: #d9f0e0 !important;
  color: #1f6d44 !important;
  font-weight: 600;
}
.portal-grid-table td.pg-verify,
.portal-grid-table tbody tr:hover td.pg-verify,
.portal-grid-table td.pg-pend,
.portal-grid-table tbody tr:hover td.pg-pend {
  background: #ffe9bf !important;
  color: #8a4b00 !important;
  font-weight: 600;
}
.portal-grid-table td.pg-missed,
.portal-grid-table tbody tr:hover td.pg-missed {
  background: var(--rose-soft, #f6dcdc) !important;
  color: var(--rose, #b45857) !important;
  font-weight: 600;
}
/* Home's red carried over (Jairus 2026-07-05): a pill past its due date
   without Done — For Verification INCLUDED ("technically still overdue")
   — or Pending sitting > 48h. Same palette as .grid-cell-overdue /
   .grid-cell-pending-aged so "this cell is hot" reads identically on
   the Home grid and the portals. */
.portal-grid-table td.pg-overdue,
.portal-grid-table tbody tr:hover td.pg-overdue {
  background: #fde2e3 !important;
  color: #9d2030 !important;
  font-weight: 700;
}
.portal-grid-table td.pg-inert,
.portal-grid-table tbody tr:hover td.pg-inert {
  background: #f4f2ec !important;
  color: #9a958a !important;
  text-align: center;
}
/* SNV visit-list items (the expanded child rows) keep their pill
   spans/selects — slim them + the list paddings to the portal scale. */
.portal-grid-table .snv-visit-status,
.portal-grid-table .snv-status-inline-edit {
  font-size: 0.74rem;
  padding-top: 1px;
  padding-bottom: 1px;
}
.portal-grid-table .snv-visit-item {
  padding: 2px 0;
  font-size: 0.8rem;
}
.portal-grid-table .snv-caret-btn {
  width: auto;
  height: 15px;
  padding: 0 4px;
  line-height: 1;
  font-size: 0.8rem;
  border: none;
  background: transparent;
  display: block;
  margin: 0 auto;
}

/* The pending-items widget badge (pending_widget.css) is 23px tall by
   default — slim it to the 15px content line inside portal grids. */
.portal-grid-table .pending-badge {
  height: 15px;
  box-sizing: border-box;
  padding: 0 8px;
  font-size: 0.72rem;
  gap: 4px;
}

/* Editable status cells hold a borderless native select — the cell's
   color shows through; display:block + 15px height kill the inline-
   baseline gap that otherwise inflates the row. */
.pg-cell-select {
  display: block;
  width: 100%;
  height: 15px;
  border: none;
  background: transparent;
  font: inherit;
  color: inherit;
  padding: 0;
  cursor: pointer;
}
.pg-cell-select:focus {
  outline: 1px dashed currentColor;
  outline-offset: 2px;
}
.portal-grid-table td.pg-editable:hover {
  outline: 1px dashed currentColor;
  outline-offset: -1px;
}

/* ----------------------------------------------------------------
 * The single bottom line: selection summary + batch groups (each
 * ending in a bare ✓ ICON) + action/export mini-buttons.
 * ---------------------------------------------------------------- */
.pg-bottom-line {
  border-right: none;
  padding-right: 0;
  flex-wrap: wrap;
  row-gap: 6px;
  /* OP5.1 (2026-07-05): the line is itself a flex ITEM of
     .grid-bottom-bar — without min-width:0 its minimum size is its
     full content width, so it OVERFLOWED the window instead of letting
     its own flex-wrap kick in on resize (Jairus-reported). */
  flex: 1 1 auto;
  min-width: 0;
}
.pg-bottom-summary {
  font-size: 0.74rem;
  color: var(--muted, #607274);
  white-space: nowrap;
}
.pg-bottom-group {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 0.74rem;
  font-weight: 600;
  color: var(--moss, #1f5d4d);
  white-space: nowrap;
}
.pg-mini-select {
  width: auto;
  flex: 0 0 auto;
  font-size: 0.74rem;
  padding: 3px 6px;
  border: 1px solid var(--border-soft, #d4d4d4);
  border-radius: 6px;
  background: #fff;
  color: var(--moss, #1f5d4d);
  height: auto;
}
.pg-mini-select:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}
.grid-mini-btn.pg-mini-danger {
  color: var(--rose, #b45857);
}
.grid-mini-btn.pg-mini-danger:hover:not(:disabled) {
  border-color: var(--rose, #b45857);
  background: var(--rose-soft, #f6dcdc);
}
.grid-mini-btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
/* Home grid batch-Mark bits: the leading checkbox column (sticky-first,
   fixed narrow) + the Mark controls' mount in the bottom bar. */
.grid-batch-col,
.grid-view-table thead th.grid-batch-col,
.grid-view-table tbody td.grid-batch-col {
  width: 34px;
  min-width: 34px;   /* beat the grid's generic 90px header min-width */
  max-width: 34px;
  text-align: center;
}
.grid-view-table .grid-batch-col input[type="checkbox"] {
  margin: 0;
  display: block;
  margin-inline: auto;
}
.grid-batch-mark {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
}
.grid-batch-mark:empty {
  display: none;
}
.grid-batch-mark .pg-bottom-group {
  padding-right: 8px;
  border-right: 1px solid var(--border-soft, #d4d4d4);
}

/* ----------------------------------------------------------------
 * OASIS task-type chips — shared by the OASIS Portal grid and the
 * case pop-up's mini OASIS table (OP4).
 * ---------------------------------------------------------------- */
.oasis-type-chip {
  display: inline-block;
  padding: 0 8px;
  border-radius: 999px;
  font-weight: 700;
  font-size: 0.68rem;
  letter-spacing: 0.04em;
  white-space: nowrap;
}
.oasis-type-initial {
  background: rgba(23, 95, 99, 0.12);
  color: var(--teal, #175f63);
}
.oasis-type-roc {
  background: rgba(90, 74, 158, 0.12);
  color: #5a4a9e;
}
.oasis-type-transfer {
  background: var(--amber-soft, #f8e4cb);
  color: var(--amber, #c9822b);
}

/* ----------------------------------------------------------------
 * OP4 (2026-07-05): the case pop-up's mini OASIS table + its
 * record-event line, and the calendar's OASIS event markers.
 * ---------------------------------------------------------------- */
.oasis-mini-wrap {
  margin-bottom: 10px;
}
.oasis-mini-table {
  border: 1px solid var(--border-soft, #e6e0d0);
  border-radius: 6px;
}
.oasis-mini-add {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 6px;
  font-size: 0.74rem;
  font-weight: 600;
  color: var(--moss, #1f5d4d);
  flex-wrap: wrap;
}
.oasis-mini-add input[type="date"] {
  width: auto;
  flex: 0 0 auto;
  font-size: 0.74rem;
  padding: 2px 6px;
}
.oasis-mini-add .oasis-mini-portal-link {
  margin-left: auto;
  font-size: 0.74rem;
  width: auto;
}
.oasis-mini-loading {
  padding: 8px 2px;
}

/* Calendar day-cell OASIS marker: a small letter chip (S/T/R). */
.vmm-oasis-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 12px;
  height: 12px;
  border-radius: 3px;
  font-size: 0.55rem;
  font-weight: 800;
  line-height: 1;
  vertical-align: top;
  margin-left: 1px;
}
.vmm-oasis-initial {
  background: rgba(23, 95, 99, 0.18);
  color: var(--teal, #175f63);
}
.vmm-oasis-transfer {
  background: var(--amber-soft, #f8e4cb);
  color: var(--amber, #c9822b);
}
.vmm-oasis-roc {
  background: rgba(90, 74, 158, 0.18);
  color: #5a4a9e;
}

/* ----------------------------------------------------------------
 * OP-FILTER (2026-07-05): the shared filter bubble + its two toolbar
 * icons (funnel = open bubble, funnel-X = clear all, red when armed).
 * Used by the Home grid and all three portals via filter_bubble.js.
 * ---------------------------------------------------------------- */
/* Bare icons — same visual language as the ↑ sort-direction arrow
   (no border, no box; just the colored glyph). */
.pg-filter-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;             /* defeat the global button{width:100%} */
  flex: 0 0 auto;
  border: none;
  background: transparent;
  padding: 2px 4px;
  margin: 0;
  cursor: pointer;
  color: var(--moss, #1f5d4d);
}
.pg-filter-btn svg {
  display: block;
}
.pg-filter-btn:hover:not(:disabled) {
  color: var(--teal, #175f63);
  background: transparent;
  transform: none;
}
.pg-filter-btn:disabled {
  opacity: 0.3;
  cursor: default;
}
.pg-filter-clear.is-armed {
  color: var(--rose, #b45857);
  opacity: 1;
}
.pg-filter-clear.is-armed:hover {
  color: #93403f;
}
.pg-filter-bubble {
  position: fixed;
  z-index: 400;
  width: 260px; /* was 300 — Jairus: too wide */
  padding: 10px 12px;
  background: var(--surface, #fffdf7);
  border: 1px solid var(--border-soft, #d4d4d4);
  border-radius: 12px;
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.16);
}
/* 2026-07-05 (Jairus): the filter ROWS scroll after ~2 of them; the
   head (Filters · + · ×) stays pinned above the scroll area. */
.pg-filter-body {
  max-height: 232px;
  overflow-y: auto;
  overscroll-behavior: contain;
  margin-right: -6px;   /* keep the scrollbar off the row controls */
  padding-right: 6px;
}
.pg-filter-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
  font-size: 0.85rem;
  color: var(--moss, #1f5d4d);
}
.pg-filter-head-actions {
  display: inline-flex;
  gap: 4px;
}
.pg-filter-add,
.pg-filter-close,
.pg-filter-remove {
  width: auto;
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 1rem;
  font-weight: 700;
  line-height: 1;
  padding: 2px 6px;
  color: var(--muted, #607274);
}
.pg-filter-add:hover:not(:disabled),
.pg-filter-close:hover {
  color: var(--teal, #175f63);
}
.pg-filter-add:disabled {
  opacity: 0.35;
  cursor: default;
}
.pg-filter-remove:hover {
  color: var(--rose, #b45857);
}
.pg-filter-row {
  padding: 6px 0;
  border-top: 1px dashed rgba(216, 209, 196, 0.8);
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.pg-filter-row-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--muted, #607274);
  font-weight: 600;
}
.pg-filter-row select,
.pg-filter-row input {
  width: 100%;
  font-size: 0.8rem;
  padding: 4px 6px;
}
.pg-filter-opvalue {
  display: flex;
  gap: 6px;
}
.pg-filter-opvalue select {
  flex: 0 0 42%;
}
.pg-filter-daterange {
  display: flex;
  gap: 6px;
}
.pg-filter-daterange label {
  flex: 1 1 0;
  font-size: 0.7rem;
  color: var(--muted, #607274);
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.pg-filter-empty {
  margin: 4px 0;
  font-size: 0.8rem;
  color: var(--muted, #607274);
}

/* The ✓ that applies a batch group — a bare icon (sort-arrow style). */
.pg-check-btn {
  width: auto;
  flex: 0 0 auto;
  border: none;
  background: transparent;
  color: var(--moss, #1f5d4d);
  font-size: 1rem;
  font-weight: 800;
  line-height: 1;
  padding: 0 3px;
  margin: 0;
  cursor: pointer;
}
.pg-check-btn:hover:not(:disabled) {
  color: var(--teal, #175f63);
  transform: none;
}
.pg-check-btn:disabled {
  opacity: 0.3;
  cursor: default;
}

/* ----------------------------------------------------------------
 * OP-IMP (2026-07-05): the OASIS bulk-import review modal — plans
 * segregated by event type (SOC / REC / Transfer / ROC), each with a
 * select-all; the reject pile sits below in rose.
 * ---------------------------------------------------------------- */
.oasis-review-card {
  width: min(760px, 94vw);
}
.oasis-review-section {
  margin: 10px 0;
  border: 1px solid var(--sand-line, #e7ddc6);
  border-radius: 10px;
  padding: 8px 10px;
  background: #fffdf6;
}
.oasis-review-section.is-rejected {
  border-color: #ecc9cb;
  background: #fdf3f3;
}
.oasis-review-section-head {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 6px;
}
.oasis-review-section-head label { display: inline-flex; align-items: center; gap: 6px; }
.oasis-review-section-head input[type="checkbox"] { width: auto; margin: 0; }
.oasis-review-list {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 220px;
  overflow-y: auto;
}
.oasis-review-row {
  padding: 6px 4px;
  border-top: 1px dashed var(--sand-line, #e7ddc6);
  font-size: 0.85rem;
}
.oasis-review-row:first-child { border-top: none; }
.oasis-review-check {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  cursor: pointer;
}
.oasis-review-check input[type="checkbox"] { width: auto; margin: 3px 0 0; flex: 0 0 auto; }
.oasis-review-badge {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 999px;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  background: #eef;
  color: #223a86;
  vertical-align: 1px;
}
.oasis-review-badge.is-new   { background: #dff1e5; color: #1f6d44; }
.oasis-review-badge.is-warn  { background: #ffe9bf; color: #8a4b00; }
.oasis-review-badge.is-reject{ background: #fde2e3; color: #9d2030; }
.oasis-review-reason { color: #9d2030; font-size: 0.82rem; }
.oasis-review-date {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 4px 0 0 26px;
  font-size: 0.8rem;
}
.oasis-review-date input[type="date"] {
  width: auto;
  margin: 0;
  padding: 2px 6px;
  font-size: 0.8rem;
}

/* OP-IMP round 2: grouped review — one explanation line per group,
   one-line rows, collapsible reject pile. */
.oasis-review-intro { margin: 0 0 6px; }
.oasis-review-group { margin: 6px 0; }
.oasis-review-group-head {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
}
.oasis-review-group-head label { display: inline-flex; align-items: center; gap: 6px; }
.oasis-review-group-head input[type="checkbox"] { width: auto; margin: 0; }
.oasis-review-group-head .muted-copy { font-size: 0.78rem; }
.oasis-review-row { display: flex; align-items: center; gap: 8px; }
.oasis-review-row .oasis-review-check { flex: 1 1 auto; align-items: center; }
.oasis-review-tdate {
  width: auto;
  flex: 0 0 auto;
  margin: 0;
  padding: 1px 4px;
  font-size: 0.78rem;
}
.oasis-review-rejectpile { margin-top: 10px; }
.oasis-review-rejectpile summary { cursor: pointer; color: #9d2030; }
.oasis-review-rejectpile .oasis-review-list { max-height: 160px; }
/* The review's four action buttons sit on ONE right-aligned row —
   defeat the global button{width:100%}. */
#oasisReviewActions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
  flex-wrap: wrap;
  align-items: center;
}
#oasisReviewActions button {
  width: auto;
  flex: 0 0 auto;
}

/* OP-CSORT (2026-07-05): the sort-direction button's color square —
   shows which color is being sorted first (green/orange/amber/red). */
.sort-color-chip {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 2px;
  vertical-align: middle;
  line-height: 1;
}

/* OP-IMP: the import modal's Cancel + Import sit on ONE row; Cancel
   gets its own muted sand tone so the pair reads apart at a glance. */
#oasisImportModal .modal-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
  align-items: center;
}
#oasisImportModal .modal-actions button {
  width: auto;
  flex: 0 0 auto;
}
#oasisImportCancelBtn {
  background: #efe9da;
  color: #6f6754;
  border: 1px solid #d9d2c0;
}
#oasisImportCancelBtn:hover {
  background: #e6dfcc;
  color: #4f4a3c;
}

/* N2b (2026-07-07): nudge marks on the portal grids (SNV / DC / OASIS).
   Rows holding an item nudged at ME get the red frame + a megaphone by
   the MRN; an OASIS pill nudge also frames the exact pill cell. */
.nudge-mark { font-size: 12px; cursor: help; }
tr.snv-row-nudged > td,
tr.dc-row-nudged > td,
tr.oasis-row-nudged > td {
  border-top: 1.5px solid #b45857 !important;
  border-bottom: 1.5px solid #b45857 !important;
}
tr.snv-row-nudged > td:first-child,
tr.dc-row-nudged > td:first-child,
tr.oasis-row-nudged > td:first-child { border-left: 3px solid #b45857 !important; }
td.pg-cell-nudged { box-shadow: inset 0 0 0 2px #b45857; }
.snv-visit-item.is-nudged {
  background: rgba(180, 88, 87, 0.08);
  border-radius: 6px;
}

/* N3 (2026-07-07): Nudge Portal bits — batch group headers on the Sent
   tab, receipts, and the send bar's message input. */
.nudge-batch-head td {
  background: var(--cream-deep, #f4ecdb);
  font-size: 12.5px;
  padding: 7px 12px;
}
.nudge-already-row td { background: rgba(180, 88, 87, 0.05); }
.nudge-unassigned { color: #b45857; font-weight: 600; font-size: 12px; }
.nudge-days-red { color: #b45857; font-weight: 700; }
.nudge-chip-disputed {
  display: inline-block;
  background: rgba(180, 88, 87, 0.14);
  color: #8c3030;
  border-radius: 999px;
  padding: 1px 8px;
  font-size: 11.5px;
  font-weight: 700;
}
.nudge-receipt { font-size: 12.5px; white-space: nowrap; }
.nudge-receipt-done { color: #3c7a4e; font-weight: 600; }
.nudge-receipt-verify { color: #b07a1f; font-weight: 600; }
.nudge-receipt-open { color: #b45857; font-weight: 600; }
.nudge-receipt-muted { color: var(--muted, #607274); }
.nudge-message-input {
  flex: 1;
  min-width: 200px;
  font: inherit;
  font-size: 12.5px;
  padding: 5px 10px;
  border: 1px solid var(--line, #d8d1c4);
  border-radius: 8px;
  background: var(--surface, #fffdf8);
}

/* 2026-07-09: Send-tab inline assignment dropdown. Unassigned reads red
   so the gap is loud until a name is picked. */
.nudge-assign-select { max-width: 150px; }
.nudge-assign-select.nudge-assign-empty { color: #b45857; font-weight: 600; }

/* N5 (2026-07-09): report-upload preview modal. */
.nudge-report-modal { width: 900px; max-width: 96vw; }
.nudge-report-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.nudge-report-table th {
  text-align: left;
  padding: 6px 10px;
  background: var(--cream-deep, #f4ecdb);
  position: sticky;
  top: 0;
}
.nudge-report-table td { padding: 6px 10px; border-top: 1px solid var(--line, #d8d1c4); }
.nudge-report-dispute td { background: rgba(180, 88, 87, 0.07); }
.nudge-report-missing td { background: rgba(201, 130, 43, 0.08); }
.nudge-report-skip td { color: var(--muted, #607274); }
.nudge-report-unassigned td { background: rgba(201, 130, 43, 0.05); }
.nudge-report-foot { display: flex; gap: 10px; align-items: center; }

/* 2026-07-09 (Jairus): Nudge Portal toolbar controls match the header
   search box exactly — 40px tall, same border/radius language. */
.nudge-toolbar-select,
.nudge-toolbar-btn {
  height: 40px;
  box-sizing: border-box;
  font: inherit;
  font-size: 0.85rem;
  padding: 0 12px;
  border: 1px solid var(--line, #d8d1c4);
  border-radius: 999px;
  background: var(--surface, #fffdf8);
  color: var(--ink, #203234);
  cursor: pointer;
}
.nudge-toolbar-select { min-width: 150px; }
.nudge-toolbar-btn:hover,
.nudge-toolbar-select:hover { background: var(--cream-deep, #f4ecdb); }

/* N5b (2026-07-09): upload type dialog + drafts chooser. */
.nudge-upload-types { display: flex; flex-direction: column; gap: 8px; margin: 14px 0 4px; text-align: left; }
.nudge-upload-type {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  padding: 9px 12px;
  border: 1px solid var(--line, #d8d1c4);
  border-radius: 10px;
  cursor: pointer;
}
.nudge-upload-type.is-disabled { opacity: 0.55; cursor: not-allowed; }
.nudge-drafts-list { display: flex; flex-direction: column; gap: 8px; margin: 14px 0 4px; max-height: 300px; overflow-y: auto; }
.nudge-draft-row {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  font: inherit;
  text-align: left;
  padding: 9px 12px;
  border: 1px solid var(--line, #d8d1c4);
  border-radius: 10px;
  background: var(--surface, #fffdf8);
  cursor: pointer;
}
.nudge-draft-row:hover { background: var(--cream-deep, #f4ecdb); }
.nudge-report-modal .nudge-modal-head { align-items: center; gap: 10px; }

/* 2026-07-09 (Jairus): sleeker upload dialog — file-name box + Choose
   file on one line, the report-type choices on one line below, then
   Cancel/Upload. Overrides the earlier stacked layout. */
.nudge-upload-card { width: 500px; max-width: 94vw; }
.nudge-upload-filerow { display: flex; gap: 8px; margin: 16px 0 12px; }
.nudge-upload-filerow #nudgeUploadName {
  flex: 1;
  min-width: 0;
  font: inherit;
  font-size: 13px;
  padding: 8px 12px;
  border: 1px solid var(--line, #d8d1c4);
  border-radius: 999px;
  background: var(--cream-deep, #f4ecdb);
  color: var(--ink, #203234);
  cursor: pointer;
}
.nudge-upload-filerow .nudge-btn-ghost { white-space: nowrap; }
.nudge-upload-card .nudge-upload-types {
  flex-direction: row;
  justify-content: center;
  gap: 8px;
  margin: 0 0 14px;
}
.nudge-upload-card .nudge-upload-type {
  font-size: 12.5px;
  padding: 7px 10px;
  white-space: nowrap;
}

/* 2026-07-09 fix (Jairus): the file-NAME box takes the row's width and
   Choose file stays a compact button (explicit flex so no global
   input/button width rule can invert the proportions again). Type
   choices lose their boxes — plain left-aligned radios right under
   the filename. */
.nudge-upload-filerow { align-items: center; }
.nudge-upload-filerow #nudgeUploadName {
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
  text-align: left;
}
.nudge-upload-filerow [data-upload-browse] {
  flex: 0 0 auto;
  width: auto;
  font-size: 13px;
  padding: 8px 16px;
}
.nudge-upload-card .nudge-upload-types {
  justify-content: flex-start;
  gap: 18px;
  margin: 0 0 16px;
}
.nudge-upload-card .nudge-upload-type {
  border: 0;
  border-radius: 0;
  padding: 0;
  background: none;
  font-size: 13px;
  color: var(--ink, #203234);
}

/* 2026-07-09 (Jairus): per-batch collapse caret on the Sent tab —
   sized to ride INLINE with the header text, before the megaphone. */
.nudge-batch-head .nudge-batch-caret {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  font-size: 0.7rem;
  vertical-align: middle;
  margin: -2px 2px 0 0;
}
