Planning engine fixes (from adversarial code review): - Bug #1: sortByLeisure tie-breaking uses totalDrivingHours - Bug #2: allDates/calculateRestDays guard-let-break prevents infinite loop - Bug #3: same-day trip no longer rejected (>= in dateRange guard) - Bug #4: ScenarioD rationale shows game count not stop count - Bug #5: ScenarioD departureDate advanced to next day after last game - Bug #6: ScenarioC date range boundary uses <= instead of < - Bug #7: DrivingConstraints clamps maxHoursPerDriverPerDay via max(1.0,...) - Bug #8: effectiveTripDuration uses inclusive day counting (+1) - Bug #9: TripWizardViewModel validates endDate >= startDate - Bug #10: allDates() uses min/max instead of first/last for robustness - Bug #12: arrivalBeforeGameStart accounts for game end time at departure - Bug #15: ScenarioBPlanner replaces force unwraps with safe unwrapping Tests: 16 regression test suites + updated existing test expectations Marketing: Remotion canvas set to 886x1920 for App Store preview spec Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
41 lines
1009 B
TypeScript
41 lines
1009 B
TypeScript
export const THEME = {
|
|
colors: {
|
|
hero: "#2D6A4F",
|
|
search: "#F97316",
|
|
searchDark: "#1a1a2e",
|
|
customize: "#EAB308",
|
|
group: "#3B82F6",
|
|
itinerary: "#FFF8E7",
|
|
cta: "#DC2626",
|
|
white: "#FFFFFF",
|
|
black: "#000000",
|
|
textDark: "#1a1a2e",
|
|
},
|
|
spring: {
|
|
damping: 12,
|
|
mass: 0.5,
|
|
stiffness: 120,
|
|
},
|
|
textShadow: "0 4px 20px rgba(0, 0, 0, 0.4)",
|
|
textShadowLight: "0 2px 10px rgba(0, 0, 0, 0.15)",
|
|
font: {
|
|
heading: "Inter, -apple-system, BlinkMacSystemFont, sans-serif",
|
|
body: "Inter, -apple-system, BlinkMacSystemFont, sans-serif",
|
|
},
|
|
} as const;
|
|
|
|
export const SCENES = {
|
|
hero: { durationInFrames: 80 },
|
|
search: { durationInFrames: 80 },
|
|
customize: { durationInFrames: 80 },
|
|
group: { durationInFrames: 80 },
|
|
itinerary: { durationInFrames: 80 },
|
|
cta: { durationInFrames: 95 },
|
|
} as const;
|
|
|
|
export const TRANSITION_DURATION = 9;
|
|
export const FPS = 30;
|
|
export const WIDTH = 886;
|
|
export const HEIGHT = 1920;
|
|
export const TOTAL_DURATION = 450;
|