{# Trial ribbon (ADR-0015) — operator-facing, on every admin page. trial_status() is a Jinja global (vendora_admin) so no handler needs to thread it. #} {% set _trial = trial_status() %} {% if _trial.is_trial %}
{% if _trial.expired %}⚠ Free trial has ENDED — this vendo is gated until a license credit is activated.{% else %}⏳ FREE TRIAL — remaining{% endif %} Buy a credit →
{% if not _trial.expired %}{% endif %} {% elif is_unlicensed() %}
⚠ This vendo is UNLICENSED — activate a license credit to start selling. Get a license →
{% endif %} {# ADR-0022: degraded primary LAN — the configured interface (usually the USB-Eth) is gone and we've fallen back to the mgmt VLAN so the box stays reachable + sellable. Non-dismissible: this is the state where the operator would otherwise be locked out entirely. #} {% set _lan = lan_state() %} {% if _lan.degraded %}
⚠ LAN interface {{ _lan.intent }} is MISSING — running on {{ _lan.effective }}. {%- if _lan.reason == 'pppoe_vlan_conflict' %} PPPoE is occupying the fallback VLAN — move it on the PPPoE page. {%- elif _lan.reason == 'trunk_missing' %} The trunk interface is absent too. {%- elif _lan.reason == 'configured_iface_missing' %} Check its network profile. {%- else %} Your setting is unchanged and restores automatically when it's back.{% endif %} Check System →
{# ADR-0022 part 2: while degraded on a site with no switch, this URL may be the ONLY way back in. Show it while the operator can still read it. #} {% set _emg = emergency_wan_admin() %} {% if _emg.active %}
🛟 Recovery access is temporarily open from your modem's network at {{ _emg.url }} — write it down. It closes by itself once {{ _lan.intent }} is back.
{% endif %} {% endif %} {% block content %}{% endblock %}