UNTANGLE — mutual.black public game preview
Copyright (C) 2026 Left Gaming / Douglas Knoll
SPDX-License-Identifier: GPL-3.0-or-later

Adapted on 2026-09-17 from the mutualBlack Untangle integration (2026-09-05),
itself adapted from UntangleLeft commit
bac5b4f6186ecd92df959ffdac64424a0110e810.

The actual game's planar graph generator, geometric intersection engine,
deterministic seed algorithm, canvas renderer, and puzzle controller are used.
Preview changes: compact accessible controls and typography; silent audio;
keyboard node selection and movement; reduced-motion and offscreen handling;
ephemeral game-only memory; public host messaging; no private app imports.

This game is free software: you may redistribute and/or modify it under the
GNU General Public License, version 3 or (at your option) any later version.
It is provided without warranty, including merchantability or fitness for a
particular purpose. Full license: untangle-LICENSE.txt (in this same directory).

The complete editable source for this preview is shipped alongside this notice:
untangle-preview.html
untangle-preview.css
untangle-game.js
untangle-host.js
No build step or additional game dependencies are required.

Serve these files together over HTTP(S). Embed untangle-preview.html in an
iframe with sandbox="allow-scripts". On UNTANGLE_READY, the parent sends
{type:'UNTANGLE_INIT',seed:integer,appName:'Elsewhere',
 progress:{level:1,completed:[],records:{},sound:false}}.
The child replies UNTANGLE_STARTED. Only messages from window.parent are
accepted. The parent can send UNTANGLE_PREVIEW_VISIBILITY with visible true
or false to resume or suspend drawing and the timer. Reload to change seed.
No game progress persists beyond the frame's lifetime. Audio is disabled.
A puzzle seed is public game data, never an authentication credential.
