)}
{/* ── 7. Bottom CTA ── */}
-
+
{tp("joinNow", { hotelName })}
@@ -421,30 +453,43 @@ export default async function Home() {
boxShadow: "0 4px 24px color-mix(in srgb, var(--color-primary) 35%, transparent)",
}}
>
-
+
{tp("register")}
{/* ── 8. Recent photos (compact) ── */}
{recentPhotos.length > 0 && (
-
-
- {tp("recentPhotos")}
-
-
- {recentPhotos.slice(0, 4).map((p) => (
-
-
-
- ))}
+
+
+
+
+ {tp("recentPhotos")}
+
+
+
+
+ {recentPhotos.slice(0, 4).map((p) => (
+
+
+
+ ))}
+
)}
diff --git a/src/components/mobile-nav.tsx b/src/components/mobile-nav.tsx
index de76d8e1..dd6a2fe9 100644
--- a/src/components/mobile-nav.tsx
+++ b/src/components/mobile-nav.tsx
@@ -1,10 +1,10 @@
"use client";
import { AnimatePresence, motion } from "framer-motion";
-import Image from "next/image";
import { type ReactNode, useRef, useState } from "react";
import { FALLBACK_HOTEL_NAME } from "@/lib/brand";
import { mobileMenuVariants } from "@/lib/motion";
+import { HabboHome } from "@/components/shared/habbo-icons";
interface MobileNavProps {
children: ReactNode;
@@ -88,13 +88,7 @@ export function MobileNav({
"color-mix(in srgb, var(--color-primary) 12%, transparent)",
}}
>
-
+
{icon ? (
-
+ {icon}
) : null}
{label}
-
- {t("home")}
+
+ {t("home")}
@@ -68,7 +72,7 @@ export async function Navigation({ session }: { session: Session | null }) {
}
>
{t("articles")}
@@ -95,7 +99,7 @@ export async function Navigation({ session }: { session: Session | null }) {
}
>
{t("shop")}
@@ -109,30 +113,18 @@ export async function Navigation({ session }: { session: Session | null }) {
-
- {t("leaderboards")}
+
+ {t("leaderboards")}
-
- {t("radio")}
+
+ {t("radio")}
}
>
{t("helpCenter")}
@@ -157,51 +149,27 @@ export async function Navigation({ session }: { session: Session | null }) {
{session?.user ? (
<>
-
- {t("friends")}
+
+ {t("friends")}
-
- {t("messages")}
+
+ {t("messages")}
>
) : null}
{showMod ? (
-
- {t("mod")}
+
+ {t("mod")}
) : null}
{showAdmin ? (
-
- {t("admin")}
+
+ {t("admin")}
) : null}
@@ -213,19 +181,13 @@ export async function Navigation({ session }: { session: Session | null }) {
brandLabel={brandLabel}
>
-
- {t("home")}
+
+
{t("home")}
}
>
{t("articles")}
@@ -252,7 +214,7 @@ export async function Navigation({ session }: { session: Session | null }) {
}
>
{t("shop")}
@@ -266,30 +228,18 @@ export async function Navigation({ session }: { session: Session | null }) {
-
- {t("leaderboards")}
+
+
{t("leaderboards")}
-
- {t("radio")}
+
+
{t("radio")}
}
>
{t("helpCenter")}
@@ -314,51 +264,27 @@ export async function Navigation({ session }: { session: Session | null }) {
{session?.user ? (
<>
-
- {t("friends")}
+
+
{t("friends")}
-
- {t("messages")}
+
+
{t("messages")}
>
) : null}
{showMod ? (
-
- {t("mod")}
+
+
{t("mod")}
) : null}
{showAdmin ? (
-
- {t("admin")}
+
+
{t("admin")}
) : null}
@@ -381,12 +307,7 @@ export async function Navigation({ session }: { session: Session | null }) {
className="ml-auto flex md:hidden items-center gap-2 shrink-0"
aria-label="Home"
>
-
+
& { size?: number };
+
+function IconSvg({
+ children,
+ size = 24,
+ viewBox = "0 0 24 24",
+ ...props
+}: IconProps & { viewBox?: string }) {
+ return (
+
+ );
+}
+
+export function HabboHome({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboUser({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+ );
+}
+
+export function HabboCatalog({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboStar({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboCommunity({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboGames({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboEnter({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+ );
+}
+
+export function HabboNews({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboOnline({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboCamera({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboChat({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboClock({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboHeart({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboArrowRight({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+ );
+}
+
+export function HabboCog({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboFurni({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboDiamond({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboCredits({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+ );
+}
+
+export function HabboDuckets({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export function HabboRank({ size, ...props }: IconProps) {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+const iconMap = {
+ home: HabboHome,
+ user: HabboUser,
+ catalog: HabboCatalog,
+ star: HabboStar,
+ community: HabboCommunity,
+ games: HabboGames,
+ enter: HabboEnter,
+ news: HabboNews,
+ online: HabboOnline,
+ camera: HabboCamera,
+ chat: HabboChat,
+ clock: HabboClock,
+ heart: HabboHeart,
+ arrowRight: HabboArrowRight,
+ cog: HabboCog,
+ furni: HabboFurni,
+ diamond: HabboDiamond,
+ credits: HabboCredits,
+ duckets: HabboDuckets,
+ rank: HabboRank,
+};
+
+export type HabboIconName = keyof typeof iconMap;
+
+export function HabboIcon({ name, size, ...props }: IconProps & { name: HabboIconName }) {
+ const Icon = iconMap[name];
+ return ;
+}