{# Follow the OS appearance. The matching theme-color keeps the iOS status bar / Android chrome in step with the rendered background. #} {% block title %}ARGOS{% endblock %} {# ?v= is a hash of the CSS/JS bundle: a changed file is a new URL, so no HTTP or service-worker cache can keep serving the old copy. #} {% set path = request.url.path %} {% set on_feed = path == '/feed' or path.startswith('/feed/') or path.startswith('/event/') or path.startswith('/item/') %} {% set on_portfolio = path == '/portfolio' or path.startswith('/portfolio/') %} {% set on_settings = path == '/settings' %} {# A detail page opened from the portfolio belongs to the portfolio tab. #} {% if back_to | default('') == 'portfolio' %}{% set on_feed = false %}{% set on_portfolio = true %}{% endif %} {# Symbol-style glyphs, drawn once and reused by both navs. #} {% macro icon(name) -%} {%- endmacro %} {# Desktop navigation — a translucent sidebar (≥768px). On mobile it is hidden in favour of the top bar + bottom tab bar below. #} {# Mobile top bar (<768px) — a translucent material content scrolls under. #}
ARGOS
Observatory
{% block content %}{% endblock %}
{# Mobile bottom tab bar (<768px). #} {# Not deferred: pagereveal must be listened for before the first frame. At the end of the cards already exist when it runs. No render-blocking is used to guarantee that — holding the first frame until the whole list arrived made every navigation wait on the network; if the page paints first, the back-morph simply degrades to a crossfade. #} {# ARG-207: Impression (feed) + Dwell (detail) collection. Not precached in sw.js's APP_SHELL on purpose — a plain runtime network load is enough and avoids bumping CACHE_VERSION here (see sw.js comment). #}