All checks were successful
Build and Push Docker Image / build (push) Successful in 11m2s
- Observer projects: default sort by status (rejected last), sortable status column - Observer projects: search by country, institution, geographic zone - Observer project detail: vertical timeline connectors between rounds - Fix React key warning in ExpandableJurorTable and FilteringReportTabs - Fix ScoreBadge text always white for better contrast on all backgrounds - Remove misleading /30 denominator from heatmap juror reviewed count - INTAKE stats: show Start-ups, Business Concepts, Countries (not States/Categories) - DiversityMetrics: extractCountry() for country-only display in charts - Fix nested button hydration error in filtering report mobile view - Color project titles by outcome in filtering report (green/red/amber) - Redesign CrossStageComparisonChart: funnel viz + metrics table with attrition % - Center doughnut chart in StatusBreakdownChart - Remove redundant RoundTypeStatsCards from evaluation report - Move evaluation tab bar below overview header, rename to "Juror Assignments" - Dev email override system (DEV_EMAIL_OVERRIDE env var) - Session refresh on role change without re-login - Role switcher in user dropdown menu - formatCategory() utility for consistent category display - Activity feed max height constraint Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import Script from "next/script";
|
|
import './globals.css'
|
|
import { Providers } from './providers'
|
|
import { Toaster } from 'sonner'
|
|
import { ImpersonationBanner } from '@/components/shared/impersonation-banner'
|
|
import { VersionGuard } from '@/components/shared/version-guard'
|
|
|
|
export const metadata: Metadata = {
|
|
title: {
|
|
default: 'MOPC Platform',
|
|
template: '%s | MOPC',
|
|
},
|
|
description: 'Monaco Ocean Protection Challenge - Jury Voting Platform',
|
|
icons: {
|
|
icon: '/images/MOPC-blue-small.png',
|
|
},
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode
|
|
}>) {
|
|
return (
|
|
<html lang="en" suppressHydrationWarning>
|
|
<head>
|
|
{process.env.NODE_ENV === "development" && (
|
|
<Script
|
|
src="//unpkg.com/react-grab/dist/index.global.js"
|
|
crossOrigin="anonymous"
|
|
strategy="beforeInteractive"
|
|
/>
|
|
)}
|
|
{process.env.NODE_ENV === "development" && (
|
|
<Script
|
|
src="//unpkg.com/@react-grab/mcp/dist/client.global.js"
|
|
strategy="lazyOnload"
|
|
/>
|
|
)}
|
|
</head>
|
|
<body className="min-h-screen bg-background font-sans antialiased">
|
|
<Providers>
|
|
<VersionGuard />
|
|
<ImpersonationBanner />
|
|
{children}
|
|
</Providers>
|
|
<Toaster
|
|
position="top-right"
|
|
toastOptions={{
|
|
style: {
|
|
background: 'hsl(var(--background))',
|
|
color: 'hsl(var(--foreground))',
|
|
border: '1px solid hsl(var(--border))',
|
|
},
|
|
}}
|
|
/>
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|