@@ -9,9 +9,11 @@ import {
99 PageActions ,
1010} from "../../../components/index" ;
1111import { useTranslations } from "next-intl" ;
12+ import { useState } from "react" ;
1213
1314export default function MaintainerLadderPage ( ) {
1415 const t = useTranslations ( "ladderPage" ) ;
16+ const [ hoveredLevel , setHoveredLevel ] = useState < number | null > ( null ) ;
1517
1618 const levels = [
1719 {
@@ -259,185 +261,227 @@ export default function MaintainerLadderPage() {
259261 < section className = "py-8 sm:py-12 md:py-16 lg:py-20" >
260262 < div className = "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative" >
261263 { /* Mobile Layout */ }
262- < div className = "lg:hidden" >
264+ < div className = "lg:hidden space-y-6 " >
263265 { levels . map ( ( level , index ) => (
264- < div key = { level . id } className = "mb-4" >
265- { /* Level Card */ }
266- < div className = "bg-gray-800/40 backdrop-blur-md rounded-lg p-6 border border-white/10 relative" >
267- { /* Level Number */ }
268- < div className = "absolute -top-6 left-1/2 transform -translate-x-1/2" >
266+ < div
267+ key = { level . id }
268+ className = "relative group"
269+ onMouseEnter = { ( ) => setHoveredLevel ( level . id ) }
270+ onMouseLeave = { ( ) => setHoveredLevel ( null ) }
271+ >
272+ { /* Glowing border effect */ }
273+ < div
274+ className = { `absolute -inset-[2px] bg-gradient-to-r ${ level . gradient } rounded-xl opacity-0 group-hover:opacity-70 blur-sm transition-opacity duration-500` }
275+ > </ div >
276+
277+ < div className = "relative bg-gradient-to-br from-gray-900/90 to-gray-800/90 backdrop-blur-xl rounded-xl p-5 border border-white/5 overflow-hidden" >
278+ { /* Animated background particles */ }
279+ < div className = "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-700" >
280+ < div
281+ className = { `absolute top-0 left-0 w-32 h-32 bg-gradient-to-br ${ level . gradient } rounded-full blur-3xl opacity-20` }
282+ > </ div >
283+ < div
284+ className = { `absolute bottom-0 right-0 w-32 h-32 bg-gradient-to-tl ${ level . gradient } rounded-full blur-3xl opacity-20` }
285+ > </ div >
286+ </ div >
287+
288+ { /* Level badge */ }
289+ < div className = "absolute -top-3 -right-3" >
269290 < div
270- className = { `w-12 h-12 bg-gradient-to-br ${ level . gradient } rounded-full flex items-center justify-center shadow-lg` }
291+ className = { `w-10 h-10 bg-gradient-to-br ${ level . gradient } rounded-full flex items-center justify-center shadow-lg shadow-black/50 group-hover:scale-110 transition-transform duration-300 ` }
271292 >
272- < span className = "text-white font-bold text-lg " >
293+ < span className = "text-white font-bold text-sm " >
273294 { level . id }
274295 </ span >
275296 </ div >
276297 </ div >
277298
278- < div className = "pt-4" >
279- < div className = "text-center mb-4" >
280- < div
281- className = { `inline-flex items-center justify-center w-16 h-16 bg-gradient-to-br ${ level . gradient } rounded-full mb-3` }
282- >
283- < div className = "text-white" > { level . icon } </ div >
284- </ div >
285- < h3 className = "text-xl font-bold text-white mb-2" >
299+ < div className = "relative flex items-start gap-4" >
300+ { /* Icon */ }
301+ < div
302+ className = { `flex-shrink-0 w-12 h-12 bg-gradient-to-br ${ level . gradient } rounded-lg flex items-center justify-center group-hover:rotate-6 transition-transform duration-300` }
303+ >
304+ < div className = "text-white scale-90" > { level . icon } </ div >
305+ </ div >
306+
307+ { /* Content */ }
308+ < div className = "flex-1 min-w-0" >
309+ < h3 className = "text-lg font-bold text-white mb-1 group-hover:text-transparent group-hover:bg-clip-text group-hover:bg-gradient-to-r group-hover:from-white group-hover:to-gray-300 transition-all duration-300" >
286310 { level . title }
287311 </ h3 >
288312 { level . timeframe && (
289- < div className = "inline-block bg-blue-900/50 rounded-full px-3 py-1 text-xs text-blue-200 mb-2" >
313+ < div className = "inline-block bg-blue-500/20 rounded-full px-2 py-0.5 text-xs text-blue-300 mb-2" >
290314 { level . timeframe }
291315 </ div >
292316 ) }
293- < p className = "text-gray-300 text-sm mb-4 " >
317+ < p className = "text-gray-400 text-sm mb-3 line-clamp-2 " >
294318 { level . description }
295319 </ p >
296- </ div >
297320
298- < div className = "space-y-2" >
299- < h4 className = "text-sm font-semibold text-white mb-2" >
300- { t ( "requirementsLabel" ) }
301- </ h4 >
302- < ul className = "space-y-1" >
303- { level . requirements . map ( ( req , reqIndex ) => (
304- < li
305- key = { reqIndex }
306- className = "text-xs text-gray-300 flex items-start"
307- >
308- < span className = "text-green-400 mr-2 mt-1" >
309- •
310- </ span >
311- < span > { req } </ span >
312- </ li >
321+ { /* Compact requirements */ }
322+ < div className = "space-y-1" >
323+ { level . requirements . slice ( 0 , 2 ) . map ( ( req , reqIndex ) => (
324+ < div key = { reqIndex } className = "flex items-start gap-2" >
325+ < div
326+ className = { `w-1 h-1 rounded-full bg-gradient-to-r ${ level . gradient } mt-1.5 flex-shrink-0` }
327+ > </ div >
328+ < p className = "text-xs text-gray-400 line-clamp-1" >
329+ { req }
330+ </ p >
331+ </ div >
313332 ) ) }
314- </ ul >
315- </ div >
316-
317- { level . goodStanding && (
318- < div className = "mt-4 p-3 bg-blue-900/20 border border-blue-500/30 rounded-lg" >
319- < h4 className = "text-sm font-semibold text-blue-300 mb-2" >
320- { t ( "goodStandingLabel" ) }
321- </ h4 >
322- < p className = "text-xs text-gray-300 leading-relaxed" >
323- { level . goodStanding }
324- </ p >
333+ { level . requirements . length > 2 && (
334+ < p className = "text-xs text-gray-500 italic" >
335+ +{ level . requirements . length - 2 } more
336+ </ p >
337+ ) }
325338 </ div >
326- ) }
339+ </ div >
340+ </ div >
327341
328- { index < levels . length - 1 && (
329- < div className = "text-center mt-4" >
330- < div className = "text-xs text-gray-400" >
331- { t ( "nextLevelLabel" ) }
332- </ div >
333- < div className = "text-sm font-semibold text-blue-400" >
342+ { /* Next level indicator */ }
343+ { index < levels . length - 1 && (
344+ < div className = "mt-3 pt-3 border-t border-white/5" >
345+ < div className = "flex items-center justify-between" >
346+ < span className = "text-xs text-gray-500" > Next:</ span >
347+ < span
348+ className = { `text-xs font-semibold bg-gradient-to-r ${ level . gradient } bg-clip-text text-transparent` }
349+ >
334350 { level . nextLevel }
335- </ div >
351+ </ span >
336352 </ div >
337- ) }
338- </ div >
353+ </ div >
354+ ) }
339355 </ div >
340-
341- { /* Connector */ }
342- { index < levels . length - 1 && (
343- < div className = "flex justify-center mt-2" >
344- < div className = "w-0.5 h-6 bg-gradient-to-b from-blue-500 to-purple-500" > </ div >
345- </ div >
346- ) }
347356 </ div >
348357 ) ) }
349358 </ div >
350359
351360 { /* Desktop Layout */ }
352361 < div className = "hidden lg:block" >
353- { /* Central Ladder Line */ }
354- < div className = "absolute left-1/2 top-0 bottom-0 w-1 bg-gradient-to-b from-blue-500 via-purple-500 to-red-500 transform -translate-x-1/2 z-5" > </ div >
362+ { /* Central Ladder Line with pulse effect */ }
363+ < div className = "absolute left-1/2 top-0 bottom-0 w-1 transform -translate-x-1/2 z-5" >
364+ < div className = "absolute inset-0 bg-gradient-to-b from-blue-500 via-purple-500 to-red-500" > </ div >
365+ < div className = "absolute inset-0 bg-gradient-to-b from-blue-400 via-purple-400 to-red-400 animate-pulse opacity-50" > </ div >
366+ </ div >
355367
356368 { levels . map ( ( level , index ) => (
357- < div key = { level . id } className = "relative z-20" >
369+ < div
370+ key = { level . id }
371+ className = "relative z-20 mb-8"
372+ onMouseEnter = { ( ) => setHoveredLevel ( level . id ) }
373+ onMouseLeave = { ( ) => setHoveredLevel ( null ) }
374+ >
358375 < div
359- className = { `flex items-center ${ index % 2 === 0 ? "flex-row" : "flex-row-reverse" } ` }
376+ className = { `flex items-center ${
377+ index % 2 === 0 ? "flex-row" : "flex-row-reverse"
378+ } `}
360379 >
361380 { /* Content Side */ }
362381 < div
363- className = { `w-5/12 ${ index % 2 === 0 ? "pr-12" : "pl-12" } ` }
382+ className = { `w-5/12 ${
383+ index % 2 === 0 ? "pr-12" : "pl-12"
384+ } `}
364385 >
365- < div className = "bg-gray-800/40 backdrop-blur-md rounded-lg p-8 border border-white/10 transition-all duration-300 hover:bg-gray-800/50 hover:border-white/20 hover:scale-105" >
366- < div className = "flex items-center mb-4" >
367- < div
368- className = { `w-12 h-12 bg-gradient-to-br ${ level . gradient } rounded-full flex items-center justify-center mr-4` }
369- >
370- < div className = "text-white" > { level . icon } </ div >
371- </ div >
372- < div >
373- < h3 className = "text-2xl font-bold text-white" >
374- { level . title }
375- </ h3 >
376- { level . timeframe && (
377- < div className = "inline-block bg-blue-900/50 rounded-full px-3 py-1 text-xs text-blue-200 mt-1" >
378- { level . timeframe }
379- </ div >
380- ) }
381- </ div >
382- </ div >
386+ < div className = "relative group" >
387+ { /* Glowing border */ }
388+ < div
389+ className = { `absolute -inset-[2px] bg-gradient-to-r ${ level . gradient } rounded-xl opacity-0 group-hover:opacity-70 blur transition-opacity duration-500` }
390+ > </ div >
383391
384- < p className = "text-gray-300 mb-6 leading-relaxed" >
385- { level . description }
386- </ p >
392+ < div className = "relative bg-gradient-to-br from-gray-900/90 to-gray-800/90 backdrop-blur-xl rounded-xl p-6 border border-white/5 overflow-hidden" >
393+ { /* Animated corner accents */ }
394+ < div
395+ className = { `absolute top-0 ${
396+ index % 2 === 0 ? "right-0" : "left-0"
397+ } w-24 h-24 bg-gradient-to-br ${ level . gradient } rounded-full blur-3xl opacity-0 group-hover:opacity-20 transition-opacity duration-700`}
398+ > </ div >
387399
388- < div className = "space-y-3" >
389- < h4 className = "text-lg font-semibold text-white" >
390- { t ( "requirementsLabel" ) }
391- </ h4 >
392- < ul className = "space-y-2" >
393- { level . requirements . map ( ( req , reqIndex ) => (
394- < li
395- key = { reqIndex }
396- className = "text-gray-300 flex items-start"
400+ < div className = "relative" >
401+ { /* Header */ }
402+ < div className = "flex items-center gap-3 mb-3" >
403+ < div
404+ className = { `w-10 h-10 bg-gradient-to-br ${ level . gradient } rounded-lg flex items-center justify-center group-hover:rotate-12 transition-transform duration-300` }
397405 >
398- < span className = "text-green-400 mr-3 mt-1 text-lg" >
399- •
400- </ span >
401- < span className = "text-sm leading-relaxed" >
402- { req }
403- </ span >
404- </ li >
405- ) ) }
406- </ ul >
407- </ div >
406+ < div className = "text-white scale-90" >
407+ { level . icon }
408+ </ div >
409+ </ div >
410+ < div className = "flex-1" >
411+ < h3 className = "text-xl font-bold text-white group-hover:text-transparent group-hover:bg-clip-text group-hover:bg-gradient-to-r group-hover:from-white group-hover:to-gray-300 transition-all duration-300" >
412+ { level . title }
413+ </ h3 >
414+ { level . timeframe && (
415+ < div className = "inline-block bg-blue-500/20 rounded-full px-2 py-0.5 text-xs text-blue-300 mt-1" >
416+ { level . timeframe }
417+ </ div >
418+ ) }
419+ </ div >
420+ </ div >
408421
409- { level . goodStanding && (
410- < div className = "mt-6 p-4 bg-blue-900/20 border border-blue-500/30 rounded-lg" >
411- < h4 className = "text-base font-semibold text-blue-300 mb-2" >
412- { t ( "goodStandingLabel" ) }
413- </ h4 >
414- < p className = "text-sm text-gray-300 leading-relaxed" >
415- { level . goodStanding }
422+ { /* Description */ }
423+ < p className = "text-gray-400 text-sm mb-4 leading-relaxed" >
424+ { level . description }
416425 </ p >
417- </ div >
418- ) }
419426
420- { index < levels . length - 1 && (
421- < div className = "mt-6 pt-4 border-t border-gray-700/50" >
422- < div className = "text-sm text-gray-400" >
423- { t ( "nextLevelLabel" ) }
424- </ div >
425- < div className = "text-lg font-semibold text-blue-400" >
426- { level . nextLevel }
427+ { /* Requirements */ }
428+ < div className = "space-y-2 mb-4" >
429+ { level . requirements . map ( ( req , reqIndex ) => (
430+ < div
431+ key = { reqIndex }
432+ className = "flex items-start gap-2 group/item"
433+ >
434+ < div
435+ className = { `w-1.5 h-1.5 rounded-full bg-gradient-to-r ${ level . gradient } mt-1.5 flex-shrink-0 group-hover/item:scale-150 transition-transform duration-200` }
436+ > </ div >
437+ < p className = "text-xs text-gray-400 leading-relaxed" >
438+ { req }
439+ </ p >
440+ </ div >
441+ ) ) }
427442 </ div >
443+
444+ { /* Good Standing */ }
445+ { level . goodStanding && (
446+ < div className = "p-3 bg-gradient-to-br from-blue-500/10 to-purple-500/10 border border-blue-500/20 rounded-lg" >
447+ < p className = "text-xs text-gray-300 leading-relaxed" >
448+ { level . goodStanding }
449+ </ p >
450+ </ div >
451+ ) }
452+
453+ { /* Next Level */ }
454+ { index < levels . length - 1 && (
455+ < div className = "mt-4 pt-3 border-t border-white/5 flex items-center justify-between" >
456+ < span className = "text-xs text-gray-500" > Next Level:</ span >
457+ < span
458+ className = { `text-sm font-semibold bg-gradient-to-r ${ level . gradient } bg-clip-text text-transparent` }
459+ >
460+ { level . nextLevel }
461+ </ span >
462+ </ div >
463+ ) }
428464 </ div >
429- ) }
465+ </ div >
430466 </ div >
431467 </ div >
432468
433469 { /* Center Circle */ }
434470 < div className = "w-2/12 flex justify-center" >
435471 < div
436- className = { `w-20 h-20 bg-gradient-to-br ${ level . gradient } rounded-full flex items-center justify-center shadow-2xl z-30 transition-all duration-300 hover:scale-110` }
472+ className = { `relative w-16 h-16 bg-gradient-to-br ${ level . gradient } rounded-full flex items-center justify-center shadow-2xl z-30 transition-all duration-300 ${
473+ hoveredLevel === level . id ? "scale-125" : "scale-100"
474+ } `}
437475 >
438- < span className = "text-white font-bold text-2xl " >
476+ < span className = "text-white font-bold text-xl " >
439477 { level . id }
440478 </ span >
479+ { /* Ripple effect */ }
480+ { hoveredLevel === level . id && (
481+ < div
482+ className = { `absolute inset-0 rounded-full bg-gradient-to-br ${ level . gradient } animate-ping opacity-75` }
483+ > </ div >
484+ ) }
441485 </ div >
442486 </ div >
443487
0 commit comments