Commit Graph

49 Commits

Author SHA1 Message Date
Brummel f0173b80a2 Revert "fix(carousel): initialize Bootstrap carousels explicitly instead of relying on data-ride auto-init"
This reverts commit ad9b978248.
2026-05-21 11:40:36 +02:00
Brummel ad9b978248 fix(carousel): initialize Bootstrap carousels explicitly instead of relying on data-ride auto-init 2026-05-21 11:39:06 +02:00
Brummel 59c3bae5b2 fix(js): remove dead testimonialSlider/flexslider call from scripts.js
After the flexslider asset removal, scripts.js still tried to call
$('.testimonialSlider').flexslider(...) which threw a TypeError in the
browser console on every page. The element does not exist in this
rebuild and never will — testimonials were a feature of the original
Grav theme that we are not porting. Hero carousel and employees
carousel are both Bootstrap-3, auto-initialized via data-ride.

No functional impact on the page (every initializer before this block
already ran), just a noisy console error.
2026-05-21 11:33:51 +02:00
Brummel 96eea20c97 fix(carousel): remove flexslider, restore Bootstrap carousel symmetry
Root cause of the home carousel indicator dots drifting apart on slide
change: flexslider.css adds a rule `.carousel li { margin-right: 5px }`
that bleeds into Bootstrap's carousel because both use the `.carousel`
class. With Bootstrap's `.active { margin: 0 }` overriding the active
dot but flexslider's `margin-right: 5px` still applying to the inactive
dot, the gap between the two dots is asymmetric — 1px when active is on
the left, ~9px (1+4+4) when active is on the right.

Live's Grav asset pipeline doesn't bundle that flexslider rule (the
live HTML uses Bootstrap carousel exclusively too), so the bug is
stage-only.

We don't actually use flexslider — testimonialSlider was the only
target in scripts.js and it doesn't exist in our markup. Drop the css
link, the js script tag, and the static assets. Also revert the
previous attempt that forced active dots to inactive geometry; with
flexslider gone, Bootstrap's design (active 12px margin 0 + inactive
10px margin 1 → both outer 12px) keeps positions stable on its own,
which matches the live behavior the user observed.
2026-05-21 11:30:37 +02:00
Brummel a916010fc4 fix(css): keep hero carousel indicators visually symmetric
Bootstrap-3's default makes the active indicator 12x12 with margin 0
while inactive is 10x10 with margin 1px. With two slides the size and
margin swap shifts dot positions on every slide change, which reads as
the gap between dots changing. Force all dots to the inactive geometry
so only the fill toggles.
2026-05-21 11:21:18 +02:00
Brummel a135a02b5d fix(css): convert stray SCSS // line comments to CSS /* */ in praxis.css
The hand-edited live theme stylesheet uses // for line comments in
several places — valid in SCSS, invalid in CSS. Browsers recover but the
recovery can drop the surrounding declaration depending on context. The
body{} block at the top of the file in particular had `font-size: 14px;
//13px;` which on some browsers kills the whole rule, falling back to
Bootstrap's body defaults (Helvetica, line-height 1.428). Convert the
seven // line comments to /* */ so parsing is unambiguous.
2026-05-21 10:27:15 +02:00
Brummel 9c79d05ae6 fix(css): serve live theme CSS verbatim instead of diverging SCSS fork
The Sass file in sass/_praxis_theme.scss had drifted from the live
_style.css over the project's life — different line-heights (34/28 vs
24), padding overrides, restructured selectors, and a few sections that
the SCSS parser couldn't accept anyway (CSS // line-comments, missing
semicolons inherited from the original hand-written CSS).

For Phase 1 visual parity the correct source of truth is the live CSS,
not a re-edited copy. Drop compile_sass, ship the live _style.css as
/css/praxis.css straight from static/, and point base.html at it. This
restores the live vertical rhythm (paragraph spacing, banner padding)
that had been subtly off.
2026-05-21 10:14:59 +02:00
Brummel 385dce04e5 fix(images): match live <p>-wrapped img markup, drop width/height attrs
Two related fixes for the visual gaps reported after the previous pass:

1. Doctor portraits on /team were horizontally compressed. Cause: explicit
   width="200"/height="200" attributes interacted with Bootstrap's
   `img { display:block; max-width:100%; height:auto }` and `.float-right`
   padding to squish the rendered box. Dropping the attributes lets the
   browser use the resized image's intrinsic 200x200 dimensions, with the
   padding sitting around the image instead of inside its width.

2. Vertical rhythm was a few pixels off vs live. Cause: the live Grav
   markdown wraps standalone image references in <p> (markdown spec),
   adding the expected paragraph margin. Our shortcode emitted bare <img>
   with no wrapper, so the following <p> was visually slightly closer.
   Wrap the shortcode calls in <p> in the 6 service pages and 3 doctor
   blocks to restore the rhythm.
2026-05-21 10:03:04 +02:00
Brummel 181e9639ed fix(images): drop forced upscaling, match live image sizes
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)
2026-05-21 09:48:43 +02:00
Brummel 6b877b6100 fix(templates): strip base_url from nav hrefs and unescape image src URLs 2026-05-21 00:33:28 +02:00
Brummel e9040f66c5 fix(content): proper md headings and td closing tags in doctors.md 2026-05-21 00:33:26 +02:00
Brummel 4fd0042480 feat(team): restore employees carousel matching live markup 2026-05-21 00:33:24 +02:00
Brummel 9b18c2965f docs: spec + plan for visual parity pass 2 2026-05-21 00:33:19 +02:00
Brummel 69ae4e0a19 feat: switch base_url back to https now that the cert is provisioned 2026-05-21 00:18:28 +02:00
Brummel fb6d09cbcb feat: contact page template reads address/hours from config
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>
2026-05-21 00:10:55 +02:00
Brummel 2addc6b1ed fix: table tag mismatch in news block 2026-05-21 00:09:48 +02:00
Brummel f03b67e675 feat: home page section_title macros and restored markup
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
2026-05-21 00:08:25 +02:00
Brummel 75ef222792 feat: page template uses page_title macro 2026-05-21 00:06:36 +02:00
Brummel e6665f62f0 feat: section template uses page_title and anchored section_title macros 2026-05-21 00:05:00 +02:00
Brummel d0d6964ba1 feat: navbar logo image, Home link, active-state per route 2026-05-21 00:02:52 +02:00
Brummel 52165c7af5 feat: home title brand line, subpage prefix, keywords meta
- 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
2026-05-21 00:00:50 +02:00
Brummel 061c41696f feat: include footer partial in base layout 2026-05-20 23:59:05 +02:00
Brummel 8420e4c360 feat: add footer partial sourced from config.extra 2026-05-20 23:58:04 +02:00
Brummel 5a40499753 feat: add page_title macro for subpage banner 2026-05-20 23:56:28 +02:00
Brummel 478a77b61a feat: add section_title macro with optional anchor 2026-05-20 23:54:14 +02:00
Brummel 0114b17adf feat: add footer/contact data to config extra 2026-05-20 23:53:03 +02:00
Brummel c30563e38f feat: add practice logo asset 2026-05-20 23:51:45 +02:00
Brummel 44ed63b2fb docs: implementation plan for Visual Parity Pass 2026-05-20 23:48:42 +02:00
Brummel 6b6d79ffc9 docs: spec for Visual Parity Pass (Phase 1.5)
Restores markup contracts the theme CSS expects: section-title macro,
single-page-title banner, footer partial, navbar logo+Home link, plus
config.extra-driven footer values shared with the contact page.

Scope is markup, not modernization — Bootstrap 3 and theme CSS stay.
2026-05-20 23:43:53 +02:00
Brummel 3709c94d59 fix: remove Google Maps embed for GDPR compliance
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.
2026-05-20 23:43:45 +02:00
Brummel f5c633df42 fix: base_url to http:// until SSL cert is provisioned for preview subdomain 2026-05-20 23:13:02 +02:00
Brummel 8222108619 feat: robots.txt blocks all crawlers for staging 2026-05-20 22:49:26 +02:00
Brummel 441f3b7ed9 feat: legal (Impressum), contact, page template, and map shortcode
- 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)
2026-05-20 22:49:02 +02:00
Brummel 7deb8372cf feat: team section with doctors, employees, jobs
Migrates three Grav modular subpages to Zola child pages under
content/team/. Doctors page preserves inline `id="Riemann"`,
`id="Krey"`, `id="Malyga"` anchors so home-page team preview links
(/team#Riemann etc.) resolve correctly. Employees slides YAML converted
to plain markdown with img shortcodes. Jobs page carries `draft = true`
matching original `published: false`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 22:46:51 +02:00
Brummel 0658980b6e feat: section template stacking subpages as anchored articles 2026-05-20 22:44:38 +02:00
Brummel dd0777e2f5 feat: six service sub-pages with anchors matching home grid
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.
2026-05-20 22:44:08 +02:00
Brummel 9cf54f9459 feat: home page template with carousel, news, about, services, team sections
- 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
2026-05-20 22:39:59 +02:00
Brummel 218b82372d feat: news (Aktuelles) page with current content from grav 2026-05-20 22:38:01 +02:00
Brummel 141a6e7470 feat: home page content with carousel, about, services grid, team preview data 2026-05-20 22:37:02 +02:00
Brummel dd7e3b9b50 feat: base layout, head partial (with noindex), and navbar template 2026-05-20 22:35:30 +02:00
Brummel 804a3a813c feat: img shortcode with resize_image and lazy loading
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 22:33:07 +02:00
Brummel 24e2fa9d62 feat: lift praxis theme CSS into sass entry point
- 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/)
2026-05-20 22:31:29 +02:00
Brummel d79bafccb4 feat: import CSS, fonts, and images from grav theme 2026-05-20 22:29:49 +02:00
Brummel cce90b341b feat: import JS assets from x-corporation and praxis themes 2026-05-20 22:28:31 +02:00
Brummel 566c0554d3 chore: set practice phone and fax numbers from legal page 2026-05-20 22:28:09 +02:00
Brummel 733d7fea61 feat: zola skeleton with placeholder index
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 22:26:25 +02:00
Brummel 725535c8d7 docs: add README with build and deploy instructions 2026-05-20 22:24:22 +02:00
Brummel 39f20b305f chore: gitignore .env and IDE workspace dirs 2026-05-20 22:23:46 +02:00
Brummel 548aa12e78 chore: bootstrap repo with design spec and implementation plan 2026-05-20 22:21:29 +02:00