Redesign the UI after the fitness reference and replace the logo
Light sage-to-cream ambient backdrop, frosted glass controls and painted SceneArt landscapes in place of photography. Home becomes a dashboard with a two-tone greeting, a frosted summary ring, category portraits, an up-next rail of image-led cards and a floating glass tab bar. The routine library gets an image header and painted cards; the player gets a scene stage, steps on an arc, a dotted clock and a night pill with a lime spark. Goals become painted cards in their own colour. New logo: a lime sun resting on a ground line under two arcs. The splash raises the sun and lights the arcs; launcher icons and native splash are regenerated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw
This commit is contained in:
@@ -352,3 +352,55 @@ String targetLabel(DateTime? target) {
|
||||
}
|
||||
return "$days day${days == 1 ? "" : "s"} left";
|
||||
}
|
||||
|
||||
/// The painted landscape a routine kind wears on its cards.
|
||||
List<Color> scenePalette(RoutineKind value) {
|
||||
switch (value) {
|
||||
case RoutineKind.Workout:
|
||||
return sceneWorkout;
|
||||
case RoutineKind.Meditation:
|
||||
return sceneMeditation;
|
||||
case RoutineKind.MustDo:
|
||||
return sceneMustDo;
|
||||
}
|
||||
}
|
||||
|
||||
/// A landscape tinted from a goal's accent, so a goal's cards read as its own.
|
||||
List<Color> goalScene(Color accent) {
|
||||
final HSLColor base = HSLColor.fromColor(accent);
|
||||
Color shade(double lightness, double saturation) => base
|
||||
.withLightness(lightness)
|
||||
.withSaturation((base.saturation * saturation).clamp(0.0, 1.0))
|
||||
.toColor();
|
||||
|
||||
return <Color>[
|
||||
shade(0.80, 0.55),
|
||||
const Color(0xFFF6EFE2),
|
||||
const Color(0xFFFFD9A0),
|
||||
shade(0.66, 0.6),
|
||||
shade(0.48, 0.8),
|
||||
shade(0.30, 0.9),
|
||||
const Color(0xFFE5793D),
|
||||
];
|
||||
}
|
||||
|
||||
/// The landscape for a task row, chosen by how much the task weighs.
|
||||
List<Color> classScene(CommitmentClass value) {
|
||||
switch (value) {
|
||||
case CommitmentClass.NonNegotiable:
|
||||
return sceneMustDo;
|
||||
case CommitmentClass.Standard:
|
||||
return sceneMeditation;
|
||||
case CommitmentClass.Elective:
|
||||
return sceneWorkout;
|
||||
}
|
||||
}
|
||||
|
||||
/// A stable seed from any string, so the same item always gets the same scene.
|
||||
int sceneSeed(String key) {
|
||||
int hash = 7;
|
||||
for (int unit in key.codeUnits) {
|
||||
hash = (hash * 31 + unit) & 0x7fffffff;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user