-
+
Manage your cookie preferences below. You can change these settings
at any time.
@@ -96,7 +96,7 @@ export function CookiePreferencesDialog({
>
{category.title}
-
+
{category.description}
diff --git a/src/index.css b/src/index.css
index 7e14efd0..fc8a62c0 100644
--- a/src/index.css
+++ b/src/index.css
@@ -47,6 +47,7 @@
--accent-foreground: 0 0% 100%;
--accent-hover: 272.1 71.7% 47.1%; /* purple-700 */
--accent-soft: 271.5 81.3% 55.9% / 0.4; /* bg-purple-600/40 */
+ --accent-soft-foreground: 270 95.2% 75.3%; /* purple-400 */
--destructive: 0 90.6% 70.8%; /* red-400 */
--destructive-foreground: 221 39% 11%; /* gray-900 — red-400 is too light for a white foreground */
diff --git a/src/lib/timeUtils.ts b/src/lib/timeUtils.ts
index f17d83bf..bddbd6d7 100644
--- a/src/lib/timeUtils.ts
+++ b/src/lib/timeUtils.ts
@@ -166,6 +166,18 @@ export function combineDateAndTime(
return `${datePart} ${timePart}`;
}
+export function formatDateOnly(
+ dateTime: string | null,
+ timezone?: string,
+): string | null {
+ if (!dateTime) return null;
+ const date = parseISO(dateTime);
+ if (!isValid(date)) return null;
+ const dateFormat = "MMM d, yyyy";
+ if (timezone) return formatInTimeZone(date, timezone, dateFormat);
+ return format(date, dateFormat);
+}
+
export function formatDayOnly(
dateTime: string | null,
timezone?: string,
diff --git a/src/pages/EditionView/tabs/VoteTab/EmptyArtistsState.tsx b/src/pages/EditionView/tabs/VoteTab/EmptyArtistsState.tsx
index 5bdeabf9..95e2f4c4 100644
--- a/src/pages/EditionView/tabs/VoteTab/EmptyArtistsState.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/EmptyArtistsState.tsx
@@ -10,31 +10,33 @@ import {
export function EmptyArtistsState() {
return (
-
+
- No Artists Yet
-
+
+ No Artists Yet
+
+
Be the first to add artists to the Boom Festival voting list!
-
-
+
+
Connect with fellow festival-goers
-
-
+
+
Discover new electronic artists
-
-
+
+
Vote for your favorites
diff --git a/src/pages/EditionView/tabs/VoteTab/MultiArtistSetCard.tsx b/src/pages/EditionView/tabs/VoteTab/MultiArtistSetCard.tsx
index 334f35b3..f4993494 100644
--- a/src/pages/EditionView/tabs/VoteTab/MultiArtistSetCard.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/MultiArtistSetCard.tsx
@@ -7,7 +7,7 @@ import { SetVotingButtons } from "./SetCard/SetVotingButtons";
export function MultiArtistSetCard() {
return (
-
+
{/* Set Image with Mixed Artists */}
diff --git a/src/pages/EditionView/tabs/VoteTab/SetCard/MultiArtistInfo.tsx b/src/pages/EditionView/tabs/VoteTab/SetCard/MultiArtistInfo.tsx
index 018df8a9..e6e65d97 100644
--- a/src/pages/EditionView/tabs/VoteTab/SetCard/MultiArtistInfo.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SetCard/MultiArtistInfo.tsx
@@ -20,7 +20,9 @@ export function MultiArtistInfo({
{artists.map((artist) => (
- {artist.name}
+
+ {artist.name}
+
))}
diff --git a/src/pages/EditionView/tabs/VoteTab/SetCard/SetDescription.tsx b/src/pages/EditionView/tabs/VoteTab/SetCard/SetDescription.tsx
index ba277fcf..30c1b647 100644
--- a/src/pages/EditionView/tabs/VoteTab/SetCard/SetDescription.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SetCard/SetDescription.tsx
@@ -8,7 +8,7 @@ interface SetDescriptionProps {
}
export function SetDescription({
- className = "text-purple-200 text-sm leading-relaxed",
+ className = "text-muted-foreground text-sm leading-relaxed",
}: SetDescriptionProps) {
const { set } = useFestivalSet();
const isMultiArtist = set.artists.length > 1;
diff --git a/src/pages/EditionView/tabs/VoteTab/SetCard/SetHeader.tsx b/src/pages/EditionView/tabs/VoteTab/SetCard/SetHeader.tsx
index b12870a2..945f3b3b 100644
--- a/src/pages/EditionView/tabs/VoteTab/SetCard/SetHeader.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SetCard/SetHeader.tsx
@@ -14,8 +14,8 @@ export function SetHeader({ size = "lg" }: SetHeaderProps) {
const titleClass =
size === "sm"
- ? "text-white text-lg font-semibold truncate"
- : "text-white text-xl";
+ ? "text-foreground text-lg font-semibold truncate"
+ : "text-foreground text-xl";
return (
@@ -24,7 +24,7 @@ export function SetHeader({ size = "lg" }: SetHeaderProps) {
{isMultiArtist && (
{set.artists.length}
diff --git a/src/pages/EditionView/tabs/VoteTab/SetCard/SetMetadata.tsx b/src/pages/EditionView/tabs/VoteTab/SetCard/SetMetadata.tsx
index c078e286..d6a506e0 100644
--- a/src/pages/EditionView/tabs/VoteTab/SetCard/SetMetadata.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SetCard/SetMetadata.tsx
@@ -55,7 +55,7 @@ export function SetMetadata() {
)}
{timeRangeFormatted && (
-
+
{timeRangeFormatted}
@@ -67,7 +67,7 @@ export function SetMetadata() {
)}
{(timeRangeFormatted || dayOnlyFormatted) && (
-
+
{festival.timezone}
)}
diff --git a/src/pages/EditionView/tabs/VoteTab/SetCard/SocialPlatformLink.tsx b/src/pages/EditionView/tabs/VoteTab/SetCard/SocialPlatformLink.tsx
index 71e00618..58a6ad5b 100644
--- a/src/pages/EditionView/tabs/VoteTab/SetCard/SocialPlatformLink.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SetCard/SocialPlatformLink.tsx
@@ -26,7 +26,7 @@ export function SocialPlatformLink({
asChild
variant="secondary"
size="sm"
- className={`p-1 ${buttonSize} bg-white/20 hover:bg-white/30 backdrop-blur-sm border-0 ${platformInfo.color}`}
+ className={`p-1 ${buttonSize} bg-surface-active hover:bg-foreground/30 backdrop-blur-sm border-0 ${platformInfo.color}`}
title={`Open ${artistName} in ${platformInfo.platform}`}
>
diff --git a/src/pages/EditionView/tabs/VoteTab/SetListItem.tsx b/src/pages/EditionView/tabs/VoteTab/SetListItem.tsx
index 5594e4e5..f0fe6b48 100644
--- a/src/pages/EditionView/tabs/VoteTab/SetListItem.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SetListItem.tsx
@@ -7,7 +7,7 @@ import { SetActionButtons } from "./SetCard/SetActionButtons";
export function SetListItem() {
return (
{/* Mobile Layout (sm and below) */}
@@ -20,7 +20,7 @@ export function SetListItem() {
-
+
diff --git a/src/pages/EditionView/tabs/VoteTab/SingleArtistSetCard.tsx b/src/pages/EditionView/tabs/VoteTab/SingleArtistSetCard.tsx
index f7979ac5..14cdcd54 100644
--- a/src/pages/EditionView/tabs/VoteTab/SingleArtistSetCard.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/SingleArtistSetCard.tsx
@@ -7,7 +7,7 @@ import { SetVotingButtons } from "./SetCard/SetVotingButtons";
export function SingleArtistSetCard() {
return (
-
+
diff --git a/src/pages/EditionView/tabs/VoteTab/filters/DesktopFilters.tsx b/src/pages/EditionView/tabs/VoteTab/filters/DesktopFilters.tsx
index 1acf6a2e..e2a709a2 100644
--- a/src/pages/EditionView/tabs/VoteTab/filters/DesktopFilters.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/filters/DesktopFilters.tsx
@@ -39,10 +39,14 @@ export function DesktopFilters({
{/* Stage Filter */}
{canShowStage && (
-
Stages
+
+ Stages
+
{stagesLoading ? (
-
Loading stages...
+
+ Loading stages...
+
) : (
stages.map((stage) => (
handleStageToggle(stage.id)}
className={
state.stages.includes(stage.id)
- ? "bg-purple-600 hover:bg-purple-700"
- : "border-purple-400 text-purple-400 hover:bg-purple-400 hover:text-white"
+ ? "bg-accent text-accent-foreground hover:bg-accent-hover"
+ : "border-ring text-ring hover:bg-ring hover:text-foreground"
}
>
{stage.name}
diff --git a/src/pages/EditionView/tabs/VoteTab/filters/FestivalModeToggle.tsx b/src/pages/EditionView/tabs/VoteTab/filters/FestivalModeToggle.tsx
deleted file mode 100644
index 9d17f647..00000000
--- a/src/pages/EditionView/tabs/VoteTab/filters/FestivalModeToggle.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { useState, useEffect } from "react";
-import { Button } from "@/components/ui/button";
-import { Badge } from "@/components/ui/badge";
-import { Calendar, CalendarDays, Info } from "lucide-react";
-import {
- Tooltip,
- TooltipContent,
- TooltipTrigger,
-} from "@/components/ui/tooltip";
-
-interface FestivalModeToggleProps {
- onModeChange: (isFestivalMode: boolean) => void;
-}
-
-export function FestivalModeToggle({ onModeChange }: FestivalModeToggleProps) {
- const [isFestivalMode, setIsFestivalMode] = useState(() => {
- const saved = localStorage.getItem("festival-mode");
- if (saved !== null) return JSON.parse(saved);
-
- // Auto-detect based on current date (example festival dates)
- const now = new Date();
- const festivalStart = new Date("2024-07-20"); // Example dates
- const festivalEnd = new Date("2024-07-27");
- return now >= festivalStart && now <= festivalEnd;
- });
-
- useEffect(() => {
- localStorage.setItem("festival-mode", JSON.stringify(isFestivalMode));
- onModeChange(isFestivalMode);
- }, [isFestivalMode, onModeChange]);
-
- function toggleMode() {
- setIsFestivalMode(!isFestivalMode);
- }
-
- return (
-
-
-
- {isFestivalMode ? (
-
- ) : (
-
- )}
- {isFestivalMode ? "Festival Mode" : "Planning Mode"}
-
-
- {isFestivalMode && (
-
- Live
-
- )}
-
-
-
-
-
-
-
-
-
-
-
- Festival Mode: Timeline view recommended for live
- schedule tracking
-
-
- Planning Mode: Artists list with sorting for
- pre-festival planning
-
-
-
-
-
- );
-}
diff --git a/src/pages/EditionView/tabs/VoteTab/filters/MobileFilters.tsx b/src/pages/EditionView/tabs/VoteTab/filters/MobileFilters.tsx
index 46a8dc96..31282d30 100644
--- a/src/pages/EditionView/tabs/VoteTab/filters/MobileFilters.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/filters/MobileFilters.tsx
@@ -47,23 +47,25 @@ export function MobileFilters({
{/* Stage Filter Select */}
{canShowStage && (
-
Stage
+
+ Stage
+
-
+
-
-
+
+
All Stages
{stagesLoading ? (
Loading stages...
@@ -72,7 +74,7 @@ export function MobileFilters({
{stage.name}
@@ -85,23 +87,25 @@ export function MobileFilters({
{/* Genre Filter Select */}
-
Genre
+
+ Genre
+
-
+
-
-
+
+
All Genres
{genres.map((genre) => (
{genre.name}
@@ -112,7 +116,7 @@ export function MobileFilters({
{/* Rating Filter */}
-
+
Minimum Rating
-
+
-
-
+
+
Any Rating
-
+
1+ Rating
-
+
2+ Rating
-
+
3+ Rating
diff --git a/src/pages/EditionView/tabs/VoteTab/filters/SortControls.tsx b/src/pages/EditionView/tabs/VoteTab/filters/SortControls.tsx
index 8ae24b34..e3d626e1 100644
--- a/src/pages/EditionView/tabs/VoteTab/filters/SortControls.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/filters/SortControls.tsx
@@ -41,24 +41,24 @@ export function SortControls({ sort, onSortChange }: SortControlsProps) {
return (
-
+
-
+
-
+
-
+
{SORT_OPTIONS.map((option) => {
const Icon = SORT_ICONS[option.value as keyof typeof SORT_ICONS];
return (
@@ -74,44 +74,50 @@ export function SortControls({ sort, onSortChange }: SortControlsProps) {
-
+
-
+
-
+
Sort Options Explained
-
+
-
Name (A-Z):
-
+
+ Name (A-Z):
+
+
Sort artists alphabetically from A to Z
-
+
-
Name (Z-A):
-
+
+ Name (Z-A):
+
+
Sort artists alphabetically from Z to A
-
+
-
Highest Rated:
-
+
+ Highest Rated:
+
+
Sort by weighted average rating based on votes (Must go = 2
points, Interested = 1 point, Won't go = -1 point)
@@ -119,10 +125,12 @@ export function SortControls({ sort, onSortChange }: SortControlsProps) {
-
+
-
Most Popular:
-
+
+ Most Popular:
+
+
Sort by weighted popularity score (Must go = 2 points,
Interested = 1 point)
@@ -130,10 +138,10 @@ export function SortControls({ sort, onSortChange }: SortControlsProps) {
-
+
-
By Date:
-
+ By Date:
+
Sort by estimated performance date (earliest performances
first)
diff --git a/src/pages/EditionView/tabs/VoteTab/filters/TimeFormatToggle.tsx b/src/pages/EditionView/tabs/VoteTab/filters/TimeFormatToggle.tsx
deleted file mode 100644
index 916e3637..00000000
--- a/src/pages/EditionView/tabs/VoteTab/filters/TimeFormatToggle.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { Clock } from "lucide-react";
-import { Button } from "@/components/ui/button";
-import {
- Tooltip,
- TooltipContent,
- TooltipProvider,
- TooltipTrigger,
-} from "@/components/ui/tooltip";
-
-interface TimeFormatToggleProps {
- use24Hour: boolean;
- onChange: (use24Hour: boolean) => void;
-}
-
-export function TimeFormatToggle({
- use24Hour,
- onChange,
-}: TimeFormatToggleProps) {
- return (
-
-
-
- onChange(!use24Hour)}
- className={`flex items-center gap-2 ${
- use24Hour
- ? "bg-purple-600/50 text-purple-100 hover:bg-purple-600/60"
- : "text-purple-300 hover:text-purple-100"
- }`}
- >
-
-
- {use24Hour ? "24h" : "12h"}
-
-
-
-
- Switch to {use24Hour ? "12-hour" : "24-hour"} time format
-
-
-
- );
-}
diff --git a/src/pages/EditionView/tabs/VoteTab/filters/VotePerspectiveToggle.tsx b/src/pages/EditionView/tabs/VoteTab/filters/VotePerspectiveToggle.tsx
index cb4ca474..8b8f493d 100644
--- a/src/pages/EditionView/tabs/VoteTab/filters/VotePerspectiveToggle.tsx
+++ b/src/pages/EditionView/tabs/VoteTab/filters/VotePerspectiveToggle.tsx
@@ -21,12 +21,12 @@ export function VotePerspectiveToggle({
onScopeChange(value);
}
}}
- className="rounded-md border border-purple-400/30 p-0.5"
+ className="rounded-md border p-0.5"
>
Everyone
@@ -34,7 +34,7 @@ export function VotePerspectiveToggle({
{groupName}
diff --git a/src/pages/ExploreSetPage/ExplorationProgress.tsx b/src/pages/ExploreSetPage/ExplorationProgress.tsx
index 90271332..264ee7f0 100644
--- a/src/pages/ExploreSetPage/ExplorationProgress.tsx
+++ b/src/pages/ExploreSetPage/ExplorationProgress.tsx
@@ -13,11 +13,11 @@ export function ExplorationProgress({
return (
);
diff --git a/src/pages/ExploreSetPage/SetExploreCard.tsx b/src/pages/ExploreSetPage/SetExploreCard.tsx
index f09916bf..f54d6c92 100644
--- a/src/pages/ExploreSetPage/SetExploreCard.tsx
+++ b/src/pages/ExploreSetPage/SetExploreCard.tsx
@@ -63,7 +63,7 @@ export function SetExploreCard({
)}
{/* Content */}
-
+
{/* Header Info */}
-
+
Swipe or tap buttons to vote
diff --git a/src/pages/ExploreSetPage/SetExploreCard/PrimaryArtistDisplay.tsx b/src/pages/ExploreSetPage/SetExploreCard/PrimaryArtistDisplay.tsx
index c8a652f5..9da19732 100644
--- a/src/pages/ExploreSetPage/SetExploreCard/PrimaryArtistDisplay.tsx
+++ b/src/pages/ExploreSetPage/SetExploreCard/PrimaryArtistDisplay.tsx
@@ -14,7 +14,7 @@ export function PrimaryArtistDisplay({
}: PrimaryArtistDisplayProps) {
return (
-
+
{artist.image_url ? (
) : (
-
+
)}
diff --git a/src/pages/ExploreSetPage/SetExploreCard/SetCardHeader.tsx b/src/pages/ExploreSetPage/SetExploreCard/SetCardHeader.tsx
index e67a56b8..d0ae1d43 100644
--- a/src/pages/ExploreSetPage/SetExploreCard/SetCardHeader.tsx
+++ b/src/pages/ExploreSetPage/SetExploreCard/SetCardHeader.tsx
@@ -40,7 +40,7 @@ export function SetCardHeader({ stageId, timeStart }: SetCardHeaderProps) {
{dateLabel && (
{dateLabel}
diff --git a/src/pages/ExploreSetPage/SetExploreCard/SoundCloudBadge.tsx b/src/pages/ExploreSetPage/SetExploreCard/SoundCloudBadge.tsx
index 9d4288ca..f0f426d7 100644
--- a/src/pages/ExploreSetPage/SetExploreCard/SoundCloudBadge.tsx
+++ b/src/pages/ExploreSetPage/SetExploreCard/SoundCloudBadge.tsx
@@ -29,7 +29,7 @@ export function SoundCloudBadge({
}
return (
-
+
-
+
{artists.length === 1 ? "With" : "With"}
@@ -24,7 +24,7 @@ export function SupportingArtists({ artists }: SupportingArtistsProps) {
{artist.name}
@@ -32,7 +32,7 @@ export function SupportingArtists({ artists }: SupportingArtistsProps) {
{artists.length > 3 && (
+{artists.length - 3} more
diff --git a/src/pages/ExploreSetPage/VotingActions.tsx b/src/pages/ExploreSetPage/VotingActions.tsx
index 833bce77..096089dc 100644
--- a/src/pages/ExploreSetPage/VotingActions.tsx
+++ b/src/pages/ExploreSetPage/VotingActions.tsx
@@ -46,8 +46,8 @@ export function VotingActions({
variant="outline"
className={`h-16 w-16 rounded-full transition-all duration-100 ${
isLeftDrag
- ? `bg-gray-500 border-gray-500 text-white shadow-lg`
- : "border-gray-500 hover:bg-gray-500 hover:border-gray-500 text-gray-500 hover:text-white"
+ ? `bg-vote-skip border-vote-skip text-foreground shadow-lg`
+ : "border-vote-skip hover:bg-vote-skip hover:border-vote-skip text-vote-skip hover:text-foreground"
}`}
onClick={() => onVote(wontGoConfig.value)}
>
@@ -59,7 +59,7 @@ export function VotingActions({
Skip
@@ -78,7 +78,7 @@ export function VotingActions({
onVote(mustGoConfig.value)}
>
@@ -100,8 +100,8 @@ export function VotingActions({
variant="outline"
className={`h-16 w-16 rounded-full transition-all duration-100 ${
isRightDrag
- ? `bg-blue-500 border-blue-500 text-white shadow-lg`
- : "border-blue-500 hover:bg-blue-500 hover:border-blue-500 text-blue-500 hover:text-white"
+ ? `bg-vote-interested border-vote-interested text-foreground shadow-lg`
+ : "border-vote-interested hover:bg-vote-interested hover:border-vote-interested text-vote-interested hover:text-foreground"
}`}
onClick={() => onVote(interestedConfig.value)}
>
diff --git a/src/pages/ExploreSetPage/components/EmptyState.tsx b/src/pages/ExploreSetPage/components/EmptyState.tsx
index b397659c..166dbe65 100644
--- a/src/pages/ExploreSetPage/components/EmptyState.tsx
+++ b/src/pages/ExploreSetPage/components/EmptyState.tsx
@@ -8,7 +8,7 @@ export function EmptyState() {
});
return (
-
+
No Sets Available
You have explored all available sets in this edition
diff --git a/src/pages/ExploreSetPage/components/ExplorePageHeader.tsx b/src/pages/ExploreSetPage/components/ExplorePageHeader.tsx
index 3e16adbe..6e9eef85 100644
--- a/src/pages/ExploreSetPage/components/ExplorePageHeader.tsx
+++ b/src/pages/ExploreSetPage/components/ExplorePageHeader.tsx
@@ -28,7 +28,7 @@ export function ExplorePageHeader({
asChild
variant="ghost"
size="sm"
- className="text-white hover:bg-white/20 flex items-center "
+ className="text-foreground hover:bg-surface-active flex items-center "
>
-
+
{editionName}
diff --git a/src/pages/ExploreSetPage/components/LoadingState.tsx b/src/pages/ExploreSetPage/components/LoadingState.tsx
index 5ffd9444..a3cdccc5 100644
--- a/src/pages/ExploreSetPage/components/LoadingState.tsx
+++ b/src/pages/ExploreSetPage/components/LoadingState.tsx
@@ -1,7 +1,7 @@
export function LoadingState() {
return (
-
Loading sets...
+
Loading sets...
);
}
diff --git a/src/pages/ExploreSetPage/components/ProgressInfoTooltip.tsx b/src/pages/ExploreSetPage/components/ProgressInfoTooltip.tsx
index 278d32fa..1f532b2b 100644
--- a/src/pages/ExploreSetPage/components/ProgressInfoTooltip.tsx
+++ b/src/pages/ExploreSetPage/components/ProgressInfoTooltip.tsx
@@ -25,13 +25,13 @@ export function ProgressInfoTooltip({
@@ -39,24 +39,28 @@ export function ProgressInfoTooltip({
Progress Details
- Already voted:
+
+ Already voted:
+
{votedCount}
- Skipped:
+ Skipped:
{skippedCount}
- No SoundCloud:
+
+ No SoundCloud:
+
{nonExplorableCount}
-
+
- Current:
+ Current:
{current}
- Total:
+ Total:
{total}
diff --git a/src/pages/SetDetails/IndividualArtistCard.tsx b/src/pages/SetDetails/IndividualArtistCard.tsx
index 7b9c7d84..d2d5f815 100644
--- a/src/pages/SetDetails/IndividualArtistCard.tsx
+++ b/src/pages/SetDetails/IndividualArtistCard.tsx
@@ -17,7 +17,7 @@ export function IndividualArtistCard({
showFullDetails = false,
}: IndividualArtistCardProps) {
return (
-
+
{/* Artist Image */}
-
+
{artist.name}
@@ -48,7 +48,7 @@ export function IndividualArtistCard({
artist.artist_music_genres.length > 2 && (
+{artist.artist_music_genres.length - 2}
@@ -62,7 +62,7 @@ export function IndividualArtistCard({
)}
diff --git a/src/pages/SetDetails/MixedArtistImage.tsx b/src/pages/SetDetails/MixedArtistImage.tsx
index 01117f73..2fa8d014 100644
--- a/src/pages/SetDetails/MixedArtistImage.tsx
+++ b/src/pages/SetDetails/MixedArtistImage.tsx
@@ -20,7 +20,7 @@ export function MixedArtistImage({
-
+
@@ -128,7 +128,7 @@ export function MixedArtistImage({
{/* Show count overlay on last image if more than 4 */}
{index === 3 && artistsWithImages.length > 4 && (
-
+
+{artistsWithImages.length - 4}
diff --git a/src/pages/SetDetails/MultiArtistSetInfoCard.tsx b/src/pages/SetDetails/MultiArtistSetInfoCard.tsx
index 200fccfb..238e3df3 100644
--- a/src/pages/SetDetails/MultiArtistSetInfoCard.tsx
+++ b/src/pages/SetDetails/MultiArtistSetInfoCard.tsx
@@ -57,19 +57,19 @@ export function MultiArtistSetInfoCard({
return (
{/* Main Set Info Card */}
-
+
-
+
{set.name}
{/* Set Summary */}
-
-
+
+
{set.artists.length} Artists
@@ -99,7 +99,7 @@ export function MultiArtistSetInfoCard({
{/* Performance Information */}
-
+
{canShowStage &&
}
{timeRangeFormatted && (
@@ -120,7 +120,7 @@ export function MultiArtistSetInfoCard({
{set.description && (
-
+
-
+
Artists in this Set
diff --git a/src/pages/SetDetails/SetGroupVoting.tsx b/src/pages/SetDetails/SetGroupVoting.tsx
index fa2b48d3..7429b130 100644
--- a/src/pages/SetDetails/SetGroupVoting.tsx
+++ b/src/pages/SetDetails/SetGroupVoting.tsx
@@ -54,25 +54,25 @@ function SetGroupVotingContent({
const activeGroup = groups.find((g) => g.id === activeGroupId);
return (
-
+
-
+
Group Voting
{activeGroup && (
-
+
How {activeGroup.name} voted on this artist
)}
{loading ? (
-
+
Loading votes...
) : groupVotes.length === 0 ? (
-
+
No one in this group has voted on this artist yet.
) : (
@@ -110,7 +110,7 @@ function SetGroupVotingContent({
{/* Individual Votes */}
-
+
Individual Votes:
{groupVotes.map((vote) => {
@@ -119,9 +119,9 @@ function SetGroupVotingContent({
return (
-
+
{vote.username || "Unknown User"}
-
+
-
+
-
+
{set.name}
@@ -78,7 +78,7 @@ export function SetInfoCard({
{/* Performance Information */}
-
+
{canShowStage &&
}
{timeRangeFormatted && (
@@ -99,7 +99,7 @@ export function SetInfoCard({
{(set.description || artist.description) && (
-
+
+
-
+
Group Notes
-
+
Sign in to add notes and see notes from group members
@@ -40,15 +40,15 @@ export function SetNotes({ setId, userId }: SetNotesProps) {
}
return (
-
+
-
+
Group Notes
-
+
Notes from you and group members about this artist
@@ -77,10 +77,10 @@ export function SetNotes({ setId, userId }: SetNotesProps) {
)}
-
+
setIsEditing(true)}
- className="bg-purple-600 hover:bg-purple-700"
+ className="bg-accent text-accent-foreground hover:bg-accent-hover"
>
Add Note
diff --git a/src/pages/SetDetails/notes/CreateNoteForm.tsx b/src/pages/SetDetails/notes/CreateNoteForm.tsx
index 3b2dc9a8..1f410aa1 100644
--- a/src/pages/SetDetails/notes/CreateNoteForm.tsx
+++ b/src/pages/SetDetails/notes/CreateNoteForm.tsx
@@ -23,13 +23,13 @@ export function CreateNoteForm({
value={noteContent}
onChange={(e) => setNoteContent(e.target.value)}
placeholder="Add your thoughts about this artist..."
- className="min-h-[120px] bg-white/5 border-purple-400/30 text-white placeholder:text-purple-300"
+ className="min-h-[120px] bg-surface border text-foreground placeholder:text-subtle-foreground"
/>
{mutation.isPending ? "Saving..." : "Save Note"}
@@ -38,7 +38,7 @@ export function CreateNoteForm({
variant="outline"
onClick={handleCancel}
disabled={mutation.isPending}
- className="border-purple-400 text-purple-400 hover:bg-purple-400 hover:text-white"
+ className="border-ring text-ring hover:bg-ring hover:text-foreground"
>
Cancel
diff --git a/src/pages/SetDetails/notes/SetNoteItem.tsx b/src/pages/SetDetails/notes/SetNoteItem.tsx
index 544728db..c7249078 100644
--- a/src/pages/SetDetails/notes/SetNoteItem.tsx
+++ b/src/pages/SetDetails/notes/SetNoteItem.tsx
@@ -3,6 +3,7 @@ import { confirm } from "@/hooks/use-confirm";
import { SetNote } from "@/api/artist-notes/types";
import { useDeleteNoteMutation } from "@/api/artist-notes/useDeleteNoteMutation";
import { Trash2Icon } from "lucide-react";
+import { formatDateOnly } from "@/lib/timeUtils";
export function SetNoteItem({
isOwn,
@@ -14,9 +15,9 @@ export function SetNoteItem({
const deleteNoteMutation = useDeleteNoteMutation();
return (
-
+
-
+
By: {note.author_username || note.author_email || "Unknown User"}
{isOwn && (
@@ -24,18 +25,18 @@ export function SetNoteItem({
variant="outline"
size="sm"
onClick={handleDelete}
- className="border-red-400/50 text-red-400 hover:bg-red-400 hover:text-white"
+ className="border-destructive/50 text-destructive hover:bg-destructive hover:text-destructive-foreground"
disabled={deleteNoteMutation.isPending}
>
)}
-
+
{note.note_content}
-
- {new Date(note.updated_at).toLocaleDateString()}
+
+ {formatDateOnly(note.updated_at)}
);
diff --git a/tailwind.config.ts b/tailwind.config.ts
index a6448ada..507f4bf8 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -84,6 +84,7 @@ export default {
foreground: "hsl(var(--accent-foreground))",
hover: "hsl(var(--accent-hover))",
soft: "hsl(var(--accent-soft))",
+ "soft-foreground": "hsl(var(--accent-soft-foreground))",
},
popover: {
DEFAULT: "hsl(var(--popover))",