Acceptance Criteria
- SVG file lives at
packages/lumina/assets/logo/prism.svg - Geometry matches SPEC-050: outer triangle
(10, 16) → (90, 16) → (50, 86); cuts at top-x 20.19, 30.37, 40.56; apex fill (40.56, 16) → (90, 16) → (65.28, 59.26) - Stroke width:
3. Stroke linecap: round. Stroke linejoin: round. - SVG uses
currentColor for stroke and fill so it inherits whatever colour the surrounding context provides — works on dark navy, on neutral, on cream without per-context files. An embedded :where(svg) rule (0-specificity) provides a prefers-color-scheme-aware fallback colour so the same file also works as a standalone favicon where there's no CSS context to inherit from. aria-label="refrakt" and role="img" for accessibility; decorative uses can override with aria-hidden="true"- ViewBox
0 0 100 100, no width/height attributes (lets CSS size it) - Source SVG is hand-authored and human-readable (no exporter cruft); the file is committed as written
- Lumina exposes the asset via the package's
exports map (./assets/logo/prism.svg and ./assets/* patterns) so downstream sites can import it directly from @refrakt-md/lumina
Approach
The SVG itself is small — a closed-path outer triangle, three line segments for the cuts, and a closed filled triangle for the apex. The spec contains the exact coordinates.
Decision worth capturing during implementation: does this file ship as a static asset, or as a component? For favicons it must be a file (consumed by the browser); for the header it can be either. Lean: ship as a file AND export a tiny Svelte component that inlines it, so both consumption paths work.
The currentColor choice matters — it means the same SVG works against dark navy (today's site) and the neutral-default surface (post-WORK-200) without per-mode variants. The stroke and fill both reference currentColor; CSS or the parent element controls the actual colour.
Dependencies
None. This is independent work and can run in parallel with SPEC-048 implementation.
References
- SPEC-050 — full geometry, decision rationale, and previews
site/static/ or wherever the current logo lives — file to identify and eventually replace