openvibers/openvibe.surf Commits

Motion: Calm reduces, only Off removes (Shared 4.183.0) (#135)

OP OpenVibers committed 3 days ago · fbcc6a4468 · 7 files, +10 −17

Calm (the Motion setting, or a device that asks for less motion) used to stop
every effect here. Pin openvibe-shared 4.183.0 and drop the rules that stopped an
effect under prefers-reduced-motion or html[data-ov-motion=reduced]: Calm plays
every effect, smaller and slower, and only html[data-ov-motion=off] stops it.

Changes

ddiff --git a/README.md b/README.md
iindex 6a66ef7..68500fb 100644
---- a/README.md
++++ b/README.md
@@@ -264,5 +264,5 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by
<!-- versions:start -->
- openvibe-contracts: v0.384.0
- openvibe-sdk: v0.125.0
--- openvibe-shared: v4.179.0
++- openvibe-shared: v4.183.0
<!-- versions:end -->
ddiff --git a/STATUS.json b/STATUS.json
iindex 7ae1d60..08bf8b2 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -10,7 +10,7 @@
"domain": "openvibe.surf",
"contracts": "openvibe-contracts v0.384.0",
"sdk": "openvibe-sdk v0.125.0",
-- "shared": "openvibe-shared v4.179.0",
++ "shared": "openvibe-shared v4.183.0",
"packages": [
"openvibe-contracts v0.384.0",
"openvibe-sdk v0.125.0",
ddiff --git a/node_modules b/node_modules
nnew file mode 120000
iindex 0000000..fa3194b
---- /dev/null
++++ b/node_modules
@@@ -0,0 +1 @@
++/home/workstation/.cache/openvibe-deps/OpenVibe.Surf/bc7371ec28947a16/node_modules
\\ No newline at end of file
ddiff --git a/package-lock.json b/package-lock.json
iindex f4e599f..5de03a2 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -16,7 +16,7 @@
"helmet": "^8.1.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.384.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.125.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.179.0"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.183.0"
},
"engines": {
"node": ">=22.0.0"
@@@ -1103,9 +1103,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "4.179.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.179.0",
-- "integrity": "sha512-Fjffjq3gLINhiXTqQJwsKQT/QbV4TYvsmz6GTp5hBJ8xA6KUQgu0wDgCQ3BRxCZ0ehmn0HGVAHUI+5m0LtPQCQ==",
++ "version": "4.183.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.183.0",
++ "integrity": "sha512-vp9gg++Dhyj3h0cwvBjujM6dSFYoeXdh1UXdZ6OXP/NjG672Fs7uRANV4MjT467JtFDN7r7qLI3OJAwGQxOuQw==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0",
ddiff --git a/package.json b/package.json
iindex 19747f3..9fc3d20 100644
---- a/package.json
++++ b/package.json
@@@ -22,7 +22,7 @@
"helmet": "^8.1.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.384.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.125.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.179.0"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.183.0"
},
"engines": {
"node": ">=22.0.0"
ddiff --git a/public/css/surf.css b/public/css/surf.css
iindex c0d58da..1586a0e 100644
---- a/public/css/surf.css
++++ b/public/css/surf.css
@@@ -60,7 +60,7 @@ html.ov-motion .sf-run-speed i { animation: sf-speed 1.1s linear infinite; anima
.sf-tile span:not(.sf-tile-ic):not(.sf-tile-go) { color: var(--text-secondary, #96a7c2); line-height: 1.5; font-size: .95rem; }
.sf-tile-go { display: inline-flex; align-items: center; gap: 2px; margin-top: 4px; font-weight: 800; color: var(--room-strong); }
.sf-tile-go .ovk-i { width: 1em; height: 1em; }
--@media (prefers-reduced-motion: reduce) { .sf-tile a { transition: none; } .sf-tile a:hover { transform: none; } }
++html[data-ov-motion=off] .sf-tile a:hover{transform: none}
/* Scenes. */
.sf-demo-run { display: grid; gap: 10px; padding: 16px; border-radius: 18px; background: #0b0f17; color: #e9f2ff; border: 1px solid color-mix(in srgb, var(--room-accent) 35%, transparent); }
@@@ -77,7 +77,6 @@ html.ov-motion .sf-run-speed i { animation: sf-speed 1.1s linear infinite; anima
.sf-demo-steps li.is-now { color: var(--text-primary, #e6edf7); font-weight: 650; }
.sf-demo-steps li.is-now::before { border-color: var(--room-accent); animation: sf-pulse 1.4s ease-out infinite; } /* the step on now pulses out, never spins */
@keyframes sf-pulse { from { box-shadow: 0 0 0 0 color-mix(in srgb, var(--room-accent) 50%, transparent); } to { box-shadow: 0 0 0 7px transparent; } }
--@media (prefers-reduced-motion: reduce) { .sf-demo-steps li.is-now::before { animation: none; } }
.sf-demo-tv { display: grid; gap: 8px; padding: 10px; border-radius: 18px; background: var(--bg-card, #0f1729); border: 1px solid var(--border, #1f2d47); }
.sf-demo-screen { position: relative; display: flex; align-items: flex-end; gap: 8px; aspect-ratio: 16 / 6; max-height: 210px; padding: 12px; border-radius: 12px; color: #fff; font-weight: 700; font-size: .85rem;
background: radial-gradient(120% 120% at 70% 30%, color-mix(in srgb, var(--room-accent) 45%, transparent), transparent 60%), linear-gradient(160deg, #1e293b, #0b1020); }
@@@ -195,8 +194,6 @@ html.ov-motion .sf-party-dot { animation: sf-party-pulse 2.4s ease-in-out infini
.sf-eps dt code { font: 600 .88rem/1.4 ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--room-strong); overflow-wrap: anywhere; }
.sf-eps dd { margin: 6px 0 0; color: var(--text-secondary, #96a7c2); line-height: 1.5; }
--@media (prefers-reduced-motion: reduce) { .sf-run-speed i, .sf-demo-steps li.is-now::before, .sf-tv-screen.is-changing, .sf-party-dot { animation: none !important; } }
--html[data-ov-motion=reduced] .sf-run-speed i { animation: none !important; }
/* Watch together: the party bar above the TV. Everyone sees the host's channel and moment; the dot pulses while
the party is in sync. */
@@@ -216,7 +213,6 @@ html.ov-motion .sf-party-playing .sf-party-dot { animation: sf-pulse 1.6s ease-o
.sf-party-chat-form { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.sf-party-chat-url { flex: 1 1 240px; min-height: 38px; padding: 0 12px; border-radius: 10px; border: 1px solid var(--border, #1f2d47); background: var(--bg-input, var(--bg-primary, #0a0f1c)); color: inherit; font: inherit; }
.sf-party-id { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .8rem; color: var(--text-muted, #7386a3); }
--@media (prefers-reduced-motion: reduce) { .sf-party-dot { animation: none !important; } }
/* Surf with Vibe: the task page (/web/t/:id): state, desk links, live steps as a timeline, sources, the report */
.sf-desk-page { display: grid; gap: 14px; }
@@@ -266,8 +262,6 @@ html.ov-motion .sf-party-playing .sf-party-dot { animation: sf-pulse 1.6s ease-o
.sf-desk-report-text { white-space: pre-wrap; line-height: 1.6; overflow-wrap: anywhere; }
.sf-desk-report p { margin: 0; color: var(--text-secondary, #96a7c2); }
.sf-desk-actor { margin: 4px 0 0; text-align: center; }
--@media (prefers-reduced-motion: reduce) { .sf-desk-page[data-sf-desk-open="1"] .sf-desk-state::before { animation: none; } }
--html[data-ov-motion=reduced] .sf-desk-page[data-sf-desk-open="1"] .sf-desk-state::before { animation: none; }
/* Touch targets on phones (fleet audit 2026-10-29): the touch-only hit area for this group. Nothing moves with a mouse. */
@media (pointer: coarse) {
@@@ -377,5 +371,3 @@ html[data-ov-motion=reduced] .sf-desk-page[data-sf-desk-open="1"] .sf-desk-state
.sf-task-count { color: var(--text-muted, #7386a3); font-weight: 600; }
.sf-task-steps ol { margin-top: 8px; }
.sf-task-rule { margin: 0; text-align: center; }
--@media (prefers-reduced-motion: reduce) { .sf-task[data-sf-desk-open="1"] .sf-task-dot { animation: none; } .sf-task-steps summary::before { transition: none; } }
--html[data-ov-motion=reduced] .sf-task[data-sf-desk-open="1"] .sf-task-dot { animation: none; }
ddiff --git a/public/js/surf.js b/public/js/surf.js
iindex 6e1f145..d325b80 100644
---- a/public/js/surf.js
++++ b/public/js/surf.js
@@@ -5,7 +5,7 @@
* - Home: the run motif's timer and speed tick. */
(function () {
'use strict';
-- var reduced = function () { try { return matchMedia('(prefers-reduced-motion: reduce)').matches || document.documentElement.dataset.ovMotion === 'reduced'; } catch (e) { return false; } };
++ var reduced = function () { try { return document.documentElement.getAttribute('data-ov-motion') === 'off'; } catch (e) { return false; } };
// ── Home: the run's timer ─────────────────────────────────
function runMotif() {