fix(theme): remove every hardcoded Apple/Material colour left in the UI

Porting the palette was not enough: the Warm Cinema charter only reached the
widgets that read from AppColors. Nineteen screen and widget files still painted
Apple TV values inline, so the app kept showing blue — most visibly on the
selected navigation pill.

Swept out:
- 0xFF0A84FF (Apple blue) on the selected nav pill, category card icons and the
  "add playlist" button
- 0xFF4FC3F7 and 0xFF1565C0 in the player overlays
- Colors.blueAccent / Colors.blue in dialogs
- Apple greys 1C1C1E / 2C2C2E / 3A3A3C / 8E8E93 -> warm charcoals
- 128 Colors.white* -> the onSurfaceNN cream ladder (a pure white on a warm
  ground reads blue, which is the charter's whole point)
- Colors.red / green / amber / yellow / grey* -> error, success, ratingGold,
  outlineVariant
- pure black ink on light fills -> onPrimaryFixed, a warm near-black
- the white focus glow -> an ember glow

Deliberately left true black: the video surface backgrounds and the scrims over
posters and video, where a warm tint would clash with the picture.

Adds the onPrimaryFixed / primaryFixed / onSurface70 tokens the sweep needed.

Verified: no Material or Apple colour literal remains outside lib/core/theme;
flutter analyze reports no errors; 19/19 tests pass; release APK builds.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5 committed 2026-08-11 20:39:58 +02:00
1 parent 8d74bbb320
commit 694b1257b9
21 files changed
+221 -184

No files matched your search

@@ -129,7 +129,7 @@ class _MobileSeriesDetailScreenState
shape: BoxShape.circle,
),
child: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.white),
icon: const Icon(Icons.arrow_back, color: AppColors.onSurface),
onPressed: () => Navigator.pop(context),
tooltip: 'Back',
),
@@ -149,7 +149,7 @@ class _MobileSeriesDetailScreenState
maxHeightDiskCache: 720,
cacheManager: AppCacheManager.instance,
errorWidget: (_, __, ___) =>
Container(color: Colors.grey.shade900),
Container(color: AppColors.surfaceContainerLowest),
),
// Gradient Overlay
Container(
@@ -190,7 +190,7 @@ class _MobileSeriesDetailScreenState
const Icon(
Icons.star,
size: 16,
color: Colors.amber,
color: AppColors.ratingGold,
),
const SizedBox(width: 4),
Text(
@@ -261,15 +261,15 @@ class _MobileSeriesDetailScreenState
}
},
backgroundColor: isDark
? const Color(0xFF1C1C1E)
: Colors.grey.shade300,
selectedColor: isDark ? Colors.white : Colors.blue,
? AppColors.surfaceContainer
: AppColors.surfaceContainerHigh,
selectedColor: isDark ? AppColors.onSurface : AppColors.primaryFill,
labelStyle: TextStyle(
color: isSelected
? (isDark ? Colors.black : Colors.white)
? (isDark ? AppColors.onPrimaryFixed : AppColors.onSurface)
: (isDark
? Colors.grey.shade400
: Colors.grey.shade700),
? AppColors.textSecondary
: AppColors.outlineVariant),
fontWeight:
isSelected ? FontWeight.w600 : FontWeight.w400,
),
@@ -323,10 +323,10 @@ class _MobileSeriesDetailScreenState
}
// Force dark mode colors since background is hardcoded dark
const textColor = Colors.white;
final secondaryTextColor = Colors.grey.shade400;
const surfaceColor = Color(0xFF1C1C1E);
const primaryColor = Colors.white; // Or accent color if preferred
const textColor = AppColors.onSurface;
final secondaryTextColor = AppColors.textSecondary;
const surfaceColor = AppColors.surfaceContainer;
const primaryColor = AppColors.onSurface; // Or accent color if preferred
return InkWell(
onTap: () {
@@ -356,7 +356,7 @@ class _MobileSeriesDetailScreenState
Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Colors.white10)),
border: Border(bottom: BorderSide(color: AppColors.onSurface12)),
),
child: Row(
children: [
@@ -374,7 +374,7 @@ class _MobileSeriesDetailScreenState
child: Icon(
isWatched ? Icons.check : Icons.play_arrow,
color: isWatched
? Colors.black // Checkmark on white bg
? AppColors.onPrimaryFixed // Checkmark on white bg
: primaryColor, // Play icon
size: 20,
),
@@ -413,7 +413,7 @@ class _MobileSeriesDetailScreenState
LinearProgressIndicator(
value: progress,
backgroundColor: Colors.transparent,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.red),
valueColor: const AlwaysStoppedAnimation<Color>(AppColors.error),
minHeight: 2,
),
],