@@ -127,7 +127,7 @@ const Home = () => {
127127 animate = { { opacity : 1 , y : 0 } }
128128 transition = { { duration : 0.4 , delay : 0.5 } }
129129 >
130- { IS_COMING_SOON ? null : < EnhancedCTAButtons /> }
130+ { IS_COMING_SOON ? null : < EnhancedCTAButtons /> }
131131 </ motion . div >
132132
133133 { /* Additional Info */ }
@@ -245,25 +245,24 @@ const EnhancedCTAButtons = () => {
245245 const IS_SPONSOR_OPEN = true ; // Set to true to enable Sponsor button
246246
247247 return (
248- < div className = "flex flex-col sm:flex-row items-center justify-center gap-4 sm:gap-6 w-full" >
249-
248+ < div className = "flex flex-col sm:flex-row flex-wrap items-stretch justify-center gap-3 sm:gap-4 w-full" >
250249 { /* 1. Main CTA - Get Ticket */ }
251250 < motion . div
252251 whileHover = { IS_TICKET_SALE_OPEN ? { scale : 1.05 } : { } }
253252 whileTap = { IS_TICKET_SALE_OPEN ? { scale : 0.95 } : { } }
254- className = { `w-full sm:w-auto ${ ! IS_TICKET_SALE_OPEN ? 'cursor-not-allowed opacity-80' : '' } ` }
253+ className = { `flex-1 min-w-0 sm:min-w-[10rem] sm:max-w-[14rem] ${ ! IS_TICKET_SALE_OPEN ? 'cursor-not-allowed opacity-80' : '' } ` }
255254 >
256255 { IS_TICKET_SALE_OPEN ? (
257256 < a
258- href = "https://www.eventi.overnet.education/ServerlessDaysMilano2026#/tickets "
257+ href = "https://www.eventi.overnet.education/ServerlessDaysMilano2026#/buyTickets/selectTickets "
259258 target = "_blank"
260259 className = "group block w-full"
261260 >
262261 < TicketButtonContent isOpen = { true } />
263262 </ a >
264263 ) : (
265264 < div className = "block w-full pointer-events-none" >
266- < TicketButtonContent isOpen = { false } />
265+ < TicketButtonContent isOpen = { false } />
267266 </ div >
268267 ) }
269268 </ motion . div >
@@ -272,15 +271,15 @@ const EnhancedCTAButtons = () => {
272271 < motion . div
273272 whileHover = { IS_CFP_OPEN ? { scale : 1.05 } : { } }
274273 whileTap = { IS_CFP_OPEN ? { scale : 0.95 } : { } }
275- className = { `w-full sm:w-auto ${ ! IS_CFP_OPEN ? 'cursor-not-allowed opacity-80' : '' } ` }
274+ className = { `flex-1 min-w-0 sm:min-w-[10rem] sm:max-w-[14rem] ${ ! IS_CFP_OPEN ? 'cursor-not-allowed opacity-80' : '' } ` }
276275 >
277276 { IS_CFP_OPEN ? (
278277 < a
279278 href = "https://forms.zohopublic.eu/overnet/form/CFPServerlessDays1310/formperma/PxdFEPzD1aumi1bdUp2dJrzqOhd3uxRpGpM_0A-XX-g"
280279 target = "_blank"
281280 className = "group block w-full"
282281 >
283- < SpeakerButtonContent isOpen = { true } />
282+ < SpeakerButtonContent isOpen = { true } />
284283 </ a >
285284 ) : (
286285 < div className = "block w-full pointer-events-none" >
@@ -293,7 +292,7 @@ const EnhancedCTAButtons = () => {
293292 < motion . div
294293 whileHover = { IS_SPONSOR_OPEN ? { scale : 1.05 } : { } }
295294 whileTap = { IS_SPONSOR_OPEN ? { scale : 0.95 } : { } }
296- className = { `w-full sm:w-auto ${ ! IS_SPONSOR_OPEN ? 'cursor-not-allowed opacity-80' : '' } ` }
295+ className = { `flex-1 min-w-0 sm:min-w-[10rem] sm:max-w-[14rem] ${ ! IS_SPONSOR_OPEN ? 'cursor-not-allowed opacity-80' : '' } ` }
297296 >
298297 { IS_SPONSOR_OPEN ? (
299298 < a
@@ -309,7 +308,6 @@ const EnhancedCTAButtons = () => {
309308 </ div >
310309 ) }
311310 </ motion . div >
312-
313311 </ div >
314312 ) ;
315313} ;
@@ -321,22 +319,33 @@ const EnhancedCTAButtons = () => {
321319const TicketButtonContent = ( { isOpen } : { isOpen : boolean } ) => {
322320 if ( isOpen ) {
323321 return (
324- < button className = "relative overflow-hidden w-full sm:w-auto px-8 sm :px-10 py-4 sm:py-5 bg-gradient-to-r from-white via-pink-50 to-white text-purple-900 font-black text-lg sm:text-xl rounded-2xl border-4 border-purple-200 shadow-2xl hover:shadow-purple-500/50 transition-all duration-300 ease-in-out group-hover:border-purple-300 cursor-pointer" >
322+ < button className = "relative overflow-hidden w-full px-6 sm: px-8 lg :px-10 py-3 sm:py-4 lg:py- 5 bg-gradient-to-r from-white via-pink-50 to-white text-purple-900 font-black text-base sm:text-lg lg :text-xl rounded-2xl border-4 border-purple-200 shadow-2xl hover:shadow-purple-500/50 transition-all duration-300 ease-in-out group-hover:border-purple-300 cursor-pointer" >
325323 < span className = "absolute inset-0 bg-gradient-to-r from-purple-100 via-pink-100 to-purple-100 opacity-0 group-hover:opacity-100 transition-opacity duration-300" > </ span >
326324 < span className = "relative flex items-center justify-center gap-3" >
327- < motion . span animate = { { rotate : [ 0 , 10 , - 10 , 0 ] } } transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' } } >
325+ < motion . span
326+ animate = { { rotate : [ 0 , 10 , - 10 , 0 ] } }
327+ transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' } }
328+ >
328329 🎫
329330 </ motion . span >
330331 < span > Get Your Ticket!</ span >
331- < motion . span animate = { { scale : [ 1 , 1.2 , 1 ] } } transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' , delay : 0.5 } } >
332+ < motion . span
333+ animate = { { scale : [ 1 , 1.2 , 1 ] } }
334+ transition = { {
335+ duration : 2 ,
336+ repeat : Infinity ,
337+ ease : 'easeInOut' ,
338+ delay : 0.5 ,
339+ } }
340+ >
332341 ✨
333342 </ motion . span >
334343 </ span >
335344 </ button >
336345 ) ;
337346 }
338347 return (
339- < button className = "relative overflow-hidden w-full sm:w-auto px-8 sm :px-10 py-4 sm:py-5 bg-slate-100 text-slate-400 font-bold text-lg sm:text-xl rounded-2xl border-4 border-slate-200 shadow-none cursor-not-allowed grayscale" >
348+ < button className = "relative overflow-hidden w-full px-6 sm: px-8 lg :px-10 py-3 sm:py-4 lg:py- 5 bg-slate-100 text-slate-400 font-bold text-base sm:text-lg lg :text-xl rounded-2xl border-4 border-slate-200 shadow-none cursor-not-allowed grayscale" >
340349 < span className = "relative flex items-center justify-center gap-3" >
341350 < span > 🎫</ span >
342351 < span > Tickets coming Soon</ span >
@@ -350,14 +359,25 @@ const SpeakerButtonContent = ({ isOpen }: { isOpen: boolean }) => {
350359 if ( isOpen ) {
351360 // Active: Vibrant Orchid (Pink/Purple)
352361 return (
353- < button className = "relative overflow-hidden w-full sm:w-auto px-8 sm :px-10 py-4 sm:py-5 bg-gradient-to-r from-purple-500 via-pink-500 to-purple-500 text-white font-bold text-lg sm:text-xl rounded-2xl shadow-xl hover:shadow-pink-500/50 transition-all duration-300 ease-in-out border-2 border-purple-300 group-hover:border-pink-300 cursor-pointer" >
362+ < button className = "relative overflow-hidden w-full px-6 sm: px-8 lg :px-10 py-3 sm:py-4 lg:py- 5 bg-gradient-to-r from-purple-500 via-pink-500 to-purple-500 text-white font-bold text-base sm:text-lg lg :text-xl rounded-2xl shadow-xl hover:shadow-pink-500/50 transition-all duration-300 ease-in-out border-2 border-purple-300 group-hover:border-pink-300 cursor-pointer" >
354363 < span className = "absolute inset-0 bg-gradient-to-r from-pink-500 via-purple-500 to-pink-500 opacity-0 group-hover:opacity-100 transition-opacity duration-300" > </ span >
355364 < span className = "relative flex items-center justify-center gap-3" >
356- < motion . span animate = { { rotate : [ 0 , 10 , - 10 , 0 ] } } transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' } } >
365+ < motion . span
366+ animate = { { rotate : [ 0 , 10 , - 10 , 0 ] } }
367+ transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' } }
368+ >
357369 📢
358370 </ motion . span >
359371 < span > Become a Speaker</ span >
360- < motion . span animate = { { y : [ 0 , - 3 , 0 ] } } transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' , delay : 1 } } >
372+ < motion . span
373+ animate = { { y : [ 0 , - 3 , 0 ] } }
374+ transition = { {
375+ duration : 2 ,
376+ repeat : Infinity ,
377+ ease : 'easeInOut' ,
378+ delay : 1 ,
379+ } }
380+ >
361381 🗣️
362382 </ motion . span >
363383 </ span >
@@ -366,7 +386,7 @@ const SpeakerButtonContent = ({ isOpen }: { isOpen: boolean }) => {
366386 }
367387 // Disabled
368388 return (
369- < button className = "relative overflow-hidden w-full sm:w-auto px-8 sm :px-10 py-4 sm:py-5 bg-slate-100 text-slate-400 font-bold text-lg sm:text-xl rounded-2xl border-2 border-slate-200 shadow-none cursor-not-allowed grayscale" >
389+ < button className = "relative overflow-hidden w-full px-6 sm: px-8 lg :px-10 py-3 sm:py-4 lg:py- 5 bg-slate-100 text-slate-400 font-bold text-base sm:text-lg lg :text-xl rounded-2xl border-2 border-slate-200 shadow-none cursor-not-allowed grayscale" >
370390 < span className = "relative flex items-center justify-center gap-3" >
371391 < span > 📢</ span >
372392 < span > CFP Coming Soon</ span >
@@ -380,14 +400,25 @@ const SponsorButtonContent = ({ isOpen }: { isOpen: boolean }) => {
380400 if ( isOpen ) {
381401 // Active: Purple/Blue
382402 return (
383- < button className = "relative overflow-hidden w-full sm:w-auto px-8 sm :px-10 py-4 sm:py-5 bg-gradient-to-r from-purple-600 via-blue-600 to-purple-600 text-white font-bold text-lg sm:text-xl rounded-2xl shadow-xl hover:shadow-blue-500/50 transition-all duration-300 ease-in-out border-2 border-purple-400 group-hover:border-blue-400 cursor-pointer" >
403+ < button className = "relative overflow-hidden w-full px-6 sm: px-8 lg :px-10 py-3 sm:py-4 lg:py- 5 bg-gradient-to-r from-purple-600 via-blue-600 to-purple-600 text-white font-bold text-base sm:text-lg lg :text-xl rounded-2xl shadow-xl hover:shadow-blue-500/50 transition-all duration-300 ease-in-out border-2 border-purple-400 group-hover:border-blue-400 cursor-pointer" >
384404 < span className = "absolute inset-0 bg-gradient-to-r from-blue-600 via-purple-600 to-blue-600 opacity-0 group-hover:opacity-100 transition-opacity duration-300" > </ span >
385405 < span className = "relative flex items-center justify-center gap-3" >
386- < motion . span animate = { { rotate : [ 0 , 360 ] } } transition = { { duration : 3 , repeat : Infinity , ease : 'linear' } } >
406+ < motion . span
407+ animate = { { rotate : [ 0 , 360 ] } }
408+ transition = { { duration : 3 , repeat : Infinity , ease : 'linear' } }
409+ >
387410 🤝
388411 </ motion . span >
389412 < span > Become a Sponsor</ span >
390- < motion . span animate = { { y : [ 0 , - 3 , 0 ] } } transition = { { duration : 2 , repeat : Infinity , ease : 'easeInOut' , delay : 1 } } >
413+ < motion . span
414+ animate = { { y : [ 0 , - 3 , 0 ] } }
415+ transition = { {
416+ duration : 2 ,
417+ repeat : Infinity ,
418+ ease : 'easeInOut' ,
419+ delay : 1 ,
420+ } }
421+ >
391422 🚀
392423 </ motion . span >
393424 </ span >
@@ -396,7 +427,7 @@ const SponsorButtonContent = ({ isOpen }: { isOpen: boolean }) => {
396427 }
397428 // Disabled
398429 return (
399- < button className = "relative overflow-hidden w-full sm:w-auto px-8 sm :px-10 py-4 sm:py-5 bg-slate-100 text-slate-400 font-bold text-lg sm:text-xl rounded-2xl border-2 border-slate-200 shadow-none cursor-not-allowed grayscale" >
430+ < button className = "relative overflow-hidden w-full px-6 sm: px-8 lg :px-10 py-3 sm:py-4 lg:py- 5 bg-slate-100 text-slate-400 font-bold text-base sm:text-lg lg :text-xl rounded-2xl border-2 border-slate-200 shadow-none cursor-not-allowed grayscale" >
400431 < span className = "relative flex items-center justify-center gap-3" >
401432 < span > 🤝</ span >
402433 < span > Become Sponsor Soon</ span >
0 commit comments