/* Workspace rhythm. The Dashboard KPI-to-chart gap is the 12px reference.
   This file changes layout spacing only; chart geometry, table separators,
   typography, radii, and native scroll behavior remain in their own styles. */
.finance-page {
  --fin-space-section: 12px;
  --fin-section-gap: var(--fin-space-section);
  --fin-grid-gap: var(--fin-space-section);
  --fin-space-card: 16px;
  --fin-space-control: 8px;
  --fin-page-gutter: 24px;
}

/* Every ordinary tab has a fin-wrap. Overview sections use the same rhythm
   through their reorderable wrappers; only the parent owns the block gap. */
.finance-page .fin-wrap,
.finance-page .fin-layout-content,
.finance-page .inv-pipeline,
.finance-page .fin-model-grid > div:not([class]) {
  display: flex;
  flex-direction: column;
  gap: var(--fin-space-section);
  min-width: 0;
}
.finance-page .fin-wrap {
  padding: var(--fin-space-section) var(--fin-page-gutter) calc(4 * var(--fin-space-section));
}
.finance-page[data-fin-page] .fin-wrap > *,
.finance-page[data-fin-page] .fin-layout-content > *,
.finance-page[data-fin-page] .inv-pipeline > *,
.finance-page[data-fin-page] .fin-model-grid > div:not([class]) > * {
  margin-block: 0;
}
.finance-page .fin-overview-layout,
.finance-page .fin-ov-sections,
.finance-page .inv-introduction,
.finance-page .fin-input-groups,
.finance-page .fin-job-terms,
.finance-page .fin-di-layout > .fin-di-main,
.finance-page .fin-di-layout > aside {
  gap: var(--fin-space-section);
}
.finance-page .fin-table-section > .fin-seg:first-child {
  margin-top: 0;
  margin-bottom: var(--fin-space-section);
}
.finance-page .fin-table-section > .fin-table-wrap,
.finance-page .fin-wrap > .fin-table-wrap {
  --fin-table-bleed: var(--fin-page-gutter);
}

/* Card collections and peer panels use one gap in all density modes. */
.finance-page[data-fin-page] :is(
  .fin-kpis, .fin-charts, .fin-mini-grid, .fin-card-grid, .fin-doc-grid,
  .fin-ov-stat-row, .fin-ov-mid-row, .fin-ov-bottom-row,
  .fin-estate-hero, .fin-estate-side-kpis, .fin-estate-switcher,
  .fin-model-grid, .fin-proj-grid, .fin-proj-sources, .fin-jobs-grid,
  .fin-goal-list, .fin-recent-doc-list, .fin-archive-list,
  .fin-edu-detail-grid, .fin-edu-institution-grid, .fin-edu-milestone-list,
  .fin-edu-outlook-summary, .fin-edu-roadmap-stats,
  .fin-di-layout, .fin-di-template-row,
  .inv-opportunity-grid, .inv-market-grid, .inv-model-grid,
  .inv-scenario-strip, .inv-decision-grid
) { gap: var(--fin-space-section); }
.finance-page[data-fin-page] .fin-ledger-board > section { gap: var(--fin-space-section); }
.finance-page .fin-ledger-board > section + section { margin-top: var(--fin-space-section); }
.finance-page .fin-ov-mid-row { grid-template-columns: minmax(0, 3fr) minmax(0, 1fr); }
.finance-page .fin-card-grid.is-collapsed > *,
.finance-page .fin-doc-grid.is-collapsed > * {
  flex-basis: calc((100% - 3 * var(--fin-grid-gap)) / 4);
}

/* Padded card shells. Composite modules keep their own unpadded outer shell. */
.finance-page[data-fin-page] :is(
  .fin-kpi, .fin-mini, .fin-chart-card, .fin-account-card, .fin-credit-card,
  .fin-estate-card, .fin-job-card, .fin-job-term, .fin-plan-card,
  .fin-doc-card, .fin-archive-row, .fin-ov-stat-card, .fin-ov-card,
  .fin-ledger-card, .fin-goal-row, .fin-recent-doc-row,
  .fin-input-grid, .fin-input-group, .fin-proj-assumptions, .fin-proj-source,
  .fin-hero-main, .fin-hero-graph-main, .fin-hero-side, .fin-proj-main, .fin-proj-side,
  .fin-edu-program-identity, .fin-edu-institution-card, .fin-edu-milestone-row,
  .fin-edu-outlook-assumptions,
  .fin-di-intro,
  .inv-command-head, .inv-underwrite-head, .inv-narrative,
  .inv-opportunity-card, .inv-opportunity-add, .inv-market-card,
  .inv-scenario-card, .inv-decision-check, .inv-editor-section
) { padding: var(--fin-space-card); }
.finance-page[data-fin-page] .fin-di-template-row button,
.finance-page .inv-learning-grid article,
.finance-page .inv-provider-grid article,
.finance-page .fin-edu-outlook-summary > div,
.finance-page .fin-edu-roadmap-stats > div,
.finance-page .fin-board-col {
  padding: var(--fin-space-card);
}
.finance-page[data-fin-page] .fin-edu-detail-card { padding: 0; }
.finance-page .fin-edu-detail-main {
  padding: var(--fin-space-card);
  padding-right: calc(var(--fin-space-card) + 26px);
}
.finance-page :is(
  .fin-edu-detail-grid, .fin-edu-institution-grid,
  .fin-edu-milestone-list, .fin-edu-outlook-summary, .fin-edu-roadmap-stats
) { padding: var(--fin-space-card); }
.finance-page .fin-input-group .fin-input-grid,
.finance-page .fin-job-card .fin-input-grid,
.finance-page .fin-edu-outlook-assumptions .fin-input-grid {
  padding: 0;
}
.finance-page[data-fin-page] .fin-workspace-card:not(.fin-ledger-module):not(.fin-goals-module):not(.fin-recent-docs) > .fin-module-head {
  padding: var(--fin-space-card);
  gap: var(--fin-space-control);
}
.finance-page .fin-ledger-module > .fin-module-head,
.finance-page .fin-goals-module > .fin-module-head,
.finance-page .fin-recent-docs > .fin-module-head {
  padding: 0;
  margin: 0 0 var(--fin-space-section);
  gap: var(--fin-space-control);
}
.finance-page .fin-plan-card { margin-bottom: var(--fin-space-section); }
.finance-page .fin-plan-card:last-child { margin-bottom: 0; }
.finance-page .fin-di-docs .fin-recent-doc-row { padding: var(--fin-space-control) 0; }
.finance-page .fin-di-docs .fin-recent-doc-row + .fin-recent-doc-row { margin-top: 0; }

/* Related controls are closer than independent cards. Do not apply this to
   chart legends, heatmap cells, segmented switches, or text/icon internals. */
.finance-page :is(
  .fin-input-grid, .fin-proj-assumptions, .inv-field-grid,
  .fin-ov-actions, .fin-ov-action-buttons, .fin-repo-actions,
  .fin-job-import-actions, .fin-job-term-actions, .fin-layout-controls > div,
  .fin-seg-right, .inv-head-actions, .inv-type-rail,
  .fin-edu-directory-toolbar, .fin-di-actions, .fin-di-selector
) { gap: var(--fin-space-control); }
.finance-page .fin-module-head > div:last-child:not(:first-child) { gap: var(--fin-space-control); }
.finance-page .fin-job-term .fin-input-grid,
.finance-page .fin-edu-outlook-assumptions .fin-input-grid { gap: var(--fin-space-control); }
.finance-page .fin-repo-actions,
.finance-page .fin-job-import-actions { margin-top: var(--fin-space-section); }
.finance-page[data-fin-page] .fin-wrap > .fin-repo-actions,
.finance-page[data-fin-page] .fin-wrap > .fin-job-import-actions { margin-top: 0; }

/* Planner board/list are scroll workspaces rather than fin-wrap pages. Keep
   their scrolling and tree level/connector geometry while sharing card rhythm. */
.finance-page .finance-planner .board-container { padding-block: var(--fin-space-section); }
.finance-page .finance-planner .board {
  gap: var(--fin-space-section);
  padding-inline: var(--fin-page-gutter);
}
.finance-page .finance-planner .board.cols-2 .column { flex-basis: max(268px, calc((100% - var(--fin-grid-gap)) / 2)); }
.finance-page .finance-planner .board.cols-3 .column { flex-basis: max(268px, calc((100% - 2 * var(--fin-grid-gap)) / 3)); }
.finance-page .finance-planner .board.cols-4 .column { flex-basis: max(268px, calc((100% - 3 * var(--fin-grid-gap)) / 4)); }
.finance-page .finance-planner .board.cols-5 .column { flex-basis: max(268px, calc((100% - 4 * var(--fin-grid-gap)) / 5)); }
.finance-page .finance-planner .column + .column::before { left: calc(var(--fin-grid-gap) / -2); }
.finance-page .finance-planner .cards {
  gap: var(--fin-space-section);
  padding-inline: 0;
}
.finance-page[data-fin-page] .finance-planner .board .card,
.finance-page .finance-planner .tv-node-card,
.finance-page .finance-planner .tv-node-card.tv-root,
.finance-page .finance-planner .tv-compare-card {
  padding: var(--fin-space-card);
}
.finance-page .finance-planner .list-container {
  padding: var(--fin-space-section) var(--fin-page-gutter);
}
.finance-page .finance-planner .list-group { margin-bottom: var(--fin-space-section); }
.finance-page .finance-planner .tv-compare-grid { gap: var(--fin-space-section); }
.finance-page .finance-planner .tv-compare-wrap {
  padding: var(--fin-space-section) var(--fin-page-gutter) calc(4 * var(--fin-space-section));
}
.finance-page .finance-planner .tv-insight-kpis {
  gap: var(--fin-space-section);
  padding: var(--fin-space-card);
}
.finance-page .finance-planner .tv-insight-kpis > div,
.finance-page .finance-planner .tv-insights-head { padding: var(--fin-space-card); }
.finance-page .finance-planner .tv-insight-section {
  margin: 0 var(--fin-space-card) var(--fin-space-section);
  padding: var(--fin-space-card);
}
.finance-page .finance-planner .tv-actions { gap: var(--fin-space-control); }
.finance-page .finance-planner .tv-scenario-bar { padding-inline: var(--fin-page-gutter); }

@media (max-width: 860px) {
  .finance-page .fin-ov-mid-row { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
  .finance-page { --fin-page-gutter: 12px; }
}
