diff --git a/README.md b/README.md index 43d689e..affbb54 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ The red **Uninstall application** action morphs the existing launcher into a fil The application's name and keyboard guidance remain visible throughout file review: Return toggles inclusion; Command-Return opens confirmation. Filtering preserves discovery progress or errors until discovery succeeds, then shows selection counts and no-match feedback without changing checked files. -Keyboard file toggles update the existing checkbox without reloading or fading the list, preserving both the highlighted row and scroll position. The launcher's footer Open and Actions labels use 12-point medium text. All custom shortcut hints—in the launcher footer, numbered application rows, uninstall footer, and actions selector—use `ShortcutIndicator` from `Sources/Conjure/ShortcutIndicator.swift` (for example, `ShortcutIndicator("⌘", "K")`). It owns 12-point medium key text, square 18×18-point containers, visible-glyph centering, border styling, and 2-point gaps between adjacent keys; callers position or hide the whole indicator, and numbered rows update their single key without rebuilding the cell. Native menus and shortcut-recording controls retain their platform styling. +Keyboard file toggles update the existing checkbox without reloading or fading the list, preserving both the highlighted row and scroll position. Launcher, Translate, and uninstall footer buttons use 12-point medium text, with plain brown-filled action pills inset 8 points from the right and bottom edges. Uninstall retains destructive red text and Command-Return confirmation. All custom shortcut hints—in the launcher footer, numbered application rows, uninstall footer, and actions selector—use `ShortcutIndicator` from `Sources/Conjure/ShortcutIndicator.swift` (for example, `ShortcutIndicator("⌘", "K")`). It owns 12-point medium key text, square 18×18-point containers, visible-glyph centering, border styling, and 2-point gaps between adjacent keys; callers position or hide the whole indicator, and numbered rows update their single key without rebuilding the cell. Native menus and shortcut-recording controls retain their platform styling. Numbered row overlays use 13-point numbers in 22×22-point boxes with a lighter opaque warm-brown backing. Their label fade begins 36 points before the badge, twice the original lead-in; other shortcut hints retain their 12-point text and 18×18-point boxes. diff --git a/Sources/Conjure/SettingsWindowController.swift b/Sources/Conjure/SettingsWindowController.swift index 55ec731..89fdb8d 100644 --- a/Sources/Conjure/SettingsWindowController.swift +++ b/Sources/Conjure/SettingsWindowController.swift @@ -131,7 +131,7 @@ final class SettingsWindowController: NSWindowController, NSWindowDelegate { for label in [instructions, statusLabel, spotlight, loginStatus] { label.textColor = SunsetPalette.secondaryText } - for button in [recorder, commandSpaceButton, clearButton, keyboardSettings, loginToggle, loginSettings] { + for button in [recorder, commandSpaceButton, clearButton, keyboardSettings, loginToggle, loginSettings, recoveryButton] { button.contentTintColor = SunsetPalette.accent } let loginHeading = NSTextField(labelWithString: "Startup") diff --git a/Sources/Conjure/TranslationController.swift b/Sources/Conjure/TranslationController.swift index fd0d8a9..4ec8317 100644 --- a/Sources/Conjure/TranslationController.swift +++ b/Sources/Conjure/TranslationController.swift @@ -25,6 +25,7 @@ final class TranslationController: NSViewController, NSTextFieldDelegate, NSText view = NSView() let title = NSTextField(labelWithString: "Conjure Translate · English → Japanese") title.font = .systemFont(ofSize: 13, weight: .semibold) + title.textColor = SunsetPalette.text let back = NSButton(title: "", target: self, action: #selector(goBack)) back.image = IconStyle.symbol("chevron.left", for: title.font!) back.imageScaling = .scaleProportionallyDown diff --git a/Sources/Conjure/UninstallReviewController.swift b/Sources/Conjure/UninstallReviewController.swift index f3b0d11..bb89b2a 100644 --- a/Sources/Conjure/UninstallReviewController.swift +++ b/Sources/Conjure/UninstallReviewController.swift @@ -101,7 +101,7 @@ final class UninstallReviewController: NSViewController, NSSearchFieldDelegate, remove.action = #selector(confirmUninstall) remove.contentTintColor = .systemRed remove.isBordered = false - remove.font = .systemFont(ofSize: 14, weight: .medium) + remove.font = .systemFont(ofSize: 12, weight: .medium) remove.keyEquivalent = "\r" remove.keyEquivalentModifierMask = .command remove.toolTip = "Confirm uninstall (Command-Return). Return toggles the highlighted file." @@ -124,14 +124,12 @@ final class UninstallReviewController: NSViewController, NSSearchFieldDelegate, scroll.autohidesScrollers = true scroll.drawsBackground = false scroll.contentView.drawsBackground = false - let pill = NSVisualEffectView() - pill.material = .popover - pill.blendingMode = .withinWindow - pill.state = .active - roundMaterialCorners(pill, radius: 18) + let pill = NSView() + pill.wantsLayer = true + pill.layer?.cornerRadius = 18 pill.layer?.borderWidth = 0.5 pill.layer?.borderColor = SunsetPalette.accent.withAlphaComponent(0.35).cgColor - pill.layer?.backgroundColor = SunsetPalette.accent.withAlphaComponent(0.08).cgColor + pill.layer?.backgroundColor = SunsetPalette.background.withAlphaComponent(0.25).cgColor let shortcut = ShortcutIndicator("⌘", "↵") for child in [remove, shortcut] { child.translatesAutoresizingMaskIntoConstraints = false @@ -174,8 +172,8 @@ final class UninstallReviewController: NSViewController, NSSearchFieldDelegate, scroll.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -12), scroll.bottomAnchor.constraint(equalTo: footer.topAnchor, constant: -16), footer.leadingAnchor.constraint(equalTo: search.leadingAnchor), - footer.trailingAnchor.constraint(equalTo: search.trailingAnchor), - footer.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -16), + footer.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8), + footer.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -8), footer.heightAnchor.constraint(equalToConstant: 36) ]) } diff --git a/TODO.md b/TODO.md index 3872282..cad58b5 100644 --- a/TODO.md +++ b/TODO.md @@ -13,12 +13,12 @@ ### Visual consistency -- [ ] Match uninstall footer text to the launcher/Translate baseline: 12pt medium rather than 14pt; retain destructive red. -- [ ] Align the uninstall footer with launcher/Translate: 8pt right/bottom insets rather than 24pt right and 16pt bottom. -- [ ] Use the launcher/Translate footer's plain brown-filled view for uninstall instead of adding a popover material and orange tint. +- [x] Match uninstall footer text to the launcher/Translate baseline: 12pt medium rather than 14pt; retain destructive red. +- [x] Align the uninstall footer with launcher/Translate: 8pt right/bottom insets rather than 24pt right and 16pt bottom. +- [x] Use the launcher/Translate footer's plain brown-filled view for uninstall instead of adding a popover material and orange tint. - [x] Apply Actions' SF Symbol optical-inset handling to launcher icons. Native layout measured a 22×29pt command icon view versus 22×22pt action icon views. - [x] Render application and command favorite markers consistently: use the configured star symbol rather than a literal ★ for commands. -- [ ] Apply the existing Sunset palette to Translate's custom heading and the Settings recovery button, matching equivalent headings/actions. +- [x] Apply the existing Sunset palette to Translate's custom heading and the Settings recovery button, matching equivalent headings/actions. ### Documentation and visual verification