diff --git a/.planning/phases/01-federation-mesh-hardening/01-UI-SPEC.md b/.planning/phases/01-federation-mesh-hardening/01-UI-SPEC.md index 6b4c53ec..653ec9dd 100644 --- a/.planning/phases/01-federation-mesh-hardening/01-UI-SPEC.md +++ b/.planning/phases/01-federation-mesh-hardening/01-UI-SPEC.md @@ -117,6 +117,7 @@ Applicable state considerations resolved: 13 covered, 3 backstop, 0 unresolved. | error | manual-URI-paste form | ๐Ÿงช backstop | Invalid-format message ("Peer URI must be `pubkey@host:port`") is specified but no explicit format-validation test is scoped yet โ€” planner should add one, do not silently skip client-side validation before calling `lnd.openchannel` | | long-text | manual-URI-paste form | โœ… covered | Same truncation/tooltip treatment as the own-node URI display | | unclassified | request-to-open-channel flow | โœ… covered (dismissed) | Reuses `PeerRequestModal.vue` verbatim (message field, Send Request/Sending states) โ€” its own state coverage predates this phase and is not re-specified here | +| long-text | paid-tick ring (`SendBitcoinModal.vue` + `WalletScanModal.vue`) | โœ… covered (dismissed) | The ring itself renders no text content (pure SVG/CSS segments); the 48px sats amount inside it is inherited text explicitly out of this contract (see Typography inherited note) | | overflow | paid-tick ring (`SendBitcoinModal.vue` + `WalletScanModal.vue`) | โœ… covered | New `badge` `ScreensaverRing` size variant (see below) is explicitly sized to fit inside the modal's `max-h-[90vh] overflow-y-auto` card without clipping โ€” do not drop in the existing `compact` (240โ€“320px) variant unscaled | | static-content (motion) | paid-tick ring, all `ScreensaverRing` size variants | ๐Ÿงช backstop | `ScreensaverRing.vue`'s `segment-pulse` animation currently has **no** `prefers-reduced-motion` guard anywhere (a real gap โ€” confirmed by reading the component; contrast with `SendBitcoinModal.vue`'s existing `.burst-ring`, which already has one). This phase must add `@media (prefers-reduced-motion: reduce) { .viz-segment { animation: none; opacity: 0.6; } }` inside `ScreensaverRing.vue` itself so the guard applies to every size variant (including the new `badge` one), matching the site-wide reduced-motion convention. No existing automated test covers this โ€” flag for planner as a Wave 0 test gap. |