- Web core SCR-22/23/25-27/29/30/32-50 (26), admin A5/A6/A8/A9, public P1-P7, mobile M15 - +5 supplementary variants (P4 3-step, P7 manage, M15 ticket-select), 43 files, 0 failures - All delayed generations recovered server-side (project 27 -> 155 screens), no regeneration needed - WORK_STATUS: stitch 64/64 + real-data/2FA track close-out recorded Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
428 lines
24 KiB
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&display=swap" rel="stylesheet"/>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Geist:wght@500;600&display=swap" rel="stylesheet"/>
|
|
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&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> |