""" HEDGE 2 (rules-level): plain `gr.Blocks` + full-bleed `gr.HTML` wrapping the IDENTICAL built bundle in a same-origin iframe served via the file route. Activate by setting `app_file: app_blocks.py` in README.md — zero bundle changes. Spike checks (§9.0 path C): WebGPU + module Worker + IndexedDB inside the nested iframe; sizing; pointer/keyboard not captured by Gradio. """ from __future__ import annotations import gradio as gr CSS = """ footer {display: none !important;} .gradio-container {padding: 0 !important; max-width: 100% !important;} #game-frame iframe {width: 100vw; height: 100dvh; border: 0; display: block;} """ IFRAME = '' with gr.Blocks(css=CSS, title="Parry") as demo: gr.HTML(IFRAME, elem_id="game-frame") if __name__ == "__main__": demo.launch(allowed_paths=["static"], show_error=True)