SOURCE / PINNED RELEASE
Made of little things.
Impossible Machine
- Release
- 841127ac75f3…
- Author-recorded commit
- 123625b81870…
- License
- LICENSE
- Author’s source reference
- nostr://npub1n8ga89w8h6tvwamxusfyzexw8gjy84yxu9rxgnmk955cxtml4ujswzxydd/wss%3A%2F%2Fgit.napplet.soy%2F/n-47d97da9d80
Archive hash verified: db7c8101167c4b07…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Impossible Machine</title>
</head>
<body>
<div class="too-small">
A little more room to tinker?<br />Enlarge this pane to at least 280 ×
360.
</div>
<div id="app">
<div class="topbar">
<select id="level" aria-label="Choose puzzle">
<option value="0">01 · A gentle nudge</option>
<option value="1">02 · Across the gap</option>
<option value="2">03 · The long way</option>
<option value="3">∞ · Free play</option></select
><span id="solved" title="Solved puzzles">0 / 3</span
><button
id="reset"
title="Reset the entire arrangement"
aria-label="Reset arrangement"
>
↺
</button>
</div>
<main>
<div class="board-wrap">
<canvas
id="board"
aria-label="Physics workbench. Drag ramps and bumpers. Use the piece selector and movement buttons as an alternative."
></canvas>
<div class="board-caption">
<span id="phase">YOUR WORKBENCH</span
><span id="attempt">TAKE 01</span>
</div>
<div id="celebration" hidden>
<strong>Beautifully done.</strong
><span>One small marble. One brilliant machine.</span
><button id="next">Next puzzle →</button>
</div>
</div>
<aside>
<div class="shelf-title">MAKE IT MOVE</div>
<div class="add-row">
<button id="ramp">
<span class="ramp-icon">╱</span> Ramp <small>+</small></button
><button id="bumper">
<span class="bumper-icon">◉</span> Bumper <small>+</small>
</button>
</div>
<div class="edit-row">
<select id="piece" aria-label="Selected piece"></select
><button id="left" aria-label="Rotate ramp counterclockwise">
↶</button
><button id="right" aria-label="Rotate ramp clockwise">↷</button
><button id="remove" aria-label="Remove selected piece">×</button>
</div>
<div class="nudges" aria-label="Move selected piece">
<span>Move</span
><button data-dx="-10" aria-label="Move left">←</button
><button data-dy="-10" aria-label="Move up">↑</button
><button data-dy="10" aria-label="Move down">↓</button
><button data-dx="10" aria-label="Move right">→</button>
</div>
<p id="hint">
Drag a piece. Give it a tilt.<br />See where the marble goes.
</p>
<div class="run-row">
<button id="drop">▶ <span>Drop marble</span></button
><button
id="retry"
aria-label="Retry keeping arrangement"
title="Retry keeping arrangement"
>
↺ Retry
</button>
</div>
<output id="status" aria-live="polite"
>A little trial. A little error. A little magic.</output
><button id="save">Save progress</button>
</aside>
</main>
</div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
