+
UTM SYSTEM
+
+
드론교통관리 (UTM)
- {/* STEP 4 */}
-
(itemsRef.current[3] = el)}>
-
-
04
-
Alert & Response
-
비정상 상황 발생 시 즉시 대응할 수 있도록 지원합니다
-
-
-

-
+
드론 하늘길을 통제하는 관제 시스템
-
-
복잡한 공역 관리부터 실시간 대응까지
-
UTM은 드론 운영의 모든 과정을 하나의 시스템으로 통합합니다
+
+ {items.map((item, index) => (
+
{
+ cardsRef.current[index] = el;
+ }}
+ >
+
+
{item.step}
+
{item.label}
+
{item.title}
+
{item.desc}
+
+
+
+
+

+
+
+
+ ))}
diff --git a/src/css/main.css b/src/css/main.css
index f6ae19f..507489a 100644
--- a/src/css/main.css
+++ b/src/css/main.css
@@ -127,3 +127,384 @@ body{overflow-x:hidden;}
.main-scroll-line{height:22px;}
.main-scroll-text{font-size:10px;letter-spacing:.22em;}
}
+
+
+/* ─── Section ─── */
+.main-utm-section{position:relative;width:100%;min-height:100vh;padding-top:86px;overflow:hidden;background:radial-gradient(circle at 12% 18%,rgba(58,64,129,.08),transparent 32%),radial-gradient(circle at 88% 18%,rgba(58,64,129,.06),transparent 34%),linear-gradient(180deg,#f7f9ff 0%,#fff 100%);}
+.main-utm-section::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(247,249,255,.82) 0%,rgba(247,249,255,.42) 24%,rgba(247,249,255,.12) 52%,rgba(247,249,255,.42) 78%,rgba(247,249,255,.82) 100%),url("/images/main-utm-background.png") no-repeat 50% 50% / cover;opacity:.52;pointer-events:none;z-index:0;}
+
+/* ─── Glow ─── */
+.main-utm-bg-glow{position:absolute;border-radius:999px;filter:blur(90px);pointer-events:none;}
+.main-utm-bg-glow--a{width:520px;height:520px;top:-160px;right:-120px;background:rgba(58,64,129,.13);}
+.main-utm-bg-glow--b{width:460px;height:460px;left:-140px;bottom:-160px;background:rgba(112,180,255,.12);}
+
+/* ─── Inner ─── */
+.main-utm-inner{position:relative;z-index:2;width:min(1440px,calc(100% - 120px));min-height:calc(100vh - 86px);margin:0 auto;padding-top:72px;padding-bottom:64px;}
+
+/* ─── Head ─── */
+.main-utm-head{position:relative;z-index:5;max-width:820px;margin-bottom:64px;}
+.main-utm-eyebrow{margin:0 0 14px;font-size:12px;font-weight:800;letter-spacing:.24em;color:#3a4081;}
+.main-utm-title{
+ margin:0;
+ font-size:clamp(40px,4vw,64px);
+ font-weight:800;
+ line-height:.92;
+ letter-spacing:-0.08em;
+ color:#0e1120;
+}.main-utm-desc{margin:22px 0 0;font-size:16px;line-height:1.6;letter-spacing:-.02em;color:#697083;}
+
+/* ─── Card Stack ─── */
+.main-utm-stack{position:relative;width:100%;height:min(430px,50vh);perspective:1400px;}
+.main-utm-card{position:absolute;inset:0;display:grid;grid-template-columns:.9fr 1.1fr;align-items:center;gap:64px;padding:54px 62px;border-radius:34px;overflow:hidden;background:rgba(255,255,255,.86);border:1px solid rgba(58,64,129,.1);box-shadow:0 30px 80px rgba(14,17,32,.1),inset 0 1px 0 rgba(255,255,255,.9);backdrop-filter:blur(22px);will-change:transform,opacity,filter;}
+.main-utm-card::before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.78),transparent 46%),radial-gradient(circle at 82% 28%,rgba(58,64,129,.11),transparent 34%);pointer-events:none;}
+.main-utm-card-text,.main-utm-card-visual{position:relative;z-index:2;}
+.main-utm-step{display:inline-flex;align-items:center;justify-content:center;width:58px;height:32px;margin-bottom:24px;border-radius:999px;background:rgba(58,64,129,.1);color:#3a4081;font-size:13px;font-weight:800;letter-spacing:.1em;}
+.main-utm-label{margin:0 0 10px;font-size:12px;font-weight:800;letter-spacing:.18em;color:rgba(58,64,129,.62);}
+.main-utm-card h3{margin:0;font-size:clamp(34px,3.2vw,54px);line-height:1.06;letter-spacing:-.055em;color:#101322;}
+.main-utm-card-text > p:last-child{max-width:430px;margin:22px 0 0;font-size:17px;line-height:1.72;word-break:keep-all;color:#636b7e;}
+
+/* ─── Card Visual ─── */
+.main-utm-card-visual{
+ position:relative;
+ height:100%;
+ min-height:300px;
+ border-radius:28px;
+ overflow:hidden;
+ background:#f7f8fc;
+ align-items:center;
+ overflow:hidden;
+
+ justify-content:center;
+}
+
+.main-utm-card-visual::after{
+ content:"";
+
+ position:absolute;
+ inset:18px;
+
+ border-radius:24px;
+
+ background:linear-gradient(180deg,rgba(255,255,255,.12),transparent 30%);
+
+ pointer-events:none;
+}
+
+.main-utm-img{
+ width:100%;
+ height:100%;
+
+ object-fit:cover;
+
+ display:block;
+
+ border-radius:24px;
+
+
+box-shadow:
+ inset 0 0 0 1px rgba(58,64,129,.06),
+ 0 18px 40px rgba(17,22,40,.08),
+ 0 0 0 8px rgba(255,255,255,.42);
+ background:#fff;
+ overflow:hidden;
+transform:translateZ(0);
+}
+.main-utm-orbit{position:absolute;inset:32px;border-radius:28px;}
+.main-utm-orbit span{position:absolute;border:1px solid rgba(58,64,129,.14);border-radius:50%;}
+.main-utm-orbit span:nth-child(1){width:340px;height:340px;left:50%;top:50%;transform:translate(-50%,-50%);}
+.main-utm-orbit span:nth-child(2){width:230px;height:230px;left:18%;top:16%;}
+.main-utm-orbit span:nth-child(3){width:170px;height:170px;right:10%;bottom:10%;}
+.main-utm-map{position:absolute;inset:0;}
+.main-utm-route{position:absolute;height:2px;border-radius:999px;background:linear-gradient(90deg,transparent,#3a4081,transparent);box-shadow:0 0 16px rgba(58,64,129,.32);opacity:.7;}
+.main-utm-route--a{width:62%;left:18%;top:42%;transform:rotate(-18deg);}
+.main-utm-route--b{width:48%;right:12%;top:62%;transform:rotate(22deg);}
+
+
+/* ─── Floating Drones ─── */
+.utm-floating-air{position:absolute;top:120px;right:2%;width:42vw;height:210px;pointer-events:none;z-index:1;overflow:visible;animation:utmAirFlow 18s linear infinite;}
+.utm-floating-drone{position:absolute;width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.42);backdrop-filter:blur(12px);box-shadow:0 0 0 8px rgba(58,64,129,.04),0 10px 24px rgba(58,64,129,.1);}
+.utm-floating-drone svg{position:absolute;inset:9px;width:34px;height:34px;overflow:visible;}
+.utm-floating-drone svg circle{fill:none;stroke:#3a4081;stroke-width:2.4;}
+.utm-floating-drone svg circle:first-child{filter:drop-shadow(0 0 10px rgba(58,64,129,.34));}
+.utm-floating-drone svg path{fill:none;stroke:#3a4081;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;}
+.utm-floating-drone span{position:absolute;inset:-12px;border-radius:50%;border:1px solid rgba(58,64,129,.2);animation:utmDronePulse 2.8s ease-out infinite;}
+.utm-floating-drone--a{left:10%;top:122px;animation:utmDroneMoveB 11s ease-in-out infinite,utmDronePulseFloat 6s ease-in-out infinite;}
+.utm-floating-drone--a svg circle,
+.utm-floating-drone--a svg path{
+ stroke:#5B6CFF;
+}
+
+.utm-floating-drone--a svg circle:first-child{
+ filter:drop-shadow(0 0 10px rgba(91,108,255,.34));
+}
+.utm-floating-drone--b{
+ left:44%;
+ top:72px;
+
+ box-shadow:
+ 0 0 0 8px rgba(243,199,104,.08),
+ 0 10px 24px rgba(243,199,104,.14);
+
+ animation:
+ utmDroneMoveB 11s ease-in-out infinite,
+ utmDronePulseFloat 6s ease-in-out infinite;
+}
+.utm-floating-drone--b svg{
+ animation:utmDroneColorShift 6s ease-in-out infinite;
+}
+
+.utm-floating-drone--b svg circle,
+.utm-floating-drone--b svg path{
+ stroke:#F3C768;
+}
+
+.utm-floating-drone--b svg circle:first-child{
+ filter:drop-shadow(0 0 10px rgba(243,199,104,.34));
+}
+.utm-floating-drone--c{right:4%;top:138px;animation:utmDroneMoveB 11s ease-in-out infinite,utmDronePulseFloat 6s ease-in-out infinite;animation-delay:-2.4s; box-shadow:
+ 0 0 0 8px rgba(255,123,123,.06),
+ 0 10px 24px rgba(255,123,123,.12);
+
+ }
+ .utm-floating-drone--c svg circle,
+.utm-floating-drone--c svg path{
+ stroke:#FF7B7B;
+}
+
+.utm-floating-drone--c svg circle:first-child{
+ filter:drop-shadow(0 0 10px rgba(255,123,123,.32));
+}
+
+
+/* ─── Responsive ─── */
+@media(max-width:1024px){
+ .main-utm-section{padding-top:76px;}
+ .main-utm-inner{width:calc(100% - 56px);min-height:calc(100vh - 76px);padding-top:56px;}
+ .main-utm-head{margin-bottom:56px;}
+ .main-utm-card{grid-template-columns:1fr;gap:28px;padding:34px;}
+ .main-utm-card-visual{min-height:240px;}
+ .utm-floating-air{width:58vw;top:160px;opacity:.72;}
+}
+@media(max-width:768px){
+ .main-utm-inner{width:calc(100% - 32px);padding-top:42px;}
+ .main-utm-title{font-size:38px;}
+ .main-utm-desc{font-size:14px;}
+ .main-utm-stack{height:64vh;}
+ .main-utm-card{padding:26px 22px;border-radius:24px;}
+ .main-utm-card h3{font-size:32px;}
+ .main-utm-card-text > p:last-child{font-size:14px;}
+ .main-utm-card-visual{min-height:210px;}
+ .utm-floating-air{display:none;}
+}
+
+/* ─── Keyframes ─── */
+@keyframes utmAirFlow{0%,100%{transform:translateX(0);}50%{transform:translateX(-18px);}}
+@keyframes utmDroneMoveA{0%,100%{transform:translate3d(0,0,0) scale(1);}50%{transform:translate3d(26px,-12px,0) scale(1.04);}}
+@keyframes utmDroneMoveB{0%,100%{transform:translate3d(0,0,0) scale(.82);}50%{transform:translate3d(-20px,10px,0) scale(.88);}}
+@keyframes utmDronePulse{0%{transform:scale(.7);opacity:.62;}100%{transform:scale(1.9);opacity:0;}}
+@keyframes utmDronePulseFloat{0%,100%{filter:drop-shadow(0 0 0 rgba(58,64,129,0));}50%{filter:drop-shadow(0 0 18px rgba(58,64,129,.18));}}
+@keyframes utmDroneColorShift{
+ 0%{
+ filter:none;
+ }
+
+ 45%{
+ filter:none;
+ }
+
+ 50%{
+ filter:drop-shadow(0 0 10px rgba(243,199,104,.42));
+ }
+
+ 55%{
+ filter:drop-shadow(0 0 10px rgba(243,199,104,.42));
+ }
+
+ 100%{
+ filter:none;
+ }
+}
+
+.airspace-transition-section {
+ position: relative;
+ height: 100vh;
+ overflow: hidden;
+
+ background:
+ radial-gradient(circle at 12% 18%, rgba(58,64,129,.08), transparent 32%),
+ radial-gradient(circle at 88% 18%, rgba(58,64,129,.06), transparent 34%),
+ linear-gradient(180deg, #f7f9ff 0%, #ffffff 100%);
+}
+.airspace-transition-section::before {
+ content: "";
+
+ position: absolute;
+ inset: 0;
+
+ background:
+ linear-gradient(
+ 90deg,
+ rgba(255,255,255,.72) 0%,
+ rgba(255,255,255,.24) 20%,
+ rgba(255,255,255,.08) 50%,
+ rgba(255,255,255,.24) 80%,
+ rgba(255,255,255,.72) 100%
+ );
+
+ pointer-events: none;
+}
+.airspace-panel {
+ position: absolute;
+ inset: 0;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ padding: 0 8vw;
+}
+
+.airspace-panel--utm {
+ background: transparent;
+}
+
+.airspace-panel--uam {
+ background:
+ radial-gradient(circle at 72% 34%, rgba(112,180,255,.12), transparent 34%),
+ radial-gradient(circle at 42% 78%, rgba(58,64,129,.08), transparent 28%);
+}
+
+.airspace-panel p {
+ margin: 0 0 18px;
+ font-size: 12px;
+ font-weight: 800;
+ letter-spacing: .26em;
+ color: #3a4081;
+}
+
+.airspace-panel h2 {
+ margin: 0;
+ max-width: 760px;
+
+ font-size: clamp(48px, 6vw, 96px);
+ font-weight: 800;
+ line-height: .96;
+ letter-spacing: -.08em;
+ color: #0e1120;
+}
+
+.airspace-lines {
+ position: absolute;
+ inset: 0;
+ z-index: 5;
+ pointer-events: none;
+}
+
+/* .airspace-line {
+ position: absolute;
+ left: 8vw;
+
+ height: 1px;
+ border-radius: 999px;
+
+ background:
+ linear-gradient(
+ 90deg,
+ rgba(58,64,129,0),
+ rgba(58,64,129,.06),
+ rgba(58,64,129,.14),
+ rgba(58,64,129,.06),
+ rgba(58,64,129,0)
+ );
+
+ filter: blur(.4px);
+
+ opacity: .55;
+
+ mix-blend-mode: multiply;
+
+ transform-origin: left center;
+}
+
+.airspace-line::after {
+ content: "";
+
+ position: absolute;
+ inset: 0;
+
+ background:
+ linear-gradient(
+ 90deg,
+ transparent 0%,
+ rgba(255,255,255,.65) 18%,
+ rgba(255,255,255,0) 42%
+ );
+
+ mix-blend-mode: screen;
+}
+.airspace-line--1 {
+ top: 36%;
+ width: 62vw;
+ transform: rotate(-8deg);
+}
+
+.airspace-line--2 {
+ top: 48%;
+ width: 74vw;
+ transform: rotate(3deg);
+}
+
+.airspace-line--3 {
+ top: 60%;
+ width: 58vw;
+ transform: rotate(10deg);
+}
+
+.airspace-line--4 {
+ top: 70%;
+ width: 46vw;
+ transform: rotate(-4deg);
+ opacity: .52;
+} */
+
+.airspace-moving-dot {
+ position: absolute;
+ left: 50%;
+ top: 49%;
+ z-index: 6;
+
+ width: 54px;
+ height: 54px;
+ border-radius: 50%;
+
+ background: rgba(255,255,255,.78);
+ border: 1px solid rgba(58,64,129,.14);
+
+ box-shadow:
+ 0 0 0 12px rgba(58,64,129,.06),
+ 0 20px 50px rgba(58,64,129,.18);
+}
+
+.airspace-moving-dot::before {
+ content: "";
+ position: absolute;
+ inset: 16px;
+ border-radius: 50%;
+ background: #3a4081;
+ box-shadow: 0 0 18px rgba(58,64,129,.42);
+}
+
+@media (max-width: 768px) {
+ .airspace-panel {
+ padding: 0 28px;
+ }
+
+ .airspace-panel h2 {
+ font-size: 44px;
+ }
+
+ .airspace-line {
+ left: 28px;
+ }
+}
+
diff --git a/src/pages/MainPage.jsx b/src/pages/MainPage.jsx
index 96c56a9..bb68273 100644
--- a/src/pages/MainPage.jsx
+++ b/src/pages/MainPage.jsx
@@ -1,12 +1,14 @@
import MainVisual from "../components/main/MainVisual";
import MainUtm from "../components/main/MainUtm";
import MainUam from "../components/main/MainUam";
+import MainCameraTransition from "../components/main/MainCameraTransition";
function MainPage() {
return (
+
{/* */}
);