From 9bcdcc716812bb9b1728fe4f5ece6e054829a4c3 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sun, 15 Mar 2026 22:42:38 +0100 Subject: [PATCH] style: replace blue accent with gray and mute card badge colors Switch all interactive UI elements (buttons, focus rings, active tabs, FAB, links, spinners) from blue to gray to match icon colors for a more cohesive look. Mute card badge text colors to pastels (blue-400, green-500, purple-500) to keep the focus on card content. Co-Authored-By: Claude Opus 4.6 --- src/client/components/CandidateCard.tsx | 8 ++++---- src/client/components/CandidateForm.tsx | 12 ++++++------ src/client/components/CategoryHeader.tsx | 2 +- src/client/components/CategoryPicker.tsx | 8 ++++---- src/client/components/CreateThreadModal.tsx | 6 +++--- src/client/components/DashboardCard.tsx | 2 +- src/client/components/ExternalLinkDialog.tsx | 4 ++-- src/client/components/IconPicker.tsx | 6 +++--- src/client/components/ItemCard.tsx | 6 +++--- src/client/components/ItemForm.tsx | 12 ++++++------ src/client/components/ItemPicker.tsx | 4 ++-- src/client/components/OnboardingWizard.tsx | 18 +++++++++--------- src/client/components/SetupCard.tsx | 6 +++--- src/client/components/ThreadCard.tsx | 6 +++--- src/client/components/ThreadTabs.tsx | 4 ++-- src/client/components/TotalsBar.tsx | 2 +- src/client/routes/__root.tsx | 4 ++-- src/client/routes/collection/index.tsx | 18 +++++++++--------- src/client/routes/setups/$setupId.tsx | 4 ++-- src/client/routes/setups/index.tsx | 4 ++-- src/client/routes/threads/$threadId.tsx | 6 +++--- 21 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/client/components/CandidateCard.tsx b/src/client/components/CandidateCard.tsx index c35efa4..86df439 100644 --- a/src/client/components/CandidateCard.tsx +++ b/src/client/components/CandidateCard.tsx @@ -46,7 +46,7 @@ export function CandidateCard({ openExternalLink(productUrl); } }} - className="absolute top-2 right-2 z-10 w-6 h-6 flex items-center justify-center rounded-full bg-gray-100/80 text-gray-400 hover:bg-blue-100 hover:text-blue-500 opacity-0 group-hover:opacity-100 transition-all cursor-pointer" + className="absolute top-2 right-2 z-10 w-6 h-6 flex items-center justify-center rounded-full bg-gray-100/80 text-gray-400 hover:bg-gray-200 hover:text-gray-600 opacity-0 group-hover:opacity-100 transition-all cursor-pointer" title="Open product link" >
{weightGrams != null && ( - + {formatWeight(weightGrams)} )} {priceCents != null && ( - + {formatPrice(priceCents)} )} @@ -109,7 +109,7 @@ export function CandidateCard({ diff --git a/src/client/components/CandidateForm.tsx b/src/client/components/CandidateForm.tsx index 6a2ac11..a96077f 100644 --- a/src/client/components/CandidateForm.tsx +++ b/src/client/components/CandidateForm.tsx @@ -152,7 +152,7 @@ export function CandidateForm({ type="text" value={form.name} onChange={(e) => setForm((f) => ({ ...f, name: e.target.value }))} - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent" placeholder="e.g. Osprey Talon 22" /> {errors.name && ( @@ -177,7 +177,7 @@ export function CandidateForm({ onChange={(e) => setForm((f) => ({ ...f, weightGrams: e.target.value })) } - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent" placeholder="e.g. 680" /> {errors.weightGrams && ( @@ -202,7 +202,7 @@ export function CandidateForm({ onChange={(e) => setForm((f) => ({ ...f, priceDollars: e.target.value })) } - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent" placeholder="e.g. 129.99" /> {errors.priceDollars && ( @@ -234,7 +234,7 @@ export function CandidateForm({ value={form.notes} onChange={(e) => setForm((f) => ({ ...f, notes: e.target.value }))} rows={3} - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent resize-none" placeholder="Any additional notes..." />
@@ -254,7 +254,7 @@ export function CandidateForm({ onChange={(e) => setForm((f) => ({ ...f, productUrl: e.target.value })) } - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent" placeholder="https://..." /> {errors.productUrl && ( @@ -267,7 +267,7 @@ export function CandidateForm({ diff --git a/src/client/components/CategoryPicker.tsx b/src/client/components/CategoryPicker.tsx index 9d60f7a..095493c 100644 --- a/src/client/components/CategoryPicker.tsx +++ b/src/client/components/CategoryPicker.tsx @@ -169,7 +169,7 @@ export function CategoryPicker({ value, onChange }: CategoryPickerProps) { setInputValue(""); }} onKeyDown={handleKeyDown} - className={`w-full py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${ + className={`w-full py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent ${ !isOpen && selectedCategory ? "pl-8 pr-3" : "px-3" }`} /> @@ -187,7 +187,7 @@ export function CategoryPicker({ value, onChange }: CategoryPickerProps) { aria-selected={cat.id === value} className={`px-3 py-2 text-sm cursor-pointer flex items-center gap-1.5 ${ i === highlightIndex - ? "bg-blue-50 text-blue-900" + ? "bg-gray-100 text-gray-900" : "hover:bg-gray-50" } ${cat.id === value ? "font-medium" : ""}`} onClick={() => handleSelect(cat.id)} @@ -207,7 +207,7 @@ export function CategoryPicker({ value, onChange }: CategoryPickerProps) { aria-selected={false} className={`px-3 py-2 text-sm cursor-pointer border-t border-gray-100 ${ highlightIndex === filtered.length - ? "bg-blue-50 text-blue-900" + ? "bg-gray-100 text-gray-900" : "hover:bg-gray-50 text-gray-600" }`} onClick={handleStartCreate} @@ -231,7 +231,7 @@ export function CategoryPicker({ value, onChange }: CategoryPickerProps) { type="button" onClick={handleConfirmCreate} disabled={createCategory.isPending} - className="text-xs font-medium text-blue-600 hover:text-blue-800 disabled:opacity-50" + className="text-xs font-medium text-gray-600 hover:text-gray-800 disabled:opacity-50" > {createCategory.isPending ? "..." : "Create"} diff --git a/src/client/components/CreateThreadModal.tsx b/src/client/components/CreateThreadModal.tsx index 1933ce6..8c1c058 100644 --- a/src/client/components/CreateThreadModal.tsx +++ b/src/client/components/CreateThreadModal.tsx @@ -93,7 +93,7 @@ export function CreateThreadModal() { value={name} onChange={(e) => setName(e.target.value)} placeholder="e.g. Lightweight sleeping bag" - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent" /> @@ -108,7 +108,7 @@ export function CreateThreadModal() { id="thread-category" value={categoryId ?? ""} onChange={(e) => setCategoryId(Number(e.target.value))} - className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent bg-white" + className="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-gray-400 focus:border-transparent bg-white" > {categories?.map((cat) => (