From 99225c2ee219702e375bdf140e00d27926c0b071 Mon Sep 17 00:00:00 2001 From: alvocool Date: Mon, 9 Nov 2026 08:07:31 +0300 Subject: [PATCH] Carry the new palette into every remaining colour The group chat bar drew white text on the old header token, now light; it sits on near-black instead. Status, class, routine-kind, goal and chart colours move from greens and navies to the reference scheme: orange for met and held, near-black for fine and neutral, deeper orange then red as standing worsens. Home's ring and kept-day leaves and Progress's bars use the full accent so they read on grey. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw --- .../Grounded/see/group/GroupChatState.dart | 13 ++-- frontend/lib/Grounded/see/home/HomeState.dart | 4 +- .../Grounded/see/progress/ProgressState.dart | 4 +- frontend/lib/Grounded/utils/Colors.dart | 65 ++++++++++--------- 4 files changed, 44 insertions(+), 42 deletions(-) diff --git a/frontend/lib/Grounded/see/group/GroupChatState.dart b/frontend/lib/Grounded/see/group/GroupChatState.dart index 9e2066e..f0fc8cf 100644 --- a/frontend/lib/Grounded/see/group/GroupChatState.dart +++ b/frontend/lib/Grounded/see/group/GroupChatState.dart @@ -145,13 +145,14 @@ class GroupChatState extends State implements ConnectGroupChat { return Container( decoration: BoxDecoration( - borderRadius: const BorderRadius.all(Radius.circular(12)), + borderRadius: + const BorderRadius.vertical(bottom: Radius.circular(20)), gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ - Color.lerp(accent, colorHeaderBottom, 0.55)!, - colorHeaderBottom, + Color.lerp(accent, colorNight, 0.55)!, + colorNight, ], ), ), @@ -178,7 +179,7 @@ class GroupChatState extends State implements ConnectGroupChat { .join(", "), 12, TextType.Regular, - color: colorHeaderMuted, + color: colorWhite.withValues(alpha: 0.65), maxLines: 1, overflow: TextOverflow.ellipsis), ], @@ -187,7 +188,7 @@ class GroupChatState extends State implements ConnectGroupChat { const SizedBox(width: 10), avatarStack( widget.group.members.map((member) => member.name).toList(), 30, - max: 3, border: colorHeaderBottom), + max: 3, border: colorNight), ], ), ); @@ -257,7 +258,7 @@ class GroupChatState extends State implements ConnectGroupChat { color: colorWhite, height: 1.4), const SizedBox(height: 4), text(_time(message.sentAt), 10, TextType.Regular, - color: colorHeaderMuted), + color: colorWhite.withValues(alpha: 0.65)), ], ), ), diff --git a/frontend/lib/Grounded/see/home/HomeState.dart b/frontend/lib/Grounded/see/home/HomeState.dart index beb96ee..fe9d335 100644 --- a/frontend/lib/Grounded/see/home/HomeState.dart +++ b/frontend/lib/Grounded/see/home/HomeState.dart @@ -741,7 +741,7 @@ class HomeState extends State implements ConnectHome { height: 26, child: Center( child: kept - ? Icon(Icons.eco, size: 24, color: colorBarElective) + ? Icon(Icons.eco, size: 24, color: colorAccent) : text("${date.day}", 16, today ? TextType.Medium : TextType.Regular, color: today ? colorHeaderText : colorHeaderMuted), @@ -782,7 +782,7 @@ class HomeState extends State implements ConnectHome { fraction: fraction, size: 70, stroke: 4, - fill: colorBarElective, + fill: colorAccent, track: colorHeaderLine, child: Icon(CupertinoIcons.add, size: 30, color: colorHeaderText), diff --git a/frontend/lib/Grounded/see/progress/ProgressState.dart b/frontend/lib/Grounded/see/progress/ProgressState.dart index 7f2231d..96a42f4 100644 --- a/frontend/lib/Grounded/see/progress/ProgressState.dart +++ b/frontend/lib/Grounded/see/progress/ProgressState.dart @@ -331,8 +331,8 @@ class ProgressState extends State implements ConnectProgress { height: future ? 4 : 6 + 84 * fraction, decoration: BoxDecoration( color: isCurrent - ? colorNight - : (future ? colorMuted : colorChartGrid), + ? colorAccent + : (future ? colorMuted : colorAccentSoft), borderRadius: const BorderRadius.all(Radius.circular(4)), ), ), diff --git a/frontend/lib/Grounded/utils/Colors.dart b/frontend/lib/Grounded/utils/Colors.dart index f1faf40..3bd05f6 100644 --- a/frontend/lib/Grounded/utils/Colors.dart +++ b/frontend/lib/Grounded/utils/Colors.dart @@ -44,7 +44,8 @@ var colorMilkWhite = const Color(0xFFDADADA); var colorMuted = const Color(0xFFE2E2E2); var colorSecondary = const Color(0xFFF1F1F1); -var colorPositive = const Color(0xFF2F6F4E); +/// Met, held, done: the accent, as the reference's met bars are. +var colorPositive = const Color(0xFFEC6A36); var colorNegative = const Color(0xFFB3261E); var colorGrey = const Color(0xFFA8A8A8); var colorGrey2 = const Color(0xFF6E6E6E); @@ -55,8 +56,8 @@ var colorReddish = const Color(0xFFC0392B); var colorDarkBlue = const Color(0xFF10161F); // ── Semantic ────────────────────────────────────────────────────────────────── -const Color colorSuccess = Color(0xFF2E7D4F); -const Color colorWarning = Color(0xFFC98A04); +const Color colorSuccess = Color(0xFFEC6A36); +const Color colorWarning = Color(0xFFB8741A); const Color colorDestructive = Color(0xFFA32C1C); const Color colorBlack = Color(0xFF000000); const Color colorBorder = Color(0x14000000); @@ -65,48 +66,48 @@ const Color colorDivider = Color(0x12000000); // ── Standing tiers ──────────────────────────────────────────────────────────── // Each standing has one colour used consistently everywhere it appears, so the // tier is legible at a glance without reading the label. -const Color colorStandingGood = Color(0xFF2F6F4E); -const Color colorStandingGoodBg = Color(0xFFE4EFE8); -const Color colorStandingWarned = Color(0xFFC98A04); -const Color colorStandingWarnedBg = Color(0xFFFAF0D8); -const Color colorStandingGrounded = Color(0xFFB5442F); -const Color colorStandingGroundedBg = Color(0xFFF7E3DE); +const Color colorStandingGood = Color(0xFF1C1C1C); +const Color colorStandingGoodBg = Color(0xFFFBE4D9); +const Color colorStandingWarned = Color(0xFFEC6A36); +const Color colorStandingWarnedBg = Color(0xFFFBE4D9); +const Color colorStandingGrounded = Color(0xFFC2410C); +const Color colorStandingGroundedBg = Color(0xFFF7D9CC); const Color colorStandingLockdown = Color(0xFF7A1F14); const Color colorStandingLockdownBg = Color(0xFFEFD6D2); // ── Commitment classes ──────────────────────────────────────────────────────── -const Color colorClassNonNegotiable = Color(0xFF7A1F14); -const Color colorClassNonNegotiableBg = Color(0xFFF3DFDB); -const Color colorClassStandard = Color(0xFF2C4A63); -const Color colorClassStandardBg = Color(0xFFE0E8EF); -const Color colorClassElective = Color(0xFF6E6E6E); -const Color colorClassElectiveBg = Color(0xFFEDEDED); +const Color colorClassNonNegotiable = Color(0xFFC2410C); +const Color colorClassNonNegotiableBg = Color(0xFFF7D9CC); +const Color colorClassStandard = Color(0xFF1C1C1C); +const Color colorClassStandardBg = Color(0xFFE6E6E6); +const Color colorClassElective = Color(0xFF8A8A8A); +const Color colorClassElectiveBg = Color(0xFFF1F1F1); // ── Routine kinds ───────────────────────────────────────────────────────────── // Kind colours tint the routine library and the runner stage. They are kept // clear of the standing palette so a workout never reads as a warning. -const Color colorKindWorkout = Color(0xFF2F6F4E); -const Color colorKindWorkoutBg = Color(0xFFE4EFE8); -const Color colorKindWorkoutDeep = Color(0xFF173D2A); -const Color colorKindMeditation = Color(0xFF4F5D86); -const Color colorKindMeditationBg = Color(0xFFE5E8F2); -const Color colorKindMeditationDeep = Color(0xFF232A45); -const Color colorKindMustDo = Color(0xFF3A3A3A); -const Color colorKindMustDoBg = Color(0xFFEAEAE6); +const Color colorKindWorkout = Color(0xFFEC6A36); +const Color colorKindWorkoutBg = Color(0xFFFBE4D9); +const Color colorKindWorkoutDeep = Color(0xFF5A2410); +const Color colorKindMeditation = Color(0xFF5F6472); +const Color colorKindMeditationBg = Color(0xFFE8E9EC); +const Color colorKindMeditationDeep = Color(0xFF262A33); +const Color colorKindMustDo = Color(0xFF1C1C1C); +const Color colorKindMustDoBg = Color(0xFFE6E6E6); const Color colorKindMustDoDeep = Color(0xFF1E1E1E); // ── Goal accents ────────────────────────────────────────────────────────────── // The swatches a goal can wear. Muted on purpose — a goal is an ambition, not // an alarm, so none of these collide with the standing tiers. const List goalAccents = [ - Color(0xFF141414), - Color(0xFF2F6F4E), - Color(0xFF2C4A63), - Color(0xFF4F5D86), - Color(0xFF6B4F86), + Color(0xFF1C1C1C), + Color(0xFFEC6A36), + Color(0xFF5F6472), + Color(0xFFC2410C), Color(0xFF8A5A2B), - Color(0xFF5E6B3A), - Color(0xFF3F6E73), + Color(0xFFB8741A), + Color(0xFF3A3A3A), + Color(0xFF9A3A14), ]; // ── Ambient ─────────────────────────────────────────────────────────────────── @@ -167,8 +168,8 @@ const List sceneMustDo = [ ]; // ── Debt / charting ─────────────────────────────────────────────────────────── -const Color colorDebtLine = Color(0xFFB5442F); -const Color colorDebtFill = Color(0x1AB5442F); +const Color colorDebtLine = Color(0xFFEC6A36); +const Color colorDebtFill = Color(0x1AEC6A36); const Color colorChartGrid = Color(0x0F000000); const Color colorChartAxis = Color(0xFF8A8A8A);