diff --git a/src/app/(admin)/admin/awards/[id]/page.tsx b/src/app/(admin)/admin/awards/[id]/page.tsx index e01e13b..cea1177 100644 --- a/src/app/(admin)/admin/awards/[id]/page.tsx +++ b/src/app/(admin)/admin/awards/[id]/page.tsx @@ -335,20 +335,20 @@ function RoundsDndGrid({ function ConfidenceBadge({ confidence }: { confidence: number }) { if (confidence > 0.8) { return ( - + {Math.round(confidence * 100)}% ) } if (confidence >= 0.5) { return ( - + {Math.round(confidence * 100)}% ) } return ( - + {Math.round(confidence * 100)}% ) @@ -897,8 +897,8 @@ export default function AwardDetailPage({

Eligible

{award.eligibleCount}

-
- +
+
@@ -910,8 +910,8 @@ export default function AwardDetailPage({

Evaluated

{(award as any).totalAssessed ?? award._count.eligibilities}

-
- +
+
@@ -923,8 +923,8 @@ export default function AwardDetailPage({

Jurors

{award._count.jurors}

-
- +
+
@@ -936,8 +936,8 @@ export default function AwardDetailPage({

Votes

{award._count.votes}

-
- +
+
@@ -1612,7 +1612,7 @@ export default function AwardDetailPage({ {/* Rounds Tab */} {award.eligibilityMode !== 'SEPARATE_POOL' && ( -
+

Rounds are used in Separate Pool mode to create a dedicated evaluation track for shortlisted projects. @@ -1620,7 +1620,7 @@ export default function AwardDetailPage({

)} {!award.competitionId && ( -
+

Link this award to a competition first before creating rounds. @@ -1750,16 +1750,16 @@ export default function AwardDetailPage({ return ( {i + 1} diff --git a/src/app/(admin)/admin/members/[id]/page.tsx b/src/app/(admin)/admin/members/[id]/page.tsx index 6c581f3..73fd674 100644 --- a/src/app/(admin)/admin/members/[id]/page.tsx +++ b/src/app/(admin)/admin/members/[id]/page.tsx @@ -1047,7 +1047,7 @@ export default function MemberDetailPage() { />

-
+
diff --git a/src/app/(admin)/admin/members/invite/page.tsx b/src/app/(admin)/admin/members/invite/page.tsx index 0f63634..5695358 100644 --- a/src/app/(admin)/admin/members/invite/page.tsx +++ b/src/app/(admin)/admin/members/invite/page.tsx @@ -907,7 +907,7 @@ export default function MemberInvitePage() {
{!sendInvitation && ( -
+

No invitations will be sent

diff --git a/src/app/(admin)/admin/projects/[id]/mentor/page.tsx b/src/app/(admin)/admin/projects/[id]/mentor/page.tsx index 4952791..df4f1c8 100644 --- a/src/app/(admin)/admin/projects/[id]/mentor/page.tsx +++ b/src/app/(admin)/admin/projects/[id]/mentor/page.tsx @@ -473,7 +473,7 @@ function MentorAssignmentContent({ projectId }: { projectId: string }) { {aiSource === 'fallback' && ( -
+

AI matching unavailable

@@ -693,7 +693,7 @@ function PendingChangeRequestsPanel({ projectId }: { projectId: string }) { return ( <> - + diff --git a/src/app/(admin)/admin/projects/bulk-upload/page.tsx b/src/app/(admin)/admin/projects/bulk-upload/page.tsx index f7e6d76..ee98d4a 100644 --- a/src/app/(admin)/admin/projects/bulk-upload/page.tsx +++ b/src/app/(admin)/admin/projects/bulk-upload/page.tsx @@ -462,7 +462,7 @@ export default function BulkUploadPage() { return ( = { - LEAD: 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400', - MEMBER: 'bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-400', - ADVISOR: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400', + LEAD: 'bg-red-100 text-red-700', + MEMBER: 'bg-teal-100 text-teal-700', + ADVISOR: 'bg-blue-100 text-blue-700', } const ROLE_AVATAR_COLORS: Record = { - LEAD: 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300', - MEMBER: 'bg-teal-100 text-teal-700 dark:bg-teal-900/40 dark:text-teal-300', - ADVISOR: 'bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300', + LEAD: 'bg-red-100 text-red-700', + MEMBER: 'bg-teal-100 text-teal-700', + ADVISOR: 'bg-blue-100 text-blue-700', } const ROLE_LABELS: Record = { diff --git a/src/app/(admin)/admin/projects/page.tsx b/src/app/(admin)/admin/projects/page.tsx index a2fd83d..23639f4 100644 --- a/src/app/(admin)/admin/projects/page.tsx +++ b/src/app/(admin)/admin/projects/page.tsx @@ -679,7 +679,7 @@ export default function ProjectsPage() {
-

+

{isReadOnly ? 'Submitted Evaluation' : 'Fill In Evaluation'}

@@ -404,8 +404,8 @@ export default function AdminProxyEvaluatePage({ params: paramsPromise }: PagePr variant="secondary" className={ project.competitionCategory === 'STARTUP' - ? 'bg-violet-100 text-violet-700 border-violet-200 dark:bg-violet-950 dark:text-violet-300' - : 'bg-sky-100 text-sky-700 border-sky-200 dark:bg-sky-950 dark:text-sky-300' + ? 'bg-violet-100 text-violet-700 border-violet-200' + : 'bg-sky-100 text-sky-700 border-sky-200' } > {project.competitionCategory === 'STARTUP' ? 'Startup' : 'Business Concept'} @@ -415,7 +415,7 @@ export default function AdminProxyEvaluatePage({ params: paramsPromise }: PagePr
- +
@@ -431,7 +431,7 @@ export default function AdminProxyEvaluatePage({ params: paramsPromise }: PagePr {isReadOnly && ( - +
@@ -446,7 +446,7 @@ export default function AdminProxyEvaluatePage({ params: paramsPromise }: PagePr )} {hasCOI && !isReadOnly && ( - +
diff --git a/src/app/(admin)/admin/rounds/[roundId]/jurors/[userId]/evaluate/page.tsx b/src/app/(admin)/admin/rounds/[roundId]/jurors/[userId]/evaluate/page.tsx index da0b9f0..6141d1a 100644 --- a/src/app/(admin)/admin/rounds/[roundId]/jurors/[userId]/evaluate/page.tsx +++ b/src/app/(admin)/admin/rounds/[roundId]/jurors/[userId]/evaluate/page.tsx @@ -55,7 +55,7 @@ export default function AdminJurorProxyEvaluatePage({ params: paramsPromise }: P
-

+

Proxy Evaluations

@@ -205,8 +205,8 @@ function AssignmentRow({ roundId, userId, assignment, mode }: AssignmentRowProps className={cn( 'shrink-0', project.competitionCategory === 'STARTUP' - ? 'bg-violet-100 text-violet-700 border-violet-200 dark:bg-violet-950 dark:text-violet-300' - : 'bg-sky-100 text-sky-700 border-sky-200 dark:bg-sky-950 dark:text-sky-300', + ? 'bg-violet-100 text-violet-700 border-violet-200' + : 'bg-sky-100 text-sky-700 border-sky-200', )} > {project.competitionCategory === 'STARTUP' ? 'Startup' : 'Business Concept'} diff --git a/src/app/(admin)/admin/rounds/[roundId]/page.tsx b/src/app/(admin)/admin/rounds/[roundId]/page.tsx index 7b72a2d..6b0a945 100644 --- a/src/app/(admin)/admin/rounds/[roundId]/page.tsx +++ b/src/app/(admin)/admin/rounds/[roundId]/page.tsx @@ -2074,39 +2074,39 @@ export default function RoundDetailPage() {

)} {aiAssignmentMutation.isPending && ( -
+
-

AI is analyzing projects and jurors...

-

+

AI is analyzing projects and jurors...

+

Matching expertise, reviewing bios, and balancing workloads

)} {aiAssignmentMutation.error && !aiAssignmentMutation.isPending && ( -
+
-

+

AI generation failed

-

+

{aiAssignmentMutation.error.message}

)} {aiAssignmentMutation.data && !aiAssignmentMutation.isPending && ( -
+
-

+

{aiAssignmentMutation.data.stats.assignmentsGenerated} assignments generated

-

+

{aiAssignmentMutation.data.stats.totalJurors} jurors, {aiAssignmentMutation.data.stats.totalProjects} projects {aiAssignmentMutation.data.fallbackUsed && ' (algorithm fallback)'}

@@ -2588,9 +2588,9 @@ export default function RoundDetailPage() { {/* Autosave error bar — only shows when save fails */} {autosaveStatus === 'error' && ( -
+
-
+
Auto-save failed
diff --git a/src/app/(applicant)/applicant/page.tsx b/src/app/(applicant)/applicant/page.tsx index 2e70a0b..476fdbd 100644 --- a/src/app/(applicant)/applicant/page.tsx +++ b/src/app/(applicant)/applicant/page.tsx @@ -219,12 +219,12 @@ export default function ApplicantDashboardPage() { key={round.id} className={`flex flex-col sm:flex-row items-start sm:items-center gap-3 rounded-lg border px-4 py-3 ${ isUrgent - ? 'border-amber-500/50 bg-amber-50 dark:bg-amber-950/20' + ? 'border-amber-500/50 bg-amber-50' : 'border-primary/20 bg-primary/5' }`} >
- + {round.name} {remaining > 0 ? formatCountdown(remaining) + ' left' : 'Closed'} diff --git a/src/app/(jury)/jury/awards/[id]/page.tsx b/src/app/(jury)/jury/awards/[id]/page.tsx index a31ff27..caa83de 100644 --- a/src/app/(jury)/jury/awards/[id]/page.tsx +++ b/src/app/(jury)/jury/awards/[id]/page.tsx @@ -427,10 +427,10 @@ function ProjectDetails({ project }: { project: ProjectData }) { return (
{project.evaluationScore && ( -
- +
+
- + {project.evaluationScore.avg.toFixed(1)} / 10 @@ -518,7 +518,7 @@ function ProjectCard({ isExpanded && 'rotate-180' )} />
-

+

{project.title}

@@ -587,7 +587,7 @@ function ChairPanel({ const isClosed = award.status === 'CLOSED' return ( - +

diff --git a/src/app/(jury)/jury/competitions/[roundId]/page.tsx b/src/app/(jury)/jury/competitions/[roundId]/page.tsx index c7645ae..9b077be 100644 --- a/src/app/(jury)/jury/competitions/[roundId]/page.tsx +++ b/src/app/(jury)/jury/competitions/[roundId]/page.tsx @@ -44,7 +44,7 @@ export default function JuryRoundDetailPage() { Back
-

+

{round?.name || 'Round Details'}

diff --git a/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/evaluate/page.tsx b/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/evaluate/page.tsx index 650daa7..a143211 100644 --- a/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/evaluate/page.tsx +++ b/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/evaluate/page.tsx @@ -460,7 +460,7 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) {

-
+
@@ -495,7 +495,7 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) {
-

+

Evaluate Project

{project.title}

@@ -526,7 +526,7 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) {
-

+

Evaluate Project

{project.title}

@@ -534,7 +534,7 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) {
-
+
@@ -573,7 +573,7 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) { )}
-

+

{isReadOnly ? 'Submitted Evaluation' : 'Evaluate Project'}

@@ -583,8 +583,8 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) { variant="secondary" className={ project.competitionCategory === 'STARTUP' - ? 'bg-violet-100 text-violet-700 border-violet-200 dark:bg-violet-950 dark:text-violet-300' - : 'bg-sky-100 text-sky-700 border-sky-200 dark:bg-sky-950 dark:text-sky-300' + ? 'bg-violet-100 text-violet-700 border-violet-200' + : 'bg-sky-100 text-sky-700 border-sky-200' } > {project.competitionCategory === 'STARTUP' ? 'Startup' : 'Business Concept'} @@ -595,7 +595,7 @@ export default function JuryEvaluatePage({ params: paramsPromise }: PageProps) {
{isReadOnly && ( - +
diff --git a/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/page.tsx b/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/page.tsx index e641cab..a9c7594 100644 --- a/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/page.tsx +++ b/src/app/(jury)/jury/competitions/[roundId]/projects/[projectId]/page.tsx @@ -98,8 +98,8 @@ export default function JuryProjectDetailPage() { variant="secondary" className={ project.competitionCategory === 'STARTUP' - ? 'bg-violet-100 text-violet-700 border-violet-200 dark:bg-violet-950 dark:text-violet-300' - : 'bg-sky-100 text-sky-700 border-sky-200 dark:bg-sky-950 dark:text-sky-300' + ? 'bg-violet-100 text-violet-700 border-violet-200' + : 'bg-sky-100 text-sky-700 border-sky-200' } > {project.competitionCategory === 'STARTUP' ? 'Startup' : 'Business Concept'} diff --git a/src/app/(jury)/jury/competitions/page.tsx b/src/app/(jury)/jury/competitions/page.tsx index 8be5108..97609e4 100644 --- a/src/app/(jury)/jury/competitions/page.tsx +++ b/src/app/(jury)/jury/competitions/page.tsx @@ -54,7 +54,7 @@ export default function JuryAssignmentsPage() {
-

+

My Assignments

diff --git a/src/app/(jury)/jury/page.tsx b/src/app/(jury)/jury/page.tsx index cc259c2..127e352 100644 --- a/src/app/(jury)/jury/page.tsx +++ b/src/app/(jury)/jury/page.tsx @@ -262,7 +262,7 @@ async function JuryDashboardContent() {

-
+

No assignments yet

@@ -273,13 +273,13 @@ async function JuryDashboardContent() {
-
- +
+
-

All Assignments

+

All Assignments

View evaluations

@@ -288,7 +288,7 @@ async function JuryDashboardContent() { href="/jury/competitions" className="group flex items-center gap-3 rounded-xl border border-border/60 p-3 transition-all duration-200 hover:border-brand-teal/30 hover:bg-brand-teal/5 hover:-translate-y-0.5 hover:shadow-md" > -
+
@@ -314,8 +314,8 @@ async function JuryDashboardContent() {
-
- +
+
Special Awards — Voting Open
@@ -333,27 +333,27 @@ async function JuryDashboardContent() { className={cn( 'rounded-xl border p-4 space-y-3 transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md', hasVoted - ? 'border-green-200/60 bg-green-50/30 dark:border-green-800/40 dark:bg-green-950/10' + ? 'border-green-200/60 bg-green-50/30' : isUrgent - ? 'border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/20' - : 'border-amber-200/60 bg-amber-50/30 dark:border-amber-800/40 dark:bg-amber-950/10' + ? 'border-red-200 bg-red-50/50' + : 'border-amber-200/60 bg-amber-50/30' )} >
-

{award.name}

+

{award.name}

{award._count.eligibilities} project{award._count.eligibilities !== 1 ? 's' : ''} to review {record.isChair && ' · You are the Chair'}

{hasVoted ? ( - + Submitted ) : ( - + Vote Now )} @@ -452,8 +452,8 @@ async function JuryDashboardContent() {
-
- +
+
My Assignments
@@ -487,14 +487,14 @@ async function JuryDashboardContent() { href={`/jury/competitions/${assignment.round.id}/projects/${assignment.project.id}`} className="flex-1 min-w-0 group" > -

+

{assignment.project.title}

{assignment.project.teamName} - + {assignment.round.name}
@@ -506,7 +506,7 @@ async function JuryDashboardContent() { Done ) : isDraft && isVotingOpen ? ( - + Ready to submit @@ -571,7 +571,7 @@ async function JuryDashboardContent() {
-
+
Quick Actions @@ -581,13 +581,13 @@ async function JuryDashboardContent() {
-
- +
+
-

All Assignments

+

All Assignments

View and manage evaluations

@@ -596,7 +596,7 @@ async function JuryDashboardContent() { href="/jury/competitions" className="group flex items-center gap-4 rounded-xl border border-border/60 p-4 transition-all duration-200 hover:border-brand-teal/30 hover:bg-brand-teal/5 hover:-translate-y-0.5 hover:shadow-md" > -
+
@@ -620,8 +620,8 @@ async function JuryDashboardContent() {
-
- +
+
Active Voting Stages @@ -650,13 +650,13 @@ async function JuryDashboardContent() { className={cn( 'rounded-xl border p-4 space-y-3 transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md', isUrgent - ? 'border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/20' - : 'border-border/60 bg-muted/20 dark:bg-muted/10' + ? 'border-red-200 bg-red-50/50' + : 'border-border/60 bg-muted/20' )} >
-

{round.name}

+

{round.name}

{program.name} · {program.year}

@@ -716,7 +716,7 @@ async function JuryDashboardContent() { -
+

No active voting stages

@@ -734,7 +734,7 @@ async function JuryDashboardContent() {
-
+
Round Summary @@ -750,7 +750,7 @@ async function JuryDashboardContent() {
{round.name}
- {pct}% + {pct}% ({done}/{total})
@@ -852,7 +852,7 @@ export default async function JuryDashboardPage() {
{/* Header */}
-

+

{getGreeting()}, {session?.user?.name || 'Juror'}

diff --git a/src/app/(mentor)/mentor/projects/[id]/page.tsx b/src/app/(mentor)/mentor/projects/[id]/page.tsx index 15966a6..9a26169 100644 --- a/src/app/(mentor)/mentor/projects/[id]/page.tsx +++ b/src/app/(mentor)/mentor/projects/[id]/page.tsx @@ -596,7 +596,7 @@ function MilestonesSection({

{data.project.title} is a finalist for the Monaco Ocean Protection Challenge grand finale.

-
+

Confirm by {formatDeadline(deadline)}.

diff --git a/src/components/admin/assignment/assignment-preview-sheet.tsx b/src/components/admin/assignment/assignment-preview-sheet.tsx index 3b5a40b..778e87a 100644 --- a/src/components/admin/assignment/assignment-preview-sheet.tsx +++ b/src/components/admin/assignment/assignment-preview-sheet.tsx @@ -437,7 +437,7 @@ export function AssignmentPreviewSheet({ {mode === 'ai' && !aiResult && !isAIGenerating && ( -
+
@@ -463,7 +463,7 @@ export function AssignmentPreviewSheet({ {isLoading ? (
{mode === 'ai' && ( - +
@@ -567,13 +567,13 @@ export function AssignmentPreviewSheet({ {/* ── Warnings ── */} {preview.warnings && preview.warnings.length > 0 && ( - +
{preview.warnings.map((w: string, idx: number) => ( -

+

{w}

))} diff --git a/src/components/admin/round/award-shortlist.tsx b/src/components/admin/round/award-shortlist.tsx index 4f5f98e..89e6303 100644 --- a/src/components/admin/round/award-shortlist.tsx +++ b/src/components/admin/round/award-shortlist.tsx @@ -259,7 +259,7 @@ export function AwardShortlist({ }

{eligibilityMode === 'SEPARATE_POOL' && !hasAwardRounds && ( -
+

No award rounds have been created yet. Projects will be confirmed but not routed to an evaluation track. Create rounds on the award page first. diff --git a/src/components/admin/round/finalization-tab.tsx b/src/components/admin/round/finalization-tab.tsx index df013b2..2ddc562 100644 --- a/src/components/admin/round/finalization-tab.tsx +++ b/src/components/admin/round/finalization-tab.tsx @@ -328,13 +328,13 @@ export function FinalizationTab({ roundId, roundStatus }: FinalizationTabProps)

{/* Grace Period Banner */} {summary.isGracePeriodActive && ( - +
-

Grace Period Active

-

+

Grace Period Active

+

Applicants can still submit until{' '} {summary.gracePeriodEndsAt ? new Date(summary.gracePeriodEndsAt).toLocaleString() @@ -358,12 +358,12 @@ export function FinalizationTab({ roundId, roundStatus }: FinalizationTabProps) {/* Finalized Banner */} {summary.isFinalized && ( - +

-

Round Finalized

-

+

Round Finalized

+

Finalized on{' '} {summary.finalizedAt ? new Date(summary.finalizedAt).toLocaleString() @@ -376,13 +376,13 @@ export function FinalizationTab({ roundId, roundStatus }: FinalizationTabProps) {/* Needs Processing Banner */} {!summary.isFinalized && !summary.isGracePeriodActive && summary.projects.length > 0 && summary.projects.every((p) => !p.proposedOutcome) && ( - +

-

Projects Need Processing

-

+

Projects Need Processing

+

{summary.projects.length} project{summary.projects.length !== 1 ? 's' : ''} in this round have no proposed outcome. Click "Process" to auto-assign outcomes based on round type and project activity.

diff --git a/src/components/admin/round/mentoring-round-overview.tsx b/src/components/admin/round/mentoring-round-overview.tsx index b9cfe7b..8d8b2de 100644 --- a/src/components/admin/round/mentoring-round-overview.tsx +++ b/src/components/admin/round/mentoring-round-overview.tsx @@ -124,7 +124,7 @@ export function MentoringRoundOverview({ roundId }: Props) {

{assignedPct}% of round{' '} {stats.awaitingAssignment > 0 && ( - + · {stats.awaitingAssignment} awaiting )} @@ -189,7 +189,7 @@ export function MentoringRoundOverview({ roundId }: Props) { 0 ? 'border-amber-300 dark:border-amber-700' : '' + pendingCount > 0 ? 'border-amber-300' : '' }`} > diff --git a/src/components/admin/round/project-states-table.tsx b/src/components/admin/round/project-states-table.tsx index 498817c..b80ed64 100644 --- a/src/components/admin/round/project-states-table.tsx +++ b/src/components/admin/round/project-states-table.tsx @@ -290,8 +290,8 @@ export function ProjectStatesTable({ competitionId, roundId, roundStatus, compet

{/* Finalization hint for closed rounds */} {(roundStatus === 'ROUND_CLOSED' || roundStatus === 'ROUND_ARCHIVED') && ( -
- +
+ This round is closed. Use the Finalization tab to review proposed outcomes and confirm advancement.
diff --git a/src/components/admin/round/ranking-dashboard.tsx b/src/components/admin/round/ranking-dashboard.tsx index c20eb91..e5990a4 100644 --- a/src/components/admin/round/ranking-dashboard.tsx +++ b/src/components/admin/round/ranking-dashboard.tsx @@ -699,7 +699,7 @@ export function RankingDashboard({ competitionId: _competitionId, roundId }: Ran This may take a minute. You can continue working — results will appear automatically.

-
+
@@ -962,18 +962,18 @@ export function RankingDashboard({ competitionId: _competitionId, roundId }: Ran {/* Ranking in-progress banner */} {rankingInProgress && ( - + - +
-

+

Ranking in progress…

-

+

This may take a minute. You can continue working — results will appear automatically.

-
+
@@ -1097,7 +1097,7 @@ export function RankingDashboard({ competitionId: _competitionId, roundId }: Ran animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -20 }} className={isAdvancing - ? 'rounded-lg bg-emerald-50 border-l-4 border-emerald-400 dark:bg-emerald-950/20 dark:border-emerald-600' + ? 'rounded-lg bg-emerald-50 border-l-4 border-emerald-400' : ''} >
- + Advancement cutoff — {isThresholdMode ? `Score ≥ ${threshold}` : `Top ${advanceCount}`}
diff --git a/src/components/dashboard/smart-actions.tsx b/src/components/dashboard/smart-actions.tsx index 3c92de1..d179199 100644 --- a/src/components/dashboard/smart-actions.tsx +++ b/src/components/dashboard/smart-actions.tsx @@ -33,19 +33,19 @@ const severityConfig = { critical: { icon: AlertTriangle, iconClass: 'text-red-600', - bgClass: 'bg-red-50 dark:bg-red-950/30', + bgClass: 'bg-red-50', borderClass: 'border-l-red-500', }, warning: { icon: AlertCircle, iconClass: 'text-amber-600', - bgClass: 'bg-amber-50 dark:bg-amber-950/30', + bgClass: 'bg-amber-50', borderClass: 'border-l-amber-500', }, info: { icon: Info, iconClass: 'text-blue-600', - bgClass: 'bg-blue-50 dark:bg-blue-950/30', + bgClass: 'bg-blue-50', borderClass: 'border-l-blue-500', }, } @@ -54,8 +54,8 @@ export function SmartActions({ actions }: SmartActionsProps) { return ( -
- +
+
Action Required {actions.length > 0 && ( @@ -65,8 +65,8 @@ export function SmartActions({ actions }: SmartActionsProps) { {actions.length === 0 ? (
-
- +
+

All caught up! diff --git a/src/components/evaluation/evaluation-form-fields.tsx b/src/components/evaluation/evaluation-form-fields.tsx index 2d58edc..7494e9d 100644 --- a/src/components/evaluation/evaluation-form-fields.tsx +++ b/src/components/evaluation/evaluation-form-fields.tsx @@ -207,7 +207,7 @@ export function EvaluationFormFields({ className={cn( 'flex-1 h-12 rounded-lg border-2 flex items-center justify-center text-sm font-medium transition-all', currentValue === true - ? 'border-emerald-500 bg-emerald-50 text-emerald-700 dark:bg-emerald-950/40 dark:text-emerald-400' + ? 'border-emerald-500 bg-emerald-50 text-emerald-700' : 'border-border hover:border-emerald-300 hover:bg-emerald-50/50', isReadOnly && 'opacity-60 cursor-default', )} @@ -222,7 +222,7 @@ export function EvaluationFormFields({ className={cn( 'flex-1 h-12 rounded-lg border-2 flex items-center justify-center text-sm font-medium transition-all', currentValue === false - ? 'border-red-500 bg-red-50 text-red-700 dark:bg-red-950/40 dark:text-red-400' + ? 'border-red-500 bg-red-50 text-red-700' : 'border-border hover:border-red-300 hover:bg-red-50/50', isReadOnly && 'opacity-60 cursor-default', )} diff --git a/src/components/forms/evaluation-form-with-coi.tsx b/src/components/forms/evaluation-form-with-coi.tsx index 2c6c374..a6e33de 100644 --- a/src/components/forms/evaluation-form-with-coi.tsx +++ b/src/components/forms/evaluation-form-with-coi.tsx @@ -83,10 +83,10 @@ export function EvaluationFormWithCOI({

-

+

Conflict of Interest Declared

-

+

You declared a conflict of interest for this project. An admin will review your declaration. You cannot evaluate this project while the conflict is under review. diff --git a/src/components/jury/preferences-banner.tsx b/src/components/jury/preferences-banner.tsx index 27bbf65..bfc9265 100644 --- a/src/components/jury/preferences-banner.tsx +++ b/src/components/jury/preferences-banner.tsx @@ -62,7 +62,7 @@ export function JuryPreferencesBanner() { if (isLoading || unconfirmed.length === 0) return null return ( - +

diff --git a/src/components/observer/dashboard/live-final-panel.tsx b/src/components/observer/dashboard/live-final-panel.tsx index ec63d44..0c64703 100644 --- a/src/components/observer/dashboard/live-final-panel.tsx +++ b/src/components/observer/dashboard/live-final-panel.tsx @@ -9,10 +9,10 @@ import { Radio, Users, Trophy, Eye, EyeOff } from 'lucide-react' import { cn } from '@/lib/utils' const SESSION_STATUS_CONFIG: Record = { - NOT_STARTED: { label: 'Not Started', color: 'text-slate-500', bg: 'bg-slate-100 dark:bg-slate-800' }, - IN_PROGRESS: { label: 'In Progress', color: 'text-emerald-600', bg: 'bg-emerald-50 dark:bg-emerald-900/20', pulse: true }, - PAUSED: { label: 'Paused', color: 'text-amber-600', bg: 'bg-amber-50 dark:bg-amber-900/20' }, - COMPLETED: { label: 'Completed', color: 'text-blue-600', bg: 'bg-blue-50 dark:bg-blue-900/20' }, + NOT_STARTED: { label: 'Not Started', color: 'text-slate-500', bg: 'bg-slate-100' }, + IN_PROGRESS: { label: 'In Progress', color: 'text-emerald-600', bg: 'bg-emerald-50', pulse: true }, + PAUSED: { label: 'Paused', color: 'text-amber-600', bg: 'bg-amber-50' }, + COMPLETED: { label: 'Completed', color: 'text-blue-600', bg: 'bg-blue-50' }, } export function LiveFinalPanel({ roundId }: { roundId: string }) { diff --git a/src/components/observer/dashboard/previous-round-section.tsx b/src/components/observer/dashboard/previous-round-section.tsx index 1e563fa..c78dd06 100644 --- a/src/components/observer/dashboard/previous-round-section.tsx +++ b/src/components/observer/dashboard/previous-round-section.tsx @@ -52,7 +52,7 @@ export function PreviousRoundSection({ currentRoundId }: { currentRoundId: strin {!collapsed && ( {/* Headline Stat */} -
+

@@ -85,7 +85,7 @@ export function PreviousRoundSection({ currentRoundId }: { currentRoundId: strin

-

+

+

Warning: Local storage is not recommended for production deployments with multiple servers, as files will only be accessible from the server that uploaded them.

diff --git a/src/components/shared/countdown-timer.tsx b/src/components/shared/countdown-timer.tsx index 3761c0a..55470e8 100644 --- a/src/components/shared/countdown-timer.tsx +++ b/src/components/shared/countdown-timer.tsx @@ -62,9 +62,9 @@ function getUrgency(totalMs: number): Urgency { const urgencyStyles: Record = { expired: 'text-muted-foreground bg-muted', - critical: 'text-red-700 bg-red-50 border-red-200 dark:text-red-400 dark:bg-red-950/50 dark:border-red-900', - warning: 'text-amber-700 bg-amber-50 border-amber-200 dark:text-amber-400 dark:bg-amber-950/50 dark:border-amber-900', - normal: 'text-green-700 bg-green-50 border-green-200 dark:text-green-400 dark:bg-green-950/50 dark:border-green-900', + critical: 'text-red-700 bg-red-50 border-red-200', + warning: 'text-amber-700 bg-amber-50 border-amber-200', + normal: 'text-green-700 bg-green-50 border-green-200', } export function CountdownTimer({ deadline, label, className }: CountdownTimerProps) { diff --git a/src/components/shared/edition-selector.tsx b/src/components/shared/edition-selector.tsx index 4570eea..4b2a9be 100644 --- a/src/components/shared/edition-selector.tsx +++ b/src/components/shared/edition-selector.tsx @@ -19,18 +19,18 @@ import { useState } from 'react' const statusConfig: Record = { DRAFT: { - bg: 'bg-amber-50 dark:bg-amber-950/50', - text: 'text-amber-700 dark:text-amber-400', + bg: 'bg-amber-50', + text: 'text-amber-700', dot: 'bg-amber-500', }, ACTIVE: { - bg: 'bg-emerald-50 dark:bg-emerald-950/50', - text: 'text-emerald-700 dark:text-emerald-400', + bg: 'bg-emerald-50', + text: 'text-emerald-700', dot: 'bg-emerald-500', }, ARCHIVED: { - bg: 'bg-slate-100 dark:bg-slate-800/50', - text: 'text-slate-600 dark:text-slate-400', + bg: 'bg-slate-100', + text: 'text-slate-600', dot: 'bg-slate-400', }, } @@ -95,10 +95,10 @@ export function EditionSelector() { {/* Text */}
-

+

{currentEdition ? currentEdition.year : 'Select'}

-

+

{currentEdition?.status === 'ACTIVE' ? 'Current Edition' : currentEdition?.status?.toLowerCase()}

@@ -136,7 +136,7 @@ export function EditionSelector() { }} className={cn( 'group/item flex items-center gap-3 rounded-lg px-2.5 py-2.5 cursor-pointer transition-colors', - isSelected ? 'bg-slate-100 dark:bg-slate-800' : 'hover:bg-slate-50 dark:hover:bg-slate-800/50' + isSelected ? 'bg-slate-100' : 'hover:bg-slate-50' )} > {/* Year badge in dropdown */} @@ -144,19 +144,19 @@ export function EditionSelector() { 'flex h-9 w-9 shrink-0 items-center justify-center rounded-lg font-bold text-sm transition-colors', isSelected ? 'bg-brand-blue text-white' - : 'bg-slate-200 text-slate-600 dark:bg-slate-700 dark:text-slate-300' + : 'bg-slate-200 text-slate-600' )}> {String(edition.year).slice(-2)}
{/* Edition info */}
-

+

{edition.year}

- + {edition.status.toLowerCase()}
diff --git a/src/components/shared/file-viewer.tsx b/src/components/shared/file-viewer.tsx index 9baa18f..4d6da48 100644 --- a/src/components/shared/file-viewer.tsx +++ b/src/components/shared/file-viewer.tsx @@ -827,9 +827,9 @@ function RequirementChecklist({ roundId, files }: { roundId: string; files: Proj className={cn( 'flex items-center gap-3 rounded-lg border p-2.5 text-sm', isFulfilled - ? 'border-green-200 bg-green-50 dark:border-green-900 dark:bg-green-950' + ? 'border-green-200 bg-green-50' : req.isRequired - ? 'border-red-200 bg-red-50 dark:border-red-900 dark:bg-red-950' + ? 'border-red-200 bg-red-50' : 'border-muted' )} > diff --git a/src/components/shared/notification-bell.tsx b/src/components/shared/notification-bell.tsx index ffa58e8..e005b72 100644 --- a/src/components/shared/notification-bell.tsx +++ b/src/components/shared/notification-bell.tsx @@ -108,20 +108,20 @@ const ICON_MAP: Record> = { // Priority styles const PRIORITY_STYLES = { low: { - iconBg: 'bg-slate-100 dark:bg-slate-800', + iconBg: 'bg-slate-100', iconColor: 'text-slate-500', }, normal: { - iconBg: 'bg-blue-100 dark:bg-blue-900/30', - iconColor: 'text-blue-600 dark:text-blue-400', + iconBg: 'bg-blue-100', + iconColor: 'text-blue-600', }, high: { - iconBg: 'bg-amber-100 dark:bg-amber-900/30', - iconColor: 'text-amber-600 dark:text-amber-400', + iconBg: 'bg-amber-100', + iconColor: 'text-amber-600', }, urgent: { - iconBg: 'bg-red-100 dark:bg-red-900/30', - iconColor: 'text-red-600 dark:text-red-400', + iconBg: 'bg-red-100', + iconColor: 'text-red-600', }, } @@ -158,7 +158,7 @@ function NotificationItem({ data-notification-id={notification.id} className={cn( 'flex gap-3 p-3 hover:bg-muted/50 transition-colors cursor-pointer', - !notification.isRead && 'bg-blue-50/50 dark:bg-blue-950/20' + !notification.isRead && 'bg-blue-50/50' )} onClick={onRead} > diff --git a/src/components/shared/requirement-upload-slot.tsx b/src/components/shared/requirement-upload-slot.tsx index d125937..e2fb847 100644 --- a/src/components/shared/requirement-upload-slot.tsx +++ b/src/components/shared/requirement-upload-slot.tsx @@ -263,9 +263,9 @@ export function RequirementUploadSlot({ const isFulfilled = !!existingFile const statusColor = isFulfilled - ? 'border-green-200 bg-green-50 dark:border-green-900 dark:bg-green-950' + ? 'border-green-200 bg-green-50' : requirement.isRequired - ? 'border-red-200 bg-red-50 dark:border-red-900 dark:bg-red-950' + ? 'border-red-200 bg-red-50' : 'border-muted' // Build accept string for file input diff --git a/src/components/shared/status-badge.tsx b/src/components/shared/status-badge.tsx index 1c0b060..beefb4b 100644 --- a/src/components/shared/status-badge.tsx +++ b/src/components/shared/status-badge.tsx @@ -4,39 +4,39 @@ import { cn } from '@/lib/utils' const STATUS_STYLES: Record = { // Round statuses DRAFT: { variant: 'secondary' }, - ACTIVE: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200 dark:text-blue-400' }, - EVALUATION: { variant: 'default', className: 'bg-violet-500/10 text-violet-700 border-violet-200 dark:text-violet-400' }, + ACTIVE: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200' }, + EVALUATION: { variant: 'default', className: 'bg-violet-500/10 text-violet-700 border-violet-200' }, CLOSED: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-600 border-slate-200' }, ROUND_DRAFT: { variant: 'secondary' }, - ROUND_ACTIVE: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200 dark:text-blue-400' }, + ROUND_ACTIVE: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200' }, ROUND_CLOSED: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-600 border-slate-200' }, ROUND_ARCHIVED: { variant: 'secondary', className: 'bg-slate-400/10 text-slate-400 border-slate-200' }, // Project statuses - SUBMITTED: { variant: 'secondary', className: 'bg-indigo-500/10 text-indigo-700 border-indigo-200 dark:text-indigo-400' }, - ELIGIBLE: { variant: 'default', className: 'bg-emerald-500/10 text-emerald-700 border-emerald-200 dark:text-emerald-400' }, - ASSIGNED: { variant: 'default', className: 'bg-violet-500/10 text-violet-700 border-violet-200 dark:text-violet-400' }, - UNDER_REVIEW: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200 dark:text-blue-400' }, - SHORTLISTED: { variant: 'default', className: 'bg-amber-500/10 text-amber-700 border-amber-200 dark:text-amber-400' }, - SEMIFINALIST: { variant: 'default', className: 'bg-amber-500/10 text-amber-700 border-amber-200 dark:text-amber-400' }, - FINALIST: { variant: 'default', className: 'bg-orange-500/10 text-orange-700 border-orange-200 dark:text-orange-400' }, - WINNER: { variant: 'default', className: 'bg-yellow-500/10 text-yellow-800 border-yellow-300 dark:text-yellow-400' }, + SUBMITTED: { variant: 'secondary', className: 'bg-indigo-500/10 text-indigo-700 border-indigo-200' }, + ELIGIBLE: { variant: 'default', className: 'bg-emerald-500/10 text-emerald-700 border-emerald-200' }, + ASSIGNED: { variant: 'default', className: 'bg-violet-500/10 text-violet-700 border-violet-200' }, + UNDER_REVIEW: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200' }, + SHORTLISTED: { variant: 'default', className: 'bg-amber-500/10 text-amber-700 border-amber-200' }, + SEMIFINALIST: { variant: 'default', className: 'bg-amber-500/10 text-amber-700 border-amber-200' }, + FINALIST: { variant: 'default', className: 'bg-orange-500/10 text-orange-700 border-orange-200' }, + WINNER: { variant: 'default', className: 'bg-yellow-500/10 text-yellow-800 border-yellow-300' }, REJECTED: { variant: 'destructive' }, WITHDRAWN: { variant: 'secondary' }, // Observer-derived statuses - NOT_REVIEWED: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-600 border-slate-200 dark:text-slate-400' }, - REVIEWED: { variant: 'default', className: 'bg-emerald-500/10 text-emerald-700 border-emerald-200 dark:text-emerald-400' }, + NOT_REVIEWED: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-600 border-slate-200' }, + REVIEWED: { variant: 'default', className: 'bg-emerald-500/10 text-emerald-700 border-emerald-200' }, // Round state statuses - PENDING: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-600 border-slate-200 dark:text-slate-400' }, - IN_PROGRESS: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200 dark:text-blue-400' }, - COMPLETED: { variant: 'default', className: 'bg-emerald-500/10 text-emerald-700 border-emerald-200 dark:text-emerald-400' }, - PASSED: { variant: 'default', className: 'bg-green-500/10 text-green-700 border-green-200 dark:text-green-400' }, + PENDING: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-600 border-slate-200' }, + IN_PROGRESS: { variant: 'default', className: 'bg-blue-500/10 text-blue-700 border-blue-200' }, + COMPLETED: { variant: 'default', className: 'bg-emerald-500/10 text-emerald-700 border-emerald-200' }, + PASSED: { variant: 'default', className: 'bg-green-500/10 text-green-700 border-green-200' }, // User statuses - NONE: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-500 border-slate-200 dark:text-slate-400' }, - INVITED: { variant: 'secondary', className: 'bg-sky-500/10 text-sky-700 border-sky-200 dark:text-sky-400' }, + NONE: { variant: 'secondary', className: 'bg-slate-500/10 text-slate-500 border-slate-200' }, + INVITED: { variant: 'secondary', className: 'bg-sky-500/10 text-sky-700 border-sky-200' }, INACTIVE: { variant: 'secondary' }, SUSPENDED: { variant: 'destructive' }, } diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx index 46fe266..5baeb44 100644 --- a/src/components/ui/alert.tsx +++ b/src/components/ui/alert.tsx @@ -9,11 +9,11 @@ const alertVariants = cva( variant: { default: "bg-background text-foreground", destructive: - "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + "border-destructive/50 text-destructive [&>svg]:text-destructive", success: - "border-green-500/50 text-green-700 dark:border-green-500 [&>svg]:text-green-600", + "border-green-500/50 text-green-700 [&>svg]:text-green-600", warning: - "border-yellow-500/50 text-yellow-700 dark:border-yellow-500 [&>svg]:text-yellow-600", + "border-yellow-500/50 text-yellow-700 [&>svg]:text-yellow-600", }, }, defaultVariants: { diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx index 8ccb332..2aa1571 100644 --- a/src/components/ui/badge.tsx +++ b/src/components/ui/badge.tsx @@ -15,10 +15,10 @@ const badgeVariants = cva( 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80', outline: 'text-foreground', success: - 'border-transparent bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100', + 'border-transparent bg-green-100 text-green-800', warning: - 'border-transparent bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-100', - info: 'border-transparent bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-100', + 'border-transparent bg-amber-100 text-amber-800', + info: 'border-transparent bg-blue-100 text-blue-800', }, }, defaultVariants: {