heroThemes top-level constant
Every hero, in id order. Ids 1–4: Material 3 Expressive; 5–7: NeoPOP; 20–22: Liquid Glass; 40–42: Neumorphism; 50–52: Retro hardware; 60–62: Neo-brutalism; 70–72: Claymorphism; 100–102: Y2K / Frutiger Aero; 110–112: Paper & ink; 130–132: Cyberpunk; 140–142: Vaporwave; 150–152: Bauhaus.
Implementation
const List<ThemeSpec> heroThemes = [
// 1 — a soft violet night: lavender operators, rose `=`, cookie keys.
ThemeSpec(
seed: 1,
family: ThemeFamily.m3Expressive,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 1,
brightness: ThemeBrightness.dark,
palette: Palette(
background: 0xFF1C1A22,
surface: 0xFF25222D,
displayText: 0xFFF4EFFF,
previewText: 0xFFC9C2D8,
error: 0xFFFFB4AB,
caret: 0xFFD0BCFF,
focusRing: 0xFFD0BCFF,
accent: 0xFFD0BCFF,
digit: KeyColors(face: 0xFF332E3D, label: 0xFFF4EFFF, edge: 0xFF474351),
operator: KeyColors(
face: 0xFFD0BCFF,
label: 0xFF24005A,
edge: 0xFFE6DDFF,
),
equals: KeyColors(face: 0xFFFFB0CF, label: 0xFF3E0021, edge: 0xFFFFD9E7),
function: KeyColors(
face: 0xFF4A4358,
label: 0xFFFFFFFF,
edge: 0xFF60596C,
),
shadow: 0x52000000,
highlight: 0x14FFFFFF,
seedColor: 0xFFD0BCFF,
),
keyShape: KeyShapeSpec(
kind: KeyShapeKind.m3eMorph,
cornerPermille: 500,
m3eShape: M3eShape.cookie4Sided,
morphTo: KeyShapeKind.roundedRect,
morphCornerPermille: 300,
operatorKind: KeyShapeKind.m3eMorph,
operatorM3eShape: M3eShape.circle,
),
keyStyle: _m3eStyle,
type: _robotoFlex,
background: BackgroundSpec(
kind: BackgroundKind.linearGradient,
colors: [0xFF1C1A22, 0xFF221B2A],
angleTenths: 1350,
),
motion: _m3eMotionSoft,
sound: SoundPackId.softTap,
name: 'Lavender Dusk',
nonColourOperatorCue: OperatorCue.shape,
),
// 2 — whisked green tea on rice paper; a deep forest `=`.
ThemeSpec(
seed: 2,
family: ThemeFamily.m3Expressive,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 2,
brightness: ThemeBrightness.light,
palette: Palette(
background: 0xFFF5F8EE,
surface: 0xFFE9EEE0,
displayText: 0xFF181D14,
previewText: 0xFF434C3B,
error: 0xFFBA1A1A,
caret: 0xFF3F6A2E,
focusRing: 0xFF3F6A2E,
accent: 0xFF3F6A2E,
digit: KeyColors(face: 0xFFFFFFFF, label: 0xFF181D14, edge: 0xFFE4E4E4),
operator: KeyColors(
face: 0xFF3F6A2E,
label: 0xFFFFFFFF,
edge: 0xFF2F5221,
),
equals: KeyColors(face: 0xFF1E3D14, label: 0xFFFFFFFF, edge: 0xFF0E2706),
function: KeyColors(
face: 0xFFD9E7CB,
label: 0xFF131F0B,
edge: 0xFFC0CCB5,
),
shadow: 0x29000000,
highlight: 0x66FFFFFF,
seedColor: 0xFF3F6A2E,
),
keyShape: KeyShapeSpec(
kind: KeyShapeKind.m3eMorph,
cornerPermille: 500,
m3eShape: M3eShape.circle,
morphTo: KeyShapeKind.roundedRect,
morphCornerPermille: 300,
),
keyStyle: _m3eStyle,
type: _robotoFlex,
background: BackgroundSpec(
kind: BackgroundKind.solid,
colors: [0xFFF5F8EE],
),
motion: _m3eMotionSoft,
sound: SoundPackId.softTap,
name: 'Matcha Morning',
),
// 3 — warm coral operators and a lagoon-teal `=` on shell white.
ThemeSpec(
seed: 3,
family: ThemeFamily.m3Expressive,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 3,
brightness: ThemeBrightness.light,
palette: Palette(
background: 0xFFFFF8F6,
surface: 0xFFFAEBE6,
displayText: 0xFF231917,
previewText: 0xFF54433F,
error: 0xFFBA1A1A,
caret: 0xFF9A3B22,
focusRing: 0xFF9A3B22,
accent: 0xFF9A3B22,
digit: KeyColors(face: 0xFFFFFFFF, label: 0xFF231917, edge: 0xFFE4E4E4),
operator: KeyColors(
face: 0xFFA8401F,
label: 0xFFFFFFFF,
edge: 0xFF853116,
),
equals: KeyColors(face: 0xFF00695E, label: 0xFFFFFFFF, edge: 0xFF005047),
function: KeyColors(
face: 0xFFFFDAD1,
label: 0xFF3A0B01,
edge: 0xFFE0C2BA,
),
shadow: 0x29000000,
highlight: 0x66FFFFFF,
seedColor: 0xFFA8401F,
),
keyShape: KeyShapeSpec(
kind: KeyShapeKind.m3eMorph,
cornerPermille: 500,
m3eShape: M3eShape.cookie6Sided,
morphTo: KeyShapeKind.roundedRect,
morphCornerPermille: 300,
operatorKind: KeyShapeKind.m3eMorph,
operatorM3eShape: M3eShape.sunny,
),
keyStyle: _m3eStyle,
type: _robotoFlex,
background: BackgroundSpec(
kind: BackgroundKind.solid,
colors: [0xFFFFF8F6],
),
motion: _m3eMotionBouncy,
sound: SoundPackId.softTap,
name: 'Coral Reef',
nonColourOperatorCue: OperatorCue.shape,
),
// 4 — deep-sea navy, periwinkle operators and a gold `=`.
ThemeSpec(
seed: 4,
family: ThemeFamily.m3Expressive,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 4,
brightness: ThemeBrightness.dark,
palette: Palette(
background: 0xFF0E1320,
surface: 0xFF161C2B,
displayText: 0xFFE9EEFF,
previewText: 0xFFB7C1DA,
error: 0xFFFFB4AB,
caret: 0xFFADC6FF,
focusRing: 0xFFADC6FF,
accent: 0xFFADC6FF,
digit: KeyColors(face: 0xFF1D2537, label: 0xFFE9EEFF, edge: 0xFF32394A),
operator: KeyColors(
face: 0xFFADC6FF,
label: 0xFF0A2A66,
edge: 0xFFD3E1FF,
),
equals: KeyColors(face: 0xFFFFD479, label: 0xFF3A2800, edge: 0xFFFFF3DC),
function: KeyColors(
face: 0xFF2D3950,
label: 0xFFFFFFFF,
edge: 0xFF444E63,
),
shadow: 0x52000000,
highlight: 0x14FFFFFF,
seedColor: 0xFFADC6FF,
),
keyShape: KeyShapeSpec(
kind: KeyShapeKind.m3eMorph,
cornerPermille: 500,
m3eShape: M3eShape.square,
morphTo: KeyShapeKind.roundedRect,
morphCornerPermille: 300,
),
keyStyle: _m3eStyle,
type: _robotoFlex,
background: BackgroundSpec(
kind: BackgroundKind.linearGradient,
colors: [0xFF0E1320, 0xFF121A2C],
),
motion: _m3eMotionBouncy,
sound: SoundPackId.softTap,
name: 'Midnight Sapphire',
),
// 5 — CRED-dark charcoal, mango operators, mint `=`.
ThemeSpec(
seed: 5,
family: ThemeFamily.neoPop,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 5,
brightness: ThemeBrightness.dark,
palette: Palette(
background: 0xFF0D0D0D,
surface: 0xFF171717,
displayText: 0xFFFFFFFF,
previewText: 0xFFBDBDBD,
error: 0xFFFF6B6B,
caret: 0xFFFFB800,
focusRing: 0xFFFFB800,
accent: 0xFFFFB800,
digit: KeyColors(face: 0xFF262626, label: 0xFFFFFFFF, edge: 0xFF020202),
operator: KeyColors(
face: 0xFFFFB800,
label: 0xFF0D0D0D,
edge: 0xFFB88400,
),
equals: KeyColors(face: 0xFF00E0B0, label: 0xFF0D0D0D, edge: 0xFF00A07D),
function: KeyColors(
face: 0xFF3B3B3B,
label: 0xFFFFFFFF,
edge: 0xFF101010,
),
shadow: 0xB3000000,
highlight: 0x14FFFFFF,
seedColor: 0xFFFFB800,
),
keyShape: KeyShapeSpec(kind: KeyShapeKind.roundedRect, cornerPermille: 0),
keyStyle: _neoPopStyle4,
type: _spaceGrotesk,
background: BackgroundSpec(
kind: BackgroundKind.solid,
colors: [0xFF0D0D0D],
),
motion: _neoPopMotion4,
sound: SoundPackId.pop,
name: 'Electric Mango',
),
// 6 — hot pink and acid lime on aubergine black, dotted ground.
ThemeSpec(
seed: 6,
family: ThemeFamily.neoPop,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 6,
brightness: ThemeBrightness.dark,
palette: Palette(
background: 0xFF121014,
surface: 0xFF1B181F,
displayText: 0xFFFFFFFF,
previewText: 0xFFC4BCCB,
error: 0xFFFF8A80,
caret: 0xFFFF4D94,
focusRing: 0xFFFF4D94,
accent: 0xFFFF4D94,
digit: KeyColors(face: 0xFF2A2530, label: 0xFFFFFFFF, edge: 0xFF040206),
operator: KeyColors(
face: 0xFFFF4D94,
label: 0xFF000000,
edge: 0xFFB31E60,
),
equals: KeyColors(face: 0xFFC6FF3D, label: 0xFF000000, edge: 0xFF93C017),
function: KeyColors(
face: 0xFF403848,
label: 0xFFFFFFFF,
edge: 0xFF140E19,
),
shadow: 0xB3000000,
highlight: 0x14FFFFFF,
seedColor: 0xFFFF4D94,
),
keyShape: KeyShapeSpec(kind: KeyShapeKind.roundedRect, cornerPermille: 40),
keyStyle: _neoPopStyle5,
type: _spaceGrotesk,
background: BackgroundSpec(
kind: BackgroundKind.pattern,
colors: [0xFF121014],
pattern: BackgroundPattern.dots,
patternColor: 0xFFEDE6F2,
patternScaleCdp: 1600,
patternOpacityPermille: 60,
),
motion: _neoPopMotion5,
sound: SoundPackId.pop,
name: 'Voltage Pink',
),
// 7 — arcade cyan and ember orange on blue-black, on a grid.
ThemeSpec(
seed: 7,
family: ThemeFamily.neoPop,
engineVersion: 1,
variant: ThemeVariant.hero,
heroId: 7,
brightness: ThemeBrightness.dark,
palette: Palette(
background: 0xFF0A1215,
surface: 0xFF121C20,
displayText: 0xFFF2FCFF,
previewText: 0xFFB3C6CC,
error: 0xFFFF8A65,
caret: 0xFF00D1FF,
focusRing: 0xFF00D1FF,
accent: 0xFF00D1FF,
digit: KeyColors(face: 0xFF1D292E, label: 0xFFF2FCFF, edge: 0xFF000305),
operator: KeyColors(
face: 0xFF00D1FF,
label: 0xFF001820,
edge: 0xFF0094B5,
),
equals: KeyColors(face: 0xFFFF7A3D, label: 0xFF1A0600, edge: 0xFFB54B14),
function: KeyColors(
face: 0xFF324349,
label: 0xFFFFFFFF,
edge: 0xFF09161A,
),
shadow: 0xB3000000,
highlight: 0x14FFFFFF,
seedColor: 0xFF00D1FF,
),
keyShape: KeyShapeSpec(kind: KeyShapeKind.roundedRect, cornerPermille: 80),
keyStyle: _neoPopStyle3,
type: _spaceGrotesk,
background: BackgroundSpec(
kind: BackgroundKind.pattern,
colors: [0xFF0A1215],
pattern: BackgroundPattern.grid,
patternColor: 0xFFD8F6FF,
patternScaleCdp: 2400,
patternOpacityPermille: 50,
),
motion: _neoPopMotion3,
sound: SoundPackId.pop,
name: 'Cyan Arcade',
),
// 20–22: Liquid Glass (liquid_glass_heroes.dart).
...liquidGlassHeroes,
// 40–42: Neumorphism (neumorphism_heroes.dart).
...neumorphismHeroes,
// 50–52: Retro hardware (retro_heroes.dart).
...retroHeroes,
// 60–62: Neo-brutalism (neo_brutalism_heroes.dart).
...neoBrutalismHeroes,
// 70–72: Claymorphism (claymorphism_heroes.dart).
...claymorphismHeroes,
// 100–102: Y2K / Frutiger Aero (y2k_aero_heroes.dart).
...y2kAeroHeroes,
// 110–112: Paper & ink (paper_ink_heroes.dart).
...paperInkHeroes,
// 130–132: Cyberpunk (cyberpunk_heroes.dart).
...cyberpunkHeroes,
// 140–142: Vaporwave (vaporwave_heroes.dart).
...vaporwaveHeroes,
// 150–152: Bauhaus (bauhaus_heroes.dart).
...bauhausHeroes,
];