User hat die zweite ZIP geliefert: 'Scorecard Formate.html' mit
Spec fuer drei zusaetzliche Formate. Plus Anmerkung: 'doppelte Borders'
und 'Export viel zu gross'.
Vier Formate jetzt im selben Template scorecard_portrait.html:
- format=portrait (DEFAULT) → 1080×1350 · 4:5 · IG-Feed
- format=square → 1080×1080 · 1:1 · IG/LinkedIn
- format=story → 1080×1920 · 9:16 · Story/Reels
- format=wide → 1920×1080 · 16:9 · OG/Slide/Twitter
Wide hat 2-spaltigen Body-Aufbau (Story-Spalte links, Daten-Spalte
rechts, Header+Footer ueber volle Breite), die anderen drei nutzen
das gemeinsame 1-spaltige Body-Markup. Aller Formate teilen sich die
Daten-Aggregation (Chips, Fraktions-Bars, Beschluss).
Bug-Fixes aus dem User-Feedback:
1. 'Doppelte Borders um die Partei und Field-Chips' — die 1.5-px-
Borders im Cloud-Design wurden von WeasyPrint als zwei einzelne
1-px-Linien gerendert (Subpixel-Bug bei fractional border-widths).
Alle 1.5px → 2px (integer).
2. 'Export viel zu gross' — der Download-Button hatte scale=2 als
Default → 2160×2700 PNG-Pixel. Fuer IG-Upload reicht 1080×1350
exakt (Instagram skaliert hochgeladene Bilder ohnehin). Default
jetzt scale=1, der ?scale=2-Param bleibt verfuegbar fuer Retina.
3. Statusleiste mit Format-Switcher: vier Pills (4:5 Feed / 1:1 Square
/ 9:16 Story / 16:9 Wide), aktuelles Format hervorgehoben. Klick
wechselt URL-format-Param. Plus PNG- und PDF-Download-Buttons,
die das aktuelle Format mitfuehren.
main.py: dimensions-Mapping um story+wide erweitert in
scorecard_template UND _render_scorecard_pdf. Format-Validation
ebenfalls erweitert. format-Variable an's Template durchgeschleift
(damit der Template-Switch fuer card-portrait/square/story/wide
funktioniert).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>