kintex/stitch_kintex_ai_system_architect/scr_p3/code.html

428 lines
24 KiB
HTML

<!DOCTYPE html>
<html class="light" lang="ko"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>KINTEX - Interactive Floor Plan</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&amp;family=Geist:wght@500;600&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<script id="tailwind-config">
tailwind.config = {
darkMode: "class",
theme: {
extend: {
"colors": {
"on-surface": "#141b2c",
"surface-variant": "#dbe2fa",
"error-container": "#ffdad6",
"tertiary": "#003e28",
"outline": "#727781",
"primary-fixed": "#d3e4ff",
"surface-container-low": "#f1f3ff",
"secondary-fixed": "#e5deff",
"tertiary-fixed-dim": "#72daa9",
"on-tertiary-container": "#68d1a0",
"error": "#ba1a1a",
"inverse-surface": "#293042",
"on-surface-variant": "#424750",
"on-secondary-fixed": "#1b0063",
"secondary": "#5427e6",
"inverse-on-surface": "#eef0ff",
"surface-container-lowest": "#ffffff",
"surface-bright": "#faf8ff",
"on-error": "#ffffff",
"inverse-primary": "#a2c9ff",
"surface": "#faf8ff",
"on-primary-fixed": "#001c38",
"surface-container-highest": "#dbe2fa",
"surface-container-high": "#e1e7ff",
"on-secondary-fixed-variant": "#4500d8",
"on-background": "#141b2c",
"on-tertiary-fixed-variant": "#005236",
"secondary-fixed-dim": "#c9bfff",
"on-secondary-container": "#f3edff",
"on-primary": "#ffffff",
"primary": "#003765",
"error-red": "#ba1a1a",
"tertiary-container": "#00583b",
"on-tertiary-fixed": "#002113",
"on-primary-container": "#91c0ff",
"outline-variant": "#c1c7d3",
"surface-dim": "#d3d9f1",
"on-tertiary": "#ffffff",
"on-primary-fixed-variant": "#004881",
"on-error-container": "#93000a",
"surface-tint": "#24609e",
"surface-container": "#eaedff",
"background": "#faf8ff",
"secondary-container": "#6d4aff",
"primary-container": "#004e8b",
"primary-fixed-dim": "#a2c9ff",
"tertiary-fixed": "#8ef7c4",
"on-secondary": "#ffffff"
},
"borderRadius": {
"DEFAULT": "0.125rem",
"lg": "0.25rem",
"xl": "0.5rem",
"full": "0.75rem"
},
"spacing": {
"stack-sm": "8px",
"gutter": "16px",
"stack-lg": "24px",
"container-padding": "24px",
"stack-md": "16px",
"section-padding": "96px",
"base": "4px"
},
"fontFamily": {
"body-sm": ["Inter"],
"title-sm": ["Inter"],
"body-base": ["Inter"],
"display-lg": ["Inter"],
"label-md": ["Geist"],
"headline-md": ["Inter"],
"label-xs": ["Geist"],
"display-lg-mobile": ["Inter"]
},
"fontSize": {
"body-sm": ["13px", {"lineHeight": "18px", "fontWeight": "400"}],
"title-sm": ["18px", {"lineHeight": "28px", "fontWeight": "600"}],
"body-base": ["14px", {"lineHeight": "20px", "fontWeight": "400"}],
"display-lg": ["36px", {"lineHeight": "44px", "letterSpacing": "-0.02em", "fontWeight": "700"}],
"label-md": ["12px", {"lineHeight": "16px", "letterSpacing": "0.02em", "fontWeight": "600"}],
"headline-md": ["24px", {"lineHeight": "32px", "fontWeight": "600"}],
"label-xs": ["11px", {"lineHeight": "14px", "fontWeight": "500"}],
"display-lg-mobile": ["28px", {"lineHeight": "36px", "fontWeight": "700"}]
}
},
},
}
</script>
<style>
.material-symbols-outlined {
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
.floor-plan-grid {
background-image: radial-gradient(#c1c7d3 1px, transparent 1px);
background-size: 20px 20px;
}
.booth-rect {
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.booth-rect:hover {
transform: scale(1.02);
filter: brightness(1.1);
cursor: pointer;
}
.glass-panel {
background: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(12px);
}
</style>
</head>
<body class="bg-surface font-body-base text-on-surface">
<!-- TopNavBar -->
<nav class="bg-surface/80 backdrop-blur-md text-primary font-title-sm text-title-sm docked full-width top-0 sticky border-b border-outline-variant shadow-sm z-50 h-20 flex items-center">
<div class="flex justify-between items-center w-full px-container-padding max-w-7xl mx-auto h-full">
<div class="flex items-center gap-stack-lg">
<img alt="KINTEX Logo" class="h-10" src="https://lh3.googleusercontent.com/aida-public/AB6AXuC3-AXiHz8U0mlrCuAdZkxnW6WzX6EmmAjQsdJ-Qsk0VpGmX6QlQUtdgxIg_HN4Sp2FWR2KHC-gCfC-vFGWSUpi_yfG6qbQh2gvrzy4_XOzZiDLkVOTjFuSsNyHlKqnW4_QFTdbOJWYHU9j9G8UTpk6glTZgsbPfGbn19zIFT24xAdhEpK-WvgidWKQYfVm_HCjVg3d7fshoYwYwQlhn8I9Zy0bzQ59HwJv6Bm7YOosMvQe-M0h_NlFnHzsfV5wGmfMabGOh4vkziA"/>
<div class="hidden md:flex gap-gutter">
<a class="text-on-surface-variant hover:text-primary transition-colors" href="#">Exhibitions</a>
<a class="text-on-surface-variant hover:text-primary transition-colors" href="#">Facilities</a>
<a class="text-primary border-b-2 border-primary font-bold pb-1" href="#">Visitor Guide</a>
<a class="text-on-surface-variant hover:text-primary transition-colors" href="#">Schedule</a>
</div>
</div>
<div class="flex items-center gap-stack-md">
<div class="flex gap-4 items-center mr-4">
<span class="material-symbols-outlined text-on-surface-variant hover:bg-surface-container-low p-2 rounded-full cursor-pointer transition-all">language</span>
<span class="material-symbols-outlined text-on-surface-variant hover:bg-surface-container-low p-2 rounded-full cursor-pointer transition-all">search</span>
</div>
<button class="bg-primary text-on-primary px-6 py-2 rounded-lg font-label-md text-label-md active:scale-95 duration-150 ease-in-out">Tickets</button>
</div>
</div>
</nav>
<main class="max-w-[1440px] mx-auto flex h-[calc(100vh-80px)] overflow-hidden">
<!-- Left Sidebar: Search/Filter Panel -->
<aside class="w-80 border-r border-outline-variant bg-surface-container-lowest flex flex-col h-full z-20">
<div class="p-stack-lg border-b border-outline-variant">
<h2 class="font-headline-md text-headline-md mb-stack-md">업종 · 존 · 키워드</h2>
<!-- Search Input -->
<div class="relative mb-stack-lg">
<input class="w-full pl-10 pr-4 py-3 bg-surface-container-low border border-outline-variant rounded-full font-body-sm text-body-sm focus:outline-none focus:ring-2 focus:ring-primary/20 transition-all" placeholder="참가업체 또는 부스번호 검색" type="text"/>
<img alt="Search" class="absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 opacity-50" src="https://lh3.googleusercontent.com/aida/AP1WRLvR8KDDPFgH9vKk_aFJ_lA5WCSRmrDnPhJH5rSjuWilOAI5PMDe5z2hRnRLQhSn7_712ig52lC61Bb_R8bUkkbqNGZPv3dvykD_Oky9hXWygGnc1ybvaI9TcbT1Yw4Bd2JySNFbit4ho4113ql2BsDvpvJ2ZN64zJqv5GowDs0mdnDyFTwPWmGEKEPr3MigJ4LAaeegtd0fEG_pZWtGpsGSNPVdj4r_TbmkKSxdvmZG_kh-ujSkrXGZzkQ"/>
</div>
<!-- Categories -->
<div class="space-y-stack-sm mb-stack-lg">
<p class="font-label-md text-label-md text-on-surface-variant uppercase tracking-wider mb-2">분야별 필터</p>
<div class="flex flex-wrap gap-2">
<span class="bg-primary-fixed text-on-primary-fixed px-3 py-1.5 rounded-full text-label-xs font-label-md cursor-pointer hover:bg-primary hover:text-on-primary transition-colors">AI 솔루션</span>
<span class="bg-surface-container-high text-on-surface-variant px-3 py-1.5 rounded-full text-label-xs font-label-md cursor-pointer hover:bg-primary-fixed transition-colors">로보틱스</span>
<span class="bg-surface-container-high text-on-surface-variant px-3 py-1.5 rounded-full text-label-xs font-label-md cursor-pointer hover:bg-primary-fixed transition-colors">IoT</span>
<span class="bg-surface-container-high text-on-surface-variant px-3 py-1.5 rounded-full text-label-xs font-label-md cursor-pointer hover:bg-primary-fixed transition-colors">빅데이터</span>
</div>
</div>
<!-- Hall Selection -->
<div>
<p class="font-label-md text-label-md text-on-surface-variant uppercase tracking-wider mb-2">전시장 선택</p>
<select class="w-full p-2.5 bg-surface-container-low border border-outline-variant rounded-lg font-body-sm text-body-sm">
<option>제 1 전시장 - Hall 1-A</option>
<option>제 1 전시장 - Hall 1-B</option>
<option>제 2 전시장 - Hall 6</option>
</select>
</div>
</div>
<!-- Results List -->
<div class="flex-1 overflow-y-auto p-stack-md space-y-3">
<p class="font-label-xs text-on-surface-variant/70 mb-2">검색 결과 (42)</p>
<div class="p-stack-md bg-surface-container-lowest border-l-4 border-primary rounded-r-lg shadow-sm hover:shadow-md transition-all cursor-pointer group">
<div class="flex justify-between items-start">
<div>
<p class="font-label-md text-primary text-label-md mb-0.5">A-102</p>
<h3 class="font-title-sm text-on-surface group-hover:text-primary transition-colors">(주)테크솔루션</h3>
<p class="font-body-sm text-on-surface-variant">AI 최적화 솔루션</p>
</div>
<span class="material-symbols-outlined text-outline group-hover:text-primary">chevron_right</span>
</div>
</div>
<div class="p-stack-md bg-surface-container-lowest border-l-4 border-secondary rounded-r-lg shadow-sm hover:shadow-md transition-all cursor-pointer group">
<div class="flex justify-between items-start">
<div>
<p class="font-label-md text-secondary text-label-md mb-0.5">C-110</p>
<h3 class="font-title-sm text-on-surface group-hover:text-secondary transition-colors">미래로보틱스</h3>
<p class="font-body-sm text-on-surface-variant">자율 주행 물류 로봇</p>
</div>
<span class="material-symbols-outlined text-outline group-hover:text-secondary">chevron_right</span>
</div>
</div>
<div class="p-stack-md bg-surface-container-lowest border-l-4 border-tertiary-container rounded-r-lg shadow-sm hover:shadow-md transition-all cursor-pointer group">
<div class="flex justify-between items-start">
<div>
<p class="font-label-md text-tertiary-container text-label-md mb-0.5">B-205</p>
<h3 class="font-title-sm text-on-surface group-hover:text-tertiary-container transition-colors">데이터랩스</h3>
<p class="font-body-sm text-on-surface-variant">빅데이터 시각화 서비스</p>
</div>
<span class="material-symbols-outlined text-outline group-hover:text-tertiary-container">chevron_right</span>
</div>
</div>
<div class="p-stack-md bg-surface-container-lowest border-l-4 border-outline rounded-r-lg opacity-60">
<div class="flex justify-between items-start">
<div>
<p class="font-label-md text-outline text-label-md mb-0.5">D-101</p>
<h3 class="font-title-sm text-on-surface">글로벌 커넥트</h3>
<p class="font-body-sm text-on-surface-variant">준비 중</p>
</div>
<span class="text-label-xs font-label-md bg-surface-container-high px-2 py-0.5 rounded">준비중</span>
</div>
</div>
</div>
</aside>
<!-- Main Content: Interactive Map -->
<section class="flex-1 relative bg-surface-bright overflow-hidden">
<div class="absolute inset-0 floor-plan-grid opacity-30"></div>
<!-- Map Stage -->
<div class="absolute inset-0 flex items-center justify-center p-20 cursor-grab active:cursor-grabbing" id="map-stage">
<div class="relative w-[900px] h-[600px] bg-white border border-outline-variant shadow-xl p-8 transition-transform duration-300" id="map-container">
<h4 class="absolute top-4 left-6 font-label-md text-on-surface-variant/40">Hall 1-A Entrance</h4>
<div class="grid grid-cols-6 grid-rows-4 gap-4 w-full h-full p-4">
<!-- Booth A Area -->
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center relative overflow-hidden" onclick="showPopover(event, 'A-102', '(주)테크솔루션', 'AI 최적화')">
<span class="font-label-md text-primary">A-102</span>
<div class="absolute bottom-0 left-0 w-full h-1 bg-primary"></div>
</div>
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center relative overflow-hidden">
<span class="font-label-md text-primary">A-103</span>
</div>
<div class="col-span-2 row-span-1 bg-surface-container-high border-2 border-outline-variant/30 rounded-lg flex items-center justify-center">
<span class="font-label-md text-on-surface-variant">공용부 (Rest Area)</span>
</div>
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center relative overflow-hidden">
<span class="font-label-md text-primary">A-104</span>
</div>
<div class="booth-rect bg-secondary/10 border-2 border-secondary/40 rounded-lg flex items-center justify-center relative overflow-hidden">
<span class="font-label-md text-secondary">C-110</span>
</div>
<!-- Row 2 -->
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-primary">A-105</span>
</div>
<div class="col-span-3 bg-tertiary-fixed border-2 border-tertiary/20 rounded-lg flex items-center justify-center">
<span class="font-label-md text-tertiary">Main Stage Area</span>
</div>
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-primary">A-106</span>
</div>
<div class="booth-rect bg-secondary/10 border-2 border-secondary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-secondary">C-111</span>
</div>
<!-- Row 3: Reserved / Others -->
<div class="booth-rect bg-error-container/20 border-2 border-error/20 rounded-lg flex items-center justify-center">
<span class="font-label-md text-error">B-201</span>
<span class="absolute top-1 right-1 text-[8px] bg-error text-white px-1 rounded">R</span>
</div>
<div class="booth-rect bg-error-container/20 border-2 border-error/20 rounded-lg flex items-center justify-center">
<span class="font-label-md text-error">B-202</span>
</div>
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-primary">B-205</span>
</div>
<div class="booth-rect bg-primary/10 border-2 border-primary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-primary">B-206</span>
</div>
<div class="col-span-2 bg-surface-container border-2 border-outline-variant/30 rounded-lg flex items-center justify-center">
<span class="font-label-md text-on-surface-variant">Infomation Desk</span>
</div>
<!-- Row 4 -->
<div class="col-span-4 bg-surface-container-high border-2 border-outline-variant/30 rounded-lg flex items-center justify-center">
<span class="font-label-md text-on-surface-variant">Entrance Hallway</span>
</div>
<div class="booth-rect bg-secondary/10 border-2 border-secondary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-secondary">C-120</span>
</div>
<div class="booth-rect bg-secondary/10 border-2 border-secondary/40 rounded-lg flex items-center justify-center">
<span class="font-label-md text-secondary">C-121</span>
</div>
</div>
</div>
</div>
<!-- Modern Popover Tooltip (Hidden by default) -->
<div class="hidden absolute z-30 glass-panel border border-outline-variant rounded-xl shadow-xl w-64 overflow-hidden animate-in fade-in zoom-in duration-200" id="booth-popover">
<div class="p-4 border-b border-outline-variant/30">
<div class="flex justify-between items-center mb-2">
<span class="text-label-xs font-label-md px-2 py-0.5 bg-primary-fixed text-on-primary-fixed rounded" id="popover-id">A-102</span>
<button class="text-outline hover:text-on-surface" onclick="hidePopover()"><span class="material-symbols-outlined text-[18px]">close</span></button>
</div>
<h5 class="font-headline-md text-headline-md text-on-surface leading-tight mb-1" id="popover-name">(주)테크솔루션</h5>
<p class="font-body-sm text-on-surface-variant" id="popover-category">Category: AI 최적화</p>
</div>
<div class="p-3 bg-surface-container-low flex justify-between items-center">
<a class="text-primary font-label-md text-label-md hover:underline flex items-center" href="#">
부스 상세 <span class="material-symbols-outlined text-[16px] ml-1">arrow_forward</span>
</a>
<button class="bg-primary-container text-on-primary-container px-3 py-1 rounded-md text-label-xs font-label-md">길찾기</button>
</div>
</div>
<!-- Map Controls -->
<div class="absolute bottom-10 right-10 flex flex-col gap-2">
<div class="flex flex-col bg-white border border-outline-variant rounded-lg shadow-lg overflow-hidden">
<button class="p-3 hover:bg-surface-container-low border-b border-outline-variant transition-colors" onclick="zoomMap(1.1)"><span class="material-symbols-outlined">add</span></button>
<button class="p-3 hover:bg-surface-container-low border-b border-outline-variant transition-colors" onclick="zoomMap(0.9)"><span class="material-symbols-outlined">remove</span></button>
<button class="p-3 hover:bg-surface-container-low transition-colors" onclick="resetMap()"><span class="material-symbols-outlined">restart_alt</span></button>
</div>
<button class="p-3 bg-primary text-on-primary rounded-lg shadow-lg hover:bg-primary-container transition-all active:scale-95">
<span class="material-symbols-outlined">my_location</span>
</button>
</div>
<!-- Legend Overlay -->
<div class="absolute bottom-10 left-1/2 -translate-x-1/2 glass-panel border border-outline-variant rounded-full px-6 py-3 flex items-center gap-6 shadow-sm">
<div class="flex items-center gap-2">
<div class="w-3 h-3 rounded-full bg-primary/40 border border-primary"></div>
<span class="text-label-xs font-label-md text-on-surface-variant">판매 (Available)</span>
</div>
<div class="flex items-center gap-2">
<div class="w-3 h-3 rounded-full bg-error-container/40 border border-error"></div>
<span class="text-label-xs font-label-md text-on-surface-variant">예약 (Reserved)</span>
</div>
<div class="flex items-center gap-2">
<div class="w-3 h-3 rounded-full bg-surface-container-high border border-outline-variant"></div>
<span class="text-label-xs font-label-md text-on-surface-variant">공용부 (Public)</span>
</div>
</div>
</section>
</main>
<!-- Footer -->
<footer class="bg-on-surface text-surface font-body-sm text-body-sm full-width border-t border-white/10">
<div class="grid grid-cols-1 md:grid-cols-4 gap-stack-lg w-full px-container-padding py-section-padding max-w-7xl mx-auto">
<div class="col-span-1 md:col-span-2">
<h3 class="font-headline-md text-headline-md text-surface mb-stack-md">KINTEX</h3>
<p class="text-surface-variant max-w-sm mb-stack-lg">Korea International Exhibition Center is the leader of the exhibition industry in Korea, providing world-class infrastructure and services.</p>
<p class="text-surface-variant opacity-60">© 2024 KINTEX. All Rights Reserved. Korea International Exhibition Center.</p>
</div>
<div>
<h4 class="font-label-md text-label-md text-primary-fixed mb-4 uppercase tracking-widest">Navigations</h4>
<ul class="space-y-2">
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Exhibitor Center</a></li>
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Venue Rental</a></li>
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Business Support</a></li>
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Sitemap</a></li>
</ul>
</div>
<div>
<h4 class="font-label-md text-label-md text-primary-fixed mb-4 uppercase tracking-widest">Support</h4>
<ul class="space-y-2">
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors underline" href="#">Privacy Policy</a></li>
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Terms of Service</a></li>
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Sustainability</a></li>
<li><a class="text-surface-variant hover:text-primary-fixed transition-colors" href="#">Contact Us</a></li>
</ul>
</div>
</div>
</footer>
<script>
const mapContainer = document.getElementById('map-container');
const popover = document.getElementById('booth-popover');
let currentScale = 1;
function zoomMap(factor) {
currentScale *= factor;
currentScale = Math.min(Math.max(0.5, currentScale), 3);
mapContainer.style.transform = `scale(${currentScale})`;
hidePopover();
}
function resetMap() {
currentScale = 1;
mapContainer.style.transform = `scale(1)`;
hidePopover();
}
function showPopover(event, id, name, category) {
event.stopPropagation();
const rect = event.currentTarget.getBoundingClientRect();
document.getElementById('popover-id').innerText = id;
document.getElementById('popover-name').innerText = name;
document.getElementById('popover-category').innerText = `Category: ${category}`;
popover.classList.remove('hidden');
// Positioning popover relative to the viewport but accounting for container relative
const section = event.currentTarget.closest('section').getBoundingClientRect();
popover.style.left = `${rect.left - section.left + rect.width / 2 - 128}px`;
popover.style.top = `${rect.top - section.top - 140}px`;
}
function hidePopover() {
popover.classList.add('hidden');
}
// Close popover when clicking elsewhere
document.querySelector('main').addEventListener('click', () => {
hidePopover();
});
// Simple drag simulation for the map
let isDragging = false;
let startX, startY, scrollLeft, scrollTop;
const stage = document.getElementById('map-stage');
stage.addEventListener('mousedown', (e) => {
isDragging = true;
startX = e.pageX - stage.offsetLeft;
startY = e.pageY - stage.offsetTop;
});
stage.addEventListener('mouseleave', () => isDragging = false);
stage.addEventListener('mouseup', () => isDragging = false);
stage.addEventListener('mousemove', (e) => {
if (!isDragging) return;
e.preventDefault();
// Just visual hint as full drag needs more complex container logic
});
</script>
</body></html>