You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Colour is used as a visual signal in several places, but not as one coherent system. As of #468 there are now two category-colour code paths that can drift, plus scattered hardcoded status colours, and none of the accent colours derive from the theme seed (so they don't adapt to dark mode or per-festival theming). Worth a deliberate pass on how colour is used across the app.
Current state
CategoryColorHelper (lib/utils/category_color_helper.dart) now has two methods that both map a category to a colour:
getCategoryColor(context, category) — theme-aware, used for chips/badges.
getAccentColor(category) — a fixed hand-picked palette (amber/red/green/…), used for the drink list card and the Similar Drinks carousel left edges.
These can assign the same category different colours.
Availability has its own colour logic (_AvailabilityChip in lib/widgets/drink_card.dart, plus the hero availability row), and there's a hardcoded "tasted" green (0xFF2E7D32 / 0xFF4CAF50) duplicated between the drink card's status badge and the carousel mini-card's status icon.
The fixed accent palette isn't derived from appSeedColor (lib/app_theme.dart), so it doesn't shift for dark mode or a per-festival theme.
What to think about
Consolidate category colours into one source of truth — fold the two CategoryColorHelper methods together, or clearly separate "accent" vs "chip" roles so they can't diverge.
Decide colour-as-signal usage deliberately across category / availability / personal status (tasted, want-to-try): a small documented palette rather than scattered hex constants.
Keep accessibility intact: colour stays supplementary (never the sole signal), with contrast checked in both light and dark themes.
Related
Per-festival themes and user theme selection #40 (per-festival themes and user theme selection) overlaps on the theming/seed side, but is distinct from the "how we use colour as a design language" question here.
Summary
Colour is used as a visual signal in several places, but not as one coherent system. As of #468 there are now two category-colour code paths that can drift, plus scattered hardcoded status colours, and none of the accent colours derive from the theme seed (so they don't adapt to dark mode or per-festival theming). Worth a deliberate pass on how colour is used across the app.
Current state
CategoryColorHelper(lib/utils/category_color_helper.dart) now has two methods that both map a category to a colour:getCategoryColor(context, category)— theme-aware, used for chips/badges.getAccentColor(category)— a fixed hand-picked palette (amber/red/green/…), used for the drink list card and the Similar Drinks carousel left edges.These can assign the same category different colours.
_AvailabilityChipinlib/widgets/drink_card.dart, plus the hero availability row), and there's a hardcoded "tasted" green (0xFF2E7D32/0xFF4CAF50) duplicated between the drink card's status badge and the carousel mini-card's status icon.appSeedColor(lib/app_theme.dart), so it doesn't shift for dark mode or a per-festival theme.What to think about
CategoryColorHelpermethods together, or clearly separate "accent" vs "chip" roles so they can't diverge.Related