diff --git a/docs/specs/2026-05-20-praxis-visual-parity-design.md b/docs/specs/2026-05-20-praxis-visual-parity-design.md new file mode 100644 index 0000000..1f5d063 --- /dev/null +++ b/docs/specs/2026-05-20-praxis-visual-parity-design.md @@ -0,0 +1,193 @@ +# Praxis Visual Parity Pass — Design Spec + +**Status:** draft +**Date:** 2026-05-20 +**Phase:** 1.5 (finish-up after Phase 1 sign-off) + +## Context + +Phase 1 produced a Zola-based staging site at `http://preview.praxis-am-lienhardplatz.de/` that builds, deploys, and renders all content from the live Grav site. The user signed off Phase 1 acknowledging "MENGE Unterschiede" against the live look — accepting them as follow-up work. + +A visual diff against the live HTML (`https://www.praxis-am-lienhardplatz.de/`) revealed ten material gaps that prevent the theme CSS in `sass/_praxis_theme.scss` from applying. The theme CSS itself was lifted verbatim from the Grav theme, so making it work is mostly a question of restoring the markup contracts (class names, element nesting) it expects. + +This spec covers that visual-parity pass: closing the markup gaps so the staging site **looks** identical to the live site, while keeping the HTML clean (no Grav-era quirks reproduced). + +## Goals + +- The staging site, rendered in a browser, is visually indistinguishable from the live site on the four routes that exist on both sides: `/`, `/services`, `/team`, `/kontakt` (live) ↔ `/contact` (staging), `/impressum`. +- The theme CSS in `sass/_praxis_theme.scss` is not modified — markup conforms to it. +- Recurring patterns (section-title, single-page-title, footer) are factored into Tera macros / partials so Phase-2 modernization has a single point of change. +- Footer content (hours, contact, address) lives in `config.toml` `[extra]` as a single source of truth, shared by the footer partial and the `/contact` page. + +## Non-Goals (deferred to Phase 2) + +- Markup modernization: no semantic HTML5 rewrite, no CSS Grid, no replacement of Bootstrap 3 grid classes. +- URL escaping in templates (`/`): cosmetic in view-source, functional in browser. Phase 2. +- Content drift (e.g., hours displayed on home news section vs. footer): content is the user's responsibility, not markup parity. +- Accessibility audit, WCAG fixes, alt-text rewrite. +- Reproducing Grav HTML quirks (double `
...
` wrappers, `