openvibers/openvibe.shared Commits

v1.5.1: touch and keyboard feedback in the shared chrome: the navbar, dropdowns, launcher, drawer and footer turn off the browser's blue tap highlight, press slightly (scale) and give keyboard focus one theme-accent ring; zero-specificity :where() rules, reduced motion dims instead

OP OpenVibers committed 23 Sept 2026 · ec5f31b3f4 · 5 files, +31 −4


Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex b0cf228..b7aa9d0 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,15 @@ All notable changes to `openvibe-shared`. Versions follow [semver](https://semve
breaking change to any exported module, browser global or served file name is a new major.
A release is the git tag `vX.Y.Z`; consumers pin the tag's tarball (see README).
++## 1.5.1 — 2026-09-23
++
++Touch and keyboard feedback in the shared chrome (owner feedback: phones flashed a theme-blind blue
++box over anything tapped). The navbar, its dropdowns, the launcher, the drawer and the footer turn
++off `-webkit-tap-highlight-color`, show a slight press (`scale`, which composes with existing
++transforms) and give keyboard focus one ring in the theme accent. Rules are wrapped in `:where()`
++so they carry zero specificity: the chrome's own `:focus-visible` rules and host pages still win.
++With reduced motion the press is a brief dim instead of a shrink.
++
## 1.5.0 — 2026-09-23
Roadmap Track R (D42–D46, ADR-016): release manifests with components, open tabs updated in place,
ddiff --git a/footer.js b/footer.js
iindex e560bd0..e3f6869 100644
---- a/footer.js
++++ b/footer.js
@@@ -342,7 +342,11 @@
.ovf-legal-inline{justify-content:center}
.ovf-account{flex-direction:column;align-items:flex-start}
}
--@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}`;
++@media (prefers-reduced-motion:reduce){.ovf-account{animation:none}.ovf-col a:hover,.ovf-social a:hover,.ovf-account-links a:hover{transform:none}}
++.ovf{-webkit-tap-highlight-color:transparent}
++:where(.ovf) :where(a,button):active{scale:.97}
++:where(.ovf) :where(a,button):focus-visible{outline:2px solid var(--accent-light,var(--accent,#3b82f6));outline-offset:2px;border-radius:4px}
++@media (prefers-reduced-motion:reduce){:where(.ovf) :where(a,button):active{scale:none;opacity:.82}}`;
function injectCSS() {
if (typeof document === 'undefined' || document.getElementById('ovf-css')) return;
ddiff --git a/navbar.js b/navbar.js
iindex a4a3873..7051abb 100644
---- a/navbar.js
++++ b/navbar.js
@@@ -294,6 +294,20 @@
.openvibe-navbar-links { display: none; }
.openvibe-navbar .openvibe-network-badge { display: none; }
}
++
++ /* Touch and keyboard feedback. Phones flash a square, theme-blind blue box over anything
++ tapped (-webkit-tap-highlight-color); the chrome turns it off and shows a slight press
++ instead, and keyboard focus gets one ring in the theme accent. :where() keeps it at zero
++ specificity, so the chrome's own :focus-visible rules and a host page's rules still win.
++ \`scale\` is its own property, so it composes with any transform already in use. */
++ .openvibe-navbar, .openvibe-navbar-dropdown, .ovnav-launcher, .ovnav-drawer { -webkit-tap-highlight-color: transparent; }
++ :where(.openvibe-navbar, .openvibe-navbar-dropdown, .ovnav-launcher, .ovnav-drawer) :where(a, button, [role="button"]):not(:disabled):active { scale: .96; }
++ :where(.openvibe-navbar, .openvibe-navbar-dropdown, .ovnav-launcher, .ovnav-drawer) :where(a, button, [role="button"], [tabindex]:not([tabindex="-1"])):focus-visible {
++ outline: 2px solid var(--accent-light, var(--accent, #3b82f6)); outline-offset: 2px;
++ }
++ @media (prefers-reduced-motion: reduce) {
++ :where(.openvibe-navbar, .openvibe-navbar-dropdown, .ovnav-launcher, .ovnav-drawer) :where(a, button, [role="button"]):not(:disabled):active { scale: none; opacity: .82; }
++ }
`;
document.head.appendChild(s);
}
ddiff --git a/package-lock.json b/package-lock.json
iindex 5f0fb71..05547ca 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-shared",
-- "version": "1.5.0",
++ "version": "1.5.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-shared",
-- "version": "1.5.0",
++ "version": "1.5.1",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex c40ba52..b921ff5 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-shared",
-- "version": "1.5.0",
++ "version": "1.5.1",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"main": "index.js",
"exports": {