Watch And Earn docs
v4.0.0
Live demoConsole demo Get help
● Set up · Neon Plum design 4.0

Design and theming
fonts, tokens, re-theming.

4.0 ships a new design called Neon Plum: dark and light themes, two bundled open-source fonts, one file of design tokens and a set of signature components. This page shows where each part lives and how to give the app your own look.

app/lib/core/design.dartBricolage GrotesqueInterSIL OFL 1.1

01What changed in 4.0

  • Five tabs: Home · Earn · Play · Wallet · Profile. Ranks, teams, events and the season moved under Play and Profile. Where the cash wallet is off for the platform, the Wallet tab becomes Rewards (store and inventory).
  • Dark theme by default, light theme available; users choose light, dark or system in the app's settings.
  • Signature components in app/lib/ui/widgets/ds.dart: BalanceHero (points and cash side by side with a count-up), PayoutProgressCard, GoalRow, OfferTile, GameCard (illustrations drawn in code), StatusChip and MoneyText (every money amount on screen goes through it).
  • Motion in app/lib/ui/widgets/motion.dart: page transitions, staggered entrances, press feedback, an animated aurora and skeleton loaders. All of it switches off when the system asks for reduced motion.

The design is original work: no copied assets and no third-party brand logos except the Google and Apple sign-in buttons.

02Fonts

FontUsed forFileLicence
Bricolage GrotesqueHeadlines and big numbers (weights 700 to 800, variable wght and opsz axes)app/assets/fonts/BricolageGrotesque.ttfSIL Open Font License 1.1, © 2022 The Bricolage Grotesque Project Authors. Text: app/assets/fonts/BricolageGrotesque-OFL.txt
InterUI and body text; money and counters use tabular figures so numbers do not jitterapp/assets/fonts/Inter.ttfSIL Open Font License 1.1, © 2020 The Inter Project Authors. Text: app/assets/fonts/Inter-OFL.txt

Both are bundled in the app (declared under flutter: fonts: in app/pubspec.yaml), so the app does not download fonts at run time. The OFL lets you use, modify and redistribute them in your app; it does not allow selling the font files on their own, and the licence text must travel with them. Keep the licence files in the package.

03Design tokens

All colours, radii, spacing and motion values are in app/lib/core/design.dart (class Ds). app/lib/core/theme.dart builds the dark and light ThemeData from them, and screens read colours through Ds.of(context), so both themes stay in sync.

TokenDarkLight
Background bg#12081F#F6F3FB
Surface surface#1C1030#FFFFFF
Raised surface surface2#271842#EFE9F8
Hairline strokewhite at 8 % (0x14FFFFFF)ink at 8 % (0x141A0B2E)
Text text#F6F1FF#1A0B2E
Secondary text muted#B3A6CC#6B5F80
TokenValueMeaning
magenta → violet#FF3DA5 → #8B5CFFBrand gradient. The console's accent colour replaces the first stop.
gemLight, gem#A78BFA, #7C3AEDPoints (violet gem)
mintLight, mint#2EE6A6, #10B981Cash (mint). Points and cash always have different colours.
gold#FFC94DHighlights, streaks
danger#FF5A6EErrors, rejected
Radii rSm rMd rLg rXl12, 18, 26, 32Corners
Spacing s1 to s84-point grid (4 to 32)Padding and gaps
Motion fast normal slow180, 320, 600 ms, ease-out cubicAnimations
glow()accent at 35 %, blur 28For the one highlighted card per screen, never everywhere

04Re-theme the app

  1. Accent colour, no buildConsole → Brand → Accent colour. It becomes the first stop of the brand gradient and the theme's primary colour in both themes. The console default #EC4899 (the 3.x accent) is shown as the 4.0 magenta #FF3DA5 (parseHex() in app/lib/core/theme.dart); any other value is used as is. A theme the user bought in the rewards store and equipped overrides it for that user.
  2. Surfaces and textChange the Ds.dark and Ds.light values in app/lib/core/design.dart. Keep enough contrast between text/muted and the backgrounds.
  3. Brand, points and cash coloursChange magenta, violet, gem* and mint* in the same file. Keep points and cash visibly different: users must never confuse the two balances.
  4. FontsTo use other fonts, put the files in app/assets/fonts/, declare them in app/pubspec.yaml under flutter: fonts:, and change the family names 'BricolageGrotesque' and 'Inter' in design.dart and theme.dart. If you remove a bundled font, remove its OFL text too; if you add one, ship its licence.
  5. Default themeNew installs start in dark mode (ThemeMode.dark in app/lib/state/app_state.dart). Change it there if you prefer light or system.
  6. Check both themesRun the web demo (flutter run -d chrome --dart-define=DEMO_MODE=true), switch light and dark in Settings, then run flutter analyze and flutter test.

App name, icon, bundle id and the points name: Rebranding.