Files
Sportstime/marketing-videos/src/theme.ts
Trey t 787a0f795e fix: 12 planning engine bugs + App Store preview export at 886x1920
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>
2026-02-15 17:08:50 -06:00

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;