{% extends "base.html" %} {% block title %}Morph | MuJoCo Mojo{% endblock %} {% block scripts %} {% endblock %} {% block content %} {# Morph has its own fullscreen (the iframe fills the screen), so this forces $store.dojo.isFullscreen to false on every load regardless of dojo.default_to_fullscreen or a leftover mojo_fullscreen in localStorage from another page - never writes to localStorage itself, so navigating back to Monitor/Mosaic/Trial Viewer still restores whatever fullscreen state the user last left THOSE pages in. x-init (not the raw alpine:init DOM event morph.html used before) is what makes this reliable: it's guaranteed by Alpine itself to run only after alpine:init has fully fired and every store is registered, unlike a second alpine:init listener racing store.ts's own registration of $store.dojo, whose relative order depends on this being a classic (parser-blocking) script vs. main.js being a deferred module - a morph-is-inescapable failure mode this sidesteps entirely rather than relying on getting that race right. #}