diff --git a/app/app.css b/app/app.css index ef68fea..eb30487 100644 --- a/app/app.css +++ b/app/app.css @@ -8,15 +8,6 @@ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; } -html, -body { - @apply bg-white dark:bg-gray-950; - - @media (prefers-color-scheme: dark) { - color-scheme: dark; - } -} - @theme inline { --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); @@ -53,75 +44,51 @@ body { --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); + --color-electric: var(--electric); + --color-amber-accent: var(--amber-accent); + --color-coral-accent: var(--coral-accent); +} + +html { + color-scheme: dark; } :root { --radius: 0.625rem; - --background: oklch(1 0 0); - --foreground: oklch(0.141 0.005 285.823); - --card: oklch(1 0 0); - --card-foreground: oklch(0.141 0.005 285.823); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.141 0.005 285.823); - --primary: oklch(0.21 0.006 285.885); + --background: oklch(0.13 0.015 255); + --foreground: oklch(0.95 0.01 255); + --card: oklch(0.18 0.02 255); + --card-foreground: oklch(0.95 0.01 255); + --popover: oklch(0.18 0.02 255); + --popover-foreground: oklch(0.95 0.01 255); + --primary: oklch(0.623 0.214 259.815); --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.967 0.001 286.375); - --secondary-foreground: oklch(0.21 0.006 285.885); - --muted: oklch(0.967 0.001 286.375); - --muted-foreground: oklch(0.552 0.016 285.938); - --accent: oklch(0.967 0.001 286.375); - --accent-foreground: oklch(0.21 0.006 285.885); - --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.92 0.004 286.32); - --input: oklch(0.92 0.004 286.32); - --ring: oklch(0.705 0.015 286.067); + --secondary: oklch(0.22 0.025 255); + --secondary-foreground: oklch(0.95 0.01 255); + --muted: oklch(0.22 0.025 255); + --muted-foreground: oklch(0.65 0.02 255); + --accent: oklch(0.25 0.03 255); + --accent-foreground: oklch(0.95 0.01 255); + --destructive: oklch(0.65 0.22 25); + --border: oklch(1 0 0 / 8%); + --input: oklch(1 0 0 / 12%); + --ring: oklch(0.623 0.214 259.815 / 50%); --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.141 0.005 285.823); - --sidebar-primary: oklch(0.21 0.006 285.885); + --sidebar: oklch(0.18 0.02 255); + --sidebar-foreground: oklch(0.95 0.01 255); + --sidebar-primary: oklch(0.623 0.214 259.815); --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.967 0.001 286.375); - --sidebar-accent-foreground: oklch(0.21 0.006 285.885); - --sidebar-border: oklch(0.92 0.004 286.32); - --sidebar-ring: oklch(0.705 0.015 286.067); -} - -.dark { - --background: oklch(0.141 0.005 285.823); - --foreground: oklch(0.985 0 0); - --card: oklch(0.21 0.006 285.885); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.21 0.006 285.885); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.92 0.004 286.32); - --primary-foreground: oklch(0.21 0.006 285.885); - --secondary: oklch(0.274 0.006 286.033); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.274 0.006 286.033); - --muted-foreground: oklch(0.705 0.015 286.067); - --accent: oklch(0.274 0.006 286.033); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.704 0.191 22.216); - --border: oklch(1 0 0 / 10%); - --input: oklch(1 0 0 / 15%); - --ring: oklch(0.552 0.016 285.938); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.21 0.006 285.885); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.274 0.006 286.033); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.552 0.016 285.938); + --sidebar-accent: oklch(0.25 0.03 255); + --sidebar-accent-foreground: oklch(0.95 0.01 255); + --sidebar-border: oklch(1 0 0 / 8%); + --sidebar-ring: oklch(0.623 0.214 259.815 / 50%); + --electric: oklch(0.623 0.214 259.815); + --amber-accent: oklch(0.79 0.17 70); + --coral-accent: oklch(0.68 0.19 35); } @layer base { diff --git a/app/components/DraftGrid.tsx b/app/components/DraftGrid.tsx index 418ad9f..bf98a3c 100644 --- a/app/components/DraftGrid.tsx +++ b/app/components/DraftGrid.tsx @@ -66,10 +66,10 @@ export function DraftGrid({ teamTime === undefined ? "text-muted-foreground" : teamTime > 60 - ? "text-green-600" + ? "text-emerald-400" : teamTime > 30 - ? "text-yellow-600" - : "text-red-600" + ? "text-amber-accent" + : "text-coral-accent" }`} > {formatTime(teamTime)} @@ -107,10 +107,10 @@ export function DraftGrid({
@@ -127,7 +127,7 @@ export function DraftGrid({
) : isCurrent ? ( -
+
On Clock
) : null} diff --git a/app/components/StandingsTable.tsx b/app/components/StandingsTable.tsx index c15ebb5..4867c24 100644 --- a/app/components/StandingsTable.tsx +++ b/app/components/StandingsTable.tsx @@ -44,14 +44,14 @@ export function StandingsTable({ if (change > 0) { return ( -
+
+{change}
); } else if (change < 0) { return ( -
+
{change}
diff --git a/app/components/__tests__/DraftGrid.test.tsx b/app/components/__tests__/DraftGrid.test.tsx index f8206df..97d64ac 100644 --- a/app/components/__tests__/DraftGrid.test.tsx +++ b/app/components/__tests__/DraftGrid.test.tsx @@ -82,8 +82,8 @@ describe('DraftGrid Component', () => { ); const currentPickCell = screen.getByText('On Clock').parentElement; - expect(currentPickCell).toHaveClass('border-blue-500'); - expect(currentPickCell).toHaveClass('bg-blue-50'); + expect(currentPickCell).toHaveClass('border-electric'); + expect(currentPickCell).toHaveClass('bg-electric/15'); }); }); diff --git a/app/components/draft/AvailableParticipantsSection.tsx b/app/components/draft/AvailableParticipantsSection.tsx index e877be2..65ef28e 100644 --- a/app/components/draft/AvailableParticipantsSection.tsx +++ b/app/components/draft/AvailableParticipantsSection.tsx @@ -152,7 +152,7 @@ export function AvailableParticipantsSection({ isDrafted ? "bg-muted/50 opacity-60" : !isEligible - ? "bg-red-50/30 dark:bg-red-950/20 opacity-75" + ? "bg-destructive/10 opacity-75" : "hover:bg-muted/50" }`} title={ diff --git a/app/components/draft/ConnectionOverlay.tsx b/app/components/draft/ConnectionOverlay.tsx index 044d34b..db34a8b 100644 --- a/app/components/draft/ConnectionOverlay.tsx +++ b/app/components/draft/ConnectionOverlay.tsx @@ -23,9 +23,9 @@ export function ConnectionOverlay({
{/* Spinner or Error Icon */} {connectionError ? ( -
+
{ if (seconds === null) return "text-muted-foreground"; - if (seconds > 60) return "text-green-600 dark:text-green-400"; - if (seconds > 30) return "text-yellow-600 dark:text-yellow-400"; - if (seconds > 10) return "text-red-600 dark:text-red-400"; - return "text-red-600 dark:text-red-400 animate-pulse"; + if (seconds > 60) return "text-emerald-400"; + if (seconds > 30) return "text-amber-accent"; + if (seconds > 10) return "text-coral-accent"; + return "text-coral-accent animate-pulse"; }; return ( @@ -126,10 +126,10 @@ export function DraftGridSection({
@@ -147,7 +147,7 @@ export function DraftGridSection({
) : isCurrent ? ( -
+
On Clock
) : null} @@ -178,10 +178,10 @@ export function DraftGridSection({ key={cell.pickNumber} className={`flex-1 min-w-32 h-20 border-2 rounded-lg p-2 transition-all ${ isCurrent - ? "border-blue-500 bg-blue-50 dark:bg-blue-950 shadow-lg" + ? "border-electric bg-electric/15 shadow-lg shadow-electric/10" : isPicked - ? "border-green-500 bg-green-50 dark:bg-green-950" - : "border-gray-300 bg-white dark:bg-gray-900" + ? "bg-emerald-500/10 border-emerald-500/30" + : "border-border bg-card" }`} title={`Overall Pick #${cell.pickNumber}`} > @@ -199,7 +199,7 @@ export function DraftGridSection({
) : isCurrent ? ( -
+
On Clock
) : null} diff --git a/app/components/scoring/QualifyingPointsStandings.tsx b/app/components/scoring/QualifyingPointsStandings.tsx index 0b9b636..89c03d1 100644 --- a/app/components/scoring/QualifyingPointsStandings.tsx +++ b/app/components/scoring/QualifyingPointsStandings.tsx @@ -103,15 +103,15 @@ export function QualifyingPointsStandings({ } return ( - + - + Qualifying Points Standings {isFinalized ? ( - + Finalized - Fantasy points have been assigned @@ -185,7 +185,7 @@ export function QualifyingPointsStandings({ {standing.participant.name} - + {parseFloat(standing.totalQualifyingPoints).toFixed(2)} QP @@ -195,7 +195,7 @@ export function QualifyingPointsStandings({ {scoringRules && !isFinalized && ( {isTop8 ? ( - + {projectedPoints} pts ) : ( diff --git a/app/components/scoring/ScoringRulesEditor.tsx b/app/components/scoring/ScoringRulesEditor.tsx index 6299288..f45d676 100644 --- a/app/components/scoring/ScoringRulesEditor.tsx +++ b/app/components/scoring/ScoringRulesEditor.tsx @@ -74,8 +74,8 @@ export function ScoringRulesEditor({ scoringRules, disabled = false }: ScoringRu ))}
-
-

+

+

💡 Tip: The default scoring rewards winning heavily (100 pts for 1st) but also values consistency (25 pts for 5th/6th). Customize these values to fit your league's strategy preferences. diff --git a/app/components/scoring/SeasonStandings.tsx b/app/components/scoring/SeasonStandings.tsx index 9feeea0..f8bdb0c 100644 --- a/app/components/scoring/SeasonStandings.tsx +++ b/app/components/scoring/SeasonStandings.tsx @@ -109,14 +109,14 @@ export function SeasonStandings({ if (change > 0) { return ( -

+
+{change}
); } else if (change < 0) { return ( -
+
{change}
@@ -186,16 +186,16 @@ export function SeasonStandings({ @@ -203,7 +203,7 @@ export function SeasonStandings({ {isFinalized ? ( - + Season complete - Fantasy points assigned to top 8 finishers @@ -281,7 +281,7 @@ export function SeasonStandings({ diff --git a/app/components/sports/SportSeasonCard.tsx b/app/components/sports/SportSeasonCard.tsx index 061dcf8..67a7397 100644 --- a/app/components/sports/SportSeasonCard.tsx +++ b/app/components/sports/SportSeasonCard.tsx @@ -30,21 +30,21 @@ export function SportSeasonCard({ switch (status) { case "upcoming": return ( - + Upcoming ); case "active": return ( - + Active ); case "completed": return ( - + Completed diff --git a/app/components/standings/StandingsTable.tsx b/app/components/standings/StandingsTable.tsx index 207c4ce..dd4b502 100644 --- a/app/components/standings/StandingsTable.tsx +++ b/app/components/standings/StandingsTable.tsx @@ -112,7 +112,7 @@ export function StandingsTable({ function RankBadge({ rank }: { rank: number }) { if (rank === 1) { return ( - + 🏆 1st ); @@ -120,7 +120,7 @@ function RankBadge({ rank }: { rank: number }) { if (rank === 2) { return ( - + 🥈 2nd ); @@ -128,7 +128,7 @@ function RankBadge({ rank }: { rank: number }) { if (rank === 3) { return ( - + 🥉 3rd ); @@ -147,7 +147,7 @@ function RankBadge({ rank }: { rank: number }) { function MovementIndicator({ change }: { change: number }) { if (change > 0) { return ( - + ↑{change} ); @@ -155,7 +155,7 @@ function MovementIndicator({ change }: { change: number }) { if (change < 0) { return ( - + ↓{Math.abs(change)} ); @@ -182,14 +182,14 @@ function PlacementBreakdown({ }; }) { const items = [ - { label: "1st", count: placements.first, color: "text-yellow-600" }, - { label: "2nd", count: placements.second, color: "text-gray-500" }, - { label: "3rd", count: placements.third, color: "text-orange-600" }, - { label: "4th", count: placements.fourth, color: "text-blue-600" }, - { label: "5th", count: placements.fifth, color: "text-purple-600" }, - { label: "6th", count: placements.sixth, color: "text-green-600" }, - { label: "7th", count: placements.seventh, color: "text-pink-600" }, - { label: "8th", count: placements.eighth, color: "text-indigo-600" }, + { label: "1st", count: placements.first, color: "text-amber-accent" }, + { label: "2nd", count: placements.second, color: "text-muted-foreground" }, + { label: "3rd", count: placements.third, color: "text-coral-accent" }, + { label: "4th", count: placements.fourth, color: "text-electric" }, + { label: "5th", count: placements.fifth, color: "text-purple-400" }, + { label: "6th", count: placements.sixth, color: "text-emerald-400" }, + { label: "7th", count: placements.seventh, color: "text-pink-400" }, + { label: "8th", count: placements.eighth, color: "text-indigo-400" }, ]; // Only show placements that have counts > 0 diff --git a/app/components/standings/TeamScoreBreakdown.tsx b/app/components/standings/TeamScoreBreakdown.tsx index 8f78521..c99bece 100644 --- a/app/components/standings/TeamScoreBreakdown.tsx +++ b/app/components/standings/TeamScoreBreakdown.tsx @@ -99,7 +99,7 @@ export function TeamScoreBreakdown({ Actual Points
{breakdown.projectedPoints > breakdown.actualPoints && ( -
+
{breakdown.projectedPoints.toFixed(1)} projected
@@ -174,19 +174,19 @@ export function TeamScoreBreakdown({
{standing.placementCounts.first > 0 && (
- 1st place + 1st place {standing.placementCounts.first}
)} {standing.placementCounts.second > 0 && (
- 2nd place + 2nd place {standing.placementCounts.second}
)} {standing.placementCounts.third > 0 && (
- 3rd place + 3rd place {standing.placementCounts.third}
)} @@ -278,7 +278,7 @@ export function TeamScoreBreakdown({ {pick.isComplete ? ( pick.finalPosition === 0 ? ( - + Did Not Score ) : ( @@ -330,14 +330,14 @@ export function TeamScoreBreakdown({ */ function PlacementBadge({ position }: { position: number }) { const badges: Record = { - 1: { label: "1st", className: "bg-yellow-500 hover:bg-yellow-600 text-white" }, - 2: { label: "2nd", className: "bg-gray-400 hover:bg-gray-500 text-white" }, - 3: { label: "3rd", className: "bg-orange-600 hover:bg-orange-700 text-white" }, - 4: { label: "4th", className: "bg-blue-600 hover:bg-blue-700 text-white" }, - 5: { label: "5th", className: "bg-purple-600 hover:bg-purple-700 text-white" }, - 6: { label: "6th", className: "bg-green-600 hover:bg-green-700 text-white" }, - 7: { label: "7th", className: "bg-pink-600 hover:bg-pink-700 text-white" }, - 8: { label: "8th", className: "bg-indigo-600 hover:bg-indigo-700 text-white" }, + 1: { label: "1st", className: "bg-amber-accent hover:bg-amber-accent/80 text-background" }, + 2: { label: "2nd", className: "bg-muted hover:bg-muted/80 text-muted-foreground" }, + 3: { label: "3rd", className: "bg-coral-accent hover:bg-coral-accent/80 text-background" }, + 4: { label: "4th", className: "bg-electric/20 hover:bg-electric/30 text-electric" }, + 5: { label: "5th", className: "bg-purple-500/20 hover:bg-purple-500/30 text-purple-400" }, + 6: { label: "6th", className: "bg-emerald-500/20 hover:bg-emerald-500/30 text-emerald-400" }, + 7: { label: "7th", className: "bg-pink-500/20 hover:bg-pink-500/30 text-pink-400" }, + 8: { label: "8th", className: "bg-indigo-500/20 hover:bg-indigo-500/30 text-indigo-400" }, }; const badge = badges[position] || { label: `${position}th`, className: "" }; diff --git a/app/root.tsx b/app/root.tsx index 085eb15..4c430d6 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -13,6 +13,7 @@ import "./app.css"; import { clerkMiddleware, rootAuthLoader, getAuth } from "@clerk/react-router/server"; import { Navbar } from "~/components/navbar"; import { ClerkProvider } from "@clerk/react-router"; +import { dark } from "@clerk/themes"; import { Toaster } from "~/components/ui/sonner"; import { isUserAdminByClerkId } from "~/models/user"; @@ -46,7 +47,7 @@ export const links: Route.LinksFunction = () => [ export function Layout({ children }: { children: React.ReactNode }) { return ( - + @@ -67,7 +68,7 @@ export default function App({ loaderData }: Route.ComponentProps) { const isDraftRoute = location.pathname.includes('/draft'); return ( - + {!isDraftRoute && } {isDraftRoute ? ( diff --git a/app/routes/admin.data-sync.tsx b/app/routes/admin.data-sync.tsx index 30501ff..890d7a4 100644 --- a/app/routes/admin.data-sync.tsx +++ b/app/routes/admin.data-sync.tsx @@ -168,7 +168,7 @@ export default function DataSync({ loaderData, actionData }: Route.ComponentProp
{actionData?.success && ( -
+
{actionData.message || "Operation completed successfully!"}
)} @@ -342,11 +342,11 @@ export default function DataSync({ loaderData, actionData }: Route.ComponentProp
- + - How It Works + How It Works - +
Export: Downloads all sports data as a JSON file that you can save, version control, or transfer to another environment. @@ -359,7 +359,7 @@ export default function DataSync({ loaderData, actionData }: Route.ComponentProp Import (Replace): Deletes all existing sports data and recreates it from the file. Use this for a clean slate.
-
+
Typical workflow:
  1. Export data from development
  2. diff --git a/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.tsx b/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.tsx index 4d178c1..5d558d5 100644 --- a/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.tsx +++ b/app/routes/admin.sports-seasons.$id.events.$eventId.bracket.tsx @@ -228,7 +228,7 @@ export default function EventBracket({ )} {actionData?.success && ( -
    +
    {actionData.success}
    )} @@ -702,10 +702,10 @@ export default function EventBracket({ {/* Finalize Bracket Button */} {allMatchesComplete && !event.isComplete && ( - + - + Finalize Bracket @@ -726,7 +726,7 @@ export default function EventBracket({
  3. Recalculate all team standings
  4. -
@@ -739,9 +739,9 @@ export default function EventBracket({ {/* Event Complete Badge */} {event.isComplete && ( - + -
+
Event Complete diff --git a/app/routes/admin.sports-seasons.$id.events.$eventId.tsx b/app/routes/admin.sports-seasons.$id.events.$eventId.tsx index 3fb9ae2..eee6a44 100644 --- a/app/routes/admin.sports-seasons.$id.events.$eventId.tsx +++ b/app/routes/admin.sports-seasons.$id.events.$eventId.tsx @@ -101,7 +101,7 @@ export default function EventResults({ )} {event.isComplete ? ( - + Completed @@ -120,9 +120,9 @@ export default function EventResults({
{/* Debug info and manual QP processing for completed major tournaments */} {event.isComplete && event.eventType === "major_tournament" && ( - + - + Event Processing Status @@ -169,7 +169,7 @@ export default function EventResults({ )} {actionData?.success && ( -
+
{actionData.success}
)} @@ -240,9 +240,9 @@ export default function EventResults({ {/* Complete Season Button */} - + - + Finalize Season @@ -489,13 +489,13 @@ export default function EventResults({ {/* Bracket Explanation Card for Playoff Events */} {event.eventType === "playoff_game" && !participantResults?.length && ( - + - + Bracket Event - + This is a bracket/playoff event. Results are managed through the bracket interface. @@ -522,11 +522,11 @@ export default function EventResults({ {/* Participant Results with Fantasy Points */} {participantResults && participantResults.length > 0 && ( - +
- + {event.eventType === "playoff_game" ? ( <> @@ -544,7 +544,7 @@ export default function EventResults({
{event.eventType === "playoff_game" && event.isComplete && ( - + Bracket Finalized @@ -600,7 +600,7 @@ export default function EventResults({ {result.participant.name} {result.qualifyingPoints ? ( - + {parseFloat(result.qualifyingPoints).toFixed(2)} pts ) : ( diff --git a/app/routes/admin.sports-seasons.$id.events.tsx b/app/routes/admin.sports-seasons.$id.events.tsx index f7ecf34..fa70cb9 100644 --- a/app/routes/admin.sports-seasons.$id.events.tsx +++ b/app/routes/admin.sports-seasons.$id.events.tsx @@ -46,7 +46,7 @@ export default function SportsSeasonEvents({ const getStatusBadge = (isComplete: boolean) => { return isComplete ? ( - + Completed ) : ( @@ -86,7 +86,7 @@ export default function SportsSeasonEvents({ )} {actionData?.success && ( -
+
{actionData.success}
)} diff --git a/app/routes/admin.sports-seasons.$id.expected-values.tsx b/app/routes/admin.sports-seasons.$id.expected-values.tsx index 5358883..5036128 100644 --- a/app/routes/admin.sports-seasons.$id.expected-values.tsx +++ b/app/routes/admin.sports-seasons.$id.expected-values.tsx @@ -53,17 +53,17 @@ export default function ExpectedValuesPage({ loaderData, actionData }: Route.Com {actionData?.error && ( -
+
{actionData.error}
)} {actionData?.success && ( -
+
All participants saved successfully!
)} -
+

Default Scoring Rules (for EV calculation):

1st: 100 pts @@ -75,7 +75,7 @@ export default function ExpectedValuesPage({ loaderData, actionData }: Route.Com 7th: 15 pts 8th: 15 pts
-

+

Note: EVs will be recalculated with actual league scoring rules when used in fantasy leagues.

@@ -209,7 +209,7 @@ export default function ExpectedValuesPage({ loaderData, actionData }: Route.Com {participants.length === 0 ? ( -

+

No participants found. Please add participants to this sports season first.

) : ( diff --git a/app/routes/admin.sports-seasons.$id.futures-odds.tsx b/app/routes/admin.sports-seasons.$id.futures-odds.tsx index f3bef04..d68f5fc 100644 --- a/app/routes/admin.sports-seasons.$id.futures-odds.tsx +++ b/app/routes/admin.sports-seasons.$id.futures-odds.tsx @@ -308,11 +308,11 @@ export default function AdminSportsSeasonFuturesOdds() {
{parseResults.matched.length > 0 && (
-
+
Matched ({parseResults.matched.length})
-
+
{parseResults.matched.map(m => (
{m.inputName} @@ -538,9 +538,9 @@ export default function AdminSportsSeasonFuturesOdds() { )} {actionData && actionData.success && !actionData.preview && ( - + -
Success
+
Success
{actionData.message}
diff --git a/app/routes/admin.sports-seasons.$id.participants.tsx b/app/routes/admin.sports-seasons.$id.participants.tsx index 0b3c665..835e930 100644 --- a/app/routes/admin.sports-seasons.$id.participants.tsx +++ b/app/routes/admin.sports-seasons.$id.participants.tsx @@ -163,7 +163,7 @@ export default function ManageParticipants({ loaderData, actionData }: Route.Com )} {actionData?.success && !actionData?.count && ( -
+
Participant added successfully!
)} @@ -209,7 +209,7 @@ export default function ManageParticipants({ loaderData, actionData }: Route.Com )} {actionData?.success && actionData?.count && ( -
+
{actionData.count} participant{actionData.count !== 1 ? 's' : ''} added successfully!
)} diff --git a/app/routes/admin.sports-seasons.$id.recalculate-probabilities.tsx b/app/routes/admin.sports-seasons.$id.recalculate-probabilities.tsx index 496863d..496cb87 100644 --- a/app/routes/admin.sports-seasons.$id.recalculate-probabilities.tsx +++ b/app/routes/admin.sports-seasons.$id.recalculate-probabilities.tsx @@ -149,11 +149,11 @@ export default function RecalculateProbabilities() {
{invalidProbabilities.length > 0 && ( - +
- - + + Invalid Probability Data Detected
@@ -192,11 +192,11 @@ export default function RecalculateProbabilities() { )} {actionData?.success ? ( - +
- - + + Probabilities Updated Successfully
@@ -371,7 +371,7 @@ export default function RecalculateProbabilities() { value="true" /> -
+

What happens: