Cookest
Mobile App

Theme System

Cookest brand design tokens and how they are applied in Flutter

Theme System

The entire Cookest visual language is defined in lib/src/shared/theme/shadcn_theme.dart.

Color tokens

TokenHexUsage
sage#7A9A65Primary actions, active nav, selected states, checkmarks
darkGreen#1C3A2AHeadings, screen titles, primary text
background#F8F8F6Every screen background
surface#FFFFFFCards, bottom sheets, dialogs
textMuted#6B7280Secondary text, metadata (times, ratings)
textCaption#9CA3AFCaptions, nav labels (inactive), placeholders
amber#D97706Expiry warnings, pantry alerts
amberLight#FFF8E7Alert strip background
border#E5E7EBInput borders, dividers
divider#F0F0EEBottom nav separator, section dividers

Typography

StyleFontSizeWeightUsage
Display / GreetingPlayfair Display26pxRegularHome screen greeting
Section headerPlayfair Display18pxRegular"What's cooking right now?"
App bar titlePlayfair Display22pxBoldScreen titles
Recipe title (card)Playfair Display16–18pxRegularRecipe names on cards
Body / List itemsInter14pxRegularIngredients, pantry items
MetadataInter13pxRegularCook times, ratings, categories
CaptionInter12pxRegularEmpty states, helper text, nav labels
Button labelInter14pxMediumAll buttons
Section headerInter15pxSemiBold"Breakfast", "Dairy", etc.

Rule: Playfair Display appears only in the contexts listed above. All other text uses Inter.

Shadow token

BoxShadow(
  color: Color(0x09000000),  // rgba(0,0,0,0.035)
  blurRadius: 12,
  offset: Offset(0, 2),
)

Applied to: recipe cards, home screen feature card, modal bottom sheets. Nothing else.

ThemeData configuration

ThemeData(
  colorScheme: ColorScheme.light(
    primary: Color(0xFF7A9A65),     // sage
    surface: Color(0xFFFFFFFF),
    background: Color(0xFFF8F8F6),
    onSurface: Color(0xFF1C3A2A),
  ),
  cardTheme: CardTheme(
    elevation: 0,
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(16),
    ),
  ),
  appBarTheme: AppBarTheme(
    elevation: 0,
    backgroundColor: Color(0xFFF8F8F6),
  ),
)

Microinteractions

InteractionImplementationDuration
Card pressScaleTransition to 0.9780ms
Heart toggleScale animation + fill150ms
Nav icon switchAnimatedSwitcher crossfade150ms
Nav label colorAnimatedDefaultTextStyle150ms
Delete swipeProgressive opacity revealDrag-proportional
Meal plan generationStaggered fade-in per slot80ms between slots
Snackbar confirmationsScaffoldMessengerStandard

Bottom Navigation specifications

PropertyValue
Bar height64px + device safe area inset
Icon size22px (Lucide)
Label fontInter 10px, below icon
Active stateSage green filled icon + sage green label (#7A9A65)
Inactive state#9CA3AF for both icon and label
Top separator1px #F0F0EE line
Bar shadowNone
Icon transitionAnimatedSwitcher crossfade 150ms
Label transitionAnimatedDefaultTextStyle 150ms

Spacing system

ContextValue
Horizontal screen padding20px (standard), 16px (list items)
Card padding12–16px
Section header top spacing16px
Section header bottom spacing8px
Border radius β€” pill chips20px
Border radius β€” cards16px
Border radius β€” smaller containers12px
Border radius β€” list item thumbnails10px
Input field border1px #E5E7EB, 10px radius
Input field focus outline1.5px sage green

Selection indicators (ShadCN influence)

StateAppearance
Active tab / day selector2px sage green underline β€” no filled background
Active category chipSage green fill + white text
Inactive category chipWhite background + 1px #E5E7EB border + #6B7280 text

Interactive states

InteractionImplementationDuration
Button pressScaleTransition to 0.9780ms
Swipe-to-deleteDelete background opacity grows proportionally to swipe distance; reaches full colour at commit thresholdDrag-proportional
Heart / favourite toggleScale animation + fill transition150ms
Meal plan slot generationStaggered fade-in, 80ms delay between each slotPer slot
Cooking mode step transitionSlide + fadeβ€”

On this page