From dc533bea06afd8ad19e19024b985b71cceeab102 Mon Sep 17 00:00:00 2001 From: Remko Date: Fri, 4 Sep 2026 17:06:05 +0200 Subject: [PATCH 01/86] feat(lock-screen): open the padlock when the vault unlocks A successful unlock swapped nothing on screen: the padlock stayed shut and the router replaced the whole view, so the only feedback was the vault appearing. The unlock's own success had no signal. The icon now swaps to LockOpenVariant, turns --color-success green and pops in over 400ms, and every unlock path -- online, the offline-snapshot fallback after a network error, and passkey -- holds $router.push for exactly that long. The hold is the point: the redirect unmounts this screen, so pushing first makes the swap unobservable no matter how the keyframes are written. 400ms is invisible next to the argon2 KDF that just ran, and `loading` clears only afterwards so the form cannot be submitted twice. A rejected unlock gets its own flash, and both outcomes are announced through a live region so the padlock is not the only channel carrying them. Under prefers-reduced-motion the pop is dropped (the colour stays -- that is state, not motion) and the wait is skipped, so that path unlocks faster rather than being delayed for an animation that never plays. The animation lives on the icon rather than its wrapper: the wrapper is a full-width block and scaling it would widen the card's content box while the animation runs. Component tests assert the ordering -- the open padlock is on screen while the push has not happened yet -- which is the part a refactor can reverse silently. --- src/views/LockScreen.vue | 361 +++++++++++++++- .../views/LockScreen.unlockAnimation.spec.js | 403 ++++++++++++++++++ 2 files changed, 760 insertions(+), 4 deletions(-) create mode 100644 tests/views/LockScreen.unlockAnimation.spec.js diff --git a/src/views/LockScreen.vue b/src/views/LockScreen.vue index a89b06a5c..2989db3ed 100644 --- a/src/views/LockScreen.vue +++ b/src/views/LockScreen.vue @@ -33,8 +33,53 @@ }} + + +

{{ liveStatus }}

+ +
- + +
+