feat: switch accent to Plum, finalize vault-door app icon, group filter Clear button

- Replace Copper accent with Plum (light #6B4577 / dark #A67FB0) across the main
  app and AutoFill extension.
- Replace the padlock app icon with a vault-door design (ring, hub, locking
  handle) in Plum, plus all macOS sizes.
- Add an AppIconImage asset (separate from the AppIcon icon-set, which SwiftUI
  can't reference directly at runtime) and show it on the unlock screen instead
  of a generic SF Symbol.
- GroupFilterView: move "Clear Filter" out of the list and into a leading
  toolbar button ("Clear", disabled when no filter is active), mirroring the
  trailing "Done" button.
This commit is contained in:
2026-09-20 18:25:41 +02:00
parent 8bba64076f
commit b6d113edcd
21 changed files with 56 additions and 20 deletions
@@ -5,9 +5,9 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0.710",
"green" : "0.396",
"blue" : "0.114",
"red" : "0.420",
"green" : "0.271",
"blue" : "0.467",
"alpha" : "1.000"
}
}
@@ -23,9 +23,9 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0.890",
"green" : "0.635",
"blue" : "0.357",
"red" : "0.651",
"green" : "0.498",
"blue" : "0.690",
"alpha" : "1.000"
}
}
@@ -7,7 +7,7 @@
<key>AutoFill.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
<integer>2</integer>
</dict>
<key>KeeVault.xcscheme_^#shared#^_</key>
<dict>
@@ -5,9 +5,9 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0.710",
"green" : "0.396",
"blue" : "0.114",
"red" : "0.420",
"green" : "0.271",
"blue" : "0.467",
"alpha" : "1.000"
}
}
@@ -23,9 +23,9 @@
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0.890",
"green" : "0.635",
"blue" : "0.357",
"red" : "0.651",
"green" : "0.498",
"blue" : "0.690",
"alpha" : "1.000"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 964 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 138 KiB

@@ -0,0 +1,32 @@
{
"images" : [
{
"filename" : "icon-light.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "icon-dark.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

+6 -3
View File
@@ -7,14 +7,17 @@ struct GroupFilterView: View {
var body: some View {
List {
if !vm.selectedGroupIds.isEmpty {
Button("Clear Filter", action: vm.clear)
}
GroupFilterNode(group: rootGroup, vm: vm)
}
.scrollContentBackground(.hidden)
.background(Color("VaultBackground"))
.navigationTitle("Groups")
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Clear", action: vm.clear)
.disabled(vm.selectedGroupIds.isEmpty)
}
}
}
}
+4 -3
View File
@@ -13,9 +13,10 @@ struct UnlockView: View {
var body: some View {
VStack(spacing: 24) {
Spacer()
Image(systemName: "lock.shield.fill")
.font(.system(size: 64))
.foregroundStyle(.tint)
Image("AppIconImage")
.resizable()
.frame(width: 88, height: 88)
.clipShape(RoundedRectangle(cornerRadius: 20, style: .continuous))
Text("KeeVault")
.font(.largeTitle.bold())
@@ -7,7 +7,7 @@
<key>KeeVaultCore.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
<integer>3</integer>
</dict>
</dict>
</dict>