Browse Source

이미지 삽입

home 6 months ago
parent
commit
3e1b32cc8c
59 changed files with 336 additions and 226 deletions
  1. 38 0
      deploy.ps1
  2. 1 1
      index.html
  3. BIN
      public/business/ICT.jpg
  4. BIN
      public/business/OSP기간통신사업.jpg
  5. BIN
      public/business/설계견적.jpg
  6. BIN
      public/business/소방설비공사.jpg
  7. 0 0
      public/business/전기설비공사.jpg
  8. BIN
      public/business/정보통신공사.jpg
  9. BIN
      public/business/정보통신설비유지보수.jpg
  10. BIN
      public/business/제품생산RND.jpg
  11. BIN
      public/business/친환경공사.jpg
  12. BIN
      public/business/통합보안시스템.jpg
  13. BIN
      public/footer/KTR마크.png
  14. BIN
      public/footer/ci.png
  15. 6 0
      public/footer/footerLogo.svg
  16. BIN
      public/footer/벤처기업인증마크.png
  17. BIN
      public/footer/중소기업청.png
  18. BIN
      public/hero2.png
  19. BIN
      public/img.png
  20. BIN
      public/partners/DL.png
  21. BIN
      public/partners/DLENC.png
  22. BIN
      public/partners/GS건설.png
  23. BIN
      public/partners/HDC현대산업개발.png
  24. BIN
      public/partners/KT.png
  25. BIN
      public/partners/KT2.png
  26. BIN
      public/partners/kt넷코어.png
  27. BIN
      public/partners/sk에코플랜트.png
  28. BIN
      public/partners/롯데건설.png
  29. BIN
      public/partners/몰라.png
  30. BIN
      public/partners/삼성물산.png
  31. BIN
      public/partners/포스코.png
  32. BIN
      public/partners/한화.png
  33. BIN
      public/partners/현대건설.png
  34. BIN
      public/partners/현대엔지니어링.png
  35. BIN
      public/partners/호반.png
  36. BIN
      public/project/CU물류창고.jpg
  37. BIN
      public/project/G7.png
  38. BIN
      public/project/김해물류센터.png
  39. BIN
      public/project/덕산병원.jpg
  40. BIN
      public/project/데이터센터.jpg
  41. BIN
      public/project/드메르.jpg
  42. BIN
      public/project/롯데리조트제주.jpg
  43. BIN
      public/project/롯데호텔.jpg
  44. BIN
      public/project/메디타운.jpg
  45. BIN
      public/project/서희스타힐스.jpg
  46. BIN
      public/project/아트리움.jpg
  47. BIN
      public/project/통합망.jpg
  48. 4 6
      src/componenets/Header.jsx
  49. 24 24
      src/data/businessItems.json
  50. 7 13
      src/data/menuItems.json
  51. 20 20
      src/data/partnersList.json
  52. 12 12
      src/data/projectCardList.json
  53. 52 61
      src/pages/main/Business.jsx
  54. 33 33
      src/pages/main/Directions.jsx
  55. 73 0
      src/pages/main/Footer.jsx
  56. 1 1
      src/pages/main/Hero.jsx
  57. 18 18
      src/pages/main/Partners.jsx
  58. 40 32
      src/pages/main/Project.jsx
  59. 7 5
      src/pages/main/index.jsx

+ 38 - 0
deploy.ps1

@@ -0,0 +1,38 @@
+# UTF-8 Encoding Setup
+[Console]::OutputEncoding = [Text.UTF8Encoding]::new()
+chcp 65001 > $null
+
+# ===== Settings =====
+$KEY = ".\1.key"
+$USER = "ubuntu"
+$REMOTE_HOST = "129.154.58.6"
+$REMOTE_DIR = "/var/www/bandosj.com/public_html"
+$ARCHIVE_NAME = "dist.tar.gz"
+
+# ===== Compress =====
+Write-Host "📦 Compressing dist directory..."
+tar -czf $ARCHIVE_NAME -C dist .
+
+# ===== Transfer file =====
+Write-Host "🚀 Uploading archive file..."
+# Use braces to avoid variable parsing errors in PowerShell
+scp -i $KEY $ARCHIVE_NAME "${USER}@${REMOTE_HOST}:/tmp/${ARCHIVE_NAME}"
+if ($LASTEXITCODE -ne 0) {
+    Write-Error "❌ File transfer failed"
+    exit 1
+}
+
+# ===== Extract and deploy on remote server =====
+Write-Host "🔧 Deploying on remote server..."
+ssh -i $KEY "$USER@$REMOTE_HOST" @"
+    sudo mkdir -p '$REMOTE_DIR'
+    sudo rm -rf '$REMOTE_DIR/*'
+    sudo tar -xzf /tmp/$ARCHIVE_NAME -C '$REMOTE_DIR'
+    sudo rm /tmp/$ARCHIVE_NAME
+"@
+
+# ===== Clean up local =====
+Remove-Item $ARCHIVE_NAME
+
+# ===== Done =====
+Write-Host "✅ Deployment complete! Check your site at http://bandosj.com"

+ 1 - 1
index.html

@@ -3,7 +3,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet">
+    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&display=swap" rel="stylesheet">
     <title>(주)반도산전</title>
     <script type="text/javascript" src="https://oapi.map.naver.com/openapi/v3/maps.js?ncpKeyId=10byjktu3p"></script>
   </head>

BIN
public/business/ICT.jpg


BIN
public/business/OSP기간통신사업.jpg


BIN
public/business/설계견적.jpg


BIN
public/business/소방설비공사.jpg


+ 0 - 0
public/hero3.jpg → public/business/전기설비공사.jpg


BIN
public/business/정보통신공사.jpg


BIN
public/business/정보통신설비유지보수.jpg


BIN
public/business/제품생산RND.jpg


BIN
public/business/친환경공사.jpg


BIN
public/business/통합보안시스템.jpg


BIN
public/footer/KTR마크.png


BIN
public/footer/ci.png


File diff suppressed because it is too large
+ 6 - 0
public/footer/footerLogo.svg


BIN
public/footer/벤처기업인증마크.png


BIN
public/footer/중소기업청.png


BIN
public/hero2.png


BIN
public/img.png


BIN
public/partners/DL.png


BIN
public/partners/DLENC.png


BIN
public/partners/GS건설.png


BIN
public/partners/HDC현대산업개발.png


BIN
public/partners/KT.png


BIN
public/partners/KT2.png


BIN
public/partners/kt넷코어.png


BIN
public/partners/sk에코플랜트.png


BIN
public/partners/롯데건설.png


BIN
public/partners/몰라.png


BIN
public/partners/삼성물산.png


BIN
public/partners/포스코.png


BIN
public/partners/한화.png


BIN
public/partners/현대건설.png


BIN
public/partners/현대엔지니어링.png


BIN
public/partners/호반.png


BIN
public/project/CU물류창고.jpg


BIN
public/project/G7.png


BIN
public/project/김해물류센터.png


BIN
public/project/덕산병원.jpg


BIN
public/project/데이터센터.jpg


BIN
public/project/드메르.jpg


BIN
public/project/롯데리조트제주.jpg


BIN
public/project/롯데호텔.jpg


BIN
public/project/메디타운.jpg


BIN
public/project/서희스타힐스.jpg


BIN
public/project/아트리움.jpg


BIN
public/project/통합망.jpg


+ 4 - 6
src/componenets/Header.jsx

@@ -5,7 +5,7 @@ const Header = () => {
     const [activeIndex, setActiveIndex] = useState(null);
 
     return (
-        <header className="fixed top-0 left-0 right-0 flex items-center h-20 w-full bg-white z-10">
+        <header className="fixed top-0 left-0 right-0 flex items-center h-20 w-full bg-white z-30">
             <article
                 id="sidebar-dimmer"
                 className={`fixed top-20 left-0 w-full h-full transition-opacity duration-500 ease-in-out ${activeIndex !== null ? 'bg-black/50 opacity-100 pointer-events-auto' : 'opacity-0 pointer-events-none'}`}
@@ -33,12 +33,12 @@ const Header = () => {
                         {activeIndex === index && item.children.length > 0 && (
                             <div
                                 id="overlab-menu"
-                                className="absolute flex flex-col space-y-6 mt-13 p-4 z-10 bg-blue-900 text-white cursor-pointer"
+                                className="absolute flex flex-col space-y-6 mt-13 pt-4 z-10 bg-blue-900 text-white cursor-pointer"
                             >
                                 {item.children.map((child, cIdx) => (
                                     <div
                                         key={cIdx}
-                                        className="relative inline-block text-md font-light font-['Inter'] text-white hover:text-white/80 transition-colors duration-200 group cursor-pointer"
+                                        className="relative inline-block text-md text-center font-light font-['Inter'] text-white whitespace-pre-line hover:text-white/80 transition-colors duration-200 group cursor-pointer"
                                     >
                                         <span className="relative">
                                             {child.label}
@@ -53,9 +53,7 @@ const Header = () => {
             </nav>
             
             {activeIndex !== null && (
-                <div id="menuBox" className="absolute w-full h-[50vh] top-20 bg-blue-900" onMouseLeave={() => setActiveIndex(null)}>
-                    
-                </div>
+                <div id="menuBox" className="absolute w-full h-[50vh] top-20 border bg-blue-900" onMouseLeave={() => setActiveIndex(null)}></div>
             )}
         </header>
     );

+ 24 - 24
src/data/businessItems.json

@@ -1,52 +1,52 @@
 [
-  {
-    "label": "전기설비공사",
-    "image": "/hero3.jpg",
-    "url": "/business/electric"
-  },
   {
     "label": "정보통신공사",
-    "image": "/hero3.jpg",
+    "image": "/business/정보통신공사.jpg",
     "url": "/business/communication"
   },
   {
-    "label": "ICT",
-    "image": "/hero3.jpg",
+    "label": "전기설비공사",
+    "image": "/business/전기설비공사.jpg",
+    "url": "/business/electric"
+  },
+  {
+    "label": "소방설비공사",
+    "image": "/business/소방설비공사.jpg",
     "url": "/business/ict"
   },
   {
-    "label": "통합보안시스템",
-    "image": "/hero3.jpg",
+    "label": "OSP 기간통신사업",
+    "image": "/business/OSP기간통신사업.jpg",
     "url": "/business/security"
   },
   {
-    "label": "소방설비공사",
-    "image": "/hero3.jpg",
+    "label": "친환경공사",
+    "image": "/business/친환경공사.jpg",
     "url": "/business/fire"
   },
   {
-    "label": "OSP 기간통신사업",
-    "image": "/hero3.jpg",
+    "label": "ICT",
+    "image": "/business/ICT.jpg",
     "url": "/business/osp"
   },
-  {
-    "label": "설계(CAD)\n견적(실행 제안)",
-    "image": "/hero3.jpg",
-    "url": "/business/cad"
-  },
   {
     "label": "정보통신설비\n유지보수",
-    "image": "/hero3.jpg",
+    "image": "/business/정보통신설비유지보수.jpg",
     "url": "/business/maintenance"
   },
+  {
+    "label": "통합보안시스템",
+    "image": "/business/통합보안시스템.jpg",
+    "url": "/business/eco"
+  },
   {
     "label": "제품생산\nR&D",
-    "image": "/hero3.jpg",
+    "image": "/business/제품생산RND.jpg",
     "url": "/business/production"
   },
   {
-    "label": "친환경공사",
-    "image": "/hero3.jpg",
-    "url": "/business/eco"
+    "label": "설계(CAD)\n견적(실행 제안)",
+    "image": "/business/설계견적.jpg",
+    "url": "/business/cad"
   }
 ]

+ 7 - 13
src/data/menuItems.json

@@ -3,20 +3,20 @@
         "label": "사업소개",
         "href": "/company",
         "children": [
-            { "label": "대표 시공사례", "href": "/ceo" }
+            { "label": "주요 사업", "href": "/ceo" },
+            { "label": "주요 랜드마크\n시공현장", "href": "/ceo" }
         ]
     },
     {
         "label": "기업소개",
         "href": "/business",
         "children": [
-            { "label": "CEO인사말", "href": "/ceo" },
+            { "label": "CEO 인사말", "href": "/ceo" },
+            { "label": "협력사", "href": "/office" },
             { "label": "연혁", "href": "/history" },
+            { "label": "찾아오시는 길", "href": "/patent" },
             { "label": "조직도", "href": "/organization" },
-            { "label": "사무실 전경", "href": "/office" },
-            { "label": "특허/인증", "href": "/patent" },
-            { "label": "협력업체", "href": "/partners" },
-            { "label": "찾아오시는길", "href": "/location" }
+            { "label": "갤러리", "href": "/partners" }
         ]
     },
     {
@@ -27,17 +27,11 @@
             { "label": "ESG 보고서", "href": "/history" }
         ]
     },
-    {
-        "label": "ICT",
-        "href": "/support",
-        "children": [
-            { "label": "ICT", "href": "/notice" }
-        ]
-    },
     {
         "label": "주요실적",
         "href": "/support",
         "children": [
+            { "label": "주요실적", "href": "/notice" },
             { "label": "인증서 및 면허", "href": "/notice" }
         ]
     }

+ 20 - 20
src/data/partnersList.json

@@ -2,101 +2,101 @@
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/포스코.png"
   },
   {
     "title": "롯데캐슬 드메르",
     "description": "발주처 : 롯데건설\n부산 북항 초고층 복합개발사업 중 통신공사 (롯데 드메르)\n계약금액 : 1,351,200,000원",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/DL.png"
   },
   {
     "title": "협성마리나 G7",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/DL.png"
   },
   {
     "title": "국방광대역 통합망",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/DL.png"
   },
   {
     "title": "수원 덕산병원",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/GS건설.png"
   },
   {
     "title": "강서구 BGF 리테일 CU 물류창고",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/sk에코플랜트.png"
   },
   {
     "title": "기장 오시리아 메디타운",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/KT.png"
   },
   {
     "title": "부산대학교병원 아트리움",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/HDC현대산업개발.png"
   },
   {
     "title": "김해물류센터",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/kt넷코어.png"
   },
   {
     "title": "롯데호텔앤리조트 김해",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/DLENC.png"
   },
   {
     "title": "롯데리조트제주 아트발라스",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/현대건설.png"
   },
   {
     "title": "부암 서희 스타힐스",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/partners/한화.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/KT2.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/현대엔지니어링.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/호반.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/삼성물산.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/몰라.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/포스코.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/sk에코플랜트.png"
   },
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/partners/현대건설.png"
   }
 ]

+ 12 - 12
src/data/projectCardList.json

@@ -2,61 +2,61 @@
   {
     "title": "BNK 경남은행 전산 & 데이터센터",
     "description": "",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/project/데이터센터.jpg"
   },
   {
     "title": "롯데캐슬 드메르",
     "description": "발주처 : 롯데건설\n부산 북항 초고층 복합개발사업 중 통신공사 (롯데 드메르)\n계약금액 : 1,351,200,000원",
-    "imageUrl": "/hero3.jpg"
+    "imageUrl": "/project/드메르.jpg"
   },
   {
     "title": "협성마리나 G7",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/G7.png"
   },
   {
     "title": "국방광대역 통합망",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/통합망.jpg"
   },
   {
     "title": "수원 덕산병원",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/덕산병원.jpg"
   },
   {
     "title": "강서구 BGF 리테일 CU 물류창고",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/CU물류창고.jpg"
   },
   {
     "title": "기장 오시리아 메디타운",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/메디타운.jpg"
   },
   {
     "title": "부산대학교병원 아트리움",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/아트리움.jpg"
   },
   {
     "title": "김해물류센터",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/김해물류센터.png"
   },
   {
     "title": "롯데호텔앤리조트 김해",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/롯데호텔.jpg"
   },
   {
     "title": "롯데리조트제주 아트발라스",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/롯데리조트제주.jpg"
   },
   {
     "title": "부암 서희 스타힐스",
     "description": "",
-    "imageUrl": "/hero3.png"
+    "imageUrl": "/project/서희스타힐스.jpg"
   }
 ]

+ 52 - 61
src/pages/main/Business.jsx

@@ -2,15 +2,42 @@ import React from 'react';
 import DarkOverlay from "@/componenets/DarkOverlay.jsx";
 import businessItems from '@/data/businessItems.json';
 
+const RankBox = (title, rank, topPercent) => (
+    <div className="w-80 inline-flex flex-col">
+        <div className="h-7 mb-10 relative">
+            <div className="w-36 left-[84px] top-0 absolute text-center justify-start text-black/40 text-2xl font-medium font-['Inter']">
+                {title}
+            </div>
+        </div>
+        <div className="inline-flex">
+            <div className="flex-1 h-16 flex items-center justify-center text-black/40 text-3xl font-medium font-['Inter']">
+                지역
+            </div>
+            <div className="flex-1 h-16 flex items-center justify-center text-blue-900 text-6xl font-semibold font-['Inter']">
+                {rank}
+            </div>
+        </div>
+        <div className="inline-flex">
+            <div className="flex-1 h-16 flex items-center justify-center text-black/40 text-3xl font-medium font-['Inter']">
+                상위
+            </div>
+            <div className="flex-1 h-16 flex items-center justify-center text-blue-900 text-6xl font-bold font-['Inter']">
+                {topPercent}
+            </div>
+        </div>
+    </div>
+);
+
+
 const Business = () => {
     return (
-        <div className="px-[2vw] py-[4vw] space-y-[5vw]">
+        <div className="max-w-7xl mx-auto px-[2vw] py-[4vw] space-y-[5vw]">
             {/* 주요 사업 */}
             <div>
                 {/* 텍스트 영역 */}
-                <div className="space-y-2 mb-4">
-                    <div className="text-blue-900 text-5xl font-bold font-['Inter']">반도산전 Business Solution</div>
-                    <div className="text-zinc-500 text-lg font-bold font-['Inter']">반도산전이 선도하는 힘</div>
+                <div className="space-y-3 mb-8">
+                    <div className="text-blue-900 text-4xl font-bold font-['Inter']">반도산전 Business Solution</div>
+                    <div className="text-zinc-500 text-md font-bold font-['Inter']">반도산전이 선도하는 힘</div>
                 </div>
 
                 {/* 이미지 영역 */}
@@ -25,8 +52,8 @@ const Business = () => {
                             <DarkOverlay />
                             
                             <div className="relative p-4">
-                                <div className="text-white text-xl font-bold font-['Inter'] whitespace-pre-line">{item.label}</div>
-                                <div className="text-white text-lg font-bold font-['Inter']">→</div>
+                                <div className="text-white text-md font-bold font-['Inter'] whitespace-pre-line">{item.label}</div>
+                                <div className="text-white text-sm font-bold font-['Inter']">→</div>
                             </div>
                         </a>
                     ))}
@@ -37,70 +64,34 @@ const Business = () => {
             <div>
                 {/* 텍스트 영역 */}
                 <div className="space-y-2 mb-2.5 pb-10">
-                    <div className="text-5xl text-blue-900 font-bold font-['Inter']">반도산전은</div>
+                    <div className="text-4xl text-blue-900 font-bold font-['Inter']">반도산전은</div>
                 </div>
                 <div>
-                    <div className="text-center">
-                        <span className="text-zinc-600 text-2xl font-semibold font-['Inter'] leading-[70px]">1997년부터 2025년까지 </span>
-                        <span className="text-blue-900 text-5xl font-semibold font-['Inter'] leading-[70px]">27</span>
-                        <span className="text-zinc-600 text-2xl font-semibold font-['Inter'] leading-[70px]">년간 축적된 기술력과 신뢰를 바탕으로,<br/>부산  ·  울산  ·  경남 시공능력평가 </span>
-                        <span className="text-blue-900 text-5xl font-semibold font-['Inter'] leading-[70px]">1</span>
-                        <span className="text-zinc-600 text-2xl font-semibold font-['Inter'] leading-[70px]">위를 달성하였으며,<br/></span>
-                        <span className="text-blue-900 text-5xl font-semibold font-['Inter'] leading-[70px]">947</span>
-                        <span className="text-zinc-600 text-2xl font-semibold font-['Inter'] leading-[70px]">억 매출을 달성한 외감법인입니다.</span>
+                    <div className="text-center mb-15">
+                        <span className="text-zinc-600 font-semibold font-['Inter'] leading-[60px] text-xl">1997년부터 2025년까지 </span>
+                        <span className="text-blue-900 font-semibold font-['Inter'] leading-[60px] text-4xl">27</span>
+                        <span className="text-zinc-600 font-semibold font-['Inter'] leading-[60px] text-xl">년간 축적된 기술력과 신뢰를 바탕으로,<br/>부산  ·  울산  ·  경남 시공능력평가 </span>
+                        <span className="text-blue-900 font-semibold font-['Inter'] leading-[60px] text-4xl">1</span>
+                        <span className="text-zinc-600 font-semibold font-['Inter'] leading-[60px] text-xl">위를 달성하였으며,<br/></span>
+                        <span className="text-blue-900 font-semibold font-['Inter'] leading-[60px] text-4xl">947</span>
+                        <span className="text-zinc-600 font-semibold font-['Inter'] leading-[60px] text-xl">억 매출을 달성한 외감법인입니다.</span>
                     </div>
                     <div className="flex h-60 items-center">
                         <div className="flex-1 flex justify-center">
-                            <div className="w-80 space-y-2 inline-flex flex-col">
-                                <div className="h-7 relative">
-                                    <div className="w-36 left-[84px] top-0 absolute text-center justify-start text-black/40 text-2xl font-medium font-['Inter']">전기공사</div>
-                                </div>
-                                <div className="self-stretch inline-flex justify-start items-start">
-                                    <div className="flex-1 h-16 text-center justify-end text-black/40 text-3xl font-medium font-['Inter']">지역</div>
-                                    <div className="flex-1 self-stretch text-center justify-center text-blue-900 text-6xl font-semibold font-['Inter']">15위</div>
-                                </div>
-                                <div className="self-stretch inline-flex justify-start items-start">
-                                    <div className="flex-1 h-16 text-center justify-end text-black/40 text-3xl font-medium font-['Inter']">상위</div>
-                                    <div className="flex-1 self-stretch text-center justify-center text-blue-900 text-6xl font-bold font-['Inter']">5%</div>
-                                </div>
-                            </div>
+                            {RankBox("전기공사", "15위", "5%")}
                         </div>
-                        <div className="flex-1 flex justify-center">
-                            <div className="p-2.5">
-                                <div className="w-24 h-24 relative overflow-hidden">
-                                    <div className="w-12 h-10 left-[40.83px] top-[4.08px] absolute bg-blue-900" />
-                                    <div className="w-12 h-10 left-[8.17px] top-[4.08px] absolute bg-blue-900" />
-                                    <div className="w-14 h-14 left-[20.42px] top-[36.75px] absolute bg-slate-200" />
-                                </div>
-                            </div>
-                            <div className="w-80 inline-flex flex-col">
-                                <div className="self-stretch h-7 relative">
-                                    <div className="w-36 left-[84px] top-0 absolute text-center justify-start text-black/40 text-2xl font-medium font-['Inter']">통신공사</div>
-                                </div>
-                                <div className="self-stretch inline-flex justify-start items-start">
-                                    <div className="flex-1 h-16 text-center justify-end text-black/40 text-3xl font-medium font-['Inter']">지역</div>
-                                    <div className="flex-1 self-stretch text-center justify-center text-blue-900 text-6xl font-bold font-['Inter']">1위</div>
-                                </div>
-                                <div className="self-stretch inline-flex justify-start items-start">
-                                    <div className="flex-1 h-16 text-center justify-end text-black/40 text-3xl font-medium font-['Inter']">상위</div>
-                                    <div className="flex-1 self-stretch text-center justify-center text-blue-900 text-6xl font-bold font-['Inter']">1%</div>
-                                </div>
+                        <div className="border-x-2 border-gray-300 mx-8 flex-1 flex justify-center items-center">
+                            <div className="pl-4 inline-flex justify-start items-center">
+                                <svg width="98" height="99" viewBox="0 0 98 99" fill="none" xmlns="http://www.w3.org/2000/svg">
+                                    <path d="M40.8333 45.4166H65.3333L89.7925 4.58325H65.2925L40.8333 45.4166Z" fill="#1E3A8A"/>
+                                    <path d="M57.1258 45.4166H32.6258L8.16666 4.58325H32.6667L57.1258 45.4166Z" fill="#1E3A8A"/>
+                                    <path d="M49 94.4167C64.7862 94.4167 77.5833 81.6195 77.5833 65.8333C77.5833 50.0472 64.7862 37.25 49 37.25C33.2139 37.25 20.4167 50.0472 20.4167 65.8333C20.4167 81.6195 33.2139 94.4167 49 94.4167Z" fill="#E7ECEF"/>
+                                </svg>
                             </div>
+                            {RankBox("통신공사", "1위", "1%")}
                         </div>
                         <div className="flex-1 flex justify-center">
-                            <div className="w-80 self-stretch inline-flex flex-col justify-start items-start">
-                                <div className="self-stretch h-7 relative">
-                                    <div className="w-36 left-[84px] top-0 absolute text-center justify-start text-black/40 text-2xl font-medium font-['Inter']">전기공사</div>
-                                </div>
-                                <div className="self-stretch inline-flex justify-start items-start">
-                                    <div className="flex-1 h-16 text-center justify-end text-black/40 text-3xl font-medium font-['Inter']">지역</div>
-                                    <div className="flex-1 self-stretch text-center justify-center text-blue-900 text-6xl font-semibold font-['Inter']">9위</div>
-                                </div>
-                                <div className="self-stretch inline-flex justify-start items-start">
-                                    <div className="flex-1 h-16 text-center justify-end text-black/40 text-3xl font-medium font-['Inter']">상위</div>
-                                    <div className="flex-1 self-stretch text-center justify-center text-blue-900 text-6xl font-semibold font-['Inter']">2%</div>
-                                </div>
-                            </div>
+                            {RankBox("전기공사", "9위", "2%")}
                         </div>
                     </div>
                 </div>

+ 33 - 33
src/pages/main/Directions.jsx

@@ -1,38 +1,38 @@
 import React, { useState, useEffect, useRef } from 'react';
 
+const tabs = [
+    { id: 'busan', label: '부산 본사' },
+    { id: 'gimhae', label: '김해 공장' },
+    { id: 'seoul', label: '서울 경기지사' },
+];
+
+const tabContent = {
+    busan: {
+        lat: 35.170833,
+        lng: 129.130833,
+        address: '부산 해운대구 센텀중앙로 78, 1308호(센텀그린타워)',
+        phone: '051-808-8556',
+    },
+    gimhae: {
+        lat: 35.207,
+        lng: 128.848,
+        address: '경남 김해시 주촌면 골든루트로 80-16',
+        phone: '055-123-4567',
+    },
+    seoul: {
+        lat: 37.501274,
+        lng: 127.039585,
+        address: '서울 강남구 테헤란로 123, 5층',
+        phone: '02-987-6543',
+    },
+};
+
 const Directions = () => {
     const [activeTab, setActiveTab] = useState('busan');
     const mapRef = useRef(null);
     const mapInstanceRef = useRef(null);
     const markerRef = useRef(null); // ✅ 마커 참조 추가
 
-    const tabs = [
-        { id: 'busan', label: '부산 본사' },
-        { id: 'gimhae', label: '김해 공장' },
-        { id: 'seoul', label: '서울 경기지사' },
-    ];
-
-    const tabContent = {
-        busan: {
-            lat: 35.170833,
-            lng: 129.130833,
-            address: '부산 해운대구 센텀중앙로 78, 1308호(센텀그린타워)',
-            phone: '051-808-8556',
-        },
-        gimhae: {
-            lat: 35.207,
-            lng: 128.848,
-            address: '경남 김해시 주촌면 골든루트로 80-16',
-            phone: '055-123-4567',
-        },
-        seoul: {
-            lat: 37.501274,
-            lng: 127.039585,
-            address: '서울 강남구 테헤란로 123, 5층',
-            phone: '02-987-6543',
-        },
-    };
-
     useEffect(() => {
         const { naver } = window;
         if (!naver || !mapRef.current) return;
@@ -58,20 +58,20 @@ const Directions = () => {
             position,
             map: mapInstanceRef.current,
         });
-    }, [activeTab, tabContent]);
+    }, [activeTab]);
 
     return (
         <div className="px-[2vw] py-[4vw] space-y-[5vw]">
-            <div>
+            <div className="max-w-7xl mx-auto">
                 <div className="space-y-2 mb-2.5 pb-10">
-                    <div className="text-5xl text-blue-900 font-bold font-['Inter']">찾아오시는 길</div>
+                    <div className="text-4xl text-blue-900 font-bold font-['Inter']">찾아오시는 길</div>
                 </div>
 
-                <div className="h-40 flex text-center items-center justify-around">
+                <div className="mx-30 h-40 flex text-center items-center justify-around">
                     {tabs.map((tab, idx) => (
                         <div
                             key={tab.id}
-                            className={`w-full py-6 cursor-pointer text-4xl font-semibold font-['Inter'] ${
+                            className={`w-full py-6 cursor-pointer text-2xl font-semibold font-['Inter'] ${
                                 idx !== 0 ? 'border-l' : ''
                             } ${idx !== tabs.length - 1 ? 'border-r' : ''} ${
                                 activeTab === tab.id ? 'text-black' : 'text-black/25'
@@ -85,7 +85,7 @@ const Directions = () => {
                 </div>
                 
                 <div className="mx-30">
-                    <div className="border" style={{ height: '500px' }}>
+                    <div style={{ height: '500px' }}>
                         <div id="map" ref={mapRef} style={{ width: '100%', height: '100%' }} />
                     </div>
 

+ 73 - 0
src/pages/main/Footer.jsx

@@ -0,0 +1,73 @@
+import React from 'react';
+
+const Footer = () => {
+    return (
+        <footer className="relative w-full bg-neutral-800 text-white">
+            <div className="w-full h-0 pt-15 outline outline-offset-[-0.50px] outline-gray-600"></div>
+            
+            <div className="max-w-screen-xl mx-auto px-8 mt-10 flex flex-col ">
+                {/* 로고 및 텍스트 블럭 */}
+                <div className="flex gap-8">
+                    {/* 로고 */}
+                    <div className="">
+                        <img className="w-24 h-16" src="/footer/footerLogo.svg" alt="Logo" />
+                    </div>
+
+                    {/* 회사 정보 2단 그리드 */}
+                    <div className="grid grid-cols-2 flex-grow text-sm font-light leading-relaxed">
+                        {/* 부산 본사 */}
+                        <div className="space-y-5">
+                            <p className="text-gray-300 font-['Noto_Sans_KR']">
+                                회사명 : 반도산전(주)<br />
+                                대표자 : 서보석<br />
+                                사업자등록번호 : 605-81-32247<br />
+                                주소 : 부산 해운대구 센텀중앙로 78, 1308호 (센텀그린타워)<br />
+                                대표번호 : 051-808-8556<br />
+                                FAX : 051-808-8657
+                            </p>
+                            
+                            {/*/!* 카피라이트 *!/*/}
+                            <div className="flex text-xs font-light text-right text-gray-500 font-['Inter']">
+                                © BANDO INDUSTRIAL SYSTEM CO., LTD. All rights reserved.
+                            </div>
+                        </div>
+
+                        {/* 공장 및 지사 */}
+                        <div className="space-y-6 text-gray-300 font-['Noto_Sans_KR']">
+                            <div>
+                                <p>경남 김해 공장 : 경남 김해시 서김해산단안길 2 (명법동)</p>
+                                <p>번호 : 055 - 339 - 8550</p>
+                                <p>FAX : 055 - 313 - 0998</p>
+                            </div>
+                            <div>
+                                <p>서울 경기지사 : 경기 하남시 미사강변한강로135, 나동 902호</p>
+                                <p>번호 : 031 - 794 - 2967</p>
+                                <p>FAX : 031 - 794 - 3476</p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                {/* SNS 아이콘 영역 */}
+                <div className="flex justify-end mb-10 gap-6">
+                    <img className="w-20 h-11" src="/footer/KTR마크.png" alt="icon1" />
+                    <img className="w-12 h-11" src="/footer/중소기업청.png" alt="icon2" />
+                    <img className="w-12 h-11" src="/footer/벤처기업인증마크.png" alt="icon3" />
+                    <img className="w-16 h-11" src="/footer/ci.png" alt="icon4" />
+                </div>
+            </div>
+            
+            {/* TOP 버튼 */}
+            <div
+                className="absolute top-[-40px] right-[10%] cursor-pointer"
+                onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })}
+            >
+                <div className="w-20 h-20 bg-zinc-300 rounded-full" />
+                <div className="w-6 left-[25px] top-[42px] absolute origin-top-left -rotate-90 text-center justify-start text-black text-2xl font-thin font-['Inter']">{">"}</div>
+                <div className="left-[21px] top-[42.50px] absolute text-center justify-start text-black text-xl font-thin font-['Inter']">TOP</div>
+            </div>
+        </footer>
+    );
+};
+
+export default Footer;

+ 1 - 1
src/pages/main/Hero.jsx

@@ -32,7 +32,7 @@ const Hero = () => {
             <DarkOverlay />
 
             {/* 🔹 콘텐츠 */}
-            <div className="relative flex flex-col gap-10">
+            <div className="relative flex flex-col mt-15 gap-10">
                 <div className="text-center justify-center text-white text-6xl font-semibold font-['Inter']">
                     스마트 네트워크 리더 반도산전
                 </div>

+ 18 - 18
src/pages/main/Partners.jsx

@@ -5,30 +5,30 @@ import partnerList from '@/data/partnersList.json';
 const Partners = () => {
     return (
         <div
-            className="relative flex-col justify-items-center w-full
-             pt-10 pb-20 bg-cover bg-center gap-5 px-[2vw]"
+            className="relative w-full pt-10 pb-20 bg-cover bg-center"
             style={{backgroundImage: 'url(/partners-bg.jpg)'}}
         >
             <DarkOverlay/>
-
-            <div className="w-full h-25">
-                <div className="relative w-full space-y-2">
-                    <div className="text-white text-5xl font-semibold font-['Inter']">협력사</div>
-                    <div className="text-white text-lg font-semibold font-['Inter']">50개가 넘는 신뢰받는 기업과 상생하고 있습니다.</div>
+            <div className="max-w-7xl mx-auto relative flex-col justify-items-center">
+                <div className="w-full mb-5 h-25">
+                    <div className="relative w-full space-y-2">
+                        <div className="text-white text-5xl font-semibold font-['Inter']">협력사</div>
+                        <div className="text-white text-lg font-semibold font-['Inter']">50개가 넘는 신뢰받는 기업과 상생하고 있습니다.
+                        </div>
+                    </div>
                 </div>
-            </div>
 
-            <div className="relative w-[70%] grid grid-cols-5 justify-items-center gap-y-15">
-                {partnerList.map((partner, index) => (
-                    <div key={index} className="w-36 h-16">
-                        <div
-                            className="flex-1 self-stretch bg-white inline-flex flex-col justify-center items-center gap-2.5">
-                            <div className="self-stretch flex-1 p-2.5 flex flex-col justify-start items-start gap-2.5">
-                                <img className="self-stretch flex-1" src="https://placehold.co/130x50"/>
-                            </div>
+                <div className="mb-5 grid grid-cols-5 justify-items-center gap-x-20 gap-y-10">
+                    {partnerList.map((partner, index) => (
+                        <div key={index} className="w-36 h-16 bg-white flex items-center justify-center">
+                            <img
+                                src={partner.imageUrl}
+                                alt={`Partner logo ${index}`}
+                                className="max-w-full max-h-full object-contain"
+                            />
                         </div>
-                    </div>
-                ))}
+                    ))}
+                </div>
             </div>
         </div>
     )

+ 40 - 32
src/pages/main/Project.jsx

@@ -1,46 +1,54 @@
 import React from 'react';
 import projectList from '@/data/projectCardList.json';
+import DarkOverlay from "@/componenets/DarkOverlay.jsx";
 
 const Project = () => {
     return (
         <div className="w-full py-12 px-10 bg-blue-900">
-            <div className="pb-5">
-                <div className="text-white text-5xl font-semibold font-['Inter']">주요 랜드마크 프로젝트 시공현장</div>
-            </div>
+            <div className="max-w-7xl mx-auto">
+                <div className="pb-5">
+                    <div className="text-white text-4xl font-semibold font-['Inter']">주요 랜드마크 프로젝트 시공현장</div>
+                </div>
 
-            {/* cardList */}
-            <div className="grid grid-cols-4 gap-x-8 gap-y-10 mt-10">
-                {projectList.map((project, index) => (
-                    <div key={index} className="relative overflow-hidden rounded-lg shadow-lg group">
-                        <img
-                            src={project.imageUrl}
-                            alt={project.title}
-                            className="w-full aspect-[4/3] object-cover"
-                        />
+                {/* cardList */}
+                
+                <div className="relative grid grid-cols-3 gap-x-8 gap-y-10 mt-10">
+                    
+                    {projectList.map((project, index) => (
+                        <div key={index} className="relative shadow-lg group cursor-pointer">
+                            {/* 그라디언트 오버레이 */}
+                            <div className="absolute inset-0 bg-gradient-to-b from-transparent to-black/60" />
 
-                        <div className="">
-                            <h3 className='absolute z-10 left-6 top-[77%] group-hover:top-[30%] transition-all duration-500 ease-in-out text-lg text-white font-semibold'>
-                                {project.title}
-                            </h3>
-                            <div className="absolute z-10 left-6 top-[85%] text-xs text-white leading-7">MORE +</div>
-                        </div>
+                            <img
+                                src={project.imageUrl}
+                                alt={project.title}
+                                className="w-full aspect-[4/3] object-cover"
+                            />
+
+                            <div className="">
+                                <h3 className='absolute z-10 left-6 top-[77%] group-hover:top-[30%] transition-all duration-500 ease-in-out text-lg text-white font-semibold'>
+                                    {project.title}
+                                </h3>
+                                <div className="absolute z-10 left-6 top-[85%] text-xs text-white leading-7">MORE +</div>
+                            </div>
 
-                        <div className="absolute inset-0 bg-gradient-to-t from-black/80 opacity-0 group-hover:opacity-100 transition-opacity duration-300 ease-in-out flex flex-col justify-center">
-                            {project.description && (
-                                <div className="absolute left-6 right-6 top-[60%] group-hover:top-[40%] transition-all duration-500 ease-in-out">
-                                    <p className="text-sm text-white leading-8 whitespace-pre-line">
-                                        {project.description}
-                                    </p>
-                                </div>
-                            )}
+                            <div className="absolute inset-0 bg-gradient-to-t from-black/80 opacity-0 group-hover:opacity-100 transition-opacity duration-300 ease-in-out flex flex-col justify-center">
+                                {project.description && (
+                                    <div className="absolute left-6 right-6 top-[60%] group-hover:top-[40%] transition-all duration-500 ease-in-out">
+                                        <p className="text-sm text-white leading-8 whitespace-pre-line">
+                                            {project.description}
+                                        </p>
+                                    </div>
+                                )}
+                            </div>
                         </div>
+                    ))}
+                </div>
+
+                <div className="flex justify-center items-center my-20">
+                    <div className="w-44 px-8 py-3 outline outline-white">
+                        <div className="w-28 text-center text-white text-base font-semibold font-['Inter']">MORE</div>
                     </div>
-                ))}
-            </div>
-            
-            <div className="flex justify-center items-center my-20">
-                <div className="w-44 px-8 py-3 outline outline-white">
-                    <div className="w-28 text-center text-white text-base font-semibold font-['Inter']">MORE</div>
                 </div>
             </div>
         </div>

+ 7 - 5
src/pages/main/index.jsx

@@ -4,15 +4,17 @@ import Business from "./Business.jsx";
 import Project from "./Project.jsx";
 import Partners from "./Partners.jsx";
 import Directions from "@/pages/main/Directions.jsx";
+import Footer from "@/pages/main/Footer.jsx";
 
 const Main = () => {
     return (
         <>
-            <Hero />
-            <Business />
-            <Project />
-            <Partners />
-            <Directions />
+            <Hero/>
+            <Business/>
+            <Project/>
+            <Partners/>
+            <Directions/>
+            <Footer/>
         </>
     );
 };

Some files were not shown because too many files changed in this diff