diff --git a/src/components/admin/billing/invoice-detail-view.tsx b/src/components/admin/billing/invoice-detail-view.tsx
index 57a6390..88eebe2 100644
--- a/src/components/admin/billing/invoice-detail-view.tsx
+++ b/src/components/admin/billing/invoice-detail-view.tsx
@@ -356,45 +356,60 @@ export function InvoiceDetailView({ detail, creditNotes = [] }: Props) {
max: remainingRefundable.toFixed(2),
})}
-
)}
diff --git a/src/lib/billing-pdf.tsx b/src/lib/billing-pdf.tsx
index 3484a2c..d9e6096 100644
--- a/src/lib/billing-pdf.tsx
+++ b/src/lib/billing-pdf.tsx
@@ -31,44 +31,18 @@ import {
Text,
View,
StyleSheet,
- Svg,
- Polygon,
- Polyline,
renderToBuffer,
} from "@react-pdf/renderer";
import type { Invoice, InvoiceLine, InvoiceLineKind } from "@/types";
+import { BRAND, Logo } from "./pdf-brand";
// ---------------------------------------------------------------------------
-// Brand constants — edit here to tweak look without touching layout
+// Brand: imported from lib/pdf-brand. Edit there to change issuer
+// info, colours, or the logo. Both billing-pdf.tsx and credit-note-pdf.tsx
+// share the same source of truth so a brand change applies to every
+// PDF the portal produces.
// ---------------------------------------------------------------------------
-const BRAND = {
- name: "PieCed IT",
- // Primary emerald — matches the logo SVG fill (#10B981).
- primary: "#10B981",
- // Slightly darker emerald for headings.
- primaryDark: "#0a8060",
- textColor: "#1a1a1a",
- mutedColor: "#666",
- borderColor: "#d4d4d4",
- // Issuer block — change these to your real legal info.
- issuer: {
- legalName: "PieCed IT",
- addressLine1: "Cedric Mosimann",
- addressLine2: "[Strasse Nr.]",
- postalCity: "[PLZ] Basel",
- country: "Switzerland",
- email: "billing@pieced.ch",
- web: "pieced.ch",
- // Show "MWST-Nr. ..." on PDF when set.
- vatNumber: null as string | null,
- // Bank instructions — Phase 7 replaces with QR-bill.
- bankName: "[Bank name]",
- bankIban: "[CHxx xxxx xxxx xxxx xxxx x]",
- bankBic: "[BIC]",
- },
-};
-
// ---------------------------------------------------------------------------
// Localized strings
// ---------------------------------------------------------------------------
@@ -358,62 +332,6 @@ const styles = StyleSheet.create({
});
// ---------------------------------------------------------------------------
-// Logo — inlined SVG primitives
-// ---------------------------------------------------------------------------
-
-/**
- * PieCed honeycomb logo. Re-renders the same 6-hex glyph as the
- * portal's `public/pieced-logo.svg` using React-PDF's SVG support.
- * Width/height are independent of the original viewBox so we can
- * scale it without losing stroke quality.
- */
-const Logo = ({ size = 60 }: { size?: number }) => (
-