갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (2024)

본문 바로가기

`;appTCondition && (toastYN != "N") ? toastPO() : "" ;};// 갤캠스 유도 토스트 팝업 닫기 :: 갤캠앱 통합function gcsToastClose(id){ var cookieDay = id == "gcsWelcomePopup" ? 7 : 1; var key = encodeURIComponent(getCookieForSite("mbrNo_1_")); $("#mask2").remove(); $('#'+id).removeClass("active"); var atpc = $("#chk-"+id).is(":checked"); atpc ? setCookie("gcsToastYN"+"_"+id+'_'+key,"N",cookieDay) : "";}// 갤캠스 유도 토스트 하이퍼링크처리function gcsToastHref(objectId){if(objectId == 'goToGcs'){window.location.href="/sec/member/saSsoLogin?redirect_url=/event/galaxycampus/";}if(objectId == 'goToSignup'){window.location.href="/sec/member/saSsoLogin?redirect_url=/event/galaxycampus/member/loginDocumentEmailCheck";}}

로그인/회원가입 >

  • S24 시리즈구매 혜택
  • 삼닷 슈퍼 위크
  • 삼성케어플러스
  • 시간 맞춤 설치 서비스
  • 삼성 컬처랩
  • 삼닷 Live
  • 갤럭시 캠퍼스
  • 스마트싱스
  • e식품관
  • 멤버십
  • 지속가능경영
  • AI
  • 모바일
  • TV&오디오
  • 주방가전
  • 리빙가전
  • PC/주변기기
  • 소모품
  • 삼성케어플러스
  • 스마트싱스
  • 삼성닷컴추천
  • 아울렛
  • #Samsung Experience
  • 고객지원
  • 비즈니스
  • 삼성스토어
  • 지속가능경영

최근 검색어

추천 제품

고객님의 최근 본 제품과 연관된 제품을 추천해 드려요!

맞춤 이벤트

고객님의 최근 본 제품과 연관된 이벤트를 추천해 드려요!

인기 검색어

      ";$(".pg-location").html(html);}});}

      최근 본 제품

      검색 결과0

      ※ 최근 본 제품은 30일간 보관됩니다.

      HOME모바일태블릿모두 보기갤럭시 탭 S9+ (Wi-Fi) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) + 갤럭시 워치6 44 mm (블루투스)

      드래그해서 좌우 이동시 제품을 상세하게 확인하실수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (1)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (2)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (3)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (4)

      ');pinch_markup.prependTo('.zoomView');var win_width = $(window).width();var con_height = $(window).height();$('#pinch').smartZoom({'containerClass': 'zoomableContainer',initCallback: function(){$('#pinch').smartZoom('zoom', 2);}});}// pdZoomOutfunction pdZoomOut() {$('#pinch').smartZoom('zoom', -5);setTimeout(function(){$("#pinch").smartZoom('destroy');$('.pinch').remove();$('body').removeClass('zoomViewWrap');}, 0);}function setAltTxt(title, content){ var altTitle = $('#popupLinkVideo .box-article .alt-tit');var altContent = $('#popupLinkVideo .box-article .alt-content');altTitle.text(title);altContent.text(content); }$(function(){// 확대 클릭$('#zoomIn').on('click', function(){pdZoomIn();// 축소 클릭$('#zoomOut').on('click', function(){pdZoomOut();});// zoom영역외 클릭$(document).click(function(event) {var pdImgArea = $(".prod-image");if($("body").hasClass("zoomViewWrap")){if (!pdImgArea.is(event.target) && !pdImgArea.has(event.target).length) {pdZoomOut();}}});$(window).resize(function(){if($("body").hasClass("zoomViewWrap")){pdZoomOut();}});});})

      갤럭시 탭 S9+ (Wi-Fi) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) + 갤럭시 워치6 44 mm (블루투스)

      갤럭시 탭 S9+ (Wi-Fi)

      Galaxy Tab S9Galaxy Tab S9+Galaxy Tab S9 Ultra

      구매하기

      PRE-REGISTER

      PRE-ORDER

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (5)
      • * 이해를 돕기 위해 연출된 이미지입니다.
        색상 및 이용 가능 모델은 국가 또는 통신사에 따라 다를 수 있습니다.
      • * 갤럭시 탭 S9, 갤럭시 탭 S9+, 갤럭시 탭 S9 Ultra는
        IPx4/68 등급의 방수 방진 기능을 지원합니다.
        IPx4/68 방수 등급은 180° 수직으로 10 L/분의 물을 5분 동안 분사하고(IPx4),
        수심 최대 1.5 m의 담수에 30분 동안 담그는(IP68)
        실험실 테스트 조건을 기반으로 합니다.
        수영장 물 / 바닷물에 제품을 노출하지 마세요.
      디자인
      내구성
      S펜
      디스플레이
      액세서리

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (6)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (7)

      그라파이트 컬러의 갤럭시 탭 S9, 갤럭시 탭 S9+, 갤럭시 탭 S9 Ultra가 가로 모드로 왼쪽에서 오른쪽을 향해 차례대로 나타납니다. 세 기기는 뒷면을 앞으로 향한 상태로 서로 겹쳐집니다. 기기에 드리워진 그림자가 이동하며 왼쪽 위에 삼성 로고가 표시됩니다.

      자연에서 영감을 받은 컬러
      최적화된 세 가지 사이즈
      자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (9)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (10)

      왼쪽에서 그라파이트 컬러의 갤럭시 탭 S9 시리즈가 나타나고 위쪽에서 S펜이 등장합니다. 물과 먼지가 튀는 표현으로 갤럭시 탭 S9 시리즈의 내구성을 강조하고 있습니다.

      최초의 방수 방진
      갤럭시 탭 S 시리즈
      자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (12)

      더 강하고 더 빠르게
      반응하는 S펜
      자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (14)

      선명하면서도 편안한
      다이나믹 아몰레드 2X
      자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (16)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (17)

      키보드 북커버가 펼쳐져 있어 디스플레이와 키보드를 모두 확인 가능한 상태의 갤럭시 탭 S9 시리즈 기기가 있습니다. 아래쪽에서 S펜이 나타나고 오른쪽에서 스마트 북커버를 씌운 또 다른 갤럭시 탭 S9 시리즈 기기가 등장합니다. 그리고 왼쪽에 개인정보 보호 화면을 표시한 갤럭시 탭 S9 시리즈 기기가 나타납니다.

      다양한 정품 커버로
      강화된 태블릿 경험
      자세히 보기

      디자인 내구성 S펜 디스플레이 액세서리

      팝업 닫기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (19)

      노트 어시스트

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (20)

      AI로 재빠르게 요약 정리 완료

      급하게 타이핑한 내용도, 외국어로 된 문서도
      AI가 모두 번역 및 요약해 줍니다.
      내용 요약부터 자동 서식 정리, 표지 생성까지
      일단 쓰기만 하면 나중에 다시 보기 쉽도록
      알아서 정리해 주죠.
      갤럭시 탭 S9 시리즈의 넓은 화면에서
      자유롭게 노트 어시스트를 활용해 보세요.

      • * 노트 어시스트는 One UI 6.1 및 Samsung Note 4.4.17 이상에서만 사용할 수 있습니다.
        노트 어시스트를 사용하려면 네트워크 연결 및 삼성 계정 로그인이 필요합니다. 글자 수 제한이 적용됩니다.
        서비스 사용 가능 여부는 언어에 따라 다를 수 있습니다. 생성된 결과물의 정확성과 신뢰성은 보장되지 않습니다. 실제 UI는 다를 수 있습니다.
      • * One UI 6.1 기준 13개 언어(17개 지역/국가)가 지원됩니다.

      포토 어시스트

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (21)

      마법처럼 원하는 사진을 만드는 AI

      사진이 마음에 들지 않나요?
      새로운 AI 기반의 편집 옵션을 사용해
      원하는 사진으로 바꿔보세요.
      사람이나 사물을 자유롭게 이동하고
      빈 공간을 감쪽같이 채울 수 있습니다.
      갤럭시 탭 S9 시리즈의 넓은 화면에서
      더 자유롭게 포토 어시스트를 활용해 보세요.

      * 생성형 편집은 One UI 6.1 및 사진 편집기 3.4.21 이상에서만 사용할 수 있습니다. 생성형 편집은
      네트워크 연결 및 삼성 계정 로그인이 필요합니다.
      생성형 편집으로 편집하면 최대 12 MP 크기로 사진 크기가 조정되며, AI에 의해 이미지가 생성되었음을 나타내기 위해,
      저장되는 이미지 결과물 위에 워터마크가 덧씌워집니다. 생성된 결과물의 정확성과 신뢰성은 보장되지 않습니다. 실제 UI는 다를 수 있습니다.

      텍스트 변환 어시스트

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (22)

      녹음된 내 목소리도
      손쉽게 문자로 바꿀 수 있죠

      나만의 개인 비서를 만나 보세요.
      녹음된 음성을 AI가 발화자도 구분하여
      텍스트로 변환하고, 요약까지 해줍니다.
      심지어 번역도 가능하죠.

      * 텍스트 변환 어시스트는 네트워크 연결 및 삼성 계정 로그인이 필요합니다. 텍스트 변환 어시스트는 One UI 6.1 및 Samsung Voice Recoder 21.5.xx 이상,
      미리 설치된 삼성 스마트폰 앱을 통해 녹음된 파일에서만 사용할 수 있습니다. 설치된 음성 녹음 앱의 기능은 일부 국가에서 지원되지 않을 수 있습니다.
      3시간 미만의 오디오 파일만 처리할 수 있습니다.
      텍스트 변환 어시스트의 요약 기능은
      일정 문자 수가 충족될 때 사용할 수 있습니다.
      서비스 사용 가능 여부는 언어에 따라 다를 수 있습니다. 생성된 결과물의 정확성과 신뢰성은 보장되지 않습니다. 실제 UI는 다를 수 있습니다.

      See Great, Be Great

      당신의 잠재력을 일깨워 줄
      새로운 갤럭시 탭 S9 시리즈를 소개합니다.
      언제 어디서든 선명하게 보고, 펜으로 쓰고, 창조 하세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (23)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (24)

      화면을 아래로 향하고 있는 갤럭시 탭 S9 시리즈 기기가 있습니다. 가로 모드로 똑바로 세우면 화면에 파란색 배경화면이 표시되면서 디스플레이의 크기를 강조합니다.

      * 이해를 돕기 위해 연출된 이미지로
      실사용 시 차이가 있을 수 있습니다.

      자연에서 영감을 받은 컬러
      최적화된 세 가지 사이즈

      절제되고 프로페셔널한 그라파이트와
      부드럽고 기품있는 베이지 컬러 중
      취향에 맞게 선택해 보세요.
      어떠한 컬러든 정교한 디테일과 고급스러운 마감으로
      완성된 디자인을 만날 수 있죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (25)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (26)

      그라파이트 컬러의 갤럭시 탭 S9, 갤럭시 탭 S9+, 갤러시 탭 S9 Ultra가 가로 모드로 왼쪽에서 오른쪽을 향해 나타납니다. 세 기기는 뒷면을 앞으로 향한 상태로 서로 겹쳐집니다. 각 기기의 왼쪽 위에 삼성 로고가 표시됩니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (27)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (28)

      베이지 컬러의 갤럭시 탭 S9, 갤럭시 탭 S9+, 갤럭시 탭 S9 Ultra가 가로 모드로 왼쪽에서 오른쪽을 향해 나타납니다. 세 기기는 뒷면을 앞으로 향한 상태로 서로 겹쳐집니다. 각 기기의 왼쪽 위에 삼성 로고가 표시됩니다.

      갤럭시 탭 S9 시리즈 비교하기
      탭 S9 Ultra탭 S9 Ultra 탭 S9+탭 S9 + 탭 S9탭 S9
      디스플레이 369.9 mm 315.0 mm 278.1 mm
      무게 732 g 581 g 498 g
      두께 5.5 mm 5.7 mm 5.9 mm
      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 무게는 Wi-Fi 모델 기준입니다.
      • * 대각선으로 측정한 갤럭시 탭 S9 Ultra의 화면 크기는
        전체를 직사각형으로 고려한 경우 369.9 mm이고
        둥근 모서리까지 고려한 경우 367.2 mm입니다.
        갤럭시 탭 S9+의 화면 크기는
        전체를 직사각형으로 고려한 경우 315.0 mm,
        둥근 모서리까지 고려한 경우 314.7 mm입니다.
        갤럭시 탭 S9의 화면 크기는
        전체를 직사각형으로 고려한 경우 278.1 mm이고
        둥근 모서리까지 고려한 경우 276.2 mm입니다.
        둥근 모서리와 카메라 영역으로 인해
        실제 볼 수 있는 영역이 줄어듭니다.
      • * 제품 무게는 5G 및 Wi-Fi 모델에 따라 다릅니다.
        갤럭시 탭 S9 Ultra 5G는 737 g, Wi-Fi는 732 g,
        갤럭시 탭 S9+ 5G는 586 g, Wi-Fi는 581 g,
        갤럭시 탭 S9 5G는 500 g, Wi-Fi는 498 g입니다.
      • * 제품 무게는 제품 구성, 제조 여건에 따라 달라질 수 있습니다.
      • * 금속 프레임의 애노다이징을 위한 염료는
        10 %의 천연 염료로 이루어져 있습니다.

      선명하면서도 편안한
      다이나믹 아몰레드 2X

      즐거운 상상을 현실로 만들어 줄 갤럭시 탭 S9,
      갤럭시 탭 S9+
      그리고 갤럭시 탭 S9 Ultra.
      세 가지 탭 모두 다이나믹 아몰레드 2X 디스플레이를
      탑재했습니다.
      선명하고 깨끗한 색상과 형태를 구현하면서,
      블루라이트를 줄여줘
      보다 편안하고 만족스러운
      시청 경험을 선사하죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (29)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (30)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (31)

      그라파이트 컬러의 갤럭시 탭 S9, 갤럭시 탭 S9+, 갤럭시 탭 S9 Ultra가 가로 모드로 화면이 앞쪽을 향하도록 배치되어 나란히 놓여 있습니다. 모든 화면에는 파란색 배경화면을 표시하고 있습니다.

      * 이해를 돕기 위해 연출된 이미지로
      실사용 시 차이가 있을 수 있습니다.

      눈이 즐겁도록
      생동감 넘치는 컬러

      HDR10+로 업그레이드된 비주얼과
      최대 120 Hz 주사율의
      부드러운 화면 전환이
      몰입감을 한층 더 높여줍니다.
      풍부한 컬러와 명암 표현으로 선명함을 경험하세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (32)

      * 이해를 돕기 위해 연출된 이미지로
      실사용 시 차이가 있을 수 있습니다.

      햇빛 아래에서도
      선명한 화면

      햇빛을 감지하고 빛에 따라 변화하는
      비전 부스터의 지능형 실외 알고리즘이
      밝은 야외에서도 선명하게 화면을
      감상할 수 있게 해줍니다.
      갤럭시 탭 S9 시리즈와 함께 실내와 야외를 오가며
      즐거움을 계속 이어가세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (33)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (34)

      산 위로 내리쬐는 햇살을 카메라로 촬영하여 디스플레이에 전체 화면으로 띄운 갤럭시 탭 S9 Ultra입니다. 눈부심을 줄이는 비전 부스터 덕분에 더욱 선명한 이미지를 확인할 수 있습니다.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 갤럭시 탭 S9 시리즈의 다이나믹 아몰레드 2X 디스플레이는
        컬러볼륨 100% (DCI-P3 기준),
        명암비는 VDE에서 인증 받았습니다.
      • * 응답속도, 블루라이트는 SGS의 인증을 받았습니다. (Display기준)

      최초의 방수 방진
      갤럭시 탭 S 시리즈

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (35)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (36)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (37)

      그라파이트 컬러의 갤럭시 탭 S9 시리즈 기기 두 대가 서로 엇갈린 각도로 앞면과 뒷면을 드러내며 공중에 떠 있습니다. 물보라가 두 기기를 둘러싸고 있습니다.

      갤럭시 탭 S9 시리즈는 거친 환경에서도 견딜 수 있는
      튼튼한 내구성을 자랑합니다.
      견고한 아머 알루미늄은 부드러운 메탈 디자인과
      잘 어울릴 뿐 아니라,
      충격과 낙하로부터 기기를
      안전하게 보호하죠.
      또한, 갤럭시 탭 S9 시리즈는 갤럭시 탭 S 시리즈 최초로
      IP68 등급의
      방수 방진 기능을 획득했습니다.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * Cam Deco, Pen Deco, 측면 키, SIM 트레이를 제외한
        후면 메탈 케이스는 아머 알루미늄으로 제작되었습니다.
      • * 갤럭시 탭 S9, 갤럭시 탭 S9+, 갤럭시 탭 S9 Ultra 및 S펜은
        IPx4/68 등급의 방수 방진 기능을 지원합니다.
        IPx4/68 방수 등급은 180° 수직으로 10 L/분의 물을 5분 동안
        분사하고(IPx4), 수심 최대 1.5 m의 담수에 30분 동안
        담그는(IP68) 실험실 테스트 조건을 기반으로 합니다.
        수영장 물 / 바닷물에 제품을 노출하지 마세요.
        생활 방수 및 방진 효과는 영구적이지 않으며
        제품이 자연스럽게 마모됨에 따라 그 효과가 약해질 수 있습니다.
      • * 방진 등급은 외부 실험실 조건에서 테스트했습니다.
        입방 미터당 2 kg의 활석 가루(최대 직경 0.05 mm)를
        기기가 들어있는 테스트 챔버에 2시간 동안 분사
        (기기 내 기압은 주변 공기보다 낮게 유지)했습니다.
        IP6X 등급. 방진 기능은 실제 사용 조건에 따라 다를 수 있습니다.

      더 강하고 더 빠르게
      반응하는 S펜

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (38)

      IP68 인증

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (39)

      클릭 최적화

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (40)

      S펜도 방수 방진 IP68 등급을 갖췄습니다.
      의도치 않은 S펜 버튼의 눌림을 줄이기 위해
      버튼의 감도를 향상 시켰고,
      강력한 마그네틱 부착과
      양방향 충전이 가능하도록 개선 했습니다.
      노트 필기에 최적화 된 S펜의 정교한 필기감으로,
      이제 스치듯 떠오르는 아이디어를 언제 어디서든
      빠르게 메모하세요.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 갤럭시 탭 S9 시리즈의 기본 구성품으로 포함된 S펜은 IPx4/68 등급의 방수 방진 기능을 지원합니다.
        IPx4/68 방수 등급은 180° 수직으로 10 L/분의 물을 5분 동안
        분사하고(IPx4), 수심 최대 1.5 m의 담수에 30분 동안
        담그는(IP68) 실험실 테스트 조건을 기반으로 합니다.
        수영장 물 / 바닷물에 제품을 노출하지 마세요.
        생활 방수 및 방진 효과는 영구적이지 않으며
        제품이 자연스럽게 마모됨에 따라 그 효과가 약해질 수 있습니다.
      • * 방진 등급은 제3자가 실험실 조건에서 테스트했습니다.
        입방 미터당 2 kg의 활석 가루(최대 직경 0.05 mm)를
        기기가 들어있는 테스트 챔버에 2시간 동안 분사
        (기기 내 기압은 주변 공기보다 낮게 유지)했습니다.
        IP6X 등급. 방진 기능은 실제 사용 조건에 따라 다를 수 있습니다.
      • * S펜을 사용하거나 태블릿에 부착하기 전에
        마른 천이나 수건으로 물기를 제거하십시오.

      디테일로 완성한
      프리미엄 디자인

      작은 것이 언제나 완성도를 높이죠.
      향상된 후면의 플로팅 카메라 디자인과
      새로운 사이드 버튼 및 스피커 배열 모두
      프리미엄 디자인을 완성하는 디테일 입니다.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 이미지는 갤럭시 탭 S9 Ultra 기준으로 묘사 되었습니다.
      • * 갤럭시 탭 S8 Ultra와 비교한 결과로 갤럭시 탭 S9 Ultra는
        업그레이드된 13 MP 및
        8 MP 후면 카메라와
        12 MP 및 12 MP 울트라 와이드 전면 카메라를 제공합니다.
        갤럭시 탭 S8+과 비교한 결과 갤럭시 탭 S9+는
        업그레이드된 13 MP 및
        8 MP 후면 카메라와
        12 MP 울트라 와이드 전면 카메라를 제공합니다.
        갤럭시 탭 S9은 13 MP 후면 카메라와
        12 MP 울트라 와이드 전면 카메라를 제공합니다.

      몰입감 넘치는
      게이밍을 위한
      차세대 프로세서

      갤럭시만을 위한 초고속 스냅드래곤 8 2세대는
      최상의 게임 플레이를 위해
      향상된 성능과 절전 기능을
      제공하도록 지능적으로 설계되었습니다.
      그래픽 엔진은 3D 게임 환경에서 사실적인 반사 및
      그림자를 구현하여
      몰입감 넘치는 게임 환경을
      제공합니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (44)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (45)

      • * 이해를 돕기 위해 연출된 이미지입니다.
      • * 스냅드래곤(Snapdragon)은 Qualcomm Technologies, Inc.
        또는 그 자회사의 제품입니다.
      • * 스냅드래곤(Snapdragon)은 Qualcomm Incorporated의
        상표 및 등록 상표입니다.

      궁극의 비주얼로 즐기는
      차원이 다른 플레이

      갤럭시 탭 S9 시리즈는 넓은 화면과 실제 같은 비주얼로
      장시간 플레이에도 지루할 틈 없이 몰입감 넘치는
      게임 경험을 선사합니다.
      쿼드 AKG 스피커 시스템의 몰입감 넘치는 오디오와
      Dolby Atmos 서라운드 사운드로 보다 짜릿한 경험을
      즐겨보세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (46) 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (47) 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (48) 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (49)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (50)

      • * 이해를 돕기 위해 연출된 이미지입니다.
      • * 갤럭시 탭 S9 시리즈에 사용된 OLED 디스플레이는
        블루라이트의 유해성을 획기적으로 줄여줘
        SGS의 'Eye Care' 인증을 받았습니다.
        이 인증에 대한 자세한 내용은
        www.sgs.com/performance에서 확인할 수 있습니다.
      • * 갤럭시 탭 S9 시리즈 디스플레이에 사용된 OLED 디스플레이는
        역동적이고 빠른 액션 게임을 즐길 때 중요한 화질 요소인
        응답시간과 퍼펙트 블랙에서 각각 0.2 ms 이하, 0.0005 nit 이하를
        기록해 SGS로부터 '게이밍 성능' 인증을 받았습니다.
        이 인증에 대한 자세한 내용은
        www.sgs.com/performance에서 확인할 수 있습니다.

      언제 어디서나
      든든한 배터리

      갤럭시 탭 S9 시리즈는 당신이 어디서든 마음껏
      즐길 수 있도록
      든든한 배터리 용량을 자랑합니다.
      걱정 없이 사용 할 수 있는 대용량 배터리로
      스마트폰 충전까지 가능하죠.
      USB-C 케이블로 갤럭시 스마트폰, 태블릿에
      연결해 보세요.
      알아서 충전을 시작합니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (51)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (52)

      Type-C 케이블을 사용해 갤럭시 Z 플립5를 갤럭시 탭 S9 시리즈 기기와 연결하여 충전하고 있습니다.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 외부 실험실 환경에서 측정한 평균 값입니다.
        IEC 61960 표준에 따라 테스트 된 배터리 샘플 간의
        배터리 용량 편차를 고려한 예상 평균 값입니다.
        정격 용량은 갤럭시 탭 S9 Ultra의 경우 10,880 mAh,
        갤럭시 탭 S9+의 경우 9,800 mAh,
        갤럭시 탭 S9의 경우 8,160 mAh입니다.
        실제 배터리 수명은 네트워크 환경, 사용 패턴 및 기타 요인에 따라
        달라질 수 있습니다.
        갤럭시 Z 플립5, 갤럭시 Z 폴드5, 갤럭시 Z 플립4, 갤럭시 Z 폴드4,
        갤럭시 S23, 갤럭시 S22, 갤럭시 A53, 갤럭시 A33,
        갤럭시 탭 S8 시리즈, 갤럭시 탭 S9 시리즈 간에
        배터리 전원을 공유할 때 전원 공급원은 임의로 결정됩니다.
      • * 충전 속도는 충전 환경 및 기타 요인에 따라 달라질 수 있습니다.
      • * 갤럭시 스마트폰은 별도 구매가 필요한 상품입니다.

      소중한 작품들을
      microSD에 저장

      최대 1 TB의 내장 스토리지를 선택하고
      마음껏 작품을 스케치해 보세요.
      직접 작업한 동영상, 음악, 고해상도 사진 등을
      저장할 공간이
      더 필요할 때는 microSD를
      추가하면 되죠.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * microSD card는 별도 구매가 필요한 상품입니다.
      • * 사용 가능한 1 TB 스토리지 옵션은
        국가, 이동 통신사 또는
        사용자 환경에 따라 다를 수 있습니다.
        실제 스토리지 가용성은 사전 설치된 소프트웨어에 따라
        다를 수 있습니다.
        갤럭시 탭 S9 Ultra의 경우 최대 1 TB,
        갤럭시 탭 S9+의 경우 최대 512 GB,
        갤럭시 탭 S9의 경우 최대 256 GB의 스토리지 옵션을
        사용할 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (53)

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * microSD card는 별도 구매가 필요한 상품입니다.
      • * 사용 가능한 1 TB 스토리지 옵션은
        국가, 이동 통신사 또는
        사용자 환경에 따라 다를 수 있습니다.
        실제 스토리지 가용성은 사전 설치된 소프트웨어에 따라
        다를 수 있습니다.
        갤럭시 탭 S9 Ultra의 경우 최대 1 TB,
        갤럭시 탭 S9+의 경우 최대 512 GB,
        갤럭시 탭 S9의 경우 최대 256 GB의 스토리지 옵션을
        사용할 수 있습니다.

      필기 실력을
      배로 늘려줄
      굿노트

      매끄러운 S펜으로 노트에 필기하듯
      굿노트(GoodNotes)를 사용해 보세요.
      전문가 수준의 창작물을 만들어 낼 수 있습니다.
      세로 보기에서 스케치하고 가로 보기에서 편집하고
      자유자재로 상상력을 발휘할 수 있죠.
      물론, 그 반대로도 가능합니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (54)

      매끄러운 S펜으로 노트에 필기하듯
      굿노트(GoodNotes)를 사용해 보세요.
      전문가 수준의 창작물을 만들어 낼 수 있습니다.
      세로 보기에서 스케치하고 가로 보기에서 편집하고
      자유자재로 상상력을 발휘할 수 있죠.
      물론, 그 반대로도 가능합니다.

      • * 이해를 돕기 위해 연출된 이미지이며,
        실제 UI는 다를 수 있습니다.
      • * 베이지 색상의 갤럭시 탭 S9 시리즈에는
        베이지 색상의 S펜이 함께 제공됩니다.
      • * 굿노트(GoodNotes) 앱은 갤럭시 스토어에서
        다운로드할 수 있으며 1년 무료 정식 버전이 함께 제공됩니다.
        무료 버전 기간이 종료되어도 자동 결제 되지 않으며,
        추가 사용을 원하실 경우 별도 구매가 필요합니다.

      갤럭시 기기를 연결하는
      Samsung Notes

      S펜과 Samsung Notes를 사용해
      팀원들과 함께 브레인스토밍을 진행해 보세요.
      갤럭시 기기끼리 노트를 공유하며
      앱에서 실시간으로 콘텐츠를 편집할 수도 있죠.
      또한, 여러 페이지로 구성된 문서를 손쉽게 스캔하고
      갤러리에 저장해
      화상 미팅 중에 띄우고
      같이 의논해 보세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (55)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (56)

      가로 모드의 갤럭시 탭 S9 시리즈 기기가 있습니다. 화면에는 Samsung Notes 앱이 실행되어 있고 S펜을 사용해 더 크게 확대한 자동차 이미지가 삽입되어 있습니다. 기기 앞쪽에는 활짝 펼쳐진 갤럭시 Z 폴드5가 있습니다. 화면에는 태블릿과 마찬가지로 Samsung Notes 앱이 실행되어 있고 자동차 이미지도 더 크게 확대되어 있습니다.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 동일한 삼성 계정으로 로그인이 필요합니다.
      • * Samsung Notes 실시간 콘텐츠 편집을 위해서는 삼성 계정에 로그인 되어 있어야 합니다.
        (Samsung Notes 옵션 더보기 > 공동 작업할 사람 초대 >
        공유 노트에 멤버 초대)

      화면을 나눌수록
      높아지는 작업 능률

      여러가지 작업을 한눈에 확인하세요.
      창을 닫고 여는 번거로움 없이
      한 화면에
      최대 3개의 화면을 띄워보세요.
      아이디어를 스케치하고 필기하며 화상 미팅을
      진행할 수 있죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (57)

      • * 이해를 돕기 위해 연출된 이미지이며,
        실제 UI는 다를 수 있습니다.
      • * 키보드 북커버는 별도 구매가 필요한 상품입니다.
      • * Google Meet 및 Microsoft 365는
        Google Play에서 다운로드할 수 있습니다.
        Google Meet은 Google LLC의 상표입니다.
      • * 디스플레이에 최대 3개 앱을 동시에 사용할 수 있습니다.
      • * 특정 애플리케이션은 멀티태스킹을 지원하지 않을 수 있습니다.

      다양한 정품 커버로
      강화된 태블릿 경험

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (58)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (59)

      키보드 북커버가 펼쳐져 있어 디스플레이와 키보드를 모두 확인 가능한 상태의 갤럭시 탭 S9 시리즈 기기가 있습니다. 아래쪽에서 S펜이 나타나고 오른쪽에서 스마트 북커버를 씌운 또 다른 갤럭시 탭 S9 시리즈 기기가 등장합니다. 그리고 왼쪽에 개인정보 보호 화면을 표시한 갤럭시 탭 S9 시리즈 기기가 나타납니다.

      * 이해를 돕기 위해 연출된 이미지로
      실사용 시 차이가 있을 수 있습니다.

      PC로 변신
      키보드 북커버

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (60)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (61)

      키보드 북커버를 부착하면
      어떤 일도 쉽게 정리할 수 있죠.
      기능 키와 트랙패드가 장착된 풀 백라이트 키보드는
      DeX 모드를 지원하여 PC와 같은 원활한 사용 환경을
      제공합니다.
      앱 바로가기를 지정해 효율성을 높이고
      다른 갤럭시 기기와 무선으로 연결하여
      어떤 화면에서도 간편하게 입력할 수 있죠.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 키보드 북커버는 별도 구매가 필요한 상품입니다.
        갤럭시 탭 S9 Ultra, 갤럭시 탭 S9+ 그리고
        갤럭시 탭 S9에서 사용할 수 있습니다.
        제품 디자인은 모델에 따라 다를 수 있습니다.
      • * 기능 및 키보드 레이아웃은 모델 또는 언어 유형에 따라
        다를 수 있습니다.
        백라이트 기능은 갤럭시 탭 S9 Ultra 키보드 북커버에서만
        사용할 수 있으며 Fn + F12를 눌러 활성화 할 수 있습니다.
      • * 무선 키보드 공유 기능은 One UI 2.5 이상을 실행하는
        갤럭시 탭 기기에서 지원되며,
        POGO를 통해 북커버 키보드에 연결됩니다.
        일부 스마트폰 모델에서는 사용할 수 없습니다.
      • * 무선 키보드 공유 기능은 최대 3대의 기기를 등록할 수 있습니다.
        무선 키보드 공유 기능을 활성화하려면
        두 기기가 동일한 삼성 계정에 로그인되어 있어야 합니다.
        성능은 사용자 네트워크 환경에 따라 달라질 수 있습니다.
      • * 무선 키보드 공유 기능은 설정 > 일반 > 하드웨어 키보드 >
        무선 키보드 공유에서 설정/해제할 수 있습니다.

      종이에 써내려 가듯
      노트페이퍼 스크린

      노트페이퍼 스크린을 사용하면 종이에 써내려 가는 듯
      선명한 필기가 가능합니다.
      그림도 S펜으로 그려 보세요.
      필압에 따른 민감한 반응과 펜의 기울기 인식으로
      정밀한 스케치와 일러스트 작품을 완성 할 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (62)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (63)

      • * 이해를 돕기 위해 연출된 이미지며, 실제 UI는 다를 수 있습니다.
      • * 노트페이퍼 스크린은 별도 구매가 필요한 상품입니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (64)

      세로로 또는 가로로
      스마트 북커버

      무엇을 하든 스마트 북커버를 사용하면
      간단한 조정만으로 가장 편안한 자세를 찾을 수 있죠.
      갤럭시 탭 S9, 갤럭시 탭 S9+ 또는
      갤럭시 탭 S9 Ultra를
      세로나 가로로 세워 보세요.

      • * 이해를 돕기 위해 연출된 이미지로
        실사용 시 차이가 있을 수 있습니다.
      • * 스마트 북커버는 별도 구매가 필요한 상품입니다.

      제품 기본 구성품

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (65)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (66)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (67)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (68)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (69)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (70)

      압도적인 성능의
      갤럭시 탭 S9 시리즈를
      만나보세요

      • 갤럭시 탭 S9 Ultra

        • 갤럭시 탭 S9 Ultra
        • 갤럭시 탭 S9+
        • 갤럭시 탭 S9
        • 갤럭시 탭 S8 Ultra
        • 갤럭시 탭 S8+
        • 갤럭시 탭 S8

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (71)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (72)

        자세히 보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (73) 디스플레이 369.9 mm
          다이나믹 아몰레드 2X
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (74) 내구성 IP68
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (75) 프로세서 스냅드래곤8 2세대
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (76) 스토리지 256 GB, 512 GB, 1TB
          Micro SD 지원
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (77) 메모리 12 GB, 16 GB
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (78) (표준)
          배터리
          11,200 mAh
        • IP68 S펜(BLEO) 내장
        • 카메라 [후면]
          13 MP + 8 MP 울트라 와이드
          [전면]
          12 MP + 12 MP 울트라 와이드
        • 네트워크 5G / Wi-Fi
        • 무게 737 g (5G),
          732 g (Wi-Fi)
        • 두께 5.5 mm
      • 갤럭시 탭 S9+

        • 갤럭시 탭 S9 Ultra
        • 갤럭시 탭 S9+
        • 갤럭시 탭 S9
        • 갤럭시 탭 S8 Ultra
        • 갤럭시 탭 S8+
        • 갤럭시 탭 S8

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (79)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (80)

        자세히 보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (81) 디스플레이 315.0 mm
          다이나믹 아몰레드 2X
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (82) 내구성 IP68
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (83) 프로세서 스냅드래곤8 2세대
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (84) 스토리지 256 GB, 512 GB
          Micro SD 지원
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (85) 메모리 12 GB
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (86) (표준)
          배터리
          10,090 mAh
        • IP68 S펜(BLEO) 내장
        • 카메라 [후면]
          13 MP + 8 MP 울트라 와이드
          [전면]
          12 MP 울트라 와이드
        • 네트워크 5G / Wi-Fi
        • 무게 586 g (5G),
          581 g (Wi-Fi)
        • 두께 5.7 mm
      • 갤럭시 탭 S9

        • 갤럭시 탭 S9 Ultra
        • 갤럭시 탭 S9+
        • 갤럭시 탭 S9
        • 갤럭시 탭 S8 Ultra
        • 갤럭시 탭 S8+
        • 갤럭시 탭 S8

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (87)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (88)

        자세히 보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (89) 디스플레이 278.1 mm
          다이나믹 아몰레드 2X
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (90) 내구성 IP68
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (91) 프로세서 스냅드래곤8 2세대
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (92) 스토리지 128 GB, 256 GB
          Micro SD 지원
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (93) 메모리 8 GB, 12 GB
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (94) (표준)
          배터리
          8,400 mAh
        • IP68 S펜(BLEO) 내장
        • 카메라 [후면]
          13 MP
          [전면]
          12 MP 울트라 와이드
        • 네트워크 5G / Wi-Fi
        • 무게 500 g (5G),
          498 g (Wi-Fi)
        • 두께 5.9 mm

      "); return t.attr("data-swiper-slide-index") || t.attr("data-swiper-slide-index", e), i.cache && (this.virtual.cache[e] = t), t }, appendSlide: function(t) { if ("object" == typeof t && "length" in t) for (var e = 0; e < t.length; e += 1) t[e] && this.virtual.slides.push(t[e]); else this.virtual.slides.push(t); this.virtual.update(!0) }, prependSlide: function(t) { var s, a, e = this.activeIndex, i = e + 1, n = 1; if (Array.isArray(t)) { for (var o = 0; o < t.length; o += 1) t[o] && this.virtual.slides.unshift(t[o]); i = e + t.length, n = t.length } else this.virtual.slides.unshift(t); this.params.virtual.cache && (s = this.virtual.cache, a = {}, Object.keys(s).forEach(function(t) { var e = s[t], i = e.attr("data-swiper-slide-index"); i && e.attr("data-swiper-slide-index", parseInt(i, 10) + 1), a[parseInt(t, 10) + n] = e }), this.virtual.cache = a), this.virtual.update(!0), this.slideTo(i, 0) }, removeSlide: function(t) { if (null != t) { var e = this.activeIndex; if (Array.isArray(t)) for (var i = t.length - 1; 0 <= i; --i) this.virtual.slides.splice(t[i], 1), this.params.virtual.cache && delete this.virtual.cache[t[i]], t[i] < e && --e, e = Math.max(e, 0); else this.virtual.slides.splice(t, 1), this.params.virtual.cache && delete this.virtual.cache[t], t < e && --e, e = Math.max(e, 0); this.virtual.update(!0), this.slideTo(e, 0) } }, removeAllSlides: function() { this.virtual.slides = [], this.params.virtual.cache && (this.virtual.cache = {}), this.virtual.update(!0), this.slideTo(0, 0) } }, w = { name: "virtual", params: { virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, addSlidesBefore: 0, addSlidesAfter: 0 } }, create: function() { U.extend(this, { virtual: { update: b.update.bind(this), appendSlide: b.appendSlide.bind(this), prependSlide: b.prependSlide.bind(this), removeSlide: b.removeSlide.bind(this), removeAllSlides: b.removeAllSlides.bind(this), renderSlide: b.renderSlide.bind(this), slides: this.params.virtual.slides, cache: {} } }) }, on: { beforeInit: function() { var t; this.params.virtual.enabled && (this.classNames.push(this.params.containerModifierClass + "virtual"), U.extend(this.params, t = { watchSlidesProgress: !0 }), U.extend(this.originalParams, t), this.params.initialSlide || this.virtual.update()) }, setTranslate: function() { this.params.virtual.enabled && this.virtual.update() } } }, K = { handle: function(t) { var e = this.rtlTranslate, i = (t = t.originalEvent ? t.originalEvent : t).keyCode || t.charCode; if (!this.allowSlideNext && (this.isHorizontal() && 39 === i || this.isVertical() && 40 === i || 34 === i)) return !1; if (!this.allowSlidePrev && (this.isHorizontal() && 37 === i || this.isVertical() && 38 === i || 33 === i)) return !1; if (!(t.shiftKey || t.altKey || t.ctrlKey || t.metaKey || c.activeElement && c.activeElement.nodeName && ("input" === c.activeElement.nodeName.toLowerCase() || "textarea" === c.activeElement.nodeName.toLowerCase()))) { if (this.params.keyboard.onlyInViewport && (33 === i || 34 === i || 37 === i || 39 === i || 38 === i || 40 === i)) { var s = !1; if (0 < this.$el.parents("." + this.params.slideClass).length && 0 === this.$el.parents("." + this.params.slideActiveClass).length) return; var a = X.innerWidth, n = X.innerHeight, o = this.$el.offset(); e && (o.left -= this.$el[0].scrollLeft); for (var r = [ [o.left, o.top], [o.left + this.width, o.top], [o.left, o.top + this.height], [o.left + this.width, o.top + this.height] ], l = 0; l < r.length; l += 1) { var h = r[l]; 0 <= h[0] && h[0] <= a && 0 <= h[1] && h[1] <= n && (s = !0) } if (!s) return } this.isHorizontal() ? (33 !== i && 34 !== i && 37 !== i && 39 !== i || (t.preventDefault ? t.preventDefault() : t.returnValue = !1), (34 !== i && 39 !== i || e) && (33 !== i && 37 !== i || !e) || this.slideNext(), (33 !== i && 37 !== i || e) && (34 !== i && 39 !== i || !e) || this.slidePrev()) : (33 !== i && 34 !== i && 38 !== i && 40 !== i || (t.preventDefault ? t.preventDefault() : t.returnValue = !1), 34 !== i && 40 !== i || this.slideNext(), 33 !== i && 38 !== i || this.slidePrev()), this.emit("keyPress", i) } }, enable: function() { this.keyboard.enabled || (S(c).on("keydown", this.keyboard.handle), this.keyboard.enabled = !0) }, disable: function() { this.keyboard.enabled && (S(c).off("keydown", this.keyboard.handle), this.keyboard.enabled = !1) } }, E = { name: "keyboard", params: { keyboard: { enabled: !1, onlyInViewport: !0 } }, create: function() { U.extend(this, { keyboard: { enabled: !1, enable: K.enable.bind(this), disable: K.disable.bind(this), handle: K.handle.bind(this) } }) }, on: { init: function() { this.params.keyboard.enabled && this.keyboard.enable() }, destroy: function() { this.keyboard.enabled && this.keyboard.disable() } } }; function C() { for (var i, t = [], e = arguments.length; e--;) t[e] = arguments[e]; i = (i = 1 === t.length && t[0].constructor && t[0].constructor === Object ? t[0] : (n = t[0], t[1])) || {}, i = U.extend({}, i), n && !i.el && (i.el = n), d.call(this, i), Object.keys(R).forEach(function(e) { Object.keys(R[e]).forEach(function(t) { C.prototype[t] || (C.prototype[t] = R[e][t]) }) }); var s, a, n, o = this, r = (void 0 === o.modules && (o.modules = {}), Object.keys(o.modules).forEach(function(t) { var e, t = o.modules[t]; t.params && (e = Object.keys(t.params)[0], "object" == typeof(t = t.params[e]) && null !== t && e in i && "enabled" in t && (!0 === i[e] && (i[e] = { enabled: !0 }), "object" != typeof i[e] || "enabled" in i[e] || (i[e].enabled = !0), i[e] || (i[e] = { enabled: !1 }))) }), U.extend({}, $)), l = (o.useModulesParams(r), o.params = U.extend({}, r, j, i), o.originalParams = U.extend({}, o.params), o.passedParams = U.extend({}, i), (o.$ = S)(o.params.el)); if (n = l[0]) return 1 < l.length ? (s = [], l.each(function(t, e) { e = U.extend({}, i, { el: e }); s.push(new C(e)) }), s) : (n.swiper = o, l.data("swiper", o), n && n.shadowRoot && n.shadowRoot.querySelector ? (a = S(n.shadowRoot.querySelector("." + o.params.wrapperClass))).children = function(t) { return l.children(t) } : a = l.children("." + o.params.wrapperClass), U.extend(o, { $el: l, el: n, $wrapperEl: a, wrapperEl: a[0], classNames: [], slides: S(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], isHorizontal: function() { return "horizontal" === o.params.direction }, isVertical: function() { return "vertical" === o.params.direction }, rtl: "rtl" === n.dir.toLowerCase() || "rtl" === l.css("direction"), rtlTranslate: "horizontal" === o.params.direction && ("rtl" === n.dir.toLowerCase() || "rtl" === l.css("direction")), wrongRTL: "-webkit-box" === a.css("display"), activeIndex: 0, realIndex: 0, isBeginning: !0, isEnd: !1, translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: !1, allowSlideNext: o.params.allowSlideNext, allowSlidePrev: o.params.allowSlidePrev, touchEvents: (r = y.pointerEvents ? ["pointerdown", "pointermove", "pointerup"] : ["mousedown", "mousemove", "mouseup"], o.touchEventsTouch = { start: (n = ["touchstart", "touchmove", "touchend", "touchcancel"])[0], move: n[1], end: n[2], cancel: n[3] }, o.touchEventsDesktop = { start: r[0], move: r[1], end: r[2] }, y.touch || !o.params.simulateTouch ? o.touchEventsTouch : o.touchEventsDesktop), touchEventsData: { isTouched: void 0, isMoved: void 0, allowTouchCallbacks: void 0, touchStartTime: void 0, isScrolling: void 0, currentTranslate: void 0, startTranslate: void 0, allowThresholdMove: void 0, formElements: "input, select, option, textarea, button, video", lastClickTime: U.now(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0 }, allowClick: !0, allowTouchMove: o.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, imagesToLoad: [], imagesLoaded: 0 }), o.useModules(), o.params.init && o.init(), o) } var x = { lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [], event: function() { return -1 < X.navigator.userAgent.indexOf("firefox") ? "DOMMouseScroll" : ((e = "onwheel" in c) || ((t = c.createElement("div")).setAttribute("onwheel", "return;"), e = "function" == typeof t.onwheel), (e = !e && c.implementation && c.implementation.hasFeature && !0 !== c.implementation.hasFeature("", "") ? c.implementation.hasFeature("Events.wheel", "3.0") : e) ? "wheel" : "mousewheel"); var t, e }, normalize: function(t) { var e = 0, i = 0, s = 0, a = 0; return "detail" in t && (i = t.detail), "wheelDelta" in t && (i = -t.wheelDelta / 120), "wheelDeltaY" in t && (i = -t.wheelDeltaY / 120), "wheelDeltaX" in t && (e = -t.wheelDeltaX / 120), "axis" in t && t.axis === t.HORIZONTAL_AXIS && (e = i, i = 0), s = 10 * e, a = 10 * i, "deltaY" in t && (a = t.deltaY), "deltaX" in t && (s = t.deltaX), t.shiftKey && !s && (s = a, a = 0), (s || a) && t.deltaMode && (1 === t.deltaMode ? (s *= 40, a *= 40) : (s *= 800, a *= 800)), { spinX: e = s && !e ? s < 1 ? -1 : 1 : e, spinY: i = a && !i ? a < 1 ? -1 : 1 : i, pixelX: s, pixelY: a } }, handleMouseEnter: function() { this.mouseEntered = !0 }, handleMouseLeave: function() { this.mouseEntered = !1 }, handle: function(t) { var e = t, i = this, s = i.params.mousewheel; if (i.params.cssMode && e.preventDefault(), !i.mouseEntered && !s.releaseOnEdges) return !0; e.originalEvent && (e = e.originalEvent); var a = 0, n = i.rtlTranslate ? -1 : 1, o = x.normalize(e); if (s.forceToAxis) if (i.isHorizontal()) { if (!(Math.abs(o.pixelX) > Math.abs(o.pixelY))) return !0; a = o.pixelX * n } else { if (!(Math.abs(o.pixelY) > Math.abs(o.pixelX))) return !0; a = o.pixelY } else a = Math.abs(o.pixelX) > Math.abs(o.pixelY) ? -o.pixelX * n : -o.pixelY; if (0 === a) return !0; if (s.invert && (a = -a), i.params.freeMode) { var r = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a) }, n = i.mousewheel.lastEventBeforeSnap, o = n && r.time < n.time + 500 && r.delta <= n.delta && r.direction === n.direction; if (!o) { i.mousewheel.lastEventBeforeSnap = void 0, i.params.loop && i.loopFix(); var l, h, n = i.getTranslate() + a * s.sensitivity, s = i.isBeginning, d = i.isEnd; if ((n = n >= i.minTranslate() ? i.minTranslate() : n) <= i.maxTranslate() && (n = i.maxTranslate()), i.setTransition(0), i.setTranslate(n), i.updateProgress(), i.updateActiveIndex(), i.updateSlidesClasses(), (!s && i.isBeginning || !d && i.isEnd) && i.updateSlidesClasses(), i.params.freeModeSticky && (clearTimeout(i.mousewheel.timeout), i.mousewheel.timeout = void 0, 15 <= (l = i.mousewheel.recentWheelEvents).length && l.shift(), s = l.length ? l[l.length - 1] : void 0, d = l[0], l.push(r), s && (r.delta > s.delta || r.direction !== s.direction) ? l.splice(0) : 15 <= l.length && r.time - d.time < 500 && 1 <= d.delta - r.delta && r.delta <= 6 && (h = 0 < a ? .8 : .2, i.mousewheel.lastEventBeforeSnap = r, l.splice(0), i.mousewheel.timeout = U.nextTick(function() { i.slideToClosest(i.params.speed, !0, void 0, h) }, 0)), i.mousewheel.timeout || (i.mousewheel.timeout = U.nextTick(function() { i.mousewheel.lastEventBeforeSnap = r, l.splice(0), i.slideToClosest(i.params.speed, !0, void 0, .5) }, 500))), o || i.emit("scroll", e), i.params.autoplay && i.params.autoplayDisableOnInteraction && i.autoplay.stop(), n === i.minTranslate() || n === i.maxTranslate()) return !0 } } else { s = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a), raw: t }, d = i.mousewheel.recentWheelEvents, o = (2 <= d.length && d.shift(), d.length ? d[d.length - 1] : void 0); if (d.push(s), (!o || s.direction !== o.direction || s.delta > o.delta) && i.mousewheel.animateSlider(s), i.mousewheel.releaseScroll(s)) return !0 } return e.preventDefault ? e.preventDefault() : e.returnValue = !1, !1 }, animateSlider: function(t) { return 6 <= t.delta && U.now() - this.mousewheel.lastScrollTime < 60 || (t.direction < 0 ? this.isEnd && !this.params.loop || this.animating || (this.slideNext(), this.emit("scroll", t.raw)) : this.isBeginning && !this.params.loop || this.animating || (this.slidePrev(), this.emit("scroll", t.raw)), this.mousewheel.lastScrollTime = (new X.Date).getTime(), !1) }, releaseScroll: function(t) { var e = this.params.mousewheel; if (t.direction < 0) { if (this.isEnd && !this.params.loop && e.releaseOnEdges) return !0 } else if (this.isBeginning && !this.params.loop && e.releaseOnEdges) return !0; return !1 }, enable: function() { var t = x.event(); if (this.params.cssMode) return this.wrapperEl.removeEventListener(t, this.mousewheel.handle), !0; if (!t) return !1; if (this.mousewheel.enabled) return !1; var e = this.$el; return (e = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : e).on("mouseenter", this.mousewheel.handleMouseEnter), e.on("mouseleave", this.mousewheel.handleMouseLeave), e.on(t, this.mousewheel.handle), this.mousewheel.enabled = !0 }, disable: function() { var t = x.event(); if (this.params.cssMode) return this.wrapperEl.addEventListener(t, this.mousewheel.handle), !0; if (!t) return !1; if (!this.mousewheel.enabled) return !1; var e = this.$el; return (e = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : e).off(t, this.mousewheel.handle), !(this.mousewheel.enabled = !1) } }, L = { update: function() { var t, e, i = this.params.navigation; this.params.loop || (t = (e = this.navigation).$nextEl, (e = e.$prevEl) && 0 < e.length && (this.isBeginning ? e.addClass(i.disabledClass) : e.removeClass(i.disabledClass), e[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass)), t && 0 < t.length && (this.isEnd ? t.addClass(i.disabledClass) : t.removeClass(i.disabledClass), t[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass))) }, onPrevClick: function(t) { t.preventDefault(), this.isBeginning && !this.params.loop || this.slidePrev() }, onNextClick: function(t) { t.preventDefault(), this.isEnd && !this.params.loop || this.slideNext() }, init: function() { var t, e, i = this.params.navigation; (i.nextEl || i.prevEl) && (i.nextEl && (t = S(i.nextEl), this.params.uniqueNavElements && "string" == typeof i.nextEl && 1 < t.length && 1 === this.$el.find(i.nextEl).length && (t = this.$el.find(i.nextEl))), i.prevEl && (e = S(i.prevEl), this.params.uniqueNavElements && "string" == typeof i.prevEl && 1 < e.length && 1 === this.$el.find(i.prevEl).length && (e = this.$el.find(i.prevEl))), t && 0 < t.length && t.on("click", this.navigation.onNextClick), e && 0 < e.length && e.on("click", this.navigation.onPrevClick), U.extend(this.navigation, { $nextEl: t, nextEl: t && t[0], $prevEl: e, prevEl: e && e[0] })) }, destroy: function() { var t = this.navigation, e = t.$nextEl, t = t.$prevEl; e && e.length && (e.off("click", this.navigation.onNextClick), e.removeClass(this.params.navigation.disabledClass)), t && t.length && (t.off("click", this.navigation.onPrevClick), t.removeClass(this.params.navigation.disabledClass)) } }, A = { update: function() { var t = this.rtl, s = this.params.pagination; if (s.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var a, e = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, n = this.params.loop ? Math.ceil((e - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length; if (this.params.loop ? ((a = Math.ceil((this.activeIndex - this.loopedSlides) / this.params.slidesPerGroup)) > e - 1 - 2 * this.loopedSlides && (a -= e - 2 * this.loopedSlides), n - 1 < a && (a -= n), a < 0 && "bullets" !== this.params.paginationType && (a = n + a)) : a = void 0 !== this.snapIndex ? this.snapIndex : this.activeIndex || 0, "bullets" === s.type && this.pagination.bullets && 0 < this.pagination.bullets.length) { var o, r, l, h = this.pagination.bullets; if (s.dynamicBullets && (this.pagination.bulletSize = h.eq(0)[this.isHorizontal() ? "outerWidth" : "outerHeight"](!0), i.css(this.isHorizontal() ? "width" : "height", this.pagination.bulletSize * (s.dynamicMainBullets + 4) + "px"), 1 < s.dynamicMainBullets && void 0 !== this.previousIndex && (this.pagination.dynamicBulletIndex += a - this.previousIndex, this.pagination.dynamicBulletIndex > s.dynamicMainBullets - 1 ? this.pagination.dynamicBulletIndex = s.dynamicMainBullets - 1 : this.pagination.dynamicBulletIndex < 0 && (this.pagination.dynamicBulletIndex = 0)), o = a - this.pagination.dynamicBulletIndex, l = ((r = o + (Math.min(h.length, s.dynamicMainBullets) - 1)) + o) / 2), h.removeClass(s.bulletActiveClass + " " + s.bulletActiveClass + "-next " + s.bulletActiveClass + "-next-next " + s.bulletActiveClass + "-prev " + s.bulletActiveClass + "-prev-prev " + s.bulletActiveClass + "-main"), 1 < i.length) h.each(function(t, e) { var e = S(e), i = e.index(); i === a && e.addClass(s.bulletActiveClass), s.dynamicBullets && (o <= i && i <= r && e.addClass(s.bulletActiveClass + "-main"), i === o && e.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), i === r && e.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next")) }); else { var e = h.eq(a), d = e.index(); if (e.addClass(s.bulletActiveClass), s.dynamicBullets) { for (var e = h.eq(o), c = h.eq(r), u = o; u <= r; u += 1) h.eq(u).addClass(s.bulletActiveClass + "-main"); if (this.params.loop) if (d >= h.length - s.dynamicMainBullets) { for (var p = s.dynamicMainBullets; 0 <= p; --p) h.eq(h.length - p).addClass(s.bulletActiveClass + "-main"); h.eq(h.length - s.dynamicMainBullets - 1).addClass(s.bulletActiveClass + "-prev") } else e.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next"); else e.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next") } } s.dynamicBullets && (d = Math.min(h.length, s.dynamicMainBullets + 4), e = (this.pagination.bulletSize * d - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize, c = t ? "right" : "left", h.css(this.isHorizontal() ? c : "top", e + "px")) } "fraction" === s.type && (i.find("." + s.currentClass).text(s.formatFractionCurrent(a + 1)), i.find("." + s.totalClass).text(s.formatFractionTotal(n))), "progressbar" === s.type && (d = s.progressbarOpposite ? this.isHorizontal() ? "vertical" : "horizontal" : this.isHorizontal() ? "horizontal" : "vertical", l = (a + 1) / n, c = t = 1, "horizontal" == d ? t = l : c = l, i.find("." + s.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + t + ") scaleY(" + c + ")").transition(this.params.speed)), "custom" === s.type && s.renderCustom ? (i.html(s.renderCustom(this, a + 1, n)), this.emit("paginationRender", this, i[0])) : this.emit("paginationUpdate", this, i[0]), i[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](s.lockClass) } }, render: function() { var t = this.params.pagination; if (t.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var e = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, s = ""; if ("bullets" === t.type) { for (var a = this.params.loop ? Math.ceil((e - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length, n = 0; n < a; n += 1) t.renderBullet ? s += t.renderBullet.call(this, n, t.bulletClass) : s += "<" + t.bulletElement + ' class="' + t.bulletClass + '">' + t.bulletElement + ">"; i.html(s), this.pagination.bullets = i.find("." + t.bulletClass) } "fraction" === t.type && (s = t.renderFraction ? t.renderFraction.call(this, t.currentClass, t.totalClass) : ' / ', i.html(s)), "progressbar" === t.type && (s = t.renderProgressbar ? t.renderProgressbar.call(this, t.progressbarFillClass) : '', i.html(s)), "custom" !== t.type && this.emit("paginationRender", this.pagination.$el[0]) } }, init: function() { var t, e = this, i = e.params.pagination; i.el && 0 !== (t = S(i.el)).length && (e.params.uniqueNavElements && "string" == typeof i.el && 1 < t.length && 1 === e.$el.find(i.el).length && (t = e.$el.find(i.el)), "bullets" === i.type && i.clickable && t.addClass(i.clickableClass), t.addClass(i.modifierClass + i.type), "bullets" === i.type && i.dynamicBullets && (t.addClass("" + i.modifierClass + i.type + "-dynamic"), e.pagination.dynamicBulletIndex = 0, i.dynamicMainBullets < 1 && (i.dynamicMainBullets = 1)), "progressbar" === i.type && i.progressbarOpposite && t.addClass(i.progressbarOppositeClass), i.clickable && t.on("click", "." + i.bulletClass, function(t) { t.preventDefault(); t = S(this).index() * e.params.slidesPerGroup; e.params.loop && (t += e.loopedSlides), e.slideTo(t) }), U.extend(e.pagination, { $el: t, el: t[0] })) }, destroy: function() { var t, e = this.params.pagination; e.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length && ((t = this.pagination.$el).removeClass(e.hiddenClass), t.removeClass(e.modifierClass + e.type), this.pagination.bullets && this.pagination.bullets.removeClass(e.bulletActiveClass), e.clickable && t.off("click", "." + e.bulletClass)) } }, I = { setTranslate: function() { var t, e, i, s, a, n, o, r; this.params.scrollbar.el && this.scrollbar.el && (n = this.scrollbar, t = this.rtlTranslate, r = this.progress, e = n.dragSize, i = n.trackSize, s = n.$dragEl, a = n.$el, n = this.params.scrollbar, r = (i - (o = e)) * r, t ? 0 < (r = -r) ? (o = e - r, r = 0) : i < -r + e && (o = i + r) : r < 0 ? (o = e + r, r = 0) : i < r + e && (o = i - r), this.isHorizontal() ? (s.transform("translate3d(" + r + "px, 0, 0)"), s[0].style.width = o + "px") : (s.transform("translate3d(0px, " + r + "px, 0)"), s[0].style.height = o + "px"), n.hide && (clearTimeout(this.scrollbar.timeout), a[0].style.opacity = 1, this.scrollbar.timeout = setTimeout(function() { a[0].style.opacity = 0, a.transition(400) }, 1e3))) }, setTransition: function(t) { this.params.scrollbar.el && this.scrollbar.el && this.scrollbar.$dragEl.transition(t) }, updateSize: function() { var t, e, i, s, a, n, o; this.params.scrollbar.el && this.scrollbar.el && (e = (t = this.scrollbar).$dragEl, i = t.$el, e[0].style.width = "", e[0].style.height = "", s = this.isHorizontal() ? i[0].offsetWidth : i[0].offsetHeight, n = (a = this.size / this.virtualSize) * (s / this.size), o = "auto" === this.params.scrollbar.dragSize ? s * a : parseInt(this.params.scrollbar.dragSize, 10), this.isHorizontal() ? e[0].style.width = o + "px" : e[0].style.height = o + "px", i[0].style.display = 1 <= a ? "none" : "", this.params.scrollbar.hide && (i[0].style.opacity = 0), U.extend(t, { trackSize: s, divider: a, moveDivider: n, dragSize: o }), t.$el[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](this.params.scrollbar.lockClass)) }, getPointerPosition: function(t) { return this.isHorizontal() ? ("touchstart" === t.type || "touchmove" === t.type ? t.targetTouches[0] : t).clientX : ("touchstart" === t.type || "touchmove" === t.type ? t.targetTouches[0] : t).clientY }, setDragPosition: function(t) { var e = this.scrollbar, i = this.rtlTranslate, s = e.$el, a = e.dragSize, n = e.trackSize, o = e.dragStartPos, e = (e.getPointerPosition(t) - s.offset()[this.isHorizontal() ? "left" : "top"] - (null !== o ? o : a / 2)) / (n - a), t = (e = Math.max(Math.min(e, 1), 0), i && (e = 1 - e), this.minTranslate() + (this.maxTranslate() - this.minTranslate()) * e); this.updateProgress(t), this.setTranslate(t), this.updateActiveIndex(), this.updateSlidesClasses() }, onDragStart: function(t) { var e = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el, n = i.$dragEl; this.scrollbar.isTouched = !0, this.scrollbar.dragStartPos = t.target === n[0] || t.target === n ? i.getPointerPosition(t) - t.target.getBoundingClientRect()[this.isHorizontal() ? "left" : "top"] : null, t.preventDefault(), t.stopPropagation(), s.transition(100), n.transition(100), i.setDragPosition(t), clearTimeout(this.scrollbar.dragTimeout), a.transition(0), e.hide && a.css("opacity", 1), this.params.cssMode && this.$wrapperEl.css("scroll-snap-type", "none"), this.emit("scrollbarDragStart", t) }, onDragMove: function(t) { var e = this.scrollbar, i = this.$wrapperEl, s = e.$el, a = e.$dragEl; this.scrollbar.isTouched && (t.preventDefault ? t.preventDefault() : t.returnValue = !1, e.setDragPosition(t), i.transition(0), s.transition(0), a.transition(0), this.emit("scrollbarDragMove", t)) }, onDragEnd: function(t) { var e = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el; this.scrollbar.isTouched && (this.scrollbar.isTouched = !1, this.params.cssMode && (this.$wrapperEl.css("scroll-snap-type", ""), s.transition("")), e.hide && (clearTimeout(this.scrollbar.dragTimeout), this.scrollbar.dragTimeout = U.nextTick(function() { a.css("opacity", 0), a.transition(400) }, 1e3)), this.emit("scrollbarDragEnd", t), e.snapOnRelease && this.slideToClosest()) }, enableDraggable: function() { var t, e, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, t = this.touchEventsTouch, e = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!y.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!y.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, y.touch ? (i.addEventListener(t.start, this.scrollbar.onDragStart, s), i.addEventListener(t.move, this.scrollbar.onDragMove, s), i.addEventListener(t.end, this.scrollbar.onDragEnd, a)) : (i.addEventListener(e.start, this.scrollbar.onDragStart, s), c.addEventListener(e.move, this.scrollbar.onDragMove, s), c.addEventListener(e.end, this.scrollbar.onDragEnd, a))) }, disableDraggable: function() { var t, e, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, t = this.touchEventsTouch, e = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!y.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!y.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, y.touch ? (i.removeEventListener(t.start, this.scrollbar.onDragStart, s), i.removeEventListener(t.move, this.scrollbar.onDragMove, s), i.removeEventListener(t.end, this.scrollbar.onDragEnd, a)) : (i.removeEventListener(e.start, this.scrollbar.onDragStart, s), c.removeEventListener(e.move, this.scrollbar.onDragMove, s), c.removeEventListener(e.end, this.scrollbar.onDragEnd, a))) }, init: function() { var t, e, i, s; this.params.scrollbar.el && (t = this.scrollbar, s = this.$el, i = S((e = this.params.scrollbar).el), 0 === (s = (i = this.params.uniqueNavElements && "string" == typeof e.el && 1 < i.length && 1 === s.find(e.el).length ? s.find(e.el) : i).find("." + this.params.scrollbar.dragClass)).length && (s = S('

      '), i.append(s)), U.extend(t, { $el: i, el: i[0], $dragEl: s, dragEl: s[0] }), e.draggable && t.enableDraggable()) }, destroy: function() { this.scrollbar.disableDraggable() } }, Q = { setTransform: function(t, e) { var i = this.rtl, t = S(t), i = i ? -1 : 1, s = t.attr("data-swiper-parallax") || "0", a = t.attr("data-swiper-parallax-x"), n = t.attr("data-swiper-parallax-y"), o = t.attr("data-swiper-parallax-scale"), r = t.attr("data-swiper-parallax-opacity"); a || n ? (a = a || "0", n = n || "0") : this.isHorizontal() ? (a = s, n = "0") : (n = s, a = "0"), a = 0 <= a.indexOf("%") ? parseInt(a, 10) * e * i + "%" : a * e * i + "px", n = 0 <= n.indexOf("%") ? parseInt(n, 10) * e + "%" : n * e + "px", null != r && (s = r - (r - 1) * (1 - Math.abs(e)), t[0].style.opacity = s), null == o ? t.transform("translate3d(" + a + ", " + n + ", 0px)") : (i = o - (o - 1) * (1 - Math.abs(e)), t.transform("translate3d(" + a + ", " + n + ", 0px) scale(" + i + ")")) }, setTranslate: function() { var s = this, t = s.$el, e = s.slides, a = s.progress, n = s.snapGrid; t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(t, e) { s.parallax.setTransform(e, a) }), e.each(function(t, e) { var i = e.progress; 1 < s.params.slidesPerGroup && "auto" !== s.params.slidesPerView && (i += Math.ceil(t / 2) - a * (n.length - 1)), i = Math.min(Math.max(i, -1), 1), S(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(t, e) { s.parallax.setTransform(e, i) }) }) }, setTransition: function(s) { void 0 === s && (s = this.params.speed), this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(t, e) { var e = S(e), i = parseInt(e.attr("data-swiper-parallax-duration"), 10) || s; 0 === s && (i = 0), e.transition(i) }) } }, J = { getDistanceBetweenTouches: function(t) { if (t.targetTouches.length < 2) return 1; var e = t.targetTouches[0].pageX, i = t.targetTouches[0].pageY, s = t.targetTouches[1].pageX, t = t.targetTouches[1].pageY; return Math.sqrt(Math.pow(s - e, 2) + Math.pow(t - i, 2)) }, onGestureStart: function(t) { var e = this.params.zoom, i = this.zoom, s = i.gesture; if (i.fakeGestureTouched = !1, i.fakeGestureMoved = !1, !y.gestures) { if ("touchstart" !== t.type || "touchstart" === t.type && t.targetTouches.length < 2) return; i.fakeGestureTouched = !0, s.scaleStart = J.getDistanceBetweenTouches(t) } s.$slideEl && s.$slideEl.length || (s.$slideEl = S(t.target).closest(".swiper-slide"), 0 === s.$slideEl.length && (s.$slideEl = this.slides.eq(this.activeIndex)), s.$imageEl = s.$slideEl.find("img, svg, canvas"), s.$imageWrapEl = s.$imageEl.parent("." + e.containerClass), s.maxRatio = s.$imageWrapEl.attr("data-swiper-zoom") || e.maxRatio, 0 !== s.$imageWrapEl.length) ? (s.$imageEl.transition(0), this.zoom.isScaling = !0) : s.$imageEl = void 0 }, onGestureChange: function(t) { var e = this.params.zoom, i = this.zoom, s = i.gesture; if (!y.gestures) { if ("touchmove" !== t.type || "touchmove" === t.type && t.targetTouches.length < 2) return; i.fakeGestureMoved = !0, s.scaleMove = J.getDistanceBetweenTouches(t) } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = y.gestures ? t.scale * i.currentScale : s.scaleMove / s.scaleStart * i.currentScale, i.scale > s.maxRatio && (i.scale = s.maxRatio - 1 + Math.pow(i.scale - s.maxRatio + 1, .5)), i.scale < e.minRatio && (i.scale = e.minRatio + 1 - Math.pow(e.minRatio - i.scale + 1, .5)), s.$imageEl.transform("translate3d(0,0,0) scale(" + i.scale + ")")) }, onGestureEnd: function(t) { var e = this.params.zoom, i = this.zoom, s = i.gesture; if (!y.gestures) { if (!i.fakeGestureTouched || !i.fakeGestureMoved) return; if ("touchend" !== t.type || "touchend" === t.type && t.changedTouches.length < 2 && !r.android) return; i.fakeGestureTouched = !1, i.fakeGestureMoved = !1 } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = Math.max(Math.min(i.scale, s.maxRatio), e.minRatio), s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale(" + i.scale + ")"), i.currentScale = i.scale, i.isScaling = !1, 1 === i.scale && (s.$slideEl = void 0)) }, onTouchStart: function(t) { var e = this.zoom, i = e.gesture, e = e.image; i.$imageEl && 0 !== i.$imageEl.length && !e.isTouched && (r.android && t.preventDefault(), e.isTouched = !0, e.touchesStart.x = ("touchstart" === t.type ? t.targetTouches[0] : t).pageX, e.touchesStart.y = ("touchstart" === t.type ? t.targetTouches[0] : t).pageY) }, onTouchMove: function(t) { var e = this.zoom, i = e.gesture, s = e.image, a = e.velocity; if (i.$imageEl && 0 !== i.$imageEl.length && (this.allowClick = !1, s.isTouched && i.$slideEl)) { s.isMoved || (s.width = i.$imageEl[0].offsetWidth, s.height = i.$imageEl[0].offsetHeight, s.startX = U.getTranslate(i.$imageWrapEl[0], "x") || 0, s.startY = U.getTranslate(i.$imageWrapEl[0], "y") || 0, i.slideWidth = i.$slideEl[0].offsetWidth, i.slideHeight = i.$slideEl[0].offsetHeight, i.$imageWrapEl.transition(0), this.rtl && (s.startX = -s.startX, s.startY = -s.startY)); var n = s.width * e.scale, o = s.height * e.scale; if (!(n < i.slideWidth && o < i.slideHeight)) { if (s.minX = Math.min(i.slideWidth / 2 - n / 2, 0), s.maxX = -s.minX, s.minY = Math.min(i.slideHeight / 2 - o / 2, 0), s.maxY = -s.minY, s.touchesCurrent.x = ("touchmove" === t.type ? t.targetTouches[0] : t).pageX, s.touchesCurrent.y = ("touchmove" === t.type ? t.targetTouches[0] : t).pageY, !s.isMoved && !e.isScaling) { if (this.isHorizontal() && (Math.floor(s.minX) === Math.floor(s.startX) && s.touchesCurrent.x < s.touchesStart.x || Math.floor(s.maxX) === Math.floor(s.startX) && s.touchesCurrent.x > s.touchesStart.x)) return void(s.isTouched = !1); if (!this.isHorizontal() && (Math.floor(s.minY) === Math.floor(s.startY) && s.touchesCurrent.y < s.touchesStart.y || Math.floor(s.maxY) === Math.floor(s.startY) && s.touchesCurrent.y > s.touchesStart.y)) return void(s.isTouched = !1) } t.preventDefault(), t.stopPropagation(), s.isMoved = !0, s.currentX = s.touchesCurrent.x - s.touchesStart.x + s.startX, s.currentY = s.touchesCurrent.y - s.touchesStart.y + s.startY, s.currentX < s.minX && (s.currentX = s.minX + 1 - Math.pow(s.minX - s.currentX + 1, .8)), s.currentX > s.maxX && (s.currentX = s.maxX - 1 + Math.pow(s.currentX - s.maxX + 1, .8)), s.currentY < s.minY && (s.currentY = s.minY + 1 - Math.pow(s.minY - s.currentY + 1, .8)), s.currentY > s.maxY && (s.currentY = s.maxY - 1 + Math.pow(s.currentY - s.maxY + 1, .8)), a.prevPositionX || (a.prevPositionX = s.touchesCurrent.x), a.prevPositionY || (a.prevPositionY = s.touchesCurrent.y), a.prevTime || (a.prevTime = Date.now()), a.x = (s.touchesCurrent.x - a.prevPositionX) / (Date.now() - a.prevTime) / 2, a.y = (s.touchesCurrent.y - a.prevPositionY) / (Date.now() - a.prevTime) / 2, Math.abs(s.touchesCurrent.x - a.prevPositionX) < 2 && (a.x = 0), Math.abs(s.touchesCurrent.y - a.prevPositionY) < 2 && (a.y = 0), a.prevPositionX = s.touchesCurrent.x, a.prevPositionY = s.touchesCurrent.y, a.prevTime = Date.now(), i.$imageWrapEl.transform("translate3d(" + s.currentX + "px, " + s.currentY + "px,0)") } } }, onTouchEnd: function() { var t = this.zoom, e = t.gesture, i = t.image, s = t.velocity; if (e.$imageEl && 0 !== e.$imageEl.length) { if (!i.isTouched || !i.isMoved) return i.isTouched = !1, void(i.isMoved = !1); i.isTouched = !1, i.isMoved = !1; var a = 300, n = 300, o = s.x * a, o = i.currentX + o, r = s.y * n, r = i.currentY + r, s = (0 !== s.x && (a = Math.abs((o - i.currentX) / s.x)), 0 !== s.y && (n = Math.abs((r - i.currentY) / s.y)), Math.max(a, n)), a = (i.currentX = o, i.currentY = r, i.width * t.scale), n = i.height * t.scale; i.minX = Math.min(e.slideWidth / 2 - a / 2, 0), i.maxX = -i.minX, i.minY = Math.min(e.slideHeight / 2 - n / 2, 0), i.maxY = -i.minY, i.currentX = Math.max(Math.min(i.currentX, i.maxX), i.minX), i.currentY = Math.max(Math.min(i.currentY, i.maxY), i.minY), e.$imageWrapEl.transition(s).transform("translate3d(" + i.currentX + "px, " + i.currentY + "px,0)") } }, onTransitionEnd: function() { var t = this.zoom, e = t.gesture; e.$slideEl && this.previousIndex !== this.activeIndex && (e.$imageEl.transform("translate3d(0,0,0) scale(1)"), e.$imageWrapEl.transform("translate3d(0,0,0)"), t.scale = 1, t.currentScale = 1, e.$slideEl = void 0, e.$imageEl = void 0, e.$imageWrapEl = void 0) }, toggle: function(t) { var e = this.zoom; e.scale && 1 !== e.scale ? e.out() : e.in(t) }, in: function(t) { var e, i, s, a, n = this.zoom, o = this.params.zoom, r = n.gesture, l = n.image; r.$slideEl || (r.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex), r.$imageEl = r.$slideEl.find("img, svg, canvas"), r.$imageWrapEl = r.$imageEl.parent("." + o.containerClass)), r.$imageEl && 0 !== r.$imageEl.length && (r.$slideEl.addClass("" + o.zoomedSlideClass), l = void 0 === l.touchesStart.x && t ? (e = ("touchend" === t.type ? t.changedTouches[0] : t).pageX, ("touchend" === t.type ? t.changedTouches[0] : t).pageY) : (e = l.touchesStart.x, l.touchesStart.y), n.scale = r.$imageWrapEl.attr("data-swiper-zoom") || o.maxRatio, n.currentScale = r.$imageWrapEl.attr("data-swiper-zoom") || o.maxRatio, t ? (o = r.$slideEl[0].offsetWidth, t = r.$slideEl[0].offsetHeight, e = r.$slideEl.offset().left + o / 2 - e, l = r.$slideEl.offset().top + t / 2 - l, s = r.$imageEl[0].offsetWidth, a = r.$imageEl[0].offsetHeight, s = s * n.scale, a = a * n.scale, s = -(o = Math.min(o / 2 - s / 2, 0)), a = -(t = Math.min(t / 2 - a / 2, 0)), s < (i = (i = e * n.scale) < o ? o : i) && (i = s), a < (s = (s = l * n.scale) < t ? t : s) && (s = a)) : s = i = 0, r.$imageWrapEl.transition(300).transform("translate3d(" + i + "px, " + s + "px,0)"), r.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + n.scale + ")")) }, out: function() { var t = this.zoom, e = this.params.zoom, i = t.gesture; i.$slideEl || (i.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex), i.$imageEl = i.$slideEl.find("img, svg, canvas"), i.$imageWrapEl = i.$imageEl.parent("." + e.containerClass)), i.$imageEl && 0 !== i.$imageEl.length && (t.scale = 1, t.currentScale = 1, i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"), i.$slideEl.removeClass("" + e.zoomedSlideClass), i.$slideEl = void 0) }, enable: function() { var t, e, i = this.zoom; i.enabled || (i.enabled = !0, t = !("touchstart" !== this.touchEvents.start || !y.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, e = !y.passiveListener || { passive: !1, capture: !0 }, y.gestures ? (this.$wrapperEl.on("gesturestart", ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.on("gesturechange", ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.on("gestureend", ".swiper-slide", i.onGestureEnd, t)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.on(this.touchEvents.start, ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.on(this.touchEvents.move, ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.on(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, t), this.touchEvents.cancel && this.$wrapperEl.on(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, t)), this.$wrapperEl.on(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, e)) }, disable: function() { var t, e, i = this.zoom; i.enabled && (this.zoom.enabled = !1, t = !("touchstart" !== this.touchEvents.start || !y.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, e = !y.passiveListener || { passive: !1, capture: !0 }, y.gestures ? (this.$wrapperEl.off("gesturestart", ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.off("gesturechange", ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.off("gestureend", ".swiper-slide", i.onGestureEnd, t)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.off(this.touchEvents.start, ".swiper-slide", i.onGestureStart, t), this.$wrapperEl.off(this.touchEvents.move, ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.off(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, t), this.touchEvents.cancel && this.$wrapperEl.off(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, t)), this.$wrapperEl.off(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, e)) } }, Z = { loadInSlide: function(t, r) { void 0 === r && (r = !0); var l, h = this, d = h.params.lazy; void 0 !== t && 0 !== h.slides.length && (t = (l = h.virtual && h.params.virtual.enabled ? h.$wrapperEl.children("." + h.params.slideClass + '[data-swiper-slide-index="' + t + '"]') : h.slides.eq(t)).find("." + d.elementClass + ":not(." + d.loadedClass + "):not(." + d.loadingClass + ")"), 0 !== (t = !l.hasClass(d.elementClass) || l.hasClass(d.loadedClass) || l.hasClass(d.loadingClass) ? t : t.add(l[0])).length && t.each(function(t, e) { var i = S(e), s = (i.addClass(d.loadingClass), i.attr("data-background")), a = i.attr("data-src"), n = i.attr("data-srcset"), o = i.attr("data-sizes"); h.loadImage(i[0], a || s, n, o, !1, function() { var t, e; null == h || !h || h && !h.params || h.destroyed || (s ? (i.css("background-image", 'url("' + s + '")'), i.removeAttr("data-background")) : (n && (i.attr("srcset", n), i.removeAttr("data-srcset")), o && (i.attr("sizes", o), i.removeAttr("data-sizes")), a && (i.attr("src", a), i.removeAttr("data-src"))), i.addClass(d.loadedClass).removeClass(d.loadingClass), l.find("." + d.preloaderClass).remove(), h.params.loop && r && (t = l.attr("data-swiper-slide-index"), l.hasClass(h.params.slideDuplicateClass) ? (e = h.$wrapperEl.children('[data-swiper-slide-index="' + t + '"]:not(.' + h.params.slideDuplicateClass + ")"), h.lazy.loadInSlide(e.index(), !1)) : (e = h.$wrapperEl.children("." + h.params.slideDuplicateClass + '[data-swiper-slide-index="' + t + '"]'), h.lazy.loadInSlide(e.index(), !1))), h.emit("lazyImageReady", l[0], i[0])) }), h.emit("lazyImageLoad", l[0], i[0]) })) }, load: function() { var i = this, e = i.$wrapperEl, s = i.params, a = i.slides, t = i.activeIndex, n = i.virtual && s.virtual.enabled, o = s.lazy, r = s.slidesPerView; function l(t) { if (n) { if (e.children("." + s.slideClass + '[data-swiper-slide-index="' + t + '"]').length) return 1 } else if (a[t]) return 1 } function h(t) { return n ? S(t).attr("data-swiper-slide-index") : S(t).index() } if ("auto" === r && (r = 0), i.lazy.initialImageLoaded || (i.lazy.initialImageLoaded = !0), i.params.watchSlidesVisibility) e.children("." + s.slideVisibleClass).each(function(t, e) { e = n ? S(e).attr("data-swiper-slide-index") : S(e).index(); i.lazy.loadInSlide(e) }); else if (1 < r) for (var d = t; d < t + r; d += 1) l(d) && i.lazy.loadInSlide(d); else i.lazy.loadInSlide(t); if (o.loadPrevNext) if (1 < r || o.loadPrevNextAmount && 1 < o.loadPrevNextAmount) { for (var o = o.loadPrevNextAmount, c = r, u = Math.min(t + c + Math.max(o, c), a.length), c = Math.max(t - Math.max(c, o), 0), p = t + r; p < u; p += 1) l(p) && i.lazy.loadInSlide(p); for (var m = c; m < t; m += 1) l(m) && i.lazy.loadInSlide(m) } else { o = e.children("." + s.slideNextClass), c = (0 < o.length && i.lazy.loadInSlide(h(o)), e.children("." + s.slidePrevClass)); 0 < c.length && i.lazy.loadInSlide(h(c)) } } }, k = { LinearSpline: function(t, e) { var i, s, a, n, o; return this.x = t, this.y = e, this.lastIndex = t.length - 1, this.interpolate = function(t) { return t ? (o = function(t, e) { for (s = -1, i = t.length; 1 < i - s;) t[a = i + s >> 1] <= e ? s = a : i = a; return i }(this.x, t), n = o - 1, (t - this.x[n]) * (this.y[o] - this.y[n]) / (this.x[o] - this.x[n]) + this.y[n]) : 0 }, this }, getInterpolateFunction: function(t) { this.controller.spline || (this.controller.spline = this.params.loop ? new k.LinearSpline(this.slidesGrid, t.slidesGrid) : new k.LinearSpline(this.snapGrid, t.snapGrid)) }, setTranslate: function(t, e) { var i, s, a = this, n = a.controller.control; function o(t) { var e = a.rtlTranslate ? -a.translate : a.translate; "slide" === a.params.controller.by && (a.controller.getInterpolateFunction(t), s = -a.controller.spline.interpolate(-e)), s && "container" !== a.params.controller.by || (i = (t.maxTranslate() - t.minTranslate()) / (a.maxTranslate() - a.minTranslate()), s = (e - a.minTranslate()) * i + t.minTranslate()), a.params.controller.inverse && (s = t.maxTranslate() - s), t.updateProgress(s), t.setTranslate(s, a), t.updateActiveIndex(), t.updateSlidesClasses() } if (Array.isArray(n)) for (var r = 0; r < n.length; r += 1) n[r] !== e && n[r] instanceof p && o(n[r]); else n instanceof p && e !== n && o(n) }, setTransition: function(e, t) { var i, s = this, a = s.controller.control; function n(t) { t.setTransition(e, s), 0 !== e && (t.transitionStart(), t.params.autoHeight && U.nextTick(function() { t.updateAutoHeight() }), t.$wrapperEl.transitionEnd(function() { a && (t.params.loop && "slide" === s.params.controller.by && t.loopFix(), t.transitionEnd()) })) } if (Array.isArray(a)) for (i = 0; i < a.length; i += 1) a[i] !== t && a[i] instanceof p && n(a[i]); else a instanceof p && t !== a && n(a) } }, tt = { makeElFocusable: function(t) { return t.attr("tabIndex", "0"), t }, addElRole: function(t, e) { return t.attr("role", e), t }, addElLabel: function(t, e) { return t.attr("aria-label", e), t }, disableEl: function(t) { return t.attr("aria-disabled", !0), t }, enableEl: function(t) { return t.attr("aria-disabled", !1), t }, onEnterKey: function(t) { var e = this.params.a11y; 13 === t.keyCode && (t = S(t.target), this.navigation && this.navigation.$nextEl && t.is(this.navigation.$nextEl) && (this.isEnd && !this.params.loop || this.slideNext(), this.isEnd ? this.a11y.notify(e.lastSlideMessage) : this.a11y.notify(e.nextSlideMessage)), this.navigation && this.navigation.$prevEl && t.is(this.navigation.$prevEl) && (this.isBeginning && !this.params.loop || this.slidePrev(), this.isBeginning ? this.a11y.notify(e.firstSlideMessage) : this.a11y.notify(e.prevSlideMessage)), this.pagination && t.is("." + this.params.pagination.bulletClass) && t[0].click()) }, notify: function(t) { var e = this.a11y.liveRegion; 0 !== e.length && (e.html(""), e.html(t)) }, updateNavigation: function() { var t, e; !this.params.loop && this.navigation && (t = (e = this.navigation).$nextEl, (e = e.$prevEl) && 0 < e.length && (this.isBeginning ? this.a11y.disableEl(e) : this.a11y.enableEl(e)), t && 0 < t.length && (this.isEnd ? this.a11y.disableEl(t) : this.a11y.enableEl(t))) }, updatePagination: function() { var i = this, s = i.params.a11y; i.pagination && i.params.pagination.clickable && i.pagination.bullets && i.pagination.bullets.length && i.pagination.bullets.each(function(t, e) { e = S(e); i.a11y.makeElFocusable(e), i.a11y.addElRole(e, "button"), i.a11y.addElLabel(e, s.paginationBulletMessage.replace(/{{index}}/, e.index() + 1)) }) }, init: function() { this.$el.append(this.a11y.liveRegion); var t, e, i = this.params.a11y; this.navigation && this.navigation.$nextEl && (t = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (e = this.navigation.$prevEl), t && (this.a11y.makeElFocusable(t), this.a11y.addElRole(t, "button"), this.a11y.addElLabel(t, i.nextSlideMessage), t.on("keydown", this.a11y.onEnterKey)), e && (this.a11y.makeElFocusable(e), this.a11y.addElRole(e, "button"), this.a11y.addElLabel(e, i.prevSlideMessage), e.on("keydown", this.a11y.onEnterKey)), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.on("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) }, destroy: function() { var t, e; this.a11y.liveRegion && 0 < this.a11y.liveRegion.length && this.a11y.liveRegion.remove(), this.navigation && this.navigation.$nextEl && (t = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (e = this.navigation.$prevEl), t && t.off("keydown", this.a11y.onEnterKey), e && e.off("keydown", this.a11y.onEnterKey), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.off("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) } }, z = { init: function() { if (this.params.history) { if (!X.history || !X.history.pushState) return this.params.history.enabled = !1, void(this.params.hashNavigation.enabled = !0); var t = this.history; t.initialized = !0, t.paths = z.getPathValues(), (t.paths.key || t.paths.value) && (t.scrollToSlide(0, t.paths.value, this.params.runCallbacksOnInit), this.params.history.replaceState || X.addEventListener("popstate", this.history.setHistoryPopState)) } }, destroy: function() { this.params.history.replaceState || X.removeEventListener("popstate", this.history.setHistoryPopState) }, setHistoryPopState: function() { this.history.paths = z.getPathValues(), this.history.scrollToSlide(this.params.speed, this.history.paths.value, !1) }, getPathValues: function() { var t = X.location.pathname.slice(1).split("/").filter(function(t) { return "" !== t }), e = t.length; return { key: t[e - 2], value: t[e - 1] } }, setHistory: function(t, e) { this.history.initialized && this.params.history.enabled && (e = this.slides.eq(e), e = z.slugify(e.attr("data-history")), X.location.pathname.includes(t) || (e = t + "/" + e), (t = X.history.state) && t.value === e || (this.params.history.replaceState ? X.history.replaceState({ value: e }, null, e) : X.history.pushState({ value: e }, null, e))) }, slugify: function(t) { return t.toString().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "") }, scrollToSlide: function(t, e, i) { if (e) for (var s = 0, a = this.slides.length; s < a; s += 1) { var n = this.slides.eq(s); z.slugify(n.attr("data-history")) !== e || n.hasClass(this.params.slideDuplicateClass) || (n = n.index(), this.slideTo(n, t, i)) } else this.slideTo(0, t, i) } }, P = { onHashCange: function() { var t = c.location.hash.replace("#", ""); t !== this.slides.eq(this.activeIndex).attr("data-hash") && void 0 !== (t = this.$wrapperEl.children("." + this.params.slideClass + '[data-hash="' + t + '"]').index()) && this.slideTo(t) }, setHash: function() { var t; this.hashNavigation.initialized && this.params.hashNavigation.enabled && (this.params.hashNavigation.replaceState && X.history && X.history.replaceState ? X.history.replaceState(null, null, "#" + this.slides.eq(this.activeIndex).attr("data-hash") || "") : (t = (t = this.slides.eq(this.activeIndex)).attr("data-hash") || t.attr("data-history"), c.location.hash = t || "")) }, init: function() { if (!(!this.params.hashNavigation.enabled || this.params.history && this.params.history.enabled)) { this.hashNavigation.initialized = !0; var t = c.location.hash.replace("#", ""); if (t) for (var e = 0, i = this.slides.length; e < i; e += 1) { var s = this.slides.eq(e); (s.attr("data-hash") || s.attr("data-history")) !== t || s.hasClass(this.params.slideDuplicateClass) || (s = s.index(), this.slideTo(s, 0, this.params.runCallbacksOnInit, !0)) } this.params.hashNavigation.watchState && S(X).on("hashchange", this.hashNavigation.onHashCange) } }, destroy: function() { this.params.hashNavigation.watchState && S(X).off("hashchange", this.hashNavigation.onHashCange) } }, O = { run: function() { var t = this, e = t.slides.eq(t.activeIndex), i = t.params.autoplay.delay; e.attr("data-swiper-autoplay") && (i = e.attr("data-swiper-autoplay") || t.params.autoplay.delay), clearTimeout(t.autoplay.timeout), t.autoplay.timeout = U.nextTick(function() { t.params.autoplay.reverseDirection ? t.params.loop ? (t.loopFix(), t.slidePrev(t.params.speed, !0, !0), t.emit("autoplay")) : t.isBeginning ? t.params.autoplay.stopOnLastSlide ? t.autoplay.stop() : (t.slideTo(t.slides.length - 1, t.params.speed, !0, !0), t.emit("autoplay")) : (t.slidePrev(t.params.speed, !0, !0), t.emit("autoplay")) : t.params.loop ? (t.loopFix(), t.slideNext(t.params.speed, !0, !0), t.emit("autoplay")) : t.isEnd ? t.params.autoplay.stopOnLastSlide ? t.autoplay.stop() : (t.slideTo(0, t.params.speed, !0, !0), t.emit("autoplay")) : (t.slideNext(t.params.speed, !0, !0), t.emit("autoplay")), t.params.cssMode && t.autoplay.running && t.autoplay.run() }, i) }, start: function() { return void 0 === this.autoplay.timeout && !this.autoplay.running && (this.autoplay.running = !0, this.emit("autoplayStart"), this.autoplay.run(), !0) }, stop: function() { return !!this.autoplay.running && void 0 !== this.autoplay.timeout && (this.autoplay.timeout && (clearTimeout(this.autoplay.timeout), this.autoplay.timeout = void 0), this.autoplay.running = !1, this.emit("autoplayStop"), !0) }, pause: function(t) { !this.autoplay.running || this.autoplay.paused || (this.autoplay.timeout && clearTimeout(this.autoplay.timeout), this.autoplay.paused = !0, 0 !== t && this.params.autoplay.waitForTransition ? (this.$wrapperEl[0].addEventListener("transitionend", this.autoplay.onTransitionEnd), this.$wrapperEl[0].addEventListener("webkitTransitionEnd", this.autoplay.onTransitionEnd)) : (this.autoplay.paused = !1, this.autoplay.run())) } }, et = { setTranslate: function() { for (var t = this.slides, e = 0; e < t.length; e += 1) { var i = this.slides.eq(e), s = -i[0].swiperSlideOffset, a = (this.params.virtualTranslate || (s -= this.translate), 0), n = (this.isHorizontal() || (a = s, s = 0), this.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(i[0].progress), 0) : 1 + Math.min(Math.max(i[0].progress, -1), 0)); i.css({ opacity: n }).transform("translate3d(" + s + "px, " + a + "px, 0px)") } }, setTransition: function(t) { var i, s = this, e = s.slides, a = s.$wrapperEl; e.transition(t), s.params.virtualTranslate && 0 !== t && (i = !1, e.transitionEnd(function() { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var t = ["webkitTransitionEnd", "transitionend"], e = 0; e < t.length; e += 1) a.trigger(t[e]) } })) } }, it = { setTranslate: function() { var t, e = this.$el, i = this.$wrapperEl, s = this.slides, a = this.width, n = this.height, o = this.rtlTranslate, r = this.size, l = this.params.cubeEffect, h = this.isHorizontal(), d = this.virtual && this.params.virtual.enabled, c = 0; l.shadow && (h ? (0 === (t = i.find(".swiper-cube-shadow")).length && (t = S('

      '), i.append(t)), t.css({ height: a + "px" })) : 0 === (t = e.find(".swiper-cube-shadow")).length && (t = S('

      '), e.append(t))); for (var u, p = 0; p < s.length; p += 1) { var m = s.eq(p), v = p, f = 90 * (v = d ? parseInt(m.attr("data-swiper-slide-index"), 10) : v), g = Math.floor(f / 360), b = (o && (f = -f, g = Math.floor(-f / 360)), Math.max(Math.min(m[0].progress, 1), -1)), w = 0, y = 0, E = 0, g = (v % 4 == 0 ? (w = 4 * -g * r, E = 0) : (v - 1) % 4 == 0 ? (w = 0, E = 4 * -g * r) : (v - 2) % 4 == 0 ? (w = r + 4 * g * r, E = r) : (v - 3) % 4 == 0 && (w = -r, E = 3 * r + 4 * r * g), o && (w = -w), h || (y = w, w = 0), "rotateX(" + (h ? 0 : -f) + "deg) rotateY(" + (h ? f : 0) + "deg) translate3d(" + w + "px, " + y + "px, " + E + "px)"); b <= 1 && -1 < b && (c = o ? 90 * -v - 90 * b : 90 * v + 90 * b), m.transform(g), l.slideShadows && (f = h ? m.find(".swiper-slide-shadow-left") : m.find(".swiper-slide-shadow-top"), w = h ? m.find(".swiper-slide-shadow-right") : m.find(".swiper-slide-shadow-bottom"), 0 === f.length && (f = S('

      '), m.append(f)), 0 === w.length && (w = S('

      '), m.append(w)), f.length && (f[0].style.opacity = Math.max(-b, 0)), w.length && (w[0].style.opacity = Math.max(b, 0))) } i.css({ "-webkit-transform-origin": "50% 50% -" + r / 2 + "px", "-moz-transform-origin": "50% 50% -" + r / 2 + "px", "-ms-transform-origin": "50% 50% -" + r / 2 + "px", "transform-origin": "50% 50% -" + r / 2 + "px" }), l.shadow && (h ? t.transform("translate3d(0px, " + (a / 2 + l.shadowOffset) + "px, " + -a / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + l.shadowScale + ")") : (e = Math.abs(c) - 90 * Math.floor(Math.abs(c) / 90), a = 1.5 - (Math.sin(2 * e * Math.PI / 360) / 2 + Math.cos(2 * e * Math.PI / 360) / 2), e = l.shadowScale, a = l.shadowScale / a, u = l.shadowOffset, t.transform("scale3d(" + e + ", 1, " + a + ") translate3d(0px, " + (n / 2 + u) + "px, " + -n / 2 / a + "px) rotateX(-90deg)"))), i.transform("translate3d(0px,0," + (T.isSafari || T.isUiWebView ? -r / 2 : 0) + "px) rotateX(" + (this.isHorizontal() ? 0 : c) + "deg) rotateY(" + (this.isHorizontal() ? -c : 0) + "deg)") }, setTransition: function(t) { var e = this.$el; this.slides.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t), this.params.cubeEffect.shadow && !this.isHorizontal() && e.find(".swiper-cube-shadow").transition(t) } }, st = { setTranslate: function() { for (var t = this.slides, e = this.rtlTranslate, i = 0; i < t.length; i += 1) { var s, a, n = t.eq(i), o = n[0].progress, r = -180 * (o = this.params.flipEffect.limitRotation ? Math.max(Math.min(n[0].progress, 1), -1) : o), l = 0, h = -n[0].swiperSlideOffset, d = 0; this.isHorizontal() ? e && (r = -r) : (d = h, l = -r, r = h = 0), n[0].style.zIndex = -Math.abs(Math.round(o)) + t.length, this.params.flipEffect.slideShadows && (s = this.isHorizontal() ? n.find(".swiper-slide-shadow-left") : n.find(".swiper-slide-shadow-top"), a = this.isHorizontal() ? n.find(".swiper-slide-shadow-right") : n.find(".swiper-slide-shadow-bottom"), 0 === s.length && (s = S('

      '), n.append(s)), 0 === a.length && (a = S('

      '), n.append(a)), s.length && (s[0].style.opacity = Math.max(-o, 0)), a.length && (a[0].style.opacity = Math.max(o, 0))), n.transform("translate3d(" + h + "px, " + d + "px, 0px) rotateX(" + l + "deg) rotateY(" + r + "deg)") } }, setTransition: function(t) { var i, s = this, e = s.slides, a = s.activeIndex, n = s.$wrapperEl; e.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t), s.params.virtualTranslate && 0 !== t && (i = !1, e.eq(a).transitionEnd(function() { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var t = ["webkitTransitionEnd", "transitionend"], e = 0; e < t.length; e += 1) n.trigger(t[e]) } })) } }, at = { setTranslate: function() { for (var t = this.width, e = this.height, i = this.slides, s = this.$wrapperEl, a = this.slidesSizesGrid, n = this.params.coverflowEffect, o = this.isHorizontal(), r = this.translate, l = o ? t / 2 - r : e / 2 - r, h = o ? n.rotate : -n.rotate, d = n.depth, c = 0, u = i.length; c < u; c += 1) { var p = i.eq(c), m = a[c], m = (l - p[0].swiperSlideOffset - m / 2) / m * n.modifier, v = o ? h * m : 0, f = o ? 0 : h * m, g = -d * Math.abs(m), b = o ? 0 : n.stretch * m, w = o ? n.stretch * m : 0, w = (Math.abs(w) < .001 && (w = 0), Math.abs(b) < .001 && (b = 0), Math.abs(g) < .001 && (g = 0), Math.abs(v) < .001 && (v = 0), "translate3d(" + w + "px," + b + "px," + g + "px) rotateX(" + (f = Math.abs(f) < .001 ? 0 : f) + "deg) rotateY(" + v + "deg)"); p.transform(w), p[0].style.zIndex = 1 - Math.abs(Math.round(m)), n.slideShadows && (b = o ? p.find(".swiper-slide-shadow-left") : p.find(".swiper-slide-shadow-top"), g = o ? p.find(".swiper-slide-shadow-right") : p.find(".swiper-slide-shadow-bottom"), 0 === b.length && (b = S('

      '), p.append(b)), 0 === g.length && (g = S('

      '), p.append(g)), b.length && (b[0].style.opacity = 0 < m ? m : 0), g.length && (g[0].style.opacity = 0 < -m ? -m : 0)) }(y.pointerEvents || y.prefixedPointerEvents) && (s[0].style.perspectiveOrigin = l + "px 50%") }, setTransition: function(t) { this.slides.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t) } }, nt = { init: function() { var t = this.params.thumbs, e = this.constructor; t.swiper instanceof e ? (this.thumbs.swiper = t.swiper, U.extend(this.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), U.extend(this.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1 })) : U.isObject(t.swiper) && (this.thumbs.swiper = new e(U.extend({}, t.swiper, { watchSlidesVisibility: !0, watchSlidesProgress: !0, slideToClickedSlide: !1 })), this.thumbs.swiperCreated = !0), this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass), this.thumbs.swiper.on("tap", this.thumbs.onThumbClick) }, onThumbClick: function() { var t, e, i, s = this.thumbs.swiper; s && (t = s.clickedIndex, (i = s.clickedSlide) && S(i).hasClass(this.params.thumbs.slideThumbActiveClass) || null == t || (i = s.params.loop ? parseInt(S(s.clickedSlide).attr("data-swiper-slide-index"), 10) : t, this.params.loop && (s = this.activeIndex, this.slides.eq(s).hasClass(this.params.slideDuplicateClass) && (this.loopFix(), this._clientLeft = this.$wrapperEl[0].clientLeft, s = this.activeIndex), t = this.slides.eq(s).prevAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), e = this.slides.eq(s).nextAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), i = void 0 === t || void 0 !== e && e - s < s - t ? e : t), this.slideTo(i))) }, update: function(t) { var e = this.thumbs.swiper; if (e) { var i, s, a, n = "auto" === e.params.slidesPerView ? e.slidesPerViewDynamic() : e.params.slidesPerView, o = (this.realIndex !== e.realIndex && (i = e.activeIndex, a = e.params.loop ? (e.slides.eq(i).hasClass(e.params.slideDuplicateClass) && (e.loopFix(), e._clientLeft = e.$wrapperEl[0].clientLeft, i = e.activeIndex), s = e.slides.eq(i).prevAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), a = e.slides.eq(i).nextAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), void 0 === s ? a : void 0 === a ? s : a - i == i - s ? i : a - i < i - s ? a : s) : this.realIndex, e.visibleSlidesIndexes && e.visibleSlidesIndexes.indexOf(a) < 0 && (e.params.centeredSlides ? a = i < a ? a - Math.floor(n / 2) + 1 : a + Math.floor(n / 2) - 1 : i < a && (a = a - n + 1), e.slideTo(a, t ? 0 : void 0))), 1), r = this.params.thumbs.slideThumbActiveClass; if (1 < this.params.slidesPerView && !this.params.centeredSlides && (o = this.params.slidesPerView), this.params.thumbs.multipleActiveThumbs || (o = 1), o = Math.floor(o), e.slides.removeClass(r), e.params.loop || e.params.virtual && e.params.virtual.enabled) for (var l = 0; l < o; l += 1) e.$wrapperEl.children('[data-swiper-slide-index="' + (this.realIndex + l) + '"]').addClass(r); else for (var h = 0; h < o; h += 1) e.slides.eq(this.realIndex + h).addClass(r) } } }, M = [m, G, Y, v, g, w, E, { name: "mousewheel", params: { mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarged: "container" } }, create: function() { U.extend(this, { mousewheel: { enabled: !1, enable: x.enable.bind(this), disable: x.disable.bind(this), handle: x.handle.bind(this), handleMouseEnter: x.handleMouseEnter.bind(this), handleMouseLeave: x.handleMouseLeave.bind(this), animateSlider: x.animateSlider.bind(this), releaseScroll: x.releaseScroll.bind(this), lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [] } }) }, on: { init: function() { !this.params.mousewheel.enabled && this.params.cssMode && this.mousewheel.disable(), this.params.mousewheel.enabled && this.mousewheel.enable() }, destroy: function() { this.params.cssMode && this.mousewheel.enable(), this.mousewheel.enabled && this.mousewheel.disable() } } }, { name: "navigation", params: { navigation: { nextEl: null, prevEl: null, hideOnClick: !1, disabledClass: "swiper-button-disabled", hiddenClass: "swiper-button-hidden", lockClass: "swiper-button-lock" } }, create: function() { U.extend(this, { navigation: { init: L.init.bind(this), update: L.update.bind(this), destroy: L.destroy.bind(this), onNextClick: L.onNextClick.bind(this), onPrevClick: L.onPrevClick.bind(this) } }) }, on: { init: function() { this.navigation.init(), this.navigation.update() }, toEdge: function() { this.navigation.update() }, fromEdge: function() { this.navigation.update() }, destroy: function() { this.navigation.destroy() }, click: function(t) { var e, i = this.navigation, s = i.$nextEl, i = i.$prevEl; !this.params.navigation.hideOnClick || S(t.target).is(i) || S(t.target).is(s) || (s ? e = s.hasClass(this.params.navigation.hiddenClass) : i && (e = i.hasClass(this.params.navigation.hiddenClass)), !0 === e ? this.emit("navigationShow", this) : this.emit("navigationHide", this), s && s.toggleClass(this.params.navigation.hiddenClass), i && i.toggleClass(this.params.navigation.hiddenClass)) } } }, { name: "pagination", params: { pagination: { el: null, bulletElement: "span", clickable: !1, hideOnClick: !1, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: !1, type: "bullets", dynamicBullets: !1, dynamicMainBullets: 1, formatFractionCurrent: function(t) { return t }, formatFractionTotal: function(t) { return t }, bulletClass: "swiper-pagination-bullet", bulletActiveClass: "swiper-pagination-bullet-active", modifierClass: "swiper-pagination-", currentClass: "swiper-pagination-current", totalClass: "swiper-pagination-total", hiddenClass: "swiper-pagination-hidden", progressbarFillClass: "swiper-pagination-progressbar-fill", progressbarOppositeClass: "swiper-pagination-progressbar-opposite", clickableClass: "swiper-pagination-clickable", lockClass: "swiper-pagination-lock" } }, create: function() { U.extend(this, { pagination: { init: A.init.bind(this), render: A.render.bind(this), update: A.update.bind(this), destroy: A.destroy.bind(this), dynamicBulletIndex: 0 } }) }, on: { init: function() { this.pagination.init(), this.pagination.render(), this.pagination.update() }, activeIndexChange: function() { !this.params.loop && void 0 !== this.snapIndex || this.pagination.update() }, snapIndexChange: function() { this.params.loop || this.pagination.update() }, slidesLengthChange: function() { this.params.loop && (this.pagination.render(), this.pagination.update()) }, snapGridLengthChange: function() { this.params.loop || (this.pagination.render(), this.pagination.update()) }, destroy: function() { this.pagination.destroy() }, click: function(t) { this.params.pagination.el && this.params.pagination.hideOnClick && 0 < this.pagination.$el.length && !S(t.target).hasClass(this.params.pagination.bulletClass) && (!0 === this.pagination.$el.hasClass(this.params.pagination.hiddenClass) ? this.emit("paginationShow", this) : this.emit("paginationHide", this), this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)) } } }, { name: "scrollbar", params: { scrollbar: { el: null, dragSize: "auto", hide: !1, draggable: !1, snapOnRelease: !0, lockClass: "swiper-scrollbar-lock", dragClass: "swiper-scrollbar-drag" } }, create: function() { U.extend(this, { scrollbar: { init: I.init.bind(this), destroy: I.destroy.bind(this), updateSize: I.updateSize.bind(this), setTranslate: I.setTranslate.bind(this), setTransition: I.setTransition.bind(this), enableDraggable: I.enableDraggable.bind(this), disableDraggable: I.disableDraggable.bind(this), setDragPosition: I.setDragPosition.bind(this), getPointerPosition: I.getPointerPosition.bind(this), onDragStart: I.onDragStart.bind(this), onDragMove: I.onDragMove.bind(this), onDragEnd: I.onDragEnd.bind(this), isTouched: !1, timeout: null, dragTimeout: null } }) }, on: { init: function() { this.scrollbar.init(), this.scrollbar.updateSize(), this.scrollbar.setTranslate() }, update: function() { this.scrollbar.updateSize() }, resize: function() { this.scrollbar.updateSize() }, observerUpdate: function() { this.scrollbar.updateSize() }, setTranslate: function() { this.scrollbar.setTranslate() }, setTransition: function(t) { this.scrollbar.setTransition(t) }, destroy: function() { this.scrollbar.destroy() } } }, { name: "parallax", params: { parallax: { enabled: !1 } }, create: function() { U.extend(this, { parallax: { setTransform: Q.setTransform.bind(this), setTranslate: Q.setTranslate.bind(this), setTransition: Q.setTransition.bind(this) } }) }, on: { beforeInit: function() { this.params.parallax.enabled && (this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, init: function() { this.params.parallax.enabled && this.parallax.setTranslate() }, setTranslate: function() { this.params.parallax.enabled && this.parallax.setTranslate() }, setTransition: function(t) { this.params.parallax.enabled && this.parallax.setTransition(t) } } }, { name: "zoom", params: { zoom: { enabled: !1, maxRatio: 3, minRatio: 1, toggle: !0, containerClass: "swiper-zoom-container", zoomedSlideClass: "swiper-slide-zoomed" } }, create: function() { var s = this, e = { enabled: !1, scale: 1, currentScale: 1, isScaling: !1, gesture: { $slideEl: void 0, slideWidth: void 0, slideHeight: void 0, $imageEl: void 0, $imageWrapEl: void 0, maxRatio: 3 }, image: { isTouched: void 0, isMoved: void 0, currentX: void 0, currentY: void 0, minX: void 0, minY: void 0, maxX: void 0, maxY: void 0, width: void 0, height: void 0, startX: void 0, startY: void 0, touchesStart: {}, touchesCurrent: {} }, velocity: { x: void 0, y: void 0, prevPositionX: void 0, prevPositionY: void 0, prevTime: void 0 } }, a = ("onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(t) { e[t] = J[t].bind(s) }), U.extend(s, { zoom: e }), 1); Object.defineProperty(s.zoom, "scale", { get: function() { return a }, set: function(t) { var e, i; a !== t && (e = s.zoom.gesture.$imageEl ? s.zoom.gesture.$imageEl[0] : void 0, i = s.zoom.gesture.$slideEl ? s.zoom.gesture.$slideEl[0] : void 0, s.emit("zoomChange", t, e, i)), a = t } }) }, on: { init: function() { this.params.zoom.enabled && this.zoom.enable() }, destroy: function() { this.zoom.disable() }, touchStart: function(t) { this.zoom.enabled && this.zoom.onTouchStart(t) }, touchEnd: function(t) { this.zoom.enabled && this.zoom.onTouchEnd(t) }, doubleTap: function(t) { this.params.zoom.enabled && this.zoom.enabled && this.params.zoom.toggle && this.zoom.toggle(t) }, transitionEnd: function() { this.zoom.enabled && this.params.zoom.enabled && this.zoom.onTransitionEnd() }, slideChange: function() { this.zoom.enabled && this.params.zoom.enabled && this.params.cssMode && this.zoom.onTransitionEnd() } } }, { name: "lazy", params: { lazy: { enabled: !1, loadPrevNext: !1, loadPrevNextAmount: 1, loadOnTransitionStart: !1, elementClass: "swiper-lazy", loadingClass: "swiper-lazy-loading", loadedClass: "swiper-lazy-loaded", preloaderClass: "swiper-lazy-preloader" } }, create: function() { U.extend(this, { lazy: { initialImageLoaded: !1, load: Z.load.bind(this), loadInSlide: Z.loadInSlide.bind(this) } }) }, on: { beforeInit: function() { this.params.lazy.enabled && this.params.preloadImages && (this.params.preloadImages = !1) }, init: function() { this.params.lazy.enabled && !this.params.loop && 0 === this.params.initialSlide && this.lazy.load() }, scroll: function() { this.params.freeMode && !this.params.freeModeSticky && this.lazy.load() }, resize: function() { this.params.lazy.enabled && this.lazy.load() }, scrollbarDragMove: function() { this.params.lazy.enabled && this.lazy.load() }, transitionStart: function() { this.params.lazy.enabled && (this.params.lazy.loadOnTransitionStart || !this.params.lazy.loadOnTransitionStart && !this.lazy.initialImageLoaded) && this.lazy.load() }, transitionEnd: function() { this.params.lazy.enabled && !this.params.lazy.loadOnTransitionStart && this.lazy.load() }, slideChange: function() { this.params.lazy.enabled && this.params.cssMode && this.lazy.load() } } }, { name: "controller", params: { controller: { control: void 0, inverse: !1, by: "slide" } }, create: function() { U.extend(this, { controller: { control: this.params.controller.control, getInterpolateFunction: k.getInterpolateFunction.bind(this), setTranslate: k.setTranslate.bind(this), setTransition: k.setTransition.bind(this) } }) }, on: { update: function() { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, resize: function() { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, observerUpdate: function() { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, setTranslate: function(t, e) { this.controller.control && this.controller.setTranslate(t, e) }, setTransition: function(t, e) { this.controller.control && this.controller.setTransition(t, e) } } }, { name: "a11y", params: { a11y: { enabled: !0, notificationClass: "swiper-notification", prevSlideMessage: "Previous slide", nextSlideMessage: "Next slide", firstSlideMessage: "This is the first slide", lastSlideMessage: "This is the last slide", paginationBulletMessage: "Go to slide {{index}}" } }, create: function() { var e = this; U.extend(e, { a11y: { liveRegion: S('') } }), Object.keys(tt).forEach(function(t) { e.a11y[t] = tt[t].bind(e) }) }, on: { init: function() { this.params.a11y.enabled && (this.a11y.init(), this.a11y.updateNavigation()) }, toEdge: function() { this.params.a11y.enabled && this.a11y.updateNavigation() }, fromEdge: function() { this.params.a11y.enabled && this.a11y.updateNavigation() }, paginationUpdate: function() { this.params.a11y.enabled && this.a11y.updatePagination() }, destroy: function() { this.params.a11y.enabled && this.a11y.destroy() } } }, { name: "history", params: { history: { enabled: !1, replaceState: !1, key: "slides" } }, create: function() { U.extend(this, { history: { init: z.init.bind(this), setHistory: z.setHistory.bind(this), setHistoryPopState: z.setHistoryPopState.bind(this), scrollToSlide: z.scrollToSlide.bind(this), destroy: z.destroy.bind(this) } }) }, on: { init: function() { this.params.history.enabled && this.history.init() }, destroy: function() { this.params.history.enabled && this.history.destroy() }, transitionEnd: function() { this.history.initialized && this.history.setHistory(this.params.history.key, this.activeIndex) }, slideChange: function() { this.history.initialized && this.params.cssMode && this.history.setHistory(this.params.history.key, this.activeIndex) } } }, { name: "hash-navigation", params: { hashNavigation: { enabled: !1, replaceState: !1, watchState: !1 } }, create: function() { U.extend(this, { hashNavigation: { initialized: !1, init: P.init.bind(this), destroy: P.destroy.bind(this), setHash: P.setHash.bind(this), onHashCange: P.onHashCange.bind(this) } }) }, on: { init: function() { this.params.hashNavigation.enabled && this.hashNavigation.init() }, destroy: function() { this.params.hashNavigation.enabled && this.hashNavigation.destroy() }, transitionEnd: function() { this.hashNavigation.initialized && this.hashNavigation.setHash() }, slideChange: function() { this.hashNavigation.initialized && this.params.cssMode && this.hashNavigation.setHash() } } }, { name: "autoplay", params: { autoplay: { enabled: !1, delay: 3e3, waitForTransition: !0, disableOnInteraction: !0, stopOnLastSlide: !1, reverseDirection: !1 } }, create: function() { var e = this; U.extend(e, { autoplay: { running: !1, paused: !1, run: O.run.bind(e), start: O.start.bind(e), stop: O.stop.bind(e), pause: O.pause.bind(e), onVisibilityChange: function() { "hidden" === document.visibilityState && e.autoplay.running && e.autoplay.pause(), "visible" === document.visibilityState && e.autoplay.paused && (e.autoplay.run(), e.autoplay.paused = !1) }, onTransitionEnd: function(t) { e && !e.destroyed && e.$wrapperEl && t.target === this && (e.$wrapperEl[0].removeEventListener("transitionend", e.autoplay.onTransitionEnd), e.$wrapperEl[0].removeEventListener("webkitTransitionEnd", e.autoplay.onTransitionEnd), e.autoplay.paused = !1, e.autoplay.running ? e.autoplay.run() : e.autoplay.stop()) } } }) }, on: { init: function() { this.params.autoplay.enabled && (this.autoplay.start(), document.addEventListener("visibilitychange", this.autoplay.onVisibilityChange)) }, beforeTransitionStart: function(t, e) { this.autoplay.running && (e || !this.params.autoplay.disableOnInteraction ? this.autoplay.pause(t) : this.autoplay.stop()) }, sliderFirstMove: function() { this.autoplay.running && (this.params.autoplay.disableOnInteraction ? this.autoplay.stop() : this.autoplay.pause()) }, touchEnd: function() { this.params.cssMode && this.autoplay.paused && !this.params.autoplay.disableOnInteraction && this.autoplay.run() }, destroy: function() { this.autoplay.running && this.autoplay.stop(), document.removeEventListener("visibilitychange", this.autoplay.onVisibilityChange) } } }, { name: "effect-fade", params: { fadeEffect: { crossFade: !1 } }, create: function() { U.extend(this, { fadeEffect: { setTranslate: et.setTranslate.bind(this), setTransition: et.setTransition.bind(this) } }) }, on: { beforeInit: function() { var t; "fade" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "fade"), U.extend(this.params, t = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, t)) }, setTranslate: function() { "fade" === this.params.effect && this.fadeEffect.setTranslate() }, setTransition: function(t) { "fade" === this.params.effect && this.fadeEffect.setTransition(t) } } }, { name: "effect-cube", params: { cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: .94 } }, create: function() { U.extend(this, { cubeEffect: { setTranslate: it.setTranslate.bind(this), setTransition: it.setTransition.bind(this) } }) }, on: { beforeInit: function() { var t; "cube" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "cube"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, t = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0 }), U.extend(this.originalParams, t)) }, setTranslate: function() { "cube" === this.params.effect && this.cubeEffect.setTranslate() }, setTransition: function(t) { "cube" === this.params.effect && this.cubeEffect.setTransition(t) } } }, { name: "effect-flip", params: { flipEffect: { slideShadows: !0, limitRotation: !0 } }, create: function() { U.extend(this, { flipEffect: { setTranslate: st.setTranslate.bind(this), setTransition: st.setTransition.bind(this) } }) }, on: { beforeInit: function() { var t; "flip" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "flip"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, t = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, t)) }, setTranslate: function() { "flip" === this.params.effect && this.flipEffect.setTranslate() }, setTransition: function(t) { "flip" === this.params.effect && this.flipEffect.setTransition(t) } } }, { name: "effect-coverflow", params: { coverflowEffect: { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: !0 } }, create: function() { U.extend(this, { coverflowEffect: { setTranslate: at.setTranslate.bind(this), setTransition: at.setTransition.bind(this) } }) }, on: { beforeInit: function() { "coverflow" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "coverflow"), this.classNames.push(this.params.containerModifierClass + "3d"), this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, setTranslate: function() { "coverflow" === this.params.effect && this.coverflowEffect.setTranslate() }, setTransition: function(t) { "coverflow" === this.params.effect && this.coverflowEffect.setTransition(t) } } }, { name: "thumbs", params: { thumbs: { multipleActiveThumbs: !0, swiper: null, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-container-thumbs" } }, create: function() { U.extend(this, { thumbs: { swiper: null, init: nt.init.bind(this), update: nt.update.bind(this), onThumbClick: nt.onThumbClick.bind(this) } }) }, on: { beforeInit: function() { var t = this.params.thumbs; t && t.swiper && (this.thumbs.init(), this.thumbs.update(!0)) }, slideChange: function() { this.thumbs.swiper && this.thumbs.update() }, update: function() { this.thumbs.swiper && this.thumbs.update() }, resize: function() { this.thumbs.swiper && this.thumbs.update() }, observerUpdate: function() { this.thumbs.swiper && this.thumbs.update() }, setTransition: function(t) { var e = this.thumbs.swiper; e && e.setTransition(t) }, beforeDestroy: function() { var t = this.thumbs.swiper; t && this.thumbs.swiperCreated && t && t.destroy() } } }]; return void 0 === p.use && (p.use = p.Class.use, p.installModule = p.Class.installModule), p.use(M), p});var ANIUTIL = function() { function e(t) { function e(t) { this.opts = t, this.resizeTiming = t.resizeTiming || 100, this.setElement(), this.setVideoStyle(), this.bindEvent() } var i = e.prototype; i.setElement = function() { void 0 !== this.opts.wrapElement && (this.wrapElement = this.opts.wrapElement.jquery ? this.opts.wrapElement[0] : this.opts.wrapElement), void 0 !== this.opts.targetVideo && (this.targetVideo = this.opts.targetVideo.jquery ? this.opts.targetVideo[0] : this.opts.targetVideo) }, i.setVideoStyle = function() { this.wrapElement.style.overflow = "hidden", this.targetVideo.style.position = "absolute", this.targetVideo.style.top = "50%", this.targetVideo.style.left = "50%", this.targetVideo.style.transform = "translate(-50%, -50%)" }, i.bindEvent = function() { var t = this; window.addEventListener("load", function() { t.setVideoSize() }), window.addEventListener("resize", function() { t.setVideoSize() }) }, i.getVideoInfo = function() { this.wrapWidth = this.wrapElement.clientWidth, this.wrapHeight = this.wrapElement.clientHeight, this.videoWidth = this.targetVideo.clientWidth, this.videoHeight = this.targetVideo.clientHeight, this.wrapRatio = this.wrapHeight / this.wrapWidth, this.videoRatio = this.videoHeight / this.videoWidth }, i.setVideoSize = function() { var t = this; clearTimeout(null), setTimeout(function() { t.getVideoInfo(), t.wrapRatio < t.videoRatio ? (t.targetVideo.style.width = "100%", t.targetVideo.style.height = "auto") : (t.targetVideo.style.width = "auto", t.targetVideo.style.height = "100%") }, this.resizeTiming) }, new e(t) } function i(t) { var e, i, s = null, a = null, n = t ? t + 200 : 200, o = function() { null == s ? (i = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, e = document.body.clientHeight, i = window.pageYOffset + i.clientHeight, s = i / e) : e = document.body.clientHeight }, r = function() { clearTimeout(a), a = setTimeout(function() { window.scrollTo(0, e * s - window.innerHeight), s = null }, n) }; window.addEventListener("resize", function() { o(), r() }) } function s() { return !(-1 < navigator.userAgent.indexOf("Windows") || -1 < navigator.userAgent.indexOf("Macintosh")) && (!!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) || void 0) } return { calRange: function(t) { return 0 < (t = { targetValue: (t = t).targetValue, progress: t.progress, startPoint: t.startPoint || 0, endPoint: t.endPoint || 100 }).startPoint && (t.endPoint = 0 < t.endPoint - t.startPoint ? t.endPoint - t.startPoint : t.endPoint), e = (e = (e = t.targetValue * (t.progress - t.startPoint) / t.endPoint) > t.targetValue ? t.targetValue : e) < 0 ? 0 : e; var e }, videoObjectFit: function(t) { e(t) }, addClass: function(t) { for (var e = t, i = e.classList.length, s = 0; s < i; s++) e.targetElement.classList.add(e.classList[s]) }, removeClass: function(t) { for (var e = t, i = e.classList.length, s = 0; s < i; s++) e.targetElement.classList.remove(e.classList[s]) }, scrollController: function(t) { var i, s = (s = t) || {}, e = navigator.userAgent.toLowerCase(), a = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, n = s.speed || 120, o = 0 <= s.duration ? s.duration : 1, r = a.scrollTop, l = a === document.body && document.documentElement ? document.documentElement : a, h = !1, d = null, t = function() { "Netscape" == navigator.appName && -1 != navigator.userAgent.search("Trident") || -1 != e.indexOf("msie") ? document.addEventListener("mousewheel", function(t) { "hidden" != document.documentElement.style.overflow && u.scrollEvent(t) }, { passive: !1 }) : document.addEventListener("wheel", function(t) { u.hasScrollBox(t.target) || u.scrollEvent(t) }, { passive: !1 }) }, c = function() { window.addEventListener("scroll", function() { "hidden" == document.documentElement.style.overflow || h || (r = a.scrollTop) }) }, u = { scrollEvent: function(t) { t.preventDefault(); var e = document.body.getAttribute("data-scroll-speed"), t = this.normalizeWheelDelta(t), e = s.currDelta && e ? e : e || n ? n : 120; r += -t * e, i = Math.max(0, Math.min(r, a.scrollHeight - l.clientHeight)), this.update() }, normalizeWheelDelta: function(t) { return t.detail ? t.wheelDelta ? t.wheelDelta / t.detail / 40 * (0 < t.detail ? 1 : -1) : -t.detail / 3 : t.wheelDelta / 120 }, update: function() { var t = i - a.scrollTop, t = Math.ceil(a.scrollTop + t) <= 0 ? 0 : i < r ? i : Math.ceil(a.scrollTop + t); h = !0, TweenMax.to(a, o, { ease: "power1.out", scrollTop: t, onComplete: function() { clearTimeout(d), d = null, d = setTimeout(function() { h = !1, r = a.scrollTop }, 500) } }), r <= 0 ? r = 0 : i <= r && (r = i) }, hasScrollBox: function(t) { for (; t && t !== document.body && t !== document;) { var e = window.getComputedStyle(t).overflow; if (e && (-1 < e.indexOf("auto") || -1 < e.indexOf("scroll"))) return !0; t = t.parentNode } return !1 } }; window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame, -1 == e.indexOf("chrome") && -1 != e.indexOf("safari") || (t(), c()) }, resizeScrollOffset: function(t) { i(t) }, checkTouchDevice: s, checkFold: function() { var t, e = screen.width / screen.height, i = s() && .7137 < e && e < .8 && "width=768" == document.getElementsByName("viewport")[0].content, e = s() && .8 < e && e < .95 && "width=768" == document.getElementsByName("viewport")[0].content; return i ? t = "isFold" : e && (t = "isFoldLatest"), t }, deviceConsole: function(t, e) { var i, s; document.querySelector(".console-layer") || ((i = document.createElement("div")).classList.add("console-layer"), i.setAttribute("style", "position: fixed; left: 0; top: 0; padding: 20px; z-index:1000000000; background: #fff;"), document.querySelector("body").append(i)), "multi" == e ? (i = document.querySelector(".console-layer"), (s = document.createElement("div")).classList.add("console-value"), s.setAttribute("style", "border: 1px #ddd solid; float: left; padding: 10px;"), i.append(s)) : s = (document.querySelector(".console-value") || ((s = document.createElement("div")).classList.add("console-value"), s.setAttribute("style", "border: 1px #ddd solid; float: left; padding: 10px;"), i.append(s)), document.querySelector(".console-value")), s.innerHTML = t }, percentToPixel: function(t) { return t.targetValue * (t.progress / 100) }, responsiveHandler: function(s) { var a, t, n, o, e = window.resolutionStatus = null, s = (window.innerWidth, { resolution: s.resolution, statusName: s.statusName || [], callback: s.callback || [], activeTiming: s.activeTiming || 100 }), i = function() { o = window.innerWidth; for (var t = 0; t < s.resolution.length; t++) { var e = s.resolution[t], i = s.resolution[t + 1] || 0; o <= e && i < o && a != s.statusName[t] || o <= e && i < o && n != t ? (document.documentElement.classList.remove(a), a = s.statusName[t] || t, n = t, document.documentElement.classList.add(a)) : (o >= s.resolution[0] && a != s.statusName[0] || o >= s.resolution[0] && !n) && (document.documentElement.classList.remove(a), a = s.statusName[0] || t, n = t, document.documentElement.classList.add(a)) } }, r = function() { clearTimeout(e), console.log(s.activeTiming), t != n && s.callback[n] && (e = setTimeout(function() { s.callback[n](), e = null, t = n }, s.activeTiming)) }; return function() { return window.addEventListener("DOMContentLoaded", function() { i(), t = n }), window.addEventListener("resize", function() { i(), r() }), this }() } }}();window.TAB_S9 = window.TAB_S9 || {};const UTILS = function() { return { isIosDevice: ((s = /iPad|iPhone|iPod/.test(navigator.userAgent)) ? document.documentElement.classList.add("isIosDevice") : document.documentElement.classList.add("isNotIosDevice"), s), checkGlobal: void(0 === location.pathname.indexOf("/global/galaxy") || !0 === window.IS_CAMPAIGN ? document.documentElement.classList.add("global") : document.documentElement.classList.add("dotcom")), checkOS: (s = (s = navigator.appVersion.match(/(mac|win|linux)/i)) ? s[1].toLowerCase() : "", void document.documentElement.classList.add(s)), isFireFox: void(/firefox/i.test(navigator.userAgent) && document.documentElement.classList.add("firefox")), isWebkit: void(/applewebkit/i.test(navigator.userAgent) && document.documentElement.classList.add("webkit")), isChrome: void(/chrome/i.test(navigator.userAgent) && document.documentElement.classList.add("chrome")), isOpera: void(/opera/i.test(navigator.userAgent) && document.documentElement.classList.add("opera")), isIos: void(/ip(ad|hone|od)/i.test(navigator.userAgent) && document.documentElement.classList.add("ios")), isCrIos: void(/crios/i.test(navigator.userAgent) && document.documentElement.classList.add("crios")), isAndroid: void(/android/i.test(navigator.userAgent) && document.documentElement.classList.add("android")), isSafari: (s = /applewebkit/i.test(navigator.userAgent), i = /chrome/i.test(navigator.userAgent), void(s && !i && document.documentElement.classList.add("safari"))), isHuawei: void(/HUAWEICLT/i.test(navigator.userAgent) && document.documentElement.classList.add("huawei")), isUCBrowser: void(/UCBrowser/i.test(navigator.userAgent) && document.documentElement.classList.add("ucbrowser")), winSize: (s = "Netscape" === navigator.appName, i = -1 !== navigator.appVersion.indexOf("Mac"), t = -1 !== navigator.userAgent.indexOf("Safari"), e = -1 !== navigator.userAgent.indexOf("Chrome"), s && !i && t && !e ? function() { return { w: $(win).width(), h: $(win).height() } } : function() { return { w: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, h: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } }), requestAFrame: window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(t) { return window.setTimeout(t, 1e3 / 60) }, cancelAFrame: window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function(t) { window.clearTimeout(t) }, isObject: function(t) { return "object" == typeof t && null !== t && t.constructor && t.constructor === Object }, def: function() { for (var t = [], e = arguments.length; e--;) t[e] = arguments[e]; for (var i = Object(t[0]), s = 1; s < t.length; s += 1) { var a = t[s]; if (null != a) for (var n = Object.keys(Object(a)), o = 0, r = n.length; o < r; o += 1) { var l = n[o], h = Object.getOwnPropertyDescriptor(a, l); void 0 !== h && h.enumerable && (this.isObject(i[l]) && this.isObject(a[l]) ? this.def(i[l], a[l]) : !this.isObject(i[l]) && this.isObject(a[l]) ? (i[l] = {}, this.def(i[l], a[l])) : i[l] = a[l]) } } return i }, convertArray: function(t) { return Array.prototype.slice.call(t) }, getOffset: function(t) { return { top: t.getBoundingClientRect().top + window.pageYOffset, bottom: t.getBoundingClientRect().bottom + window.pageYOffset } }, getScroll: function() { var t = window.pageYOffset; return { top: t, bottom: t + window.innerHeight } }, getViewPort: function() { var t = window, e = "inner"; return "innerWidth" in window || (e = "client", t = document.documentElement || document.body), { width: t[e + "Width"], height: t[e + "Height"] } }, getCurrentDevice: function() { var t = UTILS.getViewPort().width; return 1024 <= t ? "desktop" : t < 1024 && 768 <= t ? "tablet" : "mobile" }, isInVerticalViewPort: function(t) { t = t.getBoundingClientRect(); return t.top - 200 <= UTILS.getViewPort().height && 0 <= t.bottom }, isInHorizontalViewPort: function(t) { t = t.getBoundingClientRect(); return t.left - 200 <= UTILS.getViewPort().width && 0 <= t.right + 200 }, isVerticalVisible: function(t) { return UTILS.isInVerticalViewPort(t) && !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length) }, isHorizontalVisible: function(t) { return UTILS.isInHorizontalViewPort(t) && !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length) }, setCookie: function(t, e, i) { var s = new Date; s.setTime(s.getTime() + 60 * i * 60 * 24 * 1e3), document.cookie = t + "=" + e + "; exprires=" + s.toUTCString() + "; path=/" }, getCookie: function(t) { t = document.cookie.match("(^|;) ?" + t + "=([^;]*)(;|$)"); return t ? t[2] : null }, triggerEvent: function(t, e, i, s, a) { var n, i = i || null, s = s || !1, a = a || !0; null == i ? (n = document.createEvent("HTMLEvents")).initEvent(e, s, a) : (n = document.createEvent("CustomEvent")).initCustomEvent(e, s, a, i), t.dispatchEvent(n) }, visibleScroll: function() { document.documentElement.classList.contains("isTouchDevice") || !0 === this.scrollFlag && (this.scrollFlag = !1, document.body.style.position = "", document.body.style.width = "", document.body.style.top = "", document.body.style.boxSizing = "", document.body.style.paddingRight = "", document.documentElement.style.overflow = "", null !== this.popupEl && (this.popupEl.style.paddingRight = "", this.popupEl = null), window.scrollTo(0, this.currentPos)) }, hiddenScroll: function(t) { var e; document.documentElement.classList.contains("isTouchDevice") || (this.popupEl = t || null, this.scrollFlag = !0, this.currentPos = window.pageYOffset || document.documentElement.scrollTop, t = window.innerWidth - document.documentElement.clientWidth, e = 0 < this.currentPos ? "-" + this.currentPos + "px" : 0, document.body.style.position = "fixed", document.body.style.width = "100%", document.body.style.top = e, document.body.style.boxSizing = "border-box", document.body.style.paddingRight = t + "px", document.documentElement.style.overflow = "hidden", null !== this.popupEl && (this.popupEl.style.paddingRight = t + "px")) }, closest: function(t, e) { do { if (t == document.documentElement) return null; if (t.matches ? t.matches(e) : t.msMatchesSelector(e)) return t } while (null !== (t = t.parentElement || t.parentNode) || 1 === t.nodeType); return null }, onPopupAccessibility: function(t) { t.setAttribute("aria-hidden", !0), t.setAttribute("tabindex", -1); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++) { var s = e[i].getAttribute("aria-hidden"), a = e[i].getAttribute("tabindex"); null != s && null == e[i].getAttribute("data-prev-aria-hidden") && e[i].setAttribute("data-prev-aria-hidden", s), null != a && null == e[i].getAttribute("data-prev-tabindex") && e[i].setAttribute("data-prev-tabindex", a), e[i].setAttribute("tabindex", -1), e[i].setAttribute("aria-hidden", !0) } }, offPopupAccessibility: function(t) { t.removeAttribute("aria-hidden"), t.removeAttribute("tabindex"); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++) { var s = e[i].getAttribute("data-prev-aria-hidden"), a = e[i].getAttribute("data-prev-tabindex"); null != s ? e[i].setAttribute("aria-hidden", s) : e[i].removeAttribute("aria-hidden"), null != a ? e[i].setAttribute("tabindex", a) : e[i].removeAttribute("tabindex"), e[i].removeAttribute("data-prev-aria-hidden"), e[i].removeAttribute("data-prev-tabindex") } }, onAccessibility: function(t) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { t.setAttribute("aria-hidden", !0), t.setAttribute("tabindex", -1); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++) e[i].setAttribute("tabindex", -1), e[i].setAttribute("aria-hidden", !0) } }, offAccessibility: function(t) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { t.removeAttribute("aria-hidden"), t.removeAttribute("tabindex"); for (var e = t.querySelectorAll("a, button, input, select, iframe"), i = 0; i < e.length; i++) e[i].removeAttribute("tabindex"), e[i].removeAttribute("aria-hidden") } }, extend: function(e, i) { return Object.keys(i).forEach(function(t) { e[t] = i[t] }), e }, getHeight: function(t) { var e, i, s; return t ? (e = (i = window.getComputedStyle(t)).display, i = parseInt(i.maxHeight), s = 0, "none" != e && 0 != i ? t.offsetHeight : (t.style.position = "absolute", t.style.visibility = "hidden", t.style.display = "block", s = t.offsetHeight, t.style.display = "", t.style.position = "", t.style.visibility = "", s)) : 0 }, setLastActiveItem: function(t) { this.lastActiveItem = t || null }, getLastActiveItem: function() { return null != this.lastActiveItem ? this.lastActiveItem : null }, isRTL: function() { return document.documentElement.classList.contains("rtl") }, checkRegion: function() { for (var t = document.getElementsByTagName("meta"), e = "", i = 0; i < t.length; i++) if ("sitecode" == t[i].getAttribute("name")) return e = t[i].getAttribute("content"); if ("" == e) return -1 < document.location.pathname.indexOf("global") ? "global" : "jp" }, isLowNetwork: function() { var t = "___GALAXY_SPEED"; return null != UTILS.getCookie(t) && null != UTILS.getCookie(t) && ("L" == UTILS.getCookie(t) || "H" != UTILS.getCookie(t) && void 0) }, getQueryString: function(t) { var e = (s = location.href).indexOf("?") + 1, i = -1 < s.indexOf("#") ? s.indexOf("#") + 1 : s.length; if (0 == e) return ""; for (var s = (s = s.substring(e, i)).split("&"), a = "", n = 0; n < s.length; n++) { var o = s[n].split("="); if (2 != o.length) break; o[0] == t && (a = o[1]); break } return a }, customParallax: function(t) { var e = t.mode || "center", i = t.delay || 0, s = t.ease || "Power0.easeNone", a = t.transZ || 0, n = t.duration || .3, o = t.distance || 0, r = t.correction || 0, l = t.windowCorrection ? window.innerHeight * t.windowCorrection : 0, h = t.direction || 1, d = t.activeElement, c = t.targetElement || d, u = t.wrapperElement || d, t = t.unit || "px", p = window.pageYOffset, m = window.pageYOffset + window.innerHeight, d = d.getBoundingClientRect(), v = p + u.getBoundingClientRect().top, u = v + u.getBoundingClientRect().height, f = window.innerHeight + d.height + 2 * l, g = "center" == e ? d.top - (window.innerHeight - d.height) / 2 : d.top - window.innerHeight; "px" == t && (o = d.height * o / 100), v <= m + l && p - l <= u && TweenMax.to(c, n, { y: r + g * ("center" == e ? 2 * o : o) / f * h + t, z: a, ease: s, delay: i }) }, getNavHeight: function() { var t, e, i = 0, s = document.querySelector(".pd-g-header-navigation") || document.querySelector("#subnav") || document.querySelector(".sticky-menu") || document.querySelector(".pd-g-floating-nav"); return i = s ? s.classList.contains("pd-g-header-navigation") ? (e = (t = s.querySelector(".pd-header-navigation")).querySelector(".pd-header-navigation__menu-wrap"), t.clientHeight + e.clientHeight) : s.clientHeight : i }, isBrokenFixed: function() { var t = window.innerWidth, e = window.innerHeight, i = !1; return document.documentElement.classList.remove("is-broken-fixed"), 1440 <= t && e <= 540 || t <= 810 && e / t < .5277 || t / window.outerWidth < .4 || e < UTILS.MIN_VIEW_HEIGHT ? (document.documentElement.classList.add("is-broken-fixed"), i = !0) : document.documentElement.classList.remove("is-broken-fixed"), i }, isFullAnimationBrokenFixed: () => { var t = window.innerWidth, e = window.innerHeight, i = !!UTILS.isTouchDevice && window.matchMedia("(orientation: landscape)").matches; let s = !1; return !!UTILS.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches && e / t < 1.5 || i || e < 700 ? (document.documentElement.classList.add("is-animation-broken-fixed"), s = !0) : document.documentElement.classList.remove("is-animation-broken-fixed"), s }, isTouchDevice: ((s = "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) ? document.documentElement.classList.add("isTouchDevice") : document.documentElement.classList.add("isNotTouchDevice"), s), isIEorEdge: function() { var t, e = navigator.userAgent.toLowerCase(); if ("Microsoft Internet Explorer" == navigator.appName) t = "msie "; else if (-1 < e.search("trident")) t = "trident/.*rv:"; else { if (!(-1 < e.search("edge/"))) return -1; t = "edge/" } return null != new RegExp(t + "([0-9]{1,})(\\.{0,}[0-9]{0,1})").exec(e) ? (document.documentElement.classList.add("isIEorEdge"), parseFloat(RegExp.$1 + RegExp.$2)) : -1 }(), page: { scrollLock: { className: "is-no-scroll", barWidth: function() { return window.innerWidth - document.documentElement.clientWidth }, el: $("html"), run: function(t) { document.documentElement.style.paddingRight = t + "px" }, off: function() { this.barWidth(); this.el.removeClass(this.className), this.el.removeClass("hive-layer-scroll-lock"), this.run(0) }, on: function() { var t = this.barWidth(); this.el.addClass(this.className), this.run(t) } } }, MIN_VIEW_HEIGHT: 400, RESPONSIVE: { PC: { NAME: "pc", WIDTH: 1440 }, TABLET: { NAME: "tablet", WIDTH: 1024 }, MOBILE: { NAME: "mobile", WIDTH: 767 } } }; var t, e, i, s}();TAB_S9.UTILS = UTILS;var SCROLLER = function() { function e(t) { this.initialize = !0, this.opts = t, this.correction = t.correction || 0, this.removeCorrection = t.removeCorrection || 0, this.trackHeight = t.trackHeight || 0, this.activeClass = t.activeClass, this.activeCallbackClass = t.activeCallbackClass || "callback-active", this.useStrictMode = null == t.useStrictMode || t.useStrictMode, this.useFixed = t.useFixed || !1, this.useFixedStyle = null == t.useFixedStyle || t.useFixedStyle, this.useSticky = t.useSticky || !1, this.useStickyStyle = null == t.useStickyStyle || t.useStickyStyle, this.useViewportOver = t.useViewportOver || !0, this.activeVisibility = t.activeVisibility || "before", this.activeType = t.activeType ? this.opts.activeType : "reverse", this.autoHeight = null == t.autoHeight || t.autoHeight, this.offsetY = t.offsetY || 0, this.resize = null == t.resize || t.resize, this.resizeTiming = null != t.resizeTiming && t.resizeTiming, this.windowHeight = window.innerHeight, this.oldPregress = 0, this.oldWinScrollTop = 0, this.elementInformation = {}, this.isFixedArea = !1, this.checkTouchDevice = !1, this.elementEventList.setElement.call(this), this.bindEvent() } var t = e.prototype; return t.bindEvent = function() { var t = this, e = null; this.elementHandler(), this.resize && (this.addEventList = function() { t.resizeTiming ? (clearTimeout(e), e = setTimeout(function() { t.windowHeight = window.innerHeight, t.elementHandler() }, t.resizeTiming)) : (t.windowHeight = window.innerHeight, t.elementHandler()) }, window.addEventListener("resize", this.addEventList)), this.opts.IEScroll && this.utilList.IEScrollHandler.call(this) }, t.elementHandler = function() { return this.elementEventList.setTrackStyle.call(this), this.getFixedState(), 1 < this.trackHeight && this.elementEventList.setTrackHeigh.call(this), !this.useSticky && this.useFixed && this.useFixedStyle && this.elementEventList.setFixedStyle.call(this), this.useSticky && !this.useFixed && this.useStickyStyle && this.elementEventList.setStickyStyle.call(this), this }, t.utilList = { checkTouchDevice: function() { return -1 < navigator.userAgent.indexOf("Windows") || -1 < navigator.userAgent.indexOf("Macintosh") ? this.checkTouchDevice = !1 : "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch ? this.checkTouchDevice = !0 : void 0 }, IEScrollHandler: function() { navigator.userAgent.match(/Trident\/7\./) && (this.body.addEventListener("mousewheel", function(t) { t.preventDefault(); var t = t.wheelDelta, e = window.pageYOffset; window.scrollTo(0, e - t) }), this.body.addEventListener("keydown", function(t) { var e = window.pageYOffset; switch (t.which) { case 38: t.preventDefault(), window.scrollTo(0, e - 40); break; case 40: t.preventDefault(), window.scrollTo(0, e + 40); break; default: return } })) }, getScroll: function() { var t = window.pageYOffset; return { top: t, bottom: t + this.windowHeight } }, getOffset: function(t) { return { top: t.getBoundingClientRect().top + window.pageYOffset, bottom: t.getBoundingClientRect().bottom + window.pageYOffset } }, getUserAgent: function() { return navigator.userAgent } }, t.elementEventList = { setElement: function() { this.body = document.querySelector("body"), void 0 !== this.opts.trackElement && (this.trackElement = this.opts.trackElement.jquery ? this.opts.trackElement[0] : this.opts.trackElement), void 0 !== this.opts.fixedElement && (this.fixedElement = this.opts.fixedElement.jquery ? this.opts.fixedElement[0] : this.opts.fixedElement), void 0 !== this.opts.activeElement && (this.activeElement = this.opts.activeElement.jquery ? this.opts.activeElement[0] : this.opts.activeElement) }, setTrackHeigh: function() { var t, e; this.trackHeight <= 1 || (this.trackElement.style.height = "", t = 0 == this.trackElement.clientHeight, e = this.windowHeight * this.trackHeight, t && (this.trackElement.style.height = this.windowHeight + "px"), this.trackElement.style.height = e + "px") }, setTrackStyle: function() { this.trackElement && this.useFixed && "static" == window.getComputedStyle(this.trackElement).position && (this.trackElement.style.position = "relative") }, setFixedStyle: function() { this.isFixedArea || (this.fixedElement.style.height = "", this.fixedElement.style.top = "", this.fixedElement.style.position = "absolute"), 0 == this.fixedElement.clientWidth && (this.fixedElement.style.width = "100%"), this.autoHeight && ("string" == typeof this.offsetY ? (this.fixedElement.style.height = "calc(" + this.windowHeight + "px - " + this.offsetY + ")", this.fixedElement.style.top = this.offsetY) : (this.fixedElement.style.height = this.windowHeight - this.offsetY + "px", this.fixedElement.style.top = this.offsetY + "px")) }, setStickyStyle: function() { this.isFixedArea || (this.fixedElement.style.position = "sticky"), 0 == this.fixedElement.clientWidth && (this.fixedElement.style.width = "100%") }, setFixedElement: function() { this.diffHeight = this.windowHeight - this.fixedElement.clientHeight, this.trackTopOffset = this.utilList.getOffset.call(this, this.trackElement).top, this.trackBottomOffset = this.utilList.getOffset.call(this, this.trackElement).bottom, this.winScrollTop <= this.trackTopOffset ? (this.fixedElement.style.position = "absolute", "string" == typeof this.offsetY ? this.fixedElement.style.top = this.offsetY : this.fixedElement.style.top = this.offsetY + "px", this.fixedElement.style.bottom = "") : this.winScrollBottom >= this.trackBottomOffset ? (this.fixedElement.style.position = "absolute", this.fixedElement.style.top = this.trackElement.clientHeight - this.fixedElement.clientHeight + "px") : this.isFixedArea || (this.fixedElement.style.position = "fixed", this.fixedElement.style.top = "0") } }, t.getWheelDirection = function() { this.winScrollTop >= this.oldWinScrollTop ? this.wheelDirection = "down" : this.wheelDirection = "up", this.oldWinScrollTop = this.winScrollTop }, t.getProgress = function() { var t = this.utilList.getOffset.call(this, this.trackElement).top - this.windowHeight * this.correction, e = this.useFixed || this.useSticky ? Math.abs(this.trackElement.clientHeight - this.windowHeight) : this.useViewportOver ? this.trackElement.clientHeight + this.windowHeight : this.trackElement.clientHeight, i = this.winScrollTop - t, t = this.winScrollBottom - t, i = this.useFixed || this.useSticky ? i / e * 100 : t / e * 100; return this.useStrictMode ? this.progress = Math.floor(i) < 0 ? 0 : 100 < Math.floor(i) ? 100 : Math.floor(i) : this.progress = i, this.getWheelDirection(), this.progress }, t.getFixedState = function() { 0 < this.progress && this.progress < 100 ? this.isFixedArea = !0 : this.isFixedArea = !1 }, t.trackAnimation = function(t) { this.initialize && (this.winScrollTop = this.utilList.getScroll.call(this).top - this.windowHeight * this.correction, this.winScrollBottom = this.utilList.getScroll.call(this).bottom, this.useFixed && !this.useSticky && this.elementEventList.setFixedElement.call(this), this.getProgress(), this.getFixedState(), t && (this.oldPregress !== this.progress && t.call(this), this.oldPregress = this.progress)) }, t.activeAnimation = function() { if (this.initialize) { this.winScrollTop = this.utilList.getScroll.call(this).top, this.winScrollBottom = this.utilList.getScroll.call(this).bottom, this.trackElementHeight = this.trackElement.clientHeight, this.correctionValue = this.trackElementHeight * this.correction, this.removeCorrectionValue = this.trackElementHeight * this.removeCorrection, this.elementOffsetTop = this.utilList.getOffset.call(this, this.trackElement).top, this.elementOffsetBottom = this.utilList.getOffset.call(this, this.trackElement).bottom, this.downScrollTop = this.winScrollTop - this.correctionValue, this.downScrollBottom = this.winScrollBottom - this.correctionValue, this.upScrollTop = this.winScrollTop + this.correctionValue, this.upScrollBottom = this.winScrollBottom + this.correctionValue; function t() { l(), o() } function e() { h(), r() } var i = this, s = this.activeVisibility, a = this.activeType, n = this.windowHeight / 2, o = function() { if (i.activeClass) if ("object" == typeof i.activeClass) for (var t = i.activeClass.length, e = 0; e < t; e++) i.activeElement.classList.contains(i.activeClass[e]) || i.activeElement.classList.add(i.activeClass[e]); else i.activeElement.classList.contains(i.activeClass) || i.activeElement.classList.add(i.activeClass) }, r = function() { if ("object" == typeof i.activeClass) for (var t = i.activeClass.length, e = 0; e < t; e++) i.activeElement.classList.contains(i.activeClass[e]) && i.activeElement.classList.remove(i.activeClass[e]); else i.activeElement.classList.contains(i.activeClass) && i.activeElement.classList.remove(i.activeClass); i.activeElement.classList.contains(i.activeCallbackClass) && i.activeElement.classList.remove(i.activeCallbackClass) }, l = function() { i.activeElement.classList.contains(i.activeCallbackClass) || i.opts.activeCallback && (i.opts.activeCallback.call(i), i.activeElement.classList.add(i.activeCallbackClass)) }, h = function() { i.activeElement.classList.contains(i.activeCallbackClass) && i.opts.endCallback && i.opts.endCallback.call(i) }; switch (this.getWheelDirection(), s) { case "before": ("down" == this.wheelDirection && this.downScrollBottom >= this.elementOffsetTop && this.downScrollTop <= this.elementOffsetTop || "up" == this.wheelDirection && this.upScrollTop <= this.elementOffsetBottom && this.upScrollBottom >= this.elementOffsetBottom || "oneWay" == this.activeType && this.downScrollBottom >= this.elementOffsetTop) && (t(), this.activeStatus = !0); break; case "visible": ("down" == this.wheelDirection && this.downScrollBottom >= this.elementOffsetTop + n && this.downScrollTop <= this.elementOffsetTop || "up" == this.wheelDirection && this.upScrollTop <= this.elementOffsetBottom - n && this.upScrollBottom >= this.elementOffsetBottom || "oneWay" == this.activeType && this.downScrollBottom >= this.elementOffsetTop + n) && (t(), this.activeStatus = !0) } switch (a) { case "reverse": "visible" == s ? (this.activeStatus && "down" == this.wheelDirection && this.winScrollTop > this.elementOffsetBottom || this.activeStatus && "up" == this.wheelDirection && this.winScrollBottom < this.elementOffsetTop) && (e(), this.activeStatus = !1) : (this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop || this.activeStatus && this.winScrollTop > this.elementOffsetBottom && this.winScrollBottom > this.elementOffsetBottom) && (e(), this.activeStatus = !1); break; case "oneWay": "visible" == s ? this.activeStatus && this.winScrollBottom < this.elementOffsetTop + n && (e(), this.activeStatus = !1) : this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop && (e(), this.activeStatus = !1) } } }, t.getElementInformation = function() { return this.trackElement && (this.elementInformation.trackElement = { element: this.trackElement, width: this.trackElement.clientWidth, height: this.trackElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.trackElement).top, bottomOffset: this.utilList.getOffset.call(this, this.trackElement).bottom }), this.activeElement && (this.elementInformation.activeElement = { element: this.activeElement, width: this.activeElement.clientWidth, height: this.activeElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.activeElement).top, bottomOffset: this.utilList.getOffset.call(this, this.activeElement).bottom }), this.elementInformation }, t.destroy = function(t) { this.trackElement && (this.trackElement.style.position = "", this.trackElement.style.height = ""), this.fixedElement && (this.fixedElement.style.position = "", this.fixedElement.style.top = "", this.fixedElement.style.height = ""), this.trackElement = "", this.fixedElement = "", this.activeElement = "", this.correction = "", this.trackHeight = "", this.activeCallbackClass = "", this.useFixed = "", this.activeVisibility = "", this.activeType = "", this.offsetY = "", this.resize = "", this.windowHeight = "", this.elementInformation = "", window.removeEventListener("load", this.addEventList), window.removeEventListener("resize", this.addEventList), this.initialize = !1 }, function(t) { return new e(t) }}();! function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const u = TAB_S9.UTILS; TAB_S9.ImageLoader = class { constructor(t = container, e) { e = { el: t, lazyClass: ".js-img-src", lazyCompleteClass: "load-complete", startLazyClass: e.startLazyClass || ".js-start-img-src", endLazyClass: e.endLazyClass || ".js-end-img-src", responsiveClass: e.responsiveClass || ".js-res-img", loadOption: e.loadOption, visiblePoint: e.visiblePoint || 0, useDefaultImg: e.useDefaultImg, resizeStart: null }; this.opts = e, this.classes = e.classes, this.el = document.querySelector(t), this.init() } init() { this.initOpts(), this.getLazyImage(), this.getResponsiveImage(), this.bindEvents() } initOpts() { this.targetAttr = this.opts.loadOption[0].attribute, this.responsiveCheck = this.opts.loadOption, this.dynamicCallCount = 0, this.dynamicLoadedComplate = !1, this.opts.useDefaultImg && this.setDefaultImage() } getLazyImage() { const t = Array.from(this.el.querySelectorAll(this.opts.lazyClass)); var e = Array.from(this.el.querySelectorAll(this.opts.startLazyClass)), e = t.concat(e); this.lazyImages = e, this.lazyLength = e.length } getResponsiveImage() { var t = this.el.querySelectorAll(this.opts.responsiveClass); this.responsiveImages = t, this.responsiveLength = t.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } onLoadHandler() { this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyImage(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let t = s + 1, e = t == a ? 0 : this.opts.loadOption[t].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > e) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.dynamicCallCount = 0, this.setResponsiveImage()) } } setResponsiveImage(i) { if (i) for (let e = 0; e < i.length; e++) { var s = i[e]; let t = i[e].getAttribute(this.targetAttr); t = t || this.findImageHandler(s), i[e].classList.contains(this.opts.lazyCompleteClass) || (i[e].setAttribute("src", t), i[e].classList.add(this.opts.lazyCompleteClass)) } else for (let i = 0; i < this.responsiveLength; i++) { let t = this.responsiveImages[i], e = t.getAttribute(this.targetAttr); e = e || this.findImageHandler(t), t.classList.contains(this.opts.lazyCompleteClass) && t.setAttribute("src", e) } } checkCompleteImage() { var t = this.el.querySelectorAll("." + this.opts.lazyCompleteClass); this.lazyCompleteLength = t.length } setDefaultImage() { for (var t = 0; t < this.lazyLength; t++) this.lazyImages[t].setAttribute("src", "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAAAACwAAAAAAQABAAACAkQBADs=") } setLazyImage() { this.windowHeight = window.innerHeight; for (let d = 0; d < this.lazyLength; d++) { let e = this.lazyImages[d], t = this.windowHeight * this.opts.visiblePoint, i = u.getScroll.call(this).top - t, s = u.getScroll.call(this).bottom + t, a = u.getOffset.call(this, e).top, n = u.getOffset.call(this, e).bottom, o = this.opts.lazyClass.split("."), r = o[o.length - 1], l = this.opts.startLazyClass.split("."), h = l[l.length - 1]; if ((a < s && i <= a || i < n && n < s || i < a && n < s || a < i && s < n) && null != e.offsetParent) { let t = e.getAttribute(this.targetAttr); var c; t = t || this.findImageHandler(e), e.classList.contains(this.opts.lazyCompleteClass) || (e.setAttribute("src", t), c = () => { 1 == this.opts.startLazyClass.split(" ").length && e.classList.remove(h), 1 == this.opts.lazyClass.split(" ").length && e.classList.remove(r), this.checkCompleteImage(), e.removeEventListener("load", c) }, e.addEventListener("load", c), e.classList.add(this.opts.lazyCompleteClass)) } } } findRemainingImageAttr(t) { for (var e = this.opts.loadOption.length, i = 0; i < e; i++) { var s = t.getAttribute(this.opts.loadOption[i].attribute); if (s) return s } } findNextImageAttr(e) { for (let t = this.attrIndex; 0 <= t; t--) { var i = e.getAttribute(this.opts.loadOption[t].attribute); if (i) return i; if (0 == t && null == i) return this.findRemainingImageAttr(e) } } findImageHandler(t) { return 0 !== this.attrIndex ? this.findNextImageAttr(t) : this.findRemainingImageAttr(t) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const t = TAB_S9.UTILS, e = t.RESPONSIVE; TAB_S9.VideoLoader = class { constructor(t = container, e) { e = { el: t, lazyClass: e.lazyClass || ".js-video-src", responsiveClass: e.responsiveClass || ".js-res-video", imageLazyCompleteClass: "load-complete", imageEndLazyClass: e.imageEndLazyClass || ".js-end-img-src", notLoadElement: e.notLoadElement || [], loadOption: e.loadOption, visiblePoint: e.visiblePoint || 0, resizeStart: null, classes: { loaded: "loaded", ended: "ended" } }; this.opts = e, this.classes = e.classes, this.el = document.querySelector(t), this.init() } init() { this.initOpts(), this.getLazyVideo(), this.getResponsiveVideo(), this.bindEvents() } initOpts() { this.getCurrentDevice(); var t = "mobile" !== this.currentDevice ? 0 : 1; this.prevVideoSrc = "", this.targetAttr = this.opts.loadOption[t].attribute, this.responsiveCheck = this.opts.loadOption, this.videoCallStack = [] } getLazyVideo() { let t = Array.from(this.el.querySelectorAll(this.opts.lazyClass)).filter(e => { e.isVideoInit = !1; { let t = 0; if (t < this.opts.notLoadElement.length) return !e.closest(this.opts.notLoadElement[t]) } }); t = t.filter(t => { if (t.querySelector("video")) return t }), this.lazyVideos = t, this.lazyLength = t.length } getResponsiveVideo() { var t = Array.from(this.el.querySelectorAll(this.opts.responsiveClass)).filter(e => { { let t = 0; if (t < this.opts.notLoadElement.length) return !e.closest(this.opts.notLoadElement[t]) } }); this.responsiveVideos = t, this.responsiveLength = t.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } getCurrentDevice() { this.winWidth = t.winSize().w, this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } onLoadHandler() { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyVideo(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let t = s + 1, e = t == a ? 0 : this.opts.loadOption[t].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > e) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.setResponsiveVideo()) } } setResponsiveVideo() { for (let t = 0; t < this.responsiveLength; t++) { const i = this.responsiveVideos[t], s = i.querySelector("video"), a = i.getAttribute(this.targetAttr); i.classList.contains(this.classes.loaded) && i.isVideoInit && s.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); - 1 < e.indexOf("webm") && (t.src = a + ".webm"), -1 < e.indexOf("mp4") && (t.src = a + ".mp4"), s.load(), s.addEventListener("canplaythrough", () => { window.setTimeout(() => { i.classList.add(this.classes.loaded) }, 500), this.checkCompleteVideo(), this.getEndImage(i) }, { once: !0 }) }) } } setLazyVideo() { for (let t = 0; t < this.lazyLength; t++) { var e = window.pageYOffset, i = e + window.innerHeight; const n = this.lazyVideos[t]; var s = n.getBoundingClientRect(), a = e + s.top, s = e + s.bottom; i > a - window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && e < s + window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && !n.isVideoInit && this.videoCallStack.indexOf(t) < 0 && (this.videoCallStack.push(t), this.setVideoSrc()) } } setVideoSrc() { var t = this.videoCallStack[0]; const e = this.lazyVideos[t], i = e.querySelector("video"), s = e.getAttribute(this.targetAttr); t = this.opts.lazyClass.split("."); const a = t[t.length - 1]; t = s; this.prevVideoSrc !== t && (i.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); - 1 < e.indexOf("webm") && (t.src = s + ".webm"), -1 < e.indexOf("mp4") && (t.src = s + ".mp4") }), i.load(), i.addEventListener("canplaythrough", () => { window.setTimeout(() => { e.classList.add(this.classes.loaded) }, 500), 1 == this.opts.lazyClass.split(" ").length && e.classList.remove(a), this.checkCompleteVideo(), this.getEndImage(e), this.videoCallStack.splice(0, 1), 0 < this.videoCallStack.length && this.setVideoSrc() }, { once: !0 }), e.isVideoInit = !0), this.prevVideoSrc = t } getEndImage(t) { var e = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const i = t.querySelector(this.opts.imageEndLazyClass); t = this.opts.imageEndLazyClass.split("."); const s = t[t.length - 1]; i && !i.classList.contains(this.opts.imageLazyCompleteClass) && (i.src = i.getAttribute(e), i.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && i.classList.remove(s), i.classList.add(this.opts.imageLazyCompleteClass) }, { once: !0 })) } checkCompleteVideo() { var t = Array.from(this.el.querySelectorAll("." + this.classes.loaded)).filter(e => { { let t = 0; if (t < this.opts.notLoadElement.length) return !e.closest(this.opts.notLoadElement[t]) } }); this.lazyCompleteLength = t.length } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const d = TAB_S9.UTILS, t = d.RESPONSIVE; TAB_S9.VideoPlayer = class { constructor(t, e) { t = { sectionElement: e.sectionElement, videoParentElement: null, videoElement: t, videoController: ".video__controller", hiddenElement: ".blind", endImage: ".video__end-frame img", videoLazyClass: ".js-video-src", lazyCompleteClass: "load-complete", imageEndLazyClass: ".js-end-img-src", visiblePoint: e.visiblePoint || 0, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused" }, resizeStart: null, on: { updateController: null } }; this.opts = d.def(t, e || {}), this.classes = t.classes, this.init() } init() { this.setElements(), this.initOpts(), null !== this.video && (this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.updateController(), this.bindEvents()) } setElements() { this.videoElement = this.opts.videoElement, this.video = this.videoElement.querySelector("video"), null !== this.video && (null !== this.opts.videoParentElement ? this.videoParentElement = this.video.closest(this.opts.videoParentElement) : this.videoParentElement = this.videoElement, this.videoController = this.videoParentElement.querySelector(this.opts.videoController)) } initOpts() { this.getCurrentDevice(), this.autoPlay = !!this.videoElement.dataset.autoPlay && JSON.parse(this.videoElement.dataset.autoPlay), this.videoElement.playState = !1, this.videoElement.autoPlayState = !1, this.useController = !!this.videoController } getCurrentDevice() { this.winWidth = d.winSize().w, this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } getEndImage() { var t = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const e = this.videoElement.querySelector(this.opts.imageEndLazyClass); var i = this.opts.imageEndLazyClass.split("."); const s = i[i.length - 1]; e && (e.src = e.getAttribute(t), e.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && e.classList.remove(s), e.classList.add(this.opts.lazyCompleteClass) }, { once: !0 })) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.video.addEventListener("canplaythrough", this.onCanplayThrough.bind(this), { once: !0 }), this.useController && this.videoController.addEventListener("click", this.onClickController.bind(this)) } onChange(t) { if (t === this.videoElement) { t = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(t); t = i; this.prevVideoSrc !== t && (this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); - 1 < e.indexOf("webm") && (t.src = i + ".webm"), -1 < e.indexOf("mp4") && (t.src = i + ".mp4"), this.video.load() }), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 })), this.prevVideoSrc = t } } onLoad(t) { if (t === this.videoElement) { t = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(t); this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(t => { const e = t.getAttribute("type"); - 1 < e.indexOf("webm") && (t.src = i + ".webm"), -1 < e.indexOf("mp4") && (t.src = i + ".mp4"), this.video.load() }), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 }) } } onPlay(t) { const e = this.videoElement.parentElement.hasAttribute("aria-hidden"); var i = () => { e && JSON.parse(this.videoElement.parentElement.getAttribute("aria-hidden")) || 0 < this.video.readyState && !this.videoElement.playState && (this.video.currentTime === this.video.duration && (this.video.currentTime = 0), this.autoPlay && (this.videoElement.autoPlayState = !0), this.videoElement.playState = !0, this.videoElement.classList.contains(this.classes.paused) ? this.videoElement.classList.add(this.classes.playing) : window.setTimeout(() => { this.videoElement.classList.add(this.classes.playing) }, 350), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.paused), window.setTimeout(() => { this.video.play(), this.updateController() }, 350), this.video.addEventListener("ended", this.updatePlayEnded.bind(this), { once: !0 })) }; t && t !== this.videoElement || i() } onPause() { this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.add(this.classes.paused), this.updateController() } onEnded() { 3 < this.video.readyState && (this.video.ended || this.video.pause(), this.video.currentTime = this.video.duration, this.videoElement.playState = !1, this.videoElement.classList.add(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController()) } onReset(t) { var e = () => { this.video.pause(), this.video.currentTime = 0, this.videoElement.playState = !1, this.autoPlay && (this.videoElement.autoPlayState = !1), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController() }; t && t !== this.videoElement || e() } onCanplayThrough() { var t = this.opts.videoLazyClass.split("."), t = t[t.length - 1]; this.useController && window.setTimeout(() => { this.videoController.style.display = "block" }, 500), this.videoElement.classList.add(this.classes.loaded), 1 == this.opts.videoLazyClass.split(" ").length && this.videoElement.classList.remove(t), this.isCanplay = !0, this.onScrollHandler(), this.isCanplay = !1 } onClickController(t) { t.preventDefault(), this.videoElement.playState ? this.onPause() : this.onPlay() } updatePlayEnded() { this.onPause() } updateController() { var t; this.useController && (this.videoElement.playState ? this.videoController.classList.add(this.classes.isPaused) : this.videoController.classList.remove(this.classes.isPaused), t = { el: this.videoController, playState: this.videoElement.playState }, this.outCallback("updateController", t)) } onScrollHandler() { if (!this.videoElement.closest(".cm-layer")) { var t = window.scrollY, e = t > this.lastScrollY ? "down" : "up", i = d.getHeight(this.videoElement), i = (d.winSize().h, .5 * i), s = d.getScroll().top, a = d.getScroll().bottom, n = d.getOffset(this.videoElement).top, o = d.getOffset(this.videoElement).bottom - i; const h = this.videoElement.classList.contains(this.classes.playing) && this.videoElement.playState; var r = this.videoElement.classList.contains(this.classes.paused) && !this.videoElement.playState, l = this.videoElement.classList.contains(this.classes.ended) && !this.videoElement.playState; if (o + i < s) this.autoPlay && (this.videoElement.autoPlayState ? (h || r) && this.onEnded() : this.videoElement.classList.add(this.classes.ended)); else if (a < n) this.autoPlay && this.videoElement.autoPlayState && (h || r || l) && this.onReset(); else if (o < a && s < n) { const h = this.isCanplay || "down" == e; !h || !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || d.isLowNetwork() || this.onPlay() } this.lastScrollY = t } } onResponsiveChange() { window.setTimeout(() => { this.isCanplay = !0, this.onReset(), this.onScrollHandler(), this.isCanplay = !1 }, 20) } onResizeHandler() { d.winSize().w !== this.winWidth && (this.winWidth = d.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = d.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, d.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } outCallback(t, e) { t = this.opts.on[t]; null != t && t(e) } }}(),function() { "use strict"; t = !(o = {}), l = e = null, s = function() { a(), n(), UTILS.isLowNetwork() && document.documentElement.classList.add("low_network"), document.documentElement.classList.add("load"), window.removeEventListener("load", s) }, a = function() { t = 1024 <= window.innerWidth ? "desktop" : 768 <= window.innerWidth && window.innerWidth < 1024 ? "tablet" : "mobile", clearTimeout(o.resizeTimeout), o.resizeTimeout = setTimeout(function() { UTILS.isBrokenFixed() }, 100), t != e && (document.documentElement.classList.add(t), document.documentElement.classList.remove(e), e = t) }, n = function() { for (var t = window.pageYOffset, e = t + window.innerHeight, i = 0; i < o.allClickables.length; i++) { var s = o.allClickables[i], a = t + s.getBoundingClientRect().top, n = t + UTILS.getNavHeight(); n <= a && a <= e ? s.isVisible = !0 : (a < n || e < a) && (s.isVisible = !1) } }, r = function(t) { t.preventDefault(), t.stopPropagation(); var e = this, i = parseFloat(this.innerText), s = document.querySelectorAll("#desc-section li"), i = document.querySelectorAll("#desc-section li")[i - 1], a = i.querySelector("span"), n = a.innerText, o = (a.innerHTML = '' + n + "", l = t.currentTarget, function() { d.call(e), a.removeEventListener("focusin", o) }), r = function() { a.innerHTML = n, a.removeAttribute("tabindex"), a.removeEventListener("focusout", r) }; t.currentTarget.closest(".cm-layer") && (t = t.currentTarget.closest(".cm-layer"), $(t).trigger("closeLayer", !1)), a.addEventListener("focusin", o), a.addEventListener("focusout", r), i.querySelector("a").focus(), s.forEach(t => t.classList.remove("is-active")), i.classList.add("is-active") }, h = function(t) { var t = t.target.closest("li"), e = t.getAttribute("data-sup"), i = document.querySelectorAll(".click_sup"); for (let t = 0; t < i.length; t++) i[t].innerText === e && (d.call(this), l.focus()); var s = l.closest(".cm-layer"); if (s) { var a = s.id; const n = s.parentNode, o = n.querySelector(`[data-layer-target="#${a}"]`); l.innerText === e && o.focus() } t.classList.remove("is-active") }, d = function(t) { var s; !document.documentElement.classList.contains("ios") && t && null == t.relatedTarget || ((s = this).isClicked || this.isVisible || i(this) || setTimeout(function() { var t = window.pageYOffset, e = s.getBoundingClientRect(), i = (window.innerHeight - UTILS.getNavHeight()) / 2, t = t - UTILS.getNavHeight() + e.top + e.height / 2; window.scrollTo(0, t - i) }, 10), this.isClicked = !1) }, i = function(t) { var t = t.parentNode, e = t.getAttribute("id"); return "contents" != e && t != document.body && (!("subnav" != e && !t.classList.contains("sc-s22ultra-popup")) || i(t)) }, c = function() { this.isClicked = !0 }; var o, t, e, l, s, a, n, r, h, d, i, c, u = { init: function() { o.resizeTimeout = null, o.supClicker = document.querySelectorAll("a.click_sup"), o.supTopBtn = document.querySelectorAll("button.click_disclaimer"), o.contents = document.getElementById("contents") || document.getElementById("content"), o.allClickables = o.contents.querySelectorAll("a, button, input, select"); var t = 0; for (window.addEventListener("load", s), window.addEventListener("resize", a), window.addEventListener("scroll", n), t = 0; t < o.allClickables.length; t++) { var e = o.allClickables[t]; e.isClicked = !1, e.isVisible = !1, e.addEventListener("focusin", d), e.addEventListener("mousedown", c) } for (t = 0; t < o.supClicker.length; t++) o.supClicker[t].addEventListener("click", r); for (t = 0; t < o.supTopBtn.length; t++) o.supTopBtn[t].addEventListener("click", h); var i = document.documentElement.classList; "global" == UTILS.checkRegion() || i.contains("mac") || i.contains("safari") || ANIUTIL.scrollController({ speed: 120, duration: .5 }) } }; window.initialize = u}(),function(t) { t.TrapFocus = function() { "use strict"; var t, g = void 0, e = window, i = e.document, b = e.jQuery, s = null, a = e.TAB_S9.UTILS; function n(t, e) { if (!(this instanceof n)) return new n(t, e); var i = { obj: t, prevStep: null, isDestroy: false, IgnoreUtilFocusChanges: false, ariaAttr: { hidden: "aria-hidden", disabled: "aria-disabled", modal: "aria-modal" }, ariaNotHidden: (() => { return e && e.ariaNotHidden ? e.ariaNotHidden : [] })(), classAttr: { clone: "trapfocus" }, elAttr: { tabIndex: "tabindex", role: "role" }, customEvent: ".TrapFocus" + (new Date).getTime() + Math.random() }; this.opts = a.def(i, e || {}); if (!(this.obj = b(this.opts.obj)).length) return; if (s != null) s.destroy(); s = this; this.init() } return n.prototype = { init: function() { this.initLayout(); this.buildAria(); this.bindEvents(true); this.loadComponent(); this.obj.data("TrapFocus", this) }, initLayout: function() { var t = this.opts.ariaAttr; var e = this.opts.elAttr; this.obj.attr(t.modal, "true"); this.obj.attr(e.role, "dialog") }, buildAria: function() { var v = this.opts.ariaAttr; var f = this.opts.elAttr; var t = "head, script, noscript, link, style, meta"; var e = this.opts.ariaNotHidden.length > 0 ? `, ${this.opts.ariaNotHidden.join(",")}` : ""; a.def(this, { aria: { notHidden: Array(t + e), focusType: ["A", "BUTTON", "INPUT", "SELECT", "TEXTAREA"], dataAttr: { ariaHidden: "trapfocusariahidden", ariaDisabled: "trapfocusariadisabled", tabIndex: "trapfocustabindex", role: "trapfocusrole" }, destroy: b.proxy(function() { var a = this.aria.dataAttr; var n = this.aria.hiddenEls; var s = this.aria.focusEls; var o = this.aria.tabindexEls; for (var t = 0, e = n.length; t < e; t++)(function(t) { var e = n.eq(t), i = e.data(a.ariaHidden), s = e.data(a.role); if (i != g) { e.attr(v.hidden, i); e.removeData(a.ariaHidden) } else e.removeAttr(v.hidden); if (s != g) { e.attr(f.role, s); e.removeData(a.role) } else e.removeAttr(f.role) })(t); for (var i = 0, r = s.length; i < r; i++)(function(t) { var e = s.eq(t), i = e.data(a.ariaDisabled); e.removeAttr(f.tabIndex); if (i != g) { e.attr(v.disabled, i); e.removeData(a.ariaDisabled) } else e.removeAttr(v.disabled) })(i); for (var l = 0, h = o.length; l < h; l++)(function(t) { var e = o.eq(t), i = e.data(a.tabIndex); if (i != g) { e.attr(f.tabIndex, i); e.removeData(a.tabIndex) } else e.removeAttr(f.tabIndex) })(l); var d = document.getElementById("teconsent"); if (d) { var c = d.querySelector("a"); if (c && c.getAttribute("tabindex") === "-1") { c.setAttribute("tabindex", "0"); c.removeAttribute("aria-disabled") } } }, this), build: b.proxy(function() { var i = this; var t = this.aria.focusType; var a = this.aria.dataAttr; var s = this.obj.parents(); var n = this.obj.siblings().not(i.aria.notHidden.join(",")); var o = b("

      "); var r = b(""); for (var e = 0, l = s.length; e < l; e++)(function(t) { var e = s.eq(t); n = n.add(e.siblings().not(i.aria.notHidden.join(","))) })(e); o = o.add(n); r = r.add(n); this.obj.removeAttr(v.hidden); for (var h = 0, d = n.length; h < d; h++)(function(t) { var e = n.eq(t), i = e.attr(v.hidden), s = e.attr(f.role); if (i != g) e.data(a.ariaHidden, i); if (s != g) e.data(a.role, s); e.attr(v.hidden, "true"); e.attr(f.role, "none presentation") })(h); o = o.add(n.find(t.join(",").toLowerCase())); for (var c = 0, u = o.length; c < u; c++)(function(t) { var e = o.eq(t), i = e.attr(v.disabled); if (i != g) e.data(a.ariaDisabled, i); e.attr(v.disabled, "true"); setTimeout(() => { e.attr(f.tabIndex, -1) }) })(c); r = r.add(n.find("[" + f.tabIndex + "]")); for (var p = 0, m = r.length; p < m; p++)(function(t) { var e = r.eq(t), i = e.attr(f.tabIndex); if (i != g) e.data(a.tabIndex, i); e.attr(f.tabIndex, -1) })(p); this.aria.hiddenEls = n; this.aria.focusEls = o; this.aria.tabindexEls = r }, this) } }) }, changeEvents: function(t) { var e = [], i = t.split(" "); for (var s in i) e.push(i[s] + this.opts.customEvent); return e.join(" ") }, bindEvents: function(t) { if (t) b(i).on(this.changeEvents("focusin"), b.proxy(this.trapFocus, this)); else b(i).off(this.changeEvents("focusin")) }, focusFirstDescendant: function(t) { for (var e = 0; e < t.childNodes.length; e++) { var i = t.childNodes[e]; if (this.attemptFocus(i) || this.focusFirstDescendant(i)) return true } return false }, focusLastDescendant: function(t) { for (var e = t.childNodes.length - 1; e >= 0; e--) { var i = t.childNodes[e]; if (this.attemptFocus(i) || this.focusLastDescendant(i)) return true } return false }, isFocusable: function(t) { if (t.tabIndex > 0 || t.tabIndex === 0 && t.getAttribute("tabIndex") !== null) return true; if (t.disabled) return false; switch (t.nodeName) { case "A": return !!t.href && t.rel != "ignore"; case "INPUT": return t.type != "hidden" && t.type != "file"; case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return true; default: return false } }, attemptFocus: function(t) { if (this.opts.isDestroy) return; if (!this.isFocusable(t)) return false; this.opts.IgnoreUtilFocusChanges = true; try { t.focus() } catch (t) {} this.opts.IgnoreUtilFocusChanges = false; return document.activeElement === t }, trapFocus: function(t) { if (this.opts.isDestroy) return; if (this.opts.IgnoreUtilFocusChanges) return; var e = document; this.dynamicComponentFocus() }, loadComponent: function() { this.dynamicComponentFocus(); setTimeout(() => { this.dynamicComponentFocus() }, 3e3); this.focusFirstDescendant(this.obj[0]); this.lastFocus = document.activeElement; this.aria.build() }, dynamicComponentFocus: function() { const r = this.opts.ariaAttr; const l = this.opts.elAttr; setTimeout(() => { var t = document.getElementById("QSIFeedbackButton-btn"); var e = document.getElementById("QSIFeedbackButton-close-btn"); var i = document.getElementById("nebula_div_btn"); var s = document.getElementById("spr-live-chat-app"); var a = document.getElementById("teconsent"); if (t) { var n = t.parentElement; t.setAttribute(r.disabled, "true"); t.setAttribute(l.tabIndex, "-1"); n.setAttribute(r.disabled, "true"); n.setAttribute(r.hidden, "true"); n.setAttribute(l.tabIndex, "-1"); n.setAttribute(l.role, "none presentation") } if (i) { var o = i.parentElement; i.setAttribute(r.disabled, "true"); i.setAttribute(l.tabIndex, "0"); o.setAttribute(r.disabled, "true"); o.setAttribute(r.hidden, "true"); o.setAttribute(l.tabIndex, "-1"); o.setAttribute(l.role, "none presentation") } if (s) { s.setAttribute(r.disabled, "true"); s.setAttribute(r.hidden, "true"); s.setAttribute(l.tabIndex, "-1"); s.setAttribute(l.role, "none presentation") } if (a && a.hasAttribute("aria-label")) setTimeout(() => { var t = a.querySelector("a"); t.setAttribute(l.tabIndex, "-1"); t.setAttribute(r.disabled, "true"); t.setAttribute(r.hidden, "true") }) }) }, destroy: function() { s = null; this.opts.isDestroy = true; var t = this.opts.ariaAttr; var e = this.opts.elAttr; this.bindEvents(false); this.aria.destroy(); this.obj.removeAttr(t.modal) } }, n }()}(window),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const n = TAB_S9.UTILS, t = n.RESPONSIVE; TAB_S9.HeightMatch = class { constructor(t = container, e) { var i = { container: t || ".heightmatch-wrap", childElement: ">li", notCompareElement: null, pushElement: null, matchElement: ".heightmatch-cont", column: 3, pushObjs: null, useDestroyHeight: !0, destroyType: !1, resizeStart: null, breakpoints: {}, matchBefore: null, matchAfter: null, loadAfter: null }; this.opts = n.def(i, e || {}), this.classes = i.classes, this.obj = $(document.querySelector(t)), this.init() } init() { null !== this.obj && (this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("loadAfter"), this.bindEvents()) } setElements() { this.objChild = this.obj.find(this.opts.childElement), (this.opts.pushObjs = null) == this.opts.pushElement ? this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement) : this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement).find(this.opts.pushElement) } setOpts() { this.currentDevice = !1, this.prevDevice = null; var t, e, i = n.winSize().w, s = this.opts.breakpoints, a = []; for (e in s) t = i <= e ? (a.push(e), Math.min.apply(null, a)) : null; this.breakOpts = n.def({}, this.opts), null != t && (this.breakOpts = n.def(this.breakOpts, s[t])) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { n.winSize().w !== this.winWidth && (this.winWidth = n.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.outCallback("matchBefore"), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.resizeRequestFrame = n.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("matchAfter"), n.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setRows() { this.rowNum = Math.ceil(this.objChild.length / this.breakOpts.column) } buildHeightControl() { this.breakOpts.column <= 1 ? null !== this.opts.pushObjs && this.opts.pushObjs.css("height", "") : this.buildHeight() } buildHeight() { this.heightArray = []; for (var t = 0; t < this.rowNum; t++) this.heightArray[t] = []; for (var t = 0, e = this.objChild.length; t < e; t++) { var i = parseInt(t / this.breakOpts.column, 10), s = this.objChild.eq(t).not(this.opts.notCompareElement).find(this.opts.matchElement), s = s.is(":visible") ? s.outerHeight() : 0; this.heightArray[i].push(s) } for (t = 0; t < this.rowNum; t++) this.heightArray[t] = Math.max.apply(null, this.heightArray[t]); this.setLayout() } setLayout() { for (var t = 0, e = this.objChild.length; t < e; t++) { var i = parseInt(t / this.breakOpts.column, 10); (null == this.opts.pushElement ? this.objChild.eq(t).not(this.opts.notCompareElement) : this.objChild.eq(t).not(this.opts.notCompareElement).find(this.opts.pushElement)).height(this.heightArray[i]) } } destroy() { this.opts.useDestroyHeight && null !== this.opts.pushObjs && this.opts.pushObjs.css("height", ""), this.opts.destroyType = !0, this.bindEvents(!1) } reInit() { this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.onResizeHandler(), this.opts.destroyType && (this.opts.destroyType = !1, this.bindEvents(!0)) } outCallback(t) { t = this.opts[t]; null != t && t() } }}(),function(t) { t.HiveLayer = function() { "use strict"; var t, r = window, l = r.jQuery, e = r.document, h = r.TAB_S9.UTILS, d = []; function s(t, e) { if (!(this instanceof s)) return new s(t, e); var i = { effect: "fade", layerWrapElements: t, layerBody: ".cm-layer__body", layerElements: ".cm-layer__wrapper", openerElements: ".js-layer-opener", closerElements: ".js-layer-closer", dimmedElements: ".cm-layer__dimmed", classAttr: { htmlToggle: "is-layer-open", isAsync: "is-async" }, focusOutObj: { CSS: { overflow: "hidden", position: "absolute", left: 0, top: 0, "z-index": -1, width: 1, height: 1, "font-size": "1px", "line-height": 0 } }, customEvent: ".HiveLayer" + (new Date).getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, flip: { CLASS: "hive-layer-flip", direction: "horizontal", rotateStart: 90, rotateEnd: 0 }, customToggle: false, dimmedDuration: 250, fps: 120, easing: "swing", duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null }, ariaNotHidden: [] }; if (!(this.layerWrap = i.layerWrapElements).length) return; this.layerWrap = l(i.layerWrapElements); this.opts = h.def(i, e || {}); this.init() } return s.prototype = { init: function() { this.initOpts(); this.setElements(); this.initLayout(); this.buildTween(); this.buildTrapFocus(); this.bindEvents(true); this.layerWrap.data("HiveLayer", this) }, initOpts: function() { this.layerWrapInstance = "#" + this.layerWrap.attr("id"); if (!this.opts.isSupportTransition && this.opts.effect === "flip") this.opts.effect = "default"; if (this.opts.effect == "custom") { this.opts.effect = "default"; this.opts.customToggle = true } }, setElements: function() { this.layerBody = this.layerWrap.find(this.opts.layerBody); this.layerObj = this.layerWrap.find(this.opts.layerElements); this.closerObj = this.layerWrap.find(this.opts.closerElements); this.dimmedObj = this.layerWrap.find(this.opts.dimmedElements) }, initLayout: function() { if (this.opts.effect === "slide") { this.dimmedObj.hide(); this.layerObj.hide() } else if (this.opts.effect === "flip") { var t = this.opts.flip.direction; if (t !== "vertical") this.opts.flip.cssD = "rotateY"; else this.opts.flip.cssD = "rotateX"; this.dimmedObj.hide(); this.layerObj.hide(); this.layerWrap.addClass(this.opts.flip.CLASS) } }, buildTween: function() { h.def(this, { tweens: { instance: [], kill: l.proxy(function() { for (var t = 0, e = this.tweens.instance.length; t < e; t++) this.tweens.instance[t].kill(); this.tweens.instance = [] }, this) } }) }, buildTrapFocus: function() { if (!this.opts.useTrapFocus) return; h.def(this, { trapfocus: { instance: null, destroy: l.proxy(function() { if (this.trapfocus.instance == null) return; this.trapfocus.instance.destroy(); this.trapfocus.instance = null }, this), build: l.proxy(function() { if (this.trapfocus.instance !== null) return; this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden }) }, this) } }) },// (SEC) 팝업관련 bindEvents: function(t) { if (t) { l(e).on("click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', l.proxy(this.onLayerOpen, this)); this.layerWrap.on("openLayer", l.proxy(this.onLayerOpen, this)); this.closerObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)); this.layerWrap.on("layerSetOptions", l.proxy(this.setOptions, this)); if (this.opts.useEscape) this.layerObj.on("keydown", l.proxy(this.onEscapeClose, this)) } else { l(e).off("click clickCustom"); this.layerWrap.off("openLayer"); this.closerObj.off("mousedown click clickCustom"); this.layerWrap.off("layerSetOptions"); if (this.opts.useEscape) this.layerObj.off("keydown") } }, bindOutsideEvents: function(t) { if (!this.opts.useOutside) return; if (t) this.layerObj.on("clickoutside touchendoutside", l.proxy(this.onLayerOutsideFunc, this)); else this.layerObj.off("clickoutside touchendoutside") }, bindCloseEvents: function(t) { if (t) this.layerWrap.on("closeLayer", l.proxy(this.closeLayer, this)); else this.layerWrap.off("closeLayer") }, setOptions: function(t, e) { h.def(this.opts, e || {}); if (e.customToggle) this.opts.effect = "default" }, setScrollLock: function(t) { if (!this.opts.useScrollLock) return; if (t) h.page.scrollLock.on(); else h.page.scrollLock.off(); l("html").toggleClass(this.opts.classAttr.htmlToggle, t) }, onLayerOpen: function(t) { t.preventDefault(); setTimeout(() => { this.dimmedObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)) }, 500); if (t.type === "click" || t.type === "clickCustom") this.opts.openerTarget = l(t.currentTarget); if (t.type === "click") if (this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync)) return; this.layerViewType = "open"; d.push({ POPUPWRAP: this.layerWrap }); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 0; document.querySelector("html.load div#header").style.pointerEvents = "none" } this.setScrollLock(true); this.bindCloseEvents(true); if (this.opts.effect === "default") if (!this.opts.customToggle) { this.layerWrap.css({ opacity: 0, display: "block",visibility : "visible" // (SEC) 추가 (팝업 내 이미지 안보이는 현상) }); this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerWrap.css("opacity", ""); this.openAfterBugFunc() } else this.outCallback("layerOpenBefore"); else if (this.opts.effect === "fade") { this.layerWrap.css({ opacity: 0, display: "block" }); this.outCallback("layerOpenBefore"); TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: "hidden" }); this.outCallback("buildTools"); var e = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: l.proxy(function() { var t = TweenLite.to(this.layerBody, .25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: l.proxy(function() { this.layerBody.css({ overflow: "", transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(t) }, this) }); this.tweens.instance.push(e) } else if (this.opts.effect === "slide") { var i = 1; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerBody, { overflow: "hidden" }); TweenLite.set(this.layerObj, { display: "", y: -h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var e = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function() { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(s) } else if (this.opts.effect === "slide2") { var i = .6; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerObj, { display: "", y: h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var e = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function() { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(s) } else if (this.opts.effect === "flip") { var a = this.opts.flip.rotateEnd - this.opts.flip.rotateStart, n = a / this.opts.duration * (1e3 / this.opts.fps), o = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateStart, endDistance: this.opts.flip.rotateEnd, moveDistance: a, moveOneStep: n, currentStep: o }; this.layerWrap.show(); this.dimmedObj.fadeIn(this.opts.dimmedDuration, l.proxy(function() { this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerObj.show(); this.initStep(this.opts.flip.moveData); this.flipFunc() }, this)); r.setTimeout(l.proxy(function() { this.outCallback("buildTools") }, this), 30) } this.ariaAccessbility(true, this.layerWrap) }, initStep: function(t) { this.opts.stepTimeOld = new Date; this.direction = t.startDistance > t.moveDistance ? "toNext" : "toPrev"; this.condition = this.direction === "toNext" ? t.currentStep > t.moveDistance : t.currentStep < t.moveDistance }, moveStep: function(t) { this.opts.stepTimeNew = new Date; this.opts.remaining = Math.max(0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration); var e = this.opts.remaining / this.opts.duration || 0, i = 1 - e, s = l.easing[this.opts.easing](i, this.opts.duration * i, 0, 1, this.opts.duration); t.currentStep = (t.endDistance - t.startDistance) * s }, flipFunc: function() { var t = this.opts.flip.moveData; this.moveStep(t); if (this.condition) { r.clearTimeout(this.stepTimeout); this.stepTimeout = r.setTimeout(l.proxy(function() { this.flipFunc() }, this), 1e3 / this.opts.fps); this.condition = this.direction === "toNext" ? t.currentStep > t.moveDistance : t.currentStep < t.moveDistance; this.outCallback("layerMove", t.currentStep, t) } else { this.opts.remaining = this.opts.duration; if (this.layerViewType === "close" || !this.layerViewType) { this.closeAfterBugFunc(); this.dimmedObj.fadeOut(this.opts.dimmedDuration, l.proxy(function() { this.layerWrap.hide(); this.layerObj.hide() }, this)) } else this.openAfterBugFunc() } var e = t.startDistance + t.currentStep; this.layerObj.css({ transform: this.opts.flip.cssD + "(" + e + "deg)" }) }, onLayerOpenAfter: function() { if (this.trapfocus) this.trapfocus.build(); this.bindOutsideEvents(true); this.outCallback("layerOpenAfter") }, openAfterBugFunc: function() { r.clearTimeout(this.openAfterTimeout); this.openAfterTimeout = r.setTimeout(l.proxy(this.onLayerOpenAfter, this), 30) }, onLayerClose: function(t) { var e = l(t.currentTarget); if (t.type === "mousedown") { if (!h.isDevice) { t.stopPropagation(); this.opts.useCloseFocus = false } } else if (t.type === "click" || t.type === "clickCustom") { t.preventDefault(); if (t.type === "click") if (e.hasClass(this.opts.classAttr.isAsync)) return; this.layerWrap.trigger("closeLayer"); this.dimmedObj.off("mousedown click clickCustom") } }, closeLayer: function() { this.closeType = arguments[1]; this.layerViewType = "close"; this.outCallback("layerCloseBefore"); this.popupOpenPropsControl(); this.setScrollLock(false); if (this.trapfocus) this.trapfocus.destroy(); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 1; document.querySelector("html.load div#header").style.pointerEvents = "unset" } this.ariaAccessbility(false, this.layerWrap); r.clearTimeout(this.closeBeforeTimeout); this.closeBeforeTimeout = r.setTimeout(l.proxy(this.closeBeforeBugFunc, this), 30); this.bindOutsideEvents(false) }, onEscapeClose: function(t) { var e = t.which || t.keyCode; if (e !== 27) return; this.layerWrap.trigger("closeLayer") }, onLayerOutsideFunc: function() { this.layerWrap.trigger("closeLayer") }, closeBeforeBugFunc: function() { if (this.opts.effect === "default") { if (!this.opts.customToggle) this.layerWrap.stop(true, true).hide(); this.closeAfterBugFunc() } else if (this.opts.effect === "fade") { var t = TweenLite.to(this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: l.proxy(function() { this.layerBody.css("overflow", ""); var t = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: l.proxy(this.closeAfterBugFunc, this) }); this.tweens.instance.push(t) }, this) }); this.tweens.instance.push(t) } else if (this.opts.effect === "slide") { var e = 1; TweenLite.set(this.layerBody, { overflow: "hidden" }); var t = TweenLite.to(this.dimmedObj, e, { opacity: 0 }); var i = TweenLite.to(this.layerObj, e, { y: -h.winSize().h, onComplete: l.proxy(function() { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(i) } else if (this.opts.effect === "slide2") { var e = .5; var t = TweenLite.to(this.dimmedObj, e, { opacity: 0 }); var i = TweenLite.to(this.layerObj, e, { y: h.winSize().h, onComplete: l.proxy(function() { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(i) } else if (this.opts.effect === "flip") { var s = -this.opts.flip.rotateStart - this.opts.flip.rotateEnd, a = s / this.opts.duration * (1e3 / this.opts.fps), n = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateEnd, endDistance: -this.opts.flip.rotateStart, moveDistance: s, moveOneStep: a, currentStep: n }; this.initStep(this.opts.flip.moveData); this.flipFunc() } }, closeAfterBugFunc: function() { r.clearTimeout(this.closeAfterTimeout); this.closeAfterTimeout = r.setTimeout(l.proxy(this.onLayerCloseAfter, this), 30) }, popupOpenPropsControl: function() { var t = d; for (var e = 0, i = t.length; e < i; e++) { var s = t[e], a = s["POPUPWRAP"][0]; if (a === this.layerWrap[0]) t[e] = null } for (var n = 0, o = t.length; n < o; o--) { var r = t[o - 1]; if (r === null) t.splice(o - 1, 1) } }, onLayerCloseAfter: function() { if (this.opts.openerTarget !== null) { if (this.closeType !== false) this.opts.openerTarget.focus(); this.opts.openerTarget = null } this.opts.useCloseFocus = true; this.bindCloseEvents(false); this.outCallback("layerCloseAfter") }, ariaAccessbility: function(t, e) {}, outCallback: function(t) { var e = this.opts.on[t]; if (t === "layerMove") this.layerWrap.trigger(t, arguments[1], arguments[2], this); else this.layerWrap.trigger(t, this); if (e == null) return; if (t === "layerMove") e(arguments[1], arguments[2], this); else e(this) }, styleDestroy: function() { this.dimmedObj.attr("style", ""); this.layerWrap.attr("style", ""); this.layerBody.attr("style", ""); this.layerObj.attr("style", "") }, destroy: function() { this.tweens.kill(); if (this.trapfocus) this.trapfocus.destroy(); this.styleDestroy(); this.bindEvents(false); this.bindOutsideEvents(false); this.bindCloseEvents(false) } }, s }()}(window),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const o = TAB_S9.UTILS; o.RESPONSIVE; TAB_S9.SubNav = class { constructor(t = container, e) { var i = { navItems: "ul li>a", navDests: '[class*="js-nav-"]', visSections: ".js-visible", resizeStart: null, classes: { isOn: "on" } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.navItems = o.convertArray(this.el.querySelectorAll(this.opts.navItems)), this.navDests = document.querySelectorAll(this.opts.navDests), this.visSections = o.convertArray(document.querySelectorAll(this.opts.visSections)) } initOpts() { this.visCount = -1, this.visSections.forEach(t => { t.dataset.visIndex = t.classList.contains("js-count") ? ++this.visCount : this.visCount }), this.winOffsetTop = window.pageYOffset } bindEvents() { this.onScrollHandler(), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)); const i = window.location.hash; this.navItems.forEach((t, e) => { -1 < t.getAttribute("href").indexOf("#") && (t.dataset.navIndex = e, t.addEventListener("click", this.onNavItemClickEvent.bind(this))), i && -1 < t.getAttribute("href").indexOf(i) && (t.parentNode.classList.remove(this.classes.isOn), t.click()) }) } onNavItemClickEvent(e) { e.preventDefault(); e = e.target; const i = e.parentNode; if (!this.el.classList.contains("hold") && !i.classList.contains(this.classes.isOn)) { this.navItems.forEach(t => { t.parentNode.classList.remove(this.classes.isOn) }), i.classList.contains(this.classes.isOn) || i.classList.add(this.classes.isOn); e = e.dataset.navIndex; const n = this.navDests[e]; var e = n.getBoundingClientRect(), s = parseInt(window.getComputedStyle(n).paddingTop), a = (window.innerHeight - (e.height - s) + o.getNavHeight()) / 2; let t = 0; (t = n.classList.contains("js-nav-center") ? this.winOffsetTop + e.top + s - a : this.winOffsetTop + e.top - o.getNavHeight()) < 150 && (t = 0), this.el.classList.add("hold"), GALAXY.setSmoothScrollTop(t, 1500, () => { this.el.classList.contains("hold") && this.el.classList.remove("hold"), GALAXY.header && GALAXY.header.resetSubNav() }) } } onScrollHandler() { this.winOffsetTop = window.pageYOffset; var a = (window.innerHeight + o.getNavHeight()) / 2; this.visSections.forEach(t => { var i, e = t.getBoundingClientRect(), s = this.winOffsetTop + e.top, e = this.winOffsetTop + e.bottom; this.winOffsetTop + a >= s && this.winOffsetTop + a <= e && (i = t.dataset.visIndex, this.navItems.forEach((t, e) => { e != i && t.parentNode.classList.contains(this.classes.isOn) && t.parentNode.classList.remove(this.classes.isOn) }), (s = this.navItems[i].parentNode).classList.contains(this.classes.isOn) || (s.classList.add(this.classes.isOn), !this.el.classList.contains("hold") && s.classList.contains(this.classes.isOn) && GALAXY.header && GALAXY.header.resetSubNav())) }) } onResizeHandler() { o.winSize().w !== this.winWidth && (this.winWidth = o.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.onScrollHandler(), this.resizeRequestFrame = o.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, o.cancelAFrame.call(window, this.resizeRequestFrame) } }}(),// (SEC) 2024.03 galaxy ai hotfix [s]function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const a = TAB_S9.UTILS, t = a.RESPONSIVE; TAB_S9.AI = class { constructor(t = container, e) { var i = { el: t, tabEl: ".wearable-tab-ai__tab", tabList: ".wearable-tab-ai__tab-list", tabButtons: ".wearable-tab-ai__tab-cta", tabPanel: ".wearable-tab-ai__tab-panels", tabPanels: ".wearable-tab-ai__tab-panel", classes: { isActive: "is-active" }, featureHide: "is-feature-hide", resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl), this.tabList = this.tabEl.querySelector(this.opts.tabList), this.tabButtons = a.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)), this.tabPanel = this.el.querySelector(this.opts.tabPanel), this.tabPanels = a.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)) } initOpts() { this.currentIndex = 0, this.currentDevice = !1, this.prevDevice = null } initLayout() { this.tabButtons.forEach(function(t, e) { const i = this.tabPanels[e]; this.currentIndex == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(t => { t.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() {} onClickTabButton(t) { t = t.currentTarget; const s = this.tabButtons.indexOf(t); s != this.currentIndex && (this.tabButtons.forEach((t, e) => { const i = this.tabPanels[e]; s == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }), this.currentIndex = s) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() {} setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } } }(),// (SEC) 2024.03 galaxy ai hotfix [e]function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; TAB_S9.UTILS.RESPONSIVE; TAB_S9.Booster = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", videoControllerTagging: { booster: { play: "gtabs9:highlights:outdoor-viewing:movi-play:outdoor-viewing-video", pause: "gtabs9:highlights:outdoor-viewing:movi-pause:outdoor-viewing-video" } }, featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new TAB_S9.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = this.opts.videoControllerTagging; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) } }, this.videoPlayer.build() } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const n = TAB_S9.UTILS, t = n.RESPONSIVE; TAB_S9.Compare = class { constructor(t = container, e) { var i = { el: t, compareWrapEl: ".wearable-tab-compare__list-wrap", compareInnerEl: ".wearable-tab-compare__list-inner", compareItemEl: ".wearable-tab-compare__list-item", compareNameEl: ".wearable-tab-compare__name", compareSelectEl: ".wearable-tab-compare__select", compareSelectElText: ".wearable-tab-compare__select-txt", selectOptionList: ".wearable-tab-compare__dropdown", selectOptionItem: ".wearable-tab-compare__dropdown-item", selectOptionLink: ".wearable-tab-compare__dropdown-device", compareImgEl: ".wearable-tab-compare__product-img", compareInfo: ".wearable-tab-compare__info", compareInfoItem: ".wearable-tab-compare__info-item", navigationEl: ".wearable-tab-compare__navigation", colorChipEl: ".wearable-tab-compare__color-chip", colorList: ".wearable-tab-compare__color", visibleTargetEl: ".wearable-tab-compare__info-item--battery", viewMoreCta: ".view-more__cta", viewmore: ".viewmore", collapse: ".collapse", matchElements: [".wearable-tab-compare__info-item--display", ".wearable-tab-compare__info-item--durability", ".wearable-tab-compare__info-item--processor", ".wearable-tab-compare__info-item--storage", ".wearable-tab-compare__info-item--memory", ".wearable-tab-compare__info-item--battery", ".wearable-tab-compare__info-item--pen", ".wearable-tab-compare__info-item--camera", ".wearable-tab-compare__info-item--network", ".wearable-tab-compare__info-item--weight", ".wearable-tab-compare__info-item--thickness", ".wearable-tab-compare__cta", ".wearable-tab-compare__name-selector"], matchCommonOpts: { childElement: ".wearable-tab-compare__list-item", useDestroyHeight: !1, breakpoints: {} }, classes: { isCollapse: "is-collapse", isActive: "is-active", isSelected: "is-selected", isExpanded: "is-expanded" }, resizeStart: null, on: { updateImageLoader: null } }; this.opts = n.def(i, e || {}), this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.initLayout(), this.buildHeightMatch(), this.buildCompareItem(), this.onResizeHandler(), this.bindEvents()) } initOpts() { this.firstImageLoad = !1, this.currentDevice = !1, this.expanded = !1, this.viewMoreCtaTagging = this.viewMoreCta.getAttribute("data-omni"), this.viewMoreTagging = this.viewMoreCta.querySelector(this.opts.viewmore).getAttribute("data-tagging"), this.collapseTagging = this.viewMoreCta.querySelector(this.opts.collapse).getAttribute("data-tagging") } initLayout() { this.updateViewMoreHeight() } setElements() { this.compareWrapEl = this.el.querySelector(this.opts.compareWrapEl), this.compareInnerEl = this.compareWrapEl.querySelector(this.opts.compareInnerEl), this.contentsEl = this.el.querySelectorAll(this.opts.colorChipEl), this.compareItemEl = this.compareWrapEl.querySelectorAll(this.opts.compareItemEl), this.compareNameEl = this.compareWrapEl.querySelectorAll(this.opts.compareNameEl), this.compareSelectEl = this.compareWrapEl.querySelectorAll(this.opts.compareSelectEl), this.compareInfo = this.el.querySelectorAll(this.opts.compareInfo), this.selectOptionList = this.compareWrapEl.querySelectorAll(this.opts.selectOptionList), this.selectOptionLink = this.compareWrapEl.querySelectorAll(this.opts.selectOptionLink), this.visibleTargetEl = this.el.querySelectorAll(this.opts.visibleTargetEl), this.viewMoreCta = this.el.querySelector(this.opts.viewMoreCta), this.navigationEl = this.el.querySelector(this.opts.navigationEl) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.viewMoreCta.addEventListener("click", this.onClickViewMoreCta.bind(this)) } onLoadHandler() { this.onScrollHandler() } onResizeHandler() { n.winSize().w !== this.winWidth && (this.winWidth = n.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.updateViewMoreHeight(), this.resizeRequestFrame = n.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, this.updateViewMoreHeight(), n.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } onResponsiveChange() {} onClickViewMoreCta(t) { t.preventDefault(), this.expanded = !this.expanded, this.updateViewMoreHeight() } onScrollHandler() { var t = window.innerHeight, t = n.getScroll().top - t, e = n.getScroll().bottom, i = n.getOffset(this.el); (e > i.top && t <= i.top || t < i.bottom && e > i.bottom || t < i.top && e > i.bottom || t > i.top && e < i.bottom) && !this.firstImageLoad && (t = this.el.querySelectorAll(".js-start-img-src"), this.updateImageLoader(t)) } updateImageLoader(t) { this.outCallback("updateImageLoader", t), this.firstImageLoad = !0 } updateViewMoreHeight() { this.expanded ? (this.viewMoreCta.classList.add(this.classes.isCollapse), this.el.classList.add(this.classes.isExpanded), this.viewMoreCta.setAttribute("data-omni", this.viewMoreCtaTagging + this.collapseTagging), this.viewMoreCta.setAttribute("ga-la", this.viewMoreCtaTagging + this.collapseTagging), this.heightMatch.reInit()) : (this.viewMoreCta.classList.remove(this.classes.isCollapse), this.el.classList.remove(this.classes.isExpanded), this.viewMoreCta.setAttribute("data-omni", this.viewMoreCtaTagging + this.viewMoreTagging), this.viewMoreCta.setAttribute("ga-la", this.viewMoreCtaTagging + this.viewMoreTagging)) } buildHeightMatch() { this.heightMatch = { instance: [], reInit: () => { this.heightMatch.instance.length && this.heightMatch.instance.forEach(t => { t.reInit() }) }, initLayout: () => { for (let t = 0, e = this.opts.matchElements.length; t < e; t++) { const s = this.opts.matchElements[t]; var i = "js-" + s.split(".")[1]; for (let t = 0, e = this.compareItemEl.length; t < e; t++) { const a = this.compareItemEl[t]; if (null === a.querySelector("." + i)) { const n = document.createElement("div"), o = a.querySelector(s); n.innerHTML = o.innerHTML, n.classList.add(i), o.innerHTML = "", o.appendChild(n) } } } }, build: () => { this.heightMatch.initLayout(); var t = { column: this.compareItemEl.length }; n.def(this.opts.matchCommonOpts, t); for (let t = 0, e = this.opts.matchElements.length; t < e; t++) { const a = this.opts.matchElements[t]; var i = { pushElement: "." + a.split(".")[1], childElement: this.opts.compareItemEl, matchElement: ".js-" + a.split(".")[1] }, s = JSON.parse(JSON.stringify(this.opts.matchCommonOpts)); n.def(s, i), this.heightMatch.instance.push(new TAB_S9.HeightMatch(this.opts.compareWrapEl, s)) } } }, this.heightMatch.build() } buildCompareItem() { this.compareItem = { instance: [], build: () => { this.compareItem.instance.length || this.compareItemEl.forEach(t => { this.compareItem.instance.push(new TAB_S9.CompareItem(t, { el: this.opts.compareItemEl, on: { updateHeightMatch: () => { this.heightMatch.reInit(), this.updateViewMoreHeight() }, updateImageLoader: t => { this.firstImageLoad && this.updateImageLoader(t) } } })) }) } }, this.compareItem.build() } outCallback(t, e) { t = this.opts.on[t]; null != t && t(e) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const s = TAB_S9.UTILS; s.RESPONSIVE; TAB_S9.CompareItem = class { constructor(t = container, e) { var i = { el: t, sectionEl: ".wearable-tab-compare", compareItemEl: ".wearable-tab-compare__list-item", compareListEl: ".wearable-tab-compare__list", compareNameEl: ".wearable-tab-compare__name", nameSelector: ".wearable-tab-compare__name-selector", nameSelectorText: ".wearable-tab-compare__name-selector-txt", selectOptionList: ".wearable-tab-compare__dropdown", selectOptionItem: ".wearable-tab-compare__dropdown-item", selectOptionLink: ".wearable-tab-compare__dropdown-device", compareImgEl: ".wearable-tab-compare__image", compareInfo: ".wearable-tab-compare__info", compareInfoItem: ".wearable-tab-compare__info-item", colorChipEl: ".wearable-tab-compare__color-chip", colorList: ".wearable-tab-compare__color", tabPanels: ".wearable-tab-compare__product", tabPanel: ".wearable-tab-compare__product-image", ctaItem: ".wearable-tab-compare__cta-item", buynowCta: ".buy__cta", learnmoreCta: ".learn-more__cta", ctaText: "span", titleEl: ".s-title", valueEl: ".s-value", initIndex: 0, classes: { isCollapse: "is-collapse", isActive: "is-active", isSelected: "is-selected" }, on: { updateHeightMatch: null, updateImageLoader: null } }; this.opts = s.def(i, e || {}), this.classes = i.classes, this.el = t, this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.initLayout(), this.buildColorChange(), this.bindEvents(), this.updateComparelayout()) } initOpts() { this.currentDevice = !1, this.targetIndex = this.opts.initIndex, this.baseImageSrc = this.sectionEl.dataset.imageSrc } initLayout() { this.selectOptionItem.forEach(t => { t.classList.contains(this.classes.isSelected) ? (this.currentProduct = t.dataset.modelName, t.querySelector(this.opts.selectOptionLink).setAttribute("title", "선택됨"), this.nameSelectorText.innerText = t.querySelector(this.opts.selectOptionLink).innerText) : t.querySelector(this.opts.selectOptionLink).removeAttribute("title") }), this.DATA = LOCAL_DATA[this.currentProduct] } updateComparelayout() { this.targetIndex = this.opts.initIndex, this.setColorLayout(), this.setProductImageLayout(), this.setCtaLayout(), this.setInfoLayout(), this.colorChange.reInit(), this.outCallback("updateImageLoader", this.responseveImages), this.outCallback("updateHeightMatch") } setElements() { this.sectionEl = document.querySelector(this.opts.sectionEl), this.compareListEl = document.querySelector(this.opts.compareListEl), this.compareNameEl = this.el.querySelector(this.opts.compareNameEl), this.allCompareNameEl = this.compareListEl.querySelectorAll(this.opts.compareNameEl), this.nameSelector = this.el.querySelector(this.opts.nameSelector), this.nameSelectorText = this.nameSelector.querySelector(this.opts.nameSelectorText), this.selectOptionList = this.el.querySelector(this.opts.selectOptionList), this.selectOptionItem = this.selectOptionList.querySelectorAll(this.opts.selectOptionItem), this.selectOptionLink = this.selectOptionList.querySelectorAll(this.opts.selectOptionLink), this.compareInfo = this.el.querySelector(this.opts.compareInfo), this.compareInfoItem = this.compareInfo.querySelectorAll(this.opts.compareInfoItem), this.compareProductName = this.el.querySelector(this.opts.compareProductName), this.colorList = this.el.querySelector(this.opts.colorList), this.tabPanels = this.el.querySelector(this.opts.tabPanels), this.tabPanel = this.tabPanels.querySelectorAll(this.opts.tabPanel), this.el.querySelector(this.opts.buynowCta) && (this.buynowCta = this.el.querySelector(this.opts.buynowCta), this.buynowCtaText = this.buynowCta.querySelector(this.opts.ctaText)), this.el.querySelector(this.opts.learnmoreCta) && (this.learnmoreCta = this.el.querySelector(this.opts.learnmoreCta), this.learnmoreCtaText = this.learnmoreCta.querySelector(this.opts.ctaText)) } bindEvents() { this.nameSelector.addEventListener("click", this.handleClickOption.bind(this)), this.selectOptionItem.forEach(t => t.addEventListener("click", this.handleClickOptionItem.bind(this))) } setCtaLayout() { this.DATA.colors.forEach((t, e) => { if (this.targetIndex === e) { var e = t.cta; const i = e.buynow, s = e.learnmore; if (this.buynowCta) { const a = this.buynowCta.closest(this.opts.ctaItem); i ? (t = i.hasOwnProperty("name") ? i.name : "BUY NOW", a.style.display = "block", this.buynowCtaText.innerText = t, this.buynowCta.setAttribute("aria-label", i.aria), this.buynowCta.setAttribute("href", i.url), this.buynowCta.setAttribute("data-omni", i.tagging + i.sku), this.buynowCta.setAttribute("ga-la", i.tagging)) : a.style.display = "none" } if (this.learnmoreCta) { const n = this.learnmoreCta.closest(this.opts.ctaItem); s ? (e = s.hasOwnProperty("name") ? s.name : "LEARN MORE", n.style.display = "block", this.learnmoreCtaText.innerText = e, this.learnmoreCta.setAttribute("aria-label", s.aria), this.learnmoreCta.setAttribute("href", s.url), this.learnmoreCta.setAttribute("data-omni", s.tagging), this.learnmoreCta.setAttribute("ga-la", s.tagging)) : n.style.display = "none" } } }) } setColorLayout() { const i = []; this.DATA.colors.forEach((t, e) => { e = this.targetIndex === e ? this.classes.isActive : ""; i.push('") }); var t = i.join(""); this.colorList.innerHTML = t } setProductImageLayout() { const s = []; this.DATA.colors.forEach((t, e) => { var e = this.targetIndex === e ? this.classes.isActive : "", i = this.baseImageSrc + "/" + t.thumnailSrc; s.push('

      '), s.push('갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (95)'), s.push("

      ") }); var t = s.join(""); this.tabPanels.innerHTML = t, this.responseveImages = this.tabPanels.querySelectorAll(".js-start-img-src") } setInfoLayout() { for (const s in this.DATA) "colors" !== s && this.compareInfoItem.forEach(t => { if (s === t.dataset.infoTitle) { const e = t.querySelector(this.opts.titleEl), i = t.querySelector(this.opts.valueEl); this.DATA[s].length ? (e.style.display = "block", i.innerHTML = this.DATA[s]) : (e.style.display = "none", i.innerHTML = "") } }) } handleClickOption(t) { t.preventDefault(); const e = t.currentTarget.closest(this.opts.compareNameEl); e.classList.contains(this.classes.isActive) ? this.compareNameEl.classList.remove(this.classes.isActive) : (this.allCompareNameEl.forEach(t => t.classList.remove(this.classes.isActive)), this.compareNameEl.classList.add(this.classes.isActive)), document.body.addEventListener("click", this.outsideClickFunc.bind(this)) } handleClickOptionItem(t) { t.preventDefault(); const e = t.currentTarget, i = e.querySelector(this.opts.selectOptionLink).innerText; this.selectOptionItem.forEach(t => { t.classList.remove(this.classes.isSelected), t.querySelector(this.opts.selectOptionLink).removeAttribute("title") }), e.classList.add(this.classes.isSelected), e.querySelector(this.opts.selectOptionLink).setAttribute("title", "선택됨"), this.nameSelectorText.innerText = i, setTimeout(() => { this.nameSelector.focus() }, 30), this.currentProduct = e.dataset.modelName, this.DATA = LOCAL_DATA[this.currentProduct], this.closeNameSelectorFunc(), this.updateComparelayout() } closeNameSelectorFunc() { this.compareNameEl.classList.remove(this.classes.isActive), this.setAriaFunc() } outsideClickFunc(t) { const e = t.target; e.closest(this.opts.compareNameEl) || this.compareNameEl.classList.remove(this.classes.isActive), this.setAriaFunc() } setAriaFunc() { this.compareNameEl.classList.contains(this.classes.isActive) ? this.compareNameEl.querySelector(this.opts.nameSelector).setAttribute("title", "열림") : this.compareNameEl.querySelector(this.opts.nameSelector).setAttribute("title", "닫힘") } buildColorChange() { this.colorChange = { instance: null, reInit: () => { null !== this.colorChange.instance && this.colorChange.instance.reInit() }, build: () => { null === this.colorChange.instance && (this.colorChange.instance = new TAB_S9.Tab(this.el, { initIndex: this.opts.initIndex, tabEl: this.opts.compareItemEl, tabList: this.opts.colorList, tabPanels: this.opts.tabPanel, tabPanel: this.opts.tabPanels, tabButtons: this.opts.colorChipEl, a11y: !1, on: { updateIndex: t => { this.targetIndex = t, this.setCtaLayout() } } })) } }, this.colorChange.build() } outCallback(t, e) { t = this.opts.on[t]; null != t && t(e) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const e = TAB_S9.UTILS; e.RESPONSIVE; TAB_S9.Contrast = class { constructor(t = container, e) { var i = { el: t, defaultBtn: ".type-default", contrastBtn: ".type-contrast", cookieName: "highContrastMode" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null !== this.el && (this.setElements(), this.bindEvents()) } setElements() { this.defaultBtn = this.el.querySelector(this.opts.defaultBtn), this.defaultBtnTitle = this.defaultBtn.getAttribute("title").trim(), this.contrastBtn = this.el.querySelector(this.opts.contrastBtn), this.contrastBtnTitle = this.contrastBtn.getAttribute("title").trim(), this.cookieName = this.opts.cookieName } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), this.defaultBtn && this.defaultBtn.addEventListener("click", this.onClickDefaultBtn.bind(this)), this.contrastBtn && this.contrastBtn.addEventListener("click", this.onClickContrastBtn.bind(this)) } onLoadHandler() { this.activeContrast() } onClickDefaultBtn(t) { t.preventDefault(), e.setCookie(this.cookieName, "0", 1), this.activeContrast() } onClickContrastBtn(t) { t.preventDefault(), e.setCookie(this.cookieName, "1", 1), this.activeContrast() } activeContrast() { var t = e.getCookie(this.cookieName); null != t && t.length && "1" == t ? (document.documentElement.classList.add("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle + " 선택됨"), this.defaultBtn.setAttribute("title", this.defaultBtnTitle)) : (document.documentElement.classList.remove("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle), this.defaultBtn.setAttribute("title", this.defaultBtnTitle + " 선택됨")) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const a = TAB_S9.UTILS, t = a.RESPONSIVE; TAB_S9.Detail = class { constructor(t = container, e) { var i = { el: t, tabEl: ".wearable-tab-detail__tab", tabList: ".wearable-tab-detail__tab-list", tabButtons: ".wearable-tab-detail__tab-cta", tabPanel: ".wearable-tab-detail__tab-panels", tabPanels: ".wearable-tab-detail__tab-panel", classes: { isActive: "is-active" }, featureHide: "is-feature-hide", resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl), this.tabList = this.tabEl.querySelector(this.opts.tabList), this.tabButtons = a.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)), this.tabPanel = this.el.querySelector(this.opts.tabPanel), this.tabPanels = a.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)) } initOpts() { this.currentIndex = 0, this.currentDevice = !1, this.prevDevice = null } initLayout() { this.tabButtons.forEach(function(t, e) { const i = this.tabPanels[e]; this.currentIndex == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(t => { t.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() {} onClickTabButton(t) { t = t.currentTarget; const s = this.tabButtons.indexOf(t); s != this.currentIndex && (this.tabButtons.forEach((t, e) => { const i = this.tabPanels[e]; s == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }), this.currentIndex = s) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() {} setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const a = TAB_S9.UTILS, t = a.RESPONSIVE; TAB_S9.Display = class { constructor(t = container, e) { var i = { el: t, trackElement: ".wearable-tab-display__wrap", fixedElement: ".wearable-tab-display__fixed", targetImage: ".wearable-tab-display__image", beforeImage: ".wearable-tab-display__image-before", featureHide: "is-feature-hide", resizeStart: null, classes: { isActive: "is-active" } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement), this.fixedElement = this.el.querySelector(this.opts.fixedElement), this.targetImage = this.el.querySelector(this.opts.targetImage), this.beforeImage = this.el.querySelector(this.opts.beforeImage) } initOpts() { this.winWidth = a.winSize().w, this.currentDevice = !1, this.scroller = null, this.isFade = !1 } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)) } onLoadHandler() { this.onResponsiveChange(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { this.setLayout(); window.getComputedStyle(this.trackElement).getPropertyValue("padding-bottom").replace("px", ""); const t = a.getOffset(this.targetImage).top; a.getOffset(this.targetImage).bottom; var e = "mobile" !== this.currentDevice ? .4 : .5; const i = a.getScroll().top + window.innerHeight * e, s = this; null !== this.scroller && this.scroller.trackAnimation(function() { 0 == s.isFade && t < i ? TweenMax.to(s.beforeImage, 2, { autoAlpha: 1 }, { autoAlpha: 0 }) : TweenMax.to(s.beforeImage, 2, { autoAlpha: 0 }, { autoAlpha: 1 }), 1 == s.isFade && t > i && (s.isFade = !1, s.beforeImage.style.opacity = 1) }) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.setScroller() } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, useFixed: !1 })) } destroyScroller() { null !== this.scroller && (this.scroller.destroy(!0), this.scroller = null) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; TAB_S9.UTILS.RESPONSIVE; TAB_S9.Experience = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", videoControllerTagging: { experience: { play: "gtabs9:highlights:accessories:movi-play:accessories-video", pause: "gtabs9:highlights:accessories:movi-pause:accessories-video" } }, featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new TAB_S9.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = this.opts.videoControllerTagging; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) } }, this.videoPlayer.build() } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; TAB_S9.KeyVisual = class { constructor(t = container, e) { var i = { el: t, classes: { isUseBuy: "is-use-buy", isUseRegist: "is-use-regist", isUseOrder: "is-use-order", isUseWhere: "is-use-where", isUseOff: "is-use-off" }, featureHide: "is-feature-hide" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || this.initLayout() } initLayout() { this.el.classList.remove(this.classes.isUseBuy), this.el.classList.remove(this.classes.isUseRegist), this.el.classList.remove(this.classes.isUseOrder), this.el.classList.remove(this.classes.isUseWhere), this.el.classList.remove(this.classes.isUseOff), "undefined" == typeof __TAB_USE_KV_CTA || null == __TAB_USE_KV_CTA || null == __TAB_USE_KV_CTA || "" == __TAB_USE_KV_CTA || "buy-now" == __TAB_USE_KV_CTA ? this.el.classList.add(this.classes.isUseBuy) : "pre-order" == __TAB_USE_KV_CTA ? this.el.classList.add(this.classes.isUseOrder) : "pre-registration" == __TAB_USE_KV_CTA ? this.el.classList.add(this.classes.isUseRegist) : "where-to-buy" == __TAB_USE_KV_CTA ? this.el.classList.add(this.classes.isUseWhere) : "where-to-buy" == __TAB_USE_KV_CTA && this.el.classList.add(this.classes.isUseOff) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; TAB_S9.UTILS.RESPONSIVE; TAB_S9.Meet = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", videoControllerTagging: { design: { play: "gtabs9:highlights:design:movi-play:design-video", pause: "gtabs9:highlights:design:movi-pause:design-video" } }, featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new TAB_S9.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = this.opts.videoControllerTagging; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) } }, this.videoPlayer.build() } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const a = TAB_S9.UTILS, t = a.RESPONSIVE; TAB_S9.Overview = class { constructor(t = container, e) { var i = { el: t, rootEl: ".wearable-tab", layerEl: ".wearable-tab-overview__popup", featureList: ".wearable-tab-overview__list", featureItem: ".wearable-tab-overview__list-item", featureCta: ".wearable-tab-overview__list-cta", featureBtn: ".wearable-tab-overview__list-btn", featureContent: ".wearable-tab-overview__popup-content", featurePlayer: ".wearable-tab-overview__player", storyEl: ".wearable-tab-overview__story", storySlide: ".wearable-tab-overview__story-item", indicatorList: ".wearable-tab-overview__indicator-list", indicatorItem: ".wearable-tab-overview__indicator-item", indicatorText: ".indicator__text", controlHiddenEl: ".blind", navigationPrev: ".navigation__cta-prev", navigationNext: ".navigation__cta-next", storyItemController: ".story-item__btn", storyItem: ".story-item__image", storyItemCta: ".story-item__cta", closeBtn: ".cm-layer__btn-close", videoElement: ".video__container", startImage: ".video__start-frame", endImage: ".video__end-frame", featureHide: "is-feature-hide", initSlide: 0, infiniteRolling: !0, transitionDuration: 400, widthResizeStart: null, heightResizeStart: null, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isHover: "is-hover", isActive: "is-active", isPaused: "is-paused", isHeight: "is-height" }, thumbnailTagging: { design: { play: "gtabs9:highlights:overview:movi-play:design-video", pause: "gtabs9:highlights:overview:movi-pause:design-video" }, durability: { play: "gtabs9:highlights:overview:movi-play:durability-video", pause: "gtabs9:highlights:overview:movi-pause:durability-video" } }, popupTagging: { design: { play: "gtabs9:highlights:overview^lypu:movi-play:design-video", pause: "gtabs9:highlights:overview^lypu:movi-pause:design-video" }, durability: { play: "gtabs9:highlights:overview^lypu:movi-play:durability-video", pause: "gtabs9:highlights:overview^lypu:movi-pause:durability-video" }, accessories: { play: "gtabs9:highlights:overview^lypu:movi-play:accessories-video", pause: "gtabs9:highlights:overview^lypu:movi-pause:accessories-video" } } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.buildSwiper(), this.buildLayer(), this.buildVideoPlayer(), this.bindEvents()) } initOpts() { this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, this.currentDevice = !1, this.prevDevice = null, this.initValues() } initValues() { this.selectedIndex = -1 } initLayout() { this.storySlide.forEach((t, e) => { t.setAttribute("aria-hidden", "true"), t.setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), this.opts.initSlide === e && (t.setAttribute("aria-hidden", "false"), t.removeAttribute("tabindex"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }), this.indicatorItem.forEach(t => { "tablist" === this.indicatorList.getAttribute("role") && t.setAttribute("aria-selected", "false") }), this.opts.infiniteRolling || (0 === this.opts.initSlide && (this.navigationPrev.style.display = "none"), this.opts.initSlide === this.storySlide.length - 1 && (this.navigationNext.style.display = "none")) } setElements() { this.rootEl = document.querySelector(this.opts.rootEl), this.layerEl = this.el.querySelector(this.opts.layerEl), this.videoElement = this.el.querySelectorAll(this.opts.videoElement), this.featureList = this.el.querySelector(this.opts.featureList), this.featureContent = this.el.querySelector(this.opts.featureContent), this.featureCta = this.featureList.querySelectorAll(this.opts.featureCta), this.featureBtn = this.featureList.querySelectorAll(this.opts.featureBtn), this.featurePlayer = this.featureList.querySelectorAll(this.opts.videoElement), this.storyEl = this.el.querySelector(this.opts.storyEl), this.storyItem = this.el.querySelectorAll(this.opts.storyItem), this.storySlide = this.el.querySelectorAll(this.opts.storySlide), this.storyPlayer = this.storyEl.querySelectorAll(this.opts.videoElement), this.indicatorList = this.el.querySelector(this.opts.indicatorList), this.indicatorItem = this.indicatorList.querySelectorAll(this.opts.indicatorItem), this.navigationPrev = this.el.querySelector(this.opts.navigationPrev), this.navigationNext = this.el.querySelector(this.opts.navigationNext), this.closeBtn = this.el.querySelector(this.opts.closeBtn), this.storyItemController = this.storyEl.querySelectorAll(this.opts.storyItemController) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.featureCta.forEach((t, e) => { t.addEventListener("click", this.handleLayerOpen.bind(this, e)) }), this.indicatorItem.forEach((t, e) => { t.addEventListener("click", this.select.bind(this, e)) }), this.navigationPrev.addEventListener("click", this.handleNavigationPrev.bind(this)), this.navigationNext.addEventListener("click", this.handleNavigationNext.bind(this)), this.storySlide.forEach((t, e) => { -1 < t.querySelector(this.opts.storyItemCta).getAttribute("href").indexOf("#") && t.querySelector(this.opts.storyItemCta).addEventListener("click", this.onStoryItemCtaClickEvent.bind(this)) }) } unBindEvents() { this.indicatorItem.forEach((t, e) => { t.removeAllEventListeners("click") }), this.featureBtn.forEach(t => { t.removeAllEventListeners("click") }), this.storyItemController.forEach(t => { t.removeAllEventListeners("click") }) }// (SEC) 팝업앵커 onStoryItemCtaClickEvent(t) {/* t.preventDefault(); const e = t.target; t = e.getAttribute("href"); const i = this.rootEl.querySelector(t); t = i.dataset.rectTop || a.getOffset(i).top - a.getNavHeight(); $(this.layerEl).trigger("closeLayer", !1), $("html, body").animate({ scrollTop: t }, { duration: 1e3 }); const s = i.querySelector(".wearable-tab-common__headline") ? i.querySelector(".wearable-tab-common__headline") : i.querySelector(".wearable-tab-common__sub-headline"); s && (s.setAttribute("tabindex", "0"), s.focus(), s.addEventListener("focusout", () => { s.removeAttribute("tabindex") }))*/t.preventDefault();$(this.layerEl).trigger("closeLayer", !1);let secBarHeight = $('.component-bar-inner').length > 0 ? $('.component-bar-inner').height() : 0;let scrollTop = $(t.target.getAttribute("href")).offset().top - secBarHeight;$("html, body").animate({scrollTop:scrollTop},1e3); } handleNavigationPrev() { let t = this.storySwiper.instance.realIndex - 1; t < 0 && (t = this.storySlide.length - 1), this.storySwiper.instance.slideToLoop(t) } handleNavigationNext() { let t = this.storySwiper.instance.realIndex + 1; t >= this.storySlide.length && (t = 0), this.storySwiper.instance.slideToLoop(t) } handleLayerOpen(t, e) { e.preventDefault(), this.opts.initSlide = t } updateControlText(t, e) { const i = t.querySelector(this.opts.controlHiddenEl); t = e ? this.globalText.play : this.globalText.stop; i.innerHTML = t } select(t, e = !1, i) { var s = this.selectedIndex; s === t && !e || (this.animReqId && (a.cancelAFrame.call(window, this.animReqId), this.animReqId = null), -1 < s && (this.indicatorItem[s].classList.contains(this.classes.isActive) && (this.indicatorItem[s].classList.remove(this.classes.isActive), this.indicatorItem[s].removeAttribute("title")), "tablist" === this.role ? this.indicatorItem[s].setAttribute("aria-selected", "false") : this.indicatorItem[s].removeAttribute("title")), t < 0 ? this.selectedIndex = t : (this.selectedIndex = t, this.indicatorItem[this.selectedIndex].classList.contains(this.classes.isActive) || this.indicatorItem[this.selectedIndex].classList.add(this.classes.isActive), "tablist" === this.indicatorList.getAttribute("role") ? this.indicatorItem[this.selectedIndex].setAttribute("aria-selected", "true") : this.indicatorItem[this.selectedIndex].setAttribute("title", "선택됨"), this.storySwiper.instance.slideToLoop(this.selectedIndex))) } updateImageLayout() { this.featureContent.clientWidth / this.featureContent.clientHeight <= .56 ? this.layerEl.classList.add(this.classes.isHeight) : this.layerEl.classList.remove(this.classes.isHeight) } onResizeHandler() { a.winSize().w === this.winWidth && a.winSize().h === this.winHeight || (this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, null != this.opts.widthResizeStart && null != this.opts.heightResizeStart || (this.opts.widthResizeStart = this.winWidth, this.opts.heightResizeStart = this.winHeight, this.resizeAnimateFunc())), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150) } resizeAnimateFunc() { this.setWidthLayout(), this.setHeightLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.widthResizeStart = null, this.opts.heightResizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.select(this.selectedIndex, !0), this.featurePlayer.forEach(t => { this.videoPlayer.change(t) }), "block" === this.layerEl.style.display && this.storyPlayer.forEach(t => { this.videoPlayer.change(t) }) } setWidthLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.updateImageLayout(), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setHeightLayout() { this.updateImageLayout() } buildVideoPlayer() { this.videoPlayer = { instance: [], load: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onLoad(e) }) }, reset: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onReset(e) }) }, play: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onPlay(e) }) }, change: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onChange(e) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((t, e) => { var i = t.closest(this.opts.featureItem) ? this.opts.featureItem : null; this.videoPlayer.instance.push(new TAB_S9.VideoPlayer(t, { sectionElement: this.opts.el, videoParentElement: i, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = e.classList.contains(this.opts.featureBtn.split(".")[1]) ? this.opts.thumbnailTagging : e.classList.contains(this.opts.storyItemController.split(".")[1]) ? this.opts.popupTagging : ""; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) }) } }, this.videoPlayer.build() } buildSwiper() { this.storySwiper = { instance: null, options: { a11y: !1, loop: this.opts.infiniteRolling, speed: this.opts.transitionDuration, effect: "fade", touchMoveStopPropagation: !0, fadeEffect: { crossFade: !0 }, initialSlide: this.opts.initSlide }, slideChange: () => { const i = this.storySwiper.instance.realIndex, t = this.storySlide[i], e = t.querySelector(this.opts.videoElement); this.select(i), e && (e.classList.contains(this.classes.loaded) ? a.isLowNetwork() || this.videoPlayer.play(e) : this.videoPlayer.load(e)), this.storySlide.forEach((t, e) => { e !== i && (e = t.querySelector(this.opts.videoElement)) && this.videoPlayer.reset(e) }) }, slideChangeTransitionStart: () => { if (null !== this.storySwiper.instance) { const e = Array.from(this.storySwiper.instance.slides); var t = this.storySwiper.instance.realIndex; this.storySlide[t]; e.forEach((t, e) => { t.setAttribute("aria-hidden", "true"), t.setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), t.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), t.classList.contains("swiper-slide-active") && (t.setAttribute("aria-hidden", "false"), t.removeAttribute("tabindex"), t.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), t.querySelector(this.opts.storyItemController) && (t.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), t.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }) } }, destroy: () => { null !== this.storySwiper.instance && (this.storySwiper.instance.destroy(), this.storySwiper.instance = null) }, build: () => { null === this.storySwiper.instance && (this.storySwiper.options.on = { slideChange: this.storySwiper.slideChange.bind(this), slideChangeTransitionStart: this.storySwiper.slideChangeTransitionStart.bind(this) }, this.storySwiper.options.initialSlide = this.opts.initSlide, this.storySwiper.instance = new Swiper(this.opts.storyEl, this.storySwiper.options), this.storySwiper.slideChangeTransitionStart()) } } } buildLayer() { this.layer = { instance: null, build: () => { null === this.layer.instance && (this.layer.instance = new HiveLayer(this.opts.layerEl, { effect: "default", on: { layerOpenBefore: () => { this.updateImageLayout(); const t = this.storySlide[this.opts.initSlide]; var e = t.querySelector(this.opts.videoElement); this.storySwiper.build(), this.select(this.opts.initSlide), e && this.videoPlayer.load(e), this.featurePlayer.forEach(t => { this.videoPlayer.reset(t) }) }, layerOpenAfter: () => { const t = this.storySlide[this.opts.initSlide]; var e = t.querySelector(this.opts.storyItemController), i = t.querySelector(this.opts.storyItemCta); const s = e || i; window.setTimeout(() => { s.focus() }, 50) }, layerCloseBefore: () => { this.featureBtn.forEach(t => { t.classList.contains(this.classes.isPaused) && t.classList.remove(this.classes.isPaused) }) }, layerCloseAfter: () => { this.storySwiper.destroy(), this.initValues(), this.indicatorItem.forEach(t => { t.classList.remove(this.classes.isActive), t.removeAttribute("title") }), this.storySlide.forEach(t => { t = t.querySelector(this.opts.videoElement); this.videoPlayer.reset(t) }) } } })) } }, this.layer.build() } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const t = TAB_S9.UTILS; t.RESPONSIVE; TAB_S9.Powerful = class { constructor(t = container, e) { this.opts = { el: t, targetContents: ".wearable-tab-powerful__contents", targetItem: ".wearable-tab-powerful__item", backItem: ".wearable-tab-powerful__item--back", waterItem: ".wearable-tab-powerful__item--water", frontItem: ".wearable-tab-powerful__item--front", targetItemInner: ".wearable-tab-powerful__item-inner", featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.currDevice = !1, this.prevDevice = null, this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.bindEvents()) } setElements() { this.targetContents = this.el.querySelector(this.opts.targetContents), this.targetItem = this.targetContents.querySelectorAll(this.opts.targetItem), this.backItem = this.targetContents.querySelector(this.opts.backItem), this.frontItem = this.targetContents.querySelector(this.opts.frontItem), this.backInner = this.backItem.querySelector(this.opts.targetItemInner), null !== this.targetContents.querySelector(this.opts.waterItem) && (this.waterItem = this.targetContents.querySelector(this.opts.waterItem), this.waterInner = this.waterItem.querySelector(this.opts.targetItemInner)), this.frontInner = this.frontItem.querySelector(this.opts.targetItemInner) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)) } onLoadHandler() { this.onResizeHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onResizeHandler() { 1024 <= window.innerWidth ? this.currDevice = "desktop" : 768 <= window.innerWidth && window.innerWidth < 1024 ? this.currDevice = "tablet" : this.currDevice = "mobile", this.currDevice != this.prevDevice && (this.onResponsiveChange(), this.prevDevice = this.currDevice) } onResponsiveChange() {} onScrollHandler() { t.customParallax({ wrapperElement: this.el, activeElement: this.backInner, distance: 3, direction: -5 }), null !== this.targetContents.querySelector(this.opts.waterItem) && t.customParallax({ wrapperElement: this.el, activeElement: this.waterInner, distance: 4 }), t.customParallax({ wrapperElement: this.el, activeElement: this.frontInner, distance: 5, direction: 3 }) } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; TAB_S9.UTILS.RESPONSIVE; TAB_S9.SamsungNote = class { constructor(t = container, e) { this.opts = { el: t, videoElement: ".video__container", videoControllerTagging: { "samsung-note": { play: "gtabs9:highlights:samsung-note:movi-play:samsung-note-video", pause: "gtabs9:highlights:samsung-note:movi-pause:samsung-note-video" } }, featureHide: "is-feature-hide" }, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new TAB_S9.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = this.opts.videoControllerTagging; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) } }, this.videoPlayer.build() } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const a = TAB_S9.UTILS, t = a.RESPONSIVE; TAB_S9.Size = class { constructor(t = container, e) { var i = { el: t, tabEl: ".wearable-tab-size__tab", tabList: ".wearable-tab-size__tab-list", tabButtons: ".wearable-tab-size__tab-cta", tabPanel: ".wearable-tab-size__tab-panels", tabPanels: ".wearable-tab-size__tab-panel", videoElement: ".video__container", classes: { isActive: "is-active" }, videoControllerTagging: { sizeGraphite: { play: "gtabs9:highlights:size-and-colors:movi-play:size-and-colors-video", pause: "gtabs9:highlights:size-and-colors:movi-pause:size-and-colors-video" }, sizeBeige: { play: "gtabs9:highlights:size-and-colors:movi-play:size-and-colors-video", pause: "gtabs9:highlights:size-and-colors:movi-pause:size-and-colors-video" } }, featureHide: "is-feature-hide", resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(t), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.buildVideoPlayer(), this.bindEvents()) } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl), this.tabList = this.tabEl.querySelector(this.opts.tabList), this.tabButtons = a.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)), this.tabPanel = this.el.querySelector(this.opts.tabPanel), this.tabPanels = a.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)), this.videoElement = this.el.querySelectorAll(this.opts.videoElement) } initOpts() { this.currentIndex = 0, this.currentDevice = !1, this.prevDevice = null } initLayout() { this.tabButtons.forEach(function(t, e) { const i = this.tabPanels[e]; this.currentIndex == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(t => { t.addEventListener("click", this.onClickTabButton.bind(this)) }) } buildVideoPlayer() { this.videoPlayer = { instance: [], play: e => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(t => { t.onPlay(e) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach(t => { this.videoPlayer.instance.push(new TAB_S9.VideoPlayer(t, { sectionElement: this.opts.el, visiblePoint: .5, on: { updateController: t => { const e = t.el; var i = e.dataset.tagging, t = t.playState ? "pause" : "play", s = this.opts.videoControllerTagging; e.setAttribute("data-omni", s[i][t]), e.setAttribute("ga-la", s[i][t]) } } })) }) } }, this.videoPlayer.build() } onClickTabButton(t) { t = t.currentTarget; const s = this.tabButtons.indexOf(t); s != this.currentIndex && (this.tabButtons.forEach((t, e) => { const i = this.tabPanels[e]; s == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), t.setAttribute("aria-selected", !0), a.offAccessibility(i), e = i.querySelector(this.opts.videoElement), a.isLowNetwork() || this.videoPlayer.play(e)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), t.setAttribute("aria-selected", !1), a.onAccessibility(i)) }), this.currentIndex = s) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() {} setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } }}(),function() { "use strict"; window.TAB_S9 = window.TAB_S9 || {}; const a = TAB_S9.UTILS, t = a.RESPONSIVE; TAB_S9.Tab = class { constructor(t = container, e) { var i = { el: t, tabEl: ".wearable-tab__tab", tabList: ".wearable-tab__tab-list", tabButtons: ".wearable-tab__tab-cta", tabPanel: ".wearable-tab__tab-panels", tabPanels: ".wearable-tab__tab-panel", initIndex: 0, a11y: !0, classes: { isActive: "is-active" }, on: { updateIndex: null }, featureHide: "is-feature-hide", resizeStart: null }; this.opts = a.def(i, e || {}), this.classes = i.classes, this.el = t, this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.tabEl = this.el, this.tabList = this.tabEl.querySelector(this.opts.tabList), this.tabButtons = a.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)), this.tabPanel = this.el.querySelector(this.opts.tabPanel), this.tabPanels = a.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)) } initOpts() { this.currentIndex = this.opts.initIndex, this.currentDevice = !1, this.prevDevice = null, this.outCallback("updateIndex", this.currentIndex), this.tabButtons.forEach(t => { t.classList.contains(this.classes.isActive) ? this.opts.a11y ? t.setAttribute("aria-selected", !0) : t.setAttribute("title", "선택됨") : this.opts.a11y ? t.setAttribute("aria-selected", !1) : t.removeAttribute("title") }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(t => { t.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() { window.removeEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(t => { t.removeEventListener("click", this.onClickTabButton.bind(this)) }) } onClickTabButton(t) { t = t.currentTarget; const s = this.tabButtons.indexOf(t); s != this.currentIndex && (this.tabButtons.forEach((t, e) => { const i = this.tabPanels[e]; s == e ? (t.classList.contains(this.classes.isActive) || t.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), this.opts.a11y ? t.setAttribute("aria-selected", !0) : t.setAttribute("title", "선택됨"), a.offAccessibility(i)) : (t.classList.contains(this.classes.isActive) && t.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), this.opts.a11y ? t.setAttribute("aria-selected", !1) : t.removeAttribute("title"), a.onAccessibility(i)) }), this.currentIndex = s, this.outCallback("updateIndex", this.currentIndex)) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() {} setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } reInit() { this.unBindEvents(), this.setElements(), this.initOpts(), this.bindEvents() } outCallback(t, e) { t = this.opts.on[t]; null != t && t(e) } }}(),function() { "use strict"; TAB_S9.UTILS.RESPONSIVE; new class { constructor(t = container) { this.opts = { el: t, wrapEl: "#wrap", keyVisualEl: ".wearable-tab-kv", overviewEl: ".wearable-tab-overview",// (SEC) 2024.03 galaxy ai hotfix : aiEl 추가aiEl: ".wearable-tab-ai", meetEl: ".wearable-tab-meet", sizeEl: ".wearable-tab-size", detailEl: ".wearable-tab-detail", displayEl: ".wearable-tab-display", powerfulEl: ".wearable-tab-powerful", boosterEl: ".wearable-tab-booster", samsungNoteEl: ".wearable-tab-samsung-note", experienceEl: ".wearable-tab-experience", compareEl: ".wearable-tab-compare", contrastEl: ".cp-high-contrast", subNavEl: "#subnav" }, this.el = document.querySelector(t), this.init() } init() { null !== this.el && (this.buildComponents(), initialize.init()) } buildComponents() { this.imageLoader = new TAB_S9.ImageLoader(this.opts.el, { loadOption: [{ resolution: 1920, attribute: "data-src-pc" }, { resolution: 1080, attribute: "data-src-tablet" }, { resolution: 767, attribute: "data-src-mobile" }] }), this.videoLoader = new TAB_S9.VideoLoader(this.opts.el, { notLoadElement: [".cm-layer"], loadOption: [{ resolution: 1920, attribute: "data-media-pc" }, { resolution: 767, attribute: "data-media-mo" }]// (SEC) 2024.03 galaxy ai hotfix :// this.ai = new TAB_S9.AI(this.opts.aiEl), 추가 }), this.keyVisual = new TAB_S9.KeyVisual(this.opts.keyVisualEl), this.overview = new TAB_S9.Overview(this.opts.overviewEl), this.ai = new TAB_S9.AI(this.opts.aiEl), this.meet = new TAB_S9.Meet(this.opts.meetEl), this.size = new TAB_S9.Size(this.opts.sizeEl), this.detail = new TAB_S9.Detail(this.opts.detailEl), this.display = new TAB_S9.Display(this.opts.displayEl), this.powerful = new TAB_S9.Powerful(this.opts.powerfulEl), this.booster = new TAB_S9.Booster(this.opts.boosterEl), this.samsungNote = new TAB_S9.SamsungNote(this.opts.samsungNoteEl), this.experience = new TAB_S9.Experience(this.opts.experienceEl), this.compare = new TAB_S9.Compare(this.opts.compareEl, { on: { updateImageLoader: t => { this.imageLoader.setResponsiveImage(t) } } }), this.contrast = new TAB_S9.Contrast(this.opts.contrastEl), window.addEventListener("load.stab", () => { setTimeout(() => { window.GALAXY && window.GALAXY.isGalaxy && (this.subNav = new TAB_S9.SubNav(this.opts.subNavEl)) }, 5) }) } }(".wearable-tab")}(); // (SEC) 압축해제 e})(); // (SEC) 컬러칩 오류 (즉시실행 추가) // }); // (SEC) 컬러칩 오류 (콜백 삭제)// (SEC) 컬러칩 오류 (추가)window.dispatchEvent(new Event('load.stab'));

      갤럭시 탭 S9+ 슬림 키보드 북커버 (탭 S9 FE+ 호환)

      슬림하고 가벼운 디자인

      슬림하고 가벼운 디자인

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (96)갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (97)

      한층 더 편안한
      키보드 경험

      한층 더 편안한 키보드 경험

      태블릿에서 문서나 이메일을 정확하게
      타이핑하는 일로 스트레스 받지 마세요.
      태블릿과 슬림 키보드 북커버를
      간단하게 페어링 하면 됩니다.
      DeX 모드를 사용하면
      PC와 같은 편리함을 경험할 수 있습니다.

      태블릿에서 문서나 이메일을 정확하게 타이핑하는 일로 스트레스 받지 마세요.
      태블릿과 슬림 키보드 북커버를 간단하게 페어링 하면 됩니다.
      DeX 모드를 사용하면 PC와 같은 편리함을 경험할 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (98)갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (99)

      생산성을 높여주는
      무선 키보드 공유 기능

      생산성을 높여주는 무선 키보드 공유 기능

      무선 키보드 공유 기능을 통해
      다른 갤럭시 기기와도 간단하게 연결해 보세요.
      태블릿에서 스마트폰으로 전환해
      원활하게 입력하고 탐색할 수 있습니다.
      키보드로 다양한 기기를 넘나들며 연결된 경험이 가능하죠.

      무선 키보드 공유 기능을 통해 다른 갤럭시 기기와도 간단하게 연결해 보세요.
      태블릿에서 스마트폰으로 전환해 원활하게 입력하고 탐색할 수 있습니다.
      키보드로 다양한 기기를 넘나들며 연결된 경험이 가능하죠.

      * 각 제품은 별도 판매입니다.
      * 이해를 돕기 위해 연출된 이미지며, 실제 UX/UI는 다를 수 있습니다.
      * 무선 키보드 공유 기능은 One UI 3.1 이상을 실행하는 갤럭시 스마트폰과
      One UI 2.5 이상을 실행하는 갤럭시 탭 기기에서 지원되며,
      POGO를 통해 북커버 키보드에 연결됩니다.
      * 무선 키보드 공유 기능을 활성화하려면
      두 기기가 동일한 삼성 계정에 로그인되어 있어야 합니다.
      성능은 사용자 네트워크 환경에 따라 달라질 수 있습니다.
      * 무선 키보드 공유 기능은 최대 3대의 기기를 등록할 수 있습니다.
      * 무선 키보드 공유 기능은 설정 > 일반 > 하드웨어 키보드 > 무선 키보드 공유에서 설정/해제할 수 있습니다.

      * 각 제품은 별도 판매입니다.
      * 이해를 돕기 위해 연출된 이미지며, 실제 UX/UI는 다를 수 있습니다.
      * 무선 키보드 공유 기능은 One UI 3.1 이상을 실행하는 갤럭시 스마트폰과 One UI 2.5 이상을 실행하는 갤럭시 탭 기기에서 지원되며, POGO를 통해 북커버 키보드에 연결됩니다.
      * 무선 키보드 공유 기능을 활성화하려면 두 기기가 동일한 삼성 계정에 로그인되어 있어야 합니다. 성능은 사용자 네트워크 환경에 따라 달라질 수 있습니다.
      * 무선 키보드 공유 기능은 최대 3대의 기기를 등록할 수 있습니다.
      * 무선 키보드 공유 기능은 설정 > 일반 > 하드웨어 키보드 > 무선 키보드 공유에서 설정/해제할 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (100)갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (101)

      * 각 제품은 별도 판매입니다.
      * 이해를 돕기 위해 연출된 이미지며, 실제 UX/UI는 다를 수 있습니다.
      * 무선 키보드 공유 기능은 One UI 3.1 이상을 실행하는 갤럭시 스마트폰과
      One UI 2.5 이상을 실행하는 갤럭시 탭 기기에서 지원되며,
      POGO를 통해 북커버 키보드에 연결됩니다.
      * 무선 키보드 공유 기능을 활성화하려면
      두 기기가 동일한 삼성 계정에 로그인되어 있어야 합니다.
      성능은 사용자 네트워크 환경에 따라 달라질 수 있습니다.
      * 무선 키보드 공유 기능은 최대 3대의 기기를 등록할 수 있습니다.
      * 무선 키보드 공유 기능은 설정 > 일반 > 하드웨어 키보드 > 무선 키보드 공유에서 설정/해제할 수 있습니다.

      * 각 제품은 별도 판매입니다.
      * 이해를 돕기 위해 연출된 이미지며, 실제 UX/UI는 다를 수 있습니다.
      * 무선 키보드 공유 기능은 One UI 3.1 이상을 실행하는 갤럭시 스마트폰과 One UI 2.5 이상을 실행하는 갤럭시 탭 기기에서 지원되며, POGO를 통해 북커버 키보드에 연결됩니다.
      * 무선 키보드 공유 기능을 활성화하려면 두 기기가 동일한 삼성 계정에 로그인되어 있어야 합니다. 성능은 사용자 네트워크 환경에 따라 달라질 수 있습니다.
      * 무선 키보드 공유 기능은 최대 3대의 기기를 등록할 수 있습니다.
      * 무선 키보드 공유 기능은 설정 > 일반 > 하드웨어 키보드 > 무선 키보드 공유에서 설정/해제할 수 있습니다.

      갤럭시 워치6 44 mm (블루투스)

      Galaxy Watch6

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (102)
      • * 소비자 이해를 돕기 위해 연출된 이미지 입니다. 실제 UX/UI는 다를 수 있습니다.
      • * 사용 가능한 색상, 크기, 모델 및 워치 스트랩은 국가, 지역 또는 이동통신사에 따라 다를 수 있습니다.
      • * 패브릭 스트랩, 스포츠 스트랩 및 익스트림 스포츠 스트랩은 별매입니다.

      갤럭시 워치가 업그레이드된 성능으로 돌아왔습니다.
      운동 경험은 더 개인화되고,
      수면 측정은 향상되었습니다.
      이제 갤럭시 워치6와 함께
      더 상쾌한 하루를 시작해 보세요.

      수면 측정
      디스플레이
      건강
      운동
      커스터마이징

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (103)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (104)

      갤럭시 워치6에 화면에 수면 점수가 표시되어 있습니다. 수면 점수 82점, 아래에 'Excellent'라는 텍스트와 함께 표시되면서 수면 시간 표시줄이 동그랗게 워치페이스를 따라 그려져 있습니다. 잠자는 사자가 화면 하단에 나타납니다.

      워치와 함께 만드는
      건강한 수면 습관
      수면 측정 자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (106)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (107)

      갤럭시 워치6가 회전한 뒤 정면을 향해 있습니다. 디스플레이의 베젤을 줄여 화면이 커진 것을 강조하고 있습니다.

      더 넓게 보고, 탭하고,
      넘기고, 내리고
      디스플레이 자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (109)

      언제나 꼼꼼하게
      내 몸 건강 체크
      건강 자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (111)

      나만의 운동 목표 설정과
      운동 팁
      운동 자세히 보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (113)

      자유롭게 표현하는
      나만의 스타일
      커스터마이징 자세히 보기

      디스플레이 수면 측정 운동 건강 커스터마이징

      팝업 닫기

      한눈에 가득

      더 커진 화면
      더 얇아진 베젤

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (115)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (116)

      20 % 더 크게
      30 % 더 얇게

      최대 20 % 커진 디스플레이와
      최대 30 % 더 얇아진 블랙 마진으로
      더 많은 정보를 한 눈에 확인할 수 있습니다.
      가독성은 물론 워치 페이스를 내 스타일대로 꾸밀 때도
      더 자유롭죠.

      • * 갤럭시 워치6의 디스플레이 크기는 갤럭시 워치5와 비교한 수치입니다.
      • * 화면 크기 및 블랙 마진 비교는 갤럭시 워치6 40 mm 모델 기준입니다. 갤럭시 워치6 44 mm 모델 기준 화면 크기와 블랙 마진 비교는 각각 16.5 %, 28 %입니다.

      더 슬림하고
      매끈해진 디자인

      두 대의 갤럭시 워치6입니다. 첫 번째는 두께를 보여주기 위해 전체 옆모습을 드러내고 있습니다. 두 번째는 갤럭시 워치6 본체의 슬림한 디자인을 강조하기 위해 확대한 컷입니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (117)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (118)

      매끄러운 핏과 유행타지 않는 원형 디자인의 갤럭시 워치6를 가볍고 간편한 데일리 아이템으로 활용해 보세요.
      디자인이 전체적으로 업그레이드되어 착용감이 더욱 편안하면서도 스타일리시합니다.

      * 갤럭시 워치5와 비교한 결과입니다.

      원 클릭 밴드로
      더 쉬워진 스트랩 교체

      원 클릭 버튼을 눌러 워치 스트랩을 손쉽게 분리하세요.
      한 번의 터치만으로 운동룩에서 출근룩으로 스타일을 바꿀 수 있죠.
      스트랩을 다시 체결할 때도 딸깍 소리가 날 때까지 부드럽게 눌러만 주세요. 이전보다 훨씬 쉽고 빠르게 스트랩을 교체할 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (119)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (120)

      갤럭시 워치6에 워치 스트랩이 부착되는 과정을 통해 원클릭 밴드의 간편함을 강조합니다.

      * 워치 스트랩의 사용 가능 여부는 국가 또는 지역에 따라 다를 수 있습니다. 추가 워치 스트랩은 별매입니다.

      스크래치에 강한
      사파이어 크리스탈

      비가 오나 눈이 오나 걱정 마세요.
      내구성이 뛰어난 사파이어 크리스탈 글라스가
      워치 디스플레이를 견고하게 보호합니다.
      IP68 및 5ATM 등급은 궂은 날씨와 거친 활동에도
      걱정 없을 만큼 튼튼하다는 것을 증명하죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (121)

      먼지로부터 안전하게
      지켜주는 방진 기능

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (122)

      물에 젖어도 초조해 할
      필요 없는 방수 기능

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (123)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (124)

      갤럭시 워치6의 디스플레이가 확대된 상태에서 위를 향하고 있으며, 워치 옆에 물방울이 있어 방수임을 알 수 있습니다. 사파이어 크리스탈 글라스의 내구성을 강조하기 위해 디스플레이 위로 빛이 비치고 있습니다.

      • * 200 gf의 일정한 하중으로 측정한 비커스 경도를 기준으로 합니다.
      • * 갤럭시 워치6는 아래의 국제 기준을 만족하는 방수 및 방진 기능을 지원합니다.
      • - 5기압(5ATM) 방수 등급은 ISO 표준 22810:2010 요구 사항에 따라 50 m 담수에서 10분 동안, IP68 방수 등급은 IEC 표준 60529 요구사항에 따라 1.5 m 담수에서 30분 동안 그대로 둔 상태로 시험하였습니다.
      • * 수영장 또는 수심이 깊지 않은 바다에서 수영 시 사용할 수 있습니다.
      • * 정상적인 방수 및 방진 기능을 위해서 다음 내용을 주의하세요. 그렇지 않을 경우 방수 및 방진 성능을 보증하지 않습니다.
      • - 수영 이후나 깨끗한 물이 아닌 액체(커피, 음료, 비눗물, 자외선 차단제, 손 세정제, 화장품과 같은 화학제품 등)에 노출된 경우 깨끗한 물로 씻은 다음 잘 말린 후 사용하셔야 방수 성능을 유지할 수 있습니다.
      • - 잠수, 다이빙, 수상 스포츠를 하거나 유속이 빠른 계곡 등에서는 사용하지 마세요.
      18 % 더 빠른 프로세서

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (125)

      최대 40시간 지속되는 배터리 용량

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (126)

      기록적인
      충전 시간

      배터리를 한 번 완전히 충전하면 최대 40시간 동안 지속됩니다. 고속 충전을 지원해 단 30분만 충전해도 배터리는 45 %까지 채워지죠. 이는 자유롭게 야외 활동을 하거나 침대에서 긴 수면을 즐기기에 충분합니다.

      30 만에

      최대 45 % 충전

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (127)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (128)

      갤럭시 워치6의 충전 화면 GUI 입니다. 화면의 숫자가 '50 %'에서 '100 %'로 올라가면서 배터리가 완전히 충전되고 있음을 나타냅니다.

      • * 실제 배터리 수명은 네트워크 환경, 사용 패턴 및 기타 요인에 따라 달라질 수 있습니다.
      • * 테스트는 내부 실험실 조건에서 갤럭시 워치6(BT & LTE) 출시 전 버전을 각각 갤럭시 스마트폰에 페어링하여 진행했습니다.
        출시 전의 소프트웨어, 갤럭시 워치 마그네틱 고속 충전 USB C 케이블(EP-OR900), 삼성 25W USB C 전원 어댑터(EP-TA800)를 활용하여 측정되었습니다.
        충전 시간은 지역, 설정, 사용 패턴 및 환경 요인에 따라 다르며 실제 결과는 다를 수 있습니다.
      • * 25 W PD 충전기 (EP-TA800)는 별매품입니다.
      • * AOD(Always On Display)를 껐을 경우 최대 40시간 사용이 가능합니다.

      가장 강력한
      갤럭시 워치

      갤럭시 워치6는 업그레이드된 프로세서로 기존보다
      18 % 빨라졌습니다. 아침에 일어나 달리기를 하든, 밤에 잠을 청하든, 언제나 모든 활동을 순발력있게 따라가죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (129)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (130)

      갤럭시 워치6 화면 위에 갤럭시 워치6의 프로세스가 올려져 있습니다. 그런 다음 워치에 맞춰지고 화면에 디지털 워치 페이스가 표시됩니다.

      * 갤럭시 워치5와 비교한 결과입니다.

      * AOD(Always On Display)를 껐을 경우 최대 40시간 사용이 가능합니다.

      자나 깨나
      건강 체크

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (131)

      매일 밤 잠자리에 들 때 갤럭시 워치6를 착용하고 수면의 질을 개선해 보세요.
      내 수면 단계, 수면 점수, 수면 일관성을 모니터링할 수 있을 뿐 아니라,
      이제 워치 화면에서 직접 수면 코칭도 볼 수 있어
      나에게 맞는 팁도 바로 확인할 수 있습니다.

      각 수면 단계에서 소요된 시간이 기록되어 있습니다: 수면 중 깸 35분, 램 수면 1시간 30분, 얕은 수면 4시간 30분, 깊은 수면 55분. 정보는 하단에 그래프로도 표시되어 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (132)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (133)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (134)

      함께 하면 더 좋은

      패브릭 밴드

      가볍고 부드러워
      잠잘 때 착용하기 좋습니다.

      더 알아보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (137)

      피부 온도로 예측하는
      생리 주기

      Nature Cycles˚사가 제공하는 생리 주기 예측 소프트웨어
      (의료기기)로 내 몸과 일상의 밸런스를 맞춰 보세요.
      갤럭시 워치6의 적외선 온도 센서가 수면 중 피부 온도를
      체크해 생리일과 배란을 예측할 수 있습니다.

      • * 삼성 헬스 앱 6.23 버전 이상에서만 사용할 수 있습니다.
      • * Android 10.0 이상, 메모리 1.5 GB 이상의 갤럭시 스마트폰이 필요합니다.
      • * 수면 추적 기능은 일반적인 웰빙 및 피트니스 목적으로만 사용됩니다.
        의학적 상태 또는 질병의 감지, 진단, 치료에 사용하도록 제작되지 않았습니다.
        측정된 값은 개인 참조용입니다. 자세한 사항은 의료 전문가의 상담이 필요합니다.
      • * 수면 코칭은 주말 2일을 포함하여 최소 7일의 수면 데이터가 필요합니다.
        해당 데이터는 최근 30일 이내의 데이터이어야 합니다.
      • * 수면 중 혈중 산소 농도 측정 사용 가능 여부는 국가 또는 지역에 따라 다를 수 있습니다.
      • * 수면 모드가 켜져 있으면 거의 보이지 않는 적외선 LED가 활성화됩니다.
      • * 패브릭 밴드는 별매품으로 갤럭시 워치4 이후 출시되는 갤럭시 워치 시리즈와 호환됩니다.

      생리 주기
      (싸이클 트래킹)

      • * 삼성 헬스 앱 버전 6.23.5 이상에서만 사용할 수 있습니다.
      • * 사용 가능 여부는 국가 또는 지역에 따라 다를 수 있습니다.
      • * 생리 주기(싸이클 트래킹) 기능은 식품의약품안전처(MFDS)로부터 생식력진단보조소프트웨어로 수입허가를 받았습니다.
      • * 생리 주기(싸이클 트래킹)는 '의료기기'이며, '사용상의 주의사항'과 '사용방법'을 잘 읽고 사용하십시오.
      • * 생리 주기(싸이클 트래킹)는 18세 이상의 여성을 대상으로 피부 온도의 변화를 분석하여 생리주기를 예측하고,
        이것을 통해 사용자가 임신계획(Planning a Pregnancy)을 세우는데 사용되는 소프트웨어입니다.
        개인적인 참고용이며, 피임의 목적으로 사용하지 마시기 바랍니다.
      • * 이 기능은 18세 미만의 사용자를 대상으로 하지 않습니다.
      • * 예측은 워치 사용(야간 수면 중 4시간, 주 5회 권장), 입력 데이터, 환경 조건 등에 따라 달라질 수 있습니다.
      • * 의료기기 광고심의필 : 32023-I10-29-2303 (유효기간 26.07.28)

      나를 지켜주는
      삼성 헬스 모니터 앱

      심박수, 심전도(ECG) 측정 기능으로 걱정을 덜고 마음의 평화를 찾으세요.
      워치에 내장된 광학 심박 센서(PPG)가 주기적으로 심박수를 측정하여
      심박수가 너무 높거나 낮을 경우 경고 알림을 띄웁니다.
      또한, 불규칙한 심장 리듬을 감지하는 경우,
      워치에 탑재된 심전도(ECG)를 측정하여
      현재 심박을 더 정확하게 확인해볼 것을 알려주죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (138)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (139)

      측정 중인 ECG의 GUI 입니다. 측정 시간은 26초에서 31초로, bpm은 72에서 77로 변경됩니다. 숫자 아래에는 심장 박동을 나타내는 그래프가 움직입니다.

      • * 심박수 모니터링은 일반적인 웰빙 및 피트니스 목적으로만 사용됩니다.
        의학적 상태나 질병 감지, 진단, 치료, 모니터링 또는 관리에 사용하기 위한 것이 아닙니다.
        자세한 사항은 의료 전문가의 상담이 필요합니다.
      • * 불규칙 심장 리듬 알림(IHRN) 기능은 아래 승인된 국가에서 판매중인 갤럭시 워치4 및 이후 출시 모델(갤럭시 핏 시리즈 제외)과 갤럭시 스마트폰에서만 작동합니다.
        - 지원 국가 : 한국, 미국, 아랍에미리트, 인도네시아, 홍콩, 러시아, 조지아, 아제르바이잔, 파나마, 과테말라, 도미니카 공화국, 코스타리카, 에콰도르, 아르헨티나 (2023년 7월 기준)
        - 위 국가 목록에 포함되지 않은 다른 국가나 지역에서는 이 서비스를 사용할 수 없으며, 향후 국가 또는 지역별 규제 절차에 따라 추후 지원될 수 있습니다.
      • * 심방세동(AFib)을 암시하는 불규칙한 심장 박동에 대한 모든 알림을 제공하기 위한 것이 아니며,
        알림이 없다는 것이 질병 진행이 없음을 나타내지 않습니다.
        다른 알려진 부정맥이 있거나 만 22세 미만의 사용자를 대상으로 하지 않습니다.
        사용자는 자격을 갖춘 의료 전문가와 상의하지 않고 기기 분석을 기반으로 해석하거나 임상 조치를 취해서는 안됩니다.

      매일 꾸준히 혈압 체크

      건강은 꾸준한 모니터링과 관리가 필수죠.
      갤럭시 워치6 시리즈로 매일 손목에서 바로 혈압을 측정하고 기록해 보세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (140)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (141)

      체성분 측정을 손목에서

      갤럭시 워치6 시리즈의 BIA 센서로
      체성분을 상세하게 확인할 수 있습니다.
      내 상태에 맞는 목표 체중, 체지방, 근육량을 설정하고
      최적화된 프로그램을 설정해
      나만의 건강 목표를 달성해 보세요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (142)

      • * 일반적인 웰빙 및 피트니스 목적으로만 사용됩니다.
        의학적 상태나 질병 감지, 진단, 치료에 사용하기 위한 것이 아닙니다.
      • * 정확한 혈압 측정을 위해 4주마다 '삼성 헬스 모니터' 앱 및 커프형 혈압계로 보정이 필요합니다.
        Android 10.0 이상의 갤럭시 스마트폰이 필요합니다.
      • * 일반적인 커프형 혈압계를 사용할 때와 마찬가지로, 휴식 상태에서 혈압을 측정해야 하고
        운동 직후나 흡연, 음주 상태에서는 측정하지 않아야 합니다.
      • * 측정된 혈압 이력은 페어링된 스마트폰의 삼성 헬스 모니터 앱에서 확인할 수 있습니다.
      • * 체성분 측정은 삼성 갤럭시 워치4 시리즈 이후 출시되는 갤럭시 워치 모델에서만 지원됩니다.
        이식형 심장 박동기 또는 기타 의료 기기가 신체에 이식되어 있거나 임신한 경우에는 체성분을 측정하지 마십시오.
        만 20세 미만인 경우 체성분 측정 결과가 정확하지 않을 수 있습니다.
        측정된 값은 개인 참조용입니다. 자세한 사항은 의료 전문가의 상담이 필요합니다.
      • * 호환되는 스마트폰 및 사용 가능한 기능은 국가, 지역, 통신사 또는 기기에 따라 다를 수 있습니다.

      삼성 헬스 모니터 앱

      • * 갤럭시 워치6, 갤럭시 워치6 클래식은 의료기기가 아닙니다. (공산품)
      • * '삼성 헬스 모니터' 앱은 '의료기기'이며, '사용상의 주의사항'과 '사용방법'을 잘 읽고 사용하십시오.
      • * '삼성 헬스 모니터' 앱은 식품의약품안전처(MFDS)로부터 휴대형심전도분석소프트웨어로 제조허가를 받았습니다.
        • - 휴대형심전도분석소프트웨어 : 모바일플랫폼(스마트워치)에 장착된 심전도(ECG)센서를 이용하여 측정된 단일유도(Lead I)
          유사 심전도 신호로부터 심방세동 또는 정상박동 존재 여부를 판정함으로써 심전도 신호를 생성, 기록, 저장, 전송, 표시
      • * '삼성 헬스 모니터' 앱은 식품의약품안전처(MFDS)로부터 휴대형혈압분석소프트웨어로 제조허가를 받았습니다.
        • - 휴대형혈압분석소프트웨어 : 모바일플랫폼(스마트워치)에 장착된 광학(PPG)센서를 이용하여 손목 모세혈관의 혈압을
          간접적(비관혈적) 으로 측정하는 모바일 앱으로서 수축기 및 확장기 혈압과 맥박수를 표시
      • * '삼성 헬스 모니터' 앱은 의료기기 소프트웨어(SaMD)로 승인/등록된 국가에서 판매중인 갤럭시 워치와 스마트폰에서만 작동합니다.
        단, 서비스가 제공되지 않는 국가로 여행하는 경우 서비스가 제한될 수 있습니다.
        서비스 국가에 대한 자세한 내용과 최신 업데이트는
        https://www.samsung.com/apps/samsung-health-monitor에서 확인하세요.
      • * 고혈압이나 기타 심장 질환 또는 만 22세 미만의 사용자를 대상으로 하지 않습니다.
      • * 사용자는 자격을 갖춘 의료 전문가와 상의하지 않고 기기 분석을 기반으로 해석하거나 임상 조치를 취해서는 안됩니다.
        자세한 사항은 의료 전문가의 상담이 필요합니다.
      • * 의료기기 광고심의필 : 32023-I10-44-3256 (유효기간 26.11.08) / 32023-I10-29-2305 (유효기간 26.07.28)

      안전 기능으로
      어디서나 안심

      낙상 감지 기능은 넘어짐을 감지하고 즉시 도움이 필요한지 물어봅니다.
      응급 상황일 경우 홈 버튼을 5번 톡톡 누르면
      빠르게 SOS를 보낼 수 있죠.
      구조대가 도착하면 잠금 화면 탭 한 번으로 기록해둔 의료 정보를
      신속하게 확인할 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (143)

      • * 갤럭시 워치6에 최신 Wear OS 버전이 설치되어 있어야 합니다.
      • * 워치에서 낙상 감지 기능을 사용하려면 갤럭시 스마트폰의 갤럭시 웨어러블 앱에서 낙상 감지 기능이 활성화되어 있어야 합니다.
      • * 긴급전화를 사용하기 위해서는 갤럭시 스마트폰과 네트워크 연결 또는 페어링이 되어 있어야 합니다.
      • * 워치, 삼성 헬스 앱 또는 관련 소프트웨어에서 수집한 정보는 의학적 상태나 질병 감지, 진단, 치료에 사용하기 위한 것이 아닙니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (144)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (145)

      갤럭시 워치6 화면에서 진행 막대가 뻗어 나가면서 일일 활동 화면이 나타납니다.

      #워운완
      워치로 운동 완성

      목표를 달성하기 위한 과정과 성과를 하나 하나 기록하세요.
      갤럭시 워치6는 90가지 이상의 운동을 측정할 수 있습니다.
      내 운동 스타일에 맞게 새로운 항목을 만들 수도 있죠.
      운동 시작 버튼 누르는 걸 깜빡했다고요?
      걱정 마세요. 워치는 달리기, 걷기, 자전거 타기와 같은
      주요 운동을 자동으로 인식해 놓치지 않고 기록합니다.
      땀 한 방울도 소중하니까요.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (146)

      갤럭시 워치6 화면에서 진행 막대가 뻗어 나가면서 일일 활동 화면이 나타납니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (147)

      다른 운동 아이콘이 표시됩니다. 가운데에는 자전거 타는 사람의 아이콘이 있습니다. 그 사람은 자전거를 타기 시작하고 오른쪽에서 다른 운동 아이콘이 나타나면 천천히 앞으로 몸을 구부립니다.

      • * 호환되는 스마트폰 및 사용 가능한 기능은 국가, 지역, 연결 기기, 통신사에 따라 다를 수 있습니다.
      • * 설정에서 운동 자동 인식이 켜져 있어야 합니다.
        일부 운동에서는 운동 자동 인식 기능을 사용할 수 없습니다.
      • * '자전거 타기' 자동 인식은 One UI 5 이상의 갤럭시 워치에서 사용할 수 있으며 호환되는 모바일 기기와 페어링해야 합니다.

      개인 맞춤형 심박수 구간으로
      원하는 운동 강도 설정

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (148)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (149)

      나에게 최적화된 심박수 구간에 맞춰 운동해 보세요.
      달리기를 시작하면 갤럭시 워치6가 나의 심폐 능력에 따라
      현재 운동 강도가 어느 수준인지 파악하고
      심박수 구간을 최적화합니다. 목표로 설정한 심박수 구간에 들어갈 때 알림을 받을 수도 있습니다.
      나만의 리듬에 맞춰 움직이고, 달리고, 운동하면서
      내 심박수가 어느 단계에 있는지 수시로 확인해 보세요.

      * 심폐 능력에 따른 심박수 구간의 범위를 업데이트하려면
      4 km/h 이상의 일정한 속도로 야외에서 10분 이상 달리는 것이 필요합니다.

      친구와 함께 운동 챌린지

      친구에게 그룹 운동을 제안하고
      함께하는 즐거움을 느껴보세요.
      운동 목표를 공유하며 서로에게 동기 부여가 될 수 있죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (150)

      * 삼성계정 가입이 필요합니다.

      갤럭시 Z 플립5와 함께
      찰칵

      갤럭시 Z 플립5와 연결하면 워치가 갤럭시 Z 플립5 카메라의
      블루투스 리모콘이 됩니다.
      갤럭시 Z 플립5의 플렉스 모드에서 워치 카메라 컨트롤러를 사용하면
      손목에서 편안하게 카메라 모드를 전환하고
      줌 인/줌 아웃 할 수도 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (151)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (152)

      플렉스 모드의 갤럭시 워치6와 갤럭시 Z 플립5는 동일한 셀카 화면을 표시하면서 카메라 컨트롤러 기능을 설명하고 있습니다.

      • * 갤럭시 Z 플립5는 별매품입니다.
      • * 카메라 컨트롤러는 갤럭시 워치4 이후 출시되는 갤럭시 워치 모델에서 갤럭시 S9 시리즈 이상과 페어링 시 지원됩니다.
        카메라 컨트롤러 줌 기능은 카메라 컨트롤러를 지원하는 One UI 5.1 이상을 실행하는 갤럭시 S 시리즈, 갤럭시 노트 시리즈 및
        갤럭시 Z 시리즈 스마트폰과 페어링된 갤럭시 워치4 시리즈 이후 출시된 갤럭시 워치 모델에서 사용할 수 있습니다.
      • * 플렉스 모드를 지원하는 각도는 75°~115° 입니다.
        각도가 일정범위를 벗어날 경우 제품이 완전히 펼쳐지거나 접힐 수 있습니다.

      시계
      그 이상의 워치

      갤럭시 워치6를 사용하면 스마트폰을 대신해
      문자, 통화, 음악 스트리밍 등을 즐길 수 있습니다.
      하루를 더욱 생산적으로 보내고 싶다면 선택하세요.
      그냥 시계가 아니라, 바로 갤럭시 워치니까요.

      전화 문자 음악 스트리밍

      전화 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (153)

      문자 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (154)

      음악 스트리밍 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (155)

      • * 일부 기능을 사용하려면 LTE 연결이 필요합니다. LTE 연결은 LTE 모델에서만 가능합니다.
      • * 블루투스 모델은 모바일 네트워크에 연결된 호환 모바일 기기와 페어링해야 합니다.
      • * 모든 앱과 서비스가 Wear OS와 호환되는 것은 아닙니다.

      국제 로밍으로
      해외에서도 워치와 함께

      해외를 여행할 때 간편하게 길을 찾으세요.
      국제 로밍을 사용하면 갤럭시 워치6로 지도를 사용할 수 있습니다.
      워치로 바로 전화를 걸고 SOS 문자도 보낼 수 있어,
      문제가 발생하더라도 빠르게 대응할 수 있죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (156)

      Samsung Wallet is available on your watch

      Don't fumble in your pockets or rummage through your bag looking for cash or cards — you've got Samsung Wallet for that. Now you can pay and ride without taking out your phone, because everything you need is just a swipe or tap away.41

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (157)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (158)

      Galaxy Watch6 can be seen, slightly turned to the left, with a credit card next to the screen with an NFC icon to illustrate Samsung Wallet can now be used on the Watch. The screen on the Watch is displaying the text 'Hold near an NFC reader to Pay' at the bottom.

      더 자유롭게,
      손목에서 즐기는 앱

      자주 쓰는 스마트폰 앱을 손목에서 만나보세요.
      카카오톡, 티머니, 유튜브 뮤직 등 다양한 인기 앱을
      워치에서도 편리하게 즐길 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (159)

      * 사용 가능한 애플리케이션은 국가 또는 지역에 따라 다를 수 있습니다.

      더 자유롭게,
      손목에서 즐기는 앱

      자주 쓰는 스마트폰 앱을 손목에서 만나보세요.
      카카오톡, 티머니, 유튜브 뮤직 등 다양한 인기 앱을
      워치에서도 편리하게 즐길 수 있습니다.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (160) 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (161)

      * 사용 가능한 애플리케이션은 국가 또는 지역에 따라 다를 수 있습니다.

      GPS로 손쉽게 길 찾기

      갤럭시 워치6의 GPS를 켜기만 하면 Google 지도에서 내 현재 위치가 어디인지 확인하고, 주변 장소에 대한 정보를 얻을 수 있죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (162)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (163)

      • * GPS 기능은 인터넷 연결이 필요합니다.
        LTE 모델은 이동통신 서비스 가입 시
        스마트폰 없이 단독 사용 가능합니다.
        블루투스 모델은 스마트폰과의 연결이 필요합니다.
      • * 국가에 따라 제공되지 않는 기능이 있을 수 있습니다.

      나만의 스타일로
      개성을 더할 시간

      내 취향에 딱 맞는 갤럭시 워치6를 만들어 보세요.
      다양한 스타일과 소재의 스트랩이 준비되어 있습니다.
      좋아하는 색상, 컴플리케이션, 디자인 또는 최애 사진으로
      워치 페이스를 커스터마이징할 수도 있죠.

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (164)

      * 워치 스트랩의 사용 가능 여부는 국가 또는 지역에 따라 다를 수 있습니다. 추가 워치 스트랩은 별매입니다.

      쉽고 안전한 스마트 스위치

      스마트 스위치는 새로운 갤럭시로 데이터를 전송하는 확실하고 안전한 방법입니다.
      내게 익숙한 모든 앱과 설정을 그대로 가져가세요.

      더 알아보기

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (165)

      • * 블루투스, Wi-Fi 또는 LTE 연결이 필요합니다.
      • * 타사 앱은 별도로 다운로드해야 합니다.
      • * 삼성에서 제공하는 Wear OS를 통해 갤럭시 워치와 호환됩니다.
        최신 버전의 스마트 스위치가 설치된 스마트폰과 연결이 필요합니다.
      • * 전송 가능한 데이터 및 콘텐츠는 OS에 따라 다를 수 있습니다.

      제품 기본 구성품

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (166)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (167)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (168)

      갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (169)

      제품 기본 구성품. 워치, 스포츠 스트랩, 무선 충전기. * 구성 요소는 국가 및 기기 컬러에 따라 다를 수 있습니다.

      갤럭시 워치 비교하기

      • 갤럭시 워치6

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (170)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (171)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (172)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (173)

        더 알아보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (174) 디스플레이 사파이어 크리스탈
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (175) 화면 크기 37.3 mm | 33.3 mm
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (176) 고속 충전1, 2 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (177)
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (178) 적외선 온도 센서 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (179)
        • 소재 아머 알루미늄
        • 배터리 용량
          (typical)3
          425 mAh |
          300 mAh
        • 수면 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (180)
        • 생리 주기
          (싸이클 트래킹)
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (181)
        • 체성분 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (182)
        • GPX 경로 안내 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (183)
        • 방수 / 방진 5ATM+IP68/
          MIL-STD-810H
        • 크기 44 mm | 40 mm
        • 무게 33.3 g | 28.7 g
      • 갤럭시 워치6 클래식

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (184)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (185)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (186)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (187)

        더 알아보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (188) 디스플레이 사파이어 크리스탈
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (189) 화면 크기 37.3 mm | 33.3 mm
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (190) 고속 충전1, 2 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (191)
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (192) 적외선 온도 센서 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (193)
        • 소재 스테인리스 스틸
        • 배터리 용량
          (typical)3
          425 mAh |
          300 mAh
        • 수면 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (194)
        • 생리 주기
          (싸이클 트래킹)
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (195)
        • 체성분 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (196)
        • GPX 경로 안내 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (197)
        • 방수 / 방진 5ATM+IP68/
          MIL-STD-810H
        • 크기 47 mm | 43 mm
        • 무게 59.0 g | 52.0 g
      • 갤럭시 워치5

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (198)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (199)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (200)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (201)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (202)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (203)

        더 알아보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (204) 디스플레이 사파이어 크리스탈
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (205) 화면 크기 34.6 mm | 30.4 mm
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (206) 고속 충전4 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (207)
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (208) 적외선 온도 센서 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (209)
        • 소재 아머 알루미늄
        • 배터리 용량
          (typical)4
          410 mAh |
          284 mAh
        • 수면 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (210)
        • 생리 주기
          (싸이클 트래킹)
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (211)
        • 체성분 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (212)
        • GPX 경로 안내 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (213)
        • 방수 / 방진 5ATM+IP68/
          MIL-STD-810H
        • 크기 44 mm | 40 mm
        • 무게 33.5 g | 28.7 g
      • 갤럭시 워치5 프로

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (214)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (215)

        구매하기

        더 알아보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (216) 디스플레이 사파이어 크리스탈
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (217) 화면 크기 34.6 mm
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (218) 고속 충전5, 6, 8 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (219)
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (220) 적외선 온도 센서 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (221)
        • 소재 티타늄
        • 배터리 용량
          (typical)7
          590 mAh
        • 수면 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (222)
        • 생리 주기
          (싸이클 트래킹)
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (223)
        • 체성분 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (224)
        • GPX 경로 안내 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (225)
        • 방수 / 방진 5ATM+IP68/
          MIL-STD-810H
        • 크기 45 mm
        • 무게 46.5 g
      • 갤럭시 워치4

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (226)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (227)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (228)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (229)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (230)

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (231)

        구매하기

        더 알아보기

        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (232) 디스플레이 Corningc®
          Gorilla® Glass
          with DX+
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (233) 화면 크기 34.6 mm | 30.4 mm
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (234) 고속 충전4 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (235)
        • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (236) 적외선 온도 센서 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (237)
        • 소재 아머 알루미늄
        • 배터리 용량
          (typical)4
          361 mAh |
          247 mAh
        • 수면 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (238)
        • 생리 주기
          (싸이클 트래킹)
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (239)
        • 체성분 측정 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (240)
        • GPX 경로 안내 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (241)
        • 방수 / 방진 5ATM+IP68/
          MIL-STD-810G
        • 크기 44 mm | 40 mm
        • 무게 30.3 g | 25.9 g
      • 1. 테스트는 내부 실험실 조건에서 갤럭시 워치6(BT & LTE) 출시 전 버전을 각각 갤럭시 스마트폰에 페어링하여 진행했습니다. 출시 전의 소프트웨어, 갤럭시 워치 마그네틱 고속 충전 USB C 케이블(EP-OR900), 삼성 25W USB C 전원 어댑터(EP-TA800)를 활용하여 측정되었습니다. 충전 시간은 지역, 설정, 사용 패턴 및 환경 요인에 따라 다르며 실제 결과는 다를 수 있습니다.
      • 2. 25 W PD 충전기 (EP-TA800)는 별매품입니다.
      • 3. 실제 배터리 수명은 네트워크 환경, 사용 패턴 및 기타 요인에 따라 달라질 수 있습니다.
      • 4. 배터리 용량(Typical)은 타사 실험 환경에서 측정되었으며, 여러 샘플값에서 편차를 고려하여 계산된 평균값입니다. 이때, 샘플값은 IEC 61960-3 스탠다드 기준으로 측정되었습니다.
      • 5. 테스트는 당사 실험실 조건에서 22년 6월 갤럭시 워치5의 사전 출시 소프트웨어 버전으로 삼성 휴대폰에 페어링하여 진행했습니다.
        갤럭시 워치 고속 충전독(EP-OR900) 및 25 W PD 충전기(EP-TA800)를 활용하여 측정되었습니다.
      • 6. 충전 시간은 지역, 설정, 사용 패턴 및 환경 요인에 따라 다르며 실제 결과는 다를 수 있습니다.
      • 7. 배터리 용량(Typical)은 타사 실험 환경에서 측정되었으며, 여러 샘플값에서 편차를 고려하여 계산된 평균값입니다. 이때, 샘플값은 IEC 61960-3 스탠다드 기준으로 측정되었습니다.
      • 8. 25 W PD 충전기 (EP-TA800)는 별매품입니다.

      C C

      "); return e.attr("data-swiper-slide-index") || e.attr("data-swiper-slide-index", t), i.cache && (this.virtual.cache[t] = e), e }, appendSlide: function(e) { if ("object" == typeof e && "length" in e) for (var t = 0; t < e.length; t += 1) e[t] && this.virtual.slides.push(e[t]); else this.virtual.slides.push(e); this.virtual.update(!0) }, prependSlide: function(e) { var s, a, t = this.activeIndex, i = t + 1, n = 1; if (Array.isArray(e)) { for (var r = 0; r < e.length; r += 1) e[r] && this.virtual.slides.unshift(e[r]); i = t + e.length, n = e.length } else this.virtual.slides.unshift(e); this.params.virtual.cache && (s = this.virtual.cache, a = {}, Object.keys(s).forEach(function(e) { var t = s[e], i = t.attr("data-swiper-slide-index"); i && t.attr("data-swiper-slide-index", parseInt(i, 10) + 1), a[parseInt(e, 10) + n] = t }), this.virtual.cache = a), this.virtual.update(!0), this.slideTo(i, 0) }, removeSlide: function(e) { if (null != e) { var t = this.activeIndex; if (Array.isArray(e)) for (var i = e.length - 1; 0 <= i; --i) this.virtual.slides.splice(e[i], 1), this.params.virtual.cache && delete this.virtual.cache[e[i]], e[i] < t && --t, t = Math.max(t, 0); else this.virtual.slides.splice(e, 1), this.params.virtual.cache && delete this.virtual.cache[e], e < t && --t, t = Math.max(t, 0); this.virtual.update(!0), this.slideTo(t, 0) } }, removeAllSlides: function() { this.virtual.slides = [], this.params.virtual.cache && (this.virtual.cache = {}), this.virtual.update(!0), this.slideTo(0, 0) } }, y = { name: "virtual", params: { virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, addSlidesBefore: 0, addSlidesAfter: 0 } }, create: function() { U.extend(this, { virtual: { update: w.update.bind(this), appendSlide: w.appendSlide.bind(this), prependSlide: w.prependSlide.bind(this), removeSlide: w.removeSlide.bind(this), removeAllSlides: w.removeAllSlides.bind(this), renderSlide: w.renderSlide.bind(this), slides: this.params.virtual.slides, cache: {} } }) }, on: { beforeInit: function() { var e; this.params.virtual.enabled && (this.classNames.push(this.params.containerModifierClass + "virtual"), U.extend(this.params, e = { watchSlidesProgress: !0 }), U.extend(this.originalParams, e), this.params.initialSlide || this.virtual.update()) }, setTranslate: function() { this.params.virtual.enabled && this.virtual.update() } } }, K = { handle: function(e) { var t = this.rtlTranslate, i = (e = e.originalEvent ? e.originalEvent : e).keyCode || e.charCode; if (!this.allowSlideNext && (this.isHorizontal() && 39 === i || this.isVertical() && 40 === i || 34 === i)) return !1; if (!this.allowSlidePrev && (this.isHorizontal() && 37 === i || this.isVertical() && 38 === i || 33 === i)) return !1; if (!(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || c.activeElement && c.activeElement.nodeName && ("input" === c.activeElement.nodeName.toLowerCase() || "textarea" === c.activeElement.nodeName.toLowerCase()))) { if (this.params.keyboard.onlyInViewport && (33 === i || 34 === i || 37 === i || 39 === i || 38 === i || 40 === i)) { var s = !1; if (0 < this.$el.parents("." + this.params.slideClass).length && 0 === this.$el.parents("." + this.params.slideActiveClass).length) return; var a = X.innerWidth, n = X.innerHeight, r = this.$el.offset(); t && (r.left -= this.$el[0].scrollLeft); for (var o = [ [r.left, r.top], [r.left + this.width, r.top], [r.left, r.top + this.height], [r.left + this.width, r.top + this.height] ], l = 0; l < o.length; l += 1) { var h = o[l]; 0 <= h[0] && h[0] <= a && 0 <= h[1] && h[1] <= n && (s = !0) } if (!s) return } this.isHorizontal() ? (33 !== i && 34 !== i && 37 !== i && 39 !== i || (e.preventDefault ? e.preventDefault() : e.returnValue = !1), (34 !== i && 39 !== i || t) && (33 !== i && 37 !== i || !t) || this.slideNext(), (33 !== i && 37 !== i || t) && (34 !== i && 39 !== i || !t) || this.slidePrev()) : (33 !== i && 34 !== i && 38 !== i && 40 !== i || (e.preventDefault ? e.preventDefault() : e.returnValue = !1), 34 !== i && 40 !== i || this.slideNext(), 33 !== i && 38 !== i || this.slidePrev()), this.emit("keyPress", i) } }, enable: function() { this.keyboard.enabled || (S(c).on("keydown", this.keyboard.handle), this.keyboard.enabled = !0) }, disable: function() { this.keyboard.enabled && (S(c).off("keydown", this.keyboard.handle), this.keyboard.enabled = !1) } }, E = { name: "keyboard", params: { keyboard: { enabled: !1, onlyInViewport: !0 } }, create: function() { U.extend(this, { keyboard: { enabled: !1, enable: K.enable.bind(this), disable: K.disable.bind(this), handle: K.handle.bind(this) } }) }, on: { init: function() { this.params.keyboard.enabled && this.keyboard.enable() }, destroy: function() { this.keyboard.enabled && this.keyboard.disable() } } }; function C() { for (var i, e = [], t = arguments.length; t--;) e[t] = arguments[t]; i = (i = 1 === e.length && e[0].constructor && e[0].constructor === Object ? e[0] : (n = e[0], e[1])) || {}, i = U.extend({}, i), n && !i.el && (i.el = n), d.call(this, i), Object.keys(R).forEach(function(t) { Object.keys(R[t]).forEach(function(e) { C.prototype[e] || (C.prototype[e] = R[t][e]) }) }); var s, a, n, r = this, o = (void 0 === r.modules && (r.modules = {}), Object.keys(r.modules).forEach(function(e) { var t, e = r.modules[e]; e.params && (t = Object.keys(e.params)[0], "object" == typeof(e = e.params[t]) && null !== e && t in i && "enabled" in e && (!0 === i[t] && (i[t] = { enabled: !0 }), "object" != typeof i[t] || "enabled" in i[t] || (i[t].enabled = !0), i[t] || (i[t] = { enabled: !1 }))) }), U.extend({}, $)), l = (r.useModulesParams(o), r.params = U.extend({}, o, j, i), r.originalParams = U.extend({}, r.params), r.passedParams = U.extend({}, i), (r.$ = S)(r.params.el)); if (n = l[0]) return 1 < l.length ? (s = [], l.each(function(e, t) { t = U.extend({}, i, { el: t }); s.push(new C(t)) }), s) : (n.swiper = r, l.data("swiper", r), n && n.shadowRoot && n.shadowRoot.querySelector ? (a = S(n.shadowRoot.querySelector("." + r.params.wrapperClass))).children = function(e) { return l.children(e) } : a = l.children("." + r.params.wrapperClass), U.extend(r, { $el: l, el: n, $wrapperEl: a, wrapperEl: a[0], classNames: [], slides: S(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], isHorizontal: function() { return "horizontal" === r.params.direction }, isVertical: function() { return "vertical" === r.params.direction }, rtl: "rtl" === n.dir.toLowerCase() || "rtl" === l.css("direction"), rtlTranslate: "horizontal" === r.params.direction && ("rtl" === n.dir.toLowerCase() || "rtl" === l.css("direction")), wrongRTL: "-webkit-box" === a.css("display"), activeIndex: 0, realIndex: 0, isBeginning: !0, isEnd: !1, translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: !1, allowSlideNext: r.params.allowSlideNext, allowSlidePrev: r.params.allowSlidePrev, touchEvents: (o = b.pointerEvents ? ["pointerdown", "pointermove", "pointerup"] : ["mousedown", "mousemove", "mouseup"], r.touchEventsTouch = { start: (n = ["touchstart", "touchmove", "touchend", "touchcancel"])[0], move: n[1], end: n[2], cancel: n[3] }, r.touchEventsDesktop = { start: o[0], move: o[1], end: o[2] }, b.touch || !r.params.simulateTouch ? r.touchEventsTouch : r.touchEventsDesktop), touchEventsData: { isTouched: void 0, isMoved: void 0, allowTouchCallbacks: void 0, touchStartTime: void 0, isScrolling: void 0, currentTranslate: void 0, startTranslate: void 0, allowThresholdMove: void 0, formElements: "input, select, option, textarea, button, video", lastClickTime: U.now(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0 }, allowClick: !0, allowTouchMove: r.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, imagesToLoad: [], imagesLoaded: 0 }), r.useModules(), r.params.init && r.init(), r) } var x = { lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [], event: function() { return -1 < X.navigator.userAgent.indexOf("firefox") ? "DOMMouseScroll" : ((t = "onwheel" in c) || ((e = c.createElement("div")).setAttribute("onwheel", "return;"), t = "function" == typeof e.onwheel), (t = !t && c.implementation && c.implementation.hasFeature && !0 !== c.implementation.hasFeature("", "") ? c.implementation.hasFeature("Events.wheel", "3.0") : t) ? "wheel" : "mousewheel"); var e, t }, normalize: function(e) { var t = 0, i = 0, s = 0, a = 0; return "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (t = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (t = i, i = 0), s = 10 * t, a = 10 * i, "deltaY" in e && (a = e.deltaY), "deltaX" in e && (s = e.deltaX), e.shiftKey && !s && (s = a, a = 0), (s || a) && e.deltaMode && (1 === e.deltaMode ? (s *= 40, a *= 40) : (s *= 800, a *= 800)), { spinX: t = s && !t ? s < 1 ? -1 : 1 : t, spinY: i = a && !i ? a < 1 ? -1 : 1 : i, pixelX: s, pixelY: a } }, handleMouseEnter: function() { this.mouseEntered = !0 }, handleMouseLeave: function() { this.mouseEntered = !1 }, handle: function(e) { var t = e, i = this, s = i.params.mousewheel; if (i.params.cssMode && t.preventDefault(), !i.mouseEntered && !s.releaseOnEdges) return !0; t.originalEvent && (t = t.originalEvent); var a = 0, n = i.rtlTranslate ? -1 : 1, r = x.normalize(t); if (s.forceToAxis) if (i.isHorizontal()) { if (!(Math.abs(r.pixelX) > Math.abs(r.pixelY))) return !0; a = r.pixelX * n } else { if (!(Math.abs(r.pixelY) > Math.abs(r.pixelX))) return !0; a = r.pixelY } else a = Math.abs(r.pixelX) > Math.abs(r.pixelY) ? -r.pixelX * n : -r.pixelY; if (0 === a) return !0; if (s.invert && (a = -a), i.params.freeMode) { var o = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a) }, n = i.mousewheel.lastEventBeforeSnap, r = n && o.time < n.time + 500 && o.delta <= n.delta && o.direction === n.direction; if (!r) { i.mousewheel.lastEventBeforeSnap = void 0, i.params.loop && i.loopFix(); var l, h, n = i.getTranslate() + a * s.sensitivity, s = i.isBeginning, d = i.isEnd; if ((n = n >= i.minTranslate() ? i.minTranslate() : n) <= i.maxTranslate() && (n = i.maxTranslate()), i.setTransition(0), i.setTranslate(n), i.updateProgress(), i.updateActiveIndex(), i.updateSlidesClasses(), (!s && i.isBeginning || !d && i.isEnd) && i.updateSlidesClasses(), i.params.freeModeSticky && (clearTimeout(i.mousewheel.timeout), i.mousewheel.timeout = void 0, 15 <= (l = i.mousewheel.recentWheelEvents).length && l.shift(), s = l.length ? l[l.length - 1] : void 0, d = l[0], l.push(o), s && (o.delta > s.delta || o.direction !== s.direction) ? l.splice(0) : 15 <= l.length && o.time - d.time < 500 && 1 <= d.delta - o.delta && o.delta <= 6 && (h = 0 < a ? .8 : .2, i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.mousewheel.timeout = U.nextTick(function() { i.slideToClosest(i.params.speed, !0, void 0, h) }, 0)), i.mousewheel.timeout || (i.mousewheel.timeout = U.nextTick(function() { i.mousewheel.lastEventBeforeSnap = o, l.splice(0), i.slideToClosest(i.params.speed, !0, void 0, .5) }, 500))), r || i.emit("scroll", t), i.params.autoplay && i.params.autoplayDisableOnInteraction && i.autoplay.stop(), n === i.minTranslate() || n === i.maxTranslate()) return !0 } } else { s = { time: U.now(), delta: Math.abs(a), direction: Math.sign(a), raw: e }, d = i.mousewheel.recentWheelEvents, r = (2 <= d.length && d.shift(), d.length ? d[d.length - 1] : void 0); if (d.push(s), (!r || s.direction !== r.direction || s.delta > r.delta) && i.mousewheel.animateSlider(s), i.mousewheel.releaseScroll(s)) return !0 } return t.preventDefault ? t.preventDefault() : t.returnValue = !1, !1 }, animateSlider: function(e) { return 6 <= e.delta && U.now() - this.mousewheel.lastScrollTime < 60 || (e.direction < 0 ? this.isEnd && !this.params.loop || this.animating || (this.slideNext(), this.emit("scroll", e.raw)) : this.isBeginning && !this.params.loop || this.animating || (this.slidePrev(), this.emit("scroll", e.raw)), this.mousewheel.lastScrollTime = (new X.Date).getTime(), !1) }, releaseScroll: function(e) { var t = this.params.mousewheel; if (e.direction < 0) { if (this.isEnd && !this.params.loop && t.releaseOnEdges) return !0 } else if (this.isBeginning && !this.params.loop && t.releaseOnEdges) return !0; return !1 }, enable: function() { var e = x.event(); if (this.params.cssMode) return this.wrapperEl.removeEventListener(e, this.mousewheel.handle), !0; if (!e) return !1; if (this.mousewheel.enabled) return !1; var t = this.$el; return (t = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : t).on("mouseenter", this.mousewheel.handleMouseEnter), t.on("mouseleave", this.mousewheel.handleMouseLeave), t.on(e, this.mousewheel.handle), this.mousewheel.enabled = !0 }, disable: function() { var e = x.event(); if (this.params.cssMode) return this.wrapperEl.addEventListener(e, this.mousewheel.handle), !0; if (!e) return !1; if (!this.mousewheel.enabled) return !1; var t = this.$el; return (t = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : t).off(e, this.mousewheel.handle), !(this.mousewheel.enabled = !1) } }, L = { update: function() { var e, t, i = this.params.navigation; this.params.loop || (e = (t = this.navigation).$nextEl, (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? t.addClass(i.disabledClass) : t.removeClass(i.disabledClass), t[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass)), e && 0 < e.length && (this.isEnd ? e.addClass(i.disabledClass) : e.removeClass(i.disabledClass), e[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](i.lockClass))) }, onPrevClick: function(e) { e.preventDefault(), this.isBeginning && !this.params.loop || this.slidePrev() }, onNextClick: function(e) { e.preventDefault(), this.isEnd && !this.params.loop || this.slideNext() }, init: function() { var e, t, i = this.params.navigation; (i.nextEl || i.prevEl) && (i.nextEl && (e = S(i.nextEl), this.params.uniqueNavElements && "string" == typeof i.nextEl && 1 < e.length && 1 === this.$el.find(i.nextEl).length && (e = this.$el.find(i.nextEl))), i.prevEl && (t = S(i.prevEl), this.params.uniqueNavElements && "string" == typeof i.prevEl && 1 < t.length && 1 === this.$el.find(i.prevEl).length && (t = this.$el.find(i.prevEl))), e && 0 < e.length && e.on("click", this.navigation.onNextClick), t && 0 < t.length && t.on("click", this.navigation.onPrevClick), U.extend(this.navigation, { $nextEl: e, nextEl: e && e[0], $prevEl: t, prevEl: t && t[0] })) }, destroy: function() { var e = this.navigation, t = e.$nextEl, e = e.$prevEl; t && t.length && (t.off("click", this.navigation.onNextClick), t.removeClass(this.params.navigation.disabledClass)), e && e.length && (e.off("click", this.navigation.onPrevClick), e.removeClass(this.params.navigation.disabledClass)) } }, A = { update: function() { var e = this.rtl, s = this.params.pagination; if (s.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var a, t = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, n = this.params.loop ? Math.ceil((t - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length; if (this.params.loop ? ((a = Math.ceil((this.activeIndex - this.loopedSlides) / this.params.slidesPerGroup)) > t - 1 - 2 * this.loopedSlides && (a -= t - 2 * this.loopedSlides), n - 1 < a && (a -= n), a < 0 && "bullets" !== this.params.paginationType && (a = n + a)) : a = void 0 !== this.snapIndex ? this.snapIndex : this.activeIndex || 0, "bullets" === s.type && this.pagination.bullets && 0 < this.pagination.bullets.length) { var r, o, l, h = this.pagination.bullets; if (s.dynamicBullets && (this.pagination.bulletSize = h.eq(0)[this.isHorizontal() ? "outerWidth" : "outerHeight"](!0), i.css(this.isHorizontal() ? "width" : "height", this.pagination.bulletSize * (s.dynamicMainBullets + 4) + "px"), 1 < s.dynamicMainBullets && void 0 !== this.previousIndex && (this.pagination.dynamicBulletIndex += a - this.previousIndex, this.pagination.dynamicBulletIndex > s.dynamicMainBullets - 1 ? this.pagination.dynamicBulletIndex = s.dynamicMainBullets - 1 : this.pagination.dynamicBulletIndex < 0 && (this.pagination.dynamicBulletIndex = 0)), r = a - this.pagination.dynamicBulletIndex, l = ((o = r + (Math.min(h.length, s.dynamicMainBullets) - 1)) + r) / 2), h.removeClass(s.bulletActiveClass + " " + s.bulletActiveClass + "-next " + s.bulletActiveClass + "-next-next " + s.bulletActiveClass + "-prev " + s.bulletActiveClass + "-prev-prev " + s.bulletActiveClass + "-main"), 1 < i.length) h.each(function(e, t) { var t = S(t), i = t.index(); i === a && t.addClass(s.bulletActiveClass), s.dynamicBullets && (r <= i && i <= o && t.addClass(s.bulletActiveClass + "-main"), i === r && t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), i === o && t.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next")) }); else { var t = h.eq(a), d = t.index(); if (t.addClass(s.bulletActiveClass), s.dynamicBullets) { for (var t = h.eq(r), c = h.eq(o), u = r; u <= o; u += 1) h.eq(u).addClass(s.bulletActiveClass + "-main"); if (this.params.loop) if (d >= h.length - s.dynamicMainBullets) { for (var p = s.dynamicMainBullets; 0 <= p; --p) h.eq(h.length - p).addClass(s.bulletActiveClass + "-main"); h.eq(h.length - s.dynamicMainBullets - 1).addClass(s.bulletActiveClass + "-prev") } else t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next"); else t.prev().addClass(s.bulletActiveClass + "-prev").prev().addClass(s.bulletActiveClass + "-prev-prev"), c.next().addClass(s.bulletActiveClass + "-next").next().addClass(s.bulletActiveClass + "-next-next") } } s.dynamicBullets && (d = Math.min(h.length, s.dynamicMainBullets + 4), t = (this.pagination.bulletSize * d - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize, c = e ? "right" : "left", h.css(this.isHorizontal() ? c : "top", t + "px")) } "fraction" === s.type && (i.find("." + s.currentClass).text(s.formatFractionCurrent(a + 1)), i.find("." + s.totalClass).text(s.formatFractionTotal(n))), "progressbar" === s.type && (d = s.progressbarOpposite ? this.isHorizontal() ? "vertical" : "horizontal" : this.isHorizontal() ? "horizontal" : "vertical", l = (a + 1) / n, c = e = 1, "horizontal" == d ? e = l : c = l, i.find("." + s.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + e + ") scaleY(" + c + ")").transition(this.params.speed)), "custom" === s.type && s.renderCustom ? (i.html(s.renderCustom(this, a + 1, n)), this.emit("paginationRender", this, i[0])) : this.emit("paginationUpdate", this, i[0]), i[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](s.lockClass) } }, render: function() { var e = this.params.pagination; if (e.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length) { var t = (this.virtual && this.params.virtual.enabled ? this.virtual : this).slides.length, i = this.pagination.$el, s = ""; if ("bullets" === e.type) { for (var a = this.params.loop ? Math.ceil((t - 2 * this.loopedSlides) / this.params.slidesPerGroup) : this.snapGrid.length, n = 0; n < a; n += 1) e.renderBullet ? s += e.renderBullet.call(this, n, e.bulletClass) : s += "<" + e.bulletElement + ' class="' + e.bulletClass + '">' + e.bulletElement + ">"; i.html(s), this.pagination.bullets = i.find("." + e.bulletClass) } "fraction" === e.type && (s = e.renderFraction ? e.renderFraction.call(this, e.currentClass, e.totalClass) : ' / ', i.html(s)), "progressbar" === e.type && (s = e.renderProgressbar ? e.renderProgressbar.call(this, e.progressbarFillClass) : '', i.html(s)), "custom" !== e.type && this.emit("paginationRender", this.pagination.$el[0]) } }, init: function() { var e, t = this, i = t.params.pagination; i.el && 0 !== (e = S(i.el)).length && (t.params.uniqueNavElements && "string" == typeof i.el && 1 < e.length && 1 === t.$el.find(i.el).length && (e = t.$el.find(i.el)), "bullets" === i.type && i.clickable && e.addClass(i.clickableClass), e.addClass(i.modifierClass + i.type), "bullets" === i.type && i.dynamicBullets && (e.addClass("" + i.modifierClass + i.type + "-dynamic"), t.pagination.dynamicBulletIndex = 0, i.dynamicMainBullets < 1 && (i.dynamicMainBullets = 1)), "progressbar" === i.type && i.progressbarOpposite && e.addClass(i.progressbarOppositeClass), i.clickable && e.on("click", "." + i.bulletClass, function(e) { e.preventDefault(); e = S(this).index() * t.params.slidesPerGroup; t.params.loop && (e += t.loopedSlides), t.slideTo(e) }), U.extend(t.pagination, { $el: e, el: e[0] })) }, destroy: function() { var e, t = this.params.pagination; t.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length && ((e = this.pagination.$el).removeClass(t.hiddenClass), e.removeClass(t.modifierClass + t.type), this.pagination.bullets && this.pagination.bullets.removeClass(t.bulletActiveClass), t.clickable && e.off("click", "." + t.bulletClass)) } }, k = { setTranslate: function() { var e, t, i, s, a, n, r, o; this.params.scrollbar.el && this.scrollbar.el && (n = this.scrollbar, e = this.rtlTranslate, o = this.progress, t = n.dragSize, i = n.trackSize, s = n.$dragEl, a = n.$el, n = this.params.scrollbar, o = (i - (r = t)) * o, e ? 0 < (o = -o) ? (r = t - o, o = 0) : i < -o + t && (r = i + o) : o < 0 ? (r = t + o, o = 0) : i < o + t && (r = i - o), this.isHorizontal() ? (s.transform("translate3d(" + o + "px, 0, 0)"), s[0].style.width = r + "px") : (s.transform("translate3d(0px, " + o + "px, 0)"), s[0].style.height = r + "px"), n.hide && (clearTimeout(this.scrollbar.timeout), a[0].style.opacity = 1, this.scrollbar.timeout = setTimeout(function() { a[0].style.opacity = 0, a.transition(400) }, 1e3))) }, setTransition: function(e) { this.params.scrollbar.el && this.scrollbar.el && this.scrollbar.$dragEl.transition(e) }, updateSize: function() { var e, t, i, s, a, n, r; this.params.scrollbar.el && this.scrollbar.el && (t = (e = this.scrollbar).$dragEl, i = e.$el, t[0].style.width = "", t[0].style.height = "", s = this.isHorizontal() ? i[0].offsetWidth : i[0].offsetHeight, n = (a = this.size / this.virtualSize) * (s / this.size), r = "auto" === this.params.scrollbar.dragSize ? s * a : parseInt(this.params.scrollbar.dragSize, 10), this.isHorizontal() ? t[0].style.width = r + "px" : t[0].style.height = r + "px", i[0].style.display = 1 <= a ? "none" : "", this.params.scrollbar.hide && (i[0].style.opacity = 0), U.extend(e, { trackSize: s, divider: a, moveDivider: n, dragSize: r }), e.$el[this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass"](this.params.scrollbar.lockClass)) }, getPointerPosition: function(e) { return this.isHorizontal() ? ("touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0] : e).clientX : ("touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0] : e).clientY }, setDragPosition: function(e) { var t = this.scrollbar, i = this.rtlTranslate, s = t.$el, a = t.dragSize, n = t.trackSize, r = t.dragStartPos, t = (t.getPointerPosition(e) - s.offset()[this.isHorizontal() ? "left" : "top"] - (null !== r ? r : a / 2)) / (n - a), e = (t = Math.max(Math.min(t, 1), 0), i && (t = 1 - t), this.minTranslate() + (this.maxTranslate() - this.minTranslate()) * t); this.updateProgress(e), this.setTranslate(e), this.updateActiveIndex(), this.updateSlidesClasses() }, onDragStart: function(e) { var t = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el, n = i.$dragEl; this.scrollbar.isTouched = !0, this.scrollbar.dragStartPos = e.target === n[0] || e.target === n ? i.getPointerPosition(e) - e.target.getBoundingClientRect()[this.isHorizontal() ? "left" : "top"] : null, e.preventDefault(), e.stopPropagation(), s.transition(100), n.transition(100), i.setDragPosition(e), clearTimeout(this.scrollbar.dragTimeout), a.transition(0), t.hide && a.css("opacity", 1), this.params.cssMode && this.$wrapperEl.css("scroll-snap-type", "none"), this.emit("scrollbarDragStart", e) }, onDragMove: function(e) { var t = this.scrollbar, i = this.$wrapperEl, s = t.$el, a = t.$dragEl; this.scrollbar.isTouched && (e.preventDefault ? e.preventDefault() : e.returnValue = !1, t.setDragPosition(e), i.transition(0), s.transition(0), a.transition(0), this.emit("scrollbarDragMove", e)) }, onDragEnd: function(e) { var t = this.params.scrollbar, i = this.scrollbar, s = this.$wrapperEl, a = i.$el; this.scrollbar.isTouched && (this.scrollbar.isTouched = !1, this.params.cssMode && (this.$wrapperEl.css("scroll-snap-type", ""), s.transition("")), t.hide && (clearTimeout(this.scrollbar.dragTimeout), this.scrollbar.dragTimeout = U.nextTick(function() { a.css("opacity", 0), a.transition(400) }, 1e3)), this.emit("scrollbarDragEnd", e), t.snapOnRelease && this.slideToClosest()) }, enableDraggable: function() { var e, t, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, e = this.touchEventsTouch, t = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!b.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!b.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, b.touch ? (i.addEventListener(e.start, this.scrollbar.onDragStart, s), i.addEventListener(e.move, this.scrollbar.onDragMove, s), i.addEventListener(e.end, this.scrollbar.onDragEnd, a)) : (i.addEventListener(t.start, this.scrollbar.onDragStart, s), c.addEventListener(t.move, this.scrollbar.onDragMove, s), c.addEventListener(t.end, this.scrollbar.onDragEnd, a))) }, disableDraggable: function() { var e, t, i, s, a; this.params.scrollbar.el && (i = this.scrollbar, e = this.touchEventsTouch, t = this.touchEventsDesktop, a = this.params, i = i.$el[0], s = !(!b.passiveListener || !a.passiveListeners) && { passive: !1, capture: !1 }, a = !(!b.passiveListener || !a.passiveListeners) && { passive: !0, capture: !1 }, b.touch ? (i.removeEventListener(e.start, this.scrollbar.onDragStart, s), i.removeEventListener(e.move, this.scrollbar.onDragMove, s), i.removeEventListener(e.end, this.scrollbar.onDragEnd, a)) : (i.removeEventListener(t.start, this.scrollbar.onDragStart, s), c.removeEventListener(t.move, this.scrollbar.onDragMove, s), c.removeEventListener(t.end, this.scrollbar.onDragEnd, a))) }, init: function() { var e, t, i, s; this.params.scrollbar.el && (e = this.scrollbar, s = this.$el, i = S((t = this.params.scrollbar).el), 0 === (s = (i = this.params.uniqueNavElements && "string" == typeof t.el && 1 < i.length && 1 === s.find(t.el).length ? s.find(t.el) : i).find("." + this.params.scrollbar.dragClass)).length && (s = S('

      '), i.append(s)), U.extend(e, { $el: i, el: i[0], $dragEl: s, dragEl: s[0] }), t.draggable && e.enableDraggable()) }, destroy: function() { this.scrollbar.disableDraggable() } }, Q = { setTransform: function(e, t) { var i = this.rtl, e = S(e), i = i ? -1 : 1, s = e.attr("data-swiper-parallax") || "0", a = e.attr("data-swiper-parallax-x"), n = e.attr("data-swiper-parallax-y"), r = e.attr("data-swiper-parallax-scale"), o = e.attr("data-swiper-parallax-opacity"); a || n ? (a = a || "0", n = n || "0") : this.isHorizontal() ? (a = s, n = "0") : (n = s, a = "0"), a = 0 <= a.indexOf("%") ? parseInt(a, 10) * t * i + "%" : a * t * i + "px", n = 0 <= n.indexOf("%") ? parseInt(n, 10) * t + "%" : n * t + "px", null != o && (s = o - (o - 1) * (1 - Math.abs(t)), e[0].style.opacity = s), null == r ? e.transform("translate3d(" + a + ", " + n + ", 0px)") : (i = r - (r - 1) * (1 - Math.abs(t)), e.transform("translate3d(" + a + ", " + n + ", 0px) scale(" + i + ")")) }, setTranslate: function() { var s = this, e = s.$el, t = s.slides, a = s.progress, n = s.snapGrid; e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(e, t) { s.parallax.setTransform(t, a) }), t.each(function(e, t) { var i = t.progress; 1 < s.params.slidesPerGroup && "auto" !== s.params.slidesPerView && (i += Math.ceil(e / 2) - a * (n.length - 1)), i = Math.min(Math.max(i, -1), 1), S(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(e, t) { s.parallax.setTransform(t, i) }) }) }, setTransition: function(s) { void 0 === s && (s = this.params.speed), this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(e, t) { var t = S(t), i = parseInt(t.attr("data-swiper-parallax-duration"), 10) || s; 0 === s && (i = 0), t.transition(i) }) } }, J = { getDistanceBetweenTouches: function(e) { if (e.targetTouches.length < 2) return 1; var t = e.targetTouches[0].pageX, i = e.targetTouches[0].pageY, s = e.targetTouches[1].pageX, e = e.targetTouches[1].pageY; return Math.sqrt(Math.pow(s - t, 2) + Math.pow(e - i, 2)) }, onGestureStart: function(e) { var t = this.params.zoom, i = this.zoom, s = i.gesture; if (i.fakeGestureTouched = !1, i.fakeGestureMoved = !1, !b.gestures) { if ("touchstart" !== e.type || "touchstart" === e.type && e.targetTouches.length < 2) return; i.fakeGestureTouched = !0, s.scaleStart = J.getDistanceBetweenTouches(e) } s.$slideEl && s.$slideEl.length || (s.$slideEl = S(e.target).closest(".swiper-slide"), 0 === s.$slideEl.length && (s.$slideEl = this.slides.eq(this.activeIndex)), s.$imageEl = s.$slideEl.find("img, svg, canvas"), s.$imageWrapEl = s.$imageEl.parent("." + t.containerClass), s.maxRatio = s.$imageWrapEl.attr("data-swiper-zoom") || t.maxRatio, 0 !== s.$imageWrapEl.length) ? (s.$imageEl.transition(0), this.zoom.isScaling = !0) : s.$imageEl = void 0 }, onGestureChange: function(e) { var t = this.params.zoom, i = this.zoom, s = i.gesture; if (!b.gestures) { if ("touchmove" !== e.type || "touchmove" === e.type && e.targetTouches.length < 2) return; i.fakeGestureMoved = !0, s.scaleMove = J.getDistanceBetweenTouches(e) } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = b.gestures ? e.scale * i.currentScale : s.scaleMove / s.scaleStart * i.currentScale, i.scale > s.maxRatio && (i.scale = s.maxRatio - 1 + Math.pow(i.scale - s.maxRatio + 1, .5)), i.scale < t.minRatio && (i.scale = t.minRatio + 1 - Math.pow(t.minRatio - i.scale + 1, .5)), s.$imageEl.transform("translate3d(0,0,0) scale(" + i.scale + ")")) }, onGestureEnd: function(e) { var t = this.params.zoom, i = this.zoom, s = i.gesture; if (!b.gestures) { if (!i.fakeGestureTouched || !i.fakeGestureMoved) return; if ("touchend" !== e.type || "touchend" === e.type && e.changedTouches.length < 2 && !o.android) return; i.fakeGestureTouched = !1, i.fakeGestureMoved = !1 } s.$imageEl && 0 !== s.$imageEl.length && (i.scale = Math.max(Math.min(i.scale, s.maxRatio), t.minRatio), s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale(" + i.scale + ")"), i.currentScale = i.scale, i.isScaling = !1, 1 === i.scale && (s.$slideEl = void 0)) }, onTouchStart: function(e) { var t = this.zoom, i = t.gesture, t = t.image; i.$imageEl && 0 !== i.$imageEl.length && !t.isTouched && (o.android && e.preventDefault(), t.isTouched = !0, t.touchesStart.x = ("touchstart" === e.type ? e.targetTouches[0] : e).pageX, t.touchesStart.y = ("touchstart" === e.type ? e.targetTouches[0] : e).pageY) }, onTouchMove: function(e) { var t = this.zoom, i = t.gesture, s = t.image, a = t.velocity; if (i.$imageEl && 0 !== i.$imageEl.length && (this.allowClick = !1, s.isTouched && i.$slideEl)) { s.isMoved || (s.width = i.$imageEl[0].offsetWidth, s.height = i.$imageEl[0].offsetHeight, s.startX = U.getTranslate(i.$imageWrapEl[0], "x") || 0, s.startY = U.getTranslate(i.$imageWrapEl[0], "y") || 0, i.slideWidth = i.$slideEl[0].offsetWidth, i.slideHeight = i.$slideEl[0].offsetHeight, i.$imageWrapEl.transition(0), this.rtl && (s.startX = -s.startX, s.startY = -s.startY)); var n = s.width * t.scale, r = s.height * t.scale; if (!(n < i.slideWidth && r < i.slideHeight)) { if (s.minX = Math.min(i.slideWidth / 2 - n / 2, 0), s.maxX = -s.minX, s.minY = Math.min(i.slideHeight / 2 - r / 2, 0), s.maxY = -s.minY, s.touchesCurrent.x = ("touchmove" === e.type ? e.targetTouches[0] : e).pageX, s.touchesCurrent.y = ("touchmove" === e.type ? e.targetTouches[0] : e).pageY, !s.isMoved && !t.isScaling) { if (this.isHorizontal() && (Math.floor(s.minX) === Math.floor(s.startX) && s.touchesCurrent.x < s.touchesStart.x || Math.floor(s.maxX) === Math.floor(s.startX) && s.touchesCurrent.x > s.touchesStart.x)) return void(s.isTouched = !1); if (!this.isHorizontal() && (Math.floor(s.minY) === Math.floor(s.startY) && s.touchesCurrent.y < s.touchesStart.y || Math.floor(s.maxY) === Math.floor(s.startY) && s.touchesCurrent.y > s.touchesStart.y)) return void(s.isTouched = !1) } e.preventDefault(), e.stopPropagation(), s.isMoved = !0, s.currentX = s.touchesCurrent.x - s.touchesStart.x + s.startX, s.currentY = s.touchesCurrent.y - s.touchesStart.y + s.startY, s.currentX < s.minX && (s.currentX = s.minX + 1 - Math.pow(s.minX - s.currentX + 1, .8)), s.currentX > s.maxX && (s.currentX = s.maxX - 1 + Math.pow(s.currentX - s.maxX + 1, .8)), s.currentY < s.minY && (s.currentY = s.minY + 1 - Math.pow(s.minY - s.currentY + 1, .8)), s.currentY > s.maxY && (s.currentY = s.maxY - 1 + Math.pow(s.currentY - s.maxY + 1, .8)), a.prevPositionX || (a.prevPositionX = s.touchesCurrent.x), a.prevPositionY || (a.prevPositionY = s.touchesCurrent.y), a.prevTime || (a.prevTime = Date.now()), a.x = (s.touchesCurrent.x - a.prevPositionX) / (Date.now() - a.prevTime) / 2, a.y = (s.touchesCurrent.y - a.prevPositionY) / (Date.now() - a.prevTime) / 2, Math.abs(s.touchesCurrent.x - a.prevPositionX) < 2 && (a.x = 0), Math.abs(s.touchesCurrent.y - a.prevPositionY) < 2 && (a.y = 0), a.prevPositionX = s.touchesCurrent.x, a.prevPositionY = s.touchesCurrent.y, a.prevTime = Date.now(), i.$imageWrapEl.transform("translate3d(" + s.currentX + "px, " + s.currentY + "px,0)") } } }, onTouchEnd: function() { var e = this.zoom, t = e.gesture, i = e.image, s = e.velocity; if (t.$imageEl && 0 !== t.$imageEl.length) { if (!i.isTouched || !i.isMoved) return i.isTouched = !1, void(i.isMoved = !1); i.isTouched = !1, i.isMoved = !1; var a = 300, n = 300, r = s.x * a, r = i.currentX + r, o = s.y * n, o = i.currentY + o, s = (0 !== s.x && (a = Math.abs((r - i.currentX) / s.x)), 0 !== s.y && (n = Math.abs((o - i.currentY) / s.y)), Math.max(a, n)), a = (i.currentX = r, i.currentY = o, i.width * e.scale), n = i.height * e.scale; i.minX = Math.min(t.slideWidth / 2 - a / 2, 0), i.maxX = -i.minX, i.minY = Math.min(t.slideHeight / 2 - n / 2, 0), i.maxY = -i.minY, i.currentX = Math.max(Math.min(i.currentX, i.maxX), i.minX), i.currentY = Math.max(Math.min(i.currentY, i.maxY), i.minY), t.$imageWrapEl.transition(s).transform("translate3d(" + i.currentX + "px, " + i.currentY + "px,0)") } }, onTransitionEnd: function() { var e = this.zoom, t = e.gesture; t.$slideEl && this.previousIndex !== this.activeIndex && (t.$imageEl.transform("translate3d(0,0,0) scale(1)"), t.$imageWrapEl.transform("translate3d(0,0,0)"), e.scale = 1, e.currentScale = 1, t.$slideEl = void 0, t.$imageEl = void 0, t.$imageWrapEl = void 0) }, toggle: function(e) { var t = this.zoom; t.scale && 1 !== t.scale ? t.out() : t.in(e) }, in: function(e) { var t, i, s, a, n = this.zoom, r = this.params.zoom, o = n.gesture, l = n.image; o.$slideEl || (o.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex), o.$imageEl = o.$slideEl.find("img, svg, canvas"), o.$imageWrapEl = o.$imageEl.parent("." + r.containerClass)), o.$imageEl && 0 !== o.$imageEl.length && (o.$slideEl.addClass("" + r.zoomedSlideClass), l = void 0 === l.touchesStart.x && e ? (t = ("touchend" === e.type ? e.changedTouches[0] : e).pageX, ("touchend" === e.type ? e.changedTouches[0] : e).pageY) : (t = l.touchesStart.x, l.touchesStart.y), n.scale = o.$imageWrapEl.attr("data-swiper-zoom") || r.maxRatio, n.currentScale = o.$imageWrapEl.attr("data-swiper-zoom") || r.maxRatio, e ? (r = o.$slideEl[0].offsetWidth, e = o.$slideEl[0].offsetHeight, t = o.$slideEl.offset().left + r / 2 - t, l = o.$slideEl.offset().top + e / 2 - l, s = o.$imageEl[0].offsetWidth, a = o.$imageEl[0].offsetHeight, s = s * n.scale, a = a * n.scale, s = -(r = Math.min(r / 2 - s / 2, 0)), a = -(e = Math.min(e / 2 - a / 2, 0)), s < (i = (i = t * n.scale) < r ? r : i) && (i = s), a < (s = (s = l * n.scale) < e ? e : s) && (s = a)) : s = i = 0, o.$imageWrapEl.transition(300).transform("translate3d(" + i + "px, " + s + "px,0)"), o.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + n.scale + ")")) }, out: function() { var e = this.zoom, t = this.params.zoom, i = e.gesture; i.$slideEl || (i.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex), i.$imageEl = i.$slideEl.find("img, svg, canvas"), i.$imageWrapEl = i.$imageEl.parent("." + t.containerClass)), i.$imageEl && 0 !== i.$imageEl.length && (e.scale = 1, e.currentScale = 1, i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"), i.$slideEl.removeClass("" + t.zoomedSlideClass), i.$slideEl = void 0) }, enable: function() { var e, t, i = this.zoom; i.enabled || (i.enabled = !0, e = !("touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, t = !b.passiveListener || { passive: !1, capture: !0 }, b.gestures ? (this.$wrapperEl.on("gesturestart", ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.on("gesturechange", ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.on("gestureend", ".swiper-slide", i.onGestureEnd, e)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.on(this.touchEvents.start, ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.on(this.touchEvents.move, ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.on(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, e), this.touchEvents.cancel && this.$wrapperEl.on(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, e)), this.$wrapperEl.on(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, t)) }, disable: function() { var e, t, i = this.zoom; i.enabled && (this.zoom.enabled = !1, e = !("touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners) && { passive: !0, capture: !1 }, t = !b.passiveListener || { passive: !1, capture: !0 }, b.gestures ? (this.$wrapperEl.off("gesturestart", ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.off("gesturechange", ".swiper-slide", i.onGestureChange, e), this.$wrapperEl.off("gestureend", ".swiper-slide", i.onGestureEnd, e)) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.off(this.touchEvents.start, ".swiper-slide", i.onGestureStart, e), this.$wrapperEl.off(this.touchEvents.move, ".swiper-slide", i.onGestureChange, t), this.$wrapperEl.off(this.touchEvents.end, ".swiper-slide", i.onGestureEnd, e), this.touchEvents.cancel && this.$wrapperEl.off(this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, e)), this.$wrapperEl.off(this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, t)) } }, Z = { loadInSlide: function(e, o) { void 0 === o && (o = !0); var l, h = this, d = h.params.lazy; void 0 !== e && 0 !== h.slides.length && (e = (l = h.virtual && h.params.virtual.enabled ? h.$wrapperEl.children("." + h.params.slideClass + '[data-swiper-slide-index="' + e + '"]') : h.slides.eq(e)).find("." + d.elementClass + ":not(." + d.loadedClass + "):not(." + d.loadingClass + ")"), 0 !== (e = !l.hasClass(d.elementClass) || l.hasClass(d.loadedClass) || l.hasClass(d.loadingClass) ? e : e.add(l[0])).length && e.each(function(e, t) { var i = S(t), s = (i.addClass(d.loadingClass), i.attr("data-background")), a = i.attr("data-src"), n = i.attr("data-srcset"), r = i.attr("data-sizes"); h.loadImage(i[0], a || s, n, r, !1, function() { var e, t; null == h || !h || h && !h.params || h.destroyed || (s ? (i.css("background-image", 'url("' + s + '")'), i.removeAttr("data-background")) : (n && (i.attr("srcset", n), i.removeAttr("data-srcset")), r && (i.attr("sizes", r), i.removeAttr("data-sizes")), a && (i.attr("src", a), i.removeAttr("data-src"))), i.addClass(d.loadedClass).removeClass(d.loadingClass), l.find("." + d.preloaderClass).remove(), h.params.loop && o && (e = l.attr("data-swiper-slide-index"), l.hasClass(h.params.slideDuplicateClass) ? (t = h.$wrapperEl.children('[data-swiper-slide-index="' + e + '"]:not(.' + h.params.slideDuplicateClass + ")"), h.lazy.loadInSlide(t.index(), !1)) : (t = h.$wrapperEl.children("." + h.params.slideDuplicateClass + '[data-swiper-slide-index="' + e + '"]'), h.lazy.loadInSlide(t.index(), !1))), h.emit("lazyImageReady", l[0], i[0])) }), h.emit("lazyImageLoad", l[0], i[0]) })) }, load: function() { var i = this, t = i.$wrapperEl, s = i.params, a = i.slides, e = i.activeIndex, n = i.virtual && s.virtual.enabled, r = s.lazy, o = s.slidesPerView; function l(e) { if (n) { if (t.children("." + s.slideClass + '[data-swiper-slide-index="' + e + '"]').length) return 1 } else if (a[e]) return 1 } function h(e) { return n ? S(e).attr("data-swiper-slide-index") : S(e).index() } if ("auto" === o && (o = 0), i.lazy.initialImageLoaded || (i.lazy.initialImageLoaded = !0), i.params.watchSlidesVisibility) t.children("." + s.slideVisibleClass).each(function(e, t) { t = n ? S(t).attr("data-swiper-slide-index") : S(t).index(); i.lazy.loadInSlide(t) }); else if (1 < o) for (var d = e; d < e + o; d += 1) l(d) && i.lazy.loadInSlide(d); else i.lazy.loadInSlide(e); if (r.loadPrevNext) if (1 < o || r.loadPrevNextAmount && 1 < r.loadPrevNextAmount) { for (var r = r.loadPrevNextAmount, c = o, u = Math.min(e + c + Math.max(r, c), a.length), c = Math.max(e - Math.max(c, r), 0), p = e + o; p < u; p += 1) l(p) && i.lazy.loadInSlide(p); for (var m = c; m < e; m += 1) l(m) && i.lazy.loadInSlide(m) } else { r = t.children("." + s.slideNextClass), c = (0 < r.length && i.lazy.loadInSlide(h(r)), t.children("." + s.slidePrevClass)); 0 < c.length && i.lazy.loadInSlide(h(c)) } } }, z = { LinearSpline: function(e, t) { var i, s, a, n, r; return this.x = e, this.y = t, this.lastIndex = e.length - 1, this.interpolate = function(e) { return e ? (r = function(e, t) { for (s = -1, i = e.length; 1 < i - s;) e[a = i + s >> 1] <= t ? s = a : i = a; return i }(this.x, e), n = r - 1, (e - this.x[n]) * (this.y[r] - this.y[n]) / (this.x[r] - this.x[n]) + this.y[n]) : 0 }, this }, getInterpolateFunction: function(e) { this.controller.spline || (this.controller.spline = this.params.loop ? new z.LinearSpline(this.slidesGrid, e.slidesGrid) : new z.LinearSpline(this.snapGrid, e.snapGrid)) }, setTranslate: function(e, t) { var i, s, a = this, n = a.controller.control; function r(e) { var t = a.rtlTranslate ? -a.translate : a.translate; "slide" === a.params.controller.by && (a.controller.getInterpolateFunction(e), s = -a.controller.spline.interpolate(-t)), s && "container" !== a.params.controller.by || (i = (e.maxTranslate() - e.minTranslate()) / (a.maxTranslate() - a.minTranslate()), s = (t - a.minTranslate()) * i + e.minTranslate()), a.params.controller.inverse && (s = e.maxTranslate() - s), e.updateProgress(s), e.setTranslate(s, a), e.updateActiveIndex(), e.updateSlidesClasses() } if (Array.isArray(n)) for (var o = 0; o < n.length; o += 1) n[o] !== t && n[o] instanceof p && r(n[o]); else n instanceof p && t !== n && r(n) }, setTransition: function(t, e) { var i, s = this, a = s.controller.control; function n(e) { e.setTransition(t, s), 0 !== t && (e.transitionStart(), e.params.autoHeight && U.nextTick(function() { e.updateAutoHeight() }), e.$wrapperEl.transitionEnd(function() { a && (e.params.loop && "slide" === s.params.controller.by && e.loopFix(), e.transitionEnd()) })) } if (Array.isArray(a)) for (i = 0; i < a.length; i += 1) a[i] !== e && a[i] instanceof p && n(a[i]); else a instanceof p && e !== a && n(a) } }, ee = { makeElFocusable: function(e) { return e.attr("tabIndex", "0"), e }, addElRole: function(e, t) { return e.attr("role", t), e }, addElLabel: function(e, t) { return e.attr("aria-label", t), e }, disableEl: function(e) { return e.attr("aria-disabled", !0), e }, enableEl: function(e) { return e.attr("aria-disabled", !1), e }, onEnterKey: function(e) { var t = this.params.a11y; 13 === e.keyCode && (e = S(e.target), this.navigation && this.navigation.$nextEl && e.is(this.navigation.$nextEl) && (this.isEnd && !this.params.loop || this.slideNext(), this.isEnd ? this.a11y.notify(t.lastSlideMessage) : this.a11y.notify(t.nextSlideMessage)), this.navigation && this.navigation.$prevEl && e.is(this.navigation.$prevEl) && (this.isBeginning && !this.params.loop || this.slidePrev(), this.isBeginning ? this.a11y.notify(t.firstSlideMessage) : this.a11y.notify(t.prevSlideMessage)), this.pagination && e.is("." + this.params.pagination.bulletClass) && e[0].click()) }, notify: function(e) { var t = this.a11y.liveRegion; 0 !== t.length && (t.html(""), t.html(e)) }, updateNavigation: function() { var e, t; !this.params.loop && this.navigation && (e = (t = this.navigation).$nextEl, (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? this.a11y.disableEl(t) : this.a11y.enableEl(t)), e && 0 < e.length && (this.isEnd ? this.a11y.disableEl(e) : this.a11y.enableEl(e))) }, updatePagination: function() { var i = this, s = i.params.a11y; i.pagination && i.params.pagination.clickable && i.pagination.bullets && i.pagination.bullets.length && i.pagination.bullets.each(function(e, t) { t = S(t); i.a11y.makeElFocusable(t), i.a11y.addElRole(t, "button"), i.a11y.addElLabel(t, s.paginationBulletMessage.replace(/{{index}}/, t.index() + 1)) }) }, init: function() { this.$el.append(this.a11y.liveRegion); var e, t, i = this.params.a11y; this.navigation && this.navigation.$nextEl && (e = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (t = this.navigation.$prevEl), e && (this.a11y.makeElFocusable(e), this.a11y.addElRole(e, "button"), this.a11y.addElLabel(e, i.nextSlideMessage), e.on("keydown", this.a11y.onEnterKey)), t && (this.a11y.makeElFocusable(t), this.a11y.addElRole(t, "button"), this.a11y.addElLabel(t, i.prevSlideMessage), t.on("keydown", this.a11y.onEnterKey)), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.on("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) }, destroy: function() { var e, t; this.a11y.liveRegion && 0 < this.a11y.liveRegion.length && this.a11y.liveRegion.remove(), this.navigation && this.navigation.$nextEl && (e = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (t = this.navigation.$prevEl), e && e.off("keydown", this.a11y.onEnterKey), t && t.off("keydown", this.a11y.onEnterKey), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.off("keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey) } }, I = { init: function() { if (this.params.history) { if (!X.history || !X.history.pushState) return this.params.history.enabled = !1, void(this.params.hashNavigation.enabled = !0); var e = this.history; e.initialized = !0, e.paths = I.getPathValues(), (e.paths.key || e.paths.value) && (e.scrollToSlide(0, e.paths.value, this.params.runCallbacksOnInit), this.params.history.replaceState || X.addEventListener("popstate", this.history.setHistoryPopState)) } }, destroy: function() { this.params.history.replaceState || X.removeEventListener("popstate", this.history.setHistoryPopState) }, setHistoryPopState: function() { this.history.paths = I.getPathValues(), this.history.scrollToSlide(this.params.speed, this.history.paths.value, !1) }, getPathValues: function() { var e = X.location.pathname.slice(1).split("/").filter(function(e) { return "" !== e }), t = e.length; return { key: e[t - 2], value: e[t - 1] } }, setHistory: function(e, t) { this.history.initialized && this.params.history.enabled && (t = this.slides.eq(t), t = I.slugify(t.attr("data-history")), X.location.pathname.includes(e) || (t = e + "/" + t), (e = X.history.state) && e.value === t || (this.params.history.replaceState ? X.history.replaceState({ value: t }, null, t) : X.history.pushState({ value: t }, null, t))) }, slugify: function(e) { return e.toString().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "") }, scrollToSlide: function(e, t, i) { if (t) for (var s = 0, a = this.slides.length; s < a; s += 1) { var n = this.slides.eq(s); I.slugify(n.attr("data-history")) !== t || n.hasClass(this.params.slideDuplicateClass) || (n = n.index(), this.slideTo(n, e, i)) } else this.slideTo(0, e, i) } }, P = { onHashCange: function() { var e = c.location.hash.replace("#", ""); e !== this.slides.eq(this.activeIndex).attr("data-hash") && void 0 !== (e = this.$wrapperEl.children("." + this.params.slideClass + '[data-hash="' + e + '"]').index()) && this.slideTo(e) }, setHash: function() { var e; this.hashNavigation.initialized && this.params.hashNavigation.enabled && (this.params.hashNavigation.replaceState && X.history && X.history.replaceState ? X.history.replaceState(null, null, "#" + this.slides.eq(this.activeIndex).attr("data-hash") || "") : (e = (e = this.slides.eq(this.activeIndex)).attr("data-hash") || e.attr("data-history"), c.location.hash = e || "")) }, init: function() { if (!(!this.params.hashNavigation.enabled || this.params.history && this.params.history.enabled)) { this.hashNavigation.initialized = !0; var e = c.location.hash.replace("#", ""); if (e) for (var t = 0, i = this.slides.length; t < i; t += 1) { var s = this.slides.eq(t); (s.attr("data-hash") || s.attr("data-history")) !== e || s.hasClass(this.params.slideDuplicateClass) || (s = s.index(), this.slideTo(s, 0, this.params.runCallbacksOnInit, !0)) } this.params.hashNavigation.watchState && S(X).on("hashchange", this.hashNavigation.onHashCange) } }, destroy: function() { this.params.hashNavigation.watchState && S(X).off("hashchange", this.hashNavigation.onHashCange) } }, H = { run: function() { var e = this, t = e.slides.eq(e.activeIndex), i = e.params.autoplay.delay; t.attr("data-swiper-autoplay") && (i = t.attr("data-swiper-autoplay") || e.params.autoplay.delay), clearTimeout(e.autoplay.timeout), e.autoplay.timeout = U.nextTick(function() { e.params.autoplay.reverseDirection ? e.params.loop ? (e.loopFix(), e.slidePrev(e.params.speed, !0, !0), e.emit("autoplay")) : e.isBeginning ? e.params.autoplay.stopOnLastSlide ? e.autoplay.stop() : (e.slideTo(e.slides.length - 1, e.params.speed, !0, !0), e.emit("autoplay")) : (e.slidePrev(e.params.speed, !0, !0), e.emit("autoplay")) : e.params.loop ? (e.loopFix(), e.slideNext(e.params.speed, !0, !0), e.emit("autoplay")) : e.isEnd ? e.params.autoplay.stopOnLastSlide ? e.autoplay.stop() : (e.slideTo(0, e.params.speed, !0, !0), e.emit("autoplay")) : (e.slideNext(e.params.speed, !0, !0), e.emit("autoplay")), e.params.cssMode && e.autoplay.running && e.autoplay.run() }, i) }, start: function() { return void 0 === this.autoplay.timeout && !this.autoplay.running && (this.autoplay.running = !0, this.emit("autoplayStart"), this.autoplay.run(), !0) }, stop: function() { return !!this.autoplay.running && void 0 !== this.autoplay.timeout && (this.autoplay.timeout && (clearTimeout(this.autoplay.timeout), this.autoplay.timeout = void 0), this.autoplay.running = !1, this.emit("autoplayStop"), !0) }, pause: function(e) { !this.autoplay.running || this.autoplay.paused || (this.autoplay.timeout && clearTimeout(this.autoplay.timeout), this.autoplay.paused = !0, 0 !== e && this.params.autoplay.waitForTransition ? (this.$wrapperEl[0].addEventListener("transitionend", this.autoplay.onTransitionEnd), this.$wrapperEl[0].addEventListener("webkitTransitionEnd", this.autoplay.onTransitionEnd)) : (this.autoplay.paused = !1, this.autoplay.run())) } }, te = { setTranslate: function() { for (var e = this.slides, t = 0; t < e.length; t += 1) { var i = this.slides.eq(t), s = -i[0].swiperSlideOffset, a = (this.params.virtualTranslate || (s -= this.translate), 0), n = (this.isHorizontal() || (a = s, s = 0), this.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(i[0].progress), 0) : 1 + Math.min(Math.max(i[0].progress, -1), 0)); i.css({ opacity: n }).transform("translate3d(" + s + "px, " + a + "px, 0px)") } }, setTransition: function(e) { var i, s = this, t = s.slides, a = s.$wrapperEl; t.transition(e), s.params.virtualTranslate && 0 !== e && (i = !1, t.transitionEnd(function() { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var e = ["webkitTransitionEnd", "transitionend"], t = 0; t < e.length; t += 1) a.trigger(e[t]) } })) } }, ie = { setTranslate: function() { var e, t = this.$el, i = this.$wrapperEl, s = this.slides, a = this.width, n = this.height, r = this.rtlTranslate, o = this.size, l = this.params.cubeEffect, h = this.isHorizontal(), d = this.virtual && this.params.virtual.enabled, c = 0; l.shadow && (h ? (0 === (e = i.find(".swiper-cube-shadow")).length && (e = S('

      '), i.append(e)), e.css({ height: a + "px" })) : 0 === (e = t.find(".swiper-cube-shadow")).length && (e = S('

      '), t.append(e))); for (var u, p = 0; p < s.length; p += 1) { var m = s.eq(p), v = p, f = 90 * (v = d ? parseInt(m.attr("data-swiper-slide-index"), 10) : v), g = Math.floor(f / 360), w = (r && (f = -f, g = Math.floor(-f / 360)), Math.max(Math.min(m[0].progress, 1), -1)), y = 0, b = 0, E = 0, g = (v % 4 == 0 ? (y = 4 * -g * o, E = 0) : (v - 1) % 4 == 0 ? (y = 0, E = 4 * -g * o) : (v - 2) % 4 == 0 ? (y = o + 4 * g * o, E = o) : (v - 3) % 4 == 0 && (y = -o, E = 3 * o + 4 * o * g), r && (y = -y), h || (b = y, y = 0), "rotateX(" + (h ? 0 : -f) + "deg) rotateY(" + (h ? f : 0) + "deg) translate3d(" + y + "px, " + b + "px, " + E + "px)"); w <= 1 && -1 < w && (c = r ? 90 * -v - 90 * w : 90 * v + 90 * w), m.transform(g), l.slideShadows && (f = h ? m.find(".swiper-slide-shadow-left") : m.find(".swiper-slide-shadow-top"), y = h ? m.find(".swiper-slide-shadow-right") : m.find(".swiper-slide-shadow-bottom"), 0 === f.length && (f = S('

      '), m.append(f)), 0 === y.length && (y = S('

      '), m.append(y)), f.length && (f[0].style.opacity = Math.max(-w, 0)), y.length && (y[0].style.opacity = Math.max(w, 0))) } i.css({ "-webkit-transform-origin": "50% 50% -" + o / 2 + "px", "-moz-transform-origin": "50% 50% -" + o / 2 + "px", "-ms-transform-origin": "50% 50% -" + o / 2 + "px", "transform-origin": "50% 50% -" + o / 2 + "px" }), l.shadow && (h ? e.transform("translate3d(0px, " + (a / 2 + l.shadowOffset) + "px, " + -a / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + l.shadowScale + ")") : (t = Math.abs(c) - 90 * Math.floor(Math.abs(c) / 90), a = 1.5 - (Math.sin(2 * t * Math.PI / 360) / 2 + Math.cos(2 * t * Math.PI / 360) / 2), t = l.shadowScale, a = l.shadowScale / a, u = l.shadowOffset, e.transform("scale3d(" + t + ", 1, " + a + ") translate3d(0px, " + (n / 2 + u) + "px, " + -n / 2 / a + "px) rotateX(-90deg)"))), i.transform("translate3d(0px,0," + (T.isSafari || T.isUiWebView ? -o / 2 : 0) + "px) rotateX(" + (this.isHorizontal() ? 0 : c) + "deg) rotateY(" + (this.isHorizontal() ? -c : 0) + "deg)") }, setTransition: function(e) { var t = this.$el; this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), this.params.cubeEffect.shadow && !this.isHorizontal() && t.find(".swiper-cube-shadow").transition(e) } }, se = { setTranslate: function() { for (var e = this.slides, t = this.rtlTranslate, i = 0; i < e.length; i += 1) { var s, a, n = e.eq(i), r = n[0].progress, o = -180 * (r = this.params.flipEffect.limitRotation ? Math.max(Math.min(n[0].progress, 1), -1) : r), l = 0, h = -n[0].swiperSlideOffset, d = 0; this.isHorizontal() ? t && (o = -o) : (d = h, l = -o, o = h = 0), n[0].style.zIndex = -Math.abs(Math.round(r)) + e.length, this.params.flipEffect.slideShadows && (s = this.isHorizontal() ? n.find(".swiper-slide-shadow-left") : n.find(".swiper-slide-shadow-top"), a = this.isHorizontal() ? n.find(".swiper-slide-shadow-right") : n.find(".swiper-slide-shadow-bottom"), 0 === s.length && (s = S('

      '), n.append(s)), 0 === a.length && (a = S('

      '), n.append(a)), s.length && (s[0].style.opacity = Math.max(-r, 0)), a.length && (a[0].style.opacity = Math.max(r, 0))), n.transform("translate3d(" + h + "px, " + d + "px, 0px) rotateX(" + l + "deg) rotateY(" + o + "deg)") } }, setTransition: function(e) { var i, s = this, t = s.slides, a = s.activeIndex, n = s.$wrapperEl; t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), s.params.virtualTranslate && 0 !== e && (i = !1, t.eq(a).transitionEnd(function() { if (!i && s && !s.destroyed) { i = !0, s.animating = !1; for (var e = ["webkitTransitionEnd", "transitionend"], t = 0; t < e.length; t += 1) n.trigger(e[t]) } })) } }, ae = { setTranslate: function() { for (var e = this.width, t = this.height, i = this.slides, s = this.$wrapperEl, a = this.slidesSizesGrid, n = this.params.coverflowEffect, r = this.isHorizontal(), o = this.translate, l = r ? e / 2 - o : t / 2 - o, h = r ? n.rotate : -n.rotate, d = n.depth, c = 0, u = i.length; c < u; c += 1) { var p = i.eq(c), m = a[c], m = (l - p[0].swiperSlideOffset - m / 2) / m * n.modifier, v = r ? h * m : 0, f = r ? 0 : h * m, g = -d * Math.abs(m), w = r ? 0 : n.stretch * m, y = r ? n.stretch * m : 0, y = (Math.abs(y) < .001 && (y = 0), Math.abs(w) < .001 && (w = 0), Math.abs(g) < .001 && (g = 0), Math.abs(v) < .001 && (v = 0), "translate3d(" + y + "px," + w + "px," + g + "px) rotateX(" + (f = Math.abs(f) < .001 ? 0 : f) + "deg) rotateY(" + v + "deg)"); p.transform(y), p[0].style.zIndex = 1 - Math.abs(Math.round(m)), n.slideShadows && (w = r ? p.find(".swiper-slide-shadow-left") : p.find(".swiper-slide-shadow-top"), g = r ? p.find(".swiper-slide-shadow-right") : p.find(".swiper-slide-shadow-bottom"), 0 === w.length && (w = S('

      '), p.append(w)), 0 === g.length && (g = S('

      '), p.append(g)), w.length && (w[0].style.opacity = 0 < m ? m : 0), g.length && (g[0].style.opacity = 0 < -m ? -m : 0)) }(b.pointerEvents || b.prefixedPointerEvents) && (s[0].style.perspectiveOrigin = l + "px 50%") }, setTransition: function(e) { this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e) } }, ne = { init: function() { var e = this.params.thumbs, t = this.constructor; e.swiper instanceof t ? (this.thumbs.swiper = e.swiper, U.extend(this.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), U.extend(this.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1 })) : U.isObject(e.swiper) && (this.thumbs.swiper = new t(U.extend({}, e.swiper, { watchSlidesVisibility: !0, watchSlidesProgress: !0, slideToClickedSlide: !1 })), this.thumbs.swiperCreated = !0), this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass), this.thumbs.swiper.on("tap", this.thumbs.onThumbClick) }, onThumbClick: function() { var e, t, i, s = this.thumbs.swiper; s && (e = s.clickedIndex, (i = s.clickedSlide) && S(i).hasClass(this.params.thumbs.slideThumbActiveClass) || null == e || (i = s.params.loop ? parseInt(S(s.clickedSlide).attr("data-swiper-slide-index"), 10) : e, this.params.loop && (s = this.activeIndex, this.slides.eq(s).hasClass(this.params.slideDuplicateClass) && (this.loopFix(), this._clientLeft = this.$wrapperEl[0].clientLeft, s = this.activeIndex), e = this.slides.eq(s).prevAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), t = this.slides.eq(s).nextAll('[data-swiper-slide-index="' + i + '"]').eq(0).index(), i = void 0 === e || void 0 !== t && t - s < s - e ? t : e), this.slideTo(i))) }, update: function(e) { var t = this.thumbs.swiper; if (t) { var i, s, a, n = "auto" === t.params.slidesPerView ? t.slidesPerViewDynamic() : t.params.slidesPerView, r = (this.realIndex !== t.realIndex && (i = t.activeIndex, a = t.params.loop ? (t.slides.eq(i).hasClass(t.params.slideDuplicateClass) && (t.loopFix(), t._clientLeft = t.$wrapperEl[0].clientLeft, i = t.activeIndex), s = t.slides.eq(i).prevAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), a = t.slides.eq(i).nextAll('[data-swiper-slide-index="' + this.realIndex + '"]').eq(0).index(), void 0 === s ? a : void 0 === a ? s : a - i == i - s ? i : a - i < i - s ? a : s) : this.realIndex, t.visibleSlidesIndexes && t.visibleSlidesIndexes.indexOf(a) < 0 && (t.params.centeredSlides ? a = i < a ? a - Math.floor(n / 2) + 1 : a + Math.floor(n / 2) - 1 : i < a && (a = a - n + 1), t.slideTo(a, e ? 0 : void 0))), 1), o = this.params.thumbs.slideThumbActiveClass; if (1 < this.params.slidesPerView && !this.params.centeredSlides && (r = this.params.slidesPerView), this.params.thumbs.multipleActiveThumbs || (r = 1), r = Math.floor(r), t.slides.removeClass(o), t.params.loop || t.params.virtual && t.params.virtual.enabled) for (var l = 0; l < r; l += 1) t.$wrapperEl.children('[data-swiper-slide-index="' + (this.realIndex + l) + '"]').addClass(o); else for (var h = 0; h < r; h += 1) t.slides.eq(this.realIndex + h).addClass(o) } } }, O = [m, Y, G, v, g, y, E, { name: "mousewheel", params: { mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarged: "container" } }, create: function() { U.extend(this, { mousewheel: { enabled: !1, enable: x.enable.bind(this), disable: x.disable.bind(this), handle: x.handle.bind(this), handleMouseEnter: x.handleMouseEnter.bind(this), handleMouseLeave: x.handleMouseLeave.bind(this), animateSlider: x.animateSlider.bind(this), releaseScroll: x.releaseScroll.bind(this), lastScrollTime: U.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [] } }) }, on: { init: function() { !this.params.mousewheel.enabled && this.params.cssMode && this.mousewheel.disable(), this.params.mousewheel.enabled && this.mousewheel.enable() }, destroy: function() { this.params.cssMode && this.mousewheel.enable(), this.mousewheel.enabled && this.mousewheel.disable() } } }, { name: "navigation", params: { navigation: { nextEl: null, prevEl: null, hideOnClick: !1, disabledClass: "swiper-button-disabled", hiddenClass: "swiper-button-hidden", lockClass: "swiper-button-lock" } }, create: function() { U.extend(this, { navigation: { init: L.init.bind(this), update: L.update.bind(this), destroy: L.destroy.bind(this), onNextClick: L.onNextClick.bind(this), onPrevClick: L.onPrevClick.bind(this) } }) }, on: { init: function() { this.navigation.init(), this.navigation.update() }, toEdge: function() { this.navigation.update() }, fromEdge: function() { this.navigation.update() }, destroy: function() { this.navigation.destroy() }, click: function(e) { var t, i = this.navigation, s = i.$nextEl, i = i.$prevEl; !this.params.navigation.hideOnClick || S(e.target).is(i) || S(e.target).is(s) || (s ? t = s.hasClass(this.params.navigation.hiddenClass) : i && (t = i.hasClass(this.params.navigation.hiddenClass)), !0 === t ? this.emit("navigationShow", this) : this.emit("navigationHide", this), s && s.toggleClass(this.params.navigation.hiddenClass), i && i.toggleClass(this.params.navigation.hiddenClass)) } } }, { name: "pagination", params: { pagination: { el: null, bulletElement: "span", clickable: !1, hideOnClick: !1, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: !1, type: "bullets", dynamicBullets: !1, dynamicMainBullets: 1, formatFractionCurrent: function(e) { return e }, formatFractionTotal: function(e) { return e }, bulletClass: "swiper-pagination-bullet", bulletActiveClass: "swiper-pagination-bullet-active", modifierClass: "swiper-pagination-", currentClass: "swiper-pagination-current", totalClass: "swiper-pagination-total", hiddenClass: "swiper-pagination-hidden", progressbarFillClass: "swiper-pagination-progressbar-fill", progressbarOppositeClass: "swiper-pagination-progressbar-opposite", clickableClass: "swiper-pagination-clickable", lockClass: "swiper-pagination-lock" } }, create: function() { U.extend(this, { pagination: { init: A.init.bind(this), render: A.render.bind(this), update: A.update.bind(this), destroy: A.destroy.bind(this), dynamicBulletIndex: 0 } }) }, on: { init: function() { this.pagination.init(), this.pagination.render(), this.pagination.update() }, activeIndexChange: function() { !this.params.loop && void 0 !== this.snapIndex || this.pagination.update() }, snapIndexChange: function() { this.params.loop || this.pagination.update() }, slidesLengthChange: function() { this.params.loop && (this.pagination.render(), this.pagination.update()) }, snapGridLengthChange: function() { this.params.loop || (this.pagination.render(), this.pagination.update()) }, destroy: function() { this.pagination.destroy() }, click: function(e) { this.params.pagination.el && this.params.pagination.hideOnClick && 0 < this.pagination.$el.length && !S(e.target).hasClass(this.params.pagination.bulletClass) && (!0 === this.pagination.$el.hasClass(this.params.pagination.hiddenClass) ? this.emit("paginationShow", this) : this.emit("paginationHide", this), this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)) } } }, { name: "scrollbar", params: { scrollbar: { el: null, dragSize: "auto", hide: !1, draggable: !1, snapOnRelease: !0, lockClass: "swiper-scrollbar-lock", dragClass: "swiper-scrollbar-drag" } }, create: function() { U.extend(this, { scrollbar: { init: k.init.bind(this), destroy: k.destroy.bind(this), updateSize: k.updateSize.bind(this), setTranslate: k.setTranslate.bind(this), setTransition: k.setTransition.bind(this), enableDraggable: k.enableDraggable.bind(this), disableDraggable: k.disableDraggable.bind(this), setDragPosition: k.setDragPosition.bind(this), getPointerPosition: k.getPointerPosition.bind(this), onDragStart: k.onDragStart.bind(this), onDragMove: k.onDragMove.bind(this), onDragEnd: k.onDragEnd.bind(this), isTouched: !1, timeout: null, dragTimeout: null } }) }, on: { init: function() { this.scrollbar.init(), this.scrollbar.updateSize(), this.scrollbar.setTranslate() }, update: function() { this.scrollbar.updateSize() }, resize: function() { this.scrollbar.updateSize() }, observerUpdate: function() { this.scrollbar.updateSize() }, setTranslate: function() { this.scrollbar.setTranslate() }, setTransition: function(e) { this.scrollbar.setTransition(e) }, destroy: function() { this.scrollbar.destroy() } } }, { name: "parallax", params: { parallax: { enabled: !1 } }, create: function() { U.extend(this, { parallax: { setTransform: Q.setTransform.bind(this), setTranslate: Q.setTranslate.bind(this), setTransition: Q.setTransition.bind(this) } }) }, on: { beforeInit: function() { this.params.parallax.enabled && (this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, init: function() { this.params.parallax.enabled && this.parallax.setTranslate() }, setTranslate: function() { this.params.parallax.enabled && this.parallax.setTranslate() }, setTransition: function(e) { this.params.parallax.enabled && this.parallax.setTransition(e) } } }, { name: "zoom", params: { zoom: { enabled: !1, maxRatio: 3, minRatio: 1, toggle: !0, containerClass: "swiper-zoom-container", zoomedSlideClass: "swiper-slide-zoomed" } }, create: function() { var s = this, t = { enabled: !1, scale: 1, currentScale: 1, isScaling: !1, gesture: { $slideEl: void 0, slideWidth: void 0, slideHeight: void 0, $imageEl: void 0, $imageWrapEl: void 0, maxRatio: 3 }, image: { isTouched: void 0, isMoved: void 0, currentX: void 0, currentY: void 0, minX: void 0, minY: void 0, maxX: void 0, maxY: void 0, width: void 0, height: void 0, startX: void 0, startY: void 0, touchesStart: {}, touchesCurrent: {} }, velocity: { x: void 0, y: void 0, prevPositionX: void 0, prevPositionY: void 0, prevTime: void 0 } }, a = ("onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(e) { t[e] = J[e].bind(s) }), U.extend(s, { zoom: t }), 1); Object.defineProperty(s.zoom, "scale", { get: function() { return a }, set: function(e) { var t, i; a !== e && (t = s.zoom.gesture.$imageEl ? s.zoom.gesture.$imageEl[0] : void 0, i = s.zoom.gesture.$slideEl ? s.zoom.gesture.$slideEl[0] : void 0, s.emit("zoomChange", e, t, i)), a = e } }) }, on: { init: function() { this.params.zoom.enabled && this.zoom.enable() }, destroy: function() { this.zoom.disable() }, touchStart: function(e) { this.zoom.enabled && this.zoom.onTouchStart(e) }, touchEnd: function(e) { this.zoom.enabled && this.zoom.onTouchEnd(e) }, doubleTap: function(e) { this.params.zoom.enabled && this.zoom.enabled && this.params.zoom.toggle && this.zoom.toggle(e) }, transitionEnd: function() { this.zoom.enabled && this.params.zoom.enabled && this.zoom.onTransitionEnd() }, slideChange: function() { this.zoom.enabled && this.params.zoom.enabled && this.params.cssMode && this.zoom.onTransitionEnd() } } }, { name: "lazy", params: { lazy: { enabled: !1, loadPrevNext: !1, loadPrevNextAmount: 1, loadOnTransitionStart: !1, elementClass: "swiper-lazy", loadingClass: "swiper-lazy-loading", loadedClass: "swiper-lazy-loaded", preloaderClass: "swiper-lazy-preloader" } }, create: function() { U.extend(this, { lazy: { initialImageLoaded: !1, load: Z.load.bind(this), loadInSlide: Z.loadInSlide.bind(this) } }) }, on: { beforeInit: function() { this.params.lazy.enabled && this.params.preloadImages && (this.params.preloadImages = !1) }, init: function() { this.params.lazy.enabled && !this.params.loop && 0 === this.params.initialSlide && this.lazy.load() }, scroll: function() { this.params.freeMode && !this.params.freeModeSticky && this.lazy.load() }, resize: function() { this.params.lazy.enabled && this.lazy.load() }, scrollbarDragMove: function() { this.params.lazy.enabled && this.lazy.load() }, transitionStart: function() { this.params.lazy.enabled && (this.params.lazy.loadOnTransitionStart || !this.params.lazy.loadOnTransitionStart && !this.lazy.initialImageLoaded) && this.lazy.load() }, transitionEnd: function() { this.params.lazy.enabled && !this.params.lazy.loadOnTransitionStart && this.lazy.load() }, slideChange: function() { this.params.lazy.enabled && this.params.cssMode && this.lazy.load() } } }, { name: "controller", params: { controller: { control: void 0, inverse: !1, by: "slide" } }, create: function() { U.extend(this, { controller: { control: this.params.controller.control, getInterpolateFunction: z.getInterpolateFunction.bind(this), setTranslate: z.setTranslate.bind(this), setTransition: z.setTransition.bind(this) } }) }, on: { update: function() { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, resize: function() { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, observerUpdate: function() { this.controller.control && this.controller.spline && (this.controller.spline = void 0, delete this.controller.spline) }, setTranslate: function(e, t) { this.controller.control && this.controller.setTranslate(e, t) }, setTransition: function(e, t) { this.controller.control && this.controller.setTransition(e, t) } } }, { name: "a11y", params: { a11y: { enabled: !0, notificationClass: "swiper-notification", prevSlideMessage: "Previous slide", nextSlideMessage: "Next slide", firstSlideMessage: "This is the first slide", lastSlideMessage: "This is the last slide", paginationBulletMessage: "Go to slide {{index}}" } }, create: function() { var t = this; U.extend(t, { a11y: { liveRegion: S('') } }), Object.keys(ee).forEach(function(e) { t.a11y[e] = ee[e].bind(t) }) }, on: { init: function() { this.params.a11y.enabled && (this.a11y.init(), this.a11y.updateNavigation()) }, toEdge: function() { this.params.a11y.enabled && this.a11y.updateNavigation() }, fromEdge: function() { this.params.a11y.enabled && this.a11y.updateNavigation() }, paginationUpdate: function() { this.params.a11y.enabled && this.a11y.updatePagination() }, destroy: function() { this.params.a11y.enabled && this.a11y.destroy() } } }, { name: "history", params: { history: { enabled: !1, replaceState: !1, key: "slides" } }, create: function() { U.extend(this, { history: { init: I.init.bind(this), setHistory: I.setHistory.bind(this), setHistoryPopState: I.setHistoryPopState.bind(this), scrollToSlide: I.scrollToSlide.bind(this), destroy: I.destroy.bind(this) } }) }, on: { init: function() { this.params.history.enabled && this.history.init() }, destroy: function() { this.params.history.enabled && this.history.destroy() }, transitionEnd: function() { this.history.initialized && this.history.setHistory(this.params.history.key, this.activeIndex) }, slideChange: function() { this.history.initialized && this.params.cssMode && this.history.setHistory(this.params.history.key, this.activeIndex) } } }, { name: "hash-navigation", params: { hashNavigation: { enabled: !1, replaceState: !1, watchState: !1 } }, create: function() { U.extend(this, { hashNavigation: { initialized: !1, init: P.init.bind(this), destroy: P.destroy.bind(this), setHash: P.setHash.bind(this), onHashCange: P.onHashCange.bind(this) } }) }, on: { init: function() { this.params.hashNavigation.enabled && this.hashNavigation.init() }, destroy: function() { this.params.hashNavigation.enabled && this.hashNavigation.destroy() }, transitionEnd: function() { this.hashNavigation.initialized && this.hashNavigation.setHash() }, slideChange: function() { this.hashNavigation.initialized && this.params.cssMode && this.hashNavigation.setHash() } } }, { name: "autoplay", params: { autoplay: { enabled: !1, delay: 3e3, waitForTransition: !0, disableOnInteraction: !0, stopOnLastSlide: !1, reverseDirection: !1 } }, create: function() { var t = this; U.extend(t, { autoplay: { running: !1, paused: !1, run: H.run.bind(t), start: H.start.bind(t), stop: H.stop.bind(t), pause: H.pause.bind(t), onVisibilityChange: function() { "hidden" === document.visibilityState && t.autoplay.running && t.autoplay.pause(), "visible" === document.visibilityState && t.autoplay.paused && (t.autoplay.run(), t.autoplay.paused = !1) }, onTransitionEnd: function(e) { t && !t.destroyed && t.$wrapperEl && e.target === this && (t.$wrapperEl[0].removeEventListener("transitionend", t.autoplay.onTransitionEnd), t.$wrapperEl[0].removeEventListener("webkitTransitionEnd", t.autoplay.onTransitionEnd), t.autoplay.paused = !1, t.autoplay.running ? t.autoplay.run() : t.autoplay.stop()) } } }) }, on: { init: function() { this.params.autoplay.enabled && (this.autoplay.start(), document.addEventListener("visibilitychange", this.autoplay.onVisibilityChange)) }, beforeTransitionStart: function(e, t) { this.autoplay.running && (t || !this.params.autoplay.disableOnInteraction ? this.autoplay.pause(e) : this.autoplay.stop()) }, sliderFirstMove: function() { this.autoplay.running && (this.params.autoplay.disableOnInteraction ? this.autoplay.stop() : this.autoplay.pause()) }, touchEnd: function() { this.params.cssMode && this.autoplay.paused && !this.params.autoplay.disableOnInteraction && this.autoplay.run() }, destroy: function() { this.autoplay.running && this.autoplay.stop(), document.removeEventListener("visibilitychange", this.autoplay.onVisibilityChange) } } }, { name: "effect-fade", params: { fadeEffect: { crossFade: !1 } }, create: function() { U.extend(this, { fadeEffect: { setTranslate: te.setTranslate.bind(this), setTransition: te.setTransition.bind(this) } }) }, on: { beforeInit: function() { var e; "fade" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "fade"), U.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, e)) }, setTranslate: function() { "fade" === this.params.effect && this.fadeEffect.setTranslate() }, setTransition: function(e) { "fade" === this.params.effect && this.fadeEffect.setTransition(e) } } }, { name: "effect-cube", params: { cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: .94 } }, create: function() { U.extend(this, { cubeEffect: { setTranslate: ie.setTranslate.bind(this), setTransition: ie.setTransition.bind(this) } }) }, on: { beforeInit: function() { var e; "cube" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "cube"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0 }), U.extend(this.originalParams, e)) }, setTranslate: function() { "cube" === this.params.effect && this.cubeEffect.setTranslate() }, setTransition: function(e) { "cube" === this.params.effect && this.cubeEffect.setTransition(e) } } }, { name: "effect-flip", params: { flipEffect: { slideShadows: !0, limitRotation: !0 } }, create: function() { U.extend(this, { flipEffect: { setTranslate: se.setTranslate.bind(this), setTransition: se.setTransition.bind(this) } }) }, on: { beforeInit: function() { var e; "flip" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "flip"), this.classNames.push(this.params.containerModifierClass + "3d"), U.extend(this.params, e = { slidesPerView: 1, slidesPerColumn: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !0 }), U.extend(this.originalParams, e)) }, setTranslate: function() { "flip" === this.params.effect && this.flipEffect.setTranslate() }, setTransition: function(e) { "flip" === this.params.effect && this.flipEffect.setTransition(e) } } }, { name: "effect-coverflow", params: { coverflowEffect: { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: !0 } }, create: function() { U.extend(this, { coverflowEffect: { setTranslate: ae.setTranslate.bind(this), setTransition: ae.setTransition.bind(this) } }) }, on: { beforeInit: function() { "coverflow" === this.params.effect && (this.classNames.push(this.params.containerModifierClass + "coverflow"), this.classNames.push(this.params.containerModifierClass + "3d"), this.params.watchSlidesProgress = !0, this.originalParams.watchSlidesProgress = !0) }, setTranslate: function() { "coverflow" === this.params.effect && this.coverflowEffect.setTranslate() }, setTransition: function(e) { "coverflow" === this.params.effect && this.coverflowEffect.setTransition(e) } } }, { name: "thumbs", params: { thumbs: { multipleActiveThumbs: !0, swiper: null, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-container-thumbs" } }, create: function() { U.extend(this, { thumbs: { swiper: null, init: ne.init.bind(this), update: ne.update.bind(this), onThumbClick: ne.onThumbClick.bind(this) } }) }, on: { beforeInit: function() { var e = this.params.thumbs; e && e.swiper && (this.thumbs.init(), this.thumbs.update(!0)) }, slideChange: function() { this.thumbs.swiper && this.thumbs.update() }, update: function() { this.thumbs.swiper && this.thumbs.update() }, resize: function() { this.thumbs.swiper && this.thumbs.update() }, observerUpdate: function() { this.thumbs.swiper && this.thumbs.update() }, setTransition: function(e) { var t = this.thumbs.swiper; t && t.setTransition(e) }, beforeDestroy: function() { var e = this.thumbs.swiper; e && this.thumbs.swiperCreated && e && e.destroy() } } }]; return void 0 === p.use && (p.use = p.Class.use, p.installModule = p.Class.installModule), p.use(O), p }); var ANIUTIL = function() { function t(e) { function t(e) { this.opts = e, this.resizeTiming = e.resizeTiming || 100, this.setElement(), this.setVideoStyle(), this.bindEvent() } var i = t.prototype; i.setElement = function() { void 0 !== this.opts.wrapElement && (this.wrapElement = this.opts.wrapElement.jquery ? this.opts.wrapElement[0] : this.opts.wrapElement), void 0 !== this.opts.targetVideo && (this.targetVideo = this.opts.targetVideo.jquery ? this.opts.targetVideo[0] : this.opts.targetVideo) }, i.setVideoStyle = function() { this.wrapElement.style.overflow = "hidden", this.targetVideo.style.position = "absolute", this.targetVideo.style.top = "50%", this.targetVideo.style.left = "50%", this.targetVideo.style.transform = "translate(-50%, -50%)" }, i.bindEvent = function() { var e = this; window.addEventListener("load", function() { e.setVideoSize() }), window.addEventListener("resize", function() { e.setVideoSize() }) }, i.getVideoInfo = function() { this.wrapWidth = this.wrapElement.clientWidth, this.wrapHeight = this.wrapElement.clientHeight, this.videoWidth = this.targetVideo.clientWidth, this.videoHeight = this.targetVideo.clientHeight, this.wrapRatio = this.wrapHeight / this.wrapWidth, this.videoRatio = this.videoHeight / this.videoWidth }, i.setVideoSize = function() { var e = this; clearTimeout(null), setTimeout(function() { e.getVideoInfo(), e.wrapRatio < e.videoRatio ? (e.targetVideo.style.width = "100%", e.targetVideo.style.height = "auto") : (e.targetVideo.style.width = "auto", e.targetVideo.style.height = "100%") }, this.resizeTiming) }, new t(e) } function i(e) { var t, i, s = null, a = null, n = e ? e + 200 : 200, r = function() { null == s ? (i = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, t = document.body.clientHeight, i = window.pageYOffset + i.clientHeight, s = i / t) : t = document.body.clientHeight }, o = function() { clearTimeout(a), a = setTimeout(function() { window.scrollTo(0, t * s - window.innerHeight), s = null }, n) }; window.addEventListener("resize", function() { r(), o() }) } function s() { return !(-1 < navigator.userAgent.indexOf("Windows") || -1 < navigator.userAgent.indexOf("Macintosh")) && (!!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) || void 0) } return { calRange: function(e) { return 0 < (e = { targetValue: (e = e).targetValue, progress: e.progress, startPoint: e.startPoint || 0, endPoint: e.endPoint || 100 }).startPoint && (e.endPoint = 0 < e.endPoint - e.startPoint ? e.endPoint - e.startPoint : e.endPoint), t = (t = (t = e.targetValue * (e.progress - e.startPoint) / e.endPoint) > e.targetValue ? e.targetValue : t) < 0 ? 0 : t; var t }, videoObjectFit: function(e) { t(e) }, addClass: function(e) { for (var t = e, i = t.classList.length, s = 0; s < i; s++) t.targetElement.classList.add(t.classList[s]) }, removeClass: function(e) { for (var t = e, i = t.classList.length, s = 0; s < i; s++) t.targetElement.classList.remove(t.classList[s]) }, scrollController: function(e) { var i, s = (s = e) || {}, t = navigator.userAgent.toLowerCase(), a = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, n = s.speed || 120, r = 0 <= s.duration ? s.duration : 1, o = a.scrollTop, l = a === document.body && document.documentElement ? document.documentElement : a, h = !1, d = null, e = function() { "Netscape" == navigator.appName && -1 != navigator.userAgent.search("Trident") || -1 != t.indexOf("msie") ? document.addEventListener("mousewheel", function(e) { "hidden" != document.documentElement.style.overflow && u.scrollEvent(e) }, { passive: !1 }) : document.addEventListener("wheel", function(e) { u.hasScrollBox(e.target) || u.scrollEvent(e) }, { passive: !1 }) }, c = function() { window.addEventListener("scroll", function() { "hidden" == document.documentElement.style.overflow || h || (o = a.scrollTop) }) }, u = { scrollEvent: function(e) { e.preventDefault(); var t = document.body.getAttribute("data-scroll-speed"), e = this.normalizeWheelDelta(e), t = s.currDelta && t ? t : t || n ? n : 120; o += -e * t, i = Math.max(0, Math.min(o, a.scrollHeight - l.clientHeight)), this.update() }, normalizeWheelDelta: function(e) { return e.detail ? e.wheelDelta ? e.wheelDelta / e.detail / 40 * (0 < e.detail ? 1 : -1) : -e.detail / 3 : e.wheelDelta / 120 }, update: function() { var e = i - a.scrollTop, e = Math.ceil(a.scrollTop + e) <= 0 ? 0 : i < o ? i : Math.ceil(a.scrollTop + e); h = !0, TweenMax.to(a, r, { ease: "power1.out", scrollTop: e, onComplete: function() { clearTimeout(d), d = null, d = setTimeout(function() { h = !1, o = a.scrollTop }, 500) } }), o <= 0 ? o = 0 : i <= o && (o = i) }, hasScrollBox: function(e) { for (; e && e !== document.body && e !== document;) { var t = window.getComputedStyle(e).overflow; if (t && (-1 < t.indexOf("auto") || -1 < t.indexOf("scroll"))) return !0; e = e.parentNode } return !1 } }; window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame, -1 == t.indexOf("chrome") && -1 != t.indexOf("safari") || (e(), c()) }, resizeScrollOffset: function(e) { i(e) }, checkTouchDevice: s, checkFold: function() { var e, t = screen.width / screen.height, i = s() && .7137 < t && t < .8 && "width=768" == document.getElementsByName("viewport")[0].content, t = s() && .8 < t && t < .95 && "width=768" == document.getElementsByName("viewport")[0].content; return i ? e = "isFold" : t && (e = "isFoldLatest"), e }, deviceConsole: function(e, t) { var i, s; document.querySelector(".console-layer") || ((i = document.createElement("div")).classList.add("console-layer"), i.setAttribute("style", "position: fixed; left: 0; top: 0; padding: 20px; z-index:1000000000; background: #fff;"), document.querySelector("body").append(i)), "multi" == t ? (i = document.querySelector(".console-layer"), (s = document.createElement("div")).classList.add("console-value"), s.setAttribute("style", "border: 1px #ddd solid; float: left; padding: 10px;"), i.append(s)) : s = (document.querySelector(".console-value") || ((s = document.createElement("div")).classList.add("console-value"), s.setAttribute("style", "border: 1px #ddd solid; float: left; padding: 10px;"), i.append(s)), document.querySelector(".console-value")), s.innerHTML = e }, percentToPixel: function(e) { return e.targetValue * (e.progress / 100) }, responsiveHandler: function(s) { var a, e, n, r, t = window.resolutionStatus = null, s = (window.innerWidth, { resolution: s.resolution, statusName: s.statusName || [], callback: s.callback || [], activeTiming: s.activeTiming || 100 }), i = function() { r = window.innerWidth; for (var e = 0; e < s.resolution.length; e++) { var t = s.resolution[e], i = s.resolution[e + 1] || 0; r <= t && i < r && a != s.statusName[e] || r <= t && i < r && n != e ? (document.documentElement.classList.remove(a), a = s.statusName[e] || e, n = e, document.documentElement.classList.add(a)) : (r >= s.resolution[0] && a != s.statusName[0] || r >= s.resolution[0] && !n) && (document.documentElement.classList.remove(a), a = s.statusName[0] || e, n = e, document.documentElement.classList.add(a)) } }, o = function() { clearTimeout(t), console.log(s.activeTiming), e != n && s.callback[n] && (t = setTimeout(function() { s.callback[n](), t = null, e = n }, s.activeTiming)) }; return function() { return window.addEventListener("DOMContentLoaded", function() { i(), e = n }), window.addEventListener("resize", function() { i(), o() }), this }() } } }(); window.WATCH6 = window.WATCH6 || {}; const UTILS = function() { return { isIosDevice: ((s = /iPad|iPhone|iPod/.test(navigator.userAgent)) ? document.documentElement.classList.add("isIosDevice") : document.documentElement.classList.add("isNotIosDevice"), s), checkGlobal: void(0 === location.pathname.indexOf("/global/galaxy") || !0 === window.IS_CAMPAIGN ? document.documentElement.classList.add("global") : document.documentElement.classList.add("dotcom")), checkOS: (s = (s = navigator.appVersion.match(/(mac|win|linux)/i)) ? s[1].toLowerCase() : "", void document.documentElement.classList.add(s)), isFireFox: void(/firefox/i.test(navigator.userAgent) && document.documentElement.classList.add("firefox")), isWebkit: void(/applewebkit/i.test(navigator.userAgent) && document.documentElement.classList.add("webkit")), isChrome: void(/chrome/i.test(navigator.userAgent) && document.documentElement.classList.add("chrome")), isOpera: void(/opera/i.test(navigator.userAgent) && document.documentElement.classList.add("opera")), isIos: void(/ip(ad|hone|od)/i.test(navigator.userAgent) && document.documentElement.classList.add("ios")), isCrIos: void(/crios/i.test(navigator.userAgent) && document.documentElement.classList.add("crios")), isAndroid: void(/android/i.test(navigator.userAgent) && document.documentElement.classList.add("android")), isSafari: (s = /applewebkit/i.test(navigator.userAgent), i = /chrome/i.test(navigator.userAgent), void(s && !i && document.documentElement.classList.add("safari"))), isHuawei: void(/HUAWEICLT/i.test(navigator.userAgent) && document.documentElement.classList.add("huawei")), isUCBrowser: void(/UCBrowser/i.test(navigator.userAgent) && document.documentElement.classList.add("ucbrowser")), winSize: (s = "Netscape" === navigator.appName, i = -1 !== navigator.appVersion.indexOf("Mac"), e = -1 !== navigator.userAgent.indexOf("Safari"), t = -1 !== navigator.userAgent.indexOf("Chrome"), s && !i && e && !t ? function() { return { w: $(win).width(), h: $(win).height() } } : function() { return { w: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, h: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } }), requestAFrame: window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e) { return window.setTimeout(e, 1e3 / 60) }, cancelAFrame: window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function(e) { window.clearTimeout(e) }, isObject: function(e) { return "object" == typeof e && null !== e && e.constructor && e.constructor === Object }, def: function() { for (var e = [], t = arguments.length; t--;) e[t] = arguments[t]; for (var i = Object(e[0]), s = 1; s < e.length; s += 1) { var a = e[s]; if (null != a) for (var n = Object.keys(Object(a)), r = 0, o = n.length; r < o; r += 1) { var l = n[r], h = Object.getOwnPropertyDescriptor(a, l); void 0 !== h && h.enumerable && (this.isObject(i[l]) && this.isObject(a[l]) ? this.def(i[l], a[l]) : !this.isObject(i[l]) && this.isObject(a[l]) ? (i[l] = {}, this.def(i[l], a[l])) : i[l] = a[l]) } } return i }, convertArray: function(e) { return Array.prototype.slice.call(e) }, getOffset: function(e) { return { top: e.getBoundingClientRect().top + window.pageYOffset, bottom: e.getBoundingClientRect().bottom + window.pageYOffset } }, getScroll: function() { var e = window.pageYOffset; return { top: e, bottom: e + window.innerHeight } }, getViewPort: function() { var e = window, t = "inner"; return "innerWidth" in window || (t = "client", e = document.documentElement || document.body), { width: e[t + "Width"], height: e[t + "Height"] } }, getCurrentDevice: function() { var e = UTILS.getViewPort().width; return 1024 <= e ? "desktop" : e < 1024 && 768 <= e ? "tablet" : "mobile" }, isInVerticalViewPort: function(e) { e = e.getBoundingClientRect(); return e.top - 200 <= UTILS.getViewPort().height && 0 <= e.bottom }, isInHorizontalViewPort: function(e) { e = e.getBoundingClientRect(); return e.left - 200 <= UTILS.getViewPort().width && 0 <= e.right + 200 }, isVerticalVisible: function(e) { return UTILS.isInVerticalViewPort(e) && !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, isHorizontalVisible: function(e) { return UTILS.isInHorizontalViewPort(e) && !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, setCookie: function(e, t, i) { var s = new Date; s.setTime(s.getTime() + 60 * i * 60 * 24 * 1e3), document.cookie = e + "=" + t + "; exprires=" + s.toUTCString() + "; path=/" }, getCookie: function(e) { e = document.cookie.match("(^|;) ?" + e + "=([^;]*)(;|$)"); return e ? e[2] : null }, triggerEvent: function(e, t, i, s, a) { var n, i = i || null, s = s || !1, a = a || !0; null == i ? (n = document.createEvent("HTMLEvents")).initEvent(t, s, a) : (n = document.createEvent("CustomEvent")).initCustomEvent(t, s, a, i), e.dispatchEvent(n) }, visibleScroll: function() { document.documentElement.classList.contains("isTouchDevice") || !0 === this.scrollFlag && (this.scrollFlag = !1, document.body.style.position = "", document.body.style.width = "", document.body.style.top = "", document.body.style.boxSizing = "", document.body.style.paddingRight = "", document.documentElement.style.overflow = "", null !== this.popupEl && (this.popupEl.style.paddingRight = "", this.popupEl = null), window.scrollTo(0, this.currentPos)) }, hiddenScroll: function(e) { var t; document.documentElement.classList.contains("isTouchDevice") || (this.popupEl = e || null, this.scrollFlag = !0, this.currentPos = window.pageYOffset || document.documentElement.scrollTop, e = window.innerWidth - document.documentElement.clientWidth, t = 0 < this.currentPos ? "-" + this.currentPos + "px" : 0, document.body.style.position = "fixed", document.body.style.width = "100%", document.body.style.top = t, document.body.style.boxSizing = "border-box", document.body.style.paddingRight = e + "px", document.documentElement.style.overflow = "hidden", null !== this.popupEl && (this.popupEl.style.paddingRight = e + "px")) }, closest: function(e, t) { do { if (e == document.documentElement) return null; if (e.matches ? e.matches(t) : e.msMatchesSelector(t)) return e } while (null !== (e = e.parentElement || e.parentNode) || 1 === e.nodeType); return null }, onPopupAccessibility: function(e) { e.setAttribute("aria-hidden", !0), e.setAttribute("tabindex", -1); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++) { var s = t[i].getAttribute("aria-hidden"), a = t[i].getAttribute("tabindex"); null != s && null == t[i].getAttribute("data-prev-aria-hidden") && t[i].setAttribute("data-prev-aria-hidden", s), null != a && null == t[i].getAttribute("data-prev-tabindex") && t[i].setAttribute("data-prev-tabindex", a), t[i].setAttribute("tabindex", -1), t[i].setAttribute("aria-hidden", !0) } }, offPopupAccessibility: function(e) { e.removeAttribute("aria-hidden"), e.removeAttribute("tabindex"); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++) { var s = t[i].getAttribute("data-prev-aria-hidden"), a = t[i].getAttribute("data-prev-tabindex"); null != s ? t[i].setAttribute("aria-hidden", s) : t[i].removeAttribute("aria-hidden"), null != a ? t[i].setAttribute("tabindex", a) : t[i].removeAttribute("tabindex"), t[i].removeAttribute("data-prev-aria-hidden"), t[i].removeAttribute("data-prev-tabindex") } }, onAccessibility: function(e) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { e.setAttribute("aria-hidden", !0), e.setAttribute("tabindex", -1); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++) t[i].setAttribute("tabindex", -1), t[i].setAttribute("aria-hidden", !0) } }, offAccessibility: function(e) { if (!document.documentElement.classList.contains("is-layer-popup-opened")) { e.removeAttribute("aria-hidden"), e.removeAttribute("tabindex"); for (var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++) t[i].removeAttribute("tabindex"), t[i].removeAttribute("aria-hidden") } }, extend: function(t, i) { return Object.keys(i).forEach(function(e) { t[e] = i[e] }), t }, getHeight: function(e) { var t, i, s; return e ? (t = (i = window.getComputedStyle(e)).display, i = parseInt(i.maxHeight), s = 0, "none" != t && 0 != i ? e.offsetHeight : (e.style.position = "absolute", e.style.visibility = "hidden", e.style.display = "block", s = e.offsetHeight, e.style.display = "", e.style.position = "", e.style.visibility = "", s)) : 0 }, setLastActiveItem: function(e) { this.lastActiveItem = e || null }, getLastActiveItem: function() { return null != this.lastActiveItem ? this.lastActiveItem : null }, isRTL: function() { return document.documentElement.classList.contains("rtl") }, checkRegion: function() { for (var e = document.getElementsByTagName("meta"), t = "", i = 0; i < e.length; i++) if ("sitecode" == e[i].getAttribute("name")) return t = e[i].getAttribute("content"); if ("" == t) return -1 < document.location.pathname.indexOf("global") ? "global" : "jp" }, isLowNetwork: function() { var e = "___GALAXY_SPEED"; return null != UTILS.getCookie(e) && null != UTILS.getCookie(e) && ("L" == UTILS.getCookie(e) || "H" != UTILS.getCookie(e) && void 0) }, getQueryString: function(e) { var t = (s = location.href).indexOf("?") + 1, i = -1 < s.indexOf("#") ? s.indexOf("#") + 1 : s.length; if (0 == t) return ""; for (var s = (s = s.substring(t, i)).split("&"), a = "", n = 0; n < s.length; n++) { var r = s[n].split("="); if (2 != r.length) break; r[0] == e && (a = r[1]); break } return a }, customParallax: function(e) { var t = e.mode || "center", i = e.delay || 0, s = e.ease || "Power0.easeNone", a = e.transZ || 0, n = e.duration || .3, r = e.distance || 0, o = e.correction || 0, l = e.windowCorrection ? window.innerHeight * e.windowCorrection : 0, h = e.direction || 1, d = e.activeElement, c = e.targetElement || d, u = e.wrapperElement || d, e = e.unit || "px", p = window.pageYOffset, m = window.pageYOffset + window.innerHeight, d = d.getBoundingClientRect(), v = p + u.getBoundingClientRect().top, u = v + u.getBoundingClientRect().height, f = window.innerHeight + d.height + 2 * l, g = "center" == t ? d.top - (window.innerHeight - d.height) / 2 : d.top - window.innerHeight; "px" == e && (r = d.height * r / 100), v <= m + l && p - l <= u && TweenMax.to(c, n, { y: o + g * ("center" == t ? 2 * r : r) / f * h + e, z: a, ease: s, delay: i }) }, getNavHeight: function() { var e, t, i = 0, s = document.querySelector(".pd-g-header-navigation") || document.querySelector("#subnav") || document.querySelector(".sticky-menu") || document.querySelector(".pd-g-floating-nav"); return i = s ? s.classList.contains("pd-g-header-navigation") ? (t = (e = s.querySelector(".pd-header-navigation")).querySelector(".pd-header-navigation__menu-wrap"), e.clientHeight + t.clientHeight) : s.clientHeight : i }, isBrokenFixed: function() { var e = window.innerWidth, t = window.innerHeight, i = !1; return document.documentElement.classList.remove("is-broken-fixed"), 1440 <= e && t <= 540 || e <= 810 && t / e < .5277 || e / window.outerWidth < .4 || t < UTILS.MIN_VIEW_HEIGHT ? (document.documentElement.classList.add("is-broken-fixed"), i = !0) : document.documentElement.classList.remove("is-broken-fixed"), i }, isFullAnimationBrokenFixed: () => { var e = window.innerWidth, t = window.innerHeight, i = !!UTILS.isTouchDevice && window.matchMedia("(orientation: landscape)").matches; let s = !1; return !!UTILS.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches && t / e < 1.5 || i || t < 700 ? (document.documentElement.classList.add("is-animation-broken-fixed"), s = !0) : document.documentElement.classList.remove("is-animation-broken-fixed"), s }, isTouchDevice: ((s = "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch) ? document.documentElement.classList.add("isTouchDevice") : document.documentElement.classList.add("isNotTouchDevice"), s), isIEorEdge: function() { var e, t = navigator.userAgent.toLowerCase(); if ("Microsoft Internet Explorer" == navigator.appName) e = "msie "; else if (-1 < t.search("trident")) e = "trident/.*rv:"; else { if (!(-1 < t.search("edge/"))) return -1; e = "edge/" } return null != new RegExp(e + "([0-9]{1,})(\\.{0,}[0-9]{0,1})").exec(t) ? (document.documentElement.classList.add("isIEorEdge"), parseFloat(RegExp.$1 + RegExp.$2)) : -1 }(), page: { scrollLock: { className: "is-no-scroll", barWidth: function() { return window.innerWidth - document.documentElement.clientWidth }, el: $("html"), run: function(e) { document.documentElement.style.paddingRight = e + "px" }, off: function() { this.barWidth(); this.el.removeClass(this.className), this.el.removeClass("hive-layer-scroll-lock"), this.run(0) }, on: function() { var e = this.barWidth(); this.el.addClass(this.className), this.run(e) } } }, MIN_VIEW_HEIGHT: 400, RESPONSIVE: { PC: { NAME: "pc", WIDTH: 1440 }, TABLET: { NAME: "tablet", WIDTH: 1024 }, MOBILE: { NAME: "mobile", WIDTH: 767 } } }; var e, t, i, s }(); WATCH6.UTILS = UTILS; var SCROLLER = function() { function t(e) { this.initialize = !0, this.opts = e, this.correction = e.correction || 0, this.removeCorrection = e.removeCorrection || 0, this.trackHeight = e.trackHeight || 0, this.activeClass = e.activeClass, this.activeCallbackClass = e.activeCallbackClass || "callback-active", this.useStrictMode = null == e.useStrictMode || e.useStrictMode, this.useFixed = e.useFixed || !1, this.useFixedStyle = null == e.useFixedStyle || e.useFixedStyle, this.useSticky = e.useSticky || !1, this.useStickyStyle = null == e.useStickyStyle || e.useStickyStyle, this.useViewportOver = e.useViewportOver || !0, this.activeVisibility = e.activeVisibility || "before", this.activeType = e.activeType ? this.opts.activeType : "reverse", this.autoHeight = null == e.autoHeight || e.autoHeight, this.offsetY = e.offsetY || 0, this.resize = null == e.resize || e.resize, this.resizeTiming = null != e.resizeTiming && e.resizeTiming, this.windowHeight = window.innerHeight, this.oldPregress = 0, this.oldWinScrollTop = 0, this.elementInformation = {}, this.isFixedArea = !1, this.checkTouchDevice = !1, this.elementEventList.setElement.call(this), this.bindEvent() } var e = t.prototype; return e.bindEvent = function() { var e = this, t = null; this.elementHandler(), this.resize && (this.addEventList = function() { e.resizeTiming ? (clearTimeout(t), t = setTimeout(function() { e.windowHeight = window.innerHeight, e.elementHandler() }, e.resizeTiming)) : (e.windowHeight = window.innerHeight, e.elementHandler()) }, window.addEventListener("resize", this.addEventList)), this.opts.IEScroll && this.utilList.IEScrollHandler.call(this) }, e.elementHandler = function() { return this.elementEventList.setTrackStyle.call(this), this.getFixedState(), 1 < this.trackHeight && this.elementEventList.setTrackHeigh.call(this), !this.useSticky && this.useFixed && this.useFixedStyle && this.elementEventList.setFixedStyle.call(this), this.useSticky && !this.useFixed && this.useStickyStyle && this.elementEventList.setStickyStyle.call(this), this }, e.utilList = { checkTouchDevice: function() { return -1 < navigator.userAgent.indexOf("Windows") || -1 < navigator.userAgent.indexOf("Macintosh") ? this.checkTouchDevice = !1 : "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch ? this.checkTouchDevice = !0 : void 0 }, IEScrollHandler: function() { navigator.userAgent.match(/Trident\/7\./) && (this.body.addEventListener("mousewheel", function(e) { e.preventDefault(); var e = e.wheelDelta, t = window.pageYOffset; window.scrollTo(0, t - e) }), this.body.addEventListener("keydown", function(e) { var t = window.pageYOffset; switch (e.which) { case 38: e.preventDefault(), window.scrollTo(0, t - 40); break; case 40: e.preventDefault(), window.scrollTo(0, t + 40); break; default: return } })) }, getScroll: function() { var e = window.pageYOffset; return { top: e, bottom: e + this.windowHeight } }, getOffset: function(e) { return { top: e.getBoundingClientRect().top + window.pageYOffset, bottom: e.getBoundingClientRect().bottom + window.pageYOffset } }, getUserAgent: function() { return navigator.userAgent } }, e.elementEventList = { setElement: function() { this.body = document.querySelector("body"), void 0 !== this.opts.trackElement && (this.trackElement = this.opts.trackElement.jquery ? this.opts.trackElement[0] : this.opts.trackElement), void 0 !== this.opts.fixedElement && (this.fixedElement = this.opts.fixedElement.jquery ? this.opts.fixedElement[0] : this.opts.fixedElement), void 0 !== this.opts.activeElement && (this.activeElement = this.opts.activeElement.jquery ? this.opts.activeElement[0] : this.opts.activeElement) }, setTrackHeigh: function() { var e, t; this.trackHeight <= 1 || (this.trackElement.style.height = "", e = 0 == this.trackElement.clientHeight, t = this.windowHeight * this.trackHeight, e && (this.trackElement.style.height = this.windowHeight + "px"), this.trackElement.style.height = t + "px") }, setTrackStyle: function() { this.trackElement && this.useFixed && "static" == window.getComputedStyle(this.trackElement).position && (this.trackElement.style.position = "relative") }, setFixedStyle: function() { this.isFixedArea || (this.fixedElement.style.height = "", this.fixedElement.style.top = "", this.fixedElement.style.position = "absolute"), 0 == this.fixedElement.clientWidth && (this.fixedElement.style.width = "100%"), this.autoHeight && ("string" == typeof this.offsetY ? (this.fixedElement.style.height = "calc(" + this.windowHeight + "px - " + this.offsetY + ")", this.fixedElement.style.top = this.offsetY) : (this.fixedElement.style.height = this.windowHeight - this.offsetY + "px", this.fixedElement.style.top = this.offsetY + "px")) }, setStickyStyle: function() { this.isFixedArea || (this.fixedElement.style.position = "sticky"), 0 == this.fixedElement.clientWidth && (this.fixedElement.style.width = "100%") }, setFixedElement: function() { this.diffHeight = this.windowHeight - this.fixedElement.clientHeight, this.trackTopOffset = this.utilList.getOffset.call(this, this.trackElement).top, this.trackBottomOffset = this.utilList.getOffset.call(this, this.trackElement).bottom, this.winScrollTop <= this.trackTopOffset ? (this.fixedElement.style.position = "absolute", "string" == typeof this.offsetY ? this.fixedElement.style.top = this.offsetY : this.fixedElement.style.top = this.offsetY + "px", this.fixedElement.style.bottom = "") : this.winScrollBottom >= this.trackBottomOffset ? (this.fixedElement.style.position = "absolute", this.fixedElement.style.top = this.trackElement.clientHeight - this.fixedElement.clientHeight + "px") : this.isFixedArea || (this.fixedElement.style.position = "fixed", this.fixedElement.style.top = "0") } }, e.getWheelDirection = function() { this.winScrollTop >= this.oldWinScrollTop ? this.wheelDirection = "down" : this.wheelDirection = "up", this.oldWinScrollTop = this.winScrollTop }, e.getProgress = function() { var e = this.utilList.getOffset.call(this, this.trackElement).top - this.windowHeight * this.correction, t = this.useFixed || this.useSticky ? Math.abs(this.trackElement.clientHeight - this.windowHeight) : this.useViewportOver ? this.trackElement.clientHeight + this.windowHeight : this.trackElement.clientHeight, i = this.winScrollTop - e, e = this.winScrollBottom - e, i = this.useFixed || this.useSticky ? i / t * 100 : e / t * 100; return this.useStrictMode ? this.progress = Math.floor(i) < 0 ? 0 : 100 < Math.floor(i) ? 100 : Math.floor(i) : this.progress = i, this.getWheelDirection(), this.progress }, e.getFixedState = function() { 0 < this.progress && this.progress < 100 ? this.isFixedArea = !0 : this.isFixedArea = !1 }, e.trackAnimation = function(e) { this.initialize && (this.winScrollTop = this.utilList.getScroll.call(this).top - this.windowHeight * this.correction, this.winScrollBottom = this.utilList.getScroll.call(this).bottom, this.useFixed && !this.useSticky && this.elementEventList.setFixedElement.call(this), this.getProgress(), this.getFixedState(), e && (this.oldPregress !== this.progress && e.call(this), this.oldPregress = this.progress)) }, e.activeAnimation = function() { if (this.initialize) { this.winScrollTop = this.utilList.getScroll.call(this).top, this.winScrollBottom = this.utilList.getScroll.call(this).bottom, this.trackElementHeight = this.trackElement.clientHeight, this.correctionValue = this.trackElementHeight * this.correction, this.removeCorrectionValue = this.trackElementHeight * this.removeCorrection, this.elementOffsetTop = this.utilList.getOffset.call(this, this.trackElement).top, this.elementOffsetBottom = this.utilList.getOffset.call(this, this.trackElement).bottom, this.downScrollTop = this.winScrollTop - this.correctionValue, this.downScrollBottom = this.winScrollBottom - this.correctionValue, this.upScrollTop = this.winScrollTop + this.correctionValue, this.upScrollBottom = this.winScrollBottom + this.correctionValue; function e() { l(), r() } function t() { h(), o() } var i = this, s = this.activeVisibility, a = this.activeType, n = this.windowHeight / 2, r = function() { if (i.activeClass) if ("object" == typeof i.activeClass) for (var e = i.activeClass.length, t = 0; t < e; t++) i.activeElement.classList.contains(i.activeClass[t]) || i.activeElement.classList.add(i.activeClass[t]); else i.activeElement.classList.contains(i.activeClass) || i.activeElement.classList.add(i.activeClass) }, o = function() { if ("object" == typeof i.activeClass) for (var e = i.activeClass.length, t = 0; t < e; t++) i.activeElement.classList.contains(i.activeClass[t]) && i.activeElement.classList.remove(i.activeClass[t]); else i.activeElement.classList.contains(i.activeClass) && i.activeElement.classList.remove(i.activeClass); i.activeElement.classList.contains(i.activeCallbackClass) && i.activeElement.classList.remove(i.activeCallbackClass) }, l = function() { i.activeElement.classList.contains(i.activeCallbackClass) || i.opts.activeCallback && (i.opts.activeCallback.call(i), i.activeElement.classList.add(i.activeCallbackClass)) }, h = function() { i.activeElement.classList.contains(i.activeCallbackClass) && i.opts.endCallback && i.opts.endCallback.call(i) }; switch (this.getWheelDirection(), s) { case "before": ("down" == this.wheelDirection && this.downScrollBottom >= this.elementOffsetTop && this.downScrollTop <= this.elementOffsetTop || "up" == this.wheelDirection && this.upScrollTop <= this.elementOffsetBottom && this.upScrollBottom >= this.elementOffsetBottom || "oneWay" == this.activeType && this.downScrollBottom >= this.elementOffsetTop) && (e(), this.activeStatus = !0); break; case "visible": ("down" == this.wheelDirection && this.downScrollBottom >= this.elementOffsetTop + n && this.downScrollTop <= this.elementOffsetTop || "up" == this.wheelDirection && this.upScrollTop <= this.elementOffsetBottom - n && this.upScrollBottom >= this.elementOffsetBottom || "oneWay" == this.activeType && this.downScrollBottom >= this.elementOffsetTop + n) && (e(), this.activeStatus = !0) } switch (a) { case "reverse": "visible" == s ? (this.activeStatus && "down" == this.wheelDirection && this.winScrollTop > this.elementOffsetBottom || this.activeStatus && "up" == this.wheelDirection && this.winScrollBottom < this.elementOffsetTop) && (t(), this.activeStatus = !1) : (this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop || this.activeStatus && this.winScrollTop > this.elementOffsetBottom && this.winScrollBottom > this.elementOffsetBottom) && (t(), this.activeStatus = !1); break; case "oneWay": "visible" == s ? this.activeStatus && this.winScrollBottom < this.elementOffsetTop + n && (t(), this.activeStatus = !1) : this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop && (t(), this.activeStatus = !1) } } }, e.getElementInformation = function() { return this.trackElement && (this.elementInformation.trackElement = { element: this.trackElement, width: this.trackElement.clientWidth, height: this.trackElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.trackElement).top, bottomOffset: this.utilList.getOffset.call(this, this.trackElement).bottom }), this.activeElement && (this.elementInformation.activeElement = { element: this.activeElement, width: this.activeElement.clientWidth, height: this.activeElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.activeElement).top, bottomOffset: this.utilList.getOffset.call(this, this.activeElement).bottom }), this.elementInformation }, e.destroy = function(e) { this.trackElement && (this.trackElement.style.position = "", this.trackElement.style.height = ""), this.fixedElement && (this.fixedElement.style.position = "", this.fixedElement.style.top = "", this.fixedElement.style.height = ""), this.trackElement = "", this.fixedElement = "", this.activeElement = "", this.correction = "", this.trackHeight = "", this.activeCallbackClass = "", this.useFixed = "", this.activeVisibility = "", this.activeType = "", this.offsetY = "", this.resize = "", this.windowHeight = "", this.elementInformation = "", window.removeEventListener("load", this.addEventList), window.removeEventListener("resize", this.addEventList), this.initialize = !1 }, function(e) { return new t(e) } }(); ! function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const u = WATCH6.UTILS; WATCH6.ImageLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: ".js-img-src", lazyCompleteClass: "load-complete", startLazyClass: t.startLazyClass || ".js-start-img-src", endLazyClass: t.endLazyClass || ".js-end-img-src", responsiveClass: t.responsiveClass || ".js-res-img", loadOption: t.loadOption, visiblePoint: t.visiblePoint || 0, useDefaultImg: t.useDefaultImg, resizeStart: null }; this.opts = t, this.classes = t.classes, this.el = document.querySelector(e), this.init() } init() { this.initOpts(), this.getLazyImage(), this.getResponsiveImage(), this.bindEvents() } initOpts() { this.targetAttr = this.opts.loadOption[0].attribute, this.responsiveCheck = this.opts.loadOption, this.dynamicCallCount = 0, this.dynamicLoadedComplate = !1, this.opts.useDefaultImg && this.setDefaultImage() } getLazyImage() { const e = Array.from(this.el.querySelectorAll(this.opts.lazyClass)); var t = Array.from(this.el.querySelectorAll(this.opts.startLazyClass)), t = e.concat(t); this.lazyImages = t, this.lazyLength = t.length } getResponsiveImage() { var e = this.el.querySelectorAll(this.opts.responsiveClass); this.responsiveImages = e, this.responsiveLength = e.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } onLoadHandler() { this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyImage(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let e = s + 1, t = e == a ? 0 : this.opts.loadOption[e].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > t) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.dynamicCallCount = 0, this.setResponsiveImage()) } } setResponsiveImage(i) { if (i) for (let t = 0; t < i.length; t++) { var s = i[t]; let e = i[t].getAttribute(this.targetAttr); e = e || this.findImageHandler(s), i[t].classList.contains(this.opts.lazyCompleteClass) || (i[t].setAttribute("src", e), i[t].classList.add(this.opts.lazyCompleteClass)) } else for (let i = 0; i < this.responsiveLength; i++) { let e = this.responsiveImages[i], t = e.getAttribute(this.targetAttr); t = t || this.findImageHandler(e), e.classList.contains(this.opts.lazyCompleteClass) && e.setAttribute("src", t) } } checkCompleteImage() { var e = this.el.querySelectorAll("." + this.opts.lazyCompleteClass); this.lazyCompleteLength = e.length } setDefaultImage() { for (var e = 0; e < this.lazyLength; e++) this.lazyImages[e].setAttribute("src", "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAAAACwAAAAAAQABAAACAkQBADs=") } setLazyImage() { this.windowHeight = window.innerHeight; for (let d = 0; d < this.lazyLength; d++) { let t = this.lazyImages[d], e = this.windowHeight * this.opts.visiblePoint, i = u.getScroll.call(this).top - e, s = u.getScroll.call(this).bottom + e, a = u.getOffset.call(this, t).top, n = u.getOffset.call(this, t).bottom, r = this.opts.lazyClass.split("."), o = r[r.length - 1], l = this.opts.startLazyClass.split("."), h = l[l.length - 1]; if ((a < s && i <= a || i < n && n < s || i < a && n < s || a < i && s < n) && null != t.offsetParent) { let e = t.getAttribute(this.targetAttr); var c; e = e || this.findImageHandler(t), t.classList.contains(this.opts.lazyCompleteClass) || (t.setAttribute("src", e), c = () => { 1 == this.opts.startLazyClass.split(" ").length && t.classList.remove(h), 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(o), this.checkCompleteImage(), t.removeEventListener("load", c) }, t.addEventListener("load", c), t.classList.add(this.opts.lazyCompleteClass)) } } } findRemainingImageAttr(e) { for (var t = this.opts.loadOption.length, i = 0; i < t; i++) { var s = e.getAttribute(this.opts.loadOption[i].attribute); if (s) return s } } findNextImageAttr(t) { for (let e = this.attrIndex; 0 <= e; e--) { var i = t.getAttribute(this.opts.loadOption[e].attribute); if (i) return i; if (0 == e && null == i) return this.findRemainingImageAttr(t) } } findImageHandler(e) { return 0 !== this.attrIndex ? this.findNextImageAttr(e) : this.findRemainingImageAttr(e) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const e = WATCH6.UTILS, t = e.RESPONSIVE; WATCH6.VideoLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: t.lazyClass || ".js-video-src", responsiveClass: t.responsiveClass || ".js-res-video", imageLazyCompleteClass: "load-complete", imageEndLazyClass: t.imageEndLazyClass || ".js-end-img-src", notLoadElement: t.notLoadElement || [], loadOption: t.loadOption, visiblePoint: t.visiblePoint || 0, resizeStart: null, classes: { loaded: "loaded", ended: "ended" } }; this.opts = t, this.classes = t.classes, this.el = document.querySelector(e), this.init() } init() { this.initOpts(), this.getLazyVideo(), this.getResponsiveVideo(), this.bindEvents() } initOpts() { this.getCurrentDevice(); var e = "mobile" !== this.currentDevice ? 0 : 1; this.prevVideoSrc = "", this.targetAttr = this.opts.loadOption[e].attribute, this.responsiveCheck = this.opts.loadOption, this.videoCallStack = [] } getLazyVideo() { let e = Array.from(this.el.querySelectorAll(this.opts.lazyClass)).filter(t => { t.isVideoInit = !1; { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); e = e.filter(e => { if (e.querySelector("video")) return e }), this.lazyVideos = e, this.lazyLength = e.length } getResponsiveVideo() { var e = Array.from(this.el.querySelectorAll(this.opts.responsiveClass)).filter(t => { { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); this.responsiveVideos = e, this.responsiveLength = e.length } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("scroll", this.lazyEvent.bind(this)), this.responsiveCheck && window.addEventListener("resize", this.onResizeHandler.bind(this)) } getCurrentDevice() { this.winWidth = e.winSize().w, this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } onLoadHandler() { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() } onResizeHandler() { clearTimeout(this.opts.resizeStart), this.opts.resizeStart = setTimeout(() => { this.getCurrentDevice(), this.responsiveHandler(), this.lazyEvent() }, 80) } lazyEvent() { this.setLazyVideo(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.lazyEvent.bind(this)) } responsiveHandler() { this.windowWidth = window.innerWidth; var a = this.opts.loadOption.length; for (let s = 0; s < a; s++) { let e = s + 1, t = e == a ? 0 : this.opts.loadOption[e].resolution, i = !1; (i = (0 == s || this.windowWidth <= this.opts.loadOption[s].resolution) && this.windowWidth > t) && this.opts.loadOption[s].attribute !== this.oldAttr && (this.targetAttr = this.opts.loadOption[s].attribute, this.oldAttr = this.targetAttr, this.attrIndex = s, this.setResponsiveVideo()) } } setResponsiveVideo() { for (let e = 0; e < this.responsiveLength; e++) { const i = this.responsiveVideos[e], s = i.querySelector("video"), a = i.getAttribute(this.targetAttr); i.classList.contains(this.classes.loaded) && i.isVideoInit && s.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); - 1 < t.indexOf("webm") && (e.src = a + ".webm"), -1 < t.indexOf("mp4") && (e.src = a + ".mp4"), s.load(), s.addEventListener("canplaythrough", () => { window.setTimeout(() => { i.classList.add(this.classes.loaded) }, 500), this.checkCompleteVideo(), this.getEndImage(i) }, { once: !0 }) }) } } setLazyVideo() { for (let e = 0; e < this.lazyLength; e++) { var t = window.pageYOffset, i = t + window.innerHeight; const n = this.lazyVideos[e]; var s = n.getBoundingClientRect(), a = t + s.top, s = t + s.bottom; i > a - window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && t < s + window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && !n.isVideoInit && this.videoCallStack.indexOf(e) < 0 && (this.videoCallStack.push(e), this.setVideoSrc()) } } setVideoSrc() { var e = this.videoCallStack[0]; const t = this.lazyVideos[e], i = t.querySelector("video"), s = t.getAttribute(this.targetAttr); e = this.opts.lazyClass.split("."); const a = e[e.length - 1]; e = s; this.prevVideoSrc !== e && (i.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); - 1 < t.indexOf("webm") && (e.src = s + ".webm"), -1 < t.indexOf("mp4") && (e.src = s + ".mp4") }), i.load(), i.addEventListener("canplaythrough", () => { window.setTimeout(() => { t.classList.add(this.classes.loaded) }, 500), 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(a), this.checkCompleteVideo(), this.getEndImage(t), this.videoCallStack.splice(0, 1), 0 < this.videoCallStack.length && this.setVideoSrc() }, { once: !0 }), t.isVideoInit = !0), this.prevVideoSrc = e } getEndImage(e) { var t = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const i = e.querySelector(this.opts.imageEndLazyClass); e = this.opts.imageEndLazyClass.split("."); const s = e[e.length - 1]; i && !i.classList.contains(this.opts.imageLazyCompleteClass) && (i.src = i.getAttribute(t), i.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && i.classList.remove(s), i.classList.add(this.opts.imageLazyCompleteClass) }, { once: !0 })) } checkCompleteVideo() { var e = Array.from(this.el.querySelectorAll("." + this.classes.loaded)).filter(t => { { let e = 0; if (e < this.opts.notLoadElement.length) return !t.closest(this.opts.notLoadElement[e]) } }); this.lazyCompleteLength = e.length } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const d = WATCH6.UTILS, e = d.RESPONSIVE; WATCH6.VideoPlayer = class { constructor(e, t) { e = { sectionElement: t.sectionElement, videoParentElement: null, videoElement: e, videoController: ".video__controller", hiddenElement: ".blind", endImage: ".video__end-frame img", videoLazyClass: ".js-video-src", lazyCompleteClass: "load-complete", imageEndLazyClass: ".js-end-img-src", visiblePoint: t.visiblePoint || 0, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused" }, resizeStart: null, on: { updateController: null, updatePlayState: null } }; this.opts = d.def(e, t || {}), this.classes = e.classes, this.init() } init() { this.setElements(), this.initOpts(), null !== this.video && (this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.updateController(), this.bindEvents()) } // (SEC) 삭제하면 안됨 관련 setElements() { this.videoElement = this.opts.videoElement, this.video = this.videoElement.querySelector("video"), null !== this.video && (null !== this.opts.videoParentElement ? this.videoParentElement = this.video.closest(this.opts.videoParentElement) : this.videoParentElement = this.videoElement, this.videoController = this.videoParentElement.querySelector(this.opts.videoController)) } initOpts() { this.getCurrentDevice(), this.autoPlay = !!this.videoElement.dataset.autoPlay && JSON.parse(this.videoElement.dataset.autoPlay), this.videoElement.playState = !1, this.videoElement.autoPlayState = !1, this.useController = !!this.videoController } getCurrentDevice() { this.winWidth = d.winSize().w, this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } getEndImage() { var e = "desktop" === this.currentDevice ? "data-src-pc" : "tablet" === this.currentDevice ? "data-src-tablet" : "data-src-mobile"; const t = this.videoElement.querySelector(this.opts.imageEndLazyClass); var i = this.opts.imageEndLazyClass.split("."); const s = i[i.length - 1]; t && (t.src = t.getAttribute(e), t.addEventListener("load", () => { 1 == this.opts.imageEndLazyClass.split(" ").length && t.classList.remove(s), t.classList.add(this.opts.lazyCompleteClass) }, { once: !0 })) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.video.addEventListener("canplaythrough", this.onCanplayThrough.bind(this), { once: !0 }), this.useController && this.videoController.addEventListener("click", this.onClickController.bind(this)) } onChange(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(e); e = i; this.prevVideoSrc !== e && (this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); - 1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.video.load() }), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 })), this.prevVideoSrc = e } } onLoad(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; const i = this.videoElement.getAttribute(e); this.videoElement.playState = !1, this.video.querySelectorAll("source").forEach(e => { const t = e.getAttribute("type"); - 1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.video.load() }), this.video.addEventListener("canplaythrough", () => { d.isLowNetwork() || this.onPlay(), this.getEndImage() }, { once: !0 }) } } onPlay(e) { var t = () => { 0 < this.video.readyState && !this.videoElement.playState && (this.video.currentTime === this.video.duration && (this.video.currentTime = 0), this.autoPlay && (this.videoElement.autoPlayState = !0), this.videoElement.playState = !0, this.videoElement.classList.contains(this.classes.paused) ? this.videoElement.classList.add(this.classes.playing) : window.setTimeout(() => { this.videoElement.classList.add(this.classes.playing) }, 350), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.paused), window.setTimeout(() => { this.video.play(), this.updateController(), this.outCallback("updatePlayState", !0) }, 350), this.video.addEventListener("ended", this.updatePlayEnded.bind(this), { once: !0 })) }; e && e !== this.videoElement || t() } onPause() { this.video.paused || this.video.pause(), this.videoElement.playState = !1, this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.add(this.classes.paused), this.updateController() } onEnded() { 3 < this.video.readyState && (this.video.ended || this.video.pause(), this.video.currentTime = this.video.duration, this.videoElement.playState = !1, this.videoElement.classList.add(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController()) } onReset(e) { var t = () => { this.video.pause(), this.video.currentTime = 0, this.videoElement.playState = !1, this.autoPlay && (this.videoElement.autoPlayState = !1), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController() }; e && e !== this.videoElement || t() } onCanplayThrough() { var e = this.opts.videoLazyClass.split("."), e = e[e.length - 1]; this.useController && window.setTimeout(() => { this.videoController.style.display = "block" }, 500), this.videoElement.classList.add(this.classes.loaded), 1 == this.opts.videoLazyClass.split(" ").length && this.videoElement.classList.remove(e), this.isCanplay = !0, this.onScrollHandler(), this.isCanplay = !1 } onClickController(e) { e.preventDefault(), this.videoElement.playState ? this.onPause() : this.onPlay() } updatePlayEnded() { this.onPause() } updateController() { var e; this.useController && (this.videoElement.playState ? this.videoController.classList.add(this.classes.isPaused) : this.videoController.classList.remove(this.classes.isPaused), e = { el: this.videoController, playState: this.videoElement.playState }, this.outCallback("updateController", e)) } onScrollHandler() { if (!this.videoElement.closest(".cm-layer")) { var e = window.scrollY, t = e > this.lastScrollY ? "down" : "up", i = d.getHeight(this.videoElement), i = (d.winSize().h, .5 * i), s = d.getScroll().top, a = d.getScroll().bottom, n = d.getOffset(this.videoElement).top, r = d.getOffset(this.videoElement).bottom - i; const h = this.videoElement.classList.contains(this.classes.playing) && this.videoElement.playState; var o = this.videoElement.classList.contains(this.classes.paused) && !this.videoElement.playState, l = this.videoElement.classList.contains(this.classes.ended) && !this.videoElement.playState; if (r + i < s) this.autoPlay && (this.videoElement.autoPlayState ? (h || o) && this.onEnded() : this.videoElement.classList.add(this.classes.ended)); else if (a < n) this.autoPlay && this.videoElement.autoPlayState && (h || o || l) && this.onReset(); else if (r < a && s < n) { const h = this.isCanplay || "down" == t; !h || !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || d.isLowNetwork() || this.onPlay() } this.lastScrollY = e } } onResponsiveChange() { window.setTimeout(() => { this.isCanplay = !0, this.onReset(), this.onScrollHandler(), this.isCanplay = !1 }, 20) } onResizeHandler() { d.winSize().w !== this.winWidth && (this.winWidth = d.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = d.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, d.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } outCallback(e, t) { e = this.opts.on[e]; null != e && e(t) } } }(), function() { "use strict"; e = !(r = {}), h = t = null, s = function() { a(), n(), UTILS.isLowNetwork() && document.documentElement.classList.add("low_network"), document.documentElement.classList.add("load"), window.removeEventListener("load", s) }, a = function() { e = 1024 <= window.innerWidth ? "desktop" : 768 <= window.innerWidth && window.innerWidth < 1024 ? "tablet" : "mobile", clearTimeout(r.resizeTimeout), r.resizeTimeout = setTimeout(function() { UTILS.isBrokenFixed() }, 100), e != t && (document.documentElement.classList.add(e), document.documentElement.classList.remove(t), t = e) }, n = function() { for (var e = window.pageYOffset, t = e + window.innerHeight, i = 0; i < r.allClickables.length; i++) { var s = r.allClickables[i], a = e + s.getBoundingClientRect().top, n = e + UTILS.getNavHeight(); n <= a && a <= t ? s.isVisible = !0 : (a < n || t < a) && (s.isVisible = !1) } }, o = function(e) { e.preventDefault(), e.stopPropagation(); var t = this, i = parseFloat(this.innerText), s = document.querySelectorAll("#desc-section li"), a = document.querySelectorAll("#desc-section li")[i - 1], n = a.querySelector("span"), r = n.innerText, o = (n.innerHTML = '' + r + "", h = e.currentTarget, function() { d.call(t), n.removeEventListener("focusin", o) }), l = function() { n.innerHTML = r, n.removeAttribute("tabindex"), n.removeEventListener("focusout", l) }; e.currentTarget.closest(".cm-layer") && (i = e.currentTarget.closest(".cm-layer"), $(i).trigger("closeLayer", !1)), n.addEventListener("focusin", o), n.addEventListener("focusout", l), setTimeout(() => { a.querySelector("a").focus() }, 0), s.forEach(e => e.classList.remove("is-active")), a.classList.add("is-active") }, l = function(e) { var e = e.target.closest("li"), t = e.getAttribute("data-sup"), i = document.querySelectorAll(".click_sup"); for (let e = 0; e < i.length; e++) i[e].innerText === t && (d.call(this), h.focus()); var s = h.closest(".cm-layer"); if (s) { var a = s.id; const n = s.parentNode, r = n.querySelector(`[data-layer-target="#${a}"]`); h.innerText === t && r.focus() } e.classList.remove("is-active") }, d = function(e) { var s; !document.documentElement.classList.contains("ios") && e && null == e.relatedTarget || ((s = this).isClicked || this.isVisible || i(this) || setTimeout(function() { var e = window.pageYOffset, t = s.getBoundingClientRect(), i = (window.innerHeight - UTILS.getNavHeight()) / 2, e = e - UTILS.getNavHeight() + t.top + t.height / 2; window.scrollTo(0, e - i) }, 10), this.isClicked = !1) }, i = function(e) { var e = e.parentNode, t = e.getAttribute("id"); return "contents" != t && e != document.body && (!("subnav" != t && !e.classList.contains("sc-s22ultra-popup")) || i(e)) }, c = function() { this.isClicked = !0 }; var r, e, t, h, s, a, n, o, l, d, i, c, u = { init: function() { r.resizeTimeout = null, r.supClicker = document.querySelectorAll("a.click_sup"), r.supTopBtn = document.querySelectorAll("button.click_disclaimer"), r.contents = document.getElementById("contents") || document.getElementById("content"), r.allClickables = r.contents.querySelectorAll("a, button, input, select"); var e = 0; for (window.addEventListener("load", s), window.addEventListener("resize", a), window.addEventListener("scroll", n), e = 0; e < r.allClickables.length; e++) { var t = r.allClickables[e]; t.isClicked = !1, t.isVisible = !1, t.addEventListener("focusin", d), t.addEventListener("mousedown", c) } for (e = 0; e < r.supClicker.length; e++) r.supClicker[e].addEventListener("click", o); for (e = 0; e < r.supTopBtn.length; e++) r.supTopBtn[e].addEventListener("click", l); var i = document.documentElement.classList; "global" == UTILS.checkRegion() || i.contains("mac") || i.contains("safari") || ANIUTIL.scrollController({ speed: 120, duration: .5 }) } }; window.initialize = u }(), function(e) { e.TrapFocus = function() { "use strict"; var e, g = void 0, t = window, i = t.document, w = t.jQuery, s = null, a = t.WATCH6.UTILS; function n(e, t) { if (!(this instanceof n)) return new n(e, t); var i = { obj: e, prevStep: null, isDestroy: false, IgnoreUtilFocusChanges: false, ariaAttr: { hidden: "aria-hidden", disabled: "aria-disabled", modal: "aria-modal" }, ariaNotHidden: (() => { return t && t.ariaNotHidden ? t.ariaNotHidden : [] })(), classAttr: { clone: "trapfocus" }, elAttr: { tabIndex: "tabindex", role: "role" }, customEvent: ".TrapFocus" + (new Date).getTime() + Math.random() }; this.opts = a.def(i, t || {}); if (!(this.obj = w(this.opts.obj)).length) return; if (s != null) s.destroy(); s = this; this.init() } return n.prototype = { init: function() { this.initLayout(); this.buildAria(); this.bindEvents(true); this.loadComponent(); this.obj.data("TrapFocus", this) }, initLayout: function() { var e = this.opts.ariaAttr; var t = this.opts.elAttr; this.obj.attr(e.modal, "true"); this.obj.attr(t.role, "dialog") }, buildAria: function() { var v = this.opts.ariaAttr; var f = this.opts.elAttr; var e = "head, script, noscript, link, style, meta"; var t = this.opts.ariaNotHidden.length > 0 ? `, ${this.opts.ariaNotHidden.join(",")}` : ""; a.def(this, { aria: { notHidden: Array(e + t), focusType: ["A", "BUTTON", "INPUT", "SELECT", "TEXTAREA"], dataAttr: { ariaHidden: "trapfocusariahidden", ariaDisabled: "trapfocusariadisabled", tabIndex: "trapfocustabindex", role: "trapfocusrole" }, destroy: w.proxy(function() { var a = this.aria.dataAttr; var n = this.aria.hiddenEls; var s = this.aria.focusEls; var r = this.aria.tabindexEls; for (var e = 0, t = n.length; e < t; e++)(function(e) { var t = n.eq(e), i = t.data(a.ariaHidden), s = t.data(a.role); if (i != g) { t.attr(v.hidden, i); t.removeData(a.ariaHidden) } else t.removeAttr(v.hidden); if (s != g) { t.attr(f.role, s); t.removeData(a.role) } else t.removeAttr(f.role) })(e); for (var i = 0, o = s.length; i < o; i++)(function(e) { var t = s.eq(e), i = t.data(a.ariaDisabled); t.removeAttr(f.tabIndex); if (i != g) { t.attr(v.disabled, i); t.removeData(a.ariaDisabled) } else t.removeAttr(v.disabled) })(i); for (var l = 0, h = r.length; l < h; l++)(function(e) { var t = r.eq(e), i = t.data(a.tabIndex); if (i != g) { t.attr(f.tabIndex, i); t.removeData(a.tabIndex) } else t.removeAttr(f.tabIndex) })(l); var d = document.getElementById("teconsent"); if (d) { var c = d.querySelector("a"); if (c && c.getAttribute("tabindex") === "-1") { c.setAttribute("tabindex", "0"); c.removeAttribute("aria-disabled") } } }, this), build: w.proxy(function() { var i = this; var e = this.aria.focusType; var a = this.aria.dataAttr; var s = this.obj.parents(); var n = this.obj.siblings().not(i.aria.notHidden.join(",")); var r = w("

      "); var o = w(""); for (var t = 0, l = s.length; t < l; t++)(function(e) { var t = s.eq(e); n = n.add(t.siblings().not(i.aria.notHidden.join(","))) })(t); r = r.add(n); o = o.add(n); this.obj.removeAttr(v.hidden); for (var h = 0, d = n.length; h < d; h++)(function(e) { var t = n.eq(e), i = t.attr(v.hidden), s = t.attr(f.role); if (i != g) t.data(a.ariaHidden, i); if (s != g) t.data(a.role, s); t.attr(v.hidden, "true"); t.attr(f.role, "none presentation") })(h); r = r.add(n.find(e.join(",").toLowerCase())); for (var c = 0, u = r.length; c < u; c++)(function(e) { var t = r.eq(e), i = t.attr(v.disabled); if (i != g) t.data(a.ariaDisabled, i); t.attr(v.disabled, "true"); setTimeout(() => { t.attr(f.tabIndex, -1) }) })(c); o = o.add(n.find("[" + f.tabIndex + "]")); for (var p = 0, m = o.length; p < m; p++)(function(e) { var t = o.eq(e), i = t.attr(f.tabIndex); if (i != g) t.data(a.tabIndex, i); t.attr(f.tabIndex, -1) })(p); this.aria.hiddenEls = n; this.aria.focusEls = r; this.aria.tabindexEls = o }, this) } }) }, changeEvents: function(e) { var t = [], i = e.split(" "); for (var s in i) t.push(i[s] + this.opts.customEvent); return t.join(" ") }, bindEvents: function(e) { if (e) w(i).on(this.changeEvents("focusin"), w.proxy(this.trapFocus, this)); else w(i).off(this.changeEvents("focusin")) }, focusFirstDescendant: function(e) { for (var t = 0; t < e.childNodes.length; t++) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusFirstDescendant(i)) return true } return false }, focusLastDescendant: function(e) { for (var t = e.childNodes.length - 1; t >= 0; t--) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusLastDescendant(i)) return true } return false }, isFocusable: function(e) { if (e.tabIndex > 0 || e.tabIndex === 0 && e.getAttribute("tabIndex") !== null) return true; if (e.disabled) return false; switch (e.nodeName) { case "A": return !!e.href && e.rel != "ignore"; case "INPUT": return e.type != "hidden" && e.type != "file"; case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return true; default: return false } }, attemptFocus: function(e) { if (this.opts.isDestroy) return; if (!this.isFocusable(e)) return false; this.opts.IgnoreUtilFocusChanges = true; try { e.focus() } catch (e) {} this.opts.IgnoreUtilFocusChanges = false; return document.activeElement === e }, trapFocus: function(e) { if (this.opts.isDestroy) return; if (this.opts.IgnoreUtilFocusChanges) return; var t = document; this.dynamicComponentFocus() }, loadComponent: function() { this.dynamicComponentFocus(); setTimeout(() => { this.dynamicComponentFocus() }, 3e3); this.focusFirstDescendant(this.obj[0]); this.lastFocus = document.activeElement; this.aria.build() }, dynamicComponentFocus: function() { const o = this.opts.ariaAttr; const l = this.opts.elAttr; setTimeout(() => { var e = document.getElementById("QSIFeedbackButton-btn"); var t = document.getElementById("QSIFeedbackButton-close-btn"); var i = document.getElementById("nebula_div_btn"); var s = document.getElementById("spr-live-chat-app"); var a = document.getElementById("teconsent"); if (e) { var n = e.parentElement; e.setAttribute(o.disabled, "true"); e.setAttribute(l.tabIndex, "-1"); n.setAttribute(o.disabled, "true"); n.setAttribute(o.hidden, "true"); n.setAttribute(l.tabIndex, "-1"); n.setAttribute(l.role, "none presentation") } if (i) { var r = i.parentElement; i.setAttribute(o.disabled, "true"); i.setAttribute(l.tabIndex, "0"); r.setAttribute(o.disabled, "true"); r.setAttribute(o.hidden, "true"); r.setAttribute(l.tabIndex, "-1"); r.setAttribute(l.role, "none presentation") } if (s) { s.setAttribute(o.disabled, "true"); s.setAttribute(o.hidden, "true"); s.setAttribute(l.tabIndex, "-1"); s.setAttribute(l.role, "none presentation") } if (a && a.hasAttribute("aria-label")) setTimeout(() => { var e = a.querySelector("a"); e.setAttribute(l.tabIndex, "-1"); e.setAttribute(o.disabled, "true"); e.setAttribute(o.hidden, "true") }) }) }, destroy: function() { s = null; this.opts.isDestroy = true; var e = this.opts.ariaAttr; var t = this.opts.elAttr; this.bindEvents(false); this.aria.destroy(); this.obj.removeAttr(e.modal) } }, n }() }(window), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const n = WATCH6.UTILS, e = n.RESPONSIVE; WATCH6.HeightMatch = class { constructor(e = container, t) { var i = { container: e || ".heightmatch-wrap", childElement: ">li", notCompareElement: null, pushElement: null, matchElement: ".heightmatch-cont", column: 3, pushObjs: null, useDestroyHeight: !0, destroyType: !1, resizeStart: null, breakpoints: {}, matchBefore: null, matchAfter: null, loadAfter: null }; this.opts = n.def(i, t || {}), this.classes = i.classes, this.obj = $(document.querySelector(e)), this.init() } init() { null !== this.obj && (this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("loadAfter"), this.bindEvents()) } setElements() { this.objChild = this.obj.find(this.opts.childElement), (this.opts.pushObjs = null) == this.opts.pushElement ? this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement) : this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement).find(this.opts.pushElement) } setOpts() { this.currentDevice = !1, this.prevDevice = null; var e, t, i = n.winSize().w, s = this.opts.breakpoints, a = []; for (t in s) e = i <= t ? (a.push(t), Math.min.apply(null, a)) : null; this.breakOpts = n.def({}, this.opts), null != e && (this.breakOpts = n.def(this.breakOpts, s[e])) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { n.winSize().w !== this.winWidth && (this.winWidth = n.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.outCallback("matchBefore"), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.resizeRequestFrame = n.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("matchAfter"), n.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice, this.prevDevice, this.prevDevice = this.currentDevice } setRows() { this.rowNum = Math.ceil(this.objChild.length / this.breakOpts.column) } buildHeightControl() { this.breakOpts.column <= 1 ? null !== this.opts.pushObjs && this.opts.pushObjs.css("height", "") : this.buildHeight() } buildHeight() { this.heightArray = []; for (var e = 0; e < this.rowNum; e++) this.heightArray[e] = []; for (var e = 0, t = this.objChild.length; e < t; e++) { var i = parseInt(e / this.breakOpts.column, 10), s = this.objChild.eq(e).not(this.opts.notCompareElement).find(this.opts.matchElement), s = s.is(":visible") ? Math.ceil(s.outerHeight()) : 0; this.heightArray[i].push(s) } for (e = 0; e < this.rowNum; e++) this.heightArray[e] = Math.max.apply(null, this.heightArray[e]); this.setHeightLayout() } setHeightLayout() { for (var e = 0, t = this.objChild.length; e < t; e++) { var i = parseInt(e / this.breakOpts.column, 10); (null == this.opts.pushElement ? this.objChild.eq(e).not(this.opts.notCompareElement) : this.objChild.eq(e).not(this.opts.notCompareElement).find(this.opts.pushElement)).height(this.heightArray[i]) } } destroy() { this.opts.useDestroyHeight && null !== this.opts.pushObjs && this.opts.pushObjs.css("height", ""), this.opts.destroyType = !0, this.bindEvents(!1) } reInit() { this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.onResizeHandler(), this.opts.destroyType && (this.opts.destroyType = !1, this.bindEvents(!0)) } outCallback(e) { e = this.opts[e]; null != e && e() } } }(), function(e) { e.HiveLayer = function() { "use strict"; var e, o = window, l = o.jQuery, t = o.document, h = o.WATCH6.UTILS, d = []; function s(e, t) { if (!(this instanceof s)) return new s(e, t); var i = { effect: "fade", layerWrapElements: e, layerBody: ".cm-layer__body", layerElements: ".cm-layer__wrapper", openerElements: ".js-layer-opener", closerElements: ".js-layer-closer", dimmedElements: ".cm-layer__dimmed", classAttr: { htmlToggle: "is-layer-open", isAsync: "is-async" }, focusOutObj: { CSS: { overflow: "hidden", position: "absolute", left: 0, top: 0, "z-index": -1, width: 1, height: 1, "font-size": "1px", "line-height": 0 } }, customEvent: ".HiveLayer" + (new Date).getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, flip: { CLASS: "hive-layer-flip", direction: "horizontal", rotateStart: 90, rotateEnd: 0 }, customToggle: false, dimmedDuration: 250, fps: 120, easing: "swing", duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null }, ariaNotHidden: [] }; if (!(this.layerWrap = i.layerWrapElements).length) return; this.layerWrap = l(i.layerWrapElements); this.opts = h.def(i, t || {}); this.init() } return s.prototype = { init: function() { this.initOpts(); this.setElements(); this.initLayout(); this.buildTween(); this.buildTrapFocus(); this.bindEvents(true); this.layerWrap.data("HiveLayer", this) }, initOpts: function() { this.layerWrapInstance = "#" + this.layerWrap.attr("id"); if (!this.opts.isSupportTransition && this.opts.effect === "flip") this.opts.effect = "default"; if (this.opts.effect == "custom") { this.opts.effect = "default"; this.opts.customToggle = true } }, setElements: function() { this.layerBody = this.layerWrap.find(this.opts.layerBody); this.layerObj = this.layerWrap.find(this.opts.layerElements); this.closerObj = this.layerWrap.find(this.opts.closerElements); this.dimmedObj = this.layerWrap.find(this.opts.dimmedElements) }, initLayout: function() { if (this.opts.effect === "slide") { this.dimmedObj.hide(); this.layerObj.hide() } else if (this.opts.effect === "flip") { var e = this.opts.flip.direction; if (e !== "vertical") this.opts.flip.cssD = "rotateY"; else this.opts.flip.cssD = "rotateX"; this.dimmedObj.hide(); this.layerObj.hide(); this.layerWrap.addClass(this.opts.flip.CLASS) } }, buildTween: function() { h.def(this, { tweens: { instance: [], kill: l.proxy(function() { for (var e = 0, t = this.tweens.instance.length; e < t; e++) this.tweens.instance[e].kill(); this.tweens.instance = [] }, this) } }) }, buildTrapFocus: function() { if (!this.opts.useTrapFocus) return; h.def(this, { trapfocus: { instance: null, destroy: l.proxy(function() { if (this.trapfocus.instance == null) return; this.trapfocus.instance.destroy(); this.trapfocus.instance = null }, this), build: l.proxy(function() { if (this.trapfocus.instance !== null) return; this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden }) }, this) } }) }, bindEvents: function(e) { if (e) { l(t).on("click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', l.proxy(this.onLayerOpen, this)); this.layerWrap.on("openLayer", l.proxy(this.onLayerOpen, this)); this.closerObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)); this.layerWrap.on("layerSetOptions", l.proxy(this.setOptions, this)); if (this.opts.useEscape) this.layerObj.on("keydown", l.proxy(this.onEscapeClose, this)) } else { l(t).off("click clickCustom"); this.layerWrap.off("openLayer"); this.closerObj.off("mousedown click clickCustom"); this.layerWrap.off("layerSetOptions"); if (this.opts.useEscape) this.layerObj.off("keydown") } }, bindOutsideEvents: function(e) { if (!this.opts.useOutside) return; if (e) this.layerObj.on("clickoutside touchendoutside", l.proxy(this.onLayerOutsideFunc, this)); else this.layerObj.off("clickoutside touchendoutside") }, bindCloseEvents: function(e) { if (e) this.layerWrap.on("closeLayer", l.proxy(this.closeLayer, this)); else this.layerWrap.off("closeLayer") }, setOptions: function(e, t) { h.def(this.opts, t || {}); if (t.customToggle) this.opts.effect = "default" }, setScrollLock: function(e) { if (!this.opts.useScrollLock) return; if (e) h.page.scrollLock.on(); else h.page.scrollLock.off(); l("html").toggleClass(this.opts.classAttr.htmlToggle, e) }, onLayerOpen: function(e) { e.preventDefault(); setTimeout(() => { this.dimmedObj.on("mousedown click clickCustom", l.proxy(this.onLayerClose, this)) }, 500); if (e.type === "click" || e.type === "clickCustom") this.opts.openerTarget = l(e.currentTarget); if (e.type === "click") if (this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync)) return; this.layerViewType = "open"; d.push({ POPUPWRAP: this.layerWrap }); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 0; document.querySelector("html.load div#header").style.pointerEvents = "none" } this.setScrollLock(true); this.bindCloseEvents(true); if (this.opts.effect === "default") if (!this.opts.customToggle) { this.layerWrap.css({ opacity: 0, display: "block", visibility : "visible" // (SEC) 팝업 내 이미지 안보이는 현상 (추가) }); this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerWrap.css("opacity", ""); this.openAfterBugFunc() } else this.outCallback("layerOpenBefore"); else if (this.opts.effect === "fade") { this.layerWrap.css({ opacity: 0, display: "block" }); this.outCallback("layerOpenBefore"); TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: "hidden" }); this.outCallback("buildTools"); var t = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: l.proxy(function() { var e = TweenLite.to(this.layerBody, .25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: l.proxy(function() { this.layerBody.css({ overflow: "", transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(e) }, this) }); this.tweens.instance.push(t) } else if (this.opts.effect === "slide") { var i = 1; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerBody, { overflow: "hidden" }); TweenLite.set(this.layerObj, { display: "", y: -h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var t = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function() { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(s) } else if (this.opts.effect === "slide2") { var i = .6; TweenLite.set(this.dimmedObj, { display: "block", opacity: 0 }); TweenLite.set(this.layerWrap, { display: "block" }); TweenLite.set(this.layerObj, { display: "", y: h.winSize().h }); TweenLite.set(this.layerObj, { display: "" }); this.outCallback("layerOpenBefore"); var t = TweenLite.to(this.dimmedObj, i, { opacity: .9 }); var s = TweenLite.to(this.layerObj, i, { y: 0, onComplete: l.proxy(function() { this.outCallback("buildTools"); this.layerBody.css({ overflow: "" }); this.layerObj.css({ transform: "" }); this.openAfterBugFunc() }, this) }); this.tweens.instance.push(t); this.tweens.instance.push(s) } else if (this.opts.effect === "flip") { var a = this.opts.flip.rotateEnd - this.opts.flip.rotateStart, n = a / this.opts.duration * (1e3 / this.opts.fps), r = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateStart, endDistance: this.opts.flip.rotateEnd, moveDistance: a, moveOneStep: n, currentStep: r }; this.layerWrap.show(); this.dimmedObj.fadeIn(this.opts.dimmedDuration, l.proxy(function() { this.outCallback("layerOpenBefore"); this.outCallback("buildTools"); this.layerObj.show(); this.initStep(this.opts.flip.moveData); this.flipFunc() }, this)); o.setTimeout(l.proxy(function() { this.outCallback("buildTools") }, this), 30) } this.ariaAccessbility(true, this.layerWrap) }, initStep: function(e) { this.opts.stepTimeOld = new Date; this.direction = e.startDistance > e.moveDistance ? "toNext" : "toPrev"; this.condition = this.direction === "toNext" ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance }, moveStep: function(e) { this.opts.stepTimeNew = new Date; this.opts.remaining = Math.max(0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration); var t = this.opts.remaining / this.opts.duration || 0, i = 1 - t, s = l.easing[this.opts.easing](i, this.opts.duration * i, 0, 1, this.opts.duration); e.currentStep = (e.endDistance - e.startDistance) * s }, flipFunc: function() { var e = this.opts.flip.moveData; this.moveStep(e); if (this.condition) { o.clearTimeout(this.stepTimeout); this.stepTimeout = o.setTimeout(l.proxy(function() { this.flipFunc() }, this), 1e3 / this.opts.fps); this.condition = this.direction === "toNext" ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance; this.outCallback("layerMove", e.currentStep, e) } else { this.opts.remaining = this.opts.duration; if (this.layerViewType === "close" || !this.layerViewType) { this.closeAfterBugFunc(); this.dimmedObj.fadeOut(this.opts.dimmedDuration, l.proxy(function() { this.layerWrap.hide(); this.layerObj.hide() }, this)) } else this.openAfterBugFunc() } var t = e.startDistance + e.currentStep; this.layerObj.css({ transform: this.opts.flip.cssD + "(" + t + "deg)" }) }, onLayerOpenAfter: function() { if (this.trapfocus) this.trapfocus.build(); this.bindOutsideEvents(true); this.outCallback("layerOpenAfter") }, openAfterBugFunc: function() { o.clearTimeout(this.openAfterTimeout); this.openAfterTimeout = o.setTimeout(l.proxy(this.onLayerOpenAfter, this), 30) }, onLayerClose: function(e) { var t = l(e.currentTarget); if (e.type === "mousedown") { if (!h.isDevice) { e.stopPropagation(); this.opts.useCloseFocus = false } } else if (e.type === "click" || e.type === "clickCustom") { e.preventDefault(); if (e.type === "click") if (t.hasClass(this.opts.classAttr.isAsync)) return; this.layerWrap.trigger("closeLayer"); this.dimmedObj.off("mousedown click clickCustom") } }, closeLayer: function() { this.closeType = arguments[1]; this.layerViewType = "close"; this.outCallback("layerCloseBefore"); this.popupOpenPropsControl(); this.setScrollLock(false); if (this.trapfocus) this.trapfocus.destroy(); if (document.querySelector("html.load div#header")) { document.querySelector("html.load div#header").style.opacity = 1; document.querySelector("html.load div#header").style.pointerEvents = "unset" } this.ariaAccessbility(false, this.layerWrap); o.clearTimeout(this.closeBeforeTimeout); this.closeBeforeTimeout = o.setTimeout(l.proxy(this.closeBeforeBugFunc, this), 30); this.bindOutsideEvents(false) }, onEscapeClose: function(e) { var t = e.which || e.keyCode; if (t !== 27) return; this.layerWrap.trigger("closeLayer") }, onLayerOutsideFunc: function() { this.layerWrap.trigger("closeLayer") }, closeBeforeBugFunc: function() { if (this.opts.effect === "default") { if (!this.opts.customToggle) this.layerWrap.stop(true, true).hide(); this.closeAfterBugFunc() } else if (this.opts.effect === "fade") { var e = TweenLite.to(this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: l.proxy(function() { this.layerBody.css("overflow", ""); var e = TweenLite.to(this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: l.proxy(this.closeAfterBugFunc, this) }); this.tweens.instance.push(e) }, this) }); this.tweens.instance.push(e) } else if (this.opts.effect === "slide") { var t = 1; TweenLite.set(this.layerBody, { overflow: "hidden" }); var e = TweenLite.to(this.dimmedObj, t, { opacity: 0 }); var i = TweenLite.to(this.layerObj, t, { y: -h.winSize().h, onComplete: l.proxy(function() { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(i) } else if (this.opts.effect === "slide2") { var t = .5; var e = TweenLite.to(this.dimmedObj, t, { opacity: 0 }); var i = TweenLite.to(this.layerObj, t, { y: h.winSize().h, onComplete: l.proxy(function() { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css("overflow", ""); this.layerObj.hide() }, this) }); this.tweens.instance.push(e); this.tweens.instance.push(i) } else if (this.opts.effect === "flip") { var s = -this.opts.flip.rotateStart - this.opts.flip.rotateEnd, a = s / this.opts.duration * (1e3 / this.opts.fps), n = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateEnd, endDistance: -this.opts.flip.rotateStart, moveDistance: s, moveOneStep: a, currentStep: n }; this.initStep(this.opts.flip.moveData); this.flipFunc() } }, closeAfterBugFunc: function() { o.clearTimeout(this.closeAfterTimeout); this.closeAfterTimeout = o.setTimeout(l.proxy(this.onLayerCloseAfter, this), 30) }, popupOpenPropsControl: function() { var e = d; for (var t = 0, i = e.length; t < i; t++) { var s = e[t], a = s["POPUPWRAP"][0]; if (a === this.layerWrap[0]) e[t] = null } for (var n = 0, r = e.length; n < r; r--) { var o = e[r - 1]; if (o === null) e.splice(r - 1, 1) } }, onLayerCloseAfter: function() { if (this.opts.openerTarget !== null) { if (this.closeType !== false) this.opts.openerTarget.focus(); this.opts.openerTarget = null } this.opts.useCloseFocus = true; this.bindCloseEvents(false); this.outCallback("layerCloseAfter") }, ariaAccessbility: function(e, t) {}, outCallback: function(e) { var t = this.opts.on[e]; if (e === "layerMove") this.layerWrap.trigger(e, arguments[1], arguments[2], this); else this.layerWrap.trigger(e, this); if (t == null) return; if (e === "layerMove") t(arguments[1], arguments[2], this); else t(this) }, styleDestroy: function() { this.dimmedObj.attr("style", ""); this.layerWrap.attr("style", ""); this.layerBody.attr("style", ""); this.layerObj.attr("style", "") }, destroy: function() { this.tweens.kill(); if (this.trapfocus) this.trapfocus.destroy(); this.styleDestroy(); this.bindEvents(false); this.bindOutsideEvents(false); this.bindCloseEvents(false) } }, s }() }(window), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const r = WATCH6.UTILS; r.RESPONSIVE; WATCH6.SubNav = class { constructor(e = container, t) { var i = { navItems: "ul li>a", navDests: '[class*="js-nav-"]', visSections: ".js-visible", resizeStart: null, classes: { isOn: "on" } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.navItems = r.convertArray(this.el.querySelectorAll(this.opts.navItems)), this.navDests = document.querySelectorAll(this.opts.navDests), this.visSections = r.convertArray(document.querySelectorAll(this.opts.visSections)) } initOpts() { this.visCount = -1, this.visSections.forEach(e => { e.dataset.visIndex = e.classList.contains("js-count") ? ++this.visCount : this.visCount }), this.winOffsetTop = window.pageYOffset } bindEvents() { this.onScrollHandler(), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)); const i = window.location.hash; this.navItems.forEach((e, t) => { -1 < e.getAttribute("href").indexOf("#") && (e.dataset.navIndex = t, e.addEventListener("click", this.onNavItemClickEvent.bind(this))), i && -1 < e.getAttribute("href").indexOf(i) && (e.parentNode.classList.remove(this.classes.isOn), e.click()) }) } onNavItemClickEvent(t) { t.preventDefault(); t = t.target; const i = t.parentNode; if (!this.el.classList.contains("hold") && !i.classList.contains(this.classes.isOn)) { this.navItems.forEach(e => { e.parentNode.classList.remove(this.classes.isOn) }), i.classList.contains(this.classes.isOn) || i.classList.add(this.classes.isOn); t = t.dataset.navIndex; const n = this.navDests[t]; var t = n.getBoundingClientRect(), s = parseInt(window.getComputedStyle(n).paddingTop), a = (window.innerHeight - (t.height - s) + r.getNavHeight()) / 2; let e = 0; (e = n.classList.contains("js-nav-center") ? this.winOffsetTop + t.top + s - a : this.winOffsetTop + t.top - r.getNavHeight()) < 150 && (e = 0), this.el.classList.add("hold"), GALAXY.setSmoothScrollTop(e, 1500, () => { this.el.classList.contains("hold") && this.el.classList.remove("hold"), GALAXY.header && GALAXY.header.resetSubNav() }) } } onScrollHandler() { this.winOffsetTop = window.pageYOffset; var a = (window.innerHeight + r.getNavHeight()) / 2; this.visSections.forEach(e => { var i, t = e.getBoundingClientRect(), s = this.winOffsetTop + t.top, t = this.winOffsetTop + t.bottom; this.winOffsetTop + a >= s && this.winOffsetTop + a <= t && (i = e.dataset.visIndex, this.navItems.forEach((e, t) => { t != i && e.parentNode.classList.contains(this.classes.isOn) && e.parentNode.classList.remove(this.classes.isOn) }), (s = this.navItems[i].parentNode).classList.contains(this.classes.isOn) || (s.classList.add(this.classes.isOn), !this.el.classList.contains("hold") && s.classList.contains(this.classes.isOn) && GALAXY.header && GALAXY.header.resetSubNav())) }) } onResizeHandler() { r.winSize().w !== this.winWidth && (this.winWidth = r.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.onScrollHandler(), this.resizeRequestFrame = r.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, r.cancelAFrame.call(window, this.resizeRequestFrame) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Band = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const e = WATCH6.UTILS, t = e.RESPONSIVE; WATCH6.Battery = class { constructor(e = container, t) { var i = { el: e, popupEl: ".wearable-watch-battery-processor__popup", processorLayerEl: ".wearable-watch-battery-processor__popup.processor-popup", batteryLayerEl: ".wearable-watch-battery-processor__popup.battery-popup", videoElement: ".video__container", featureHide: "is-feature-hide", resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer(), this.buildLayer(), this.bindEvents()) } setElements() { this.processorLayerEl = this.el.querySelector(this.opts.processorLayerEl), this.batteryLayerEl = this.el.querySelector(this.opts.batteryLayerEl), this.videoElement = this.el.querySelectorAll(this.opts.videoElement), this.processorVideoElement = this.processorLayerEl.querySelector(this.opts.videoElement), this.batteryVideoElement = this.batteryLayerEl.querySelector(this.opts.videoElement) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { e.winSize().w !== this.winWidth && (this.winWidth = e.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = e.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, e.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { "block" === this.processorLayerEl.style.display && this.videoPlayer.change(this.processorVideoElement), "block" === this.batteryLayerEl.style.display && this.videoPlayer.change(this.batteryVideoElement) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } buildVideoPlayer() { this.videoPlayer = { instance: [], load: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onLoad(t) }) }, reset: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onReset(t) }) }, play: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onPlay(t) }) }, change: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onChange(t) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((e, t) => { this.videoPlayer.instance.push(new WATCH6.VideoPlayer(e, { sectionElement: this.opts.el, videoParentElement: this.opts.popupEl })) }) } }, this.videoPlayer.build() } buildLayer() { this.layer = { instance: [], build: () => { this.layer.instance.length || (this.layer.instance.push(new HiveLayer(this.opts.processorLayerEl, { effect: "default", on: { layerOpenBefore: () => { this.processorVideoElement && this.videoPlayer.load(this.processorVideoElement) }, layerCloseAfter: () => { this.videoPlayer.reset(this.processorVideoElement) } } })), this.layer.instance.push(new HiveLayer(this.opts.batteryLayerEl, { effect: "default", on: { layerOpenBefore: () => { this.batteryVideoElement && this.videoPlayer.load(this.batteryVideoElement) }, layerCloseAfter: () => { this.videoPlayer.reset(this.batteryVideoElement) } } }))) } }, this.layer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const o = WATCH6.UTILS, e = o.RESPONSIVE; WATCH6.Compare = class { constructor(e = container, t) { var i = { el: e, trackElement: ".wearable-watch-compare__track", fixedElement: ".wearable-watch-compare__fixed", compareWrapEl: ".wearable-watch-compare__list-wrap", compareListEl: ".wearable-watch-compare__list", compareItemEl: ".wearable-watch-compare__list-item", compareImgEl: ".wearable-watch-compare__product-img", compareInfo: ".wearable-watch-compare__info", compareInfoItem: ".wearable-watch-compare__info-item", navigationEl: ".wearable-watch-compare__navigation", colorChipEl: ".wearable-watch-compare__color-chip", colorList: ".wearable-watch-compare__color", tabPanel: ".wearable-watch-compare__product", tabPanels: ".wearable-watch-compare__product-item", scrollbarEl: ".swiper-scrollbar", viewMoreCta: ".view-more__cta", featureHide: "is-feature-hide", viewmore: ".viewmore", collapse: ".collapse", matchElements: [".wearable-watch-compare__info-item--display", ".wearable-watch-compare__info-item--screen", ".wearable-watch-compare__info-item--charge", ".wearable-watch-compare__info-item--sensor", ".wearable-watch-compare__info-item--material", ".wearable-watch-compare__info-item--battery", ".wearable-watch-compare__info-item--sleep", ".wearable-watch-compare__info-item--cycle", ".wearable-watch-compare__info-item--composition", ".wearable-watch-compare__info-item--route", ".wearable-watch-compare__info-item--durability", ".wearable-watch-compare__info-item--size", ".wearable-watch-compare__info-item--weight", ".wearable-watch-compare__cta", ".wearable-watch-compare__size", ".wearable-watch-compare__color", ".wearable-watch-common__sub-headline"], matchCommonOpts: { childElement: ".wearable-watch-compare__list-item", useDestroyHeight: !1, breakpoints: {} }, classes: { isFixed: "is-fixed", isCollapse: "is-collapse", isExpanded: "is-expanded" }, resizeStart: null, on: { updateImageLoader: null } }; this.opts = o.def(i, t || {}), this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.bindEvents(), this.buildHeightMatch(), this.buildSwiper(), this.buildCompareItem(), this.onResizeHandler()) } initOpts() { this.getCurrentDevice(), this.scroller = null, this.prevDevice = null, this.expanded = !1, this.scrollMoveState = !1, this.firstImageLoad = !1, this.viewMoreCtaTagging = this.viewMoreCta.getAttribute("data-omni"), this.viewMoreTagging = this.viewMoreCta.querySelector(this.opts.viewmore).getAttribute("data-tagging"), this.collapseTagging = this.viewMoreCta.querySelector(this.opts.collapse).getAttribute("data-tagging") } initLayout() { this.updateViewMoreHeight() } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement), this.fixedElement = this.el.querySelector(this.opts.fixedElement), this.compareWrapEl = this.el.querySelector(this.opts.compareWrapEl), this.compareListEl = this.compareWrapEl.querySelector(this.opts.compareListEl), this.contentsEl = this.el.querySelectorAll(this.opts.colorChipEl), this.compareItemEl = this.compareWrapEl.querySelectorAll(this.opts.compareItemEl), this.compareInfo = this.el.querySelectorAll(this.opts.compareInfo), this.viewMoreCta = this.el.querySelector(this.opts.viewMoreCta), this.navigationEl = this.el.querySelector(this.opts.navigationEl), this.scrollbarEl = this.el.querySelector(this.opts.scrollbarEl) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), this.viewMoreCta.addEventListener("click", this.onClickViewMoreCta.bind(this)) } getCurrentDevice() { this.winWidth = o.winSize().w, this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.prevDevice = this.currentDevice } updateViewMoreHeight() { this.expanded ? (this.viewMoreCta.classList.add(this.classes.isCollapse), this.el.classList.add(this.classes.isExpanded), this.viewMoreCta.setAttribute("data-omni", this.viewMoreCtaTagging + this.collapseTagging), this.viewMoreCta.setAttribute("ga-la", this.viewMoreCtaTagging + this.collapseTagging), this.heightMatch.reInit()) : (this.viewMoreCta.classList.remove(this.classes.isCollapse), this.el.classList.remove(this.classes.isExpanded), this.viewMoreCta.setAttribute("data-omni", this.viewMoreCtaTagging + this.viewMoreTagging), this.viewMoreCta.setAttribute("ga-la", this.viewMoreCtaTagging + this.viewMoreTagging)) } updateImageLoader(e) { this.outCallback("updateImageLoader", e), this.firstImageLoad = !0 } buildHeightMatch() { this.heightMatch = { instance: [], reInit: () => { this.heightMatch.instance.length && this.heightMatch.instance.forEach(e => { e.reInit() }) }, initLayout: () => { for (let e = 0, t = this.opts.matchElements.length; e < t; e++) { const s = this.opts.matchElements[e]; var i = "js-" + s.split(".")[1]; for (let e = 0, t = this.compareItemEl.length; e < t; e++) { const a = this.compareItemEl[e]; if (null === a.querySelector("." + i)) { const n = document.createElement("div"), r = a.querySelector(s); n.innerHTML = r.innerHTML, n.classList.add(i), r.innerHTML = "", r.appendChild(n) } } } }, build: () => { this.heightMatch.initLayout(); var e = { column: this.compareItemEl.length }; o.def(this.opts.matchCommonOpts, e); for (let e = 0, t = this.opts.matchElements.length; e < t; e++) { const a = this.opts.matchElements[e]; var i = { pushElement: "." + a.split(".")[1], childElement: this.opts.compareItemEl, matchElement: ".js-" + a.split(".")[1] }, s = JSON.parse(JSON.stringify(this.opts.matchCommonOpts)); o.def(s, i), this.heightMatch.instance.push(new WATCH6.HeightMatch(this.opts.compareWrapEl, s)) } } }, this.heightMatch.build() } buildCompareItem() { this.compareItem = { instance: [], build: () => { this.compareItem.instance.length || this.compareItemEl.forEach(e => { this.compareItem.instance.push(new WATCH6.CompareItem(e, { on: { updateImageLoader: e => {} } })) }) } }, this.compareItem.build() } buildSwiper() { this.swiper = { instance: null, options: { freeMode: !0, slidesPerView: "auto", direction: "horizontal", a11y: !1, scrollbar: { el: this.opts.scrollbarEl } }, destroy: () => { null !== this.swiper.instance && (this.swiper.instance.destroy(), this.swiper.instance = null) }, updateTranslate: e => { null !== this.swiper.instance && this.swiper.instance.setTranslate(-e) }, updateLayout: () => { null !== this.swiper.instance && (this.swiperWidth = this.compareWrapEl.getBoundingClientRect().width, this.swiperListWidth = this.swiper.instance.virtualSize) }, build: () => { !(this.winWidth < 1024) || "mobile" !== this.currentDevice && this.compareItemEl.length <= 3 ? this.swiper.destroy() : null === this.swiper.instance && (this.swiper.instance = new Swiper(this.compareWrapEl, this.swiper.options), this.swiper.updateLayout()) } }, this.swiper.build() } onClickViewMoreCta(e) { e.preventDefault(), this.expanded = !this.expanded, this.updateViewMoreHeight() } onLoadHandler() { this.heightMatch.reInit(), this.onResponsiveChange(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { this.scrollY = window.scrollY; this.scrollY, this.lastScrollY; var e = window.innerHeight, t = o.getScroll().top - e, i = o.getScroll().bottom, s = o.getOffset(this.el), a = this.swiperWidth, n = (o.getHeight(this.compareWrapEl), o.getOffset(this.compareWrapEl)), r = this.swiperListWidth; Math.ceil(r - a), o.getOffset(this.trackElement).top, Math.abs(this.trackElement.clientHeight); o.getNavHeight(); (i > s.top && t <= s.top || t < s.bottom && i > s.bottom || t < s.top && i > s.bottom || t > s.top && i < s.bottom) && !this.firstImageLoad && (r = this.el.querySelectorAll(".js-start-img-src"), this.updateImageLoader(r)), o.getScroll().top + o.getNavHeight() >= n.top && i <= n.bottom ? this.el.classList.contains(this.classes.isFixed) || this.el.classList.add(this.classes.isFixed) : this.el.classList.contains(this.classes.isFixed) && this.el.classList.remove(this.classes.isFixed), this.lastScrollY = scrollY } onResizeHandler() { o.winSize().w !== this.winWidth && (this.winWidth = o.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.updateViewMoreHeight(), this.swiper.build(), this.resizeRequestFrame = o.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, this.updateViewMoreHeight(), this.swiper.build(), o.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } onResponsiveChange() {} outCallback(e, t) { e = this.opts.on[e]; null != e && e(t) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.CompareItem = class { constructor(e = container, t) { var i = { el: e, productEl: ".wearable-watch-compare__product", productItem: ".wearable-watch-compare__product-item", productImage: ".wearable-watch-compare__product-image", sizeEl: ".wearable-watch-compare__size", sizeCta: ".wearable-watch-compare__size-cta", colorEl: ".wearable-watch-compare__color", colorItem: ".wearable-watch-compare__color-item", colorChip: ".wearable-watch-compare__color-chip", buyNowCta: ".buy__cta", learnMoreCta: ".learn-more__cta", classes: { isActive: "is-active" }, resizeStart: null }; this.opts = i, this.classes = i.classes, this.el = e, this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.initLayout(), this.bindEvnts()) } initOpts() { this.currentProduct = this.el.dataset.modelName, this.currentSize = this.el.dataset.defaultSize, this.currentColor = {}, this.colorItem.forEach(e => { let t = e.querySelector("." + this.classes.isActive); t || (t = e.querySelectorAll(this.opts.colorChip)[0]).classList.add(this.classes.isActive), this.currentColor[t.dataset.size] = t.dataset.color }), this.colorChip.forEach(e => { e.removeAttribute("aria-selected"), e.removeAttribute("aria-hidden") }), this.DATA = LOCAL_DATA[this.currentProduct] } initLayout() { this.updateSizeLayout(), this.updateColorItemlayout(), this.updateColorChip(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } setElements() { this.productEl = this.el.querySelector(this.opts.productEl), this.productItem = this.productEl.querySelectorAll(this.opts.productItem), this.sizeEl = this.el.querySelector(this.opts.sizeEl), this.sizeCta = this.sizeEl.querySelectorAll(this.opts.sizeCta), this.colorEl = this.el.querySelector(this.opts.colorEl), this.colorItem = this.colorEl.querySelectorAll(this.opts.colorItem), this.colorChip = this.colorEl.querySelectorAll(this.opts.colorChip), this.buyNowCta = this.el.querySelector(this.opts.buyNowCta), this.learnMoreCta = this.el.querySelector(this.opts.learnMoreCta) } bindEvnts() { this.sizeCta.forEach(e => { e.addEventListener("click", this.handlerClickSizeCta.bind(this)) }), this.colorChip.forEach(e => { e.addEventListener("click", this.handlerClickColorChip.bind(this)) }) } handlerClickColorChip(e) { e = e.currentTarget; this.currentColor[this.currentSize] = e.dataset.color, this.updateColorChip(), this.updateProductImage(), this.updateLink() } handlerClickSizeCta(e) { e = e.currentTarget; this.currentSize = e.dataset.size, this.updateSizeLayout(), this.updateColorItemlayout(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } updateLink() { var e = this.currentSize, t = this.currentColor[e]; const i = this.DATA[e][t]; this.learnMoreCta && (i.hasOwnProperty("learnmore") ? (this.learnMoreCta.parentElement.style.display = "block", this.learnMoreCta.setAttribute("href", i.learnmore)) : this.learnMoreCta.parentElement.style.display = "none"), this.buyNowCta && (i.hasOwnProperty("buynow") ? (this.buyNowCta.parentElement.style.display = "block", this.buyNowCta.setAttribute("href", i.buynow)) : this.buyNowCta.parentElement.style.display = "none") } updateSizeLayout() { this.sizeCta.forEach(e => { this.currentSize === e.dataset.size ? (e.classList.add(this.classes.isActive), e.setAttribute("title", "selected")) : (e.classList.remove(this.classes.isActive), e.removeAttribute("title")) }) } updateColorItemlayout() { this.currentColorItem = Array.from(this.colorItem).filter(e => { if (this.currentSize === e.dataset.size) return e.classList.add(this.classes.isActive), e; e.classList.remove(this.classes.isActive) })[0] } updateColorChip() { const e = this.currentColorItem.querySelectorAll(this.opts.colorChip); e.forEach(e => { this.currentColor[this.currentSize] === e.dataset.color ? (e.classList.add(this.classes.isActive), e.setAttribute("title", "selected")) : (e.classList.remove(this.classes.isActive), e.removeAttribute("title")) }) } updateProductItemLayout() { this.currentProductItem = Array.from(this.productItem).filter(e => { if (this.currentSize === e.dataset.size) return e.classList.add(this.classes.isActive), e; e.classList.remove(this.classes.isActive) })[0] } updateProductImage() { const e = this.currentProductItem.querySelectorAll(this.opts.productImage); e.forEach(e => { this.currentColor[this.currentSize] === e.dataset.color ? (e.classList.add(this.classes.isActive), e.removeAttribute("tabindex"), e.setAttribute("aria-hidden", !1)) : (e.classList.remove(this.classes.isActive), e.setAttribute("tabindex", -1), e.setAttribute("aria-hidden", !0)) }) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Connectivity = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const t = WATCH6.UTILS; t.RESPONSIVE; WATCH6.Contrast = class { constructor(e = container, t) { var i = { el: e, defaultBtn: ".type-default", contrastBtn: ".type-contrast", cookieName: "highContrastMode", featureHide: "is-feature-hide" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.bindEvents()) } setElements() { this.defaultBtn = this.el.querySelector(this.opts.defaultBtn), this.defaultBtnTitle = this.defaultBtn.getAttribute("title").trim(), this.contrastBtn = this.el.querySelector(this.opts.contrastBtn), this.contrastBtnTitle = this.contrastBtn.getAttribute("title").trim(), this.cookieName = this.opts.cookieName } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), this.defaultBtn && this.defaultBtn.addEventListener("click", this.onClickDefaultBtn.bind(this)), this.contrastBtn && this.contrastBtn.addEventListener("click", this.onClickContrastBtn.bind(this)) } onLoadHandler() { this.activeContrast() } onClickDefaultBtn(e) { e.preventDefault(), t.setCookie(this.cookieName, "0", 1), this.activeContrast() } onClickContrastBtn(e) { e.preventDefault(), t.setCookie(this.cookieName, "1", 1), this.activeContrast() } activeContrast() { var e = t.getCookie(this.cookieName); null != e && e.length && "1" == e ? (document.documentElement.classList.add("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle + " selected"), this.defaultBtn.setAttribute("title", this.defaultBtnTitle)) : (document.documentElement.classList.remove("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle), this.defaultBtn.setAttribute("title", this.defaultBtnTitle + " selected")) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Glass = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.KeyVisual = class { constructor(e = container, t) { var i = { el: e, classes: { isUseBuy: "is-use-buy", isUseRegist: "is-use-regist", isUseOrder: "is-use-order", isUseWhere: "is-use-where", isUseOff: "is-use-off" }, featureHide: "is-feature-hide" }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || this.initLayout() } initLayout() { this.el.classList.remove(this.classes.isUseBuy), this.el.classList.remove(this.classes.isUseRegist), this.el.classList.remove(this.classes.isUseOrder), this.el.classList.remove(this.classes.isUseWhere), this.el.classList.remove(this.classes.isUseOff), "undefined" == typeof __WATCH_USE_KV_CTA || null == __WATCH_USE_KV_CTA || null == __WATCH_USE_KV_CTA || "" == __WATCH_USE_KV_CTA || "buy-now" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseBuy) : "pre-order" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseOrder) : "pre-registration" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseRegist) : "where-to-buy" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseWhere) : "where-to-buy" == __WATCH_USE_KV_CTA && this.el.classList.add(this.classes.isUseOff) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Monitoring = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const a = WATCH6.UTILS, e = a.RESPONSIVE; WATCH6.Overview = class { constructor(e = container, t) { var i = { el: e, rootEl: ".wearable-watch", layerEl: ".wearable-watch-overview__popup", featureList: ".wearable-watch-overview__list", featureItem: ".wearable-watch-overview__list-item", featureCta: ".wearable-watch-overview__list-cta", featureBtn: ".wearable-watch-overview__list-btn", featureContent: ".wearable-watch-overview__popup-content", featurePlayer: ".wearable-watch-overview__player", storyEl: ".wearable-watch-overview__story", storySlide: ".wearable-watch-overview__story-item", indicatorList: ".wearable-watch-overview__indicator-list", indicatorItem: ".wearable-watch-overview__indicator-item", indicatorText: ".indicator__text", controlHiddenEl: ".blind", navigationPrev: ".navigation__cta-prev", navigationNext: ".navigation__cta-next", storyItemController: ".story-item__btn", storyItem: ".story-item__image", storyItemCta: ".story-item__cta", closeBtn: ".cm-layer__btn-close", videoElement: ".video__container", startImage: ".video__start-frame", endImage: ".video__end-frame", featureHide: "is-feature-hide", initSlide: 0, infiniteRolling: !0, transitionDuration: 400, widthResizeStart: null, heightResizeStart: null, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isHover: "is-hover", isActive: "is-active", isPaused: "is-paused", isHeight: "is-height" }, thumbnailTagging: { "sleep-tracking": { play: "gwatch6:highlights:overview:movi-play:sleep-tracking-video", pause: "gwatch6:highlights:overview:movi-pause:sleep-tracking-video" }, health: { play: "gwatch6:highlights:overview:movi-play:health-video", pause: "gwatch6:highlights:overview:movi-pause:health-video" }, display: { play: "gwatch6:highlights:overview:movi-play:display-video", pause: "gwatch6:highlights:overview:movi-pause:display-video" } }, popupTagging: { "sleep-tracking": { play: "gwatch6:highlights:overview^lypu:movi-play:sleep-tracking-video", pause: "gwatch6:highlights:overview^lypu:movi-pause:sleep-tracking-video" }, health: { play: "gwatch6:highlights:overview^lypu:movi-play:health-video", pause: "gwatch6:highlights:overview^lypu:movi-pause:health-video" }, display: { play: "gwatch6:highlights:overview^lypu:movi-play:display-video", pause: "gwatch6:highlights:overview^lypu:movi-pause:display-video" } } }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.buildSwiper(), this.buildLayer(), this.buildVideoPlayer(), this.bindEvents()) } initOpts() { this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, this.currentDevice = !1, this.prevDevice = null, this.initValues() } initValues() { this.selectedIndex = -1 } initLayout() { this.storySlide.forEach((e, t) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), this.opts.initSlide === t && (e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }), this.indicatorItem.forEach(e => { "tablist" === this.indicatorList.getAttribute("role") && e.setAttribute("aria-selected", "false") }), this.opts.infiniteRolling || (0 === this.opts.initSlide && (this.navigationPrev.style.display = "none"), this.opts.initSlide === this.storySlide.length - 1 && (this.navigationNext.style.display = "none")) } setElements() { this.rootEl = document.querySelector(this.opts.rootEl), this.layerEl = this.el.querySelector(this.opts.layerEl), this.videoElement = this.el.querySelectorAll(this.opts.videoElement), this.featureList = this.el.querySelector(this.opts.featureList), this.featureContent = this.el.querySelector(this.opts.featureContent), this.featureCta = this.featureList.querySelectorAll(this.opts.featureCta), this.featureBtn = this.featureList.querySelectorAll(this.opts.featureBtn), this.featurePlayer = this.featureList.querySelectorAll(this.opts.videoElement), this.storyEl = this.el.querySelector(this.opts.storyEl), this.storyItem = this.el.querySelectorAll(this.opts.storyItem), this.storySlide = this.el.querySelectorAll(this.opts.storySlide), this.storyPlayer = this.storyEl.querySelectorAll(this.opts.videoElement), this.indicatorList = this.el.querySelector(this.opts.indicatorList), this.indicatorItem = this.indicatorList.querySelectorAll(this.opts.indicatorItem), this.navigationPrev = this.el.querySelector(this.opts.navigationPrev), this.navigationNext = this.el.querySelector(this.opts.navigationNext), this.closeBtn = this.el.querySelector(this.opts.closeBtn), this.storyItemController = this.storyEl.querySelectorAll(this.opts.storyItemController) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.featureCta.forEach((e, t) => { e.addEventListener("click", this.handleLayerOpen.bind(this, t)) }), this.indicatorItem.forEach((e, t) => { e.addEventListener("click", this.select.bind(this, t)) }), this.navigationPrev.addEventListener("click", this.handleNavigationPrev.bind(this)), this.navigationNext.addEventListener("click", this.handleNavigationNext.bind(this)), this.storySlide.forEach((e, t) => { -1 < e.querySelector(this.opts.storyItemCta).getAttribute("href").indexOf("#") && e.querySelector(this.opts.storyItemCta).addEventListener("click", this.onStoryItemCtaClickEvent.bind(this)) }) } unBindEvents() { this.indicatorItem.forEach((e, t) => { e.removeAllEventListeners("click") }), this.featureBtn.forEach(e => { e.removeAllEventListeners("click") }), this.storyItemController.forEach(e => { e.removeAllEventListeners("click") }) } onStoryItemCtaClickEvent(e) { e.preventDefault(); const t = e.target; e = t.getAttribute("href"); const i = this.rootEl.querySelector(e); e = i.dataset.rectTop || a.getOffset(i).top - a.getNavHeight(); $(this.layerEl).trigger("closeLayer", !1), $("html, body").animate({ scrollTop: e }, { duration: 1e3 }); const s = i.querySelector(".wearable-watch-common__headline") ? i.querySelector(".wearable-watch-common__headline") : i.querySelector(".wearable-watch-common__sub-headline"); s && (s.setAttribute("tabindex", "0"), s.focus(), s.addEventListener("focusout", () => { s.removeAttribute("tabindex") })) } handleNavigationPrev() { let e = this.storySwiper.instance.realIndex - 1; e < 0 && (e = this.storySlide.length - 1), this.storySwiper.instance.slideToLoop(e) } handleNavigationNext() { let e = this.storySwiper.instance.realIndex + 1; e >= this.storySlide.length && (e = 0), this.storySwiper.instance.slideToLoop(e) } handleLayerOpen(e, t) { t.preventDefault(), this.opts.initSlide = e } updateControlText(e, t) { const i = e.querySelector(this.opts.controlHiddenEl); e = t ? this.globalText.play : this.globalText.stop; i.innerHTML = e } select(e, t = !1, i) { var s = this.selectedIndex; s === e && !t || (this.animReqId && (a.cancelAFrame.call(window, this.animReqId), this.animReqId = null), -1 < s && (this.indicatorItem[s].classList.contains(this.classes.isActive) && (this.indicatorItem[s].classList.remove(this.classes.isActive), this.indicatorItem[s].removeAttribute("title")), "tablist" === this.role ? this.indicatorItem[s].setAttribute("aria-selected", "false") : this.indicatorItem[s].removeAttribute("title")), e < 0 ? this.selectedIndex = e : (this.selectedIndex = e, this.indicatorItem[this.selectedIndex].classList.contains(this.classes.isActive) || this.indicatorItem[this.selectedIndex].classList.add(this.classes.isActive), "tablist" === this.indicatorList.getAttribute("role") ? this.indicatorItem[this.selectedIndex].setAttribute("aria-selected", "true") : this.indicatorItem[this.selectedIndex].setAttribute("title", "selected"), this.storySwiper.instance.slideToLoop(this.selectedIndex))) } updateImageLayout() { this.featureContent.clientWidth / this.featureContent.clientHeight <= .56 ? this.layerEl.classList.add(this.classes.isHeight) : this.layerEl.classList.remove(this.classes.isHeight) } onResizeHandler() { a.winSize().w === this.winWidth && a.winSize().h === this.winHeight || (this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, null != this.opts.widthResizeStart && null != this.opts.heightResizeStart || (this.opts.widthResizeStart = this.winWidth, this.opts.heightResizeStart = this.winHeight, this.resizeAnimateFunc())), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150) } resizeAnimateFunc() { this.setWidthLayout(), this.setHeightLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.widthResizeStart = null, this.opts.heightResizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.select(this.selectedIndex, !0), this.featurePlayer.forEach(e => { this.videoPlayer.change(e) }), "block" === this.layerEl.style.display && this.storyPlayer.forEach(e => { this.videoPlayer.change(e) }) } setWidthLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.updateImageLayout(), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setHeightLayout() { this.updateImageLayout() } buildVideoPlayer() { this.videoPlayer = { instance: [], load: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onLoad(t) }) }, reset: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onReset(t) }) }, play: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onPlay(t) }) }, change: t => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach(e => { e.onChange(t) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((e, t) => { var i = e.closest(this.opts.featureItem) ? this.opts.featureItem : null; this.videoPlayer.instance.push(new WATCH6.VideoPlayer(e, { sectionElement: this.opts.el, videoParentElement: i, on: { updateController: e => { const t = e.el; var i = t.dataset.tagging, e = e.playState ? "pause" : "play", s = t.classList.contains(this.opts.featureBtn.split(".")[1]) ? this.opts.thumbnailTagging : t.classList.contains(this.opts.storyItemController.split(".")[1]) ? this.opts.popupTagging : ""; t.setAttribute("data-omni", s[i][e]), t.setAttribute("ga-la", s[i][e]) } } })) }) } }, this.videoPlayer.build() } buildSwiper() { this.storySwiper = { instance: null, options: { a11y: !1, loop: this.opts.infiniteRolling, speed: this.opts.transitionDuration, effect: "fade", touchMoveStopPropagation: !0, fadeEffect: { crossFade: !0 }, initialSlide: this.opts.initSlide }, slideChange: () => { const i = this.storySwiper.instance.realIndex, e = this.storySlide[i], t = e.querySelector(this.opts.videoElement); this.select(i), t && (t.classList.contains(this.classes.loaded) ? a.isLowNetwork() || this.videoPlayer.play(t) : this.videoPlayer.load(t)), this.storySlide.forEach((e, t) => { t !== i && (t = e.querySelector(this.opts.videoElement)) && this.videoPlayer.reset(t) }) }, slideChangeTransitionStart: () => { if (null !== this.storySwiper.instance) { const t = Array.from(this.storySwiper.instance.slides); var e = this.storySwiper.instance.realIndex; this.storySlide[e]; t.forEach((e, t) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemCta).setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "true"), e.querySelector(this.opts.storyItemController).setAttribute("tabindex", "-1")), e.classList.contains("swiper-slide-active") && (e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"), e.querySelector(this.opts.storyItemCta).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemCta).removeAttribute("tabindex"), e.querySelector(this.opts.storyItemController) && (e.querySelector(this.opts.storyItemController).setAttribute("aria-hidden", "false"), e.querySelector(this.opts.storyItemController).removeAttribute("tabindex"))) }) } }, destroy: () => { null !== this.storySwiper.instance && (this.storySwiper.instance.destroy(), this.storySwiper.instance = null) }, build: () => { null === this.storySwiper.instance && (this.storySwiper.options.on = { slideChange: this.storySwiper.slideChange.bind(this), slideChangeTransitionStart: this.storySwiper.slideChangeTransitionStart.bind(this) }, this.storySwiper.options.initialSlide = this.opts.initSlide, this.storySwiper.instance = new Swiper(this.opts.storyEl, this.storySwiper.options), this.storySwiper.slideChangeTransitionStart()) } } } buildLayer() { this.layer = { instance: null, build: () => { null === this.layer.instance && (this.layer.instance = new HiveLayer(this.opts.layerEl, { effect: "default", on: { layerOpenBefore: () => { this.updateImageLayout(); const e = this.storySlide[this.opts.initSlide]; var t = e.querySelector(this.opts.videoElement); this.storySwiper.build(), this.select(this.opts.initSlide), t && this.videoPlayer.load(t), this.featurePlayer.forEach(e => { this.videoPlayer.reset(e) }) }, layerOpenAfter: () => { const e = this.storySlide[this.opts.initSlide]; var t = e.querySelector(this.opts.storyItemController), i = e.querySelector(this.opts.storyItemCta); const s = t || i; window.setTimeout(() => { s.focus() }, 50) }, layerCloseBefore: () => { this.featureBtn.forEach(e => { e.classList.contains(this.classes.isPaused) && e.classList.remove(this.classes.isPaused) }) }, layerCloseAfter: () => { this.storySwiper.destroy(), this.initValues(), this.indicatorItem.forEach(e => { e.classList.remove(this.classes.isActive), e.removeAttribute("title") }), this.storySlide.forEach(e => { e = e.querySelector(this.opts.videoElement); this.videoPlayer.reset(e) }) } } })) } }, this.layer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Progress = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, visiblePoint: .5, videoParentElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const a = WATCH6.UTILS, e = a.RESPONSIVE; WATCH6.Screen = class { constructor(e = container, t) { var i = { el: e, trackElement: ".wearable-watch-screen__track", fixedElement: ".wearable-watch-screen__fixed", textElement: ".wearable-watch-screen__text", videoElement: ".video__container", videoController: ".video__controller", featureHide: "is-feature-hide", classes: { scene01: "scene01", scene02: "scene02", brokenFixedAnimation: "broken-fixed-animation" }, widthResizeStart: null, heightResizeStart: null }; this.opts = i, this.classes = i.classes, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents(), this.buildVideoPlayer(), this.onLoadHandler()) } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement), this.fixedElement = this.el.querySelector(this.opts.fixedElement), this.textElement = this.el.querySelector(this.opts.textElement), this.videoElement = this.el.querySelector(this.opts.videoElement), this.videoController = this.el.querySelector(this.opts.videoController), this.video = this.videoElement.querySelector("video"), this.video.querySelectorAll("source").forEach(e => { document.documentElement.classList.contains("safari") && -1 < e.getAttribute("type").indexOf("webm") && e.remove() }) } initOpts() { this.getCurrentDevice(), this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, this.currentAnimation = null, this.prevAnimation = null, this.scroller = null, this.brokenScroller = null, this.lastScrollY = 0, this.animationPlay = !1 } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [this.classes.brokenFixedAnimation, this.classes.scene01, this.classes.scene02] }) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener("scroll", this.onScrollHandler.bind(this)), window.addEventListener("orientationchange", this.onOrientationChange.bind(this)) } getCurrentDevice() { this.winWidth = a.winSize().w, this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile" } buildVideoPlayer() { this.videoPlayer = { instance: null, play: () => { null !== this.videoPlayer.instance && this.videoPlayer.instance.onPlay(this.videoElement) }, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el, on: { updatePlayState: e => { this.videoController || null === this.scroller || document.documentElement.classList.contains("is-animation-broken-fixed") || e && this.el.classList.add(this.classes.scene02) }, updateController: e => { !this.videoController || e.playState && null !== this.scroller && !document.documentElement.classList.contains("is-animation-broken-fixed") && (a.isLowNetwork() ? (this.el.classList.contains(this.classes.scene02) && this.el.classList.remove(this.classes.scene02), window.setTimeout(() => { this.el.classList.add(this.classes.scene02) }, 10)) : this.el.classList.add(this.classes.scene02)) } } })) } }, this.videoPlayer.build() } onLoadHandler() { this.setWidthLayout(), this.setHeightLayout(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { const e = this; var t = window.scrollY; this.lastScrollY, a.getScroll().bottom, a.getOffset(this.el).top; null !== this.scroller && this.scroller.trackAnimation(function() { this.progress <= 0 && e.el.classList.remove(e.classes.scene02), !e.videoController && a.isLowNetwork() && 40 < this.progress && e.videoPlayer.play() }), null !== this.brokenScroller && this.brokenScroller.activeAnimation(), this.lastScrollY = t } onResizeHandler() { a.winSize().w === this.winWidth && a.winSize().h === this.winHeight || (this.winWidth = a.winSize().w, this.winHeight = a.winSize().h, null != this.opts.widthResizeStart && null != this.opts.heightResizeStart || (this.opts.widthResizeStart = this.winWidth, this.opts.heightResizeStart = this.winHeight, this.resizeAnimateFunc())), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150) } resizeAnimateFunc() { this.setWidthLayout(), this.setHeightLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.widthResizeStart = null, this.opts.heightResizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), a.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : this.setScroller() } onOrientationChange() { setTimeout(() => { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), a.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : this.setScroller() }, 150) } setWidthLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } setHeightLayout() { var e = window.innerWidth, t = window.innerHeight, i = !!a.isTouchDevice && window.matchMedia("(orientation: landscape)").matches, s = !!a.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches; this.currentAnimation = s && t / e < 1.5 || i || t < 700 ? "broken" : "use", this.currentAnimation === this.prevAnimation || a.isTouchDevice || this.onResponsiveChange(), this.prevAnimation = this.currentAnimation } setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, useFixed: !1 })) } setBrokenScroller() { null === this.brokenScroller && (this.brokenScroller = SCROLLER({ trackElement: this.trackElement, activeElement: this.el, activeClass: this.classes.brokenFixedAnimation })) } destroyScroller() { null !== this.scroller && (this.scroller.destroy(!0), this.scroller = null) } destroyBrokenScroller() { null != this.brokenScroller && (this.brokenScroller.destroy(!0), this.brokenScroller = null) } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Snap = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Standalone = class { constructor(e = container, t) { this.opts = { el: e, tabEl: ".wearable-watch-standalone__tab", tabList: ".wearable-watch-standalone__tab-list", tabButtons: ".wearable-watch-standalone__tab-cta", tabPanel: ".wearable-watch-standalone__tab-panels", tabPanels: ".wearable-watch-standalone__tab-panel", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildTab()) } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl) } buildTab() { this.tab = { instance: null, build: () => { null === this.tab.instance && (this.tab.instance = new WATCH6.Tab(this.tabEl, { tabEl: this.opts.tabEl, tabList: this.opts.tabList, tabButtons: this.opts.tabButtons, tabPanel: this.opts.tabPanel, tabPanels: this.opts.tabPanels })) } }, this.tab.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; const a = WATCH6.UTILS, e = a.RESPONSIVE; WATCH6.Tab = class { constructor(e = container, t) { var i = { el: e, tabEl: ".wearable-watch__tab", tabList: ".wearable-watch__tab-list", tabButtons: ".wearable-watch__tab-cta", tabPanel: ".wearable-watch__tab-panels", tabPanels: ".wearable-watch__tab-panel", classes: { isActive: "is-active" }, resizeStart: null }; this.opts = a.def(i, t || {}), this.classes = i.classes, this.el = e, this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { this.tabEl = this.el, this.tabList = this.tabEl.querySelector(this.opts.tabList), this.tabButtons = a.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)), this.tabPanel = this.el.querySelector(this.opts.tabPanel), this.tabPanels = a.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)) } initOpts() { this.currentIndex = 0, this.currentDevice = !1, this.prevDevice = null } initLayout() { this.tabButtons.forEach(function(e, t) { const i = this.tabPanels[t]; this.currentIndex == t ? (e.classList.contains(this.classes.isActive) || e.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), e.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (e.classList.contains(this.classes.isActive) && e.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), e.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach(e => { e.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() {} onClickTabButton(e) { e = e.currentTarget; const s = this.tabButtons.indexOf(e); s != this.currentIndex && (this.tabButtons.forEach((e, t) => { const i = this.tabPanels[t]; s == t ? (e.classList.contains(this.classes.isActive) || e.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), e.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (e.classList.contains(this.classes.isActive) && e.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), e.setAttribute("aria-selected", !1), a.onAccessibility(i)) }), this.currentIndex = s) } onResizeHandler() { a.winSize().w !== this.winWidth && (this.winWidth = a.winSize().w, null == this.opts.resizeStart && (this.opts.resizeStart = this.winWidth, this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150)) } resizeAnimateFunc() { this.setLayout(), this.resizeRequestFrame = a.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)) } resizeEndFunc() { this.opts.resizeStart = null, a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() {} setLayout() { this.winWidth >= e.TABLET.WIDTH ? this.currentDevice = "desktop" : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? this.currentDevice = "tablet" : this.currentDevice = "mobile", this.currentDevice !== this.prevDevice && this.onResponsiveChange(), this.prevDevice = this.currentDevice } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Train = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; window.WATCH6 = window.WATCH6 || {}; WATCH6.UTILS.RESPONSIVE; WATCH6.Wellness = class { constructor(e = container, t) { this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide" }, this.el = document.querySelector(e), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el })) } }, this.videoPlayer.build() } } }(), function() { "use strict"; WATCH6.UTILS.RESPONSIVE; new class { constructor(e = container) { this.opts = { el: e, wrapEl: "#wrap", keyVisualEl: ".wearable-watch-kv", overviewEl: ".wearable-watch-overview", screenEl: ".wearable-watch-screen", bandEl: ".wearable-watch-band", glassEl: ".wearable-watch-glass", trainEl: ".wearable-watch-train", snapEl: ".wearable-watch-snap-remote", standaloneEl: ".wearable-watch-standalone", monitoringEl: ".wearable-watch-monitoring", wellnessEl: ".wearable-watch-wellness", batteryEl: ".wearable-watch-battery-processor", progressEl: ".wearable-watch-progress", connectivityEl: ".wearable-watch-connectivity", compareEl: ".wearable-watch-compare", contrastEl: ".cp-high-contrast", subNavEl: "#subnav" }, this.el = document.querySelector(e), this.init() } init() { null !== this.el && (this.buildComponents(), initialize.init()) } buildComponents() { this.imageLoader = new WATCH6.ImageLoader(this.opts.el, { loadOption: [{ resolution: 1920, attribute: "data-src-pc" }, { resolution: 1080, attribute: "data-src-tablet" }, { resolution: 767, attribute: "data-src-mobile" }] }), this.videoLoader = new WATCH6.VideoLoader(this.opts.el, { notLoadElement: [".cm-layer"], loadOption: [{ resolution: 1920, attribute: "data-media-pc" }, { resolution: 767, attribute: "data-media-mo" }] }), this.keyVisual = new WATCH6.KeyVisual(this.opts.keyVisualEl), this.overview = new WATCH6.Overview(this.opts.overviewEl), this.screen = new WATCH6.Screen(this.opts.screenEl), this.standalone = new WATCH6.Standalone(this.opts.standaloneEl), this.monitoring = new WATCH6.Monitoring(this.opts.monitoringEl), this.wellness = new WATCH6.Wellness(this.opts.wellnessEl), this.band = new WATCH6.Band(this.opts.bandEl), this.glass = new WATCH6.Glass(this.opts.glassEl), this.train = new WATCH6.Train(this.opts.trainEl), this.snap = new WATCH6.Snap(this.opts.snapEl), this.compare = new WATCH6.Compare(this.opts.compareEl, { on: { updateImageLoader: e => { this.imageLoader.setResponsiveImage(e) } } }), this.contrast = new WATCH6.Contrast(this.opts.contrastEl), this.batteryEl = new WATCH6.Battery(this.opts.batteryEl), this.progressEl = new WATCH6.Progress(this.opts.progressEl), this.connectivityEl = new WATCH6.Connectivity(this.opts.connectivityEl), window.addEventListener("load.gb", () => { setTimeout(() => { window.GALAXY && window.GALAXY.isGalaxy && (this.subNav = new WATCH6.SubNav(this.opts.subNavEl)) }, 5) }) } }(".wearable-watch") }(); // (SEC) 압축해제 e // }); })(); // 230627 colorchip fix add window.dispatchEvent(new Event('load.gb'));

      * 제공된 설명은 실제 제품에 대한 설명과 다를 수 있습니다.
      제품 사진 및 특장점 등에는 광고적 표현이 포함되어 실제와 다를 수 있으며, 제품 스펙은 제품 개량을 위해 사전 예고 없이 변경될 수 있습니다.
      모든 기능, 특성, 설명, GUI와 다른 정보들은 혜택, 디자인, 가격, 구성품, 성능, 가능 수량 등의 내용을 포함하며 별도의 통지 없이 변경될 수 있습니다.
      화면 내의 내용은 연출된 이미지이며, 데모용으로만 사용됩니다.

      * 제품 색상은 모니터에 따라 약간 다를 수 있습니다.

      * 해당 모델은 구입처에 따라 취급여부가 다를 수 있습니다.

      * 무약정 단말기는 제품 구매 후 휴대폰을 판매하는 인근 삼성스토어나 해당 이동통신사 대리점에 방문하여 개통하셔야 합니다.
      자급제 단말은 개통 시 S/N 번호가 아닌 IMEI 번호로 개통합니다. 자급제 단말 관련 자세한 설명은 www.단말기자급제.한국을 참조하시기 바랍니다.
      사업자향/유통향 단말에서 제공하는 특화 서비스나 일부 기능은 자급제 단말에서 지원되지 않을 수 있습니다.
      이통사 부가서비스 등 관련 내용은 가입하고자 하는 이동통신사업자에 확인하시기 바랍니다.

      * 애플리케이션이나 서비스들은 제공 사업자 사정에 의하여 예고 없이 변경/중단될 수 있습니다.

      * 국가, 지역, 사업자에 따라 단말이 지원하는 주파수 영역은 다를 수 있습니다.

      * 크기와 무게는 제품 구성 및 제조 과정에 따라 다를 수 있습니다.

      * 둥근 모서리를 고려하지 않고 대각선으로 전체 직사각형으로 측정됩니다. 모서리가 둥글기 때문에 실제 볼 수 있는 영역이 줄어듭니다.

      * 사용자 메모리는 OS의 용량 및모바일 기기의 기능을 작동시키는 소프트웨어에 사용되므로 전체 메모리보다 작습니다.
      실제 사용자 메모리는 사용자에 따라 달라지며, 소프트웨어 업그레이드 후에도 달라질 수 있습니다.

      * 배터리 사용시간은 최초 출하 상태 제품을 기준으로 당사 실험실에서 측정된 전력을 기반으로 산출한 것입니다.
      웹사이트에 표기되는 배터리 사용시간은 소비자 환경과 유사한 조건으로 측정하기 위해 측정방법이 업데이트되며, 이에 따라 배터리 사용시간이 변경되는 경우가 발생할 수 있습니다.
      실제 배터리 충전시간과 사용시간은 충전 상태와 사용 환경, 네트워크 환경, 사용한 앱, 통화 및 메시지 전송량, 충전 빈도 등에 따라 달라질 수 있습니다.
      13년도 당사의 사용시간 측정 방법이 개정되어, 변경된 규격으로 표기되었습니다. Quick Start Guide와 상이할 수 있습니다.
      자세한 설명은https://www.samsung.com/sec/support/battery/를 참조하시기 바랍니다.

      * 갤럭시 탭 S9+ : 배터리 용량은 타사 실험실 조건에서 테스트한 표준값이며, 정격(최소) 용량은 더 적습니다. 표준 용량값은 IEC 61960 표준에 따라 테스트 된 배터리 샘플 간의 배터리 용량 편차를 고려한 측정값입니다.
      정격(최소) 용량은 9,800 mAh로, 실제 배터리 수명은 네트워크 환경, 사용 패턴 및 기타 요소에 따라 달라질 수 있습니다.

      * 갤럭시 워치6 : 구글 모바일 서비스를 지원하는 스마트폰(안드로이드 10.0 이상 및 메모리 1.5 GB 이상)과 호환되므로, 사용중인 스마트폰이 구글 모바일 서비스를 지원하는지 여부를 스마트폰 제조사에 확인하시기 바랍니다.

      스펙

      SAR 정보

      탑재 어플리케이션 정보

      매뉴얼

      상품평

      0.0

      • 최고0%
      • 만족0%
      • 보통0%
      • 별로0%
      • 나쁨0%
      이 상품은 이렇게 표현할 수 있어요
      • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (242)성능이 좋아요이 키워드를 선택한 인원0

      • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (243)사용하기 편리해요이 키워드를 선택한 인원0

      • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (244)디자인이 마음에 들어요이 키워드를 선택한 인원0

      • 갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (245)배송이 빨라요이 키워드를 선택한 인원0

      상품평을 작성하고 베스트 리뷰어에 도전해 보세요!상품평 작성

      전체 상품평 0

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (246)

        스토어 상담 예약 서비스

        나에게 꼭 맞는 제품을 찾고 계신가요? 비대면 라이브 상담부터스토어 방문 예약까지 맞춤 상담 예약으로 전문 상담사를 만나 보세요

        상품평 가이드

        베스트 상품평 기준
        상품평 100자 이상
        포토/동영상 첨부

        2개의 조건을 충족하면
        베스트 상품평 선정될 확률 UP!

        1. 01
          별점을 선택해 주세요.

          다양한 각도의 사진을 첨부하시면 베스트 상품평에 선정될 확률이 높아져요!

        2. 02
          키워드를 선택해 주세요.

          1,2점을 선택하셨더라도 상품에 대해 설명하는 키워드를 선택해 주세요.

        3. 03
          상세한 리뷰를 작성해 주세요.
          구매동기
          왜 구매 하셨나요?
          성능
          성능이 왜 만족스러웠나요?/아쉬웠나요?
          그렇게 생각하신 이유도 함께 작성해주세요.
          디자인
          디자인은 어땠나요?
          활용TIP
          상품을 어떻게 활용했는지 본인만의 활용TIP을 공유해 주세요.
          마지막은 주요 장단점으로 마무리 해보세요.
        4. 04
          사진 및 동영상을 첨부해 주세요.

          다양한 각도의 사진을 첨부하시면 베스트 상품평에 선정될 확률이 높아져요!

          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (247)착용샷
          상품을 착용한 모습을 보여주세요.
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (248)설치샷
          실제 사용 모습을 담아보세요.
          갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (249)디테일
          다양한 각도에서 찍어보세요.

        고객님


        상품평 등록 및 이벤트 응모가 완료 되었습니다.

        카드 혜택

        구매시 유의사항

        • 배송정책 안내
        • 교환/반품/AS 안내
        • 교환/반품 불가 안내
        • 판매자 정보
        배송지역
        도서 산간지역은 배송이 제한될 수 있습니다.
        배송비
        전 상품 무료배송
        (단, 제주도 등 일부 도서/산간 지역은 별도 배송비가 발생할 수 있으며, 설치상품의 경우 설치 환경 등에 따라 추가 설치비가 발생할 수 있습니다.)
        배송기간
        주문결제 후 평균 3일 이내 배송 (일, 공휴일 제외) 단, 도서/산간지역은 배송일이 추가적으로 소요될 수 있으며, 상품 보유현황에 따라 배송일이 지연될 수 있습니다.
        또한 인수고객과의 통화불가, 수령지 주소가 불명확할 경우 사전 연락(전화 또는 문자 등) 후 배송이 지연되거나 주문이 취소될 수 있습니다.
        배송방법
        배송 당일 오전에 SMS로 배송예정을 알리는 문자를 발송해드리며, 고객 댁에 도착하기 전 배달설치 기사가 연락 드립니다. 스팸 처리 등으로 인해 문자를
        받지 못하는 경우가 있으니 주문내역에서 배송 상황을 확인해주시기 바랍니다.삼성전자 배송 상품 중에는 고가의 프리미엄 상품들이 포함되어 있어 고객님께
        직접 전달을 원칙으로 하고 있습니다. 안전한 배송을 위해 고객님이 주문 시 지정한 배송장소 외 제3자 전달이나 임의장소로의 배송은 제공하지 않습니다.
        설치상품을 주문 시에는 설치환경을 꼭 체크하여 주십시오.
        • - TV: 벽걸이 설치 시 설치 불가한 벽면 재질은 아닌지 확인하여 주십시오.
        • - 냉장고/세탁기 : 설치공간 사이즈, 출입문 사이즈, 제품 사이즈를 주문 전에 확인하여 주십시오.
        • - TV 138 cm 이상, 양문형 냉장고, 비스포크 냉장고, 스탠드형 김치냉장고, 세탁기 7 kg 이상, 건조기, 에어드레서는 반드시 설치가 필요한 품목으로, 설치 전문가가 직접 설치, 시운전 후 이상 여부를 점검하고 있습니다.
          미설치 단순 수령이 불가한 제품이오니, 고객님의 사정으로 미설치 시 배송 보류 또는 반품될 수 있습니다.
        배송추적
        삼성닷컴 상단 '마이 삼성 -> 주문/배송조회 -> 주문정보'에서 배송상태 및 배달설치 기사 전화번호 조회가 가능합니다.

        동영상 상세보기

        영상 보기

        패밀리넷 동일 품목 다량 구매 관련 안내

        구매자께서는 최근 동일 품목을 다량 (개 이상) 구매하고 계십니다.

        패밀리넷 제품의 사외 유출과 부정 사용 예방을 위해 필요시 유관부서에서 별도 연락이 있을 수 있습니다.

        재판매 등 부정 사용이 확인될 경우에는 사용권한 박탈 및 인사상 징계 조치 될 수 있음을 안내 드립니다.

        상위 내용에 동의 및 구매 하시겠습니까?

        동의 안함동의함

        카드사별 할부 안내

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (250)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시

        부분 무이자 할부

        • 10개월 : 1~4회차 (고객부담)
        • 12개월 : 1~5회차 (고객부담)
        • → 잔여회차 카드사 부담

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (251)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시
        • 12개월 : 200만원 이상 결제 시
        • ※분할결제 서비스 이용하여 결제 시 혜택 미적용

        부분 무이자 할부

        • 6개월 : 1~3회차 (고객부담)
        • 10개월 : 1~4회차 (고객부담)
        • 12개월 : 1~5회차 (고객부담)
        • *12개월 부분 무이자 : 5만원 이상 200만원 미만 결제시 적용
        • → 잔여회차 카드사 부담

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (252)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (253)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시

        ARS
        부분 무이자 할부
        사전 신청
        (1899-5772)

        • 4~6개월 : 1회차 (고객부담)
        • 7~10개월 : 1~2회차 (고객부담)
        • 11~12개월 : 1~3회차 (고객부담)
        • → 잔여회차 카드사 부담

        부분 무이자 할부

        • 10개월 : 1~3회차 (고객부담)
        • 12개월 : 1~4회차 (고객부담)
        • → 잔여회차 카드사 부담

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (254)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시
        • ※ KB국민체크/기업/비씨카드 및 선불카드 제외

        부분 무이자 할부

        • 6개월 : 1~3회차 (고객부담)
        • 10개월 : 1~5회차 (고객부담)
        • → 잔여회차 카드사 부담

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (255)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시

        ARS
        부분 무이자 할부
        사전 신청
        (1644-2009)

          • 2~12개월 [30만원 결제 시]
          • 2~3개월 : 무이자
          • 4~6개월 : 1회차 (고객부담)
          • 7~10개월 : 1~2회차 (고객부담)
          • 11~12개월 : 1~3회차 (고객부담)
          • → 잔여회차 카드사 부담

          • 2~12개월 [100만원 결제 시]
          • 2~3개월 : 무이자
          • 4~6개월 : 무이자
          • 7~10개월 : 1~2회차 (고객부담)
          • 11~12개월 : 1~3회차 (고객부담)
          • → 잔여회차 카드사 부담

        부분 무이자 할부

        • 5~6개월 : 1~2회차 (고객부담)
        • 7~10개월 : 1~3회차 (고객부담)
        • → 잔여회차 카드사 부담

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (256)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시

        우리카드

        무이자할부

        • 2~4개월 : 5만원 이상 결제 시

        부분 무이자 할부

        • 10개월 : 1~3회차 (고객부담)
        • 12개월 : 1~4회차 (고객부담)
        • → 잔여회차 카드사 부담

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (257)

        무이자할부

        • 2~3개월 : 5만원 이상 결제 시
        • 12개월 : 200만원 이상 결제 시
        • ※분할결제 서비스 이용하여 결제 시 혜택 미적용

        부분 무이자 할부

        • 7개월 : 1~3회차 (고객부담)
        • 11개월 : 1~5회차 (고객부담)
        • → 잔여회차 카드사 부담
        • 무이자 할부 결제 시 포인트, 마일리지는 적립되지 않습니다.
        • ARS 무이자 할부는 해당 카드사 ARS 번호로 사전 신청을 하신 경우에 한하여 무이자 혜택이 적용됩니다. (ARS 부분 무이자 할부 포함)
        • 상기 부분 무이자 할부는 5만원 이상 결제 시 자동 적용되며, 결제창에는 무이자 표시가 되지 않을 수 있습니다.
        • 법인(기업)/ 체크/선불/기프트/ 은행계열카드(BC마크가 없는 NON BC카드 불가) 제외 됩니다.
        • 고객 부담 수수료는 해당 카드사로 문의 바랍니다.
        • 본 행사는 카드사 사정에 따라 일부 내용이 변경 또는 중단될 수 있습니다.

        확인

        확인

        취소 확인

        취소 확인

        확인

        • 챗봇 채팅하기

        이메일 무단 수집거부

        본 웹사이트는 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단 수집되는 것을 거부합니다.
        이를 위반 시 『정보통신망 이용 촉진 및 정보보호 등에 관한 법률』등에 의해 처벌받을 수 있습니다.

        아이디어 제안에 대한 정책

        삼성전자 및 삼성전자 임직원은 당사가 공식적으로 요청하지 않았음에도 불구하고 여러분께서 일방적으로 당사에 제출하는 아이디어나 제안 등을 수령하거나 검토하지 않습니다.

        이는 제출하신 내용이 당사 내부적으로 개발한 제품, 기술, 서비스와 유사할 경우 발생할 수 있는 오해와 분쟁을 방지하고 나아가 여러분의 창의적인 아이디어를 적극 보호하기 위함입니다.

        이러한 취지를 이해하여 주시고 구체화되지 않은 아이디어나 콘셉트(Concept) 단계의 제안이 당사에 제출되지 않도록 하여 주시기 바랍니다.

        갤럭시 탭 S9+ (Wi-Fi) (그라파이트) + 슬림 키보드 북커버 (탭 S9 FE+ 호환) (블랙) + 갤럭시 워치6 44 mm (블루투스) (그라파이트) | SM-X810NZAAFML | Samsung 대한민국 (2024)
        Top Articles
        Latest Posts
        Article information

        Author: Kieth Sipes

        Last Updated:

        Views: 5714

        Rating: 4.7 / 5 (67 voted)

        Reviews: 90% of readers found this page helpful

        Author information

        Name: Kieth Sipes

        Birthday: 2001-04-14

        Address: Suite 492 62479 Champlin Loop, South Catrice, MS 57271

        Phone: +9663362133320

        Job: District Sales Analyst

        Hobby: Digital arts, Dance, Ghost hunting, Worldbuilding, Kayaking, Table tennis, 3D printing

        Introduction: My name is Kieth Sipes, I am a zany, rich, courageous, powerful, faithful, jolly, excited person who loves writing and wants to share my knowledge and understanding with you.