{# Operator-uploaded banner above the wordmark. Falls back to the
vendora.svg logo when no banner is set. The portal serves the
banner from /branding/banner — a 404 there means banner_url is
None and this whole block renders the logo. #}
{% if banner_url %}
{% else %}
{# Inline so fill="currentColor" lets CSS recolor via the
--accent theme variable — keeps logo and h1 tracking
each other when the operator changes the theme color. #}
{% endif %}
{{ title }}
{{ welcome_message or 'Insert coin or enter voucher code' }}
{# Trial flag (ADR-0015) — customer-facing, non-dismissible. The
expired/gated trial is handled by banner-blocked below (via
portal_status); this is the ACTIVE-trial countdown. #}
{% if trial and trial.is_trial and not trial.expired %}
⏳ FREE TRIAL — this WiFi vendo is on a trial and stops in
soon.
{% endif %}
{% if not portal_status.enabled %}
⚠ Vendo unavailable
{{ portal_status.message }}
{% else %}
{# Welcome-back RESUME offer: this device has a paused session with time
left — a deliberate Pause (we don't silently auto-reconnect those) or a
paused session a transient auto-reconnect miss left behind. Detected by
MAC on the server (resume_code). Lead with it so the customer taps
RESUME instead of re-entering their code; Insert Coin / voucher entry
stay below for starting a fresh session. #}
{% if resume_code %}
👋 Welcome back
You have a paused session with time left.
{{ resume_code }}
{% if resume_minutes_remaining %}
{{ resume_minutes_remaining }} min remaining
{% endif %}
{% endif %}
{# Own Insert Coin card — shown when this box has a coin slot
(device_role=vendo) OR the customer is on an ESP sub-vendo (the same
card drives the ESP slot via /api/sub/*). Hidden on a server's own
non-sub customers, who use voucher entry only (ADR-0017). #}
{% if is_sub_vendo or show_own_coin %}
🪙 Insert Coin
Tap below to start inserting coins
{% if rates %}
{% endif %}
0
Coins Inserted
Time left
—
Countdown resets on each coin
{# combo-preview is hidden until /api/status returns a real combo
(i.e. coins inserted + combo solvable). Customer never sees an
empty/placeholder state. Cancel was removed too — countdown
expiry + the server-side watchdog handle abandonment. #}
✓ Payment Received
Your voucher code
--------
Time purchased—
Valid for—
Combo—
💡 Save this code — you can reconnect with it later if your time isn't used up.