diff --git a/src/app/[locale]/ladder/page.tsx b/src/app/[locale]/ladder/page.tsx index e3be8671..e211f089 100644 --- a/src/app/[locale]/ladder/page.tsx +++ b/src/app/[locale]/ladder/page.tsx @@ -9,9 +9,11 @@ import { PageActions, } from "../../../components/index"; import { useTranslations } from "next-intl"; +import { useState } from "react"; export default function MaintainerLadderPage() { const t = useTranslations("ladderPage"); + const [hoveredLevel, setHoveredLevel] = useState(null); const levels = [ { @@ -259,185 +261,227 @@ export default function MaintainerLadderPage() {
{/* Mobile Layout */} -
+
{levels.map((level, index) => ( -
- {/* Level Card */} -
- {/* Level Number */} -
+
setHoveredLevel(level.id)} + onMouseLeave={() => setHoveredLevel(null)} + > + {/* Glowing border effect */} +
+ +
+ {/* Animated background particles */} +
+
+
+
+ + {/* Level badge */} +
- + {level.id}
-
-
-
-
{level.icon}
-
-

+
+ {/* Icon */} +
+
{level.icon}
+
+ + {/* Content */} +
+

{level.title}

{level.timeframe && ( -
+
{level.timeframe}
)} -

+

{level.description}

-
-
-

- {t("requirementsLabel")} -

-
    - {level.requirements.map((req, reqIndex) => ( -
  • - - • - - {req} -
  • + {/* Compact requirements */} +
    + {level.requirements.slice(0, 2).map((req, reqIndex) => ( +
    +
    +

    + {req} +

    +
    ))} -
-
- - {level.goodStanding && ( -
-

- {t("goodStandingLabel")} -

-

- {level.goodStanding} -

+ {level.requirements.length > 2 && ( +

+ +{level.requirements.length - 2} more +

+ )}
- )} +
+
- {index < levels.length - 1 && ( -
-
- {t("nextLevelLabel")} -
-
+ {/* Next level indicator */} + {index < levels.length - 1 && ( +
+
+ Next: + {level.nextLevel} -
+
- )} -
+
+ )}

- - {/* Connector */} - {index < levels.length - 1 && ( -
-
-
- )}
))}
{/* Desktop Layout */}
- {/* Central Ladder Line */} -
+ {/* Central Ladder Line with pulse effect */} +
+
+
+
{levels.map((level, index) => ( -
+
setHoveredLevel(level.id)} + onMouseLeave={() => setHoveredLevel(null)} + >
{/* Content Side */}
-
-
-
-
{level.icon}
-
-
-

- {level.title} -

- {level.timeframe && ( -
- {level.timeframe} -
- )} -
-
+
+ {/* Glowing border */} +
-

- {level.description} -

+
+ {/* Animated corner accents */} +
-
-

- {t("requirementsLabel")} -

-
    - {level.requirements.map((req, reqIndex) => ( -
  • + {/* Header */} +
    +
    - - • - - - {req} - -
  • - ))} -
-
+
+ {level.icon} +
+
+
+

+ {level.title} +

+ {level.timeframe && ( +
+ {level.timeframe} +
+ )} +
+
- {level.goodStanding && ( -
-

- {t("goodStandingLabel")} -

-

- {level.goodStanding} + {/* Description */} +

+ {level.description}

-
- )} - {index < levels.length - 1 && ( -
-
- {t("nextLevelLabel")} -
-
- {level.nextLevel} + {/* Requirements */} +
+ {level.requirements.map((req, reqIndex) => ( +
+
+

+ {req} +

+
+ ))}
+ + {/* Good Standing */} + {level.goodStanding && ( +
+

+ {level.goodStanding} +

+
+ )} + + {/* Next Level */} + {index < levels.length - 1 && ( +
+ Next Level: + + {level.nextLevel} + +
+ )}
- )} +
{/* Center Circle */}
- + {level.id} + {/* Ripple effect */} + {hoveredLevel === level.id && ( +
+ )}