)}
- {/* Selection Indicator */}
+ {/* Selection Indicator — white ring around the primary fill so the
+ * badge stays visible against any photo (light or dark). */}
{isSelected && (
-
-
+
+
)}
-
- {/* Rating Stars */}
+
+ {/* Rating Stars — sit in a translucent dark pill so yellow stars
+ * don't disappear against a yellow / sandy photo. */}
{photo.rating > 0 && (
-
+
{Array.from({ length: photo.rating }).map((_, i) => (
))}
)}
-
- {/* Flag Indicators */}
+
+ {/* Flag Indicators — every badge gets a white ring so it survives
+ * any photo content. */}
{isInActiveHeap && (
-
+
)}
{photo.is_duplicate && (
-
+
)}
{photo.is_discarded && (
-
+
)}
diff --git a/frontend/src/components/timeline/Timeline.tsx b/frontend/src/components/timeline/Timeline.tsx
index 2dd6d36..5e7c5b1 100644
--- a/frontend/src/components/timeline/Timeline.tsx
+++ b/frontend/src/components/timeline/Timeline.tsx
@@ -482,7 +482,7 @@ export function Timeline() {
}}
className="flex items-end pb-1"
>
-
+
{item.label}
diff --git a/frontend/src/index.css b/frontend/src/index.css
index 4f65075..5ec91c1 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -12,7 +12,7 @@
--color-text: #e8e6e0;
--color-text-muted: #878580;
--color-text-faint: #4a4845;
- --color-primary: #3b6ed8;
+ --color-primary: #3b82f6;
--color-pick: #4f9e5c;
--color-reject: #c25a5a;
--color-star: #d4a340;
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index 6b88762..19571cc 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -17,7 +17,7 @@ export default {
text: '#e8e6e0',
'text-muted': '#878580',
'text-faint': '#4a4845',
- primary: '#3b6ed8', // deep royal blue
+ primary: '#3b82f6', // saturated blue (Tailwind blue-500) — high contrast on dark bg AND on photo content
pick: '#4f9e5c', // green for picked
reject: '#c25a5a', // red for rejected
star: '#d4a340', // amber for stars