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
↓ peach-browser-44791015.tar.gzatlas at this save
files changed5 files
manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/styles/popup.css+23 −0src/popup/views/Settings.tsx+12 −16manifest.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": {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",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",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;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. */}