/* ===========================================================
   Change Management module
   =========================================================== */

:root {
  --cm-navy:      var(--kbr-navy);
  --cm-navy-soft: var(--kbr-teal-dark);
  --cm-blue:      var(--kbr-teal);
  --cm-red:       var(--kbr-danger);
  --cm-amber:     #f59e0b;
  --cm-bg:        var(--kbr-bg);
  --cm-table-head: #f0f3f7;
}

/* ---- Landing — uses shared .landing-top-bar, .portfolio-table-wrap,
   .portfolio-table from main.css; only CM-specific overrides here ---- */

/* Allow horizontal scroll on the wide CM portfolio table */
.cm-portfolio-table-wrap { overflow: auto; max-height: calc(100vh - 200px); }

/* CM table header: navy background to match the report page tables */
.cm-portfolio-table thead .group-row th {
  background: var(--cm-table-head);
  color: var(--kbr-text);
  font-weight: 600;
  padding: 6px 8px;
  text-align: center;
  font-size: 12px;
  border-right: 1px solid var(--kbr-border);
}
.cm-company-block,
.cm-client-block { background: var(--cm-table-head) !important; }

.cm-portfolio-table thead .col-row th {
  background: var(--cm-table-head);
  color: var(--kbr-text);
  font-size: 11px;
  white-space: nowrap;
  text-align: center;
  border-right: 1px solid var(--kbr-border);
}
.cm-portfolio-table thead .col-row th.num { text-align: center; }

.cm-portfolio-table tbody td { white-space: nowrap; font-size: 12px; }
.cm-portfolio-table tbody td.num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.cm-portfolio-table tbody tr:hover td { background: #eef4fa !important; }
.cm-portfolio-table tbody tr.selected td { background: #dff1f5 !important; }

/* ---- Overview & subtab pages shared shell ---- */
.cm-report-body { background: var(--cm-bg); }
.cm-shell { background: var(--cm-bg); }

.cm-toolbar {
  background: #fff;
  border-bottom: 1px solid var(--kbr-border);
  padding: 10px 18px;
  margin-bottom: 10px;
  box-shadow: 0 1px 2px rgba(15,23,42,0.04);
}

.cm-toolbar .schedule-tab-nav .home-btn,
.cm-toolbar .schedule-tab-nav .tab-link { color: var(--cm-navy); }
.cm-toolbar .schedule-tab-nav .tab-link.active {
  color: var(--cm-navy-soft);
  border-bottom: 2px solid var(--cm-navy-soft);
}

.cm-report-logo { text-align: right; }
.cm-report-logo .kbr-logo { font-size: 20px; font-weight: 700; color: var(--cm-navy); }
.cm-report-logo .report-tag { font-size: 11px; font-weight: 600; color: var(--kbr-text-muted); }

.cm-body { padding: 4px 18px 18px; position: relative; }

.cm-footer {
  background: #fff;
  border-top: 1px solid var(--kbr-border);
  padding: 8px 18px;
  margin-top: 10px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  box-shadow: 0 -1px 2px rgba(15,23,42,0.04);
}

.cm-footer .footer-item { display: flex; align-items: center; gap: 4px; }
.cm-footer .footer-label { color: var(--kbr-text-muted); font-weight: 600; }
.cm-footer .footer-value { color: var(--cm-navy); font-weight: 700; }

/* ---- Overview page ---- */
.cm-overview-grid {
  display: grid;
  grid-template-columns: 1fr 320px;
  gap: 14px;
  margin-bottom: 12px;
}

.cm-stages-card {
  background: #dde9f4;
  border: 1px solid var(--kbr-border);
  border-radius: 8px;
  padding: 16px 12px 18px;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0;
  box-shadow: var(--kbr-shadow-sm);
  position: relative;
}

/* Horizontal pipeline line — sits at circle centre (label 32px + margin 8px + radius 23px = 63px from top) */
.cm-stages-card::before {
  content: '';
  position: absolute;
  top: calc(16px + 32px + 8px + 23px);
  left: calc(100% / 14);
  right: calc(100% / 14);
  height: 2px;
  background: var(--kbr-navy);
  opacity: 0.25;
  pointer-events: none;
}

.cm-stage {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 0 4px;
  cursor: pointer;
  border-radius: 6px;
  transition: background-color 0.15s ease;
}
.cm-stage:hover  { background: rgba(8, 145, 178, 0.10); border-radius: 8px; }
.cm-stage.active { background: rgba(8, 145, 178, 0.18); border-radius: 8px; }
.cm-stage.active .stage-circle { border-color: var(--cm-navy); background: var(--cm-navy); color: #fff; }

.cm-stage .stage-label {
  font-size: 11px;
  font-weight: 500;
  color: var(--kbr-text);
  height: 32px;
  margin-bottom: 8px;
  line-height: 1.25;
  display: flex;
  align-items: center;
  justify-content: center;
}

.cm-stage .stage-node {
  position: relative;
  z-index: 1;
  margin-bottom: 8px;
}

.cm-stage .stage-circle {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  border: 2px solid var(--cm-navy-soft);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  font-weight: 700;
  color: var(--cm-navy);
  background: #fff;
}

.cm-stage .stage-days {
  display: flex;
  gap: 4px;
  font-size: 11px;
  line-height: 1.4;
  align-items: baseline;
}

.cm-stage .days-key {
  color: var(--cm-navy-soft);
  font-weight: 700;
  min-width: 26px;
  text-align: left;
}

.cm-stage .days-val {
  color: var(--kbr-text);
  font-weight: 500;
}

.cm-overview-right {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.cm-kpi-strip {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 8px;
  padding: 10px;
  box-shadow: var(--kbr-shadow-sm);
}

.cm-kpi { padding: 6px 8px; text-align: left; }
.cm-kpi .kpi-num { font-size: 20px; font-weight: 700; color: var(--cm-navy); line-height: 1.1; }
.cm-kpi .kpi-label { font-size: 11px; color: var(--kbr-text-muted); font-weight: 600; }

.cm-cost-card {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 8px;
  padding: 10px;
  box-shadow: var(--kbr-shadow-sm);
}

.cost-half .cost-label {
  font-size: 12px;
  font-weight: 700;
  color: var(--cm-navy);
  margin-bottom: 6px;
}

.cost-bar {
  display: grid;
  grid-template-columns: 30px 1fr 45px;
  gap: 6px;
  align-items: center;
  font-size: 11px;
  margin-bottom: 4px;
}

/* An author `display` outranks the UA sheet's [hidden] rule, so the grid above would keep
   the bar visible when renderCost hides it to swap in the per-currency rows. */
.cost-bar[hidden] { display: none; }

.cost-bar .bar { height: 14px; background: var(--kbr-border); border-radius: 2px; overflow: hidden; }
.cost-bar .fill { height: 100%; background: var(--cm-amber); border-radius: 2px; transition: width 0.25s ease; }
.cost-bar .amt { text-align: right; font-weight: 700; color: var(--cm-navy); }

.cm-bottom-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  /* Was flush against the Variance Workflow panel above it. 14px matches this grid's own
     gap and the panel's margin-top, so the vertical rhythm stays uniform. */
  margin-top: 14px;
}

.cm-chart-panel { padding: 12px 14px; box-shadow: var(--kbr-shadow-sm); }
.cm-chart-panel h5 {
  font-size: 14px;
  font-weight: 700;
  color: var(--cm-navy);
  margin: 0 0 6px;
  text-align: center;
}

.cm-chart-panel .chart-box { height: 200px; }
.cm-chart-panel .chart-box.tall { height: 320px; }

/* ---- Variance Type ---- */
.cm-vt-grid {
  display: grid;
  grid-template-columns: 1fr 1.4fr 0.8fr;
  gap: 14px;
  margin-bottom: 12px;
}
/* Top-row grouped-bar charts need extra height for multi-line wrapped
   category labels (e.g. "Baseline work performed, requires re-work"). */
.cm-vt-grid .cm-chart-panel .chart-box { height: 280px; }
.cm-vt-bottom .cm-chart-panel { margin-bottom: 0; }
.cm-vt-bottom .cm-chart-panel .chart-box.tall { height: 360px; }

/* ---- Detailed ---- */
.cm-chart-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 8px;
}

.cm-view-toggle {
  background: var(--cm-navy-soft);
  color: #fff;
  border: none;
  border-radius: 18px;
  padding: 6px 18px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
}

.cm-detail-table-wrap {
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 8px;
  padding: 0;
  margin-top: 12px;
  /* Not `auto`: detailed.js gives Tabulator an explicit height so it scrolls in its
     own holder, and a scrolling wrapper added a second vertical scrollbar. `visible`
     rather than `hidden` here because this wrapper also holds the Columns drawer,
     which would be clipped by a clipping wrapper. */
  overflow: visible;
  box-shadow: var(--kbr-shadow-sm);
}

.cm-subtabs {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  padding: 10px 16px 0;
  border-bottom: 1px solid var(--kbr-border);
}

.cm-subtabs .sub-link {
  font-size: 13px;
  font-weight: 600;
  color: var(--kbr-text-muted);
  padding: 4px 0 8px;
  border-bottom: 2px solid transparent;
  cursor: pointer;
}

.cm-subtabs .sub-link.active {
  color: var(--cm-navy-soft);
  border-bottom-color: var(--cm-navy-soft);
}

.cm-detail-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 12px;
}

.cm-detail-table thead th {
  background: var(--cm-table-head);
  color: var(--kbr-text);
  font-weight: 600;
  padding: 8px 10px;
  text-align: left;
  font-size: 12px;
  white-space: nowrap;
}

.cm-detail-table thead th.num { text-align: right; }

.cm-detail-table tbody td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--kbr-border);
  white-space: nowrap;
}

.cm-detail-table tbody td.num { text-align: right; font-variant-numeric: tabular-nums; }
.cm-detail-table tbody tr:nth-child(even) td { background: #f8fafc; }

/* Filter bar uses schedule.css shared styles (.schedule-filter-bar, .filter-bar-*).
   Only CM-specific overrides needed here. */
.fp-field { margin-bottom: 0; }

/* ---- Self Service Analysis ---- */
/* ---- Self Service Analysis ---- */
.cm-ss-panel {
  background: #dde9f4;
  border-radius: 8px;
  padding: 16px 18px 16px;
  box-shadow: var(--kbr-shadow-sm);
  display: flex;
  flex-direction: column;
  min-height: calc(100vh - 260px);
}

.cm-ss-subtabs {
  flex-shrink: 0;
  padding: 0 0 10px;
  border-bottom: 1px solid rgba(0,0,0,0.12);
  margin-bottom: 0;
}

/* Tree container fills remaining panel height and lets the tree STRETCH into it. It used to
   centre a fixed-height block, which floated the column headers into the middle of a tall
   panel instead of pinning them to the top. */
.ssa-tree-wrap {
  flex: 1;
  overflow-x: auto;
  display: flex;
  align-items: stretch;
  padding: 16px 0;
}

/* min-height, not height: an explicit height would beat the wrap's `stretch` and put the
   fixed block back. With the tree filling the panel, .ssa-col's space-between pins the
   headers to the top and drops the bars to the bottom, where .ssa-root's flex-end already
   puts the root bar — so root and column bars stay on the same baseline. */
.ssa-tree {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 0;
  min-width: max-content;
  min-height: 125px;
  position: relative;
}

/* Connector overlay — bezier lines drawn behind the bars. */
.ssa-connectors {
  position: absolute;
  top: 0;
  left: 0;
  pointer-events: none;
  overflow: visible;
  z-index: 0;
}
/* Keep the bar columns above the connector lines. */
.ssa-root,
.ssa-col { position: relative; z-index: 1; }

/* Root block — same two-part structure as a drill column: a reserved header box, then the
   content centred in what remains. That is what keeps the root bar on the identical centre
   line as the column bars without hard-coding the header's height anywhere. */
.ssa-root {
  flex-shrink: 0;
  width: 160px;
  background: transparent;
  padding: 0 20px 0 0;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: stretch;
}

/* Occupies a real header's box but draws nothing. `visibility: hidden` rather than
   `display: none` — the point is to take up the space. */
.ssa-head-ghost { visibility: hidden; }

.ssa-root-inner {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.ssa-root-bar-row {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 6px;
  width: 100%;
}

.ssa-root-bar {
  flex: 1;
  height: 10px;
  background: var(--cm-navy);
  border-radius: 3px;
  min-width: 60px;
}

.ssa-root-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--cm-navy);
}

.ssa-root-value {
  font-size: 15px;
  font-weight: 700;
  color: var(--cm-navy);
}

/* "+" button attached to root or bars */
.ssa-add-col,
.ssa-plus {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1.5px solid var(--cm-navy-soft);
  background: #fff;
  color: var(--cm-navy-soft);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  flex-shrink: 0;
  margin-left: 6px;
  vertical-align: middle;
}
.ssa-add-col:hover, .ssa-plus:hover {
  background: var(--cm-navy-soft);
  color: #fff;
}


/* Each drill column — header pinned at the top, bars centred in what's left. Mirrors
   .pr-decomp-col / .pr-decomp-nodes on the Progress Self Service page. `space-between` here
   dropped the bars to the very bottom of a tall panel, leaving a dead band under the header. */
.ssa-col {
  flex-shrink: 0;
  width: 220px;
  padding: 0 16px 0 0;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
}

/* Takes the height left over by the header and centres the bars inside it. */
.ssa-bars {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* Column header in normal flow — sits above the bars */
.ssa-col-head {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  border-bottom: 2px solid var(--cm-navy-soft);
  padding-bottom: 4px;
  margin-bottom: 10px;
}

.ssa-col-dim {
  font-weight: 700;
  color: var(--cm-navy);
}

.ssa-col-filter {
  font-size: 11px;
  color: var(--cm-navy-soft);
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100px;
}

.ssa-remove-col {
  margin-left: auto;
  background: transparent;
  border: none;
  color: var(--kbr-text-muted);
  font-size: 14px;
  cursor: pointer;
  padding: 0 2px;
  line-height: 1;
  flex-shrink: 0;
}
.ssa-remove-col:hover { color: var(--cm-red); }

/* Individual bar — track on top, label + value below */
.ssa-bar {
  display: flex;
  flex-direction: column;
  margin-bottom: 12px;
}

/* Full-width track row: fill + "+" at right end */
.ssa-bar-track {
  display: flex;
  align-items: center;
  width: 100%;
  height: 10px;
  background: rgba(255,255,255,0.45);
  border-radius: 3px;
  margin-bottom: 4px;
  gap: 0;
}

.ssa-bar-fill {
  height: 100%;
  background: var(--cm-navy-soft);
  border-radius: 3px;
  min-width: 4px;
  flex-shrink: 0;
}

/* "+" sits flush at right end of track */
.ssa-bar-track .ssa-plus {
  margin-left: auto;
  flex-shrink: 0;
  position: relative;
  top: -1px;
}

.ssa-bar-label {
  font-size: 11px;
  font-weight: 700;
  color: var(--cm-navy);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.ssa-bar-value {
  font-size: 11px;
  color: #4a6080;
  font-weight: 500;
}

.ssa-bar--selected .ssa-bar-fill  { background: var(--cm-navy); }
.ssa-bar--selected .ssa-bar-label { font-weight: 800; }

/* Dimension picker dropdown */
.ssa-picker {
  list-style: none;
  margin: 0;
  padding: 4px 0;
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 4px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.12);
  min-width: 160px;
  z-index: 100;
}

.ssa-picker-item {
  padding: 7px 14px;
  font-size: 13px;
  color: var(--cm-navy);
  cursor: pointer;
}
.ssa-picker-item:hover {
  background: #eef4fa;
  font-weight: 600;
}

/* ---- Logs ---- */
.cm-logs-actions {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
}
.cm-logs-tools,
.cm-logs-views { display: flex; align-items: center; gap: 10px; }

.cm-pill {
  background: #fff;
  border: 1px solid var(--cm-navy-soft);
  color: var(--cm-navy-soft);
  border-radius: 18px;
  padding: 6px 22px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

.cm-pill.active { background: var(--cm-navy-soft); color: #fff; }

/* Match the Columns dropdown button to the PV Details / Cost Type pill size. */
.cm-logs-actions .cols-btn {
  padding: 6px 22px;
  border-radius: 18px;
  font-size: 13px;
}

/* CSV / PDF export buttons on the Change Logs page — mirrors the Progress
   Curves table-view export buttons (.pr-export-icon-btn). */
.cm-export-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 4px;
  padding: 4px 10px;
  font-size: 11px;
  font-weight: 600;
  color: var(--cm-navy);
  cursor: pointer;
}
.cm-export-btn:hover { background: #eef4fb; }

/* Filter panel alignment. A native <select> sizes itself to its LONGEST option, and
   .fb-select sets only min-width — so WBS 1 / WBS 2 / Cost Type (long labels) ballooned
   while Execution Center stayed narrow, and with flex-wrap the rows broke at arbitrary
   points with nothing lining up. A grid of equal columns fixes both: every control is the
   same width and the second row's fields sit under the first row's.

   Scoped to #cmFilterBar deliberately. .fb-select and .filter-bar-fields are shared with
   nine other modules including epcsr, risk and workshare, which are out of scope — Cost
   already reads tidily because its dimension controls are combo buttons capped at 280px,
   not bare selects. min-width:0 is required: without it .fb-select's 130px floor and the
   combo trigger's width:max-content would still fight the grid. */
#cmFilterBar .filter-bar-fields {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  align-items: end;
}
#cmFilterBar .fb-field { min-width: 0; }
#cmFilterBar .fb-select,
#cmFilterBar .fp-combo-trigger {
  width: 100%;
  min-width: 0;
  max-width: none;
}

/* overflow must NOT be `auto` here. Tabulator is given an explicit height and
   scrolls inside its own holder, so a scrolling wrapper around it produced TWO
   vertical scrollbars. `auto` dates from the old hand-rolled .cm-logs-table
   (width:max-content), which needed the wrapper to scroll; that markup is gone.
   `hidden` rather than `visible` so the grid still clips to the card's radius. */
.cm-logs-table-wrap { padding: 0; overflow: hidden; box-shadow: var(--kbr-shadow-sm); }
.cm-logs-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; font-size: 12px; }
.cm-logs-table thead th {
  background: var(--cm-table-head);
  color: var(--kbr-text);
  font-weight: 600;
  padding: 8px 10px;
  text-align: left;
  white-space: nowrap;
}
.cm-logs-table tbody td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--kbr-border);
  white-space: nowrap;
}
.cm-logs-table tbody tr:nth-child(even) td { background: #f8fafc; }

/* ---- Aging ---- */
/* cm-page--fixed locks html + body to 100% height and hides overflow so the
   page itself never scrolls. The flex chain then stretches the table wrap to
   fill all remaining space and lets it scroll internally. */
html:has(.cm-page--fixed),
.cm-page--fixed { height: 100%; overflow: hidden; }

.cm-page--fixed .page-shell { height: 100%; min-height: 0; overflow: hidden; }
.cm-body--fill { display: flex; flex-direction: column; min-height: 0; overflow: hidden; }
.cm-body--fill .cm-aging-table-wrap,
.cm-body--fill .cm-logs-table-wrap { flex: 1; min-height: 0; max-height: none; }

/* Same double-scrollbar fix as .cm-logs-table-wrap above — aging.js also gives
   Tabulator an explicit height, so this wrapper must not scroll too. */
.cm-aging-table-wrap { padding: 0; overflow: hidden; box-shadow: var(--kbr-shadow-sm); }
.cm-aging-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; font-size: 12px; }
.cm-aging-table thead th {
  background: var(--cm-table-head);
  color: var(--kbr-text);
  font-weight: 600;
  padding: 8px 10px;
  text-align: left;
  white-space: nowrap;
  font-size: 12px;
}
.cm-aging-table thead th.num { text-align: right; }
.cm-aging-table tbody td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--kbr-border);
  white-space: nowrap;
}
.cm-aging-table tbody td.num { text-align: right; font-variant-numeric: tabular-nums; }
.cm-aging-table tbody tr:nth-child(even) td { background: #f8fafc; }

/* ---- Table Controls: pagination + column toggle ---- */
.cm-table-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 0 8px;
  gap: 12px;
  flex-shrink: 0;
}
.cm-body--fill .cm-table-controls { flex-shrink: 0; }

.cm-col-toggle-wrap { position: relative; }

.cm-col-toggle-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 4px;
  padding: 5px 12px;
  font-size: 12px;
  font-weight: 600;
  color: var(--cm-navy);
  cursor: pointer;
}
.cm-col-toggle-btn:hover { border-color: var(--cm-navy-soft); background: #f0f5fa; }

.cm-col-toggle-panel {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 6px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.12);
  padding: 6px 0;
  z-index: 200;
  max-height: 320px;
  overflow-y: auto;
  min-width: 200px;
  columns: 2;
  column-gap: 0;
}
.cm-col-chk-item {
  display: block;
  break-inside: avoid;
  padding: 4px 14px;
  font-size: 12px;
  color: var(--kbr-text);
  cursor: pointer;
  white-space: nowrap;
}
.cm-col-chk-item:hover { background: #f0f5fa; }
.cm-col-chk-item input { margin-right: 6px; cursor: pointer; }

.cm-pagination {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--kbr-text-muted);
}
.cm-page-info { min-width: 170px; text-align: right; }
.cm-page-size-label { color: var(--kbr-text-muted); white-space: nowrap; }
.cm-page-size {
  border: 1px solid var(--kbr-border);
  border-radius: 4px;
  padding: 3px 6px;
  font-size: 12px;
  color: var(--cm-navy);
}
.cm-page-btn {
  background: #fff;
  border: 1px solid var(--kbr-border);
  border-radius: 4px;
  padding: 3px 10px;
  font-size: 16px;
  line-height: 1.4;
  color: var(--cm-navy);
  cursor: pointer;
}
.cm-page-btn:hover:not(:disabled) { border-color: var(--cm-navy-soft); background: #f0f5fa; }
.cm-page-btn:disabled { opacity: 0.35; cursor: default; }

/* ---- Responsive ---- */
@media (max-width: 1399px) {
  .cm-stages-card { flex-wrap: wrap; }
  .cm-stages-card::before { display: none; }
  .cm-stage { flex: 0 0 calc(25% - 12px); margin-bottom: 12px; }
}

@media (max-width: 1199px) {
  .cm-ss-tree    { grid-template-columns: 160px 1fr 1fr 1fr 1fr 1fr; }
}

@media (max-width: 991px) {
  .cm-overview-grid { grid-template-columns: 1fr; }
  .cm-bottom-grid   { grid-template-columns: 1fr; }
  .cm-vt-grid       { grid-template-columns: 1fr 1fr; }
  .cm-ss-tree       { grid-template-columns: 130px 1fr 1fr 1fr; overflow-x: auto; }
  .cm-ss-dim-row    { grid-template-columns: 1fr 1fr 1fr; }
}

@media (max-width: 575px) {
  .cm-vt-grid    { grid-template-columns: 1fr; }
  .cm-ss-tree    { grid-template-columns: 110px 1fr 1fr; }
  .cm-ss-dim-row { grid-template-columns: 1fr 1fr; }
  .cm-stage      { flex: 0 0 calc(50% - 8px); }
}

/* Status filter pills above the "Initiated Variances Over the Last 6 Months"
   chart on the Overview page. Click a pill to filter the chart series.
   The active pill fills navy; the rest stay light. */
.cm-status-pills {
  display: inline-flex;
  border: 1px solid var(--cm-navy-soft);
  border-radius: 6px;
  overflow: hidden;
}
.cm-status-pills .status-pill {
  border: 0;
  background: #fff;
  color: var(--cm-navy);
  font-size: 11px;
  font-weight: 600;
  padding: 4px 10px;
  cursor: pointer;
  border-right: 1px solid var(--cm-navy-soft);
  font-family: inherit;
  line-height: 1.4;
}
.cm-status-pills .status-pill:last-child { border-right: 0; }
.cm-status-pills .status-pill.active {
  background: var(--cm-navy-soft);
  color: #fff;
}
.cm-status-pills .status-pill:hover:not(.active) { background: #eaf2fa; }

/* Variance Workflow table on the Overview page — one row per PV with
   per-stage date / user pairs. Navy header matches the Power-BI mockup. */
.cm-pv-stages-panel {
  margin-top: 14px;
}
.cm-pv-stages-panel h5 {
  font-size: 13px;
  font-weight: 700;
  color: var(--cm-navy);
  margin: 0 0 10px;
}
.cm-pv-stages-wrap {
  max-height: 340px;
  overflow: auto;
  border: 1px solid var(--kbr-border);
  border-radius: 4px;
}
.cm-pv-stages-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  background: #fff;
}
.cm-pv-stages-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--cm-table-head);
  color: var(--kbr-text);
  font-weight: 700;
  text-align: left;
  padding: 8px 10px;
  border-bottom: 1px solid var(--cm-navy);
  font-size: 11px;
  white-space: nowrap;
}
.cm-pv-stages-table tbody td {
  padding: 6px 10px;
  border-bottom: 1px solid #eef1f5;
  color: #1e293b;
  white-space: nowrap;
}
.cm-pv-stages-table tbody tr:hover td { background: #f5f8fb; }
.cm-pv-stages-table .pv-cell { font-weight: 600; color: var(--cm-navy); }
.cm-pv-stages-empty {
  text-align: center;
  padding: 18px;
  color: var(--kbr-text-muted);
  font-style: italic;
}

/* Change-Logs grid is themed by the unified Tabulator theme in main.css. */

/* Reusable cell helpers (apply via a column formatter) to match the reference:
   pill badges, a name + monospace sub-label, and a status dot + text. */
.rh-pill {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.5;
  background: #eef2ff;
  color: #4338ca;            /* default (indigo) — override per value below */
  white-space: nowrap;
}
.rh-pill.green  { background: #ecfdf3; color: #067647; }
.rh-pill.purple { background: #f4f3ff; color: #5925dc; }
.rh-pill.gray   { background: #f2f4f7; color: #475467; }
.rh-cell-title  { font-weight: 600; color: var(--kbr-text); line-height: 1.3; }
.rh-cell-sub    { font-family: ui-monospace, "SFMono-Regular", Consolas, monospace;
                  font-size: 11px; color: var(--kbr-text-muted); }
.rh-status { display: inline-flex; align-items: center; gap: 7px; }
.rh-status .rh-status-dot { width: 8px; height: 8px; border-radius: 50%; background: #16a34a; }
.rh-status.inactive .rh-status-dot { background: #cbd5e1; }