06339055866c

fix: Remove receiver pairing dead space (v4.4.5)

- Make the compact receiver bird-stage override win the CSS cascade - Remove the warm perimeter border and keep all controls visible - Enlarge the five-second success celebration - Add cascade regression coverage and real 320x520 visual QA evidence

time
2026-07-29 01:35 UTC · 2 months ago
machine
koh2
parent
c2712fceaa45
5 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/styles/popup.css+39 −2src/popup/views/AdoptVaultView.test.tsx+14 −0
manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "4.4.4",4+  "version": "4.4.5",55   "description": "Zero-knowledge password manager",66   "browser_specific_settings": {77     "gecko": {

view file

manifest.json+1 −1
@@ -2,7 +2,7 @@22   "manifest_version": 3,33   "minimum_chrome_version": "116",44   "name": "Peach Password Manager",5-  "version": "4.4.4",5+  "version": "4.4.5",66   "description": "Zero-knowledge password manager",77   "action": {88     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "4.4.4",3+  "version": "4.4.5",44   "description": "Zero-knowledge password manager",55   "license": "GPL-3.0-only",66   "type": "module",

view file

src/popup/styles/popup.css+39 −2
@@ -7155,7 +7155,7 @@71557155   padding: 14px 16px 12px;71567156   overflow-y: auto;71577157   scrollbar-width: none;7158-  border-color: color-mix(in srgb, var(--peach-accent) 24%, var(--peach-t0) 10%);7158+  border: 0;71597159   border-radius: 16px;71607160   background:71617161     radial-gradient(@@ -7283,7 +7283,7 @@72837283   text-wrap: pretty;72847284 }72857285 7286-.peach-adopt-bird-stage {7286+.peach-pair-stage.peach-adopt-bird-stage {72877287   width: min(100%, 260px);72887288   height: 102px;72897289   margin: -6px auto 2px;@@ -7322,6 +7322,38 @@73227322   animation-direction: reverse;73237323 }73247324 7325+.peach-adopt-pairing.is-complete .peach-pair-stage.peach-adopt-bird-stage {7326+  width: 100%;7327+  height: 135px;7328+  margin: -8px auto 6px;7329+}7330+7331+.peach-adopt-pairing.is-complete .peach-adopt-bird-stage .peach-pair-bird-slot,7332+.peach-adopt-pairing.is-complete .peach-adopt-bird-stage .peach-pair-bird {7333+  width: 112px;7334+  height: 112px;7335+}7336+7337+.peach-adopt-pairing.is-complete .peach-adopt-bird-stage .peach-pair-bird-slot-desktop {7338+  left: 0;7339+  --bb-x: 0;7340+  transform: translateX(0);7341+}7342+7343+.peach-adopt-pairing.is-complete .peach-adopt-bird-stage .peach-pair-bird-slot-mobile {7344+  right: 0;7345+  --bb-x: 0;7346+  transform: translateX(0);7347+}7348+7349+.peach-adopt-pairing.is-complete h1 {7350+  font-size: 1.6rem;7351+}7352+7353+.peach-adopt-pairing.is-complete .peach-adopt-pair-lede {7354+  font-size: 0.78rem;7355+}7356+73257357 @keyframes peach-adopt-happy-bob {73267358   0%, 100% {73277359     transform: translateX(var(--bb-x, 0)) translateY(0) rotate(0deg);@@ -7343,6 +7375,11 @@73437375   translate: -50% 0;73447376   background: color-mix(in srgb, var(--peach-accent) 62%, transparent);73457377   box-shadow: 0 0 10px color-mix(in srgb, var(--peach-accent) 56%, transparent);7378+}7379+7380+.peach-adopt-pairing.is-complete .peach-adopt-connection {7381+  bottom: 49px;7382+  width: 92px;73467383 }73477384 73487385 .peach-adopt-connection::after {

view file

src/popup/views/AdoptVaultView.test.tsx+14 −0
@@ -1,6 +1,7 @@11 // @vitest-environment jsdom22 33 import type { JSX } from "solid-js";4+import { readFileSync } from "node:fs";45 import { afterEach, describe, expect, it, vi } from "vitest";56 import { Onboarding } from "./Onboarding";67 import { AdoptVaultView } from "./AdoptVaultView";@@ -93,6 +94,19 @@9394     expect(view.container.querySelectorAll(".peach-adopt-bird-stage .peach-pair-bird")).toHaveLength(2);9495     // The scan button from the old flow is gone — the phone is the scanner now.9596     expect(view.container.textContent).not.toContain("Enter invitation manually");97+  });98+99+  it("pins the compact receiver stage above the shared pairing-stage cascade", () => {100+    const css = readFileSync("src/popup/styles/popup.css", "utf8");101+    const rule = css.match(102+      /\.peach-pair-stage\.peach-adopt-bird-stage\s*\{([^}]*)\}/,103+    )?.[1];104+105+    expect(rule).toContain("height: 102px");106+    expect(rule).toContain("margin: -6px auto 2px");107+    expect(css).toMatch(108+      /\.peach-adopt-card--pair\s*\{[^}]*border:\s*0;/s,109+    );96110   });97111 98112   it("shows the receiver SAS without adding a second confirmation button", async () => {

view file