diff --git a/app/(pages)/(index-page)/_components/hero/heroInfo.tsx b/app/(pages)/(index-page)/_components/hero/heroInfo.tsx
index 9ec6de0..0567bda 100644
--- a/app/(pages)/(index-page)/_components/hero/heroInfo.tsx
+++ b/app/(pages)/(index-page)/_components/hero/heroInfo.tsx
@@ -1,13 +1,16 @@
import React from 'react';
import Image from 'next/image';
import HeartButton from '../HeartButton/heartButton';
+import WordCycle from './wordCycle';
export default function HeroInfo() {
return (
- create
+
+
+
for
diff --git a/app/(pages)/(index-page)/_components/hero/heroMainSection.module.scss b/app/(pages)/(index-page)/_components/hero/heroMainSection.module.scss
new file mode 100644
index 0000000..6f1b2e8
--- /dev/null
+++ b/app/(pages)/(index-page)/_components/hero/heroMainSection.module.scss
@@ -0,0 +1,82 @@
+$wave-amplitude: -5%;
+$wave-period: 5s;
+
+@keyframes wave-1-motion {
+ 0% {
+ transform: translateX(0);
+ }
+ 50% {
+ transform: translateX($wave-amplitude);
+ }
+ 100% {
+ transform: translateX(0);
+ }
+}
+
+@keyframes wave-2-motion {
+ 0% {
+ transform: translateX(5%);
+ }
+ 50% {
+ transform: translateX(calc($wave-amplitude + 5%));
+ }
+ 100% {
+ transform: translateX(5%);
+ }
+}
+
+@keyframes wave-3-motion {
+ 0% {
+ transform: translateX(15%);
+ }
+ 50% {
+ transform: translateX(calc($wave-amplitude + 15%));
+ }
+ 100% {
+ transform: translateX(15%);
+ }
+}
+
+@keyframes wave-4-motion {
+ 0% {
+ transform: translateX(3%);
+ }
+ 50% {
+ transform: translateX(calc($wave-amplitude + 3%));
+ }
+ 100% {
+ transform: translateX(3%);
+ }
+}
+
+.dark_water_layer {
+ position: absolute;
+ right: -45%;
+ z-index: 118;
+ width: 100%;
+}
+
+.light_water_layer {
+ position: absolute;
+ right: -0%; // to -5%
+ // top: -0.5px;
+ z-index: 120;
+ width: 66%;
+ animation: wave-1-motion $wave-period infinite ease-in-out;
+}
+
+.dark_beach_layer {
+ position: absolute;
+ right: -2%;
+ z-index: 115;
+ width: 84%;
+ animation: wave-2-motion $wave-period infinite ease-in-out;
+}
+
+.light_beach_layer {
+ position: relative;
+ right: -5%;
+ top: 0;
+ width: 120%;
+ animation: wave-4-motion $wave-period infinite ease-in-out;
+}
\ No newline at end of file
diff --git a/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx b/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx
index ad82c31..8fd933b 100644
--- a/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx
+++ b/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx
@@ -2,6 +2,12 @@ import React from 'react';
import HeroInfo from './heroInfo';
import HeroSun from './heroSun';
import Image from 'next/image';
+import styles from './heroMainSection.module.scss';
+
+import DarkWaterLayer from '@public/Hero/dark_water_layer.svg';
+import LightWaterLayer from '@public/Hero/light_water_layer.svg';
+import LightBeachLayer from '@public/Hero/light_beach_layer.svg';
+import DarkBeachLayer from '@public/Hero/dark_beach_layer.svg';
export default function HeroSection() {
return (
@@ -93,23 +99,32 @@ export default function HeroSection() {
className="h-[107.5px] w-[176px] md:h-[180px] md:w-[288px] lg:h-[180px] lg:w-[288px] xl:h-[215px] xl:w-[352px]"
/>
-
-
-
-
-
+
{
+ const [wordIdx, setWordIdx] = useState(0);
+ const nodeRef = useRef(null);
+
+ useEffect(() => {
+ const swapInterval = setInterval(() => {
+ setWordIdx((idx) => (idx + 1) % words.length);
+ }, 3000);
+
+ return () => clearInterval(swapInterval);
+ }, []);
+
+ return (
+
+
+
+
+ {words[wordIdx]}
+
+
+ {' '}
+
+ );
+};
+
+export default WordCycle;
diff --git a/package-lock.json b/package-lock.json
index 5eb57ea..c1fa11a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,7 @@
"react-dom": "^18",
"react-icons": "^5.3.0",
"react-scroll-parallax": "^3.4.5",
+ "react-transition-group": "^4.4.5",
"sass": "^1.81.0",
"sharp": "^0.33.5"
},
@@ -27,6 +28,7 @@
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
+ "@types/react-transition-group": "^4.4.12",
"@typescript-eslint/eslint-plugin": "^8.14.0",
"@typescript-eslint/parser": "^8.14.0",
"eslint": "^8.57.1",
@@ -82,6 +84,18 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/runtime": {
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz",
+ "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@emnapi/runtime": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
@@ -1108,6 +1122,16 @@
"@types/react": "*"
}
},
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.12",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
+ "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz",
@@ -2070,7 +2094,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true,
"license": "MIT"
},
"node_modules/damerau-levenshtein": {
@@ -2258,6 +2281,16 @@
"node": ">=6.0.0"
}
},
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
"node_modules/dom5": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz",
@@ -5623,6 +5656,22 @@
"react-dom": "^16.8.0-0 || >=17.0.1 || ^18.0.0"
}
},
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
"node_modules/react-transition-state": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/react-transition-state/-/react-transition-state-2.3.0.tgz",
@@ -5788,6 +5837,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
"node_modules/regexp-tree": {
"version": "0.1.27",
"resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz",
diff --git a/package.json b/package.json
index c817daf..39efac9 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"react-dom": "^18",
"react-icons": "^5.3.0",
"react-scroll-parallax": "^3.4.5",
+ "react-transition-group": "^4.4.5",
"sass": "^1.81.0",
"sharp": "^0.33.5"
},
@@ -28,6 +29,7 @@
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
+ "@types/react-transition-group": "^4.4.12",
"@typescript-eslint/eslint-plugin": "^8.14.0",
"@typescript-eslint/parser": "^8.14.0",
"eslint": "^8.57.1",
diff --git a/public/Hero/dark_beach_layer.svg b/public/Hero/dark_beach_layer.svg
new file mode 100644
index 0000000..1437e46
--- /dev/null
+++ b/public/Hero/dark_beach_layer.svg
@@ -0,0 +1,8 @@
+
diff --git a/public/Hero/dark_water_layer.svg b/public/Hero/dark_water_layer.svg
new file mode 100644
index 0000000..0c72d92
--- /dev/null
+++ b/public/Hero/dark_water_layer.svg
@@ -0,0 +1,3 @@
+
diff --git a/public/Hero/heart.svg b/public/Hero/heart.svg
deleted file mode 100644
index 0bab6ea..0000000
--- a/public/Hero/heart.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/public/Hero/light_beach_layer.svg b/public/Hero/light_beach_layer.svg
new file mode 100644
index 0000000..765d20c
--- /dev/null
+++ b/public/Hero/light_beach_layer.svg
@@ -0,0 +1,3 @@
+
diff --git a/public/Hero/light_water_layer.svg b/public/Hero/light_water_layer.svg
new file mode 100644
index 0000000..06257e2
--- /dev/null
+++ b/public/Hero/light_water_layer.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/index/wave/top-right.svg b/public/index/wave/top-right.svg
index 5d2611d..a179a22 100644
--- a/public/index/wave/top-right.svg
+++ b/public/index/wave/top-right.svg
@@ -1,7 +1,7 @@