// HTML-first activity-report template — the print-ready layout that the hub's
// "Download PDF" button renders to a PDF (OPL-2598). It is the editorial,
// paper-styled counterpart to the on-screen report on `/reports`, driven by the
// SAME `ActivityReport` view model (`buildActivityReport` / the `generateReport`
// capability), so the document a user downloads reflects exactly what they saw.
//
// Authored to feed the shared HTML -> PDF pipeline (`@scribe.cool/core/pdf`)
// without modification: it carries its own scoped, print-ready CSS (`@page`,
// break-inside protection, orphan/widow control) under `.scribe-report`.
//
// Design language: this is Scribe's OWN visual identity in print, not a
// generic editorial document — Geist Mono (the app's universal face) with
// Geist Pixel Square for the masthead only, the light-mode ink/paper/border
// palette, the cyan hue-195 accent, and the app's "bracket corner tick" panel
// aesthetic (four small corner ticks, never a full border box). Fonts are
// embedded as base64 woff2 (`./report-fonts`, generated from the `geist` npm
// package) since the serverless Chromium PDF render has no installed fonts
// and no network access — everything must be self-contained.
//
// Design rules (mirroring the vetted invoice templates):
// - NEVER hardcode brand colors inline. Every color is a `--rep-*` CSS
// variable. User/org-chosen colors come from `ReportTemplateConfig`; the
// neutral paper/ink/border palette has its single source of truth in
// `reportConfigToCssVars`. The template references `var(--rep-*)` only,
// except for the untrusted per-project color (sanitized at the render
// boundary — see `sanitizeHexColor`) and font data URIs (build-time
// constants, not user input).
// - All report content (project names, highlights, labels, company name) is
// rendered as React-escaped children — never interpolated into raw HTML or
// the `
{children}
);
}
// ── Template ───────────────────────────────────────────────
/**
* The print-ready activity report. Consumes the framework-free `ActivityReport`
* view model. Every user/report value (project names, highlights, labels,
* device names, company name) is a React-escaped child, and every color is a
* `--rep-*` CSS variable, so untrusted content can never break out of the
* markup or the `