diff --git a/playground/a-immersive.html b/playground/a-immersive.html index 5f7056a..165263d 100644 --- a/playground/a-immersive.html +++ b/playground/a-immersive.html @@ -190,7 +190,7 @@ -
+
Off @@ -325,7 +325,7 @@
./nisps-osc-bridge

3. Connect

-

In the synth panel below, click Connect next to "OSC Output". The status will show the target address once connected.

+

Click the OSC button in the bottom bar (visible in all modes). The dot turns green when connected. You can also find a Connect button in the synth panel when expanded.

Configuration

diff --git a/playground/css/a-immersive.css b/playground/css/a-immersive.css index 83434ac..3d3aeae 100644 --- a/playground/css/a-immersive.css +++ b/playground/css/a-immersive.css @@ -676,28 +676,68 @@ html, body { } .osc-pill { - padding: 4px 12px; + padding: 4px 10px; border-radius: 6px; - border: 1px solid rgba(255, 255, 255, 0.08); - background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.05); color: var(--text-dim); - font-size: 12px; + font-size: 11px; + font-weight: 500; + letter-spacing: 0.5px; cursor: pointer; transition: all 0.15s; + display: inline-flex; + align-items: center; + gap: 5px; +} + +/* Dot indicator before text */ +.osc-pill::before { + content: ''; + flex-shrink: 0; + width: 6px; + height: 6px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.2); + transition: all 0.15s; +} + +.osc-pill:hover { + border-color: rgba(255, 255, 255, 0.25); + color: var(--text); +} + +.osc-pill:hover::before { + background: rgba(255, 255, 255, 0.4); } .osc-pill.connected { - background: rgba(0, 200, 120, 0.15); - border-color: rgba(0, 200, 120, 0.4); + background: rgba(0, 200, 120, 0.12); + border-color: rgba(0, 200, 120, 0.35); color: #00c878; } +.osc-pill.connected::before { + background: #00c878; + box-shadow: 0 0 4px rgba(0, 200, 120, 0.5); +} + .osc-pill.connecting { - background: rgba(255, 200, 0, 0.1); - border-color: rgba(255, 200, 0, 0.3); + background: rgba(255, 200, 0, 0.08); + border-color: rgba(255, 200, 0, 0.25); color: #ffc800; } +.osc-pill.connecting::before { + background: #ffc800; + animation: osc-pulse 1s ease-in-out infinite; +} + +@keyframes osc-pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.3; } +} + .chevron-btn { width: 32px; height: 32px; @@ -741,7 +781,7 @@ html, body { } .bottom-sheet.expanded { - height: 55vh; + height: 60vh; overflow-y: auto; -webkit-overflow-scrolling: touch; } @@ -920,6 +960,13 @@ html, body { font-size: 12px; } +/* OSC row in synth panel — visual separator from arp controls above */ +.osc-row-panel { + margin-top: 6px; + padding-top: 10px; + border-top: 1px solid rgba(255, 255, 255, 0.06); +} + .synth-status { font-size: 11px; color: var(--text-dim);