diff --git a/client/src/components/Budget/CostsPanel.tsx b/client/src/components/Budget/CostsPanel.tsx
index 349eb3a39..857201a3f 100644
--- a/client/src/components/Budget/CostsPanel.tsx
+++ b/client/src/components/Budget/CostsPanel.tsx
@@ -38,6 +38,7 @@ import { AddRowButton, EditorField, GRID_2, INPUT, PillSelect, Segmented, TEXTAR
import { CountPill, EYEBROW } from '../Planner/bookings/bookingParts'
import CostsToolbar, { type CostsView } from './CostsToolbar'
import CostsTable, { CostsTableSummary } from './CostsTable'
+import SummaryCard from './CostsSummaryCard'
/** Split chips a row shows before the rest fold into "+N" (#1763). */
const SPLIT_CHIP_MAX = 6
@@ -1025,45 +1026,6 @@ export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps
}
// ── pure subcomponents ─────────────────────────────────────────────────────
-/** A tone's colour, from the status tokens the booking cards use. */
-const TONE_COLOR = { owe: 'var(--danger)', owed: 'var(--success)', unfinished: 'var(--warning)', total: 'var(--accent)' } as const
-
-/**
- * One of the four figures on top, drawn like a booking card: a head band tinted
- * by what the figure means, with its icon, name and a line on what it counts,
- * then the amount and a foot with who or what is behind it.
- */
-function SummaryCard({ label, sub, amount, currency, locale, icon, foot, tone }: { label: string; sub: string; amount: number; currency: string; locale: string; icon: React.ReactNode; foot: React.ReactNode; tone: 'owe' | 'owed' | 'total' | 'unfinished' }) {
- const color = TONE_COLOR[tone]
- // formatToParts keeps the design's "big integer + muted symbol/decimals" styling
- // while letting Intl place the symbol and pick separators per locale + currency.
- let parts: Intl.NumberFormatPart[] | null = null
- try {
- const d = currencyDecimals(currency)
- parts = new Intl.NumberFormat(currencyLocale(currency), { style: 'currency', currency: (currency || 'EUR').toUpperCase(), minimumFractionDigits: d, maximumFractionDigits: d }).formatToParts(amount || 0)
- } catch { parts = null }
- const big = (p: Intl.NumberFormatPart) => p.type === 'integer' || p.type === 'group' || p.type === 'minusSign'
- return (
-
-