- Global typography: Century Gothic, left-aligned text, before-margins only
- Enrollment steps: Telegram as plain text, auto-generate QR, ensure Step 2 website link
- Program options: Auto-pair REGULAR/PRIME when inconsistent
- Qualification section: Red title (#FF5E5E), bold key terms (GPA, regions)
- Program contributions: Green headers, black bold body text
- Table styling: Left-aligned, no row shading, column-aware coloring
- University section: Standardized benefits heading, remove image captions
- Right-side ribbon: Vertically centered to avoid header/footer
- Add consistency warnings for REGULAR/PRIME pairing
- All 89 tests pass
- Section labels: zero top-margin on first-child in section-block
- Bullets: remove duplicate disc via list-style:none!important, remove inline bullet char in school_profile
- Page numbers: light-blue (#1C75BC) footer color
- Remove 'Summary info' heading from university templates
- Bump all dependency floors to current stable versions
- Dockerfile base image python:3.11-slim -> 3.12-slim
feat: overlay-based header+label on content pages only (pypdf merge)
- Render base PDF with no header/label via Playwright
- Build single-page overlay PDF with header image + label
- Stamp overlay onto content pages (skip cover/toc + final image pages)
- Header flush at top edge, label at right edge (1.65cm x 23.42cm)
- Pages 1-2: clean (no header, no label)
- Final image pages: clean (no header, no label)
- Added pypdf>=4.0.0 dependency
fix: label at right:0 inside content area with padding-right, add debug log
- position:fixed label (1.65cm x 23.42cm) in right margin zone
- JS expands cover/fullpage images to fill margins, concealing label
- Remote URL fallback when local label.jpeg unavailable
fix: position right-side label in margin zone (1.65cm x 23.42cm, right:-2.54cm)
- All margins set to 2.54cm on all four sides
- Body: Century Gothic 10pt, justified, line-height 1.4
- H1: 12pt bold blue #1C75BC, H2+: 12pt bold green #1A9970
- Auto-bold REGULAR, PRIME, dollar amounts via emphasize_keywords()
- Benefits: green #00F600 header, cyan #00FCFC items
- Fixed critical missing } in CSS reset block
- Fixed benefit-text/benefit-bullet class mismatches
- Moved inline styles to CSS classes
- Updated tests to match spec changes (93/93 pass)