{/* logo */}
- {/* app switcher — orange-tinted, mono */}
-
-
- {/* inline links */}
-
- {APPS.map((a) => (
+
+
+ {/* mega-menu panel — content-aligned, spans the header width */}
+ {open && (
+
+
+ {COLUMNS.map((col, ci) => (
+
0
+ ? 'lg:border-l lg:border-[var(--rd-line)]'
+ : ''
+ }`}
+ >
+
+ {col.title}
+
+
+
+ ))}
+
+
+ {/* footer row */}
+
-
-
-
+ )}
)
}
diff --git a/constants/index.tsx b/constants/index.tsx
index 8a3271e..a83d850 100644
--- a/constants/index.tsx
+++ b/constants/index.tsx
@@ -5,6 +5,8 @@ const BASE_URL = 'https://hovanhoa.net'
const INSIGHT_URL = 'https://insight.hovanhoa.net'
const GALLERY_URL = 'https://gallery.hovanhoa.net'
const MUSIC_URL = 'https://music.hovanhoa.net'
+const STATUS_URL = 'https://status.hovanhoa.net'
+const INFO_URL = 'https://info.hovanhoa.net'
const TWITTER = '_hovanhoa_'
const LINKEDIN = 'hovanhoa'
const GITHUB = 'hovanhoa'
@@ -81,5 +83,7 @@ export {
BASE_URL,
INSIGHT_URL,
MUSIC_URL,
+ STATUS_URL,
+ INFO_URL,
ROLE,
}
diff --git a/package-lock.json b/package-lock.json
index 018a854..e465531 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,7 @@
"dependencies": {
"@headlessui/react": "^1.7.4",
"@heroicons/react": "^2.0.13",
+ "@remixicon/react": "^4.9.0",
"@tailwindcss/typography": "^0.5.10",
"@vercel/analytics": "^1.5.0",
"cloudinary": "^1.32.0",
@@ -1086,6 +1087,15 @@
"node": ">=14"
}
},
+ "node_modules/@remixicon/react": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@remixicon/react/-/react-4.9.0.tgz",
+ "integrity": "sha512-5/jLDD4DtKxH2B4QVXTobvV1C2uL8ab9D5yAYNtFt+w80O0Ys1xFOrspqROL3fjrZi+7ElFUWE37hBfaAl6U+Q==",
+ "license": "Remix Icon License 1.0",
+ "peerDependencies": {
+ "react": ">=18.2.0"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
diff --git a/package.json b/package.json
index 94081f3..8fc2019 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,7 @@
"dependencies": {
"@headlessui/react": "^1.7.4",
"@heroicons/react": "^2.0.13",
+ "@remixicon/react": "^4.9.0",
"@tailwindcss/typography": "^0.5.10",
"@vercel/analytics": "^1.5.0",
"cloudinary": "^1.32.0",
diff --git a/pages/global.css b/pages/global.css
index d7a54b5..3bacb4a 100644
--- a/pages/global.css
+++ b/pages/global.css
@@ -229,3 +229,23 @@ body {
grid-template-columns: 1fr;
}
}
+/* nav app-switcher overlay entrance — the one floating surface in the header */
+@keyframes rd-menu-in {
+ from {
+ opacity: 0;
+ transform: translateY(-4px) scale(0.985);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+}
+.rd-menu-in {
+ transform-origin: top left;
+ animation: rd-menu-in 150ms cubic-bezier(0.22, 1, 0.36, 1);
+}
+@media (prefers-reduced-motion: reduce) {
+ .rd-menu-in {
+ animation: none;
+ }
+}