## Purpose

Bridging printed cards into the digital system: scannable, print-quality QR codes pointing at short invitation URLs, with a typeable fallback code and source attribution.

## ADDED Requirements

### Requirement: Per-event open-link QR (FR-7.1, FR-7.2, FR-4.13, P0)
The system SHALL generate a QR for each event's open link at error-correction level H (survives decorative/partially obscured printing), downloadable as SVG (vector, print-ready at 300 DPI) and PNG at 1024px. The UI states the minimum recommended print size of 2.5cm × 2.5cm.

#### Scenario: Download event QR
- **WHEN** the admin downloads the Walima QR
- **THEN** SVG and 1024px PNG variants encoding the event's open URL at level H are produced

### Requirement: Short QR destination URLs (FR-7.4, P0)
QR destination URLs SHALL be short (e.g. `domain.com/e/walima`) to keep the QR low-density and easy to scan.

#### Scenario: Encoded URL
- **WHEN** an event QR is generated
- **THEN** the encoded URL is the short open-link form with no query parameters

### Requirement: Per-guest QR sheet (FR-7.3, P1)
Optionally, the system SHALL generate per-guest QRs encoding `/i/{token}` plus a printable sheet (guest name + QR) for personalised printed cards.

#### Scenario: Personalised sheet
- **WHEN** the admin generates a per-guest QR sheet for 50 selected guests
- **THEN** a printable document contains each guest's name beside their personal QR

### Requirement: Human-readable fallback code (FR-7.5, P1)
Printed materials SHALL support a fallback line under the QR: "Or visit domain.com/rsvp and enter code A7K2M9" — the 6-char short code resolves to the same invitation.

#### Scenario: Code entry
- **WHEN** a guest enters a valid short code on the fallback page
- **THEN** they land on the same invitation page as the QR would open

### Requirement: Scan source attribution (FR-7.6, P1)
Registrations arriving through the QR path SHALL be tagged `invited_via = print_qr` so the host can see how printed cards performed.

#### Scenario: QR registration tagged
- **WHEN** a walk-in guest registers after scanning a printed QR
- **THEN** their invitation records `invited_via = print_qr`
