/* Gold Apple — 공통 모바일 nav 컨트롤러 (드로어 / 언어 셀렉트 / 활성 표시) 2026-04-27 신규 - 헤더 globe 클릭 → 언어 dropdown - 햄버거(MENU) 클릭 → 드로어 열기 - 현재 경로와 일치하는 메뉴에 aria-current="page" - 언어 선택 시 속성과 localStorage 만 갱신 (i18n 사전은 별도) */ (function () { 'use strict'; if (window.__gaMobileNavInit) return; window.__gaMobileNavInit = true; document.body.classList.add('ga-has-bottomnav'); // ── 1. Active state by current path ───────────────────────────── var path = (location.pathname || '/').replace(/\/$/, '') || '/'; function markActive(scope) { if (!scope) return; var links = scope.querySelectorAll('a[href]'); for (var i = 0; i < links.length; i++) { var hRaw = links[i].getAttribute('href') || ''; var h = hRaw.replace(/\/$/, '') || '/'; if (h === path || (h !== '/' && path.indexOf(h) === 0)) { links[i].setAttribute('aria-current', 'page'); } } } markActive(document.querySelector('.ga-drawer__menu')); markActive(document.querySelector('.ga-bottomnav')); // ── 1.5 CTA 텍스트/화살표 분리 (텍스트만 정확히 가운데 정렬) — 2026-04-29 ── var ctaLink = document.querySelector('.ga-drawer__cta a'); if (ctaLink && !ctaLink.querySelector('.ga-drawer__cta-arrow')) { var ctaHtml = ctaLink.innerHTML; var ctaMatch = ctaHtml.match(/^([\s\S]*?)\s*(→|→)\s*$/); if (ctaMatch) { ctaLink.innerHTML = '' + ctaMatch[1].trim() + '' + ''; } } // ── 2. Drawer toggle ───────────────────────────────────────────── var drawer = document.querySelector('.ga-drawer'); var burger = document.querySelector('.nav-burger'); function openDrawer(e) { if (e) e.preventDefault(); if (!drawer) return; drawer.classList.add('is-open'); document.body.style.overflow = 'hidden'; if (burger) burger.setAttribute('aria-expanded', 'true'); } function closeDrawer() { if (!drawer) return; drawer.classList.remove('is-open'); document.body.style.overflow = ''; if (burger) burger.setAttribute('aria-expanded', 'false'); } function toggleDrawer(e) { if (e) e.preventDefault(); if (!drawer) return; if (drawer.classList.contains('is-open')) closeDrawer(); else openDrawer(); } if (burger) burger.addEventListener('click', toggleDrawer); if (drawer) { drawer.addEventListener('click', function (e) { if (e.target === drawer || e.target.matches('.ga-drawer__close,[data-drawer-close]')) { closeDrawer(); } }); } // 2026-04-28 안전장치: viewport resize로 drawer가 display:none 처리되면 body lock 자동 해제 (스크롤 풀기) window.addEventListener('resize', function () { if (drawer && drawer.classList.contains('is-open')) { var disp = window.getComputedStyle(drawer).display; if (disp === 'none') closeDrawer(); } }); // ESC 키로 닫기 document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && drawer && drawer.classList.contains('is-open')) closeDrawer(); }); // ── 3. Language dropdown ───────────────────────────────────────── var langs = document.querySelectorAll('.ga-lang'); for (var k = 0; k < langs.length; k++) { (function (host) { var btn = host.querySelector('.ga-lang__btn'); var menu = host.querySelector('.ga-lang__menu'); var saved = localStorage.getItem('ga.lang') || 'en'; // mark default var opts = host.querySelectorAll('.ga-lang__opt'); for (var i = 0; i < opts.length; i++) { opts[i].setAttribute('aria-selected', opts[i].dataset.lang === saved ? 'true' : 'false'); } document.documentElement.setAttribute('lang', saved); btn.addEventListener('click', function (e) { e.stopPropagation(); host.classList.toggle('is-open'); }); host.addEventListener('click', function (e) { var t = e.target.closest('.ga-lang__opt'); if (!t) return; var code = t.dataset.lang || 'en'; localStorage.setItem('ga.lang', code); document.documentElement.setAttribute('lang', code); for (var j = 0; j < opts.length; j++) { opts[j].setAttribute('aria-selected', opts[j].dataset.lang === code ? 'true' : 'false'); } host.classList.remove('is-open'); }); document.addEventListener('click', function (e) { if (!host.contains(e.target)) host.classList.remove('is-open'); }); })(langs[k]); } })();