Skip to main content

Finance Overview

Revenue & finance · Light · Single page

Finance reporting that still looks like a designed document. Useful when the numbers have to be exact and the page has to be presentable at the same time.

What makes it work

  • A profit and loss waterfall shows how the top line becomes the bottom line in one chart.
  • The statement table carries inline sparklines, so every row has its own trend without a second chart.
  • A cash runway panel sits apart from the statement, which stops a forward-looking number from being read as history.
  • Violet branding is applied to headers and accents only. The numbers stay in neutral text.

The views

This dashboard is a single scrolling page, shown in full below.

Finance Overview: Financial Overview

See it live

Open the live dashboard to click through it yourself. No Holistics account needed.

Theme code

The theme this dashboard actually uses, written out as a reusable PageTheme. Paste it into a .theme.aml file under Development > Library > Themes to reuse it across your own dashboards, or inline it as a single dashboard's theme: property. Chart colour palettes are set separately, so they are not included here.

finance_overview_theme.theme.aml
PageTheme finance_overview_theme {
background {
bg_color: "#E0D9FF"
}
canvas {
border {
border_color: "#B8C2DE"
border_style: "solid"
border_width {
top: 2
left: 2
right: 2
bottom: 2
}
border_radius {
top_left: 12
top_right: 12
bottom_left: 12
bottom_right: 12
}
}
shadow: "md"
opacity: 1
background {
bg_color: "#FFFFFF"
}
}
block {
text {
font_size: 14
font_color: "#1B2559"
font_style: "normal"
font_family: "Plus Jakarta Sans"
font_weight: "normal"
}
label {
font_size: 14
font_color: "#1B2559"
font_style: "normal"
font_family: "Plus Jakarta Sans"
font_weight: "semibold"
}
border {
border_color: "#E2E8F0"
border_style: "solid"
border_width {
top: 1
left: 1
right: 1
bottom: 1
}
border_radius {
top_left: 12
top_right: 12
bottom_left: 12
bottom_right: 12
}
}
shadow: "sm"
opacity: 1
padding {
top: 20
left: 20
right: 20
bottom: 20
}
background {
bg_color: "#FFFFFF"
}
}
viz {
table {
header {
bg_color: "#7638FF"
font_size: 14
font_color: "#FFFFFF"
font_weight: "semibold"
}
general {
bg_color: "#D3C4FF"
font_size: 14
font_color: "#1B2559"
font_family: "Plus Jakarta Sans"
hover_color: "#F5F0FF"
banding_color: "#FFFFFF"
grid_color: "#C9D0E8"
border_color: "#C9D0E8"
border_width: 1
}
sub_title {
font_size: 14
font_color: "#FFFFFF"
font_weight: "normal"
}
sub_header {
bg_color: "#F0EBFF"
font_size: 14
font_color: "#1B2559"
font_weight: "semibold"
}
}
}
}

The theme is paired with custom CSS, which lives beside it rather than inside it. See Custom CSS for where it goes.

Custom CSS
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap');

/* ── Text block reset ─────────────────────────────────────────────────── */
.dac-text-block {
background-color: transparent !important;
box-shadow: none !important;
border: none !important;
}

/* H1 — Section label: uppercase purple */
.dac-text-block h1 {
font-family: 'Plus Jakarta Sans', sans-serif !important;
font-size: 20px !important;
font-weight: 700 !important;
letter-spacing: 2px !important;
text-transform: uppercase !important;
color: #7638FF !important;
margin: 0 0 6px 0 !important;
line-height: 1.2 !important;
}

/* H2 — Dashboard / section title */
.dac-text-block h2 {
font-family: 'Plus Jakarta Sans', sans-serif !important;
font-size: 26px !important;
font-weight: 700 !important;
color: #1B2559 !important;
margin: 0 0 4px 0 !important;
letter-spacing: -0.3px !important;
}

/* H3 — Hero KPI display number */
.dac-text-block h3 {
font-family: 'Space Grotesk', sans-serif !important;
font-size: 48px !important;
font-weight: 700 !important;
color: #1B2559 !important;
margin: 0 0 4px 0 !important;
line-height: 1.2 !important;
letter-spacing: -1.5px !important;
text-align: left !important;
}

/* P — Supporting / description text */
.dac-text-block p {
font-family: 'Plus Jakarta Sans', sans-serif !important;
font-size: 14px !important;
color: #6B7A99 !important;
line-height: 1.6 !important;
margin: 0 !important;
}

/* ── Section header with accent bar ─────────────────────────────────── */
.dac-text-block .section-header {
display: flex;
align-items: center;
gap: 12px;
}

.dac-text-block .accent-bar {
width: 3px;
height: 24px;
background: #7638FF;
border-radius: 2px;
flex-shrink: 0;
}

/* ── Section separator line ──────────────────────────────────────────── */
/* Usage in a Text Block: <hr> */
.dac-text-block hr {
border: none !important;
border-top: 1.5px solid #E2E8F0 !important;
margin: 0 !important;
}

/* ── KPI metric value ────────────────────────────────────────────────── */
.h-kpi-metric-kpi {
font-family: 'Space Grotesk', sans-serif !important;
font-size: 42px !important;
font-weight: 700 !important;
color: #1B2559 !important;
letter-spacing: -1px !important;
}

/* KPI metric label (sits below the number) */
.h-kpi-metric-label {
font-family: 'Plus Jakarta Sans', sans-serif !important;
font-size: 14px !important;
font-weight: 400 !important;
line-height: 3 !important;
color: #6B7A99 !important;
margin-bottom: 16px !important;
}


/* ── Chart / viz block title ─────────────────────────────────────────── */
.dac-viz-block-label {
font-family: 'Plus Jakarta Sans', sans-serif !important;
font-size: 16px !important;
font-weight: 600 !important;
font-style: normal !important;
color: #1B2559 !important;
letter-spacing: -0.2px !important;
display: flex !important;
align-items: center !important;
padding-top: 16px !important;
padding-bottom: 12px !important;
padding-left: 8px !important;
}

.dac-canvas {
background-color: #FFFFFF !important;
}

/* ── P&L Table: section separator on parent rows only ───────────────── */
/*
* Parent rows (Total Revenue, COGS, Gross Profit…) use a BAR sparkline.
* Sub-rows (SaaS Subscriptions…) use a LINE sparkline.
* :has([data-ci="ci-sparkline-bar"]) reliably targets only parent rows.
*/
/* Background on the row itself — covers full width including absolute-positioned cells */
.ag-row:has([data-ci="ci-sparkline-bar"]) {
background-color: #F7F5FF !important;
width: 100% !important;
min-width: 100% !important;
}

/* Border-top and font on the cells */
.ag-row:has([data-ci="ci-sparkline-bar"]) .ag-cell {
border-top: 1.5px solid #C9D0E8 !important;
font-weight: 600 !important;
color: #1B2559 !important;
background-color: transparent !important;
}

/* Remove top border from the very first parent row (Total Revenue) */
.ag-row-first:has([data-ci="ci-sparkline-bar"]) .ag-cell {
border-top: none !important;
}

/* Right pane — parent row background */
.ag-center-cols-container [role="row"][row-index="0"],
.ag-center-cols-container [role="row"][row-index="4"],
.ag-center-cols-container [role="row"][row-index="5"],
.ag-center-cols-container [role="row"][row-index="6"],
.ag-center-cols-container [role="row"][row-index="11"],
.ag-center-cols-container [role="row"][row-index="14"] {
background-color: #F7F5FF !important;
}

/* Font on all parent rows */
.ag-center-cols-container [role="row"][row-index="0"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="4"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="5"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="6"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="11"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="14"] .ag-cell {
font-weight: 600 !important;
color: #1B2559 !important;
}

/* Border-top on all except first row */
.ag-center-cols-container [role="row"][row-index="4"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="5"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="6"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="11"] .ag-cell,
.ag-center-cols-container [role="row"][row-index="14"] .ag-cell {
border-top: 1.5px solid #C9D0E8 !important;
}

Open Markdown
Let us know what you think about this document :)