@@ -3,6 +3,7 @@ import { useEffect } from "react";
33import { LuCalendar } from "react-icons/lu" ;
44
55import Brand from "@/components/Common/Brand" ;
6+ import ThemeToggle from "@/components/Common/ThemeToggle" ;
67import type { EventEnriched } from "@/content" ;
78import { formatDate , formatTime } from "@/utils/formatDate" ;
89
@@ -62,92 +63,80 @@ export default function EventProjectorOverlay({
6263 return (
6364 < div
6465 id = "projector-overlay"
65- className = "fixed inset-0 z-50 flex h-screen w-screen items-center justify-center bg-black"
66- data-theme = "night"
66+ className = "bg-base-100 fixed inset-0 z-50 flex h-screen w-screen items-center justify-center"
6767 data-testid = "projector-overlay"
6868 >
6969 < div
70- className = "from-primary to-secondary text-base-100 relative flex bg-gradient-to-br "
70+ className = "relative flex"
7171 style = { {
7272 width : "100vw" ,
7373 height : "calc(100vw * 9 / 16)" ,
7474 maxHeight : "100vh" ,
7575 maxWidth : "calc(100vh * 16 / 9)" ,
76- padding : "4vw" ,
77- fontSize : "1vw" ,
76+ padding : "5vw" ,
7877 } }
7978 >
8079 { /* Left Column */ }
81- < div className = "flex flex-1 flex-col justify-between" style = { { paddingRight : "2vw " } } >
80+ < div className = "flex flex-1 flex-col justify-between" style = { { paddingRight : "3vw " } } >
8281 { /* Top: Title and Description */ }
8382 < div className = "flex flex-col" style = { { gap : "2vw" } } >
8483 < h1
85- className = "line-clamp-3 leading-tight font-bold"
86- style = { { fontSize : "5vw" } }
84+ className = "text-base-content line-clamp-3 leading-tight font-bold"
85+ style = { { fontSize : "4. 5vw" } }
8786 data-testid = "projector-title"
8887 >
8988 { event . data . title }
9089 </ h1 >
91-
92- { event . data . topics && event . data . topics . length > 0 && (
93- < p
94- className = "line-clamp-2 opacity-80"
95- style = { { fontSize : "2vw" } }
96- data-testid = "projector-topics"
97- >
98- { event . data . topics . join ( " • " ) }
99- </ p >
100- ) }
10190 </ div >
10291
10392 { /* Bottom: Date/Time */ }
10493 < div className = "flex items-center" style = { { gap : "1.5vw" } } >
10594 < div
106- className = "bg-base-100/20 rounded-box flex flex-shrink-0 items-center justify-center"
107- style = { { padding : "1vw " } }
95+ className = "bg-primary/10 rounded-box flex flex-shrink-0 items-center justify-center"
96+ style = { { width : "4vw" , height : "4vw " } }
10897 >
109- < LuCalendar className = "text-base-100" style = { { width : "2vw" , height : "2vw" } } />
98+ < LuCalendar className = "text-primary" style = { { width : "2vw" , height : "2vw" } } />
99+ </ div >
100+ < div className = "flex flex-col" style = { { gap : "0.3vw" } } >
101+ < span
102+ className = "text-base-content font-medium"
103+ style = { { fontSize : "1.8vw" } }
104+ data-testid = "projector-datetime"
105+ >
106+ { formattedDate }
107+ </ span >
108+ < span className = "text-base-content/70" style = { { fontSize : "1.5vw" } } >
109+ { formattedTime }
110+ { event . data . duration && < span > • { event . data . duration / 60 } hours</ span > }
111+ </ span >
110112 </ div >
111- < span
112- className = "overflow-hidden font-medium text-ellipsis whitespace-nowrap"
113- style = { { fontSize : "2vw" } }
114- data-testid = "projector-datetime"
115- >
116- { formattedDate } • { formattedTime }
117- { event . data . duration && (
118- < span className = "opacity-70" style = { { fontSize : "1.5vw" } } >
119- { " " }
120- ({ event . data . duration / 60 } hours)
121- </ span >
122- ) }
123- </ span >
124113 </ div >
125114 </ div >
126115
127116 { /* Right Column */ }
128- < div className = "flex flex-shrink-0 flex-col justify-between" style = { { width : "25vw " } } >
117+ < div className = "flex flex-shrink-0 flex-col justify-between" style = { { width : "30vw " } } >
129118 { /* Top: Branding */ }
130119 < div className = "flex justify-end" >
131- < div className = "transform " style = { { scale : "calc(3vw / 48) " } } >
132- < Brand />
120+ < div className = "text-base-content " style = { { width : "20vw " } } >
121+ < Brand className = "w-full" />
133122 </ div >
134123 </ div >
135124
136125 { /* Bottom: Venue Info */ }
137126 { event . venue && (
138- < div className = "self- end" style = { { width : "20vw" } } >
139- < div className = "bg-base-100/20 rounded-box shadow-2xl " style = { { padding : "1.5vw " } } >
127+ < div className = "flex flex-col items- end" >
128+ < div className = "bg-base-200 rounded-box" style = { { padding : "2vw" , width : "25vw " } } >
140129 < h3
141- className = "font-bold"
142- style = { { fontSize : "1.5vw " , marginBottom : "0.5vw" } }
130+ className = "text-base-content font-bold"
131+ style = { { fontSize : "1.6vw " , marginBottom : "0.5vw" } }
143132 data-testid = "projector-venue-title"
144133 >
145134 { event . venue . title }
146135 </ h3 >
147136 { event . venue . address && (
148137 < p
149- className = "opacity-80 "
150- style = { { fontSize : "1.2vw " } }
138+ className = "text-base-content/70 "
139+ style = { { fontSize : "1.3vw" , lineHeight : "1.6 " } }
151140 data-testid = "projector-venue-address"
152141 >
153142 { event . venue . address }
@@ -158,6 +147,13 @@ export default function EventProjectorOverlay({
158147 ) }
159148 </ div >
160149 </ div >
150+
151+ { /* Theme Switcher - appears on hover */ }
152+ < div className = "group/theme-toggle absolute right-0 bottom-0 p-6" >
153+ < div className = "opacity-0 transition-opacity duration-300 group-hover/theme-toggle:opacity-100" >
154+ < ThemeToggle testId = "projector-theme-toggle" />
155+ </ div >
156+ </ div >
161157 </ div >
162158 ) ;
163159}
0 commit comments