/* ╔═══════════════════════════════════════════════════════════════════╗
   ║   NEXUS · R&M · stylesheet                                        ║
   ║   One file. Every component. Uses --nx-* tokens from base.        ║
   ╚═══════════════════════════════════════════════════════════════════╝ */

/* ═══════════════════════ PAGE PRIMITIVES ═══════════════════════ */
.nxrm-page { padding: 18px 14px 80px; max-width: 880px; margin: 0 auto; }
.nxrm-masthead {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 16px; gap: 12px;
}
.nxrm-eyebrow {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; letter-spacing: 0.20em;
  color: var(--nx-gold, #d4a44e); text-transform: uppercase; margin-bottom: 4px;
}
.nxrm-h1 {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 28px; font-weight: 800;
  color: var(--nx-text-strong, #f5f1e8); letter-spacing: -0.01em;
  margin: 0; line-height: 1;
}
.nxrm-btn-pill {
  background: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #1c1814);
  border: 1.5px solid var(--nx-gold-deep, #b88830);
  border-radius: 22px; padding: 8px 18px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-weight: 700; cursor: pointer;
  transition: transform 100ms ease, box-shadow 140ms ease;
}
.nxrm-btn-pill:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 14px var(--nx-gold-aura, rgba(212,164,78,0.30));
}
.nxrm-back {
  background: transparent; border: none;
  color: var(--nx-gold); font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 12px; letter-spacing: 0.08em; cursor: pointer;
  padding: 0; margin-bottom: 14px;
}
.nxrm-back:hover { text-decoration: underline; }
.nxrm-sep { color: var(--nx-muted, #8a8576); margin: 0 4px; }

/* ═══════════════════════ KPI TILES ═══════════════════════ */
.nxrm-tiles { display: grid; gap: 8px; margin-bottom: 16px; }
.nxrm-tiles.tiles-3 { grid-template-columns: repeat(3, 1fr); }
.nxrm-tiles.tiles-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 520px) {
  .nxrm-tiles.tiles-4 { grid-template-columns: repeat(2, 1fr); }}
.nxrm-tile {
  background: var(--nx-gold-tint, rgba(212,164,78,0.06));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,0.20));
  border-radius: 14px; padding: 10px 12px; text-align: center;
  cursor: pointer; transition: border-color 140ms ease;
}
.nxrm-tile:hover { border-color: var(--nx-gold); }
.nxrm-tile.is-alert {
  border-color: rgba(210,75,75,0.45);
  background: rgba(210,75,75,0.06);
}
.nxrm-tile-num {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 22px; font-weight: 800;
  color: var(--nx-text-strong); line-height: 1.1;
}
.nxrm-tile-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--nx-muted); margin-top: 2px;
}

/* ═══════════════════════ FILTERS ═══════════════════════ */
.nxrm-filters { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.nxrm-chip-row { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.nxrm-chip {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 20px; padding: 5px 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; letter-spacing: 0.04em;
  color: var(--nx-text, #ede9e0); cursor: pointer;
  transition: all 140ms ease;
}
.nxrm-chip.is-secondary { background: rgba(0,0,0,0.3); }
.nxrm-chip:hover { border-color: var(--nx-gold); }
.nxrm-chip.is-active {
  background: var(--nx-gold); color: var(--nx-gold-on);
  border-color: var(--nx-gold-deep); font-weight: 700;
}
.nxrm-search {
  flex: 1; min-width: 200px;
  background: rgba(0,0,0,0.3); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; padding: 8px 12px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; color: var(--nx-text);
}
.nxrm-search:focus { border-color: var(--nx-gold); outline: none; }
.nxrm-sort {
  background: rgba(0,0,0,0.3); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; padding: 8px 12px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; color: var(--nx-text); cursor: pointer;
}

/* ═══════════════════════ CARDS (inbox + lists) ═══════════════════════ */
.nxrm-list { display: flex; flex-direction: column; gap: 8px; }
.nxrm-card {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 16px; padding: 12px 14px;
  cursor: pointer; text-align: left; width: 100%;
  transition: all 140ms ease;
}
.nxrm-card:hover { transform: translateY(-1px); border-color: var(--nx-gold); }
/* Flat cards — the gold hairline border carries the separation. Kills a
   heavy drop shadow that was leaking in from a broader rule and reading badly
   on the light theme. !important so it wins regardless of the source. */
.nxrm-card,
.nxrm-vendor-eq-row,
.nxrm-vendor-eq-row .nxrm-card,
.nxrm-vendor-eq-unassign,
.nxrm-pm-card { box-shadow: none !important; }
.nxrm-card.tone-critical { border-left: 4px solid var(--nx-red); background: rgba(210,75,75,0.06); }
.nxrm-card.tone-high     { border-left: 4px solid #d4744e; background: rgba(212,116,78,0.06); }
.nxrm-card.tone-normal   { border-left: 4px solid var(--nx-gold); }
.nxrm-card.tone-low      { border-left: 4px solid var(--nx-muted); }
.nxrm-card.is-closed     { opacity: 0.55; }

.nxrm-card-row1 {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase;
  margin-bottom: 4px;
}
.nxrm-card-priority { font-weight: 700; color: var(--nx-text-strong); }
.nxrm-card-status { display: inline-flex; align-items: center; gap: 3px; color: var(--nx-muted); }
.nxrm-card-status.tone-ok       { color: var(--nx-green); }
.nxrm-card-status.tone-warn     { color: var(--nx-gold); }
.nxrm-card-status.tone-info     { color: var(--nx-gold); }
.nxrm-card-status.tone-critical { color: var(--nx-red); }
.nxrm-card-age { margin-left: auto; color: var(--nx-muted); }

.nxrm-card-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 15px; font-weight: 600;
  color: var(--nx-text-strong); line-height: 1.3; margin-bottom: 6px;
}
.nxrm-card-row2 {
  display: flex; flex-wrap: wrap; font-size: 12px;
  color: var(--nx-muted); margin-bottom: 6px;
}
.nxrm-card-eq { color: var(--nx-text); }
.nxrm-card-restaurant { color: var(--nx-text); font-weight: 600; }
.nxrm-card-vendor {
  color: var(--nx-gold); font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 11px;
}
.nxrm-card-cost {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 13px; font-weight: 700; color: var(--nx-gold);
  margin-bottom: 4px;
}
.nxrm-card-open {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; color: var(--nx-red);
}
.nxrm-card-meta {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; color: var(--nx-muted);
}
.nxrm-card-badges { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.nxrm-card-badge {
  display: inline-flex;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; letter-spacing: 0.04em;
  padding: 2px 8px; border-radius: 12px;
  background: rgba(0,0,0,0.35); border: 1px solid var(--nx-gold-line);
  color: var(--nx-text);
}
.nxrm-card-badge.is-alert { background: rgba(210,75,75,0.10); border-color: var(--nx-red); color: var(--nx-red); }
.nxrm-card-badge.is-warn  { background: rgba(212,164,78,0.10); border-color: var(--nx-gold); color: var(--nx-gold); }
.nxrm-rank {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 16px; font-weight: 800; color: var(--nx-gold);
}

/* ═══════════════════════ EMPTY STATES ═══════════════════════ */
.nxrm-empty {
  text-align: center; padding: 36px 20px;
  background: var(--nx-gold-tint);
  border: 1.5px dashed var(--nx-gold-line);
  border-radius: 18px;
}
.nxrm-empty-glyph { font-size: 36px; color: var(--nx-gold); margin-bottom: 8px; }
.nxrm-empty-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 16px; font-weight: 700;
  color: var(--nx-text-strong); margin-bottom: 6px;
}
.nxrm-empty-body {
  font-size: 13px; color: var(--nx-muted);
  max-width: 380px; margin: 0 auto; line-height: 1.5;
}

/* ═══════════════════════ SECTIONS ═══════════════════════ */
.nxrm-section { margin-bottom: 18px; }
.nxrm-section-title {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 12px; letter-spacing: 0.16em;
  color: var(--nx-gold); text-transform: uppercase;
  margin-bottom: 10px; padding-bottom: 6px;
  border-bottom: 1px solid var(--nx-gold-line);
  display: flex; justify-content: space-between; align-items: center;
}
.nxrm-section-sub { font-size: 12px; color: var(--nx-muted); margin-bottom: 10px; font-style: italic; }
.nxrm-section-count {
  background: var(--nx-gold); color: var(--nx-gold-on); font-weight: 700;
  padding: 1px 8px; border-radius: 14px; font-size: 11px;
}
.nxrm-section-wins .nxrm-section-title { color: var(--nx-green); border-bottom-color: rgba(108,208,154,0.30); }
.nxrm-section-wins .nxrm-section-count { background: var(--nx-green); color: #0a2c18; }
.nxrm-or {
  text-align: center;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; color: var(--nx-muted);
  letter-spacing: 0.12em; margin: 10px 0;
}

/* ═══════════════════════ STALE SECTION ═══════════════════════ */
.nxrm-stale {
  margin-bottom: 16px; padding: 14px;
  background: rgba(212,164,78,0.08);
  border: 1.5px solid rgba(212,164,78,0.35);
  border-left: 4px solid var(--nx-gold);
  border-radius: 16px;
}
.nxrm-stale-title {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; letter-spacing: 0.16em;
  color: var(--nx-gold); text-transform: uppercase; margin-bottom: 10px;
}
.nxrm-stale-list { display: flex; flex-direction: column; gap: 8px; }
.nxrm-stale-card {
  background: rgba(0,0,0,0.3); border: 1px solid rgba(212,164,78,0.25);
  border-radius: 12px; padding: 10px 12px;
}
.nxrm-stale-row1 { display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px; }
.nxrm-stale-cardtitle {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-weight: 600; color: var(--nx-text-strong);
}
.nxrm-stale-age {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; color: var(--nx-gold); font-weight: 700;
}
.nxrm-stale-meta { font-size: 12px; color: var(--nx-muted); margin-bottom: 6px; }
.nxrm-stale-reason {
  font-size: 12px; color: var(--nx-text);
  font-style: italic; margin-bottom: 10px; line-height: 1.5;
}
.nxrm-stale-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.nxrm-stale-btn {
  flex: 1; min-width: 100px; padding: 7px 10px;
  background: rgba(255,254,246,0.05); border: 1px solid var(--nx-gold-line);
  border-radius: 10px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; color: var(--nx-text);
  cursor: pointer; transition: all 140ms ease;
}
.nxrm-stale-btn:hover { border-color: var(--nx-gold); background: var(--nx-gold-mist, rgba(212,164,78,0.10)); }
.nxrm-stale-btn.is-danger { border-color: rgba(210,75,75,0.35); color: var(--nx-red); }
.nxrm-stale-btn.is-danger:hover { background: rgba(210,75,75,0.10); border-color: var(--nx-red); }

/* ═══════════════════════ FINANCIAL WORKFLOW ═══════════════════════ */
.nxrm-finance {
  background: var(--nx-gold-tint);
  border: 1px solid var(--nx-gold-line);
  border-radius: 16px; padding: 14px; margin: 14px 0;
}
.nxrm-finance-title {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; letter-spacing: 0.16em;
  color: var(--nx-gold); text-transform: uppercase; margin-bottom: 12px;
}
.nxrm-finance-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
@media (max-width: 520px) { .nxrm-finance-grid { grid-template-columns: 1fr; }}
.nxrm-finance-cell {
  background: rgba(0,0,0,0.3); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; padding: 12px;
}
.nxrm-finance-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--nx-muted); margin-bottom: 4px;
}
.nxrm-finance-val {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 22px; font-weight: 800;
  color: var(--nx-text-strong); margin-bottom: 4px; line-height: 1.1;
}
.nxrm-finance-meta {
  font-size: 11px; color: var(--nx-muted);
  margin-bottom: 8px; line-height: 1.5;
}
.nxrm-finance-attach { display: inline-block; font-size: 11px; color: var(--nx-gold); margin-bottom: 8px; }
.nxrm-finance-notes {
  font-size: 11px; color: var(--nx-muted); font-style: italic;
  margin-bottom: 8px; line-height: 1.5;
}
.nxrm-finance-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.nxrm-finance-btn {
  flex: 1; min-width: 70px; padding: 6px 10px;
  background: rgba(255,254,246,0.05); border: 1px solid var(--nx-gold-line);
  border-radius: 10px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 12px; font-weight: 600; color: var(--nx-text);
  cursor: pointer; transition: all 140ms ease;
}
.nxrm-finance-btn:hover { border-color: var(--nx-gold); background: var(--nx-gold-mist); }
.nxrm-finance-btn.is-primary {
  background: var(--nx-gold); color: var(--nx-gold-on);
  border-color: var(--nx-gold-deep);
}
.nxrm-finance-btn.is-primary:hover { background: var(--nx-gold-deep); }
.nxrm-finance-btn.is-danger {
  background: rgba(210,75,75,0.10); color: var(--nx-red);
  border-color: rgba(210,75,75,0.35);
}
.nxrm-finance-btn.is-danger:hover { background: rgba(210,75,75,0.20); border-color: var(--nx-red); }
.nxrm-finance-breakdown {
  display: flex; flex-wrap: wrap; gap: 12px;
  padding: 10px; margin-top: 10px;
  background: rgba(0,0,0,0.3); border-radius: 10px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; color: var(--nx-text);
}
.nxrm-finance-total { margin-left: auto; font-weight: 700; color: var(--nx-gold); }
.nxrm-finance-dispatch {
  display: block; width: 100%; margin-top: 12px; padding: 10px 14px;
  background: var(--nx-gold-mist); border: 1px solid var(--nx-gold);
  border-radius: 12px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; font-weight: 600; color: var(--nx-gold);
  cursor: pointer; text-align: center;
}
.nxrm-finance-dispatch:hover { background: var(--nx-gold); color: var(--nx-gold-on); }

/* ═══════════════════════ COMMENTS THREAD ═══════════════════════ */
.nxrm-comments {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 16px; padding: 14px; margin: 14px 0;
}
.nxrm-comments-title {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; letter-spacing: 0.16em;
  color: var(--nx-gold); text-transform: uppercase; margin-bottom: 12px;
}
.nxrm-comments-list {
  display: flex; flex-direction: column-reverse; gap: 8px;
  margin-bottom: 12px; max-height: 400px; overflow-y: auto;
}
.nxrm-comments-empty {
  text-align: center; padding: 18px;
  color: var(--nx-muted); font-size: 12px; font-style: italic;
}
.nxrm-comment { background: rgba(0,0,0,0.3); border-radius: 12px; padding: 10px 12px; }
.nxrm-comment.is-system {
  background: rgba(212,164,78,0.06);
  border-left: 2px solid var(--nx-gold); font-style: italic;
}
.nxrm-comment-meta {
  display: flex; justify-content: space-between;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; color: var(--nx-muted); margin-bottom: 4px;
}
.nxrm-comment-author { font-weight: 700; color: var(--nx-text); }
.nxrm-comment-body {
  font-size: 13px; color: var(--nx-text); line-height: 1.5;
  white-space: pre-wrap; word-break: break-word;
}
.nxrm-comment-attach { display: inline-block; margin-top: 6px; font-size: 11px; color: var(--nx-gold); }
.nxrm-comment-composer { display: flex; gap: 6px; align-items: flex-end; }
.nxrm-comment-input {
  flex: 1; background: rgba(0,0,0,0.3); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; padding: 8px 12px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; color: var(--nx-text);
  resize: vertical; min-height: 38px;
}
.nxrm-comment-input:focus { border-color: var(--nx-gold); outline: none; }
.nxrm-comment-photo {
  width: 44px; height: 38px;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; font-size: 18px; cursor: pointer;
  transition: all 140ms ease;
  display: flex; align-items: center; justify-content: center;
}
.nxrm-comment-photo:hover { background: var(--nx-gold-mist); border-color: var(--nx-gold); }
.nxrm-comment-photo.has-attached {
  background: var(--nx-gold); border-color: var(--nx-gold-deep); color: var(--nx-gold-on);
}
.nxrm-comment-photo.is-loading { opacity: 0.6; cursor: wait; }
.nxrm-comment-send {
  background: var(--nx-gold); color: var(--nx-gold-on);
  border: 1.5px solid var(--nx-gold-deep);
  border-radius: 12px; padding: 8px 18px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; font-weight: 700; cursor: pointer;
  transition: all 140ms ease;
}
.nxrm-comment-send:hover:not(:disabled) {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px var(--nx-gold-aura);
}
.nxrm-comment-send:disabled { opacity: 0.4; cursor: not-allowed; }
.nxrm-comment-photos { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.nxrm-photo-chip { position: relative; display: inline-block; }
.nxrm-photo-chip img {
  width: 60px; height: 60px; object-fit: cover;
  border-radius: 12px; border: 1.5px solid var(--nx-gold);
}
.nxrm-photo-remove {
  position: absolute; top: -6px; right: -6px;
  width: 22px; height: 22px;
  background: var(--nx-red); color: white;
  border: 2px solid var(--nx-bg, #0e1320);
  border-radius: 50%;
  font-size: 14px; font-weight: 700; line-height: 1;
  cursor: pointer; padding: 0;
  display: flex; align-items: center; justify-content: center;
}

/* ═══════════════════════ COST ANOMALY ═══════════════════════ */
.nxrm-anomaly-warning { margin-bottom: 14px; }
.nxrm-anomaly {
  display: grid; grid-template-columns: 36px 1fr;
  gap: 12px; padding: 12px 14px;
  border-radius: 16px; margin-bottom: 8px;
}
.nxrm-anomaly.anomaly-high {
  background: rgba(212,164,78,0.10);
  border: 1.5px solid rgba(212,164,78,0.45);
  border-left: 4px solid var(--nx-gold);
}
.nxrm-anomaly.anomaly-extreme {
  background: rgba(210,75,75,0.10);
  border: 1.5px solid rgba(210,75,75,0.45);
  border-left: 4px solid var(--nx-red);
  animation: nxrm-anomaly-pulse 2s ease-in-out infinite;
}
@keyframes nxrm-anomaly-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(210,75,75,0); }
  50%      { box-shadow: 0 0 16px 0 rgba(210,75,75,0.25); }
}
.nxrm-anomaly-glyph { font-size: 26px; align-self: center; text-align: center; }
.nxrm-anomaly-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-weight: 700;
  color: var(--nx-text-strong); margin-bottom: 4px;
}
.nxrm-anomaly.anomaly-extreme .nxrm-anomaly-title { color: var(--nx-red); }
.nxrm-anomaly.anomaly-high    .nxrm-anomaly-title { color: var(--nx-gold); }
.nxrm-anomaly-reason {
  font-size: 12.5px; color: var(--nx-text); line-height: 1.5; margin-bottom: 4px;
}
.nxrm-anomaly-stats {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; color: var(--nx-muted);
  letter-spacing: 0.04em; margin-bottom: 10px;
}
.nxrm-anomaly-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.nxrm-anomaly-btn {
  flex: 1; min-width: 120px; padding: 6px 10px;
  background: var(--nx-gold); color: var(--nx-gold-on);
  border: 1.5px solid var(--nx-gold-deep);
  border-radius: 10px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 12px; font-weight: 700; cursor: pointer;
}
.nxrm-anomaly-btn:hover { background: var(--nx-gold-deep); }
.nxrm-anomaly-btn.is-secondary {
  background: rgba(255,254,246,0.05); color: var(--nx-text);
  border-color: var(--nx-gold-line);
}
.nxrm-anomaly-btn.is-secondary:hover { background: var(--nx-gold-mist); border-color: var(--nx-gold); }

/* ═══════════════════════ VENDOR CARDS ═══════════════════════ */
.nxrm-vendor-list { display: flex; flex-direction: column; gap: 10px; }
.nxrm-vendor-card {
  display: grid; grid-template-columns: 64px 1fr; gap: 12px;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 16px; padding: 12px 14px;
  cursor: pointer; text-align: left; width: 100%;
  transition: all 140ms ease;
}
.nxrm-vendor-card:hover { transform: translateY(-1px); border-color: var(--nx-gold); }
.nxrm-vendor-grade {
  align-self: center; width: 56px; height: 56px; border-radius: 16px;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 28px; font-weight: 800; border: 1.5px solid;
}
.nxrm-vendor-grade.tone-ok       { background: rgba(108,208,154,0.12); border-color: var(--nx-green); color: var(--nx-green); }
.nxrm-vendor-grade.tone-good     { background: rgba(168,216,112,0.12); border-color: var(--nx-green); color: var(--nx-green); }
.nxrm-vendor-grade.tone-warn     { background: rgba(212,164,78,0.12); border-color: var(--nx-gold); color: var(--nx-gold); }
.nxrm-vendor-grade.tone-critical { background: rgba(210,75,75,0.12); border-color: var(--nx-red); color: var(--nx-red); }
.nxrm-vendor-grade.tone-mute     { background: rgba(160,160,160,0.10); border-color: var(--nx-muted); color: var(--nx-muted); }
.nxrm-vendor-body { min-width: 0; }
.nxrm-vendor-row1 {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 4px;
}
.nxrm-vendor-name {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 16px; font-weight: 700; color: var(--nx-text-strong);
}
.nxrm-vendor-badge {
  display: inline-flex; align-items: center;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px; letter-spacing: 0.10em;
  padding: 2px 7px; border-radius: 12px;
  background: rgba(0,0,0,0.4); border: 1px solid var(--nx-gold-line);
  color: var(--nx-text); text-transform: uppercase;
}
.nxrm-vendor-badge.is-pref { background: var(--nx-gold-mist); border-color: var(--nx-gold); color: var(--nx-gold); }
.nxrm-vendor-badge.is-emerg { background: rgba(210,75,75,0.12); border-color: var(--nx-red); color: var(--nx-red); }
.nxrm-vendor-row2 {
  display: flex; flex-wrap: wrap; gap: 8px;
  font-size: 12px; color: var(--nx-muted); margin-bottom: 8px;
}
.nxrm-vendor-cat {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; letter-spacing: 0.06em;
  color: var(--nx-gold); text-transform: uppercase;
}
.nxrm-vendor-phone { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 11px; }
.nxrm-vendor-stats {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px;
  padding-top: 8px; border-top: 1px dashed var(--nx-gold-line);
}
.nxrm-vendor-stat { text-align: center; }
.nxrm-vendor-stat-val {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 13px; font-weight: 700; color: var(--nx-text-strong);
}
.nxrm-vendor-stat-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--nx-muted); margin-top: 2px;
}

/* Vendor detail */
.nxrm-vendor-header {
  display: flex; gap: 16px; align-items: center;
  margin-bottom: 16px; padding-bottom: 16px;
  border-bottom: 1px solid var(--nx-gold-line);
}
.nxrm-vendor-grade-big {
  width: 80px; height: 80px; border-radius: 20px;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  border: 2px solid; flex-shrink: 0;
}
.nxrm-vendor-grade-big.tone-ok       { background: rgba(108,208,154,0.12); border-color: var(--nx-green); color: var(--nx-green); }
.nxrm-vendor-grade-big.tone-good     { background: rgba(168,216,112,0.12); border-color: var(--nx-green); color: var(--nx-green); }
.nxrm-vendor-grade-big.tone-warn     { background: rgba(212,164,78,0.12); border-color: var(--nx-gold); color: var(--nx-gold); }
.nxrm-vendor-grade-big.tone-critical { background: rgba(210,75,75,0.12); border-color: var(--nx-red); color: var(--nx-red); }
.nxrm-vendor-grade-big.tone-mute     { background: rgba(160,160,160,0.10); border-color: var(--nx-muted); color: var(--nx-muted); }
.nxrm-vendor-grade-letter {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 36px; font-weight: 800; line-height: 1;
}
.nxrm-vendor-grade-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.12em; text-transform: uppercase; margin-top: 4px;
}
.nxrm-vendor-headline { flex: 1; }
.nxrm-vendor-tags { display: flex; gap: 6px; margin-top: 6px; }
.nxrm-vendor-contact { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.nxrm-vendor-action {
  flex: 1; min-width: 100px; text-align: center;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; padding: 10px 14px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; font-weight: 600;
  color: var(--nx-text-strong); text-decoration: none;
  cursor: pointer; transition: all 140ms ease;
}
.nxrm-vendor-action:hover {
  border-color: var(--nx-gold); background: var(--nx-gold-mist); text-decoration: none;
}
.nxrm-vendor-detail-stats {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 8px; margin-bottom: 16px;
}
@media (max-width: 520px) { .nxrm-vendor-detail-stats { grid-template-columns: repeat(2, 1fr); }}
.nxrm-vendor-detail-stat {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 14px; padding: 10px 12px;
}
.nxrm-vendor-detail-val {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 20px; font-weight: 800;
  color: var(--nx-text-strong); letter-spacing: -0.01em;
  line-height: 1.1; margin-bottom: 2px;
}
.nxrm-vendor-detail-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--nx-muted);
}
.nxrm-vendor-rates {
  display: flex; gap: 16px; padding: 10px 14px;
  background: rgba(0,0,0,0.3); border-radius: 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 12px; color: var(--nx-text); margin-bottom: 14px;
}
.nxrm-vendor-notes {
  padding: 10px 14px; background: var(--nx-gold-tint);
  border-left: 3px solid var(--nx-gold);
  font-style: italic; color: var(--nx-text);
  font-size: 13px; margin-bottom: 14px; line-height: 1.5;
}

/* ═══════════════════════ PM CARDS ═══════════════════════ */
.nxrm-pm-card {
  display: grid; grid-template-columns: 40px 1fr 70px;
  gap: 12px; align-items: center;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 16px; padding: 12px 14px;
  cursor: pointer; text-align: left; width: 100%;
  transition: all 140ms ease;
}
.nxrm-pm-card:hover { transform: translateY(-1px); border-color: var(--nx-gold); }
.nxrm-pm-card.tone-critical {
  border-left: 4px solid var(--nx-red); background: rgba(210,75,75,0.08);
}
.nxrm-pm-card.tone-warn {
  border-left: 4px solid var(--nx-gold); background: rgba(212,164,78,0.06);
}
.nxrm-pm-card.tone-info { border-left: 4px solid var(--nx-gold); }
.nxrm-pm-card.tone-mute { opacity: 0.65; }
.nxrm-pm-glyph { font-size: 24px; text-align: center; }
.nxrm-pm-body { min-width: 0; }
.nxrm-pm-row1 {
  display: flex; justify-content: space-between; align-items: center;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase;
  margin-bottom: 4px;
}
.nxrm-pm-urgency { font-weight: 700; color: var(--nx-text-strong); }
.nxrm-pm-when { color: var(--nx-muted); }
.nxrm-pm-card.tone-critical .nxrm-pm-urgency,
.nxrm-pm-card.tone-critical .nxrm-pm-when { color: var(--nx-red); }
.nxrm-pm-card.tone-warn .nxrm-pm-urgency,
.nxrm-pm-card.tone-warn .nxrm-pm-when { color: var(--nx-gold); }
/* Overdue but noted — acknowledged, so the alarm quiets to gold */
.nxrm-pm-card.tone-critical.is-noted { border-left-color: var(--nx-gold); background: var(--nx-gold-tint); }
.nxrm-pm-card.tone-critical.is-noted .nxrm-pm-urgency,
.nxrm-pm-card.tone-critical.is-noted .nxrm-pm-when { color: var(--nx-gold); }
.nxrm-pm-notedchip { font-weight: 600; color: var(--nx-gold); text-transform: none; letter-spacing: 0.02em; }
.nxrm-pm-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 15px; font-weight: 600;
  color: var(--nx-text-strong); line-height: 1.3; margin-bottom: 4px;
}
.nxrm-pm-row2 { display: flex; flex-wrap: wrap; gap: 4px; font-size: 12px; color: var(--nx-muted); }
.nxrm-pm-freq { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 11px; }
.nxrm-pm-meta {
  font-size: 11px; color: var(--nx-gold); margin-top: 4px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
}
.nxrm-pm-action { text-align: center; }
.nxrm-pm-done {
  background: var(--nx-gold); color: var(--nx-gold-on);
  border: 1.5px solid var(--nx-gold-deep);
  border-radius: 12px; padding: 6px 8px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; font-weight: 700; letter-spacing: 0.05em;
  cursor: pointer; line-height: 1.2; width: 70px;
}
.nxrm-pm-done:hover { background: var(--nx-gold-deep); }

/* ═══════════════════════ DAILY BRIEF ═══════════════════════ */
.nxrm-brief-page { padding: 18px 14px 80px; max-width: 720px; margin: 0 auto; }
.nxrm-brief-header {
  margin-bottom: 24px; padding-bottom: 14px;
  border-bottom: 1px solid var(--nx-gold-line);
}
.nxrm-brief-greeting {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; letter-spacing: 0.20em;
  color: var(--nx-gold); text-transform: uppercase; margin-bottom: 4px;
}
.nxrm-brief-date {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 28px; font-weight: 800;
  color: var(--nx-text-strong); letter-spacing: -0.01em;
  margin-bottom: 8px; line-height: 1;
}
.nxrm-brief-situation {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 15px; color: var(--nx-text); line-height: 1.5;
}
.nxrm-brief-situation strong { color: var(--nx-text-strong); }
.nxrm-brief-list { display: flex; flex-direction: column; gap: 8px; }
.nxrm-brief-item {
  display: grid; grid-template-columns: 1fr 24px;
  align-items: center; gap: 10px;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 14px; padding: 10px 14px;
  text-align: left; cursor: pointer; width: 100%;
  transition: all 140ms ease;
}
.nxrm-brief-item:hover { transform: translateX(2px); border-color: var(--nx-gold); }
.nxrm-brief-item.tone-critical { border-left: 4px solid var(--nx-red); background: rgba(210,75,75,0.06); }
.nxrm-brief-item.tone-high     { border-left: 4px solid #d4744e; background: rgba(212,116,78,0.06); }
.nxrm-brief-item.tone-warn     { border-left: 4px solid var(--nx-gold); background: rgba(212,164,78,0.06); }
.nxrm-brief-item.tone-normal   { border-left: 4px solid var(--nx-gold); }
.nxrm-brief-item.tone-ok       { border-left: 4px solid var(--nx-green); }
.nxrm-brief-item.tone-mute     { opacity: 0.7; }
.nxrm-brief-body { min-width: 0; }
.nxrm-brief-itemtitle {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 15px; font-weight: 600;
  color: var(--nx-text-strong); line-height: 1.3; margin-bottom: 2px;
}
.nxrm-brief-itemmeta { font-size: 12px; color: var(--nx-muted); line-height: 1.4; }
.nxrm-brief-badges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.nxrm-brief-badge {
  display: inline-flex;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; letter-spacing: 0.05em;
  padding: 2px 8px; border-radius: 12px;
  background: rgba(0,0,0,0.35); border: 1px solid var(--nx-gold-line);
  color: var(--nx-text);
}
.nxrm-brief-badge.is-alert { background: rgba(210,75,75,0.10); border-color: var(--nx-red); color: var(--nx-red); }
.nxrm-brief-cost {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 12px; font-weight: 700; color: var(--nx-gold);
}
.nxrm-brief-arrow { font-size: 16px; color: var(--nx-muted); }
.nxrm-brief-cta {
  display: block; width: 100%; margin-top: 10px; padding: 10px 14px;
  background: rgba(255,254,246,0.04); border: 1px dashed var(--nx-gold-line);
  border-radius: 12px;
  color: var(--nx-gold);
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 12px; letter-spacing: 0.08em;
  text-align: center; cursor: pointer; transition: all 140ms ease;
}
.nxrm-brief-cta:hover {
  background: var(--nx-gold-mist); border-style: solid; border-color: var(--nx-gold);
}
.nxrm-brief-spend-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.nxrm-brief-spend-tile {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 14px; padding: 10px 12px;
}
.nxrm-brief-spend-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--nx-muted); margin-bottom: 4px;
}
.nxrm-brief-spend-val {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 18px; font-weight: 700; color: var(--nx-text-strong);
}
.nxrm-brief-win {
  display: flex; align-items: center; gap: 10px; padding: 8px 12px;
  background: rgba(108,208,154,0.08); border-left: 3px solid var(--nx-green);
  border-radius: 10px; font-size: 13px;
}
.nxrm-brief-win-glyph { color: var(--nx-green); font-weight: 700; font-size: 14px; }
.nxrm-brief-win-title { flex: 1; color: var(--nx-text-strong); font-weight: 600; }
.nxrm-brief-win-meta { color: var(--nx-muted); font-size: 12px; }
.nxrm-brief-calm {
  text-align: center; padding: 40px 20px;
  background: var(--nx-gold-tint); border: 1.5px dashed var(--nx-gold-line);
  border-radius: 18px;
}
.nxrm-brief-calm-glyph { font-size: 48px; color: var(--nx-gold); margin-bottom: 12px; }
.nxrm-brief-calm-text {
  font-size: 14px; color: var(--nx-muted);
  max-width: 380px; margin: 0 auto 16px; line-height: 1.5;
}

/* ═══════════════════════ SPEND VIEW ═══════════════════════ */
.nxrm-period-toggle, .nxrm-group-toggle {
  display: flex; gap: 4px;
  background: rgba(0,0,0,0.3); padding: 3px;
  border: 1px solid var(--nx-gold-line); border-radius: 12px;
}
.nxrm-period-btn, .nxrm-group-btn {
  background: transparent; border: none;
  padding: 6px 14px; border-radius: 10px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; letter-spacing: 0.05em;
  color: var(--nx-muted); cursor: pointer;
  transition: all 140ms ease;
}
.nxrm-period-btn.is-active, .nxrm-group-btn.is-active {
  background: var(--nx-gold); color: var(--nx-gold-on); font-weight: 700;
}
.nxrm-group-toggle { margin-bottom: 10px; }
.nxrm-flag-section {
  background: rgba(210,75,75,0.05);
  border: 1.5px solid rgba(210,75,75,0.30);
  border-radius: 18px; padding: 14px; margin-bottom: 18px;
}
.nxrm-flag-section .nxrm-section-title { color: var(--nx-red); border-bottom-color: rgba(210,75,75,0.20); }
.nxrm-flag-bar {
  height: 6px; background: rgba(0,0,0,0.4);
  border-radius: 3px; margin: 8px 0; overflow: hidden;
}
.nxrm-flag-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--nx-red), var(--nx-red));
  border-radius: 3px;
  transition: width 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.nxrm-flag-meta {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; color: var(--nx-muted);
}
.nxrm-group-list { display: flex; flex-direction: column; gap: 6px; }
.nxrm-group-row {
  display: grid; grid-template-columns: 140px 1fr 100px;
  align-items: center; gap: 10px;
  padding: 8px 10px; background: var(--nx-gold-tint); border-radius: 12px;
}
.nxrm-group-name {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; color: var(--nx-text-strong); font-weight: 600;
}
.nxrm-group-bar { height: 6px; background: rgba(0,0,0,0.4); border-radius: 3px; overflow: hidden; }
.nxrm-group-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--nx-gold-deep), var(--nx-gold));
  border-radius: 3px;
}
.nxrm-group-val {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 13px; font-weight: 700; color: var(--nx-gold); text-align: right;
}

/* ═══════════════════════ BUDGET CARDS ═══════════════════════ */
.nxrm-budget-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 10px;
}
.nxrm-budget-card {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-left: 4px solid var(--nx-gold);
  border-radius: 14px; padding: 12px 14px;
  cursor: pointer; transition: all 140ms ease;
}
.nxrm-budget-card:hover { transform: translateY(-1px); border-color: var(--nx-gold); }
.nxrm-budget-card.tone-good     { border-left-color: var(--nx-green); }
.nxrm-budget-card.tone-info     { border-left-color: var(--nx-gold); }
.nxrm-budget-card.tone-warn     { border-left-color: var(--nx-gold); }
.nxrm-budget-card.tone-critical { border-left-color: var(--nx-red); background: rgba(210,75,75,0.06); }
.nxrm-budget-card.tone-mute     { opacity: 0.65; }
.nxrm-budget-head {
  display: flex; justify-content: space-between; align-items: flex-start;
  margin-bottom: 8px;
}
.nxrm-budget-restaurant {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 15px; font-weight: 700; color: var(--nx-text-strong);
}
.nxrm-budget-year {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--nx-muted);
}
.nxrm-budget-pct {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 24px; font-weight: 800; line-height: 1;
  color: var(--nx-text-strong);
}
.nxrm-budget-card.tone-critical .nxrm-budget-pct { color: var(--nx-red); }
.nxrm-budget-card.tone-warn     .nxrm-budget-pct { color: var(--nx-gold); }
.nxrm-budget-card.tone-good     .nxrm-budget-pct { color: var(--nx-green); }
.nxrm-budget-bar {
  position: relative; height: 8px;
  background: rgba(0,0,0,0.4); border-radius: 4px;
  overflow: visible; margin-bottom: 8px;
}
.nxrm-budget-actual {
  height: 100%;
  background: linear-gradient(90deg, var(--nx-gold-deep), var(--nx-gold));
  border-radius: 4px;
  transition: width 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.nxrm-budget-card.tone-critical .nxrm-budget-actual { background: linear-gradient(90deg, var(--nx-red), var(--nx-red)); }
.nxrm-budget-card.tone-warn     .nxrm-budget-actual { background: linear-gradient(90deg, #d4a44e, var(--nx-gold)); }
.nxrm-budget-card.tone-good     .nxrm-budget-actual { background: linear-gradient(90deg, #4ab078, var(--nx-green)); }
.nxrm-budget-pace {
  position: absolute; top: -2px; bottom: -2px; width: 2px;
  background: var(--nx-text-strong);
  box-shadow: 0 0 4px rgba(255,255,255,0.4);
}
.nxrm-budget-foot {
  display: flex; justify-content: space-between;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; color: var(--nx-muted);
}
.nxrm-budget-var { font-weight: 700; }
.nxrm-budget-card.tone-critical .nxrm-budget-var { color: var(--nx-red); }
.nxrm-budget-card.tone-warn     .nxrm-budget-var { color: var(--nx-gold); }
.nxrm-budget-card.tone-good     .nxrm-budget-var { color: var(--nx-green); }
.nxrm-budget-empty {
  background: rgba(255,254,246,0.04);
  border: 1.5px dashed var(--nx-gold-line);
  border-radius: 14px; padding: 24px;
  color: var(--nx-gold);
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; text-align: center; cursor: pointer; width: 100%;
}
.nxrm-budget-empty:hover {
  border-color: var(--nx-gold); background: var(--nx-gold-mist); border-style: solid;
}

/* ═══════════════════════ COMPLIANCE MODAL ═══════════════════════ */
.nxrm-compliance-body { margin-bottom: 16px; font-size: 13px; color: var(--nx-text); }
.nxrm-compliance-row {
  padding: 6px 0; border-bottom: 1px solid var(--nx-gold-line); line-height: 1.5;
}
.nxrm-compliance-row:last-child { border-bottom: none; }
.nxrm-compliance-row strong { color: var(--nx-gold); font-weight: 600; margin-right: 8px; }
.nxrm-compliance-row .is-alert { color: var(--nx-red); font-weight: 700; }
.nxrm-compliance-row a { color: var(--nx-gold); text-decoration: underline; }
.nxrm-compliance-notes {
  margin-top: 8px; padding: 8px 10px;
  background: rgba(0,0,0,0.3); border-left: 2px solid var(--nx-gold);
  font-style: italic; font-size: 12px; color: var(--nx-muted);
}

/* ═══════════════════════ OVERLAY (modal base) ═══════════════════════ */
.nxrm-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.65);
  
  
  display: flex; align-items: center; justify-content: center;
  z-index: 2000; padding: 18px;
  opacity: 0; transition: opacity 220ms ease;
}
.nxrm-overlay.is-visible { opacity: 1; }
/* v299 — scope the MODAL card to the overlay. As a bare `.nxrm-card` this
   duplicated (and overrode) the inbox/list card at line ~107, capping list
   cards at 520px with the heavy modal border/shadow. Modal cards are always
   built inside .nxrm-overlay (core.js), so this still matches them. */
.nxrm-overlay .nxrm-card {
  background: var(--nx-bg, #0e1320);
  border: 1.5px solid var(--nx-gold);
  border-radius: 20px; padding: 20px;
  max-width: 520px; width: 100%; max-height: 90vh; overflow-y: auto;
  box-shadow: 0 18px 48px rgba(0,0,0,0.55);
}
.nxrm-card-head {
  position: relative; margin-bottom: 18px; padding-bottom: 14px;
  border-bottom: 1px solid var(--nx-gold-line);
}
.nxrm-close {
  position: absolute; top: -2px; right: -2px;
  background: transparent; border: none; font-size: 22px;
  color: var(--nx-muted); cursor: pointer; padding: 4px 8px; line-height: 1;
}
.nxrm-close:hover { color: var(--nx-text-strong); }

/* ═══════════════════════ QUICK-CREATE TEMPLATES ═══════════════════════ */
.nxrm-template-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px;
  margin-bottom: 14px;
}
.nxrm-template-card {
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 14px; padding: 14px 10px;
  text-align: center; cursor: pointer;
  transition: all 140ms ease; position: relative;
}
.nxrm-template-card:hover {
  transform: translateY(-1px);
  border-color: var(--nx-gold); background: var(--nx-gold-mist);
}
.nxrm-template-glyph { font-size: 28px; margin-bottom: 4px; }
.nxrm-template-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 12px; color: var(--nx-text-strong);
  line-height: 1.3; font-weight: 600;
}
.nxrm-template-pri {
  position: absolute; top: 6px; right: 6px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 8px; padding: 1px 5px;
  background: rgba(210,75,75,0.15); color: var(--nx-red);
  border-radius: 10px; letter-spacing: 0.06em;
}
.nxrm-template-custom {
  width: 100%;
  background: rgba(255,254,246,0.04);
  border: 1px dashed var(--nx-gold-line);
  border-radius: 14px; padding: 12px;
  color: var(--nx-gold);
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; font-weight: 600; cursor: pointer;
}
.nxrm-template-custom:hover { border-color: var(--nx-gold); background: var(--nx-gold-mist); }

.nxrm-eq-list { max-height: 50vh; overflow-y: auto; }
.nxrm-eq-row {
  display: block; width: 100%; text-align: left;
  padding: 10px 12px;
  background: rgba(255,254,246,0.03); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; margin-bottom: 6px;
  cursor: pointer; transition: border-color 140ms ease;
}
.nxrm-eq-row:hover { border-color: var(--nx-gold); }
.nxrm-eq-name {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-weight: 600; color: var(--nx-text-strong);
}
.nxrm-eq-meta {
  font-size: 11px; color: var(--nx-muted);
  font-family: 'JetBrains Mono', ui-monospace, monospace;
}

/* ═══════════════════════ TROUBLESHOOTING WIZARD ═══════════════════════ */
.nxrm-ts-card { max-width: 560px; }
.nxrm-ts-meta { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 12px; }
.nxrm-ts-chip {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; letter-spacing: 0.08em;
  padding: 3px 8px;
  background: rgba(0,0,0,0.4); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; color: var(--nx-text);
}
.nxrm-ts-intro {
  font-size: 13px; color: var(--nx-muted);
  margin-bottom: 14px; line-height: 1.5;
}
.nxrm-ts-steps { list-style: none; padding: 0; margin: 0 0 16px; }
.nxrm-ts-step {
  display: flex; gap: 10px; padding: 10px 12px;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; margin-bottom: 6px;
  cursor: pointer; align-items: flex-start;
  transition: border-color 140ms ease;
}
.nxrm-ts-step:hover { border-color: var(--nx-gold); }
.nxrm-ts-check {
  margin-top: 2px; width: 18px; height: 18px;
  accent-color: var(--nx-gold); cursor: pointer;
}
.nxrm-ts-label {
  flex: 1;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; color: var(--nx-text);
  line-height: 1.5; cursor: pointer;
}
.nxrm-ts-check:checked + .nxrm-ts-label {
  color: var(--nx-muted); text-decoration: line-through;
}
.nxrm-ts-step-static {
  padding: 8px 12px; border-left: 2px solid var(--nx-gold);
  margin-bottom: 6px;
  font-size: 13px; color: var(--nx-text); line-height: 1.5;
}
.nxrm-ts-additional {
  background: rgba(0,0,0,0.3); padding: 8px 12px; border-radius: 10px;
  font-size: 11px; color: var(--nx-muted);
  font-style: italic; margin-bottom: 12px;
}
.nxrm-ts-actions { display: flex; flex-direction: column; gap: 6px; }
.nxrm-ts-btn {
  padding: 12px; border-radius: 14px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-weight: 700; cursor: pointer;
  transition: transform 100ms ease, box-shadow 140ms ease;
  border: 1.5px solid;
}
.nxrm-ts-btn.is-success {
  background: var(--nx-green); color: #0a2c18; border-color: #4ab078;
}
.nxrm-ts-btn.is-success:hover { transform: translateY(-1px); box-shadow: 0 6px 14px rgba(108,208,154,0.30); }
.nxrm-ts-btn.is-fallback {
  background: var(--nx-gold); color: var(--nx-gold-on); border-color: var(--nx-gold-deep);
}
.nxrm-ts-btn.is-fallback:hover { transform: translateY(-1px); box-shadow: 0 6px 14px var(--nx-gold-aura); }
.nxrm-ts-btn.is-skip {
  background: rgba(255,254,246,0.05); color: var(--nx-muted);
  border-color: var(--nx-gold-line);
  font-size: 12px; padding: 8px;
}
.nxrm-ts-library { padding: 0; }
.nxrm-ts-guide {
  background: rgba(255,254,246,0.03); border: 1px solid var(--nx-gold-line);
  border-radius: 14px; padding: 10px 14px; margin-bottom: 8px;
}
.nxrm-ts-guide-summary {
  display: flex; justify-content: space-between; align-items: center;
  cursor: pointer; list-style: none;
}
.nxrm-ts-guide-summary::-webkit-details-marker { display: none; }
.nxrm-ts-guide-summary::before {
  content: '▸'; margin-right: 8px; color: var(--nx-gold);
  transition: transform 200ms ease; display: inline-block;
}
.nxrm-ts-guide[open] .nxrm-ts-guide-summary::before { transform: rotate(90deg); }
.nxrm-ts-guide-title {
  flex: 1;
  font-family: 'Outfit', system-ui, sans-serif;
  font-weight: 600; color: var(--nx-text-strong);
}

/* ═══════════════════════ DISPATCH PICKER ═══════════════════════ */
.nxrm-dispatch-list {
  display: flex; flex-direction: column; gap: 4px;
  max-height: 320px; overflow-y: auto;
}
.nxrm-dispatch-row {
  display: flex; justify-content: space-between; align-items: center;
  gap: 8px; padding: 10px 12px;
  background: rgba(255,254,246,0.03); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; margin-bottom: 4px;
}
.nxrm-dispatch-row.is-assigned {
  background: var(--nx-gold-mist); border-color: var(--nx-gold);
}
.nxrm-dispatch-name {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; font-weight: 600;
  color: var(--nx-text-strong);
  display: flex; align-items: center; gap: 6px;
  flex: 1; min-width: 0;
}
.nxrm-dispatch-actions { display: flex; gap: 4px; }
.nxrm-dispatch-btn {
  width: 36px; height: 36px;
  display: flex; align-items: center; justify-content: center;
  background: var(--nx-gold-tint); border: 1px solid var(--nx-gold-line);
  border-radius: 12px; font-size: 16px; cursor: pointer;
  transition: all 140ms ease;
}
.nxrm-dispatch-btn:hover { background: var(--nx-gold-mist); border-color: var(--nx-gold); }

/* ═══════════════════════ KEYBOARD HELP ═══════════════════════ */
.nxrm-kb { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 480px) { .nxrm-kb { grid-template-columns: 1fr; }}
.nxrm-kb-grouptitle {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; letter-spacing: 0.18em;
  color: var(--nx-gold); text-transform: uppercase;
  margin-bottom: 8px; padding-bottom: 4px;
  border-bottom: 1px solid var(--nx-gold-line);
}
.nxrm-kb-row {
  display: flex; align-items: center; gap: 8px;
  padding: 4px 0; font-size: 13px; color: var(--nx-text);
}
.nxrm-kb-row kbd {
  display: inline-block; min-width: 22px; padding: 2px 6px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px; font-weight: 700; text-align: center;
  background: var(--nx-gold-tint); border: 1.5px solid var(--nx-gold-line);
  border-bottom-width: 2.5px; border-radius: 10px;
  color: var(--nx-gold);
}

/* ═══════════════════════ TOAST FALLBACK ═══════════════════════ */
.nxrm-toast {
  position: fixed; bottom: 20px; left: 50%;
  transform: translateX(-50%) translateY(20px);
  background: var(--nx-bg);
  border: 1.5px solid var(--nx-gold);
  border-radius: 16px; padding: 12px 20px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; color: var(--nx-text-strong);
  box-shadow: 0 12px 32px rgba(0,0,0,0.4);
  opacity: 0; pointer-events: none;
  transition: all 240ms ease;
  z-index: 3000;
}
.nxrm-toast.is-visible {
  opacity: 1; transform: translateX(-50%) translateY(0);
}

/* ╔═══════════════════════════════════════════════════════════════════╗
   ║   HOME · R&M EXTENSION                                            ║
   ║   Mounted by home-rm.js into the existing #homeView.              ║
   ║   Five widgets: Trajan's read, R&M tiles, Decisions card,         ║
   ║   Work Orders feed, Wins celebration.                             ║
   ╚═══════════════════════════════════════════════════════════════════╝ */

/* ═══════════════════════ TRAJAN'S READ ═══════════════════════ */
.home-rm-read {
  display: flex; align-items: flex-start; gap: 10px;
  margin: 6px 0 14px;
  padding: 8px 14px 8px 12px;
  border-left: 2px solid var(--nx-gold, #d4a44e);
  background: linear-gradient(to right,
              var(--nx-gold-tint, rgba(212,164,78,0.06)) 0%,
              transparent 100%);
}
.home-rm-read-mark {
  font-size: 14px; line-height: 1.5;
  color: var(--nx-gold);
  flex-shrink: 0;
}
.home-rm-read-text {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-style: italic;
  color: var(--nx-text, #ede9e0);
  line-height: 1.5;
  letter-spacing: 0.005em;
}

/* ═══════════════════════ R&M TILES ═══════════════════════ */
.home-rm-tiles {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 6px;
  margin: 6px 0 14px;
}
@media (max-width: 520px) {
  .home-rm-tiles { grid-template-columns: repeat(2, 1fr); gap: 6px; }}
.home-rm-tile {
  background: var(--nx-gold-tint, rgba(212,164,78,0.06));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,0.20));
  border-radius: 14px;
  padding: 10px 8px;
  text-align: center;
  cursor: pointer;
  color: var(--nx-text-strong);   /* theme-aware: was unset → text inherited a
                                      fixed dark color, invisible on dark lapis */
  transition: all 140ms ease;
}
.home-rm-tile:hover {
  border-color: var(--nx-gold);
  transform: translateY(-1px);
}
.home-rm-tile.is-warn {
  border-color: var(--nx-gold-line-2);
  background: var(--nx-gold-faint);
}
.home-rm-tile-num {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 18px; font-weight: 800;
  color: var(--nx-text-strong, #f5f1e8);
  line-height: 1.1;
  letter-spacing: -0.01em;
}
.home-rm-tile-grade {
  font-size: 22px;
  line-height: 1;
}
.home-rm-tile-grade.tone-ok       { color: var(--nx-green); }
.home-rm-tile-grade.tone-good     { color: var(--nx-green); }
.home-rm-tile-grade.tone-warn     { color: var(--nx-gold); }
.home-rm-tile-grade.tone-critical { color: var(--nx-red); }
.home-rm-tile-grade.tone-mute     { color: var(--nx-muted, #8a8576); }
.home-rm-tile-lbl {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--nx-muted, #8a8576);
  margin-top: 3px;
}

/* ═══════════════════════ DECISIONS CARD ═══════════════════════ */
.home-rm-decisions {
  background: var(--nx-gold-tint, rgba(212,164,78,0.06));
  border: 1.5px solid var(--nx-gold-line, rgba(212,164,78,0.20));
  border-left: 4px solid var(--nx-gold, #d4a44e);
  border-radius: 16px;
  padding: 12px 14px;
  margin-bottom: 16px;
}
.home-rm-decisions-head {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px;
  letter-spacing: 0.18em;
  color: var(--nx-gold-ink);
  text-transform: uppercase;
  margin-bottom: 10px;
  padding-bottom: 6px;
  border-bottom: 1px dashed var(--nx-gold-line);
}
/* v523 — align-items was `center`, which centred the glyph and the arrow
   against the WHOLE body block. As soon as the meta line wrapped (it
   always does on a 390px phone) the arrow landed mid-sentence instead of
   next to the title it belongs to. `start` + a glyph/arrow box exactly
   one title line-box tall puts both marks on the title's line. */
.home-rm-decision-row {
  display: grid;
  grid-template-columns: 32px 1fr 16px;
  align-items: start;
  gap: 10px;
  width: 100%;
  padding: 10px 8px;
  background: transparent;
  border: none;
  border-radius: 12px;
  cursor: pointer;
  text-align: left;
  transition: background 140ms ease;
}
/* v571 — literals → tokens. The white-alpha hover was invisible on cream
   (white over cream does nothing), the divider hardcoded the DARK gold
   hue in both themes, and the is-critical reds bypassed the Home
   gold-ladder remap and rendered pink. All theme-flip correctly now. */
.home-rm-decision-row:hover {
  background: var(--nx-highlight-faint);
}
.home-rm-decision-row + .home-rm-decision-row {
  border-top: 1px solid var(--nx-gold-mist);
  margin-top: 4px;
  padding-top: 12px;
}
.home-rm-decision-row.is-critical {
  background: var(--nx-red-soft);
}
.home-rm-decision-row.is-critical:hover {
  background: var(--nx-gold-soft);
}
/* One source of truth for the title's line box, so the glyph and the
   arrow can be sized to it instead of to the whole wrapped body. Was
   duplicated as a `!important` in home-soft.css; it lives here now. */
.home-rm-decisions {
  --home-rm-title: 17px;
  --home-rm-lh: 1.35;
}
.home-rm-decision-glyph {
  font-size: 22px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  height: calc(var(--home-rm-title) * var(--home-rm-lh));
}
.home-rm-decision-body { min-width: 0; }
.home-rm-decision-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: var(--home-rm-title, 14px);
  font-weight: 650;
  color: var(--nx-text-strong);
  line-height: var(--home-rm-lh, 1.3);
  margin-bottom: 3px;
}
.home-rm-decision-row.is-critical .home-rm-decision-title {
  color: var(--nx-red);
}
/* v523 — this was JetBrains Mono. Mono is for kickers, counts and data;
   "No movement for 5+ days — check or escalate" is a sentence, and set
   in mono at 14px it wrapped to two lines and read like log output. */
.home-rm-decision-meta {
  font-family: 'DM Sans', system-ui, sans-serif;
  font-size: 13.5px;
  color: var(--nx-muted);
  line-height: 1.45;
}
.home-rm-decision-arrow {
  font-size: 16px;
  color: var(--nx-muted);
  display: flex;
  align-items: center;
  justify-content: center;
  height: calc(var(--home-rm-title) * var(--home-rm-lh));
}
.home-rm-decision-row:hover .home-rm-decision-arrow {
  color: var(--nx-gold);
}

/* — Budget pace bar (embedded in decisions card) */
.home-rm-pace {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px dashed var(--nx-gold-line);
}
.home-rm-pace-lbl {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 12px;
  color: var(--nx-text-strong);
  font-weight: 600;
  margin-bottom: 5px;
}
.home-rm-pace-pct {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 12px;
  color: var(--nx-text-strong);
}
.home-rm-pace.tone-critical .home-rm-pace-pct { color: var(--nx-red); }
.home-rm-pace.tone-warn     .home-rm-pace-pct { color: var(--nx-gold); }
.home-rm-pace.tone-ok       .home-rm-pace-pct { color: var(--nx-green); }
.home-rm-pace-bar {
  position: relative;
  height: 7px;
  background: rgba(0, 0, 0, 0.4);
  border-radius: 4px;
  overflow: visible;
  margin-bottom: 6px;
}
.home-rm-pace-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--nx-gold-deep, #b88830), var(--nx-gold));
  border-radius: 4px;
  transition: width 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.home-rm-pace.tone-critical .home-rm-pace-fill {
  background: linear-gradient(90deg, var(--nx-red), var(--nx-red));
}
.home-rm-pace.tone-warn .home-rm-pace-fill {
  background: linear-gradient(90deg, #d4a44e, var(--nx-gold));
}
.home-rm-pace.tone-ok .home-rm-pace-fill {
  background: linear-gradient(90deg, #4ab078, var(--nx-green));
}
.home-rm-pace-marker {
  position: absolute; top: -2px; bottom: -2px;
  width: 2px;
  background: var(--nx-text-strong);
  box-shadow: 0 0 4px rgba(255, 255, 255, 0.4);
}
.home-rm-pace-legend {
  display: flex;
  justify-content: space-between;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px;
  color: var(--nx-muted);
}
.home-rm-pace-var { font-weight: 700; }
.home-rm-pace.tone-critical .home-rm-pace-var { color: var(--nx-red); }
.home-rm-pace.tone-warn     .home-rm-pace-var { color: var(--nx-gold); }
.home-rm-pace.tone-ok       .home-rm-pace-var { color: var(--nx-green); }

/* ═══════════════════════ WORK ORDERS FEED ═══════════════════════ */
.home-rm-wo {
  margin: 18px 0;
}
.home-rm-wo .nx-section {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.home-rm-wo-count {
  /* v571 — the "4 OPEN" counter reads as the header's data counterpart
     now: legible size, gold-ink (5.1:1 on cream / gold on dark), and
     tabular figures so the count doesn't shimmy when it ticks over. */
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--nx-gold-ink);
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}
.home-rm-wo-list {
  display: flex;
  flex-direction: column;
  gap: 10px;   /* v571 — was 6px; matches the 10px list rhythm every other Home list uses */
  margin-bottom: 8px;
}
.home-rm-wo-item {
  display: grid;
  grid-template-columns: 26px 1fr auto;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 12px;
  /* v571 — was var(--nx-gold-tint), which matched the cream page so the
     rows had no ground of their own. Surface-2 lifts them off it. */
  background: var(--nx-surface-2);
  border: 1px solid var(--nx-gold-line);
  border-radius: var(--nx-radius-tight);
  cursor: pointer;
  text-align: left;
  transition: all 140ms ease;
}
.home-rm-wo-item:hover {
  border-color: var(--nx-gold);
  transform: translateX(2px);
}
/* v571 — the salmon washes are gone. Those hardcoded rgba(210,75,75,…)
   and #d4744e literals bypassed the #homeView "no reds on Home" token
   remap and composited to muddy pink on cream (Alfredo's screenshot).
   State speaks on the LEFT EDGE via remapped tokens; the ground stays
   one quiet surface for every row. */
.home-rm-wo-item.tone-critical {
  border-left: 3px solid var(--nx-red);
  background: var(--nx-red-soft);
}
.home-rm-wo-item.tone-high {
  border-left: 3px solid var(--nx-gold);
  background: var(--nx-gold-faint);
}
.home-rm-wo-item.tone-normal {
  border-left: 3px solid var(--nx-gold);
}
/* v571 — the glyph cell holds an NX.glyph stroke SVG now (emoji died
   in v452; these rows were the stragglers). Flex-centered, gold-ink so
   the icon clears 3:1 on its row in both themes. */
.home-rm-wo-glyph {
  font-size: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--nx-gold-ink);
}
.home-rm-wo-item.tone-critical .home-rm-wo-glyph { color: var(--nx-red); }
.home-rm-wo-body { min-width: 0; }
.home-rm-wo-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 14px; font-weight: 600;
  color: var(--nx-text-strong);
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.home-rm-wo-meta {
  font-size: 11px;
  color: var(--nx-muted);
  margin-top: 1px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.home-rm-wo-age {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px;
  color: var(--nx-muted);
}
.home-rm-wo-viewall {
  display: block;
  width: 100%;
  padding: 8px 12px;
  background: transparent;
  border: 1px dashed var(--nx-gold-line);
  border-radius: 12px;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--nx-gold);
  cursor: pointer;
  text-align: center;
  transition: all 140ms ease;
}
.home-rm-wo-viewall:hover {
  background: var(--nx-gold-mist, rgba(212,164,78,0.10));
  border-style: solid;
  border-color: var(--nx-gold);
}

/* ═══════════════════════ WINS CELEBRATION ═══════════════════════ */
.home-rm-wins {
  background: linear-gradient(135deg,
              rgba(108, 208, 154, 0.06) 0%,
              transparent 60%);
  border: 1px solid rgba(108, 208, 154, 0.25);
  border-left: 3px solid var(--nx-green);
  border-radius: 14px;
  padding: 10px 14px;
  margin-bottom: 16px;
}
.home-rm-wins-head {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px;
  letter-spacing: 0.16em;
  color: var(--nx-green);
  text-transform: uppercase;
  margin-bottom: 8px;
  padding-bottom: 6px;
  border-bottom: 1px dashed rgba(108, 208, 154, 0.20);
}
.home-rm-wins-glyph {
  font-size: 14px;
  font-weight: 700;
}
.home-rm-wins-pill {
  background: rgba(108, 208, 154, 0.14);
  color: var(--nx-green);
  padding: 1px 8px;
  border-radius: 12px;
  font-weight: 700;
  font-size: 9.5px;
}
.home-rm-wins-pill.is-quiet {
  background: rgba(108, 208, 154, 0.06);
  color: var(--nx-muted);
}
.home-rm-wins-spend {
  margin-left: auto;
  color: var(--nx-muted);
  font-weight: 700;
}
.home-rm-wins-list {
  display: flex;
  flex-direction: column;
  gap: 10px;             /* v259 — Alfredo: "for wins, increase separation" */
  margin-top: 10px;      /* air between the WINS header/divider and the rows */
}
.home-rm-win {
  display: grid;
  grid-template-columns: 18px 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 7px 0;
  border-bottom: 1px solid var(--nx-highlight-faint);  /* v571 — token; the white-alpha rule was invisible on cream */
}
.home-rm-win:last-child { border-bottom: 0; padding-bottom: 2px; }
.home-rm-win-glyph {
  color: var(--nx-green);
  font-weight: 700;
  font-size: 14px;
  text-align: center;
}
.home-rm-win-body { min-width: 0; }
.home-rm-win-title {
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 13px; font-weight: 600;
  color: var(--nx-text-strong);
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.home-rm-win-meta {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px;
  color: var(--nx-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.home-rm-win-when {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--nx-muted);
}


/* ═══════════════════════════════════════════════════════════════════════
   2026 VISUAL REFRESH + MOBILE SAFETY  (consolidated — was refresh-2026.css)
   ───────────────────────────────────────────────────────────────────────
   Folded into nexus-rm.css (the LAST-loaded stylesheet) so it wins the
   cascade with no extra file. Reversible: delete from here to end-of-file.
   Keeps the NEXUS identity (Roman gold, editorial, dark). Sections:
     1 ambient depth · 2 masthead coin · 3 chrome lift ·
     4 desktop frame · 5 primitive lift · 6 iPhone-Safari overflow safety.
   The PIN/login screen is intentionally left at its ORIGINAL look.
   ═══════════════════════════════════════════════════════════════════════ */

/* ─── 1. AMBIENT DEPTH ─────────────────────────────────────────────────── */
[data-theme="dark"] body {
  background:
    radial-gradient(125% 70% at 50% -8%,  rgba(212, 164, 78, 0.11), rgba(212,164,78,0) 58%),
    radial-gradient(120% 85% at 50% 112%, rgba(28, 40, 68, 0.55),   rgba(28,40,68,0)  55%),
    linear-gradient(180deg, #0c111d 0%, #0e1320 46%, #090d16 100%) !important;
  background-attachment: fixed !important;
}
[data-theme="light"] body {
  background:
    radial-gradient(125% 70% at 50% -8%, rgba(184, 136, 48, 0.10), rgba(184,136,48,0) 58%),
    linear-gradient(180deg, #f3ecdd 0%, #efe7d6 60%, #e9e0cc 100%) !important;
  background-attachment: fixed !important;
}

/* ─── 2. MASTHEAD MINI COIN — ~15% smaller (login hero left original) ──── */
.nx-mast-coin { width: 29px !important; height: 29px !important; }

/* ─── 3. CHROME LIFT (top nav + bottom nav) ────────────────────────────── */
[data-theme="dark"] .nav {
  background: rgba(14, 19, 32, 0.72) !important;
  
  
  border-bottom: 1px solid var(--nx-gold-line) !important;
  box-shadow: 0 6px 22px rgba(4, 8, 16, 0.45) !important;
}
[data-theme="light"] .nav {
  background: rgba(243, 236, 221, 0.78) !important;
  
  
  border-bottom: 1px solid var(--nx-gold-line) !important;
  box-shadow: 0 6px 18px rgba(120, 100, 70, 0.12) !important;
}
[data-theme="dark"] .bottom-nav {
  box-shadow: 0 -6px 24px rgba(4, 8, 16, 0.5) !important;
}
.bnav-btn.active::before { box-shadow: 0 0 16px var(--nx-gold-glow); }

/* ─── 4. DESKTOP LAYOUT — defer to the PC sidebar rail (v3) ────────────────
   The desktop layout is the "PC SIDEBAR NAV" media query in index.html: a
   fixed 240px nav rail on the left, with the workspace (.main) shifted right
   to fill the rest of the viewport. v1/v2 here ALSO tried to clamp #appWrap
   into a narrow centered "phone frame" — and the two fought. The clamp boxed
   the whole app into a 720px column in the middle of the screen, and the
   fixed rail (anchored to the clamp, not the viewport) landed ON TOP of the
   content, which was itself squeezed to a ~430px right-shifted sliver. That
   collision IS the "desktop looks very bad" report. Fix: stop clamping so the
   sidebar rail anchors to the viewport and the workspace fills the width;
   calm the backdrop; cap the reading column so content doesn't sprawl on wide
   monitors. Verified by geometry: rail x=0 w=240, workspace x=264 → edge. */
@media (min-width: 900px) {
  /* Quiet, focused backdrop — kill the wide gold wash, keep a faint top tint. */
  [data-theme="dark"] body {
    background:
      radial-gradient(70% 55% at 50% -25%, rgba(212,164,78,0.055), rgba(212,164,78,0) 60%),
      linear-gradient(180deg, #0b0f1a 0%, #090d16 100%) !important;
  }
  [data-theme="light"] body {
    background:
      radial-gradient(70% 55% at 50% -25%, rgba(184,136,48,0.06), rgba(184,136,48,0) 60%),
      linear-gradient(180deg, #efe7d6 0%, #e7ddc9 100%) !important;
  }

  /* Undo the old phone-frame clamp — let the app fill the viewport so the
     index.html sidebar rail + right-shifted workspace read correctly. The
     single-column views (.nxrm-page max-width:880, .nxrm-brief-page 720)
     already cap + `margin:0 auto`-center themselves inside the workspace, so
     content stays a comfortable reading width and the board keeps full width
     for its lanes — nothing more to clamp here. */
  #appWrap {
    max-width: none !important;
    margin: 0 !important;
    background: transparent !important;
    border-left: 0 !important;
    border-right: 0 !important;
    box-shadow: none !important;
  }

  /* Supabase-style section labels in the sidebar rail. `.nav-tabs .x`
     (specificity 0,2,0) beats the default `.nav-group-label{display:none}`
     below, so labels show ONLY in the ≥900px vertical rail — never inline in
     the 769–899px horizontal nav row. */
  .nav-tabs .nav-group-label {
    display: block;
    margin: 15px 12px 5px;
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--nx-gold, #d4a44e);   /* was faint --nx-muted 9.5px — low contrast, easy to miss */
    user-select: none;
    pointer-events: none;
  }
  .nav-tabs .nav-group-label:first-child { margin-top: 4px; }
  /* Action tabs route to panes/popups, not a .view, so switchTo never marks
     them .active — a faint tint keeps them from reading as disabled. */
  .nav-tab.nav-tab-action { opacity: 0.94; }}
/* Default: group labels are a rail-only affordance — hidden everywhere the
   rail isn't a vertical column. */
.nav-group-label { display: none; }

/* ─── 5. PRIMITIVE LIFT (hover-only, so touch never sticks) ─────────────── */
@media (hover: hover) and (pointer: fine) {
  .nx-card, .nx-card--elevated, .home-rm-tile, .home-kpi,
  .home-rm-decision-row, .home-rm-wo-item {
    transition: transform .16s ease, box-shadow .2s ease, border-color .2s ease !important;
  }
  .nx-card:hover, .nx-card--elevated:hover, .home-rm-tile:hover, .home-kpi:hover,
  .home-rm-decision-row:hover, .home-rm-wo-item:hover {
    transform: translateY(-2px);
    border-color: var(--nx-gold-line-2) !important;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset, 0 10px 30px rgba(4, 8, 16, 0.45) !important;
  }
  .nx-pill--primary:hover {
    transform: translateY(-1px);
    box-shadow: 0 6px 22px var(--nx-gold-aura), 0 2px 8px rgba(0, 0, 0, 0.3);
  }
  .nx-pill--secondary:hover {
    border-color: var(--nx-gold) !important;
    background: var(--nx-gold-faint) !important;
  }}
[data-theme="dark"] .home-rm-tile,
[data-theme="dark"] .home-kpi {
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0) 42%),
    var(--nx-elevated) !important;
}

/* ─── 6. MOBILE-BROWSER SAFETY (iPhone Safari) ──────────────────────────
   NEXUS runs mostly in mobile browsers, not the installed app. Keep content
   inside the viewport on narrow iPhones (SE = 375px): media never wider than
   the screen; flex rows can shrink+wrap (default min-width:auto refuses to
   shrink and pushes rows past the edge); long unbroken strings wrap. */
@media (max-width: 480px) {
  img, video, iframe { max-width: 100%; }
  .home-rm-wo-item, .home-rm-decision-row,
  .home-rm-wo-body, .home-rm-decision-body,
  .eq-row, .eq-row-main, .nx-listrow, .nx-card { min-width: 0; }
  .home-rm-wo-title, .home-rm-wo-meta,
  .home-rm-decision-title, .home-rm-decision-meta,
  .eq-row-name, .eq-row-sub, .eq-card-title, .eq-card-sub {
    overflow-wrap: anywhere;
  }}

/* ─── 7. LOGIN → APP HANDOFF — no whole-screen zoom ─────────────────────
   The PIN screen exits with `transform: scale(1.05)` (css/nexus.css) while
   it fades, so right after login the entire login surface visibly zooms up
   ~5% over half a second — which reads as "the whole screen enlarges a
   second after logging in" (the delay is the auth round-trip). Keep the
   opacity fade for a soft reveal, but drop the scale so the app is simply
   uncovered at its true size instead of appearing to grow. */
.pin-screen.hidden { transform: none !important; }

/* ─── 8. TOUCH TARGETS — meet the 44px floor (WCAG 2.5.5 / Apple HIG) ────
   A 375px audit found two controls under 44px tall: the login language
   toggle (34px) and the masthead "more" button (42px). Bump both to 44px;
   center the icon button's contents so the glyph stays put in the taller
   hit area. Everything else (pin keys 62px, bottom-nav 56px) already passes. */
.pin-lang-btn { min-height: 44px; }
.nav-more {
  min-height: 44px;
  min-width: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* ─── 9. REDUCED-MOTION BACKSTOP ────────────────────────────────────────
   Many stylesheets (clippy.css spins, coin/anomaly pulses, galaxy, chat,
   ordering, nexus.css) declare `infinite` animations WITHOUT a
   prefers-reduced-motion guard, and the design system's reduced-motion block
   isn't a blanket reset — so perpetual motion leaks through for users who
   asked the OS to reduce motion (a real vestibular-accessibility issue).
   This is a gentle global backstop: it lets one-shot reveals play normally
   but collapses INFINITE loops to a single cycle (no perpetual spin/pulse),
   which is the part that actually causes discomfort. Files that already set
   `animation:none` under their own guard still win — this only catches the
   ungated ones. Deliberately NOT zeroing duration, to avoid breaking
   reveal animations that lack `forwards`. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
  }}

/* ─── 10. DESKTOP POLISH + A11Y (audit Phase 2) ─────────────────────────────
   Sheets/modals are mobile bottom-sheets (slide up from translateY(100%),
   top-rounded, bottom-anchored). On a wide desktop that reads as a stretched
   phone UI — center it as a card with a fade+scale instead. Plus a visible
   keyboard focus ring on the sidebar rail, and two stray sub-44px controls. */
@keyframes nxSheetInDesktop {
  from { opacity: 0; transform: translateY(10px) scale(0.985); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
@media (min-width: 900px) {
  .nx-sheet-backdrop { align-items: center !important; }
  .nx-sheet {
    max-height: calc(100dvh - 80px) !important;
    border-radius: 16px !important;
    border-bottom: 1px solid var(--nx-border) !important;
    box-shadow: 0 24px 70px rgba(0, 0, 0, 0.5) !important;
    animation: nxSheetInDesktop var(--nx-flow) !important;
  }
  .nx-sheet-handle { display: none !important; }   /* drag handle is meaningless when centered */

  /* Keyboard focus ring on the sidebar rail (was invisible → silent tab nav). */
  .nav-tab:focus-visible {
    outline: 2px solid var(--nx-gold) !important;
    outline-offset: -2px;
    border-radius: 6px;
  }}
/* Touch targets to the 44px floor (WCAG 2.5.5) for two stragglers. */
.tc-btn { min-height: 44px; }
.admin-user-del { min-width: 32px; min-height: 32px; }

/* ─── 11. DESKTOP SIDEBAR — Supabase / ResQ-style rail ──────────────────────
   The ≥900px rail (index.html PC-sidebar layout) was functional but flat —
   no hover, active state was just a thin left border. Give it the SaaS feel:
   a slightly-recessed rail surface, calm idle items that brighten on hover,
   and a clear filled + gold-accented active item. Visual only — no width /
   .main-offset changes, so geometry is untouched. */
@media (min-width: 900px) {
  /* #navTabs (id) specificity so these beat the base rail rules. */
  [data-theme="dark"] #navTabs { background: #0d1119 !important; }   /* recessed vs content for depth */
  [data-theme="light"] #navTabs { background: #efe7d6 !important; }
  #navTabs { padding: 14px 10px !important; gap: 3px !important; }

  #navTabs .nav-tab {
    border-radius: 8px !important;
    border-left: 3px solid transparent !important;
    transition: background .12s ease, color .12s ease !important;
  }
  #navTabs .nav-tab .nav-icon { opacity: .72; transition: opacity .12s ease; }
  #navTabs .nav-tab:hover {
    background: var(--nx-gold-tint, rgba(212,164,78,0.07)) !important;
    color: var(--nx-text-strong, #f5f1e8) !important;
  }
  #navTabs .nav-tab:hover .nav-icon { opacity: 1; }
  #navTabs .nav-tab.active {
    background: var(--nx-gold-tint, rgba(212,164,78,0.13)) !important;
    border-left-color: var(--nx-gold, #d4a44e) !important;
    color: var(--nx-gold, #d4a44e) !important;
    font-weight: 600 !important;
  }
  #navTabs .nav-tab.active span { color: var(--nx-gold, #d4a44e) !important; font-weight: 600 !important; }
  #navTabs .nav-tab.active .nav-icon { opacity: 1; }
  /* The active background was being beaten by a higher-specificity rule; a
     2-id selector + background-color longhand wins cleanly. */
  #appWrap #navTabs .nav-tab.active { background-color: rgba(212, 164, 78, 0.13) !important; }
  #appWrap #navTabs .nav-tab:hover { background-color: rgba(212, 164, 78, 0.07) !important; }}

/* ─── 13. NOTIFICATION BELL — surface it ────────────────────────────────────
   notifications-bell.js is loaded + fully wired (counts urgent WOs, down units,
   overdue cards, pending PMs, quotes, unpaid invoices → badge + "Needs doing"
   panel that routes to each view), but the bell computed display:none from a
   rule we couldn't locate in any stylesheet. id + !important wins reliably
   (verified). The masthead only shows post-login, so this never leaks onto the
   PIN screen. */
#navBell { display: inline-flex !important; align-items: center; justify-content: center; }

/* ─── 15. MASTHEAD — tidy the header into one aligned row ────────────────────
   The header items (NEXUS wordmark, advisor coin, date, bell, ☰) sat on mixed
   baselines/heights (16–59px) — a scattered look, made worse by un-hiding the
   bell. Center everything on one line and give the two icon buttons a matching
   size so the right cluster reads as a pair. */
.nav { align-items: center !important; }
.nav-bell, .nav-more {
  width: 44px !important; height: 44px !important;   /* match each other + the 44px touch floor (§8) */
  min-width: 44px !important; min-height: 44px !important;
  flex-shrink: 0; padding: 0 !important;
  display: inline-flex !important; align-items: center; justify-content: center;
}
.nav-bell .nav-icon, .nav-more .nav-icon { width: 20px; height: 20px; }

/* ─── 18. DESKTOP SIDEBAR FIX — let the fixed rail fill the viewport ──────────
   §3 (chrome lift) puts a backdrop-filter on .nav. A filtered ancestor becomes
   the CONTAINING BLOCK for position:fixed descendants — so the fixed sidebar
   (#navTabs, top:60/bottom:0) anchored to the 60px .nav instead of the viewport
   and COLLAPSED to ~28px, clipping all 19 nav buttons into a sliver (the "empty
   sidebar"). Drop the filter on .nav at desktop so the rail anchors to the
   viewport and stacks the buttons full-height. Matches §3's specificity. */
@media (min-width: 900px) {
  [data-theme="dark"] .nav, [data-theme="light"] .nav {
    
    
    overflow: visible !important;
  }}

/* ─── 19. EQUIPMENT — expanding "AI Create" panel (inline, no modal) ──────────
   The header AI Create button toggles #eqAiExpand. It animates open with a
   max-height/opacity transition and shows the four AI methods as cards. */
.eq-ai-create-btn.expanded {
  background: var(--nx-gold, #d4a44e);
  color: var(--nx-gold-on, #1a1205);
}
.eq-ai-expand {
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  margin: 0;
  transition: max-height .26s ease, opacity .22s ease, margin .26s ease;
}
.eq-ai-expand.open {
  max-height: 420px;
  opacity: 1;
  margin: 8px 0 4px;
}
.eq-ai-expand-title {
  display: flex; align-items: center; gap: 6px;
  font-size: 11.5px; font-weight: 600; letter-spacing: .02em;
  color: var(--muted, #9a8f78); margin: 0 2px 8px;
}
.eq-ai-expand-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
@media (min-width: 760px) { .eq-ai-expand-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }}
.eq-ai-x {
  display: flex; align-items: center; gap: 10px; text-align: left;
  padding: 12px; border-radius: 12px; cursor: pointer;
  background: rgba(200,164,78,0.06);
  border: 1px solid rgba(200,164,78,0.22);
  color: var(--text, #ece6d8);
  transition: background .15s, border-color .15s, transform .08s;
}
.eq-ai-x:hover {
  background: rgba(200,164,78,0.13);
  border-color: rgba(200,164,78,0.45);
}
.eq-ai-x:active { transform: scale(.985); }
.eq-ai-x-ic {
  flex-shrink: 0; width: 36px; height: 36px; border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  background: rgba(200,164,78,0.14); color: var(--nx-gold, #d4a44e);
}
.eq-ai-x-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.eq-ai-x-txt b { font-size: 13px; font-weight: 600; }
.eq-ai-x-txt small { font-size: 10.5px; color: var(--muted, #9a8f78); line-height: 1.35; }

/* ─── 20. CLEANING LITE — simple daily driver, mirrors the Ordering UI ────────
   Gold pill pickers, collapsible-style zone cards, tap-to-fill task rows, round
   avatars, floating CTA. Tokens from nx-system.css; matches .ord-* language. */
.cleanlite { width: 100%; max-width: 680px; align-self: stretch; margin: 0 auto; padding: 8px 14px 120px; box-sizing: border-box; }
.cleanlite-top { display: flex; align-items: center; gap: 10px; margin: 4px 0 12px; flex-wrap: wrap; } /* v260: Today/Crew seg wraps under the locations on phones instead of clipping */
.cleanlite-loc-picker {
  display: inline-flex; gap: 4px; padding: 4px; border-radius: 999px; flex: 1;
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)); background: var(--nx-surface-1, rgba(34,46,70,.42));
}
.cleanlite-loc {
  flex: 1; padding: 8px 10px; min-height: var(--nx-touch-min, 44px); border: 0; border-radius: 999px; cursor: pointer;
  background: transparent; color: var(--nx-muted, #9aa3b2); font-weight: 600; font-size: 13px;
  letter-spacing: .02em; transition: background .14s, color .14s, box-shadow .14s;
}
/* v593 — active = the house chip voice (gold tint + gold-ink), not a solid
   fill with a glow. Solid gold is reserved for the one primary action, and
   the glow was the last halo on this screen (flat law). */
.cleanlite-loc.is-active {
  background: var(--nx-gold-soft, rgba(212,164,78,.16)); color: var(--nx-gold-ink, #d4a44e);
  box-shadow: inset 0 0 0 1px var(--nx-gold-line-2, rgba(212,164,78,.38));
}
.cleanlite-week {
  padding: 7px 16px; border: 0; border-radius: 999px; cursor: pointer; background: transparent;
  color: var(--nx-muted, #9aa3b2); font-weight: 600; font-size: 12.5px; transition: background .14s, color .14s;
}
.cleanlite-week.is-active { background: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626); }
.cleanlite-zones { display: flex; flex-direction: column; gap: 12px; }
.cleanlite-zone {
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)); border-radius: var(--nx-radius-tight, 14px);
  background: var(--nx-surface-1, rgba(34,46,70,.42)); overflow: hidden;
}
.cleanlite-zone-head { display: flex; align-items: center; gap: 11px; padding: 13px 14px; }
.cleanlite-person-btn { border: 0; background: transparent; padding: 0; cursor: pointer; flex: 0 0 auto; }
.cleanlite-av {
  width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 14px; color: #fff;
  background: hsl(var(--av-hue, 40), 42%, 30%); border: 2px solid var(--nx-gold-line, rgba(212,164,78,.3));   /* v593 — 30% lightness clears 4.5:1 under white initials */
}
.cleanlite-av.is-none { background: var(--nx-surface-2, rgba(24,34,54,.62)); color: var(--nx-faint, #6c7585); }
.cleanlite-av.is-add { background: var(--nx-gold-faint, rgba(212,164,78,.12)); color: var(--nx-gold, #d4a44e); border-style: dashed; }
.cleanlite-zone-titles { flex: 1; min-width: 0; }
.cleanlite-zone-name { font-size: 15.5px; font-weight: 700; color: var(--nx-text-strong, #f6f0e2); overflow-wrap: anywhere; }
.cleanlite-zone-person { font-size: 12.5px; color: var(--nx-muted, #9aa3b2); }
.cleanlite-zone-count {
  font-family: var(--nx-font-mono, "JetBrains Mono", monospace); font-size: 12px; font-weight: 700;
  padding: 3px 9px; border-radius: 999px; color: var(--nx-muted, #9aa3b2);
  background: var(--nx-surface-2, rgba(24,34,54,.62)); flex: 0 0 auto;
}
.cleanlite-zone-count.is-complete { color: var(--nx-gold-on, #101626); background: var(--nx-gold, #d4a44e); }
.cleanlite-guide {
  flex: 0 0 auto; width: 36px; height: 36px; border-radius: 50%; cursor: pointer;
  background: var(--nx-gold-faint, rgba(212,164,78,.1)); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22));
  color: var(--nx-gold, #d4a44e); display: flex; align-items: center; justify-content: center;
}
.cleanlite-guide:hover { background: var(--nx-gold-soft, rgba(212,164,78,.18)); }
.cleanlite-tasks { border-top: 1px solid var(--nx-gold-line, rgba(212,164,78,.14)); }
/* v492 — border-radius: 0 is not decoration, it is a REPAIR. nx-system.css
   gives every <button> a 16px radius via a zero-specificity :where() default;
   the daily row is a <button>, so it was quietly picking that up while the
   periodic row (a <div>) was not. That is what made one half of the cleaning
   screen read as rounded pills and the other as flat rows — nobody chose it.
   A full-width row inside a bordered card wants square edges: the 16px was
   also clipping the inset gold done-stripe into a hook. */
.cleanlite-task {
  display: flex; align-items: center; gap: 11px; width: 100%; text-align: left; cursor: pointer;
  padding: 12px 14px; border: 0; border-radius: 0;
  border-bottom: 1px solid var(--nx-gold-line, rgba(212,164,78,.1));
  background: transparent; color: var(--nx-text, #ece4d4); font-size: 14px; transition: background .12s;
  position: relative;
}
.cleanlite-task:last-child { border-bottom: 0; }
.cleanlite-task:active { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }
.cleanlite-check {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 8px; display: flex; align-items: center; justify-content: center;
  border: 1.5px solid var(--nx-gold-line, rgba(212,164,78,.35)); color: transparent; transition: all .14s;
}
.cleanlite-task-name { flex: 1; min-width: 0; overflow-wrap: break-word; }
.cleanlite-freq {
  flex: 0 0 auto; font-family: var(--nx-font-mono, monospace); font-size: 10px; letter-spacing: .5px;
  text-transform: uppercase; color: var(--nx-faint, #6c7585); padding: 2px 7px; border-radius: 999px;
  background: var(--nx-surface-2, rgba(24,34,54,.62));
}
/* Done = the Ordering "has-qty" gold fill + left accent stripe. */
.cleanlite-task.is-done {
  background: linear-gradient(90deg, var(--nx-gold-soft, rgba(212,164,78,.18)), transparent 80%);
  box-shadow: inset 3px 0 0 0 var(--nx-gold, #d4a44e);
}
.cleanlite-task.is-done .cleanlite-check { background: var(--nx-gold, #d4a44e); border-color: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626); }
.cleanlite-task.is-done .cleanlite-task-name { color: var(--nx-muted, #9aa3b2); text-decoration: line-through; text-decoration-color: var(--nx-gold-line, rgba(212,164,78,.5)); }
.cleanlite-empty { padding: 16px; color: var(--nx-faint, #6c7585); font-style: italic; text-align: center; }
/* Floating CTA — mirrors .ord-entry-cta */
.cleanlite-cta-wrap {
  position: fixed; left: 0; right: 0; bottom: 0; display: flex; gap: 10px; justify-content: center;
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); pointer-events: none; z-index: 30;
  /* v366 — no scrim (Alfredo): the fade-to-bg gradient read as a shadow band across the bottom of
     the cleaning list. The Summary button has its own solid background, so it floats fine without it. */
  background: transparent;
}
.cleanlite-cta {
  pointer-events: auto; display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  height: 50px; padding: 0 22px; border: 0; border-radius: 999px; cursor: pointer; font-size: 15px; font-weight: 600;
  color: var(--nx-gold-on, #101626);
  background: linear-gradient(180deg, var(--nx-gold, #d4a44e), var(--nx-gold-deep, #a8821e));
  box-shadow: 0 4px 16px rgba(0,0,0,.45); transition: transform .1s;   /* v593 — halo removed (flat law) */
}
.cleanlite-cta:active { transform: scale(.985); }
.cleanlite-cta.is-ghost { background: var(--nx-surface-3, rgba(42,56,84,.72)); color: var(--nx-text, #ece4d4); box-shadow: 0 4px 16px rgba(0,0,0,.4); }
/* Person picker sheet */
.cleanlite-sheet-bg {
  position: fixed; inset: 0; z-index: 10060; display: flex; align-items: flex-end; justify-content: center;
  background: rgba(0,0,0,.55); opacity: 0; transition: opacity .18s ease;
}
.cleanlite-sheet-bg.open { opacity: 1; }
.cleanlite-sheet {
  width: 100%; max-width: 520px; max-height: 80dvh; overflow-y: auto;
  background: var(--nx-surface-solid, #161d2e); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.24)); border-bottom: 0;
  border-radius: 22px 22px 0 0; padding: 8px 16px calc(20px + env(safe-area-inset-bottom));
  transform: translateY(16px); transition: transform .2s cubic-bezier(.4,0,.2,1);
}
.cleanlite-sheet-bg.open .cleanlite-sheet { transform: none; }
.cleanlite-sheet-grip { width: 36px; height: 4px; border-radius: 999px; background: var(--nx-border-strong, rgba(255,255,255,.15)); margin: 8px auto 10px; }
.cleanlite-sheet-title { font-size: 15px; color: var(--nx-text-strong, #f6f0e2); margin: 0 4px 12px; }
@media (min-width: 900px) { .cleanlite-sheet-bg { align-items: center; } .cleanlite-sheet { border-radius: 22px; border-bottom: 1px solid var(--nx-gold-line, rgba(212,164,78,.24)); }}
/* Per-day crew selector (replaces the week toggle) */
.cleanlite-dayrow { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.cleanlite-dayrow-label {
  font-family: var(--nx-font-mono, "JetBrains Mono", monospace); font-size: 10.5px; letter-spacing: .08em;
  text-transform: uppercase; color: var(--nx-gold-ink, #d4a44e); font-weight: 700; flex: 0 0 auto;
}
.cleanlite-av.is-varies { background: var(--nx-surface-3, rgba(42,56,84,.72)); color: var(--nx-gold, #d4a44e); font-size: 17px; }

/* ─── 21. DAILY LOG revamp — Lite/Ordering design language ────────────────────
   Pure restyle of the existing .dlog-* form (markup unchanged, persistence
   untouched). The dlog base styles are embedded in index.html and come LATER
   in source, so every rule is scoped under #dailylogView to win specificity.
   Gold pill tabs, rounded gold-line cards, calmer 16px inputs (no iOS zoom),
   gold-gradient primary action. */
#dailylogView .dlog-shell { max-width: 720px; }
#dailylogView .dlog-title { font-size: 21px; font-weight: 700; color: var(--nx-gold, #d4a44e); letter-spacing: .4px; }
#dailylogView .dlog-new-btn { border-radius: 999px; border-color: var(--nx-gold-line, rgba(212,164,78,.22)); }
/* v422 — live themed email preview */
#dailylogView #dlogPreviewBtn.is-on {
  background: var(--nx-gold-faint, rgba(212,164,78,.16)); color: var(--nx-gold, #d4a44e);
  border-color: var(--nx-gold, #d4a44e);
}
#dailylogView .dlog-preview {
  margin: 6px 2px 16px; border: 1px solid var(--nx-line, rgba(255,255,255,.1));
  border-radius: 14px; overflow: hidden; background: var(--nx-surface, #16171b);
}
#dailylogView .dlog-preview-bar {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 9px 12px; border-bottom: 1px solid var(--nx-line, rgba(255,255,255,.08));
}
#dailylogView .dlog-preview-title { font-size: 12px; font-weight: 600; color: var(--nx-muted, #9aa3b2); letter-spacing: .02em; }
#dailylogView .dlog-preview-themes { display: inline-flex; gap: 4px; }
#dailylogView .dlog-preview-theme {
  font: inherit; font-size: 11.5px; padding: 4px 10px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--nx-line, rgba(255,255,255,.14)); background: transparent; color: var(--nx-muted, #9aa3b2);
}
#dailylogView .dlog-preview-theme.is-on {
  background: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626);
  border-color: var(--nx-gold, #d4a44e); font-weight: 700;
}
#dailylogView .dlog-preview-frame { display: block; width: 100%; border: 0; background: #faf6ec; min-height: 200px; }
[data-theme="light"] #dailylogView .dlog-preview { background: #fbf6ea; }

/* Location tabs — solid gold when active (matches the cleaning loc picker) */
#dailylogView .dlog-loc-pill { border-color: var(--nx-gold-line, rgba(212,164,78,.22)); }
#dailylogView .dlog-loc-pill.is-active {
  background: var(--nx-gold, #d4a44e) !important; color: var(--nx-gold-on, #101626) !important;
  border-color: var(--nx-gold, #d4a44e) !important; box-shadow: 0 0 14px rgba(212,164,78,.3);
}
#dailylogView .dlog-recent-chip.is-active { background: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626); border-color: var(--nx-gold, #d4a44e); }

/* Sections → rounded gold-line cards */
#dailylogView .dlog-section {
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)); border-radius: 16px;
  background: var(--nx-surface-1, rgba(34,46,70,.42)); margin-bottom: 14px;
}
#dailylogView .dlog-section-header { padding: 15px 16px; }
#dailylogView .dlog-section-header::after { color: var(--nx-gold, #d4a44e); font-size: 20px; }

/* ─── v527 · Weekly Walkthrough section in the daily log ───────────────
   Full detail only on the completion day; every other day is one line and
   a shortcut. Gold that carries words is --nx-gold-ink (v523 law). */
#dailylogView .dlog-wt-loc {
  padding: 10px 2px 12px;
  border-bottom: 1px solid var(--nx-gold-line, rgba(212,164,78,.12));
}
#dailylogView .dlog-wt-loc:last-child { border-bottom: 0; padding-bottom: 4px; }
#dailylogView .dlog-wt-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
#dailylogView .dlog-wt-name { font-weight: 700; color: var(--nx-text-strong, #f6f0e2); font-size: 14.5px; }
#dailylogView .dlog-wt-meta { font-size: 12.5px; color: var(--nx-muted, #9aa3b2); font-variant-numeric: tabular-nums; }
#dailylogView .dlog-wt-subhead {
  margin: 9px 0 4px;
  font-family: var(--nx-font-mono, 'JetBrains Mono', ui-monospace, monospace);
  font-size: 10px; letter-spacing: .1em; text-transform: uppercase;
  color: var(--nx-gold-ink, var(--nx-gold, #d4a44e));
  font-variant-numeric: tabular-nums;
}
#dailylogView .dlog-wt-issue { padding: 6px 0; font-size: 13px; line-height: 1.45; }
#dailylogView .dlog-wt-issue-where { display: block; font-weight: 600; color: var(--nx-text, #ece4d4); }
#dailylogView .dlog-wt-issue-body { display: block; color: var(--nx-muted, #9aa3b2); }
#dailylogView .dlog-wt-badge {
  display: inline-block; margin-top: 3px; margin-right: 6px;
  font-family: var(--nx-font-mono, 'JetBrains Mono', ui-monospace, monospace);
  font-size: 10px; letter-spacing: .04em;
  color: var(--nx-gold-ink, var(--nx-gold, #d4a44e));
  padding: 2px 8px; border-radius: 999px;
  background: var(--nx-gold-faint, rgba(212,164,78,.08));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22));
  font-variant-numeric: tabular-nums;
}
#dailylogView .dlog-wt-badge.is-quiet {
  color: var(--nx-faint, #6c7585);
  background: var(--nx-surface-2, rgba(24,34,54,.62));
  border-color: transparent;
}
#dailylogView .dlog-wt-reading { font-size: 13px; color: var(--nx-muted, #9aa3b2); padding: 2px 0; font-variant-numeric: tabular-nums; }
#dailylogView .dlog-wt-link {
  display: inline-flex; align-items: center; gap: 5px;
  margin-top: 8px; padding: 9px 14px; min-height: 40px;
  background: transparent; cursor: pointer;
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22));
  border-radius: 999px;
  color: var(--nx-gold-ink, var(--nx-gold, #d4a44e));
  font-family: 'Outfit', system-ui, sans-serif; font-size: 12.5px; font-weight: 500;
}
#dailylogView .dlog-wt-link:active { transform: scale(.97); }
#dailylogView .dlog-wt-quiet { font-size: 13px; color: var(--nx-faint, #6c7585); margin: 4px 0; }
#dailylogView .dlog-section-title { font-size: 15.5px; font-weight: 700; color: var(--nx-text-strong, #f6f0e2); }
#dailylogView .dlog-section-count {
  background: var(--nx-gold-faint, rgba(212,164,78,.12)); border-color: var(--nx-gold-line, rgba(212,164,78,.22));
  color: var(--nx-gold, #d4a44e); font-weight: 700;
}
#dailylogView .dlog-subsection-title { color: var(--nx-gold, #d4a44e); letter-spacing: .12em; font-weight: 600; margin-top: 10px; }
#dailylogView .dlog-subsection-count {
  display: inline-block; min-width: 18px; padding: 0 6px; margin-left: 6px;
  border-radius: 9px; font-size: 11px; font-weight: 700; letter-spacing: 0;
  background: var(--nx-gold-faint, rgba(212,164,78,.14)); color: var(--nx-gold, #d4a44e);
}

/* ─── Ordering / Supplies rollup (read-only mirror of the Ordering board) ── */
#dailylogView .dlog-order-list { display: flex; flex-direction: column; gap: 6px; margin: 6px 0 8px; }
#dailylogView .dlog-order-item {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; border-radius: 8px;
  background: var(--nx-surface-2, rgba(255,255,255,.03));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.16));
  font-size: 13px;
}
#dailylogView .dlog-order-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
#dailylogView .dlog-order-dot-to_order { background: var(--nx-red, #a83e3e); }
#dailylogView .dlog-order-dot-ordered  { background: var(--nx-gold, #d4a44e); }
#dailylogView .dlog-order-title { flex: 1; color: var(--nx-text, #ece4d4); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#dailylogView .dlog-order-cost { color: var(--nx-text-dim, #b6ad9a); font-variant-numeric: tabular-nums; }
#dailylogView .dlog-order-lane {
  font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 6px; flex-shrink: 0;
}
#dailylogView .dlog-order-lane-to_order { background: rgba(168,62,62,.16); color: var(--nx-red, #a83e3e); }
#dailylogView .dlog-order-lane-ordered  { background: var(--nx-gold-faint, rgba(212,164,78,.14)); color: var(--nx-gold, #d4a44e); }
#dailylogView .dlog-open-ordering { margin-top: 4px; }

/* Inputs → calmer, rounded, gold focus ring; 16px avoids iOS zoom */
#dailylogView .dlog-field-label { font-size: 13px; font-weight: 600; color: var(--nx-text, #ece4d4); }
#dailylogView .dlog-field input[type="text"],
#dailylogView .dlog-field input[type="date"],
#dailylogView .dlog-field textarea {
  background: var(--nx-bg, #0e1320); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.2));
  border-radius: 12px; padding: 11px 13px; font-size: 16px; min-height: 44px;
}
#dailylogView .dlog-field textarea { min-height: 70px; }
#dailylogView .dlog-field input:focus,
#dailylogView .dlog-field textarea:focus {
  border-color: var(--nx-gold, #d4a44e); box-shadow: 0 0 0 2px var(--nx-gold-soft, rgba(212,164,78,.18));
}

/* Repeatable rows (vendor calls, other properties) → gold-line cards */
#dailylogView .dlog-vendor-row, #dailylogView .dlog-other-row {
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.2)); border-radius: 14px;
  background: var(--nx-surface-1, rgba(34,46,70,.42));
}
#dailylogView .dlog-vendor-row input, #dailylogView .dlog-vendor-row textarea,
#dailylogView .dlog-other-row input, #dailylogView .dlog-other-row textarea { border-radius: 10px; border-color: var(--nx-gold-line, rgba(212,164,78,.18)); font-size: 15px; }
#dailylogView .dlog-row-remove { border-color: var(--nx-gold-line, rgba(212,164,78,.25)); }

/* Status/activity/vendor/ticket cards → consistent gold-line rounding */
#dailylogView .dlog-eqstatus-row { border-color: var(--nx-gold-line, rgba(212,164,78,.2)); border-radius: 14px; background: var(--nx-surface-1, rgba(34,46,70,.42)); }
#dailylogView .dlog-vd-row, #dailylogView .dlog-tk-row { border-radius: 12px; }

/* Actions — gold-gradient primary, pill secondaries */
/* Email opener preview + refresh controls (New from Clippy / From the pool) */
#dailylogView .dlog-opener {
  margin-top: 20px; padding: 14px 16px;
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.18)); border-radius: 14px;
  background: var(--nx-highlight-tint, rgba(255,255,255,.02));
}
#dailylogView .dlog-opener-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
#dailylogView .dlog-opener-label { font: 700 10px/1 var(--nx-font-mono, monospace); letter-spacing: .12em; text-transform: uppercase; color: var(--nx-gold, #d4a44e); }
#dailylogView .dlog-opener-src { font: 10px/1 var(--nx-font-mono, monospace); letter-spacing: .04em; color: var(--nx-muted, #8a94a0); }
/* v18.49 — his face + soul-glow sit beside the opener line. The orb's aura
   is --dlog-soul-glow, eased toward his live ANIMA colour by daily-log.js
   (same palette as his shell + node telemetry). The slow filter transition
   makes the colour breathe rather than snap. */
/* Clippy sits centered ABOVE his own line — his orb and his quote read as one
   unit, not an icon off to the side (Alfredo: "center clippy to his quote"). */
#dailylogView .dlog-opener-body { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 10px; margin-bottom: 12px; }
#dailylogView .dlog-clippy-orb {
  flex: 0 0 auto; display: block; line-height: 0;
  --dlog-soul-glow: rgba(92, 176, 255, 0.42);
  filter: drop-shadow(0 0 9px rgba(92, 176, 255, 0.25))
          drop-shadow(0 0 16px var(--dlog-soul-glow));
  transition: filter 1600ms ease;
}
#dailylogView .dlog-opener-text { margin: 0; max-width: 46ch; font-size: 14.5px; line-height: 1.5; color: var(--nx-text, #e7ecf5); font-style: italic; text-align: center; }
#dailylogView .dlog-opener-btns { display: flex; gap: 8px; flex-wrap: wrap; }
#dailylogView .dlog-opener-btns .eq-btn { border-radius: 999px; font-size: 12.5px; }
#dailylogView .dlog-opener-btns .eq-btn[disabled] { opacity: .6; pointer-events: none; }

#dailylogView .dlog-actions { border-top: 1px solid var(--nx-gold-line, rgba(212,164,78,.18)); padding: 18px 0 100px; }
#dailylogView .dlog-actions .eq-btn { border-radius: 999px; }
#dailylogView .dlog-actions .eq-btn-primary {
  background: linear-gradient(180deg, var(--nx-gold, #d4a44e), var(--nx-gold-deep, #a8821e));
  color: var(--nx-gold-on, #101626); border: 0;
  box-shadow: 0 4px 16px rgba(0,0,0,.4), 0 0 16px var(--nx-gold-soft, rgba(212,164,78,.3));
}
#dailylogView .dlog-add-row-btn, #dailylogView .dlog-add-loc-btn { border-radius: 999px; }
/* The cleaning list no longer needs the takeover's tall top padding. */
#cleanView .clean-list { padding-top: 6px; }
/* Float Lite's CTA above the mobile bottom-nav (it renders ~79px tall with
   icons+labels); on desktop (>=900px) the bottom-nav is replaced by the side
   rail, so sit at 0. */
.cleanlite { padding-bottom: 172px; }
.cleanlite-cta-wrap { bottom: calc(86px + env(safe-area-inset-bottom, 0px)); }
@media (min-width: 900px) { .cleanlite-cta-wrap { bottom: 0; } .cleanlite { padding-bottom: 110px; }}

/* ─── 23. CLEANING LITE — per-zone actions (kebab menu · note · history) ──────*/
.cleanlite-kebab { font-size: 20px; font-weight: 700; line-height: 1; }
.cleanlite-zone-noterow {
  display: flex; align-items: flex-start; gap: 7px; padding: 8px 14px;
  border-top: 1px solid var(--nx-gold-line, rgba(212,164,78,.12));
  font-size: 12.5px; color: var(--nx-text, #ece4d4); background: var(--nx-gold-faint, rgba(212,164,78,.07));
}
.cleanlite-zone-noterow svg { color: var(--nx-gold, #d4a44e); flex: 0 0 auto; margin-top: 2px; }
.cleanlite-zone-noterow span { overflow-wrap: anywhere; line-height: 1.4; }
/* The ⋮ menu (reuses .clean-card-menu from openMenuNear) */
.clean-card-menu {
  min-width: 188px; padding: 6px; border-radius: 14px;
  background: var(--nx-surface-solid, #161d2e); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.24));
  box-shadow: 0 14px 40px rgba(0,0,0,.5);
}
.clean-card-menu .clean-menu-item {
  display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; cursor: pointer;
  padding: 10px 12px; border: 0; border-radius: 10px; background: transparent;
  color: var(--nx-text, #ece4d4); font-size: 13.5px;
}
.clean-card-menu .clean-menu-item:hover { background: var(--nx-gold-faint, rgba(212,164,78,.12)); }
.clean-card-menu .clean-menu-item svg { color: var(--nx-gold, #d4a44e); flex: 0 0 auto; }
/* v421 — separator above the admin structural actions in the zone kebab */
.clean-card-menu .clean-menu-sep { height: 1px; margin: 5px 10px; background: var(--nx-line, rgba(255,255,255,.09)); }
/* History sheet rows */
.cleanlite-hist { display: flex; flex-direction: column; }
.cleanlite-hist-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 11px 4px; border-bottom: 1px solid var(--nx-gold-line, rgba(212,164,78,.1));
}
.cleanlite-hist-row:last-child { border-bottom: 0; }
.cleanlite-hist-task { font-size: 13.5px; color: var(--nx-text, #ece4d4); overflow-wrap: anywhere; }
.cleanlite-hist-when {
  font-family: var(--nx-font-mono, "JetBrains Mono", monospace); font-size: 12px; color: var(--nx-faint, #6c7585);
  white-space: nowrap; flex: 0 0 auto;
}
.cleanlite-hist-when.is-today { color: var(--nx-gold-ink, #d4a44e); font-weight: 700; }

/* Daily-log auto-send toggle (+ cutoff-time input) — gold-filled when ON */
#dailylogView .dlog-autosend-wrap { display: inline-flex; align-items: center; gap: 6px; margin-right: auto; }
#dailylogView .dlog-autosend-toggle.is-on {
  background: var(--nx-gold, #d4a44e) !important; color: var(--nx-gold-on, #101626) !important;
  border-color: var(--nx-gold, #d4a44e) !important;
}
#dailylogView .dlog-autosend-time {
  background: var(--nx-bg, #0e1320); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.25));
  border-radius: 10px; color: var(--nx-text, #ece4d4); padding: 6px 8px; font: inherit; font-size: 13px;
}

/* ─── 24. CLEANING LITE — Overview (all locations) ───────────────────────────*/
.cleanlite-ovhead {
  font-family: var(--nx-font-mono, "JetBrains Mono", monospace); font-size: 11px; letter-spacing: .08em;
  text-transform: uppercase; color: var(--nx-gold-ink, #d4a44e); font-weight: 700; margin: 4px 2px 12px;
}
.cleanlite-ovgrid { display: flex; flex-direction: column; gap: 12px; }
.cleanlite-ovcard {
  display: block; width: 100%; text-align: left; cursor: pointer; padding: 16px; border-radius: 16px;
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)); background: var(--nx-surface-1, rgba(34,46,70,.42));
  color: var(--nx-text, #ece4d4); transition: border-color .15s, transform .08s;
}
.cleanlite-ovcard:hover { border-color: var(--nx-gold, #d4a44e); }
.cleanlite-ovcard:active { transform: scale(.99); }
.cleanlite-ovcard-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.cleanlite-ovcard-name { font-size: 17px; font-weight: 700; color: var(--nx-text-strong, #f6f0e2); }
.cleanlite-ovcard-pct { font-family: var(--nx-font-mono, monospace); font-size: 15px; font-weight: 700; color: var(--nx-gold, #d4a44e); }
.cleanlite-ovcard-pct.is-complete { color: var(--nx-gold-ink, #d4a44e); }
.cleanlite-ovbar { height: 8px; border-radius: 999px; background: var(--nx-surface-2, rgba(24,34,54,.62)); overflow: hidden; }
.cleanlite-ovbar-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--nx-gold, #d4a44e), var(--nx-gold-deep, #a8821e)); transition: width .3s ease; }
.cleanlite-ovcard-sub { font-size: 12px; color: var(--nx-muted, #9aa3b2); margin-top: 8px; }

/* ─── 25. BIWEEKLY review — match the Daily-Log gold/Lite restyle ─────────────
   Scoped under #biweeklyView so it wins over the embedded .bw-* base styles. */
#biweeklyView .bw-card {
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)) !important; border-radius: 16px !important;
  background: var(--nx-surface-1, rgba(34,46,70,.42)) !important;
}
#biweeklyView .bw-card-title { font-size: 15px; font-weight: 700; color: var(--nx-text-strong, #f6f0e2); }
#biweeklyView .bw-window-label { color: var(--nx-muted, #9aa3b2); }
#biweeklyView textarea,
#biweeklyView input[type="text"],
#biweeklyView .bw-checklist-edit-input {
  background: var(--nx-bg, #0e1320); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.2));
  border-radius: 12px; color: var(--nx-text, #ece4d4); font-size: 16px; padding: 11px 13px;
}
#biweeklyView textarea:focus,
#biweeklyView input[type="text"]:focus {
  outline: none; border-color: var(--nx-gold, #d4a44e); box-shadow: 0 0 0 2px var(--nx-gold-soft, rgba(212,164,78,.18));
}
#biweeklyView .eq-btn { border-radius: 999px; }
#biweeklyView .eq-btn-primary {
  background: linear-gradient(180deg, var(--nx-gold, #d4a44e), var(--nx-gold-deep, #a8821e)); color: var(--nx-gold-on, #101626);
  border: 0; box-shadow: 0 4px 16px rgba(0,0,0,.4), 0 0 16px var(--nx-gold-soft, rgba(212,164,78,.3));
}

/* ─── 26. CLEANING LITE — Summary sheet + 3-button CTA fit ────────────────────*/
.cleanlite-cta-wrap { flex-wrap: wrap; }
.cleanlite-cta { height: 48px; padding: 0 16px; font-size: 14px; }
.cleanlite-summary {
  white-space: pre-wrap; word-break: break-word; font-family: var(--nx-font-mono, "JetBrains Mono", monospace);
  font-size: 12px; line-height: 1.5; color: var(--nx-text, #ece4d4); background: var(--nx-bg, #0e1320);
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)); border-radius: 12px; padding: 12px;
  max-height: 48vh; overflow-y: auto; margin: 0 0 12px;
}
.cleanlite-summary-actions { display: flex; gap: 10px; }
.cleanlite-summary-actions .cleanlite-cta { position: static; flex: 1; }

/* ─── 27. DAILY LOG — weather refresh + older-logs dropdown ───────────────────*/
#dailylogView .dlog-weather-row { display: flex; gap: 8px; align-items: center; }
#dailylogView .dlog-weather-row input { flex: 1; min-width: 0; }
#dailylogView .dlog-weather-refresh {
  flex: 0 0 auto; width: 42px; height: 42px; border-radius: 12px; cursor: pointer; font-size: 18px; line-height: 1;
  background: var(--nx-gold-faint, rgba(212,164,78,.1)); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.25));
  color: var(--nx-gold, #d4a44e); display: flex; align-items: center; justify-content: center;
}
#dailylogView .dlog-weather-refresh:hover { background: var(--nx-gold-soft, rgba(212,164,78,.18)); }
#dailylogView .dlog-weather-refresh:active { transform: rotate(180deg); transition: transform .3s; }
#dailylogView .dlog-recent-select {
  flex: 0 0 auto; background: var(--nx-bg, #0e1320); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.25));
  border-radius: 10px; color: var(--nx-text, #ece4d4); padding: 7px 10px; font: inherit; font-size: 13px; max-width: 170px;
}
/* Card detail line (description / latest comment) under a ticket row */
#dailylogView .dlog-tk-detail {
  font-size: 12px; color: var(--nx-muted, #9aa3b2); line-height: 1.4; margin-top: 4px;
  border-left: 2px solid var(--nx-gold-line, rgba(212,164,78,.25)); padding-left: 8px; overflow-wrap: anywhere;
}
/* Auto-send master day-control pills (which days auto-send is allowed) */
#dailylogView .dlog-autosend-days { display: inline-flex; gap: 3px; flex-wrap: wrap; }
#dailylogView .dlog-day-pill {
  width: 27px; height: 30px; border-radius: 8px; cursor: pointer; font-size: 11px; font-weight: 700;
  background: var(--nx-bg, #0e1320); border: 1px solid var(--nx-gold-line, rgba(212,164,78,.25)); color: var(--nx-muted, #9aa3b2);
}
#dailylogView .dlog-day-pill.is-on { background: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626); border-color: var(--nx-gold, #d4a44e); }

/* ═══════════════════════════════════════════════════════════════════════
   v18.30 — UI polish for the new equipment surfaces (health-bars · parts ·
   QR tab · public-PM landing + stepper). Appended to the last-loaded sheet
   so it wins the cascade. Reversible: delete this block to revert. Pure
   accessibility/tap-comfort — no layout or color-identity changes.
   Geometry already verified clean at 375px (docOverflow 0, 0 offenders).
   ═══════════════════════════════════════════════════════════════════════ */

/* Keyboard focus rings — these controls shipped with outline:none. */
.eq-hb-toggle:focus-visible,
.eq-part-buybtn:focus-visible,
.eq-qr-actions .eq-btn:focus-visible,
.pm-step:focus-visible,
.nx-ps-health a:focus-visible {
  outline: 2px solid var(--nx-gold, #d4a44e);
  outline-offset: 2px;
  border-radius: 6px;
}

/* The Buy button is a real CTA but shipped ~25px tall — give it a comfier
   tap height (≈34px) without changing its gold-pill look. */
.eq-part-buybtn { padding-top: 7px; padding-bottom: 7px; }

/* Respect prefers-reduced-motion for the NEW beacon states + bar fills.
   The flicker/flash defines the state, so pin each to a clearly-lit frame
   rather than leaving the dot dark when motion is off. */
@media (prefers-reduced-motion: reduce) {
  .eq-row-beacon .eq-lc-dot.is-down,
  .eq-row-beacon .eq-lc-dot.is-broken {
    animation: none !important;
    background: #d24b4b !important;
    box-shadow: 0 0 0 2px rgba(28,20,8,.85), 0 0 6px rgba(210,75,75,.7) !important;
  }
  .eq-row-beacon .eq-lc-dot.is-called {
    animation: none !important;
    background: #c89a48 !important;
    box-shadow: 0 0 0 2px rgba(28,20,8,.85), 0 0 6px rgba(212,164,78,.55) !important;
  }
  .eq-hb-fill, .eq-part-repl-fill, .pm-steps-fill,
  .pm-pub-hb-fl { transition: none !important; }}

/* ═══════════════════════════════════════════════════════════════════════
   v18.31 — NEXUS navy: a cool sapphire complement to the Roman gold, plus
   the warranty shield on equipment cards. Reversible. Navy is a SECONDARY
   accent (trust/coverage/info) — gold stays the hero.
   ═══════════════════════════════════════════════════════════════════════ */
:root {
  --nx-navy:        #3f74b3;   /* primary navy accent */
  --nx-navy-bright: #6aa0e0;   /* glyphs/text on dark */
  --nx-navy-deep:   #294f7a;
  --nx-navy-soft:   rgba(63, 116, 179, 0.16);
  --nx-navy-line:   rgba(63, 116, 179, 0.42);
}
[data-theme="light"] {
  --nx-navy:        #2f5f9a;
  --nx-navy-bright: #2f5f9a;
  --nx-navy-soft:   rgba(47, 95, 154, 0.12);
  --nx-navy-line:   rgba(47, 95, 154, 0.30);
}

/* Warranty shield — outline = out of warranty (faint), filled navy = covered. */
.eq-warranty {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 0;
  color: var(--nx-faintest, #4e5666);
  cursor: help;
}
.eq-warranty.is-active { color: var(--nx-navy, #3f74b3); }

/* List row: sits just left of the PM-date pill. */
.eq-row-top .eq-warranty { flex-shrink: 0; align-self: center; margin-right: 1px; }

/* Grid card: a small chip overlaid top-left of the photo area. */
.eq-card-top { position: relative; }
.eq-card-top .eq-warranty {
  position: absolute;
  top: 8px;
  left: 8px;
  z-index: 2;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: rgba(14, 19, 32, 0.62);
  box-shadow: 0 0 0 1px var(--nx-navy-line, rgba(63, 116, 179, 0.42));
}
.eq-card-top .eq-warranty.is-active {
  background: var(--nx-navy-soft, rgba(63, 116, 179, 0.16));
  box-shadow: 0 0 0 1px var(--nx-navy, #3f74b3), 0 0 8px rgba(63, 116, 179, 0.4);
}

/* Public scan card: inline shield before the warranty date. */
.nx-ps-warranty {
  display: inline-flex;
  align-items: center;
  vertical-align: -2px;
  margin-right: 4px;
  line-height: 0;
  color: var(--nx-faintest, #6c7585);
}
.nx-ps-warranty.is-active { color: var(--nx-navy-bright, #6aa0e0); }

/* ═══════════════════════════════════════════════════════════════════════
   v18.33 — Cleaning "Periodic / Deep-clean" cards + the lightweight editor /
   assignee overlay. Reversible. Mirrors the .cleanlite-* gold aesthetic.
   ═══════════════════════════════════════════════════════════════════════ */
/* ═══ v525 — PERIODIC & DEEP CLEANS LIVE INSIDE THEIR ZONE ════════════
   Alfredo, on a screenshot of the standalone block: "periodic and deep
   cleans I believe should live inside it's section. just a hidden by a
   Chevron that expands the list."

   It used to be one block at the FOOT of the screen that re-listed every
   zone by name. So DINING ROOM appeared twice on one page — once near the
   top with its dailies, once far below with its weeklies — and the crew
   had to hold both in their head to know what a room needed. Now each zone
   card ends in a collapsed drawer. Collapsed is the default: the checklist
   is what you read every shift; the deep cleans are what you check on
   Mondays.

   The toggle is a footer on the card, not a card of its own — no border,
   no radius, no fill of its own. It reads as part of the zone. */
.cleanlite-pdrawer-wrap { border-top: 1px solid var(--nx-gold-line, rgba(212,164,78,.14)); }
.cleanlite-pdrawer-toggle {
  display: flex; align-items: center; gap: 9px; width: 100%;
  padding: 11px 14px; min-height: 44px;
  background: transparent; border: 0; border-radius: 0;
  cursor: pointer; text-align: left;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; letter-spacing: .14em; text-transform: uppercase;
  /* --nx-gold-ink, not --nx-gold: this is gold carrying WORDS, and plain
     --nx-gold measures 3.65:1 on the light-theme card. See v523. */
  color: var(--nx-gold-ink, var(--nx-gold, #d4a44e));
  transition: background .12s;
}
.cleanlite-pdrawer-toggle:active { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }
.cleanlite-pdrawer-label { flex: 1; min-width: 0; }
/* The chevron points right when shut and down when open — the icon is a
   down-chevron, so the CLOSED state is the rotated one. */
.cleanlite-pdrawer-chev {
  display: inline-flex; flex: 0 0 auto;
  transform: rotate(-90deg); transition: transform .18s ease;
}
.cleanlite-pdrawer-wrap.is-open .cleanlite-pdrawer-chev { transform: rotate(0deg); }
@media (prefers-reduced-motion: reduce) { .cleanlite-pdrawer-chev { transition: none; }}
/* Count and overdue badge sit on the CLOSED toggle, because collapsed is
   the default and this line is all most people will read of the list. */
.cleanlite-pdrawer-count {
  flex: 0 0 auto; font-size: 11px; font-weight: 700; letter-spacing: 0;
  padding: 3px 9px; border-radius: 999px;
  color: var(--nx-muted, #9aa3b2); background: var(--nx-surface-2, rgba(24,34,54,.62));
}
.cleanlite-pdrawer-badge {
  flex: 0 0 auto; font-size: 10px; font-weight: 700; letter-spacing: .04em;
  padding: 3px 9px; border-radius: 999px;
  color: #f0d2d2; background: rgba(207,89,89,.22); border: 1px solid rgba(207,89,89,.4);
}
[data-theme="light"] .cleanlite-pdrawer-badge {
  color: #7a2b2b; background: rgba(196,88,90,.14); border-color: rgba(196,88,90,.42);
}
.cleanlite-pdrawer { padding-bottom: 4px; }
/* Add-a-task is a full-width row at the foot of the open drawer rather than
   a 36px circle in a header — there is no header here any more, and a row
   is the shape the list is already made of. */
.cleanlite-padd-row {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  width: 100%; min-height: 44px; padding: 10px 14px;
  background: transparent; border: 0; border-radius: 0;
  border-top: 1px dashed var(--nx-gold-line, rgba(212,164,78,.22));
  color: var(--nx-gold-ink, var(--nx-gold, #d4a44e));
  font-family: 'Outfit', system-ui, sans-serif; font-size: 12.5px; font-weight: 500;
  cursor: pointer;
}
.cleanlite-padd-row:active { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }
/* ═══ v492 — ONE LOOK (Alfredo: "choose only 1 look please. or improve on
   it, but just 1 look.") ═══════════════════════════════════════════════════
   The cleaning screen was speaking two dialects at once. Daily rows were flat
   full-width rows with a ROUNDED-SQUARE checkbox and, when done, a gold wash
   plus a 3px left stripe — the same "has-qty" language Ordering uses. The
   periodic rows below them were rounded cards with a CIRCLE checkbox, a
   gold-on-gold frequency chip, and no done-state beyond the tick. Same list,
   same taps, two designs.

   Daily wins, because its done-state is the one that already reads across the
   app; a circle that only fills is a weaker signal than a row that lights up.
   The periodic rows now inherit that language exactly — checkbox geometry,
   gold wash, left stripe, muted frequency pill, row separators — and keep
   ONLY the extras they genuinely need (freshness bar, due line, assignee,
   edit), restyled to sit inside it rather than beside it. */
.cleanlite-ptasks { padding: 0; border-top: 1px solid var(--nx-gold-line, rgba(212,164,78,.14)); }
.cleanlite-ptask {
  display: flex; align-items: center; gap: 11px; width: 100%;
  padding: 12px 14px; border-radius: 0;
  border-bottom: 1px solid var(--nx-gold-line, rgba(212,164,78,.1));
  background: transparent; color: var(--nx-text, #ece4d4); font-size: 14px;
  transition: background .12s; position: relative;
}
.cleanlite-ptask:last-child { border-bottom: 0; }
.cleanlite-ptask:active { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }
/* The daily row's done-state, verbatim — gold wash + left accent stripe. */
.cleanlite-ptask.is-done {
  background: linear-gradient(90deg, var(--nx-gold-soft, rgba(212,164,78,.18)), transparent 80%);
  box-shadow: inset 3px 0 0 0 var(--nx-gold, #d4a44e);
}
.cleanlite-pcheck {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 8px;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent; border: 1.5px solid var(--nx-gold-line, rgba(212,164,78,.35));
  color: transparent; cursor: pointer; transition: all .14s;
}
.cleanlite-ptask.is-done .cleanlite-pcheck { background: var(--nx-gold, #d4a44e); border-color: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626); }
.cleanlite-ptask-main { flex: 1 1 auto; min-width: 0; }
.cleanlite-ptask-top { display: flex; align-items: center; gap: 8px; }
/* The title owns its line outright now — nothing sits beside it. */
.cleanlite-ptask-top .cleanlite-ptask-name { flex: 1 1 auto; }
.cleanlite-ptask-name { flex: 1; min-width: 0; font-size: 14px; color: var(--nx-text, #ece4d4); overflow-wrap: break-word; }
.cleanlite-ptask.is-done .cleanlite-ptask-name {
  color: var(--nx-muted, #9aa3b2); text-decoration: line-through;
  text-decoration-color: var(--nx-gold-line, rgba(212,164,78,.5));
}
/* Matches .cleanlite-freq on the daily rows: muted on surface, not gold on
   gold. Two gold chips in one row made the cadence compete with the tick.
   v525 — the chip moved OUT of the title line and down onto the due line.
   Sharing a row with the title left the name 163px of a 360px row at 390px
   wide, so "Vents (including behind the bar and outside the riser room)"
   wrapped to three lines with dead space beside it. Cadence and due date
   are the same thought anyway ("WEEKLY · Overdue"), and the title now gets
   the full width it needs. */
.cleanlite-pfreq {
  flex: 0 0 auto; font-family: var(--nx-font-mono, 'JetBrains Mono', ui-monospace, monospace);
  font-size: 10px; letter-spacing: .5px; text-transform: uppercase;
  color: var(--nx-faint, #6c7585); padding: 2px 7px; border-radius: 999px;
  background: var(--nx-surface-2, rgba(24,34,54,.62));
}
.cleanlite-pbar { height: 4px; border-radius: 2px; background: rgba(212,164,78,.12); overflow: hidden; margin: 6px 0 4px; }
.cleanlite-pbar-fill { height: 100%; border-radius: 2px; transition: width .3s ease; }
/* v593 — the gold ladder, not stray greens: fresh = light gold, aging =
   solid gold, stale = the house red. Same ladder Home and the emails obey. */
.cleanlite-pbar-fill.is-fresh { background: var(--nx-gold-soft, rgba(212,164,78,.45)); }
.cleanlite-pbar-fill.is-aging { background: var(--nx-gold, #d4a44e); }
.cleanlite-pbar-fill.is-stale { background: var(--nx-red, #d24b4b); }
.cleanlite-ptask-sub {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 9.5px; color: var(--nx-faint, #6c7585);
}
.cleanlite-ptask-sub.is-overdue { color: var(--nx-red-ink, #e08585); }
.cleanlite-ppeople, .cleanlite-pkebab {
  flex-shrink: 0; background: transparent; border: none; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
}
.cleanlite-ppeople { gap: -6px; padding: 2px; }
.cleanlite-pkebab { width: 26px; height: 26px; border-radius: 8px; color: var(--nx-faint, #6c7585); }
.cleanlite-pkebab:active { transform: scale(.95); }
.cleanlite-pav {
  width: 24px; height: 24px; border-radius: 50%; margin-left: -6px;
  display: inline-flex; align-items: center; justify-content: center;
  background: hsl(var(--av-hue, 35), 32%, 38%); border: 1.5px solid var(--nx-bg, #0e1320);
  color: #f5ecd6; font-family: 'Outfit', sans-serif; font-size: 10px; font-weight: 600;
}
.cleanlite-pav:first-child { margin-left: 0; }
.cleanlite-pav.is-none { background: rgba(212,164,78,.10); color: var(--nx-faint, #6c7585); border-color: var(--nx-gold-line, rgba(212,164,78,.22)); }
.cleanlite-pav.is-more { background: var(--nx-surface-2, rgba(24,34,54,.62)); color: var(--nx-gold, #d4a44e); }

/* Lightweight overlay (assignee picker + task editor) */
.cleanlite-ov {
  position: fixed; inset: 0; z-index: 10002;
  display: flex; align-items: flex-end; justify-content: center;
  background: rgba(0,0,0,.5); padding: 0;
}
.cleanlite-ov-card {
  width: 100%; max-width: 480px;
  background: var(--nx-surface-solid, #161d2e);
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.24)); border-bottom: none;
  border-radius: 22px 22px 0 0; padding: 20px 18px calc(18px + env(safe-area-inset-bottom, 0px));
  max-height: 84vh; overflow-y: auto;
}
.cleanlite-ov-title { font-family: 'Outfit', sans-serif; font-size: 18px; font-weight: 600; color: var(--nx-text-strong, #f6f0e2); }
.cleanlite-ov-sub { font-size: 12.5px; color: var(--nx-muted, #9aa3b2); margin: 2px 0 14px; }
.cleanlite-ov-list { display: flex; flex-direction: column; gap: 4px; margin-bottom: 6px; }
.cleanlite-ov-row { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: 12px; cursor: pointer; }
.cleanlite-ov-row:active { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }
.cleanlite-ov-row input { width: 18px; height: 18px; accent-color: var(--nx-gold, #d4a44e); flex-shrink: 0; }
.cleanlite-ov-rowname { font-size: 14px; color: var(--nx-text, #ece4d4); }
.cleanlite-ov-lbl { display: block; font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 9px; text-transform: uppercase; letter-spacing: .12em; color: var(--nx-gold, #d4a44e); margin: 13px 0 6px; }
.cleanlite-ov-input {
  width: 100%; box-sizing: border-box; background: var(--nx-surface-2, rgba(24,34,54,.62));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22)); border-radius: 12px;
  padding: 11px 13px; color: var(--nx-text, #ece4d4); font-family: 'Outfit', sans-serif; font-size: 14px;
}
.cleanlite-ov-input:focus { outline: none; border-color: var(--nx-gold, #d4a44e); }
.cleanlite-ov-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 18px; }
.cleanlite-ov-btn {
  padding: 10px 16px; border-radius: 999px; cursor: pointer;
  font-family: 'Outfit', sans-serif; font-size: 13px; font-weight: 600;
  background: transparent; border: 1px solid var(--nx-gold-line, rgba(212,164,78,.3)); color: var(--nx-text, #ece4d4);
}
.cleanlite-ov-btn.is-primary { background: var(--nx-gold, #d4a44e); border-color: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626); }
.cleanlite-ov-del { margin-right: auto; border-color: var(--nx-red-line, rgba(210,75,75,.38)); color: var(--nx-red-ink, #e08585); }

/* v179 — per-location weather chip in the daily-log location sections.
   Filled async by maybeAutoWeather; hidden until it has content. */
.dlog-loc-weather { font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: .02em; color: var(--nx-faint, #8a93a3); margin: 0 0 10px; }
.dlog-loc-weather::before { content: '\2601\FE0F  '; opacity: .8; }
.dlog-loc-weather:empty { display: none; }

/* ─── Cleaning Lite v18.37 additions: week strip, overdue chip, shift seg ── */
/* v260: .cleanlite-week → .cleanlite-weekstrip (the old name collided with a
   pill-button style above and dressed the strip as a capsule). */
.cleanlite-weekstrip {
  display: flex; align-items: flex-end; gap: 8px;
  padding: 8px 12px 5px; margin: 8px 0 2px;
  background: var(--nx-surface-2, rgba(255,255,255,.03));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.16));
  border-radius: var(--nx-radius-tight, 14px);
}
#cleanView .cleanlite-wk-day { display: flex; flex-direction: column; align-items: center; gap: 3px; flex: 1; }
/* v490 — the bar is gone (Alfredo: "remove the bar."). .cleanlite-wk-bar and
   .cleanlite-wk-fill are deleted rather than left unused: dead rules outlive
   the memory of why they were dead, and the next person restores the bar by
   accident. The colour that lived on the fill now lives on the percent. */
#cleanView .cleanlite-wk-lbl { font-size: 10px; color: var(--nx-text-dim, #b6ad9a); font-family: 'JetBrains Mono', monospace; }
#cleanView .cleanlite-wk-streak { flex: 0 0 auto; align-self: center; font-size: 13px; font-weight: 700; color: var(--nx-gold, #d4a44e); padding-left: 6px; }
/* v260 — the overdue chip screamed red; NEXUS speaks urgency in gold.
   Same tap-through, calmer voice (matches the email ladder + home cards). */
#cleanView .cleanlite-overdue {
  display: block; width: 100%; text-align: left;
  margin: 8px 0 2px; padding: 10px 12px; border-radius: 999px;
  background: var(--nx-gold-faint, rgba(212,164,78,.10));
  border: 1px solid var(--nx-gold, #d4a44e);
  color: var(--nx-gold-ink, #d4a44e); font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
  letter-spacing: .02em;
}
/* v260 — the CTA dock wrapped its five pills over the zone list; per-mode
   it now holds at most four, wraps safely, and backs them fully. */
.cleanlite-cta-wrap { flex-wrap: wrap; background: transparent; }   /* v366 — scrim removed (see base rule) */
#cleanView .cleanlite-shift { display: inline-flex; gap: 0; border: 1px solid var(--nx-gold-line, rgba(212,164,78,.25)); border-radius: var(--nx-radius-pill, 999px); overflow: hidden; }
#cleanView .cleanlite-shift-btn {
  padding: 6px 16px; min-height: var(--nx-touch-min, 44px); font: inherit; font-size: 12.5px; font-weight: 600;
  background: transparent; border: 0; color: var(--nx-text-dim, #b6ad9a); cursor: pointer;
}
#cleanView .cleanlite-shift-btn.is-active { background: var(--nx-gold-faint, rgba(212,164,78,.16)); color: var(--nx-gold-ink, #d4a44e); }
#cleanView .cleanlite-task-by {
  margin-left: auto; flex: 0 0 auto; font-size: 11.5px; padding: 2px 7px; border-radius: 7px;
  background: var(--nx-gold-faint, rgba(212,164,78,.12)); color: var(--nx-gold-ink, #d4a44e); font-weight: 600;
}
#cleanView .cleanlite-task-cam { flex: 0 0 auto; font-size: 11px; opacity: .75; margin-left: 6px; }

/* ═══ Cleaning Lite v18.38 — multi-person zone crews + autofill ═══ */
#cleanView .cleanlite-person-btn { display: inline-flex; align-items: center; }
#cleanView .cleanlite-person-btn .cleanlite-av { box-shadow: 0 0 0 2px var(--nx-bg, #101626); }
#cleanView .cleanlite-person-btn .cleanlite-av + .cleanlite-av { margin-left: -16px; }

/* ═══ Daily notes revamp (v209) — NEXUS urgency ladder + glance + arrows ═══
   Alfredo's rule: no reds, no greens anywhere. Severity is FILL WEIGHT in
   the brand palette, matching the styled email's ladder exactly:
     down/urgent → solid ink pill (renders cream-on-dark in dark theme,
                    ink-on-light in light theme via --nx-text-strong/bg)
     overdue     → solid gold
     due/attn    → hollow gold
     info        → sand */
#dailylogView .dlog-eqstatus-pill-down {
  background: var(--nx-text-strong, #f6f0e2); color: var(--nx-bg, #0e1320);
}
#dailylogView .dlog-eqstatus-pill-service {
  background: transparent; border: 1.5px solid var(--nx-gold, #d4a44e);
  color: var(--nx-gold, #d4a44e); padding: 2px 7px;
}
#dailylogView .bw-pri-urgent {
  background: var(--nx-text-strong, #f6f0e2); color: var(--nx-bg, #0e1320);
  border: 1px solid var(--nx-text-strong, #f6f0e2);
}
#dailylogView .dlog-act-pill-status.to-down,
#dailylogView .dlog-act-pill-status.to-broken,
#dailylogView .dlog-act-pill-issue { background: var(--nx-text-strong, #f6f0e2); }
#dailylogView .dlog-act-pill-status.to-operational,
#dailylogView .dlog-act-pill-create,
#dailylogView .dlog-act-pill-paid { background: var(--nx-gold, #d4a44e); }
#dailylogView .dlog-tk-lane-working { color: var(--nx-gold, #d4a44e); }

/* Section headers speak the email's language: gold eyebrow over a rule. */
#dailylogView .dlog-section-title {
  text-transform: uppercase; letter-spacing: .09em;
  font-size: 12.5px; color: var(--nx-gold, #d4a44e);
}
#dailylogView details[open] > .dlog-section-header {
  border-bottom: 1px solid var(--nx-gold-line, rgba(212,164,78,.18));
}
/* Severity edge — gold tiers only. Hot = something is down/urgent inside;
   warm = open work inside. */
#dailylogView .dlog-section.sev-hot  { border-left: 3px solid var(--nx-gold, #d4a44e); }
#dailylogView .dlog-section.sev-warm { border-left: 3px solid var(--nx-gold-line-2, rgba(212,164,78,.45)); }

/* At-a-glance strip — the day's headline, chips scroll to their section. */
#dailylogView .dlog-glance { display: flex; flex-wrap: wrap; gap: 8px; margin: 2px 0 14px; }
#dailylogView .dlog-glance-chip {
  border-radius: 999px; padding: 7px 14px;
  font-family: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22));
  background: var(--nx-gold-faint, rgba(212,164,78,.10)); color: var(--nx-muted, #9aa3b2);
}
#dailylogView .dlog-glance-chip.g-down {
  background: var(--nx-text-strong, #f6f0e2); color: var(--nx-bg, #0e1320);
  border-color: var(--nx-text-strong, #f6f0e2);
}
#dailylogView .dlog-glance-chip.g-od {
  background: var(--nx-gold, #d4a44e); color: var(--nx-gold-on, #101626);
  border-color: var(--nx-gold, #d4a44e);
}

/* Row arrows — the minimalist › door into the real thing. */
#dailylogView .dlog-row-go {
  flex-shrink: 0; margin-left: auto; width: 30px; height: 30px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 999px; border: 1px solid var(--nx-gold-line, rgba(212,164,78,.25));
  background: transparent; color: var(--nx-gold, #d4a44e);
  font-size: 17px; font-weight: 700; line-height: 1; cursor: pointer; padding: 0;
}
#dailylogView .dlog-row-go:hover { background: var(--nx-gold-faint, rgba(212,164,78,.12)); }

/* Live work-order line on Equipment Status rows — the current truth,
   distinct from the manager's sticky status_note above it. */
#dailylogView .dlog-eqstatus-wo {
  display: block; margin-top: 3px;
  font-size: 11.5px; line-height: 1.45;
  color: var(--nx-gold, #d4a44e);
  font-family: 'JetBrains Mono', monospace;
}
#dailylogView .dlog-eqstatus-wo.is-none { color: var(--nx-faint, #857f75); }
#dailylogView .dlog-eqstatus-issue {
  margin-top: 6px; padding: 9px 11px;
  background: var(--nx-surface-2, rgba(255,255,255,.03));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.16));
  border-radius: 8px;
}
#dailylogView .dlog-eqstatus-issue-title {
  font-size: 13px; font-weight: 600; color: var(--nx-text-strong, #f0e9dd); line-height: 1.35;
}
#dailylogView .dlog-eqstatus-issue-desc {
  margin-top: 3px; font-size: 12px; line-height: 1.5; color: var(--nx-muted, #9aa3b2);
}

/* "NEW TODAY" chip on Board Tickets rows — hollow gold, ladder-consistent. */
#dailylogView .dlog-tk-new {
  display: inline-block; padding: 0 6px;
  border: 1px solid var(--nx-gold, #d4a44e); border-radius: 999px;
  color: var(--nx-gold, #d4a44e);
  font-size: 9.5px; font-weight: 700; letter-spacing: .06em;
}

/* "moved today: From → To" chip on Board Tickets rows. */
#dailylogView .dlog-tk-moved {
  display: inline-block; padding: 0 6px;
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.35)); border-radius: 999px;
  color: var(--nx-gold, #d4a44e);
  font-size: 9.5px; font-weight: 700; letter-spacing: .04em;
  text-transform: none;
}

/* ─── v269 — Maintenance due ON the daily notes screen ─────────────────
   The same PM/inspection items the daily email reports, with the 📝 note
   visible in gold. Read-only rows; › jumps to the unit. */
#dailylogView .dlog-maint-kind {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10px; font-weight: 500; color: var(--nx-muted, #9aa3b2);
  letter-spacing: .04em;
}
#dailylogView .dlog-maint-note {
  margin-top: 4px; padding: 4px 8px;
  border-left: 2px solid var(--nx-gold, #d4a44e);
  border-radius: 0 7px 7px 0;
  background: var(--nx-gold-faint, rgba(212,164,78,.08));
  font-size: 12px; line-height: 1.45; color: var(--nx-gold, #d4a44e);
  overflow-wrap: anywhere;
}

/* "↻ weekly" repeat chip — same quiet outline as the Board's repeat face chip. */
#dailylogView .dlog-tk-repeat {
  display: inline-block; padding: 0 6px;
  border: 1px dashed var(--nx-gold-line, rgba(212,164,78,.35)); border-radius: 999px;
  color: var(--nx-muted, #9aa3b2);
  font-size: 9.5px; font-weight: 600; letter-spacing: .04em;
  text-transform: none;
}

/* "ON ORDER" chip on Board Tickets rows — a right-side notification, filled
   gold so it reads at a glance next to the › arrow. Mirrors the Board face. */
#dailylogView .dlog-tk-onorder {
  flex-shrink: 0; margin-left: auto; align-self: center; white-space: nowrap;
  display: inline-block; padding: 3px 9px; border-radius: 999px;
  background: var(--nx-gold-faint, rgba(212,164,78,.14));
  border: 1px solid var(--nx-gold, #d4a44e); color: var(--nx-gold, #d4a44e);
  font-size: 9.5px; font-weight: 700; letter-spacing: .06em;
}
/* v424 — parts delivered chip (green) supersedes the gold ordered chip */
#dailylogView .dlog-tk-onorder.is-delivered {
  background: rgba(74, 179, 108, .14);
  border-color: #4ab36c; color: #6fd18d;
}
/* keep the › arrow adjacent to the chip instead of also grabbing the auto margin */
#dailylogView .dlog-tk-onorder + .dlog-row-go { margin-left: 8px; }

/* v266 — Board-ticket rows: explicit, crush-proof layout. Inside the new
   per-location tickets block a long title collapsed to one character per
   line (the PARTS ORDERED chip + arrow starved the flex column). The title
   column now keeps a real minimum and right-side chips wrap below on
   narrow rows instead of squeezing the text. */
#dailylogView .dlog-tk-row {
  display: flex; align-items: flex-start; gap: 9px; flex-wrap: wrap;
  padding: 10px 12px; background: var(--nx-surface-1, rgba(34,46,70,.35));
  border: 1px solid rgba(255,255,255,.05); margin-bottom: 8px;
}
#dailylogView .dlog-tk-main { flex: 1 1 200px; min-width: 0; }
#dailylogView .dlog-tk-title { overflow-wrap: anywhere; }

/* ─── v267 — PM status notes: the human word on late/booked PMs ───────── */
.nxrm-pm-note {
  margin-top: 5px; font-size: 12px; line-height: 1.45;
  color: var(--nx-gold, #d4a44e);
  background: var(--nx-gold-faint, rgba(212,164,78,.08));
  border-left: 2px solid var(--nx-gold, #d4a44e);
  border-radius: 0 8px 8px 0; padding: 5px 9px;
  overflow-wrap: anywhere;
}
.nxrm-pm-note-by { color: var(--nx-muted, #9aa3b2); font-size: 11px; }
/* v269 — the note itself is the editor: tap it (✎ hints at that). */
.nxrm-pm-note[data-note] { cursor: pointer; }
.nxrm-pm-note-edit { float: right; margin-left: 6px; opacity: .55; font-size: 11px; }
.nxrm-pm-addnote {
  display: inline-block; margin-top: 5px; padding: 2px 0;
  background: none; border: none; cursor: pointer;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 10.5px; letter-spacing: .05em;
  color: var(--nx-gold, #d4a44e); opacity: .7;
}
.nxrm-pm-addnote:hover { opacity: 1; }

/* v269 — PM screen simplification: the KPI tiles ARE the filter */
.nxrm-tile.is-active {
  border-color: var(--nx-gold, #d4a44e);
  box-shadow: inset 0 0 0 1px var(--nx-gold, #d4a44e);
}

/* v269 — schedule edit sheet (replaces the numeric prompt menu) */
.nxrm-sheet-form { display: flex; flex-direction: column; gap: 12px; margin-top: 14px; }
.nxrm-sheet-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.nxrm-sheet-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.nxrm-sheet-field > span {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--nx-muted, #9aa3b2);
}
.nxrm-sheet-field > input {
  width: 100%; min-width: 0; background: rgba(0,0,0,0.3);
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.24));
  border-radius: 12px; padding: 10px 12px;
  font-family: 'Outfit', system-ui, sans-serif;
  font-size: 15px; color: var(--nx-text, #ede9e0);
}
.nxrm-sheet-field > input:focus { border-color: var(--nx-gold, #d4a44e); outline: none; }
.nxrm-sheet-save { width: 100%; padding: 12px 0; font-size: 14px; }
.nxrm-sheet-row { display: flex; gap: 8px; }
.nxrm-sheet-minor {
  flex: 1; padding: 9px 0; border-radius: 12px;
  background: transparent; border: 1px solid var(--nx-gold-line, rgba(212,164,78,.24));
  color: var(--nx-muted, #9aa3b2); font-size: 12.5px; cursor: pointer;
}
.nxrm-sheet-minor:hover { border-color: var(--nx-gold, #d4a44e); color: var(--nx-text, #ede9e0); }
.nxrm-sheet-minor.is-danger { color: var(--nx-red, #d24b4b); border-color: rgba(210,75,75,.35); }
.nxrm-sheet-minor.is-danger:hover { border-color: var(--nx-red, #d24b4b); }

/* v381 — Upcoming PMs on the daily notes (heads-up, muted vs "due") */
.bw-pri-pill.dlog-pri-upcoming{background:rgba(255,255,255,.06);color:var(--nx-faint,#8a8a90);border:1px solid rgba(255,255,255,.12)}
.dlog-maint-row.is-upcoming{opacity:.82}
.dlog-subsection-title.dlog-sub-upcoming{color:var(--nx-faint,#8a8a90);font-weight:600;margin-top:12px}

/* ═══ v404 — DAILY LOG polish (Alfredo: "improve the UI over at daily log,
   it's a mess") ═══════════════════════════════════════════════════════════
   The log was mostly sound; two things read as broken/ragged:
   (1) the Weather "Refresh" button was styled as a 42px icon square but held
       the WORD "Refresh", which overflowed off the card's right edge. JS now
       renders a ⟳ glyph; this just makes the square read as a proper control.
   (2) the action bar right-justified-wrapped into a ragged 2 rows with one
       orphaned button. Restructure: auto-send owns its own row, the
       secondaries form an even 2-up grid, the primary spans full width. */
#dailylogView .dlog-weather-refresh {
  font-size: 19px;            /* the glyph, optically centered in the 42px box */
  font-weight: 400;
  transition: background .15s, border-color .15s, transform .3s;
}
#dailylogView .dlog-weather-refresh:hover { border-color: var(--nx-gold, #d4a44e); }

/* Action bar — tidy footer grid instead of a ragged right-justified wrap. */
#dailylogView .dlog-actions {
  display: flex; flex-wrap: wrap; gap: 9px;
  justify-content: stretch; align-items: center;
}
#dailylogView .dlog-autosend-wrap {
  flex: 1 1 100%;             /* auto-send controls get their own row */
  margin-right: 0;
  flex-wrap: wrap;
}
#dailylogView .dlog-actions .eq-btn {
  flex: 1 1 calc(50% - 5px);  /* even 2-up grid of secondaries */
  min-width: 0;
  white-space: nowrap;
}
#dailylogView .dlog-actions .eq-btn-primary {
  flex-basis: 100%;           /* the commit action spans the full width */
  order: 99;                  /* and always sits last, under the grid */
}

/* ═══ v405 — bottom nav matches the masthead color (Alfredo: "match the
   bottom masthead and top masthead color wise") ══════════════════════════
   The masthead (.nav) and bottom nav had drifted apart: the masthead is a
   translucent warm-linen/deep-navy pane (nexus-rm 1636/1643), the bottom nav
   was an opaque #fbf8f1 / --nx-bottom-nav-bg with a heavier blur. Mirror the
   masthead's exact background + backdrop so top and bottom read as one frame.
   The upward shadow is the masthead's downward one, reflected. The bottom
   nav keeps its own fading-gold ::before hairline (the masthead's ::after). */
/* v545 — SOLID, not glass (Alfredo: "remove the glass look on the bottom").
   These panes were translucent to pair with a backdrop blur; v537 removed
   every blur, which left the bottom nav see-through — board cards and pills
   read straight through it. Full-opacity now. */
[data-theme="dark"] .bottom-nav {
  background: rgb(14, 19, 32) !important;
  box-shadow: 0 -6px 22px rgba(4, 8, 16, 0.45) !important;
}
[data-theme="light"] .bottom-nav {
  background: rgb(243, 236, 221) !important;
  box-shadow: 0 -6px 18px rgba(120, 100, 70, 0.12) !important;
}

/* ═══════════════════════════════════════════════════════════════════════════
   SHELL + HOME + R&M POLISH — v451 (3-agent UX audit, 2026-07-30)
   Append-only layer, loaded last so it wins source-order. Token-anchored to
   nx-system.css. Sections mirror the audit: touch honesty, mechanical press,
   radius normalization, one tile language, rhythm, theme parity.
   Reversible: delete this block to restore the previous look.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 1 · Touch honesty — hover must not stick on phones (B1) ── */
@media (hover: none) {
  .home-rm-tile:hover, .home-rm-wo-item:hover, .home-rm-decision-row:hover,
  .nxrm-tile:hover, .nxrm-card:hover, .nxrm-pm-card:hover, .home-kpi:hover,
  .home-quick-btn:hover, .home-item:hover, .home-feed-calm:hover,
  .home-ops-pill:hover, .nx-prompt:hover {
    transform: none;
    border-color: var(--nx-gold-line);
  }}

/* ── 2 · Mechanical press — the house physics, replacing scale-bounce (B4).
   !important needed to beat nx-system.css:2210's own !important. ── */
.home-kpi:active, .home-quick-btn:active, .home-ops-pill:active,
.home-rm-tile:active, .home-rm-decision-row:active, .home-rm-wo-item:active,
.nxrm-tile:active, .nxrm-card:active, .home-item:active,
.home-feed-calm:active, .util-btn:active, .bnav-btn:active {
  transform: translateY(1px) !important;
}

/* ── 3 · Bottom nav — one active treatment, geometry inside the 65px bar (B5).
   Keep the icon-pill (newest design); retire the stacked full-height lozenge
   and the margins that made children overflow the bar. ── */
.bnav-btn { margin: 0 !important; border-radius: 0; }
.bnav-btn.active:not(.bnav-btn-home) { background: transparent; }

/* ── 4 · iOS zoom guard on R&M search/sort (B8) ── */
.nxrm-search, .nxrm-sort { font-size: 16px; }

/* ── 5 · Radius normalization — 8 ad-hoc radii → house scale (B9) ── */
.home-ops-pill, .home-rm-wo-item, .home-vendor-row, .home-rm-wins,
.nxrm-tile, .home-rm-decisions, .nxrm-card {
  border-radius: var(--nx-radius-tight);
}
.home-rm-wo-viewall, .home-cal-nextup { border-radius: var(--nx-radius-tighter); }
.home-kpi, .home-rm-tile { border-radius: var(--nx-radius-tight) !important; }

/* ── 6 · One tile language on Home — ops pills join the family (B10) ── */
.home-ops-pill {
  background: var(--nx-gold-faint);
  border: 1px solid var(--nx-gold-line);
  box-shadow: var(--nx-shadow-soft), inset 0 1px 0 var(--nx-highlight-faint);
}

/* ── 7 · Touch targets (B11) ── */
.home-vendor-row-call { width: var(--nx-touch-min); height: var(--nx-touch-min); }
.nx-tr-picker-close, .rx-overlay-close {
  min-width: var(--nx-touch-min); min-height: var(--nx-touch-min);
}

/* ── 8 · Vertical rhythm — proximity that means something (B14) ── */
#homeView .nx-section { margin-top: var(--nx-space-7); }
.home-glance { margin-bottom: var(--nx-space-3); }
.home-rm-tiles { margin: 0 0 var(--nx-space-4); }
.home-ops { margin: var(--nx-space-4) 0; gap: var(--nx-space-2); }

/* ── 9 · Theme parity — dark-alpha wells → real surfaces (B7/B13) ── */
.nxrm-search, .nxrm-sort, .nxrm-chip.is-secondary, .nxrm-stale-card {
  background: var(--nx-surface-2);
}
.nxrm-card-badge { background: var(--nx-surface-2); }
.home-rm-pace-bar { background: var(--nx-highlight-mid); }

/* ── 10 · Undefined-token fallbacks that rendered invisible (agent 2 C3) ── */
#dailylogView .dlog-order-cost { color: var(--nx-muted); }
.dlog-preview-panel, .dlog-preview-head, .dlog-preview-row {
  border-color: var(--nx-gold-line);
}

/* ── 11 · PM card — the primary action sized like one (B10-pm) ── */
.nxrm-pm-done {
  width: auto; min-width: 70px;
  min-height: var(--nx-touch-min);
  padding: 8px 12px; font-size: 11px;
  border-radius: var(--nx-radius-tighter);
}

/* ── 12 · The Ask bar becomes the Home hero (B3 — owner-eye item).
   The one thing to tap first now carries the house primary treatment. ── */
.home-ask {
  background: linear-gradient(180deg, var(--nx-gold) 0%, var(--nx-gold-deep) 100%);
  border: none;
  color: var(--nx-gold-on);
  box-shadow: var(--nx-shadow-fab), 0 4px 16px var(--nx-gold-aura);
}
/* v571 — dark theme only. This rule used to hit BOTH themes at 0.65
   opacity, painting near-black ink onto light theme's dark-brown pill
   (the unreadable text in Alfredo's screenshot). Light's cream ink lives
   in nexus.css's measured [data-theme="light"] block. */
:root:not([data-theme="light"]) .home-ask-hint { color: var(--nx-gold-on); }

/* ── 13 · Focus visibility on the R&M / Home interactive set (B7-focus) ── */
.nxrm-chip:focus-visible, .nxrm-tile:focus-visible, .nxrm-btn-pill:focus-visible,
.home-kpi:focus-visible, .home-ops-pill:focus-visible, .home-rm-tile:focus-visible,
.bnav-btn:focus-visible {
  outline: 2px solid var(--nx-gold);
  outline-offset: 2px;
}

/* ── 14 · Reduced motion umbrella for this layer ── */
@media (prefers-reduced-motion: reduce) {
  .home-kpi:active, .home-quick-btn:active, .home-ops-pill:active,
  .home-rm-tile:active, .home-rm-decision-row:active, .home-rm-wo-item:active,
  .nxrm-tile:active, .nxrm-card:active, .bnav-btn:active {
    transform: none !important;
  }}

/* ═══ WORK ORDER PIPELINE in the daily log — v455. The day's repair story,
   dressed like the pipeline itself: gold step-dots (glowing where a step was
   hit today), green for repaired, chips for the day's movements. ═══ */
#dailylogView .dlog-pipe-section > .dlog-section-header .dlog-section-title {
  color: var(--nx-gold);
  letter-spacing: 0.08em;
}
#dailylogView .dlog-pipe-section {
  border-left: 2px solid var(--nx-gold-line-2);
}
#dailylogView .dlog-pipe-row {
  padding: 12px 12px 11px;
  margin-bottom: 10px;
  background: var(--nx-surface-1);
  border: 1px solid var(--nx-gold-line);
  border-radius: var(--nx-radius-tight);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
#dailylogView .dlog-pipe-row:active { transform: translateY(1px); }
#dailylogView .dlog-pipe-row:focus-visible { outline: 2px solid var(--nx-gold); outline-offset: 2px; }
#dailylogView .dlog-pipe-row.is-done { border-color: var(--nx-green-line); }
#dailylogView .dlog-pipe-top {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 10px; flex-wrap: wrap; margin-bottom: 8px;
}
#dailylogView .dlog-pipe-title {
  font-weight: 600; font-size: 14px; color: var(--nx-text-strong);
}
#dailylogView .dlog-pipe-eq {
  font-family: var(--nx-font-mono, 'JetBrains Mono', monospace);
  font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--nx-muted);
}
#dailylogView .dlog-pipe-strip { display: flex; align-items: center; }
#dailylogView .dlog-pipe-seg { display: flex; align-items: center; }
#dailylogView .dlog-pipe-dot {
  width: 11px; height: 11px; border-radius: 50%;
  border: 1.5px solid var(--nx-gold-line-2);
  background: transparent; flex: none;
}
#dailylogView .dlog-pipe-dot.is-reached {
  background: var(--nx-gold);
  border-color: var(--nx-gold);
}
#dailylogView .dlog-pipe-dot.is-today {
  box-shadow: 0 0 0 3px var(--nx-gold-glow);
}
#dailylogView .dlog-pipe-dot.is-done {
  background: var(--nx-green);
  border-color: var(--nx-green);
}
#dailylogView .dlog-pipe-bar {
  width: 16px; height: 2px; background: var(--nx-gold-line);
  margin: 0 2px; flex: none;
}
#dailylogView .dlog-pipe-bar.is-reached { background: var(--nx-gold); }
#dailylogView .dlog-pipe-who {
  margin-left: auto; font-size: 11px; color: var(--nx-muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 40%;
}
#dailylogView .dlog-pipe-chips {
  display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px;
}
#dailylogView .dlog-pipe-chip {
  font-family: var(--nx-font-mono, 'JetBrains Mono', monospace);
  font-size: 10px; letter-spacing: 0.04em;
  padding: 3px 9px; border-radius: var(--nx-radius-pill);
  background: var(--nx-gold-faint); border: 1px solid var(--nx-gold-line);
  color: var(--nx-gold);
}
#dailylogView .dlog-pipe-chip.is-done {
  background: var(--nx-green-soft); border-color: var(--nx-green-line); color: var(--nx-green);
}
#dailylogView .dlog-pipe-chip.is-visit {
  border-style: dashed;
}
#dailylogView .dlog-pipe-chip.is-visit.is-today {
  background: var(--nx-gold); color: var(--nx-gold-on); border-color: var(--nx-gold);
  font-weight: 700;
}
@media (prefers-reduced-motion: reduce) {
  #dailylogView .dlog-pipe-row:active { transform: none; }}

/* v482 — "why is this row here?" line on maintenance rows.
   v481 made PMs speak once, go quiet, then return the day before. That is
   calmer but less obvious, so every row states its own reason and — for the
   single heads-up — when it will be back. Quiet by default; the overdue
   variant borrows the red so a repeating line still reads as a repeating
   line and not as noise. */
#dailylogView .dlog-maint-why {
  margin-top: 3px;
  font-size: 11px;
  line-height: 1.4;
  letter-spacing: .01em;
  color: var(--nx-muted, #9aa3b2);
  overflow-wrap: anywhere;
}
#dailylogView .dlog-maint-why.is-overdue {
  color: var(--nx-red, #d24b4b);
  font-weight: 600;
}

/* v489 — week strip: percent + date, and past days are buttons.
   Alfredo: "make these graph button capable to edit the past. and place a
   small date on the days. make the graphs a percent."
   The strip was seven unlabelled bars — you could see a bad day and had no
   way to learn which day it was, how bad, or to go fix it. */
#cleanView .cleanlite-wk-day.is-tappable {
  font: inherit; color: inherit; background: none; border: 0; padding: 0;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
  border-radius: 10px; transition: background .15s;
}
#cleanView .cleanlite-wk-day.is-tappable:active { transform: scale(.97); }
#cleanView .cleanlite-wk-day.is-tappable:hover { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }

/* The number IS the graph now — the bar is corroboration, not the only
   signal. Tabular figures so the seven columns don't jitter. */
#cleanView .cleanlite-wk-pct {
  display: block; font-family: var(--nx-font-mono, 'JetBrains Mono', monospace);
  font-size: 9.5px; line-height: 1.2; font-variant-numeric: tabular-nums;
  color: var(--nx-muted, #9aa3b2); margin-bottom: 3px;
}
#cleanView .cleanlite-wk-pct.is-future { opacity: .35; }

/* Day-of-month under the weekday letter: "which Monday" was unanswerable. */
#cleanView .cleanlite-wk-dom {
  display: block; font-family: var(--nx-font-mono, 'JetBrains Mono', monospace);
  font-size: 10px; line-height: 1.2; font-variant-numeric: tabular-nums;
  color: var(--nx-faint, #7c89a0); opacity: .8;
}
#cleanView .cleanlite-wk-day.is-today .cleanlite-wk-pct,
#cleanView .cleanlite-wk-day.is-today .cleanlite-wk-dom { color: var(--nx-gold, #d4a44e); opacity: 1; }

/* v490 — the percent carries the colour now that the bar is gone. Same three
   bands the fill used, so a glance still reads red / gold / green without a
   graph to draw. Bigger than before: with the bar removed it is the only
   thing in the cell doing real work. */
#cleanView .cleanlite-wk-pct { font-size: 12.5px; font-weight: 600; margin-bottom: 1px; }
#cleanView .cleanlite-wk-pct.is-good { color: var(--nx-gold-ink, #d4a44e); }   /* v593 — gold ladder, green retired */
#cleanView .cleanlite-wk-pct.is-mid  { color: var(--nx-text-dim, #b6ad9a); }
#cleanView .cleanlite-wk-pct.is-low  { color: var(--nx-red-ink, #e08585); }
#cleanView .cleanlite-wk-pct.is-future { color: var(--nx-faint, #7c89a0); opacity: .35; font-weight: 400; }
/* The strip lost ~34px of bar height; give the row a little air back so the
   three lines don't crowd the pills above and below it. */
#cleanView .cleanlite-wk-day { padding: 6px 0; }

/* v492 — the periodic-only extras, restyled to live INSIDE the shared row
   rather than beside it. These carry information the daily rows do not have
   (a long cadence, a due date, who owns it) and are worth keeping — they just
   have to stop looking like a different component. */
#cleanView .cleanlite-ptask-sub {
  font-size: 11.5px; line-height: 1.35; color: var(--nx-muted, #9aa3b2); margin-top: 2px;
}
#cleanView .cleanlite-ptask-sub.is-overdue { color: var(--nx-red-ink, #e08585); font-weight: 600; }
/* Thinner and quieter: at 4px against a flat row it was competing with the
   gold done-stripe for the same glance. */
#cleanView .cleanlite-pbar { height: 3px; margin: 5px 0 3px; background: var(--nx-gold-line, rgba(212,164,78,.12)); }
/* The assignee + edit controls now read as the daily rows' right-hand chips
   do: quiet until touched, never competing with the checkbox. */
#cleanView .cleanlite-ppeople,
#cleanView .cleanlite-pkebab {
  flex: 0 0 auto; background: transparent; border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22));
  color: var(--nx-muted, #9aa3b2); border-radius: 999px; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 34px; height: 34px; transition: color .15s, border-color .15s;
}
#cleanView .cleanlite-ppeople:hover,
#cleanView .cleanlite-pkebab:hover { color: var(--nx-gold, #d4a44e); border-color: var(--nx-gold, #d4a44e); }

/* v593 — the language toggle and Crew/Verify segment moved into the ⋮ menu. */
/* Spanish runs ~20% longer than English; the daily/periodic rows wrap rather
   than truncate (v492 gave both `overflow-wrap: anywhere`), so the only thing
   that needs help is the cadence pill, which must never wrap to two lines
   beside a task name. */
#cleanView .cleanlite-freq,
#cleanView .cleanlite-pfreq { white-space: nowrap; }

/* v494 — Spanish is ~20% longer than English, and the periodic row carries a
   cadence pill AND two 34px controls, so at 390px the task name was down to
   ~95px and words were snapping mid-syllable ("convenci / onales"). Let the
   cadence pill drop to its own line instead of starving the name: the name
   keeps at least 60% of the row, the pill wraps under it when it must. On a
   wide screen nothing moves, so the daily and periodic rows still read as one
   thing. */
/* v648 — the controls ride the name row now, so the top row never wraps:
   the name wraps INSIDE its own span and the actions hold the corner. */
#cleanView .cleanlite-ptask-top { flex-wrap: nowrap; }
#cleanView .cleanlite-ptask-name { flex: 1 1 auto; min-width: 0; }
/* The two right-hand controls are the other half of the squeeze — they do not
   need to be as wide as they are tall on a phone. */
@media (max-width: 430px) {
  #cleanView .cleanlite-ppeople,
  #cleanView .cleanlite-pkebab { min-width: 30px; height: 30px; }
  #cleanView .cleanlite-ptask { gap: 8px; padding-left: 11px; padding-right: 11px; }}

/* v496 — ONE FLOATING CONTROL, NOT THREE (Alfredo, on a screenshot of the bar
   sitting on top of a task row: "the 3 button hide them behind a 3 dot
   sitting"). Schedule / Summary / + Section were three full-size pills parked
   across the bottom of the list; at a 165-task location they covered real
   work. They are occasional actions and the checklist is the constant one, so
   they now live behind a single kebab.
   Right-aligned rather than centred: a control the thumb reaches for should
   not sit over the middle of the last row it obscures. */
#cleanView .cleanlite-cta-wrap { justify-content: flex-end; }
/* v499 — the button also carries .cleanlite-cta, which already supplies the
   gold gradient, the shadow and the 50px height. This rule only makes it
   round and square-sided. If this stylesheet is ever a version behind the JS
   again, the button degrades to a gold pill instead of a naked <button>. */
#cleanView .cleanlite-cta-more {
  width: 50px; height: 50px; padding: 0; border-radius: 50%;
  font-size: 22px; line-height: 1; font-weight: 700;
  flex: 0 0 auto;
}
#cleanView .cleanlite-cta-more:active { transform: scale(.94); }

/* ═══ v505 — WEEK PAGING ══════════════════════════════════════════════════
   Alfredo: "give me a button to see past weeks on the calendar. like a left
   and right arrow."

   The arrows live INSIDE the strip, flanking the seven days, so the row reads
   as one control instead of a widget with a toolbar bolted on. They are
   `flex: 0 0 auto` against the days' `flex: 1`, which is what keeps the seven
   columns evenly divided regardless of how wide the arrows render — the days
   were already sharing the row with the streak flame on the same terms.

   Disabled is dimmed, not hidden. A control that disappears at the end of its
   range makes the whole row shift under your thumb, and on a phone the day
   you aimed at moves as you tap it. */
#cleanView .cleanlite-wk-nav {
  flex: 0 0 auto; align-self: center;
  width: 30px; min-height: 40px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--nx-font-mono, 'JetBrains Mono', monospace);
  font-size: 19px; line-height: 1;
  color: var(--nx-gold, #d4a44e);
  background: none; border: 0; border-radius: 9px;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
  transition: background .15s, opacity .15s;
}
#cleanView .cleanlite-wk-nav:hover:not(:disabled) { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }
#cleanView .cleanlite-wk-nav:active:not(:disabled) { transform: scale(.92); }
#cleanView .cleanlite-wk-nav:disabled {
  opacity: .26; cursor: default; color: var(--nx-muted, #9aa3b2);
}

/* Off the live week, the strip declares itself. Seven day-numbers with no
   month is precisely the label that gets read as "today" by someone glancing
   at a phone mid-shift, so the border warms and a row underneath names the
   range and offers the way back in one tap. */
#cleanView .cleanlite-weekstrip.is-past {
  border-color: var(--nx-gold, #d4a44e);
  background: var(--nx-gold-faint, rgba(212,164,78,.07));
}
#cleanView .cleanlite-wk-back {
  display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 10px;
  min-height: 40px; margin: 0 0 2px; padding: 7px 13px;
  background: none;
  border: 1px dashed var(--nx-gold-line, rgba(212,164,78,.3));
  border-radius: 10px;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
#cleanView .cleanlite-wk-back:active { transform: scale(.995); }
#cleanView .cleanlite-wk-back-range {
  font-family: var(--nx-font-mono, 'JetBrains Mono', monospace);
  font-size: 11px; letter-spacing: .04em;
  color: var(--nx-text-dim, #b6ad9a);
}
#cleanView .cleanlite-wk-back-cta {
  font-size: 11.5px; font-weight: 700; color: var(--nx-gold, #d4a44e);
  white-space: nowrap;
}

/* Seven columns that stay seven equal columns. `flex: 1` alone does not do
   it: the default `min-width: auto` lets each day refuse to shrink below its
   own content, so a week containing "100%" renders wider columns than one
   containing "0%" and the day you aimed at is not where it was last week.
   Invisible until v505 made whole past weeks browsable side by side. */
#cleanView .cleanlite-wk-day { min-width: 0; }

/* v510 — the ＋ that adds a house to the Cleaning location picker. Same pill
   geometry as the locations beside it, but outlined rather than filled: it is
   a control, not one of the places. Admin/manager only (gated in the markup). */
#cleanView .cleanlite-loc.cleanlite-loc-add {
  flex: 0 0 auto;
  min-width: 40px;
  padding-inline: 12px;
  font-size: 16px; line-height: 1;
  color: var(--nx-gold, #d4a44e);
  background: transparent;
  border: 1px dashed var(--nx-gold-line, rgba(212,164,78,.4));
}
#cleanView .cleanlite-loc.cleanlite-loc-add:hover { background: var(--nx-gold-faint, rgba(212,164,78,.08)); }

/* ═══ v560 — THE BEACON LAW, FINAL (Alfredo, 5th time: "remove beacons
   everywhere").  No pulsing circle, halo, ring, orb or breathing dot on
   ANY surface as ambient "I'm alive" decoration.  A COLOUR CHANGE is how
   something says it is live; motion stays only for a specific event the
   user must act on (recording, an overdue count).

   Mechanism: for @keyframes, the LAST definition of a name in document
   order wins globally — and this is the last stylesheet index.html loads.
   Re-declaring each beacon keyframe empty stops the motion even where the
   original animation shorthand carries !important (views-system.css), and
   every element keeps its static colour, border and shadow.  If you add a
   new keyframe animation to a status dot, you are re-fighting a war that
   is already lost — read steward/digest.md before you do.

   Deliberately NOT killed: `pulse` (shared by the mic/recording states —
   recording is an allowed motion), typingDot (transient activity),
   eq-hbar-pulse (fires only on .is-over — an overdue state),
   dcard-shimmer (loading skeleton), moneta-breathe + hw-breathe (the
   galaxy and hideaway are art surfaces, not status chrome). */
@keyframes eq-lc-pulse-dot { }
@keyframes eq-pulse-soft { }
@keyframes eq-pulse-warn { }
@keyframes eq-pulse-urgent { }
@keyframes eq-lc-glow { }
@keyframes eq-lc-glow-quick { }
@keyframes eq-lc-glow-sm { }
@keyframes eq-lc-eta-blink { }
@keyframes eq-beacon-pulse { }
@keyframes eq-beacon-flash { }
@keyframes eq-beacon-red-flash { }
@keyframes eq-beacon-bulb-dying { }
@keyframes eq-beacon-pulse-sm { }
@keyframes eq-orbit-fore { }
@keyframes eq-orbit-back { }
@keyframes eq-orbit-tiny-a { }
@keyframes eq-orbit-tiny-b { }
@keyframes ord-vendor-pip-pulse { }
@keyframes nxrm-anomaly-pulse { }
@keyframes eq-hbar-shimmer { }

/* The orbit "satellite" particles around operational equipment dots: with
   their keyframes emptied they would freeze as stray specks, so remove
   them outright.  The dot itself (and its colour) stays. */
.eq-lc-orbit-fore,
.eq-lc-orbit-back { display: none !important; }
.eq-lc-dot.is-operational::before,
.eq-lc-dot.is-operational::after,
.eq-lc-pill.is-operational .eq-lc-pill-dot::before,
.eq-lc-pill.is-operational .eq-lc-pill-dot::after { content: none !important; }

/* ═══ v563 — pipeline notes in the daily log's Work Order Pipeline ═══ */
.dlog-pipe-note {
  margin-top: 6px;
  padding: 7px 10px;
  border-left: 3px solid var(--nx-gold-line-2, rgba(212, 164, 78, 0.35));
  border-radius: 6px;
  background: var(--nx-surface-2, rgba(255, 255, 255, 0.03));
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--text, #e8e0d2);
}
.dlog-pipe-note-meta {
  color: var(--muted, #8a8878);
  font-size: 11.5px;
}
.dlog-pipe-row.is-note-only { cursor: default; }

/* ═══ v573 — supervisor verification on the cleaning checklist ═══ */
.cleanlite-task-ver {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  margin-left: 6px;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--nx-gold-soft);
  color: var(--nx-gold-ink);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  flex: none;
  white-space: nowrap;
}
/* A verified task's check square turns solid gold — done AND double-checked
   reads at a glance, no motion (beacon law). */
.cleanlite-task.is-verified .cleanlite-check,
.cleanlite-ptask.is-verified .cleanlite-pcheck {
  background: var(--nx-gold);
  border-color: var(--nx-gold);
  color: var(--nx-gold-on, #101626);
  box-shadow: 0 0 0 2px var(--nx-gold-line-2);
}

/* v578 — walkthrough note rows in the daily log's Weekly Walkthrough */
.dlog-wt-note .dlog-wt-issue-body { color: var(--nx-text); }
/* ═══ v593 — cleaning consolidation: week chip + verify chip ═══
   The week strip collapses behind one honest line; verify mode announces
   itself instead of hiding in a segment. Both speak the house chip voice. */
#cleanView .cleanlite-wk-chip {
  display: flex; align-items: center; gap: 6px; width: 100%; text-align: left;
  margin: 8px 0 2px; padding: 10px 14px; min-height: var(--nx-touch-min, 44px);
  border-radius: var(--nx-radius-pill, 999px); cursor: pointer; font: inherit;
  font-size: 12.5px; font-weight: 700; letter-spacing: .02em;
  font-variant-numeric: tabular-nums;
  background: var(--nx-surface-1, rgba(34,46,70,.42));
  border: 1px solid var(--nx-gold-line, rgba(212,164,78,.22));
  color: var(--nx-text-dim, #b6ad9a);
}
#cleanView .cleanlite-wk-chip.is-open { border-color: var(--nx-gold-line-2, rgba(212,164,78,.38)); color: var(--nx-text, #ece4d4); }
#cleanView .cleanlite-wk-streakchip {
  display: inline-flex; align-items: center; gap: 3px;
  color: var(--nx-gold-ink, #d4a44e); font-variant-numeric: tabular-nums;
}
#cleanView .cleanlite-wk-chev { margin-left: auto; display: inline-flex; color: var(--nx-faint, #6c7585); transition: transform .15s; }
#cleanView .cleanlite-wk-chev.is-open { transform: rotate(180deg); }
#cleanView .cleanlite-verifychip {
  display: inline-flex; align-items: center; gap: 6px; min-height: var(--nx-touch-min, 44px);
  padding: 6px 14px; border-radius: var(--nx-radius-pill, 999px); cursor: pointer; font: inherit;
  font-size: 12.5px; font-weight: 600;
  background: var(--nx-gold-soft, rgba(212,164,78,.16));
  border: 1px solid var(--nx-gold-line-2, rgba(212,164,78,.38));
  color: var(--nx-gold-ink, #d4a44e);
}
#cleanView .cleanlite-zone-count { font-variant-numeric: tabular-nums; }

/* v596 — the EN/ES toggle is BACK ON SCREEN (Alfredo, on a screenshot of the
   v595 header: "give a language toggle?"). It rides the far end of the shift
   row in the same chip voice; only the Crew/Verify segment stays in the ⋮. */
#cleanView .cleanlite-lang { margin-left: auto; }
#cleanView .cleanlite-lang .cleanlite-shift-btn {
  padding: 6px 12px;
  font-family: var(--nx-font-mono, 'JetBrains Mono', ui-monospace, monospace);
  font-size: 11px; letter-spacing: .06em;
}

/* ═══ v648 — one row grammar for the periodic drawer ═══
   [check] name …………………… [people][pen]
           ─────────── bar ───────────
           CADENCE · status — same order, same place, every row. */
#cleanView .cleanlite-ptask { align-items: flex-start; }
#cleanView .cleanlite-pcheck { margin-top: 1px; }
#cleanView .cleanlite-ptask-actions {
  display: inline-flex; align-items: center; gap: 6px;
  margin-left: auto; flex: 0 0 auto; align-self: flex-start;
}
#cleanView .cleanlite-ptask-sub { margin-top: 4px; }
#cleanView .cleanlite-pdue { min-width: 0; }
