body had opaque background: var(--color-bg) which sat at z-index 0 and
covered the body::before harbor at z-index -3. Switched body to
transparent and put the fallback color on html instead.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Overlay was 0.72 multiply with very dark color-bg, which crushed the
photo to invisible. Dropped to 0.48 + bumped photo brightness 0.42→0.60.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Body uses the harbor as a fixed full-page photo with brightness 0.42 +
the theme's color overlay at 0.72 opacity (multiply blend) for the dusk
tint. Applies via the shared wevisto-design.css so both Twig pages and
the SPA get it in one go.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v2 tokens were duplicated: in design-v2.scss for the SPA, inlined in
login.html.twig for Twig. Two places to keep in sync.
Now: one shared /public/css/wevisto-design.css loaded by every Twig
standalone template AND linked from the SPA index.html. It contains:
- Brand constants (yellow / navy / fonts)
- v2 tokens with per-theme dusk overrides
- v2 base body bg + editorial typography defaults
- v2 overrides for the .card / .btn / .field-error / .logo-badge
patterns used across all Twig templates
The SPA's design-v2.scss now holds only SPA-specific composition:
side rail at desktop, frame card, theme swatch harbor preview,
settings polish. No token duplication.
Result: changing a v2 color in one file flows to every surface in both
worlds. Adding v2 to another Twig template only requires the existing
shared CSS link (already wired up to all 11 standalone templates).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>