{"id":989,"date":"2025-09-30T04:59:28","date_gmt":"2025-09-30T04:59:28","guid":{"rendered":"https:\/\/vspacecompany.com\/?page_id=989"},"modified":"2025-12-11T08:11:39","modified_gmt":"2025-12-11T08:11:39","slug":"vs-300_en","status":"publish","type":"page","link":"https:\/\/vspacecompany.com\/?page_id=989","title":{"rendered":"VS-300_en"},"content":{"rendered":"\n<link href=\"https:\/\/unpkg.com\/aos@2.3.1\/dist\/aos.css\" rel=\"stylesheet\">\n<script src=\"https:\/\/unpkg.com\/aos@2.3.1\/dist\/aos.js\"><\/script>\n\n\n\n<div class=\"wp-block-cover is-light\" style=\"min-height:600px;aspect-ratio:unset;\"><video class=\"wp-block-cover__video-background intrinsic-ignore\" autoplay muted loop playsinline src=\"https:\/\/vspacecompany.co.kr\/wp-content\/uploads\/2025\/09\/KakaoTalk_20240831_191606164.mp4\" data-object-fit=\"cover\"><\/video><span aria-hidden=\"true\" class=\"wp-block-cover__background has-black-background-color has-background-dim-10 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained\">\n<p class=\"has-text-align-center has-large-font-size\"><\/p>\n<\/div><\/div>\n\n\n\n<style>\n\nhtml, body{\n  font-synthesis-weight: none;\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n}\n\n@supports (-webkit-overflow-scrolling: touch) {\n  :lang(en),\n  h1, h2, h3, h4, h5, h6,\n  .nav a, .menu a, .btn, .badge, .chip, .card-title, .tab a, .pagination a,\n  .breadcrumb, .hero-title, .viewmore, .cta, .label-en,\n  input, button, select, textarea,\n  *::placeholder,\n  *::before, *::after {\n    font-family: \"InterL\", Inter,\n      -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"SF Pro Display\",\n      system-ui, Segoe UI, Roboto, Arial, sans-serif !important;\n  }\n\n  .svg-en text {\n    font-family: \"InterL\", sans-serif !important;\n  }\n  b, strong { font-weight: 700; }\n}\n\n:lang(ko){\n  font-family: \"PretendardK\",\n    -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"SF Pro Display\",\n    system-ui, Segoe UI, Roboto, Arial, sans-serif !important;\n}\n\n<\/style>\n\n\n\n<div class=\"inner\" data-aos=\"fade-up\" data-aos-duration=\"1200\">\n  <div class=\"title\">\n    <h1>VS-300<\/h1>\n    <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/09\/\ud5ec\uae30.png\" alt=\"vs-100\">\n  <\/div>\n\n<section class=\"specs\">\n  <div class=\"specs-grid\">\n    <!-- 1 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"100\">\n      <h4 class=\"spec-title\">PAYLOAD \/ MTOW<\/h4>\n      <p class=\"spec-value\">270 kg \/ 1,050 kg \u00d7 100% = <strong>25.7%<\/strong><\/p>\n      <p class=\"spec-sub\">(Payload\/MTOW)<\/p>\n    <\/article>\n\n    <!-- 2 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"200\">\n      <h4 class=\"spec-title\">PAYLOAD<\/h4>\n      <p class=\"spec-value\"><strong>270 kg<\/strong><\/p>\n      <p class=\"spec-sub\">(600 lbs)<\/p>\n    <\/article>\n\n    <!-- 3 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"300\">\n      <h4 class=\"spec-title\">DIMENSIONS<\/h4>\n      <p class=\"spec-value\"><strong>9.5 \u00d7 7.4 m<\/strong><\/p>\n      <p class=\"spec-sub\">(31 \u00d7 24 ft)<\/p>\n    <\/article>\n\n    <!-- 4 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"400\">\n      <h4 class=\"spec-title\">RANGE<\/h4>\n      <p class=\"spec-value\"><strong>120 km<\/strong><\/p>\n      <p class=\"spec-sub\">&ensp;<\/p>\n    <\/article>\n\n    <!-- 5 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"500\">\n      <h4 class=\"spec-title\">SPEED<\/h4>\n      <p class=\"spec-value\"><strong>203 km\/h<\/strong><\/p>\n      <p class=\"spec-sub\">(110 KIAS)<\/p>\n    <\/article>\n\n    <!-- 6 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"600\">\n      <h4 class=\"spec-title\">MAX TOTAL POWER OUTPUT<\/h4>\n      <p class=\"spec-value\"><strong>480 kw<\/strong><\/p>\n      <p class=\"spec-sub\">&ensp;<\/p>\n    <\/article>\n\n\n    <!-- 7 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"700\">\n      <h4 class=\"spec-title\">CHARGING TIME<\/h4>\n      <p class=\"spec-value\"><strong>14 min<\/strong><br><span>(depends on charger)<\/span><\/p>\n      <p class=\"spec-sub\">&ensp;<\/p>\n    <\/article>\n\n    <!-- 8 -->\n    <article class=\"spec\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"800\">\n      <h4 class=\"spec-title\">PRICE<\/h4>\n      <p class=\"spec-value\"><strong>0.8 M<\/strong><\/p>\n      <p class=\"spec-sub\">(USD)<\/p>\n    <\/article>\n  <\/div>\n<\/section>\n\n  <!-- \uac24\ub7ec\ub9ac -->\n  <div class=\"product_info\" data-gallery data-cols=\"3\" data-aos=\"fade-up\" data-aos-duration=\"1500\" data-aos-delay=\"50\">\n    <div class=\"pi-main\">\n      <img decoding=\"async\" data-role=\"main\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_1.png\" alt=\"vs-300\">\n      <!-- \ud56b\uc2a4\ud31f -->\n      <div class=\"hotspots\"><\/div>\n    <\/div>\n\n    <div class=\"thumbs\">\n      <!-- #1 -->\n      <button\n        class=\"thumb is-active\"\n        data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_1.png\"\n        aria-label=\"vs-300 angle1\"\n        data-hotspots='[\n          {\"x\":38,\"y\":44,\"side\":\"right\",\"title\":\"Innovative battery\",\"desc\":\"High density \u2013 Safety \u2013 Power\"},\n          {\"x\":55.5,\"y\":70.5,\"side\":\"right\",\"title\":\"CFRP Rotor\",\"desc\":\"High Strength and Durability\"},\n          {\"x\":34,\"y\":74,\"side\":\"left\",\"title\":\"100% Electric engine\",\"desc\":\"Vibration and Noise Reduction, quadruple redundancy\"},\n          {\"x\":20,\"y\":57,\"side\":\"right\",\"title\":\"100% Electric engine\",\"desc\":\"Vibration and Noise Reduction, quadruple redundancy\"}\n        ]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_1.png\" alt=\"vs-300 angle1\">\n      <\/button>\n\n      <!-- #2~9 -->\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_2.png\" aria-label=\"vs-300 angle2\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_2.png\" alt=\"vs-300 angle2\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_3.png\" aria-label=\"vs-300 angle3\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_3.png\" alt=\"vs-300 angle3\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_4.png\" aria-label=\"vs-300 angle4\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_4.png\" alt=\"vs-300 angle4\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_5.png\" aria-label=\"vs-300 angle5\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_5.png\" alt=\"vs-300 angle5\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_6.png\" aria-label=\"vs-300 angle6\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_6.png\" alt=\"vs-300 angle6\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_7.png\" aria-label=\"vs-300 angle7\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_7.png\" alt=\"vs-300 angle7\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_8.png\" aria-label=\"vs-300 angle8\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_8.png\" alt=\"vs-300 angle8\">\n      <\/button>\n      <button class=\"thumb\" data-full=\"\/wp-content\/uploads\/2025\/10\/vs-300_9.png\" aria-label=\"vs-300 angle9\" data-hotspots='[]'>\n        <img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/10\/vs-300_9.png\" alt=\"vs-300 angle9\">\n      <\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<style>\n.ko_footer{display:none;}\n\n:root{\n  --brand:#2e5fd4;\n  --ink:#111827;\n  --muted:#6b7280;\n  --rule:#e5e7eb;\n}\n.specs{max-width:1400px;margin:50px auto;color:var(--ink);}\n.specs-grid{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:0;align-items:start;}\n\n\/* \uce74\ub4dc *\/\n.spec{padding:24px 17px;display:flex;flex-direction:column;gap:6px;position:relative;background:#fff;text-align:center;min-height:186px;}\n.spec:not(:last-child)::after{content:\"\";position:absolute;right:0;top:18%;width:1px;height:64%;background:var(--rule);}\n.spec-title{margin:0 0 4px;font-size:12px!important;font-weight:700;letter-spacing:.02em;color:var(--muted);text-transform:uppercase;}\n.spec-value{margin:0;font-size:22px;font-weight:800;line-height:1.2;}\n.spec-value strong{color:var(--ink);}\n.spec-value>span{font-size:14px!important;font-weight:400;}\n.spec-sub{margin:0;font-size:12px!important;color:var(--muted);opacity:.9;}\n\n\n\/* \ud0c0\uc774\ud2c0 *\/\n.title{display:flex;justify-content:center;align-items:center;gap:10px;margin:12px 0 24px}\n.title>h1{font-weight:700}\n.title>img{width:40px;height:40px;animation:spin 3s linear infinite}\n@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}\n\n\/* \uac24\ub7ec\ub9ac *\/\n.product_info{\n  display:grid;grid-template-columns:1fr minmax(220px,360px);\n  gap:20px;align-items:start;max-width:1400px;margin:0 auto}\n.product_info .pi-main{position:relative}\n.product_info .pi-main>[data-role=\"main\"]{\n  width:100%;max-height:640px;object-fit:contain;border-radius:12px;background:#f8fafc;transition:opacity .25s ease}\n.product_info .thumbs{display:grid;gap:10px}\n.product_info[data-cols=\"3\"] .thumbs{grid-template-columns:repeat(3,1fr)}\n.product_info .thumb{\n  padding:0;border:1px solid var(--rule);background:#fff;border-radius:10px;aspect-ratio:1\/1;overflow:hidden;cursor:pointer;\n  transition:transform .12s ease,border-color .12s ease,box-shadow .12s ease\n}\n.product_info .thumb:hover{transform:translateY(-1px);border-color:#cbd5e1}\n.product_info .thumb.is-active{border-color:var(--brand);box-shadow:0 0 0 2px color-mix(in oklab, var(--brand), #fff 70%)}\n.product_info .thumb img{width:100%;height:100%;object-fit:cover;display:block}\n@media (max-width:900px){.product_info{grid-template-columns:1fr}.product_info .thumbs{grid-template-columns:repeat(4,1fr)}}\n\n\/*  \uc774\ubbf8\uc9c0 \uc704 \ud56b\uc2a4\ud31f *\/\n.pi-main .hotspots{position:absolute;inset:0;pointer-events:none;z-index:3}\n\n\/* \ub798\ud37c *\/\n.pi-main .hotspot{position:absolute;transform:translate(-50%,-50%);left:var(--x,50%);top:var(--y,50%);pointer-events:auto;z-index:4}\n\n\/* \ud50c\ub7ec\uc2a4 \ubc84\ud2bc *\/\n.pi-main .hotspot-btn{\n  width:32px;height:32px;border:0;padding:0;border-radius:999px;background:#fff;cursor:pointer;outline:none;position:relative;\n  box-shadow:0 6px 18px rgba(0,0,0,.12);display:block\n}\n.pi-main .hotspot-btn .plus{position:absolute;inset:0;display:grid;place-items:center;transition:transform .28s ease}\n.pi-main .hotspot-btn .plus::before,.pi-main .hotspot-btn .plus::after{content:\"\";position:absolute;background:var(--brand);border-radius:2px}\n.pi-main .hotspot-btn .plus::before{width:14px;height:2px}\n.pi-main .hotspot-btn .plus::after{width:2px;height:14px}\n.pi-main .hotspot[data-open=\"true\"] .hotspot-btn .plus{transform:rotate(180deg)}\n\n\/* \ud30c\ub3d9 \ub9c1 *\/\n.pi-main .hotspot-btn::after{\n  content:\"\";position:absolute;inset:-6px;border-radius:999px;border:2px solid color-mix(in oklab, var(--brand), #fff 40%);\n  animation:pulse 1.8s ease-in-out infinite;pointer-events:none\n}\n@keyframes pulse{0%,100%{transform:scale(1);opacity:.55}50%{transform:scale(1.08);opacity:.18}}\n\n\/* \ub9d0\ud48d\uc120 \ud328\ub110 *\/\n.pi-main .hotspot-panel{\n  position:absolute;min-width:220px;max-width:280px;background:#fff;color:var(--ink);border:1px solid var(--rule);border-radius:12px;\n  box-shadow:0 12px 30px rgba(0,0,0,.16);padding:14px 14px 12px;line-height:1.45;opacity:0;pointer-events:none;transition:opacity .18s,transform .2s;z-index:5\n}\n.pi-main .hotspot-panel h5{margin:0 0 6px;font-size:15px !important;font-weight:600 !important;}\n.pi-main .hotspot-panel p{margin:0;font-size:14px !important;color:#334155}\n\n\/* \ubc29\ud5a5\ubcc4 \uc704\uce58 *\/\n.pi-main .hotspot[data-side=\"right\"]  .hotspot-panel{left:calc(100% + 12px);top:50%;transform:translateY(-50%) translateX(-8px)}\n.pi-main .hotspot[data-side=\"left\"]   .hotspot-panel{right:calc(100% + 12px);top:50%;transform:translateY(-50%) translateX(8px)}\n.pi-main .hotspot[data-side=\"top\"]    .hotspot-panel{left:50%;bottom:calc(100% + 12px);transform:translateX(-50%) translateY(8px)}\n.pi-main .hotspot[data-side=\"bottom\"] .hotspot-panel{left:50%;top:calc(100% + 12px);transform:translateX(-50%) translateY(-8px)}\n\n\/* \uaf2c\ub9ac \uc81c\uac70 *\/\n.pi-main .hotspot-panel::after{display:none !important;content:none !important;}\n\n.pi-main .hotspot[data-open=\"true\"] .hotspot-panel{opacity:1;pointer-events:auto;transform:none}\n\n@media (max-width: 768px){\n.specs{ margin:36px auto; }\n.specs-grid{grid-template-columns: repeat(2, 1fr);max-width: 520px;margin: 0 auto;}\n.spec{padding:18px 12px; min-height:120px;}\n.spec-title{ font-size:13px !important; }\n.spec-value{ font-size:12px !important; }\n.spec-sub{ font-size:11px !important; }\n.spec:not(:last-child)::after{ display:none; }\n.spec:nth-child(2n){border-left: 1px solid var(--rule);}\n\n.title>h1{font-size:40px !important; font-weight:800 !important;}\n.title>img{width:30px; height:30px;}\n.product_info>img{width:100%;}\n}\n\n\n\/* \ubaa8\ubc14\uc77c *\/\n@media (max-width:640px){\n  .pi-main .hotspot-panel{ display:none !important; }\n  .hotspot-mobile-info{\n    display:block;\n    margin-top:10px;\n    background:#fff;\n    color:var(--ink);\n    border:1px solid var(--rule);\n    border-radius:12px;\n    box-shadow:0 10px 24px rgba(0,0,0,.08);\n    padding:14px 16px 12px;\n  }\n  .hotspot-mobile-info.is-hidden{ display:none; }\n  .hotspot-mobile-info h5{\n    margin:0 0 6px;\n    font-size:15px !important;\n    font-weight:700 !important;\n  }\n  .hotspot-mobile-info p{\n    margin:0;\n    font-size:14px !important;\n    color:#334155;\n  }\n}\n<\/style>\n\n\n\n<script>\n\n(function () {\n  if (window.AOS && typeof AOS.init === 'function') {\n    AOS.init();\n  }\n\n  function animateCounter(el) {\n    var target = Number(el.getAttribute('data-target') || '0');\n    var duration = 2500;\n    var frameRate = 60;\n    var totalFrames = Math.round((duration \/ 1000) * frameRate);\n    var frame = 0;\n\n    function easeOutQuad(t) { return t * (2 - t); }\n\n    function step() {\n      frame++;\n      var progress = frame \/ totalFrames;\n      var eased = easeOutQuad(progress);\n      var current = Math.round(target * eased);\n      el.textContent = current.toLocaleString();\n\n      if (frame < totalFrames) {\n        requestAnimationFrame(step);\n      } else {\n        el.textContent = target.toLocaleString();\n      }\n    }\n    requestAnimationFrame(step);\n  }\n\n  var counterObserver = new IntersectionObserver(function(entries){\n    entries.forEach(function(entry){\n      if(entry.isIntersecting){\n        var el = entry.target;\n        if(!el.__animated){\n          el.__animated = true;\n          animateCounter(el);\n        }\n      }\n    });\n  }, { threshold: 0.5 });\n\n  document.querySelectorAll('.counter').forEach(function(el){\n    counterObserver.observe(el);\n  });\n\n  \/\/ ---------- Header scroll color ----------\n  var header = document.querySelector('header');\n  if (header) {\n    var onScroll = function () {\n      if (window.scrollY > 50) header.classList.add('scrolled');\n      else header.classList.remove('scrolled');\n    };\n    window.addEventListener('scroll', onScroll, { passive: true });\n    onScroll(); \/\/ reflect initial state\n  }\n\n  \/\/ ---------- Mobile helpers ----------\n  var mql = window.matchMedia('(max-width:640px)');\n  function isMobile(){ return mql.matches; }\n\n  \/** \ubaa8\ubc14\uc77c\uc77c \ub54c\ub9cc .pi-main \ub4a4\uc5d0 info \uc601\uc5ed \uc0dd\uc131 *\/\n  function ensureMobileInfoArea(gallery){\n    if(!isMobile()) return null;\n    var info = gallery.querySelector('.hotspot-mobile-info');\n    if(!info){\n      var piMain = gallery.querySelector('.pi-main');\n      if(!piMain) return null;\n      info = document.createElement('div');\n      info.className = 'hotspot-mobile-info is-hidden';\n      info.innerHTML = '<h5><\/h5><p><\/p>';\n      piMain.after(info);\n    }\n    return info;\n  }\n  function hideMobileInfo(gallery){\n    if(!isMobile()) return; \n    var info = gallery && gallery.querySelector('.hotspot-mobile-info');\n    if(info) info.classList.add('is-hidden');\n  }\n  function removeMobileInfo(gallery){\n    var info = gallery && gallery.querySelector('.hotspot-mobile-info');\n    if(info) info.remove();\n  }\n\n  \/\/ ---------- Hotspots ----------\n  \/**\n   * @param {HTMLElement} container - .pi-main\n   * @param {Array<{x:number,y:number,side?:string,title?:string,desc?:string}>} list\n   *\/\n  function renderHotspots(container, list) {\n    var host = container.querySelector('.hotspots');\n    if (!host) return;\n\n    host.innerHTML = '';\n\n    (list || []).forEach(function(h){\n      var wrap = document.createElement('div');\n      wrap.className = 'hotspot';\n      wrap.style.setProperty('--x', String((h.x || 0)) + '%');\n      wrap.style.setProperty('--y', String((h.y || 0)) + '%');\n      wrap.setAttribute('data-side', h.side || 'right');\n      wrap.setAttribute('data-open', 'false');\n\n      var btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'hotspot-btn';\n      btn.setAttribute('aria-expanded','false');\n      btn.innerHTML = '<span class=\"plus\" aria-hidden=\"true\"><\/span>';\n\n      var panel = document.createElement('div');\n      panel.className = 'hotspot-panel';\n      panel.setAttribute('role','dialog');\n      panel.setAttribute('aria-label', (h.title || ''));\n      panel.innerHTML = '<h5>'+(h.title || '')+'<\/h5><p>'+(h.desc || '')+'<\/p>';\n\n      wrap.appendChild(btn);\n      wrap.appendChild(panel);\n      host.appendChild(wrap);\n    });\n\n    \/\/ click toggle\n    host.onclick = function(e){\n      var btn = e.target.closest('.hotspot-btn');\n      if(!btn) return;\n      var spot = btn.parentElement;\n      var isOpen = spot.getAttribute('data-open') === 'true';\n\n      \/\/ close all\n      host.querySelectorAll('.hotspot[data-open=\"true\"]').forEach(function(el){\n        el.setAttribute('data-open','false');\n        var b = el.querySelector('.hotspot-btn');\n        if (b) b.setAttribute('aria-expanded','false');\n      });\n\n      \/\/ same one -> close\n      if(isOpen){\n        btn.setAttribute('aria-expanded','false');\n        if (isMobile()){\n          var gallery = container.closest('.product_info[data-gallery]');\n          hideMobileInfo(gallery);\n        }\n        return;\n      }\n\n      \/\/ open current\n      spot.setAttribute('data-open','true');\n      btn.setAttribute('aria-expanded','true');\n\n      \/\/ MOBILE: show description in the info area below the image\n      if (isMobile()){\n        var gallery = container.closest('.product_info[data-gallery]');\n        var info = ensureMobileInfoArea(gallery);\n        if(info){\n          var title = spot.querySelector('.hotspot-panel h5')?.textContent || '';\n          var desc  = spot.querySelector('.hotspot-panel p')?.textContent || '';\n          info.querySelector('h5').textContent = title;\n          info.querySelector('p').textContent  = desc;\n          info.classList.remove('is-hidden');\n        }\n      }\n    };\n\n    \/\/ outside click \/ ESC close (desktop panels + mobile info)\n    var outsideClick = function(e){\n      if(!host.contains(e.target)){\n        host.querySelectorAll('.hotspot[data-open=\"true\"]').forEach(function(el){\n          el.setAttribute('data-open','false');\n          var b = el.querySelector('.hotspot-btn');\n          if (b) b.setAttribute('aria-expanded','false');\n        });\n        if (isMobile()){\n          var gallery = container.closest('.product_info[data-gallery]');\n          hideMobileInfo(gallery);\n        }\n      }\n    };\n    var escClose = function(e){\n      if(e.key === 'Escape'){\n        host.querySelectorAll('.hotspot[data-open=\"true\"]').forEach(function(el){\n          el.setAttribute('data-open','false');\n          var b = el.querySelector('.hotspot-btn');\n          if (b) b.setAttribute('aria-expanded','false');\n        });\n        if (isMobile()){\n          var gallery = container.closest('.product_info[data-gallery]');\n          hideMobileInfo(gallery);\n        }\n      }\n    };\n\n    if (host.__outsideClick) document.removeEventListener('click', host.__outsideClick);\n    if (host.__escClose) document.removeEventListener('keydown', host.__escClose);\n    host.__outsideClick = outsideClick;\n    host.__escClose = escClose;\n\n    document.addEventListener('click', outsideClick);\n    document.addEventListener('keydown', escClose);\n  }\n\n  \/\/ ---------- Gallery (thumbnails -> main + hotspots) ----------\n  function initGallery(gallery) {\n    var piMain  = gallery.querySelector('.pi-main');\n    var mainImg = gallery.querySelector('[data-role=\"main\"]') || gallery.querySelector('img');\n    var thumbs  = Array.from(gallery.querySelectorAll('.thumb'));\n    if (!piMain || !mainImg || thumbs.length === 0) return;\n\n    if (isMobile()) ensureMobileInfoArea(gallery);\n    hideMobileInfo(gallery); \n\n    \/\/ initial hotspots\n    try {\n      var firstRaw = thumbs[0].getAttribute('data-hotspots') || '[]';\n      var firstList = JSON.parse(firstRaw);\n      renderHotspots(piMain, firstList);\n    } catch (err) {\n      console.error('initial data-hotspots JSON parse error:', err);\n      renderHotspots(piMain, []);\n    }\n\n    \/\/ thumbnail click -> image & hotspots swap + hide mobile info\n    gallery.addEventListener('click', function(e){\n      var btn = e.target.closest('.thumb');\n      if(!btn || !gallery.contains(btn)) return;\n\n      thumbs.forEach(function(t){ t.classList.remove('is-active'); });\n      btn.classList.add('is-active');\n\n      var nextSrc = btn.getAttribute('data-full');\n      var nextHotspotsRaw = btn.getAttribute('data-hotspots') || '[]';\n      if(!nextSrc) return;\n\n      var preload = new Image();\n      preload.onload = function(){\n        mainImg.style.opacity = '0';\n        setTimeout(function(){\n          mainImg.src = nextSrc;\n          var altFromThumb = btn.querySelector('img') && btn.querySelector('img').getAttribute('alt');\n          if(altFromThumb) mainImg.alt = altFromThumb;\n          requestAnimationFrame(function(){ mainImg.style.opacity = '1'; });\n        }, 120);\n      };\n      preload.src = nextSrc;\n\n      try {\n        var list = JSON.parse(nextHotspotsRaw);\n        renderHotspots(piMain, list);\n      } catch (err) {\n        console.error('data-hotspots JSON parse error:', err, nextHotspotsRaw);\n        renderHotspots(piMain, []);\n      }\n\n      \/\/ mobile: close info on image switch\n      if (isMobile()){\n        hideMobileInfo(gallery);\n      }\n    });\n\n    \/\/ PC\ub85c \ub118\uc5b4\uac00\uba74 info \uc601\uc5ed \uc81c\uac70\n    function handleViewportChange(e){\n      if(!e.matches){ \/\/ now > 640px (PC)\n        removeMobileInfo(gallery);\n      }else{ \/\/ back to mobile\n        ensureMobileInfoArea(gallery);\n        hideMobileInfo(gallery);\n      }\n    }\n    mql.addEventListener ? mql.addEventListener('change', handleViewportChange)\n                         : mql.addListener(handleViewportChange); \/\/ older Safari\n  }\n\n  \/\/ init all galleries on DOM ready\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function(){\n      document.querySelectorAll('.product_info[data-gallery]').forEach(initGallery);\n    });\n  } else {\n    document.querySelectorAll('.product_info[data-gallery]').forEach(initGallery);\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>VS-300 PAYLOAD \/ MTOW 270 kg \/ 1,050 kg \u00d7 100% = 25.7% (Payload\/MTOW) PAYLOAD 270 kg (600 lbs) DIMENSIONS 9.5 \u00d7 7.4 m (31 \u00d7 24 ft) RANGE 120 km &ensp; SPEED 203 km\/h (110 KIAS) MAX TOTAL POWER &hellip; <a href=\"https:\/\/vspacecompany.com\/?page_id=989\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-fullwidth.php","meta":{"kt_blocks_editor_width":"","footnotes":""},"class_list":["post-989","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vspacecompany.com\/index.php?rest_route=\/wp\/v2\/pages\/989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vspacecompany.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vspacecompany.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vspacecompany.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vspacecompany.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=989"}],"version-history":[{"count":24,"href":"https:\/\/vspacecompany.com\/index.php?rest_route=\/wp\/v2\/pages\/989\/revisions"}],"predecessor-version":[{"id":2026,"href":"https:\/\/vspacecompany.com\/index.php?rest_route=\/wp\/v2\/pages\/989\/revisions\/2026"}],"wp:attachment":[{"href":"https:\/\/vspacecompany.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}