# CRR brand Canonical CRR visual assets and framework-independent CSS, consumed by both apps. - `assets/logo.png`: the original Tournament logo, copied without conversion. - `assets/favicon.png`: the original Tournament favicon. - `styles/tokens.css`: shared palette around `#ed1c24`, font stack, radii, shadows, spacing and focus-ring values. - `styles/base.css`: box sizing, body defaults, links, controls, focus and tables. - `styles/components.css`: the existing primary/quiet button, panel and error alert patterns used by both Vue and Jinja. Existing class names are supported directly so templates retain their own structure. Load tokens, base and components **before** the application's own stylesheet. Application CSS owns sizes, typography hierarchy, responsive layout, control spacing, specialist badges and print-card dimensions. Local variable names are aliases of `--crr-*` tokens, keeping existing styles/components compatible. Tournament resolves `@crr-brand` through Vite and uses `assets/` as its public asset directory. Shifts mounts this directory at `/brand` using FastAPI `StaticFiles`; Jinja uses `url_for('brand', ...)` so `ROOT_PATH` is respected. Its PDF exporter reads this same logo. Both Docker builds copy the package from the repository-root context, preserving its relative path to each application. Brand-only changes trigger both application CI jobs. This package contains no domain code or UI framework components and has no independent public version. After changing branding, run both app checks/builds and `make branding-visual-check` to compare desktop/mobile geometry and Tournament print cards against the legacy baseline. `make migration-visual-check` compares rendered pages to the approved Phase 2 screenshots. Baseline staging and Playwright prerequisites are documented in `migration/README.md`.