Data Primitives
DataTable, Figure, StatGrid, and refined code blocks — technical content components for dense documentation.
DataTable
A responsive, sortable table with sticky header, subtle zebra rows, and column alignment controls. Click any column header to sort.
Demand Forecast — Q3 2026 by Business Unit
| Business Unit | FTE Demand | Current Supply | Gap | Confidence | Risk Score | Action |
|---|---|---|---|---|---|---|
| Product Engineering | 142 | 128 | -14 | High | 3.2 | Hire + Redeploy |
| Data & Analytics | 67 | 41 | -26 | Medium | 6.8 | Build + Partner |
| Cloud Infrastructure | 38 | 35 | -3 | High | 1.1 | Internal fill |
| Security Operations | 22 | 14 | -8 | Low | 7.4 | Urgent hire |
| Design & UX | 31 | 29 | -2 | High | 0.8 | No action |
| Professional Services | 89 | 92 | +3 | Medium | 2.1 | Bench re-skill |
| Customer Success | 55 | 48 | -7 | Medium | 3.9 | Hire |
| Finance Operations | 18 | 18 | 0 | High | 0.2 | No action |
8 rows
Figures
Figures wrap images, charts, or diagrams with a numbered caption and optional download link.
Figure 1.Demand-to-Talent pipeline flow showing the four-stage conversion from business demand signals through competency matching to staffing decisions.
| Quarter | Engineering | Data | Security | Design |
|---|---|---|---|---|
| Q1 2025 | 82% | 74% | 68% | 79% |
| Q2 2025 | 85% | 71% | 63% | 81% |
| Q3 2025 | 83% | 78% | 59% | 80% |
| Q4 2025 | 87% | 80% | 55% | 84% |
Figure 2.Utilization trend across business units, Q1–Q4 2025. Security Operations shows a consistent downward trend, flagged for investigation.
DownloadStatGrid
Display 2–6 key metrics in a clean card layout with optional trend indicators.
Total FTE Demand
462
+8.2%Current Supply
405
-2.1%Aggregate Gap
-57
WideningAvg Confidence
72%
StableCritical Roles
14
+3 this quarterAvg Cost/FTE
$142K
-1.8%Code Blocks
Fenced code blocks use a minimal dark theme with a language label and copy button.
interface DemandSignal {
source: 'pipeline' | 'project' | 'strategic';
confidence: number; // 0-1
fteEquivalent: number;
timeHorizon: '0-3m' | '3-6m' | '6-12m';
businessUnit: string;
}
function weightByRisk(signal: DemandSignal): number {
const horizonWeight = {
'0-3m': 0.95,
'3-6m': 0.75,
'6-12m': 0.50,
};
return signal.fteEquivalent * signal.confidence * horizonWeight[signal.timeHorizon];
}
SELECT
bu.name AS business_unit,
SUM(d.fte_equivalent) AS raw_demand,
SUM(d.fte_equivalent * d.confidence * h.weight) AS risk_weighted_demand,
COUNT(DISTINCT d.role_id) AS unique_roles
FROM demand_signals d
JOIN business_units bu ON bu.id = d.business_unit_id
JOIN horizon_weights h ON h.horizon = d.time_horizon
WHERE d.active = true
GROUP BY bu.name
ORDER BY risk_weighted_demand DESC;
Inline code like DemandSignal or weightByRisk() uses a subtle bordered style that integrates cleanly with body text.