Browse Source

test

remotes/origin/main
김지은 2 months ago
parent
commit
830f585f5f
  1. BIN
      public/images/1111.png
  2. BIN
      public/images/hero1.png
  3. BIN
      public/images/hero2.png
  4. BIN
      public/images/hero3.png
  5. 11
      src/components/Header.jsx
  6. 38
      src/css/common.css
  7. 71
      src/css/fonts/pretendard.css
  8. BIN
      src/css/fonts/woff/Pretendard-Black.woff
  9. BIN
      src/css/fonts/woff/Pretendard-Bold.woff
  10. BIN
      src/css/fonts/woff/Pretendard-ExtraBold.woff
  11. BIN
      src/css/fonts/woff/Pretendard-ExtraLight.woff
  12. BIN
      src/css/fonts/woff/Pretendard-Light.woff
  13. BIN
      src/css/fonts/woff/Pretendard-Medium.woff
  14. BIN
      src/css/fonts/woff/Pretendard-Regular.woff
  15. BIN
      src/css/fonts/woff/Pretendard-SemiBold.woff
  16. BIN
      src/css/fonts/woff/Pretendard-Thin.woff
  17. BIN
      src/css/fonts/woff2/Pretendard-Black.woff2
  18. BIN
      src/css/fonts/woff2/Pretendard-Bold.woff2
  19. BIN
      src/css/fonts/woff2/Pretendard-ExtraBold.woff2
  20. BIN
      src/css/fonts/woff2/Pretendard-ExtraLight.woff2
  21. BIN
      src/css/fonts/woff2/Pretendard-Light.woff2
  22. BIN
      src/css/fonts/woff2/Pretendard-Medium.woff2
  23. BIN
      src/css/fonts/woff2/Pretendard-Regular.woff2
  24. BIN
      src/css/fonts/woff2/Pretendard-SemiBold.woff2
  25. BIN
      src/css/fonts/woff2/Pretendard-Thin.woff2
  26. 11
      src/css/header.css
  27. 2
      src/css/reset.css
  28. 116
      src/pages/MainPage copy 2.jsx
  29. 162
      src/pages/MainPage.jsx

BIN
public/images/1111.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
public/images/hero1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 KiB

BIN
public/images/hero2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

BIN
public/images/hero3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

11
src/components/Header.jsx

@ -156,14 +156,16 @@ export default function PalRenewalHeader() {
const activeData = menuData.find((item) => item.key === activeMenu); const activeData = menuData.find((item) => item.key === activeMenu);
const showPanel = Boolean(activeData && !activeData.simple && isHeaderHover); const showPanel = Boolean(activeData && !activeData.simple && isHeaderHover);
// const isActiveHeader = isScrolled || showPanel || isMobileMenuOpen;
useEffect(() => { useEffect(() => {
const onScroll = () => { const onScroll = () => {
setIsScrolled(window.scrollY > 10); const scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;
setIsScrolled(scrollTop > 2000);
}; };
onScroll(); onScroll();
window.addEventListener("scroll", onScroll); window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll); return () => window.removeEventListener("scroll", onScroll);
}, []); }, []);
@ -259,11 +261,12 @@ export default function PalRenewalHeader() {
return ( return (
<> <>
<header className={`pal-header ${isScrolled || showPanel || isMobileMenuOpen ? "is-scrolled" : ""} ${showPanel ? "is-open" : ""}`} onMouseEnter={clearCloseTimer} onMouseLeave={scheduleClose}> <header className={`pal-header ${isScrolled ? "is-scrolled" : ""} ${showPanel ? "is-open" : ""} ${isMobileMenuOpen ? "is-mobile-open" : ""}`} onMouseEnter={clearCloseTimer} onMouseLeave={scheduleClose}>
<div className="pal-header-inner"> <div className="pal-header-inner">
<h1 className="pal-header-logo"> <h1 className="pal-header-logo">
<Link to="/Main" onClick={closeAllMenus}> <Link to="/Main" onClick={closeAllMenus}>
<img src="./images/pal_logo.png" /> <img src="./images/pal_logo.png" alt="PAL Networks" />
{/* <img src={isActiveHeader ? "./images/pal_logo.png" : "./images/pal_logo_wh.png"} alt="PAL Networks" /> */}
</Link> </Link>
</h1> </h1>

38
src/css/common.css

@ -17,23 +17,23 @@ body{overflow-x:hidden;}
.main-layout{min-height:calc(100vh - var(--header-height));padding-top:var(--header-height);} .main-layout{min-height:calc(100vh - var(--header-height));padding-top:var(--header-height);}
.sub-layout{min-height:calc(100vh - var(--header-height));padding-top:var(--header-height);} .sub-layout{min-height:calc(100vh - var(--header-height));padding-top:var(--header-height);}
/*main visual*/ /*main visual*/
.main-page { background: #000; color: #fff; overflow-x: hidden; } .main-section{height:200vh;}
.hero-scroll-container { position: relative; height: 100vh; width: 100%; overflow: hidden; } .main-bg{position:sticky;top:var(--header-height);display:flex;max-width:1440px;margin:0 auto;height:600px;border-radius:8px;overflow:hidden;background:url('/images/1111.png') no-repeat 100% 50%/cover;transform:scale(1);transform-origin:center center;}
.parallax-wrapper { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; } .main-bg-hero2{position:absolute;inset:0;background:url('/images/hero3.png') no-repeat 50% 50%/cover;opacity:0;}
.p-layer { position: absolute; top: -5%; left: -5%; width: 110%; height: 110%; object-fit: cover; will-change: transform; } .split-text-section{width:100%;}
.layer-1 { z-index: 1; } .layer-2 { z-index: 2; } .layer-3 { z-index: 3; } .layer-4 { z-index: 4; } .main-text{position:relative;display:flex;flex:1;align-items:center;justify-content:center;padding:0 40px;}
.overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle, transparent 20%, rgba(0,0,0,0.8) 100%); z-index: 5; } .main-text .text{position:absolute;color:#fff;font-size:48px;line-height:1.2;width:100%;text-align:center;perspective:500px;font-weight:600;left:50%;top:50%;transform:translate(-50%,-50%);}
/* 메인 컨텐츠 위치 살짝 상단으로 */ .main-text .text-change{opacity:0;}
.main-content { position: relative; z-index: 10; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; text-align: center; padding-top: 5vh; }
/* 하단 텍스트를 화면 중앙 근처로 끌어올림 */ @media (max-width:1024px){
.next-content { position: absolute; top: 60%; left: 50%; transform: translate(-50%, -50%); z-index: 11; text-align: center; width: 100%; } .main-bg{height:520px;}
.next-content h2 { font-size: clamp(1.5rem, 4vw, 3rem); font-weight: 700; letter-spacing: -0.02em; color: #fff; } .main-text .text{font-size:38px;}
.tagline { font-size: 14px; letter-spacing: 4px; color: #00aeef; margin-bottom: 20px; font-weight: 600; } }
.title-wrapper { overflow: hidden; margin-bottom: 30px; }
.reveal-text { display: inline-block; font-size: clamp(2.5rem, 8vw, 6rem); font-weight: 800; line-height: 1.1; } @media (max-width:768px){
.desc { font-size: 18px; line-height: 1.6; color: #ccc; max-width: 600px; margin-bottom: 40px; } .main-section{height:170vh;}
.btn-cta { padding: 15px 40px; border: 1px solid #fff; color: #fff; text-decoration: none; transition: all 0.3s; letter-spacing: 2px; font-weight: 500; } .main-bg{top:80px;height:420px;}
.btn-cta:hover { background: #fff; color: #000; } .main-text{padding:0 20px;}
.next-content { position: absolute; bottom: 10%; left: 50%; transform: translateX(-50%); z-index: 11; text-align: center; } .main-text .text{font-size:28px;line-height:1.3;}
}

71
src/css/fonts/pretendard.css

@ -0,0 +1,71 @@
/*
Copyright (c) 2021 Kil Hyung-jin, with Reserved Font Name Pretendard.
https://github.com/orioncactus/pretendard
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
*/
@font-face {
font-family: 'Pretendard';
font-weight: 900;
font-display: swap;
src: local('Pretendard Black'), url(./woff2/Pretendard-Black.woff2) format('woff2'), url(./woff/Pretendard-Black.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 800;
font-display: swap;
src: local('Pretendard ExtraBold'), url(./woff2/Pretendard-ExtraBold.woff2) format('woff2'), url(./woff/Pretendard-ExtraBold.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 700;
font-display: swap;
src: local('Pretendard Bold'), url(./woff2/Pretendard-Bold.woff2) format('woff2'), url(./woff/Pretendard-Bold.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 600;
font-display: swap;
src: local('Pretendard SemiBold'), url(./woff2/Pretendard-SemiBold.woff2) format('woff2'), url(./woff/Pretendard-SemiBold.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 500;
font-display: swap;
src: local('Pretendard Medium'), url(./woff2/Pretendard-Medium.woff2) format('woff2'), url(./woff/Pretendard-Medium.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 400;
font-display: swap;
src: local('Pretendard Regular'), url(./woff2/Pretendard-Regular.woff2) format('woff2'), url(./woff/Pretendard-Regular.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 300;
font-display: swap;
src: local('Pretendard Light'), url(./woff2/Pretendard-Light.woff2) format('woff2'), url(./woff/Pretendard-Light.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 200;
font-display: swap;
src: local('Pretendard ExtraLight'), url(./woff2/Pretendard-ExtraLight.woff2) format('woff2'), url(./woff/Pretendard-ExtraLight.woff) format('woff');
}
@font-face {
font-family: 'Pretendard';
font-weight: 100;
font-display: swap;
src: local('Pretendard Thin'), url(./woff2/Pretendard-Thin.woff2) format('woff2'), url(./woff/Pretendard-Thin.woff) format('woff');
}

BIN
src/css/fonts/woff/Pretendard-Black.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-Bold.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-ExtraBold.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-ExtraLight.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-Light.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-Medium.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-Regular.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-SemiBold.woff

Binary file not shown.

BIN
src/css/fonts/woff/Pretendard-Thin.woff

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-Black.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-Bold.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-ExtraBold.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-ExtraLight.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-Light.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-Medium.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-Regular.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-SemiBold.woff2

Binary file not shown.

BIN
src/css/fonts/woff2/Pretendard-Thin.woff2

Binary file not shown.

11
src/css/header.css

@ -1,13 +1,14 @@
/*header.*/ /*header.*/
.pal-header{position:fixed;top:0;left:0;right:0;z-index:1000;transition:box-shadow .35s ease;} .pal-header{position:fixed;top:0;left:0;right:0;z-index:1000;background:transparent;transition:box-shadow .35s ease;}
.pal-header::before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(255,255,255,.96);backdrop-filter:blur(16px);opacity:0;transition:opacity .35s ease;} .pal-header::before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(255,255,255,.96);backdrop-filter:blur(16px);opacity:0;pointer-events:none;transition:opacity .35s ease;}
.pal-header.is-scrolled::before,.pal-header.is-open::before{opacity:1;} .pal-header.is-scrolled::before,.pal-header.is-open::before,.pal-header.is-mobile-open::before{opacity:1;}
.pal-header.is-open{box-shadow:0 18px 40px rgba(15,23,42,.08);} .pal-header.is-scrolled,.pal-header.is-open,.pal-header.is-mobile-open{box-shadow:0 18px 40px rgba(15,23,42,.08);}
/* .pal-header.is-scrolled .pal-gnb-link,.pal-header.is-open .pal-gnb-link,.pal-header.is-mobile-open .pal-gnb-link{color:#111} */
.pal-header-inner{position:relative;display:flex;align-items:center;justify-content:space-between;max-width:1440px;height:96px;margin:0 auto;padding:0 40px;z-index:2;} .pal-header-inner{position:relative;display:flex;align-items:center;justify-content:space-between;max-width:1440px;height:96px;margin:0 auto;padding:0 40px;z-index:2;}
.pal-header-logo{flex:0 0 auto;margin:0;font-size:0;line-height:1;} .pal-header-logo{flex:0 0 auto;margin:0;font-size:0;line-height:1;}
.pal-header-logo a{display:inline-flex;align-items:center;font-size:28px;font-weight:800;line-height:1;color:#111;text-decoration:none;letter-spacing:-0.03em;} .pal-header-logo a{display:inline-flex;align-items:center;font-size:28px;font-weight:800;line-height:1;color:#111;text-decoration:none;letter-spacing:-0.03em;}
.pal-header-logo img{width:180px} .pal-header-logo img{width:180px;display:block;}
.pal-gnb{flex:1 1 auto;display:flex;justify-content:center;height:100%;} .pal-gnb{flex:1 1 auto;display:flex;justify-content:center;height:100%;}
.pal-gnb-depth1{display:flex;align-items:center;gap:4px;height:100%;margin:0;padding:0;list-style:none;} .pal-gnb-depth1{display:flex;align-items:center;gap:4px;height:100%;margin:0;padding:0;list-style:none;}

2
src/css/reset.css

@ -1,5 +1,5 @@
@charset "UTF-8"; @charset "UTF-8";
@import './fonts/pretendard.css';
html { html {
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
-moz-text-size-adjust: 100%; -moz-text-size-adjust: 100%;

116
src/pages/MainPage copy 2.jsx

@ -0,0 +1,116 @@
import { useEffect, useLayoutEffect, useRef } from "react";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import { Link } from "react-router-dom";
// ( )
import img1 from "/images/img1.jpg"; // (/ )
import img2 from "/images/img2.jpg"; // (/ )
import img3 from "/images/img3.jpg"; // (/)
import img4 from "/images/img4.jpg"; // (UI/ )
gsap.registerPlugin(ScrollTrigger);
function MainPage() {
const mainRef = useRef(null);
const scrollRef = useRef(null);
useLayoutEffect(() => {
let ctx = gsap.context(() => {
const tl = gsap.timeline({
scrollTrigger: {
trigger: scrollRef.current,
start: "top top",
end: "+=150%", // 300% 150%
scrub: 1.2,
pin: true,
},
});
// 1.
tl.to(".layer-1", { scale: 1.1, y: -30 }, 0).to(".layer-2", { scale: 1.2, y: -80 }, 0).to(".layer-3", { scale: 1.5, y: -150, opacity: 0 }, 0).to(".layer-4", { scale: 2, y: -250, opacity: 0 }, 0).to(".main-content", { y: -50, opacity: 0, duration: 0.5 }, 0); //
// 2. "The Future of..." (0.2 )
tl.from(
".next-content",
{
y: 100,
opacity: 0,
duration: 1,
},
0.2,
); // 0.2 offset. !
}, mainRef);
return () => ctx.revert();
}, []);
return (
<main className="main-page" ref={mainRef}>
<section className="hero-scroll-container" ref={scrollRef}>
{/* Parallax Layers */}
<div className="parallax-wrapper">
<img src={img1} className="p-layer layer-1" alt="bg" />
<img src={img2} className="p-layer layer-2" alt="mid" />
<img src={img3} className="p-layer layer-3" alt="drone" />
<img src={img4} className="p-layer layer-4" alt="ui" />
<div className="overlay" />
</div>
{/* Content */}
<div className="main-content">
<div className="tagline">10 YEARS OF AVIATION TECH</div>
<h1 className="title-wrapper">
<span className="reveal-text">BEYOND THE SKY,</span>
<br />
<span className="reveal-text">INTELLIGENT AIRSPACE.</span>
</h1>
<p className="desc">
IBE 솔루션을 넘어 UTM, SWIM, UAM까지.
<br />
우리는 지능형 공역 관리 시스템의 미래를 구축합니다.
</p>
<Link to="/projects" className="btn-cta">
EXPLORE SOLUTIONS
</Link>
</div>
<div className="next-content">
<h2>The Future of UTM & UAM</h2>
</div>
</section>
{/* 기존의 임시 검은 배경 섹션을 지우고 아래와 같이 구성하세요 */}
<section className="content-section info-utm">
<div className="container">
<h2>UTM System</h2>
<p>Drone Traffic Management for Kazakhstan and Global Markets...</p>
</div>
</section>
<section className="content-section info-uam">
<h2>UAM Infrastructure</h2>
<p>Building the future of Urban Air Mobility...</p>
</section>
</main>
);
}
export default MainPage;
.main-page { background: #000; color: #fff; overflow-x: hidden; }
.hero-scroll-container { position: relative; height: 100vh; width: 100%; overflow: hidden; }
.parallax-wrapper { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; }
.p-layer { position: absolute; top: -5%; left: -5%; width: 110%; height: 110%; object-fit: cover; will-change: transform; }
.layer-1 { z-index: 1; } .layer-2 { z-index: 2; } .layer-3 { z-index: 3; } .layer-4 { z-index: 4; }
.overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle, transparent 20%, rgba(0,0,0,0.8) 100%); z-index: 5; }
.main-content { position: relative; z-index: 10; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; text-align: center; padding-top: 5vh; }
.next-content { position: absolute; top: 60%; left: 50%; transform: translate(-50%, -50%); z-index: 11; text-align: center; width: 100%; }
.next-content h2 { font-size: clamp(1.5rem, 4vw, 3rem); font-weight: 700; letter-spacing: -0.02em; color: #fff; }
.tagline { font-size: 14px; letter-spacing: 4px; color: #00aeef; margin-bottom: 20px; font-weight: 600; }
.title-wrapper { overflow: hidden; margin-bottom: 30px; }
.reveal-text { display: inline-block; font-size: clamp(2.5rem, 8vw, 6rem); font-weight: 800; line-height: 1.1; }
.desc { font-size: 18px; line-height: 1.6; color: #ccc; max-width: 600px; margin-bottom: 40px; }
.btn-cta { padding: 15px 40px; border: 1px solid #fff; color: #fff; text-decoration: none; transition: all 0.3s; letter-spacing: 2px; font-weight: 500; }
.btn-cta:hover { background: #fff; color: #000; }
.next-content { position: absolute; bottom: 10%; left: 50%; transform: translateX(-50%); z-index: 11; text-align: center; }

162
src/pages/MainPage.jsx

@ -1,96 +1,112 @@
import { useEffect, useLayoutEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import { gsap } from "gsap"; import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger"; import { ScrollTrigger } from "gsap/ScrollTrigger";
import { Link } from "react-router-dom"; import { SplitText } from "gsap/SplitText";
// ( ) gsap.registerPlugin(ScrollTrigger, SplitText);
import img1 from "/images/img1.jpg"; // (/ )
import img2 from "/images/img2.jpg"; // (/ )
import img3 from "/images/img3.jpg"; // (/)
import img4 from "/images/img4.jpg"; // (UI/ )
gsap.registerPlugin(ScrollTrigger);
function MainPage() { function MainPage() {
const mainRef = useRef(null); const sectionRef = useRef(null);
const scrollRef = useRef(null); const bgRef = useRef(null);
const hero2Ref = useRef(null);
const text1Ref = useRef(null);
const text2Ref = useRef(null);
const splitRef = useRef(null);
useLayoutEffect(() => { useEffect(() => {
let ctx = gsap.context(() => { const setupText = () => {
const tl = gsap.timeline({ if (splitRef.current) splitRef.current.revert();
scrollTrigger: {
trigger: scrollRef.current, splitRef.current = SplitText.create(text1Ref.current, { type: "chars" });
start: "top top",
end: "+=150%", // 300% 150% gsap.from(splitRef.current.chars, {
scrub: 1.2, x: 150,
pin: true, opacity: 0,
}, duration: 0.7,
ease: "power4",
stagger: 0.04,
}); });
};
setupText();
// 1. gsap.set(hero2Ref.current, { opacity: 0 });
tl.to(".layer-1", { scale: 1.1, y: -30 }, 0).to(".layer-2", { scale: 1.2, y: -80 }, 0).to(".layer-3", { scale: 1.5, y: -150, opacity: 0 }, 0).to(".layer-4", { scale: 2, y: -250, opacity: 0 }, 0).to(".main-content", { y: -50, opacity: 0, duration: 0.5 }, 0); // gsap.set(text2Ref.current, { opacity: 0, y: 30 });
// 2. "The Future of..." (0.2 ) const tl = gsap.timeline({
tl.from( scrollTrigger: {
".next-content", trigger: sectionRef.current,
start: "top top",
end: "+=100%",
scrub: 1,
},
});
tl.to(
bgRef.current,
{
scale: 1.18,
borderRadius: 0,
ease: "none",
},
0,
)
.to(
text1Ref.current,
{ {
y: 100,
opacity: 0, opacity: 0,
duration: 1, y: -30,
ease: "none",
}, },
0.2, 0.2,
); // 0.2 offset. ! )
}, mainRef); .to(
return () => ctx.revert(); hero2Ref.current,
{
opacity: 1,
ease: "none",
},
0.35,
)
.to(
text2Ref.current,
{
opacity: 1,
y: 0,
ease: "none",
},
0.45,
);
window.addEventListener("resize", setupText);
return () => {
window.removeEventListener("resize", setupText);
tl.kill();
ScrollTrigger.getAll().forEach((trigger) => trigger.kill());
if (splitRef.current) splitRef.current.revert();
};
}, []); }, []);
return ( return (
<main className="main-page" ref={mainRef}> <main className="main-page">
<section className="hero-scroll-container" ref={scrollRef}> <section className="main-section" ref={sectionRef}>
{/* Parallax Layers */} <div className="main-bg" ref={bgRef}>
<div className="parallax-wrapper"> <div className="main-bg-hero2" ref={hero2Ref}></div>
<img src={img1} className="p-layer layer-1" alt="bg" />
<img src={img2} className="p-layer layer-2" alt="mid" />
<img src={img3} className="p-layer layer-3" alt="drone" />
<img src={img4} className="p-layer layer-4" alt="ui" />
<div className="overlay" />
</div>
{/* Content */} <div className="main-text">
<div className="main-content"> <div className="text" ref={text1Ref}>
<div className="tagline">10 YEARS OF AVIATION TECH</div> 미래 항공 모빌리티를 구현하는 기술 파트너
<h1 className="title-wrapper"> </div>
<span className="reveal-text">BEYOND THE SKY,</span>
<br />
<span className="reveal-text">INTELLIGENT AIRSPACE.</span>
</h1>
<p className="desc">
IBE 솔루션을 넘어 UTM, SWIM, UAM까지.
<br />
우리는 지능형 공역 관리 시스템의 미래를 구축합니다.
</p>
<Link to="/projects" className="btn-cta">
EXPLORE SOLUTIONS
</Link>
</div>
<div className="next-content"> <div className="text text-change" ref={text2Ref}>
<h2>The Future of UTM & UAM</h2> 공역관리와 드론 교통관리(UTM) 기반으로
<br />
실제 운영 가능한 항공 시스템을 구축합니다
</div>
</div>
</div> </div>
</section> </section>
{/* 기존의 임시 검은 배경 섹션을 지우고 아래와 같이 구성하세요 */}
<section className="content-section info-utm">
<div className="container">
<h2>UTM System</h2>
<p>Drone Traffic Management for Kazakhstan and Global Markets...</p>
</div>
</section>
<section className="content-section info-uam">
<h2>UAM Infrastructure</h2>
<p>Building the future of Urban Air Mobility...</p>
</section>
</main> </main>
); );
} }

Loading…
Cancel
Save