@@ -71,24 +71,55 @@ const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
7171
7272 <div class =" grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" >
7373 { CALLS_2026 .map ((call ) => (
74- <a
75- href = { call .href }
76- target = " _blank"
77- rel = " noopener noreferrer"
78- class = " group border border-gray-100 bg-white hover:border-green-200 hover:shadow-lg p-7 rounded-2xl transition-all duration-300 flex flex-col"
79- >
80- <div class = " w-11 h-11 bg-green-50 border border-green-100 rounded-xl mb-5 flex items-center justify-center text-xl group-hover:bg-green-500 group-hover:scale-110 transition-all duration-300" >
81- { call .emoji }
74+ <div class = " group border border-gray-100 bg-white hover:border-green-200 hover:shadow-lg p-7 rounded-2xl transition-all duration-300 flex flex-col" >
75+ <!-- Header: Icon + Badge -->
76+ <div class = " flex items-center justify-between mb-6" >
77+ <div class = " w-11 h-11 bg-green-50 border border-green-100 rounded-xl flex items-center justify-center text-xl group-hover:bg-green-500 group-hover:text-white group-hover:scale-110 transition-all duration-300" >
78+ { call .emoji }
79+ </div >
80+ <span class = { ` text-xs px-2.5 py-1 rounded-full font-bold uppercase tracking-wide border ${
81+ call .badge === " Open"
82+ ? " bg-green-50 text-green-700 border-green-100"
83+ : " bg-red-50 text-red-700 border-red-100"
84+ } ` } >
85+ { call .badge }
86+ </span >
87+ </div >
88+
89+ <!-- Title -->
90+ <h3 class = " text-lg font-bold text-gray-900 mb-3" >{ call .title } </h3 >
91+
92+ <!-- Description -->
93+ <p class = " text-gray-500 text-sm leading-relaxed flex-1 mb-4" >{ call .description } </p >
94+
95+ <!-- Deadline -->
96+ <div class = " text-sm text-gray-600 mb-6 pb-6 border-b border-gray-100" >
97+ <span class = " font-semibold" >Deadline:</span > { call .deadline }
8298 </div >
83- <h3 class = " text-lg font-bold text-gray-900 mb-2" >{ call .title } </h3 >
84- <p class = " text-gray-500 text-sm leading-relaxed flex-1" >{ call .description } </p >
85- <div class = " mt-5 flex items-center text-sm font-semibold text-green-600 group-hover:text-green-700" >
99+
100+ <!-- CTA -->
101+ {
102+ call .enable ? <a
103+ href = { call .href }
104+ target = " _blank"
105+ rel = " noopener noreferrer"
106+ class = " inline-flex items-center justify-center gap-2 bg-green-500 hover:bg-green-600 text-white font-semibold py-3 px-4 rounded-lg transition-all duration-300 group-hover:shadow-md"
107+ >
86108 Apply Now
87- <svg class = " w-4 h-4 ml-1 group-hover:translate-x-1 transition-transform" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" >
109+ <svg class = " w-4 h-4 group-hover:translate-x-1 transition-transform" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" >
88110 <path stroke-linecap = " round" stroke-linejoin = " round" stroke-width = " 2" d = " M13 7l5 5m0 0l-5 5m5-5H6" />
89111 </svg >
90- </div >
91- </a >
112+ </a > : <button
113+ class = " inline-flex items-center justify-center gap-2 bg-green-500 hover:bg-green-600 text-white font-semibold py-3 px-4 rounded-lg transition-all duration-300 group-hover:shadow-md disabled:opacity-50 disabled:cursor-not-allowed"
114+ disabled
115+ >
116+ Apply Now
117+ <svg class = " w-4 h-4 group-hover:translate-x-1 transition-transform" fill = " none" stroke = " currentColor" viewBox = " 0 0 24 24" >
118+ <path stroke-linecap = " round" stroke-linejoin = " round" stroke-width = " 2" d = " M13 7l5 5m0 0l-5 5m5-5H6" />
119+ </svg >
120+ </button >
121+ }
122+ </div >
92123 ))}
93124 </div >
94125
@@ -178,7 +209,7 @@ const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
178209 ))}
179210 </div >
180211 </div >
181-
212+
182213 </div >
183214 </section >
184215
@@ -393,13 +424,32 @@ const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
393424
394425 <div class =" flex flex-col gap-3 mb-auto" >
395426 { TICKETS .slice (0 , 3 ).map ((t ) => (
396- <div class = " flex justify-between items-center p-3 bg-gray-50 rounded-xl border border-gray-100" >
427+ <div class = " p-3 bg-gray-50 rounded-xl border border-gray-100 flex flex-col gap-4" >
428+
429+ <div class = " flex justify-between items-center" >
397430 <div >
398431 <div class = " font-semibold text-gray-900 text-sm" >{ t .name } </div >
399432 <div class = " text-xs text-gray-400 mt-0.5" >{ t .description ?.slice (0 , 55 )} …</div >
400433 </div >
401434 <div class = " font-bold text-green-700 text-sm shrink-0 ml-2" >{ t .price } </div >
402435 </div >
436+ { t .available ? (
437+ <a
438+ href = { t .konfhubUrl }
439+ target = " _blank"
440+ rel = " noopener noreferrer"
441+ class = { ` block w-full px-6 py-2 rounded-full font-bold text-sm transition-all text-center ${t .popular ? " bg-gray-900 hover:bg-gray-800 text-white" : " border-2 border-gray-200 hover:border-gray-900 text-gray-700" } ` }
442+ >
443+ { t .linkText || " Coming Soon" }
444+ </a >
445+ ) : (
446+ <button
447+ class = { ` block w-full px-6 py-2 rounded-full font-bold text-sm transition-all ${t .popular ? " bg-gray-900 hover:bg-gray-800 text-white" : " border-2 border-gray-200 hover:border-gray-900 text-gray-700" } ` }
448+ >
449+ { t .linkText || " Coming Soon" }
450+ </button >
451+ )}
452+ </div >
403453 ))}
404454 </div >
405455 <a href =" /tickets" class =" mt-6 block text-center bg-green-500 hover:bg-green-400 text-white px-6 py-3 rounded-full font-bold text-sm transition-all glow-effect hover:scale-105" >
0 commit comments