{# 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 %} {% 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 %}
OR ENTER CODE
{% endif %}

🔑 Voucher Code

{% endif %}
{% if rates %} {% endif %}