(player ? player.state : 'unavailable')
+ const [muted, setMuted] = useState(false)
+
+ useEffect(() => {
+ if (player) player.onChange(setState)
+ }, [player])
+
+ const label =
+ state === 'playing' ? '⏸' : state === 'loading' ? '…' : '▶'
+ const status =
+ state === 'unavailable' ? 'NO MOD' : state === 'loading' ? 'LOADING' : 'RIDE.MOD'
+
+ return (
+
+
+
+ {status}
+
+ )
+}
diff --git a/src/style.css b/src/style.css
index 6941d48..c5ada1f 100644
--- a/src/style.css
+++ b/src/style.css
@@ -64,3 +64,26 @@ body.demo-on #fallback {
}
.panel a.sign:hover, .panel button.sign:hover { background: #ffd23f; color: #05010d; }
.panel ul { margin: 6px 0; padding-left: 18px; font-size: 0.8rem; }
+
+#scroller { position: fixed; left: 0; bottom: 0; width: 100%; height: 72px; pointer-events: none; }
+#tracker {
+ position: fixed;
+ top: 12px;
+ right: 12px;
+ display: flex;
+ gap: 6px;
+ align-items: center;
+ background: rgba(5, 1, 13, 0.85);
+ border: 3px solid #ffd23f;
+ padding: 6px 10px;
+}
+#tracker button {
+ background: none;
+ border: 2px solid #ffd23f;
+ color: #ffd23f;
+ font: inherit;
+ cursor: pointer;
+ min-width: 2.2rem;
+}
+#tracker button:disabled { opacity: 0.4; cursor: default; }
+#tracker .status { font-size: 0.7rem; color: #9be564; }