The image macro was resizing every call to its width arg, including
upscaling 270x180 service thumbnails to 600x400 and rendering 400x400
doctor portraits at full size. Live serves service thumbs at native
270x180 (CSS-floated) and doctor portraits at 200x200.
- image macro: width=0 (default) skips resize, emits raw <img> with no
width/height — lets theme CSS do the sizing, matching live pattern
- img shortcode: defaults width to 0 so callers can omit it
- service grid (home + 7 service pages): drop width=600
- doctor portraits on /team: width=200 (matches live render)
Moves hardcoded address, phone/fax/email, and Sprechzeiten table out of
content/contact.md into a dedicated contact.html template that renders
them from config.extra — sharing a single source of truth with the footer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Restores the markup contracts the theme CSS expects on the home page:
- imports section_title macro (st) and calls it on all four sections
- news/about/services/team sections get bordered-icon headings via macro
- service cards use thumbnail/caption/clearfix structure (2-col grid)
- team portraits use figure/figcaption with small for position
- gray-bg (not bg-gray) on the services section
- Suppress section title prefix on home page (section.path == '/')
- Compose site_title from config.title + config.extra.doctors
- Add keywords meta tag from config.extra.keywords
The live site had the Maps iframe removed because third-party embeds
trigger cookie-consent obligations under GDPR. The Phase-1 1:1 pass
accidentally reintroduced it; this commit removes:
- the inline iframe on the home page (templates/index.html)
- the map() shortcode (templates/shortcodes/map.html)
- the {{ map() }} call on the contact page (content/contact.md)
Do not re-add without a working consent gate.
- page.html generic single-page template
- legal.md with slug=impressum to match live URL
- contact.md with practice info, hours, map embed
- map shortcode (iframe-based) usable from markdown
- Home template inlines the map iframe directly (shortcodes can't be called from templates)
Migrated all six service pages from Grav to Zola format:
- YAML frontmatter → TOML with weight and extra.anchor
- Grav image refs → {{ img() }} shortcode calls
- [fa=external-link /] → <i class="fa fa-external-link"></i>
- Linked image in HV page wrapped with <a href> HTML tag
Anchors HV, Corona, Vorsorge, Diagnostik, Kardio, Diabetologie match
the home page service grid links established in commit 9cf54f9.
- Extends base.html, uses shared image macro for resize_image
- Refactored img shortcode to forward to macros/image.html (DRY)
- News pulled via get_page from content/news.md
- Notfall section skipped (was unpublished in grav)
- Map call commented out until shortcode lands in Task 20
- main.scss imports the praxis theme partial
- Fix missing semicolon at line 1836 that SCSS strict mode rejected
- Bootstrap and mobile-menu remain separate <link> tags (loaded from /css/)