From a6f4ca88a456a6362284313bad6fa06dbfd99283 Mon Sep 17 00:00:00 2001
From: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com>
Date: Wed, 20 May 2026 17:58:55 +0200
Subject: [PATCH] fix(pitch-print): ComplAI brand, em-dash centering, fund
fallback 400k
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Three universal fixes before per-slide redesigns:
1. Brand: new JSX component renders the product name correctly —
'Compl' in inherited text color, 'AI' in violet (#7c3aed), no slashes.
Replaces the previous 'BreakPilot COMPL/AI/' literal in the Executive
Summary p1 title. Page primitive's title prop now accepts ReactNode so
JSX brand wordmarks work anywhere a title would.
2. Em-dash centering: Bullets primitive previously placed each em-dash
marker via absolute positioning with a hardcoded 'top: 4pt', which drifted
relative to font-size and looked off-center in the rendered PDF. Now uses
display:flex on the
with a fixed-width column that vertically centers
the 0.5pt rule on the first line height of the text.
3. Funding fallback: cover + The Ask now default to 400_000 (was 1_000_000)
when no funding amount is in the data. New base case is a €400k
Wandeldarlehen, not €1M equity.
Co-Authored-By: Claude Opus 4.7
---
.../_components/PrintIntroSlides.tsx | 6 +--
.../[versionId]/_components/PrintLayout.tsx | 37 ++++++++++++++++---
.../_components/PrintMarketSlides.tsx | 2 +-
3 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/pitch-deck/app/pitch-print/[versionId]/_components/PrintIntroSlides.tsx b/pitch-deck/app/pitch-print/[versionId]/_components/PrintIntroSlides.tsx
index eb531c7..f0f095e 100644
--- a/pitch-deck/app/pitch-print/[versionId]/_components/PrintIntroSlides.tsx
+++ b/pitch-deck/app/pitch-print/[versionId]/_components/PrintIntroSlides.tsx
@@ -1,5 +1,5 @@
import { Language, PitchCompany, PitchFunding, PitchMarket } from '@/lib/types'
-import { Page, KpiRow, TwoCol, ThreeCol, FourCol, Panel, Bullets, Callout, COLORS, Divider } from './PrintLayout'
+import { Page, KpiRow, TwoCol, ThreeCol, FourCol, Panel, Bullets, Callout, COLORS, Divider, ComplAI } from './PrintLayout'
interface SlideBase { lang: Language; pageNum: number; totalPages: number; versionName: string }
@@ -8,7 +8,7 @@ interface SlideBase { lang: Language; pageNum: number; totalPages: number; versi
export function PrintCoverPage({ company, funding, lang, versionName }: { company: PitchCompany; funding: PitchFunding; lang: Language; versionName: string }) {
const de = lang === 'de'
const instrument = funding?.instrument || 'Pre-Seed'
- const amount = funding?.amount_eur || 1_000_000
+ const amount = funding?.amount_eur || 400_000
const tagline = de ? (company?.tagline_de || 'Kontinuierliche Compliance für europäische Unternehmen.') : (company?.tagline_en || 'Continuous compliance for European companies.')
const amountLabel = amount >= 1_000_000
? '€' + (amount / 1_000_000).toFixed(1).replace(/\.0$/, '') + 'M'
@@ -128,7 +128,7 @@ export function PrintExecSummaryPage1({ market, lang, pageNum, totalPages, versi
const fmt = (v?: number) => v ? (v >= 1e9 ? `${(v / 1e9).toFixed(1).replace('.', ',')} Mrd.` : `${(v / 1e6).toFixed(0)} Mio.`) : '—'
return (
-
+ BreakPilot >} subtitle={de ? 'DSGVO-konforme KI-Plattform, kontinuierliches Sicherheitsscanning und intelligente Compliance-Automatisierung. 25.000+ atomare Prüfaspekte, 380+ Regularien, EU-souverän gehostet.' : 'GDPR-compliant AI platform, continuous security scanning and intelligent compliance automation. 25,000+ atomic audit aspects, 380+ regulations, EU-sovereign hosted.'} pageNum={pageNum} totalPages={totalPages} versionName={versionName}>
+ {prefix && <>BreakPilot >}
+ ComplAI
+ >
+ )
+}
+
/* ===== PAGE WRAPPER ===== */
interface PageProps {
kicker: string // "03"
section: string // "DAS PROBLEM"
- title: string // "Deutsche Unternehmen wollen KI ..."
- subtitle?: string
+ title: React.ReactNode // string or JSX (e.g. usage)
+ subtitle?: React.ReactNode
pageNum: number
totalPages: number
versionName: string
@@ -236,12 +252,23 @@ export function Bullets({ items, dense, tone = 'neutral' }: BulletsProps) {
: tone === 'negative' ? COLORS.red600
: tone === 'accent' ? COLORS.indigo600
: COLORS.slate500
+ /**
+ * Em-dash marker uses display:flex to keep the rule vertically centered on
+ * the first line of text — previously the `top: 4pt` absolute positioning
+ * drifted relative to font size (looked off-center on the rendered PDF).
+ * The marker now sits in a fixed-width column at the line height of the text.
+ */
+ const fontSize = dense ? '8.5pt' : '9pt'
+ const lineH = 1.5
return (
{items.map((item, i) => (
- -
-
- {item}
+
-
+ {/* The dash sits on the first line: line-height pad above + 0.5pt rule */}
+
+
+
+ {item}
))}
diff --git a/pitch-deck/app/pitch-print/[versionId]/_components/PrintMarketSlides.tsx b/pitch-deck/app/pitch-print/[versionId]/_components/PrintMarketSlides.tsx
index 0c5782e..5385cd7 100644
--- a/pitch-deck/app/pitch-print/[versionId]/_components/PrintMarketSlides.tsx
+++ b/pitch-deck/app/pitch-print/[versionId]/_components/PrintMarketSlides.tsx
@@ -238,7 +238,7 @@ function formatFunding(amount: number): string {
export function PrintTheAskPage({ funding, lang, pageNum, totalPages, versionName }: SlideBase & { funding: PitchFunding }) {
const de = lang === 'de'
- const amount = funding?.amount_eur || 1_000_000
+ const amount = funding?.amount_eur || 400_000
const instrument = funding?.instrument || (de ? 'Wandeldarlehen' : 'Convertible Loan')
const isConvertible = (instrument || '').toLowerCase().includes('wandeldarlehen') ||
(instrument || '').toLowerCase().includes('convertible') ||