447910153ee1

fix: sync pair-a-device options read as buttons — bordered, raised, theme-neutral tappable rows with chevron + hover/active (not flat text, not brown); bump 4.0.10→4.0.11

time
2026-06-19 03:32 UTC · 4 months ago
machine
koh2
agent
claude-opus-4-8
session
consolidate sync into settings
parent
706c273c6a24
5 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/styles/popup.css+23 −0src/popup/views/Settings.tsx+12 −16
manifest.firefox.json+1 −1
@@ -2,7 +2,7 @@22   "_comment_audio_capture": "Firefox does not honor the Chrome 'audioCapture' optional_permission — getUserMedia in WebExtensions is gated solely by the runtime permission prompt. Microphone access for chirp pairing works from the popup under the existing '<all_urls>' host permission; no manifest entry is required or accepted here.",33   "manifest_version": 3,44   "name": "Peach Password Manager",5-  "version": "4.0.10",5+  "version": "4.0.11",66   "description": "Zero-knowledge password manager",77   "browser_specific_settings": {88     "gecko": {

view file

manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "4.0.10",4+  "version": "4.0.11",55   "description": "Zero-knowledge password manager",66   "action": {77     "default_popup": "src/popup/index.html",

view file

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

view file

src/popup/styles/popup.css+23 −0
@@ -1044,6 +1044,29 @@10441044 }10451045 .peach-code-input::placeholder { letter-spacing: 0.42em; }10461046 1047+/* Sync card "pair a device" options — bordered, raised tappable rows that read1048+   as buttons on any card hue (theme-neutral light overlay, not the peach accent). */1049+.peach-sync-pair-option {1050+  display: flex; align-items: flex-start; justify-content: space-between; gap: 10px;1051+  width: 100%; text-align: left; cursor: pointer; font-family: inherit;1052+  padding: 11px 12px; border-radius: 10px;1053+  background: color-mix(in srgb, var(--peach-t0) 6%, transparent);1054+  border: 1px solid color-mix(in srgb, var(--peach-t0) 16%, transparent);1055+  color: var(--peach-t0);1056+  transition: background 0.15s ease, border-color 0.15s ease, transform 0.1s ease;1057+}1058+.peach-sync-pair-option + .peach-sync-pair-option { margin-top: 8px; }1059+.peach-sync-pair-option:hover {1060+  background: color-mix(in srgb, var(--peach-t0) 10%, transparent);1061+  border-color: color-mix(in srgb, var(--peach-t0) 28%, transparent);1062+}1063+.peach-sync-pair-option:active { transform: translateY(1px); }1064+.peach-sync-pair-option:disabled { opacity: 0.5; cursor: default; }1065+.peach-sync-pair-option-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }1066+.peach-sync-pair-option-title { font-size: 0.8125rem; font-weight: 600; }1067+.peach-sync-pair-option-sub { font-size: 0.6875rem; line-height: 1.45; color: var(--peach-t2); }1068+.peach-sync-pair-option-chevron { flex-shrink: 0; color: var(--peach-t2); font-size: 1.05rem; line-height: 1.3; }1069+10471070 /* Breach badge */10481071 .peach-breach-badge {10491072   display: flex;

view file

src/popup/views/Settings.tsx+12 −16
@@ -1544,30 +1544,26 @@15441544           {/* Pick a pairing method and begin — no separate hub screen. */}15451545           <p class="peach-settings-sub-label" style="margin-top:10px">PAIR A DEVICE</p>15461546           <button1547-            class="peach-settings-row peach-settings-row--top peach-settings-row--tappable"1547+            class="peach-sync-pair-option"15481548             disabled={!isPro()}15491549             onClick={() => props.onOpenSyncPairing?.("chirp")}15501550           >1551-            <div class="peach-settings-row-main">1552-              <span>Same room</span>1553-              <span class="peach-settings-value" style="font-size:11px;line-height:1.5;color:var(--peach-t2)">1554-                Pair a nearby phone or browser by chirp1555-              </span>1556-            </div>1557-            <span class="peach-settings-advanced-chevron" aria-hidden="true">›</span>1551+            <span class="peach-sync-pair-option-main">1552+              <span class="peach-sync-pair-option-title">Same room</span>1553+              <span class="peach-sync-pair-option-sub">Pair a nearby phone or browser by chirp</span>1554+            </span>1555+            <span class="peach-sync-pair-option-chevron" aria-hidden="true">›</span>15581556           </button>15591557           <button1560-            class="peach-settings-row peach-settings-row--top peach-settings-row--tappable"1558+            class="peach-sync-pair-option"15611559             disabled={!isPro()}15621560             onClick={() => props.onOpenSyncPairing?.("desktop")}15631561           >1564-            <div class="peach-settings-row-main">1565-              <span>Enter a code</span>1566-              <span class="peach-settings-value" style="font-size:11px;line-height:1.5;color:var(--peach-t2)">1567-                Type the code from your desktop sync helper1568-              </span>1569-            </div>1570-            <span class="peach-settings-advanced-chevron" aria-hidden="true">›</span>1562+            <span class="peach-sync-pair-option-main">1563+              <span class="peach-sync-pair-option-title">Enter a code</span>1564+              <span class="peach-sync-pair-option-sub">Type the code from your desktop sync helper</span>1565+            </span>1566+            <span class="peach-sync-pair-option-chevron" aria-hidden="true">›</span>15711567           </button>15721568 15731569           {/* Paired devices + manual sync — Settings is the hub. */}

view file