Galaxy Ring

Inner part of the Galaxy Ring is in close-up. The ring moves to reveal the three sensors glowing. The ring continues to move and twist and shows the whole ring. Scene changes and the three Galaxy Ring appear one by one to form a line. The text Galaxy Ring and Galaxy AI is here can be seen.

Welcome to the new era
of AI-powered wellness

Wrap wellness tracking around your finger.

A lightweight titanium frame and sleek, concave design that's so comfortable, you'll forget it's there. Titanium strong and water resistant for all-day wear, with a battery that lasts up to 7 days. 3 built-in sensors give you insights around the clock. Galaxy AI analyzes the collected data to provide you with personalized wellness and sleep tips for better days and better nights.

Meet an all new Samsung Galaxy , , , , ,

Sleek,
concave design

Stay ahead of the trends with an all new Galaxy that proves high-tech devices don't have to be bulky. The concave design adds an elegant touch to the timeless aesthetic of Galaxy Ring. And its titanium frame gives the Galaxy Ring a stylish look that fits into all your day's activities. , ,

A Galaxy Ring appears and is in the background. Three rings appear in the front. The top one on the right shows the side of the ring. The middle one is tilted to show the inner part of the ring. The last one on the left is slightly tilted than the middle one.

Three-sensor technology
on your finger

One Ring, three-sensor technology. Galaxy Ring is 7mm wide, 2.6mm thick and weighs 2.3g — light and comfortable but fully equipped to track your days and nights. , ,

A Galaxy Ring appears, facing the front. It twists and turns to reveal the three sensors.

  • Accelerometer

    Track the movements and activity of your body without pressing a button.

  • Optical Bio-signal Sensor

    Monitor your heart rate.

  • Skin Temperature Sensor

    Get regular readings on how your skin temperature changes while you sleep.

  • Optical Bio-signal Sensor

    Monitor your heart rate and stay informed of your heart condition.

  • Accelerometer

    Track the movements and activity of your body without pressing a button.

  • Skin Temperature Sensor

    Get regular readings on how your skin temperature changes while you sleep.

Battery that lasts up to 7 days

Put on your Galaxy Ring to go to work, to the gym, to bed and repeat all over again without having to charge the battery. Galaxy Ring works day and night with a battery that lasts up to 7 days on a single charge. , ,

Three circles can be seen. The one in the middle is placed inside a Galaxy Ring. Each circle shows different hands wearing the ring in different situations. The scenes change as the text below the Galaxy Ring changes from Up to 1 Days to Up to 7 Days. A fully charged battery icon is next to the text to indicate the battery can last up to 7 days.

AI-powered
wellness tracker
on your finger

The more you wear your Galaxy Ring, the smarter it gets. Slip Galaxy Ring on your finger and let it track your wellness all day. Then, check the Samsung Health app to see the comprehensive report Galaxy AI put together. , , , ,

Galaxy AIis here

A Galaxy Ring twists and arranges itself into a slightly tilted side-view position. Smartphones also appear, with GUI of different Samsung Health features onscreen.

Crystal-clear, functional
charging case

Even while charging in its crystal-clear charging case, the Galaxy Ring is a sight to behold. The delicate glow of the light around the multi-purpose button indicates the battery charging level. The charging case can be charged wirelessly too. Simply place your Galaxy Ring in its case and place it on a wireless charging pad for easy charging. , ,

The lid of Galaxy Ring Charging Case lifts open. A Galaxy Ring is in its place, around the Multi-purpose button. The circular indicator light lights up in a counter-clockwise direction until fully illuminated in a circle.

Slim, light.
Fits right day and night

Whether you're typing on a keyboard, cooking or even sleeping, Galaxy Ring's slim form factor and lightweight titanium frame are so comfortable that you'll forget it's there. ,

A person is taking a break from an exercise with Galaxy Ring on a finger.
A person is taking a walk along the beach with Galaxy Ring on a finger.

Colours that match
any style

From the weight room to the ballroom, sport the Galaxy Ring for any occasion. Whether it's the subtle sophistication of the matt Titanium Black and Titanium Silver, or the brilliant glow of the Titanium Gold, Galaxy Ring blends seamlessly with your look. Explore the three unique colours of the Galaxy Ring.

Titanium Black
A slightly tilted Galaxy Ring in Titanium Black can be seen. A closed Charging Case with Galaxy Ring in Titanium Black in place can be seen.

10 ATM water-resistant rating

Keep your Galaxy Ring on when you're washing your hands, jumping into the shower or taking a dip in the ocean. Galaxy Ring has a water-resistant rating of 10 ATM — which means it will continue to track your data even when you're drenched.

A hand wearing a Galaxy Ring can be seen. A stream of water falls onto the hand to illustrate the water-resistance of the ring.

AI-powered
wellness insights on Samsung Health

Start your wellness journey on the right foot with Galaxy AI-powered insights on the Samsung Health app. Galaxy AI analyzes your data to give personalized tips that you can incorporate into your daily routine. It also sends you alerts when you haven't moved in a while or if your heart rate changes. , ,

At the top, the Samsung Health app icon and the text Samsung Health can be seen. A Galaxy Ring can be seen with a dotted Samsung Health icon in the middle, like it is going through the ring. The ring turns and the icon changes to a dotted heart icon to indicate the heart monitoring feature of Samsung Health. Above the ring, the Samsung Health app icon and the text Samsung Health changes to the text Galaxy AI is here.

Discover your body's potential
with Energy Score

Energy Score provides a comprehensive analysis of your sleep patterns, activities and heart rate and gives you an easy-to-understand score. Plan ahead and move smarter with Galaxy AI. ,

At the top, the sensors of Galaxy Ring light up and then the ring moves along to illustrate the Energy Score going up each day. Energy Score 92 can be seen with the text Excellent below.

Samsung Galaxy smartphone can be seen with the Energy Score feature onscreen. GUI of Sleep, Active, Heart Rate sections of the Energy Score feature can also be seen.

Stay motivated with Wellness Tips

Get personalized insights through Wellness Tips. Receive useful tips for your wellness journey based on your activity and sleep patterns.

Sleep through the night with your Galaxy Ring on. Together, Galaxy Ring and Samsung Health monitor your overall sleep including sleep stage, sleep pattern, nighttime movement, nightly skin temperature, and heart rate variations during sleep. Get Sleep Coaching based on the data to improve your sleep habits. ,

A hand wearing Galaxy Ring in bed can be seen.

Easily track your cycles
with skin temperature

Manage your cycles easier and plan ahead with Galaxy Ring. The Skin Temperature Sensor detects changes in your skin temperature while you sleep. Your temperature data is used to forecast your next period and the start of your next menstrual cycle within Cycle Tracking. ,

GUI of Cycle Tracking feature can be seen. At the top is a weekly calendar with the period marked. The section below shows that the user is on day 5 of her period. At the bottom is the Your cycle section that shows the dates of your period, predicted fertile window, predicted ovulation and predicted next period. Powered by Natural Cycles is at the very bottom.

Heart rate monitoring
you can count on

Galaxy Ring continuously monitors your heart rate and sends alerts through the Samsung Health app when your heart rate fluctuates, making sure you stay informed. ,

A heart icon can be seen in the middle to indicate heartbeat. In the background is the heart rate monitor line. Below, the BPM status can be seen along with a small heart icon. A High HR alert message can be seen at the top.

Simply place it on your finger and Galaxy Ring will take care of the rest. Galaxy Ring auto-tracks your walks and runs without having to press any start buttons. Check calories burned and other stats on the Samsung Health app to keep track of your progress. ,

Today

GUI of inactive alert and auto-tracking running and walking can be seen.

Two circles are showing the Galaxy Ring being used in different situations. The circle on the left shows hands with Galaxy Ring on one finger that are tying a shoe lace. The circle on the right shows a woman in sportswear on a run.
A close-up of a hand with Galaxy Ring on a finger can be seen, with a skateboard in the back to imply the person is a skateboarder.
People running in a marathon can be seen to illustrate the Auto Detect feature of Galaxy Ring.

Harmonizing your wellness journey

Access and manage comprehensive information about your overall well-being through the Samsung Health app on your Samsung Galaxy devices. Integrate detailed insights to strive toward your wellness goals.

Simply double-pinch to control your phone

With Galaxy Ring on your finger, you can control your paired Samsung Galaxy smartphone with a simple gesture. Just double-pinch with your thumb and the finger wearing the Galaxy Ring to take pictures or turn off alarms. , ,

A hand wearing Galaxy Ring can be seen, making a pinching motion. A closed Galaxy Z Flip6 with the camera open on the cover screen can be seen. Above the smartphone are two icons: Camera and Turn off alarms.

Trace back to the last location with Find My Ring

Lost your Galaxy Ring? Take a deep breath and open Find My Ring on your Samsung Galaxy device to see the location where your Galaxy Ring was last paired. , ,

A map can be seen. A location pointer icon with a Galaxy Ring points to a location to indicate that the Find My Ring feature is tracking the location.

Find the right fit with the Galaxy Ring Sizing Kit. Galaxy Ring sizes may be different from regular ring sizes, so get the Sizing Kit upon purchase to find the ideal fit for your finger. Choose from a selection of 11 sample rings and have it on for more than a full day to ensure that your finger feels comfortable. Once you've made your decision, complete your order on the My order page. , , , ,

Galaxy Ring Sizing Kit is open and 11 sample rings can be seen.
C C
  1. Availability of colours and sizes may vary by region, carrier, or retailer.
  2. For Samsung Health AI features, the health data tracked from Samsung Galaxy Ring must be synchronized with the Samsung Health app. Needs at least the previous day’s activity and sleep data, and heart rate data during sleep. Not intended for use in detection, diagnosis, treatment of any medical condition.
  3. Titanium is only applied on the device frame.
  4. Samsung Health tracking features are intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment, monitoring or management of any medical condition or disease. Any health related information accessed through the device and application should not be treated as medical advice. Users should seek any medical advice from a physician.
  5. Image simulated for illustrative purposes.
  6. Weight of Galaxy Ring varies by size. 2.3g is the weight of the size 5 Galaxy Ring. Size 6 Galaxy Ring 2.4g, size 7 Galaxy Ring 2.4g, size 8 Galaxy Ring 2.6g, size 9 Galaxy Ring 2.7g, size 10 Galaxy Ring 2.8g, size 11 Galaxy Ring 2.8, size 12 Galaxy Ring 3.0g, size 13 Galaxy Ring 3.0g, size 14 Galaxy Ring 3.2g, size 15 Galaxy Ring 3.3g.
  7. Galaxy Ring must be paired with a smartphone with Android 11.0 or above and minimum 1.5GB memory. Samsung account login is required. Service is only available when user registers their Galaxy Ring through their Samsung account.
  8. Battery life based on testing conducted with the size 12,13 Galaxy Ring. Battery life of the size 12,13 Galaxy Ring lasts up to 7 days on a single charge. Battery life varies by ring size.
  9. Battery life is based on results from internal lab tests for typical usage pattern scenarios conducted by Samsung. Tested with results from a pre-release version of the device using under scenario of Sleep Tracking for 6 hours, Work Auto Detection for 1 hour and 30 minutes and with several specific events ( reconnection after disconnection, Samsung Health app setting change, Find My Ring execution, gesture execution) assuming 24 hours of use per day. Actual battery life may vary depending on different usage patterns, device model, or the battery manufacturer. 
  10. Actual battery life varies depending on usage patterns and other factors. Rated capacity is 17mAh for sizes 5,6,7 (battery life up to 6 days on a single charge), 18.5mAh for sizes 8,9,10,11 (battery life up to 6 days on a single charge), and 22.5mAh for sizes 12,13,14,15 (battery life up to 7 days on a single charge). Testing conducted by Samsung using Fast Charging USB C Cable, and Samsung 25W USB C Power Adapter. Charge time varies with settings, usage pattern and environmental factors; actual results may vary.
  11. Energy Score is available on Android phones (Android 11.0 or above) and requires Samsung Health app (v6.27 or above). Samsung account login is required. Service is only available when user registers their Galaxy Ring through their Samsung account. Service availability may vary by country or region. Not intended for use in detection, diagnosis, treatment of any medical condition or diseases. The measurements are for your personal reference only. Please consult a medical professional for advice. Accuracy of results is not guaranteed.
  12. Sleep tracking features are intended for general wellness and fitness purposes only. Intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment of any medical condition or diseases. The measurements are for your personal reference only. Please consult a medical professional for advice. Availability of Galaxy AI may vary by device model.
  13. Sleep Coaching requires sleep data from at least 7-night within a 30-night period. Sleep Coaching is available on Android phones (Android 11.0 or above) and requires Samsung Health app (v6.27 or above). Samsung account login is required.
  14. Galaxy Ring includes 1 Charging Case and 1 USB cable.
  15. Size of Charging Case varies depending on Galaxy Ring size.
  16. Wireless charger sold separately.
  17. Galaxy Ring is water resistant for up to 10 minutes in water with depth of 100 meters according to ISO22810 standard. The test was conducted in 5% salty water and 4ppm chlorine water. Galaxy Ring is water resistant with IPx8 rating based on lab conditions of submerging up to 1.5 meter in fresh water for up to 30 minutes. It is not suitable for high-pressure water activities and diving. It may be used for shallow-water activities like swimming in a pool or ocean. Water resistance is not a permanent condition and can diminish over time. Refer to the user manual for further information, including care/use instructions.
  18. Wellness Tips data is derived from information logged in the Samsung Health application. Wellness Tips is available on Android phones (Android 11.0 or above) and requires Samsung Health app (v6.27 or above). Samsung account login is required. Service is only available when user registers their Galaxy Ring through their Samsung account. Service availability may vary by region, carrier, or retailer. Intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment of any medical condition or diseases. The measurements are for your personal reference only. Please consult a medical professional for advice. Availability of Galaxy AI may vary by device model.
  19. Cycle Tracking is available for cycle and period prediction which is powered by Natural Cycles. Cycle Tracking based on skin temperature works on phones and watches purchased in the countries where the service is currently available. NOT INTENDED FOR CONTRACEPTION. If you are currently taking hormonal birth control or undergoing hormonal treatment that inhibits ovulation, this service will not be useful for tracking ovulation. Predictions displayed are for personal reference only. To improve the accuracy of predictions, it is recommended to wear your ring for at least 4 hours during sleep, 5 times a week. Predictions may vary depending on the proper use of your ring, input data, environmental conditions, etc. Intended for users 18 years old and above. Users should not interpret or take clinical action based on the predictions made without consultation of a qualified healthcare professional. Requires latest version of Samsung Health app.
  20. Availability of Samsung Health features may vary by country or region.
  21. Heart Rate Tracking is available on Android phones (Android 11.0 or above) and requires Samsung Health app (v6.27 or above). Samsung account login is required. Service is only available when user registers their Galaxy Ring through their Samsung account. Service availability may vary by country or region. Intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment of any medical condition or diseases. The measurements are for your personal reference only. Please consult a medical professional for advice.
  22. Auto Workout Detection is available only with walking and running. Auto Workout Detection must first be turned on within Samsung Health app.
  23. Double Pinch is only possible for camera control and alarm dismiss. The Double Pinch feature can only be used on the Galaxy Ring paired with Samsung Galaxy smartphones running One UI 6.1.1 or above. For Alarm dismiss, the clock app version must be 12.3.30.35 or above.
  24. During certain activities, Galaxy Ring may detect a Double Pinch gesture that you did not intend to perform. In this case, we suggest disabling the gesture recognition feature during those activities.
  25. Galaxy Z Flip6 sold separately.
  26. Find My Ring is only supported by Samsung Find. Location history is not supported.
  27.  Find My Ring on Samsung Find locates the Galaxy Ring based on the last connected location.
  28. Samsung Find is only available on Samsung Galaxy devices with Android 11.0 or later.
  29. Find My Ring shows the last location the Galaxy Ring was paired with a Samsung Galaxy device. It does not keep track of the ring's location.
  30. Galaxy Ring sizes are based on US standard sizes (US 5 - US 15).
  31. One Sizing Kit is available free of charge upon purchasing the Galaxy Ring. Only one Sizing Kit is provided per order number.
  32. Sample rings included in the Galaxy Ring Sizing Kit are inoperable and for measuring ring size only.
  33. Wearing the sample ring for at least 24 hours is recommended to allow sufficient time for your finger to adapt to the fit of the Galaxy Ring.
" )).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 d = o[l]; 0 <= d[0] && d[0] <= a && 0 <= d[1] && d[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 x() { 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), h.call(this, i), Object.keys(_).forEach(function (t) { Object.keys(_[t]).forEach(function (e) { x.prototype[e] || (x.prototype[e] = _[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({}, F)), l = (r.useModulesParams(o), (r.params = U.extend({}, o, W, 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 x(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 T = { 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 = T.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, d, n = i.getTranslate() + a * s.sensitivity, s = i.isBeginning, h = 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) || (!h && 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), (h = l[0]), l.push(o), s && (o.delta > s.delta || o.direction !== s.direction) ? l.splice(0) : 15 <= l.length && o.time - h.time < 500 && 1 <= h.delta - o.delta && o.delta <= 6 && ((d = 0 < a ? 0.8 : 0.2), (i.mousewheel.lastEventBeforeSnap = o), l.splice(0), (i.mousewheel.timeout = U.nextTick(function () { i.slideToClosest(i.params.speed, !0, void 0, d); }, 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, 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, }), (h = i.mousewheel.recentWheelEvents), (r = (2 <= h.length && h.shift(), h.length ? h[h.length - 1] : void 0)); if ( (h.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, t = T.event(); return this.params.cssMode ? (this.wrapperEl.removeEventListener(t, this.mousewheel.handle), !0) : !!t && !this.mousewheel.enabled && ((e = this.$el), (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 e, t = T.event(); return this.params.cssMode ? (this.wrapperEl.addEventListener(t, this.mousewheel.handle), !0) : !!t && !( !this.mousewheel.enabled || ((e = this.$el), (e = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : e).off(t, this.mousewheel.handle), (this.mousewheel.enabled = !1)) ); }, }, A = { 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)); }, }, L = { 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, d = this.pagination.bullets; if ( (s.dynamicBullets && ((this.pagination.bulletSize = d .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(d.length, s.dynamicMainBullets) - 1)) + r) / 2)), d.removeClass( s.bulletActiveClass + " " + s.bulletActiveClass + "-next " + s.bulletActiveClass + "-next-next " + s.bulletActiveClass + "-prev " + s.bulletActiveClass + "-prev-prev " + s.bulletActiveClass + "-main" ), 1 < i.length) ) d.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 = d.eq(a), h = t.index(); if ((t.addClass(s.bulletActiveClass), s.dynamicBullets)) { for (var t = d.eq(r), c = d.eq(o), p = r; p <= o; p += 1) d.eq(p).addClass(s.bulletActiveClass + "-main"); if (this.params.loop) if (h >= d.length - s.dynamicMainBullets) { for (var u = s.dynamicMainBullets; 0 <= u; --u) d.eq(d.length - u).addClass( s.bulletActiveClass + "-main" ); d.eq(d.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 && ((h = Math.min(d.length, s.dynamicMainBullets + 4)), (t = (this.pagination.bulletSize * h - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize), (c = e ? "right" : "left"), d.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 && ((h = s.progressbarOpposite ? this.isHorizontal() ? "vertical" : "horizontal" : this.isHorizontal() ? "horizontal" : "vertical"), (l = (a + 1) / n), (c = e = 1), "horizontal" == h ? (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); }, }, P = { setTranslate: function () { var e, t, i, s, a, n, r, o; this.params.scrollbar.el && this.scrollbar.el && ((i = this.scrollbar), (e = this.rtlTranslate), (o = this.progress), (t = i.dragSize), (s = i.$dragEl), (a = i.$el), (n = this.params.scrollbar), (o = ((i = i.trackSize) - (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.size * this.snapGrid.length)) * (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); }); }, }, Z = { getDistanceBetweenTouches: function (e) { var t, i, s; return e.targetTouches.length < 2 ? 1 : ((t = e.targetTouches[0].pageX), (i = e.targetTouches[0].pageY), (s = e.targetTouches[1].pageX), (e = e.targetTouches[1].pageY), 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 = Z.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 = Z.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, 0.5)), i.scale < t.minRatio && (i.scale = t.minRatio + 1 - Math.pow(t.minRatio - i.scale + 1, 0.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, 0.8)), s.currentX > s.maxX && (s.currentX = s.maxX - 1 + Math.pow(s.currentX - s.maxX + 1, 0.8)), s.currentY < s.minY && (s.currentY = s.minY + 1 - Math.pow(s.minY - s.currentY + 1, 0.8)), s.currentY > s.maxY && (s.currentY = s.maxY - 1 + Math.pow(s.currentY - s.maxY + 1, 0.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, t, i, s, a = this.zoom, n = a.gesture, r = a.image, o = a.velocity; n.$imageEl && 0 !== n.$imageEl.length && (r.isTouched && r.isMoved ? ((r.isTouched = !1), (r.isMoved = !1), (e = o.x * (i = 300)), (e = r.currentX + e), (t = o.y * (s = 300)), (t = r.currentY + t), 0 !== o.x && (i = Math.abs((e - r.currentX) / o.x)), 0 !== o.y && (s = Math.abs((t - r.currentY) / o.y)), (o = Math.max(i, s)), (r.currentX = e), (r.currentY = t), (i = r.width * a.scale), (s = r.height * a.scale), (r.minX = Math.min(n.slideWidth / 2 - i / 2, 0)), (r.maxX = -r.minX), (r.minY = Math.min(n.slideHeight / 2 - s / 2, 0)), (r.maxY = -r.minY), (r.currentX = Math.max(Math.min(r.currentX, r.maxX), r.minX)), (r.currentY = Math.max(Math.min(r.currentY, r.maxY), r.minY)), n.$imageWrapEl .transition(o) .transform( "translate3d(" + r.currentX + "px, " + r.currentY + "px,0)" )) : ((r.isTouched = !1), (r.isMoved = !1))); }, 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 )); }, }, J = { loadInSlide: function (e, o) { void 0 === o && (o = !0); var l, d = this, h = d.params.lazy; void 0 !== e && 0 !== d.slides.length && ((e = (l = d.virtual && d.params.virtual.enabled ? d.$wrapperEl.children( "." + d.params.slideClass + '[data-swiper-slide-index="' + e + '"]' ) : d.slides.eq(e)).find( "." + h.elementClass + ":not(." + h.loadedClass + "):not(." + h.loadingClass + ")" )), 0 !== (e = !l.hasClass(h.elementClass) || l.hasClass(h.loadedClass) || l.hasClass(h.loadingClass) ? e : e.add(l[0])).length) && e.each(function (e, t) { var i = S(t), s = (i.addClass(h.loadingClass), i.attr("data-background")), a = i.attr("data-src"), n = i.attr("data-srcset"), r = i.attr("data-sizes"); d.loadImage(i[0], a || s, n, r, !1, function () { var e, t; null == d || !d || (d && !d.params) || d.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(h.loadedClass).removeClass(h.loadingClass), l.find("." + h.preloaderClass).remove(), d.params.loop && o && ((e = l.attr("data-swiper-slide-index")), l.hasClass(d.params.slideDuplicateClass) ? ((t = d.$wrapperEl.children( '[data-swiper-slide-index="' + e + '"]:not(.' + d.params.slideDuplicateClass + ")" )), d.lazy.loadInSlide(t.index(), !1)) : ((t = d.$wrapperEl.children( "." + d.params.slideDuplicateClass + '[data-swiper-slide-index="' + e + '"]' )), d.lazy.loadInSlide(t.index(), !1))), d.emit("lazyImageReady", l[0], i[0])); }), d.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 d(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 h = e; h < e + o; h += 1) l(h) && i.lazy.loadInSlide(h); else i.lazy.loadInSlide(e); if (r.loadPrevNext) if (1 < o || (r.loadPrevNextAmount && 1 < r.loadPrevNextAmount)) { for ( var r = r.loadPrevNextAmount, c = o, p = Math.min(e + c + Math.max(r, c), a.length), c = Math.max(e - Math.max(c, r), 0), u = e + o; u < p; u += 1 ) l(u) && i.lazy.loadInSlide(u); for (var v = c; v < e; v += 1) l(v) && i.lazy.loadInSlide(v); } else { (r = t.children("." + s.slideNextClass)), (c = (0 < r.length && i.lazy.loadInSlide(d(r)), t.children("." + s.slidePrevClass))); 0 < c.length && i.lazy.loadInSlide(d(c)); } }, }, I = { 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 = ((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 I.LinearSpline(this.slidesGrid, e.slidesGrid) : new I.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 u && r(n[o]); else n instanceof u && 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 u && n(a[i]); else a instanceof u && 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 ); }, }, k = { init: function () { var e; this.params.history && (X.history && X.history.pushState ? (((e = this.history).initialized = !0), (e.paths = k.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 ))) : ((this.params.history.enabled = !1), (this.params.hashNavigation.enabled = !0))); }, destroy: function () { this.params.history.replaceState || X.removeEventListener( "popstate", this.history.setHistoryPopState ); }, setHistoryPopState: function () { (this.history.paths = k.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 = k.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); k.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); }, }, z = { 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); }, }, M = { 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, d = this.isHorizontal(), h = this.virtual && this.params.virtual.enabled, c = 0; l.shadow && (d ? (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 p, u = 0; u < s.length; u += 1) { var v = s.eq(u), m = u, g = 90 * (m = h ? parseInt(v.attr("data-swiper-slide-index"), 10) : m), f = Math.floor(g / 360), w = (r && ((g = -g), (f = Math.floor(-g / 360))), Math.max(Math.min(v[0].progress, 1), -1)), y = 0, b = 0, E = 0, f = (m % 4 == 0 ? ((y = 4 * -f * o), (E = 0)) : (m - 1) % 4 == 0 ? ((y = 0), (E = 4 * -f * o)) : (m - 2) % 4 == 0 ? ((y = o + 4 * f * o), (E = o)) : (m - 3) % 4 == 0 && ((y = -o), (E = 3 * o + 4 * o * f)), r && (y = -y), d || ((b = y), (y = 0)), "rotateX(" + (d ? 0 : -g) + "deg) rotateY(" + (d ? g : 0) + "deg) translate3d(" + y + "px, " + b + "px, " + E + "px)"); w <= 1 && -1 < w && ((c = 90 * m + 90 * w), r) && (c = 90 * -m - 90 * w), v.transform(f), l.slideShadows && ((g = d ? v.find(".swiper-slide-shadow-left") : v.find(".swiper-slide-shadow-top")), (y = d ? v.find(".swiper-slide-shadow-right") : v.find(".swiper-slide-shadow-bottom")), 0 === g.length && ((g = S( '
' )), v.append(g)), 0 === y.length && ((y = S( '
' )), v.append(y)), g.length && (g[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 && (d ? 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), (p = l.shadowOffset), e.transform( "scale3d(" + t + ", 1, " + a + ") translate3d(0px, " + (n / 2 + p) + "px, " + -n / 2 / a + "px) rotateX(-90deg)" ))), i.transform( "translate3d(0px,0," + (C.isSafari || C.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, d = -n[0].swiperSlideOffset, h = 0; this.isHorizontal() ? t && (o = -o) : ((h = d), (l = -o), (o = d = 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(" + d + "px, " + h + "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, d = r ? n.rotate : -n.rotate, h = n.depth, c = 0, p = i.length; c < p; c += 1 ) { var u = i.eq(c), v = a[c], v = ((l - u[0].swiperSlideOffset - v / 2) / v) * n.modifier, m = r ? d * v : 0, g = r ? 0 : d * v, f = -h * Math.abs(v), w = r ? 0 : n.stretch * v, y = r ? n.stretch * v : 0, y = (Math.abs(y) < 0.001 && (y = 0), Math.abs(w) < 0.001 && (w = 0), Math.abs(f) < 0.001 && (f = 0), Math.abs(m) < 0.001 && (m = 0), "translate3d(" + y + "px," + w + "px," + f + "px) rotateX(" + (g = Math.abs(g) < 0.001 ? 0 : g) + "deg) rotateY(" + m + "deg)"); u.transform(y), (u[0].style.zIndex = 1 - Math.abs(Math.round(v))), n.slideShadows && ((w = r ? u.find(".swiper-slide-shadow-left") : u.find(".swiper-slide-shadow-top")), (f = r ? u.find(".swiper-slide-shadow-right") : u.find(".swiper-slide-shadow-bottom")), 0 === w.length && ((w = S( '
' )), u.append(w)), 0 === f.length && ((f = S( '
' )), u.append(f)), w.length && (w[0].style.opacity = 0 < v ? v : 0), f.length) && (f[0].style.opacity = 0 < -v ? -v : 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 d = 0; d < r; d += 1) t.slides.eq(this.realIndex + d).addClass(o); } }, }, O = [ v, j, Y, m, f, 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: T.enable.bind(this), disable: T.disable.bind(this), handle: T.handle.bind(this), handleMouseEnter: T.handleMouseEnter.bind(this), handleMouseLeave: T.handleMouseLeave.bind(this), animateSlider: T.animateSlider.bind(this), releaseScroll: T.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: A.init.bind(this), update: A.update.bind(this), destroy: A.destroy.bind(this), onNextClick: A.onNextClick.bind(this), onPrevClick: A.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: L.init.bind(this), render: L.render.bind(this), update: L.update.bind(this), destroy: L.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: P.init.bind(this), destroy: P.destroy.bind(this), updateSize: P.updateSize.bind(this), setTranslate: P.setTranslate.bind(this), setTransition: P.setTransition.bind(this), enableDraggable: P.enableDraggable.bind(this), disableDraggable: P.disableDraggable.bind(this), setDragPosition: P.setDragPosition.bind(this), getPointerPosition: P.getPointerPosition.bind(this), onDragStart: P.onDragStart.bind(this), onDragMove: P.onDragMove.bind(this), onDragEnd: P.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] = Z[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: J.load.bind(this), loadInSlide: J.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: I.getInterpolateFunction.bind(this), setTranslate: I.setTranslate.bind(this), setTransition: I.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: k.init.bind(this), setHistory: k.setHistory.bind(this), setHistoryPopState: k.setHistoryPopState.bind(this), scrollToSlide: k.scrollToSlide.bind(this), destroy: k.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: z.init.bind(this), destroy: z.destroy.bind(this), setHash: z.setHash.bind(this), onHashCange: z.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: M.run.bind(t), start: M.start.bind(t), stop: M.stop.bind(t), pause: M.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: 0.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 === u.use && ((u.use = u.Class.use), (u.installModule = u.Class.installModule)), u.use(O), u ); }); let ANIUTIL = { scrollController: function () { let i = {}, e = navigator.userAgent.toLowerCase(), s = -1 < e.indexOf("mac os"), a = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, n = s ? 60 : 120, r, o, l, d, h = a === document.body && document.documentElement ? document.documentElement : a, t = !1, c = null; let p = { wheel: function () { ("Netscape" == navigator.appName && -1 != navigator.userAgent.search("Trident")) || -1 != e.indexOf("msie") ? document.documentElement.addEventListener( "mousewheel", u.scrollEvent, { passive: !1 } ) : document.documentElement.addEventListener( "wheel", u.scrollEvent, { passive: !1 } ); }, scroll: function () { window.addEventListener("scroll", function () { "hidden" == document.documentElement.style.overflow || "hidden" == document.body.style.overflow || t || (l = a.scrollTop); }); }, }, u = { scrollEvent: function (e) { var t; "hidden" != document.documentElement.style.overflow && "hidden" != document.body.style.overflow && (e.preventDefault(), (t = document.body.getAttribute("data-scroll-speed")), (e = u.normalizeWheelDelta(e)), (t = i.currDelta && t ? t : t || r ? r : 120), (l += -e * t), (d = Math.max( 0, Math.min(l, a.scrollHeight - h.clientHeight) )), u.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 = d - a.scrollTop, e = Math.ceil(a.scrollTop + e) <= 0 ? 0 : l > d ? d : Math.ceil(a.scrollTop + e); (t = !0), TweenMax.to(a, o, { ease: "circ.out", scrollTop: e, onComplete: function () { clearTimeout(c), (c = null), (c = setTimeout(function () { (t = !1), (l = a.scrollTop); }, 500)); }, }), l <= 0 ? (l = 0) : l >= d && (l = d); }, }; return { init: function (e) { var t; return ( (t = e), (r = t.speed ? (s ? t.speed / 2 : t.speed) : n), (o = t.duration || 0.6), (l = a.scrollTop), p.wheel(), p.scroll(), (this.opt = e) ); }, destroy: function (e) { document.documentElement.removeEventListener( "mousewheel", u.scrollEvent ), document.documentElement.removeEventListener( "wheel", u.scrollEvent ), e && (i = {}); }, }; }, }, UTILS = ((window.RING = window.RING || {}), (() => { 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: (() => { let e = navigator.appVersion.match(/(mac|win|linux)/i); (e = e ? e[1].toLowerCase() : ""), document.documentElement.classList.add(e); })(), 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 () { let t = [], e = arguments.length; for (; e--; ) t[e] = arguments[e]; var i = Object(t[0]); for (let e = 1; e < t.length; e += 1) { var s = t[e]; if (null != s) { var a = Object.keys(Object(s)); for (let e = 0, t = a.length; e < t; e += 1) { var n = a[e], r = Object.getOwnPropertyDescriptor(s, n); void 0 !== r && r.enumerable && (this.isObject(i[n]) && this.isObject(s[n]) ? this.def(i[n], s[n]) : !this.isObject(i[n]) && this.isObject(s[n]) ? ((i[n] = {}), this.def(i[n], s[n])) : (i[n] = s[n])); } } } 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 }; }, 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; }, getHeight: function (e) { if (e) { var t = window.getComputedStyle(e), i = t.display, t = parseInt(t.maxHeight); const s = 0; return "none" != i && 0 != t ? 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); } return 0; }, isRTL: function () { return document.documentElement.classList.contains("rtl"); }, checkRegion: function () { var t = document.getElementsByTagName("meta"); let i = ""; for (let e = 0; e < t.length; e++) if ("sitecode" == t[e].getAttribute("name")) return (i = t[e].getAttribute("content")); if ("" == i) return -1 < document.location.pathname.indexOf("global") ? "global" : "jp"; }, isLowNetwork: function () { var e = UTILS.getCookie("___GALAXY_SPEED") || UTILS.getCookie("__COM_SPEED"); return null != e && ("L" == e || ("H" != e && void 0)); }, getNavHeight: function () { let e = 0; var t, i, s = document.querySelector(".pd-g-header-navigation") || document.querySelector("#subnav") || document.querySelector(".sticky-menu") || document.querySelector(".pd-g-floating-nav"); return (e = s ? s.classList.contains("pd-g-header-navigation") ? ((i = (t = s.querySelector( ".pd-header-navigation" )).querySelector(".pd-header-navigation__menu-wrap")), t.clientHeight + i.clientHeight) : s.clientHeight : e); }, isBrokenFixed: function () { var e = window.innerWidth, t = window.innerHeight; let i = !1; return ( document.documentElement.classList.remove("is-broken-fixed"), (1440 <= e && t <= 540) || (e <= 810 && t / e < 0.5277) || t < UTILS.MIN_VIEW_HEIGHT ? (document.documentElement.classList.add("is-broken-fixed"), (i = !0)) : document.documentElement.classList.remove( "is-broken-fixed" ), i ); }, isTouchDevice: ((s = "ontouchstart" in window || (window.DocumentTouch && document instanceof window.DocumentTouch)) ? document.documentElement.classList.add("isTouchDevice") : document.documentElement.classList.add("isNotTouchDevice"), s), isIEorEdge: (() => { let e; var 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; })()); (RING.UTILS = UTILS), (() => { window.RING = window.RING || {}; let p = RING.UTILS; RING.ImageLoader = class { constructor(e = container, t) { t = { el: e, lazyClass: ".js-img-src", lazyCompleteClass: "load-complete", 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.events = { load: this.onLoadHandler.bind(this), resize: this.onResizeHandler.bind(this), scroll: this.lazyEvent.bind(this), }), (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() { let t = []; var e = this.el.children; Array.from(e).forEach((e) => { e.classList.contains("is-feature-hide") || ((e = e.querySelectorAll(this.opts.lazyClass)), t.push(...e)); }), (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.events.load), window.addEventListener("scroll", this.events.scroll), this.responsiveCheck && window.addEventListener("resize", this.events.resize); } onLoadHandler() { this.events.resize(), this.events.scroll(), setTimeout(() => { this.responsiveHandler(), this.lazyEvent(); }, 300), window.removeEventListener("load", this.events.load); } onResizeHandler() { clearTimeout(this.opts.resizeStart), (this.opts.resizeStart = setTimeout(() => { this.responsiveHandler(), this.lazyEvent(); }, 150)); } lazyEvent() { this.setLazyImage(), this.lazyLength === this.lazyCompleteLength && window.removeEventListener("scroll", this.events.scroll); } 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)), void 0 === window.GALAXY && !window.GALAXY && (-1 < e.indexOf(".jpg") || -1 < e.indexOf(".png")) && (e += "?imbypass=true"), i[t].classList.contains(this.opts.lazyCompleteClass) || (i[t].setAttribute("src", e), i[t].classList.add(this.opts.lazyCompleteClass)); } else for (let t = 0; t < this.responsiveLength; t++) { var a = this.responsiveImages[t]; let e = a.getAttribute(this.targetAttr); (e = e || this.findImageHandler(a)), void 0 === window.GALAXY && !window.GALAXY && (-1 < e.indexOf(".jpg") || -1 < e.indexOf(".png")) && (e += "?imbypass=true"), a.classList.contains(this.opts.lazyCompleteClass) && a.setAttribute("src", e); } } 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 = p.getScroll.call(this).top - e, s = p.getScroll.call(this).bottom + e, a = p.getOffset.call(this, t).top, n = p.getOffset.call(this, t).bottom, r = this.opts.lazyClass.split("."), o = r[r.length - 1], l; var h, c; if ( ("none" === window.getComputedStyle(t).display ? null != (h = t.parentNode).offsetParent && ((l = h.offsetParent), (a = p.getOffset.call(this, h).top), (n = p.getOffset.call(this, h).bottom)) : (l = t.offsetParent), ((s > a && i <= a) || (i < n && s > n) || (i < a && s > n) || (i > a && s < n)) && null != l) ) { let e = t.getAttribute(this.targetAttr); (e = e || this.findImageHandler(t)), void 0 === window.GALAXY && !window.GALAXY && (-1 < e.indexOf(".jpg") || -1 < e.indexOf(".png")) && (e += "?imbypass=true"), t.classList.contains(this.opts.lazyCompleteClass) || (t.setAttribute("src", e), (c = () => { 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); } }; })(), (() => { window.RING = window.RING || {}; let e = RING.UTILS, t = e.RESPONSIVE; class i { constructor(e = container, t) { t = { el: e, lazyClass: t.lazyClass || ".js-video-src", responsiveClass: t.responsiveClass || ".js-res-video", imageLazyCompleteClass: "load-complete", 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.prevSrcArray = []), (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") && !e.closest(".is-feature-hide")) 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(t) { var i = (e) => { let t = e.querySelector("video"), i = e.getAttribute(this.targetAttr); t.querySelectorAll("source").forEach((e) => { var t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = i + (".webm" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))), -1 < t.indexOf("mp4") && (e.src = i + (".mp4" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))); }), (t.isCanplayThrough = !1), t.load(), t.addEventListener( "canplaythrough", () => { window.setTimeout(() => { (t.isCanplayThrough = !0), e.classList.add(this.classes.loaded); }, 500), this.checkCompleteVideo(); }, { once: !0 } ); }; if (t) for (let e = 0; e < t.length; e++) i(t[e]); else for (let e = 0; e < this.responsiveLength; e++) { var s = this.responsiveVideos[e]; s.classList.contains(this.classes.loaded) && s.isVideoInit && i(s); } } setLazyVideo() { for (let e = 0; e < this.lazyLength; e++) { var t = window.pageYOffset, i = t + window.innerHeight, s = this.lazyVideos[e], a = s.getBoundingClientRect(); i > t + a.top - window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && t < t + a.bottom + window.innerHeight * (0 != window.pageYOffset ? this.opts.visiblePoint : 0) && !s.isVideoInit && this.videoCallStack.indexOf(e) < 0 && (this.videoCallStack.push(e), this.setVideoSrc()); } } setVideoSrc() { var e = this.videoCallStack[0]; let t = this.lazyVideos[e], i = t.querySelector("video"), s = t.getAttribute(this.targetAttr); var a = this.opts.lazyClass.split("."); let n = a[a.length - 1]; a = s; let r = () => { this.checkCompleteVideo(), this.videoCallStack.splice(0, 1), 0 < this.videoCallStack.length && this.setVideoSrc(); }; var o = () => { window.setTimeout(() => { (i.isCanplayThrough = !0), t.classList.add(this.classes.loaded); }, 500), 1 == this.opts.lazyClass.split(" ").length && t.classList.remove(n), r(); }; this.prevSrcArray[e] !== a && (i.querySelectorAll("source").forEach((e) => { var t = e.getAttribute("type"); -1 < t.indexOf("webm") && (e.src = s + (".webm" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))), -1 < t.indexOf("mp4") && (e.src = s + (".mp4" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true"))); }), (i.isCanplayThrough = !1), i.load(), i.addEventListener("canplaythrough", o, { once: !0 }), i.addEventListener( "error", () => { window .fetch( s + (".webm" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true")), { mode: "no-cors" } ) .then((e) => { if (404 === e.status) return fetch( s + (".mp4" + (void 0 !== window.GALAXY || window.GALAXY ? "" : "?imbypass=true")), { mode: "no-cors" } ); }) .then((e) => { 404 === e.status && r(); }) .catch(() => { r(); }); }, !0 ), (t.isVideoInit = !0), (this.prevSrcArray[e] = a)); } 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; } } RING.VideoLoader = i; })(), (() => { window.RING = window.RING || {}; let d = RING.UTILS, e = d.RESPONSIVE; RING.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", playOffset: 0.5, playType: "oneWay", visiblePoint: t.visiblePoint || 0, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused", }, resizeStart: null, on: { updateController: null, updatePlayState: null, updateTime: 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()); } 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); } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), window.addEventListener( "scroll", this.onScrollHandler.bind(this) ), this.video.addEventListener("play", this.onVideoPlay.bind(this)), this.video.addEventListener( "pause", this.onVideoPause.bind(this) ), this.video.addEventListener( "ended", this.onVideoEnded.bind(this) ), this.video.addEventListener( "canplaythrough", this.onCanplayThrough.bind(this), { once: !0 } ), this.video.addEventListener( "timeupdate", this.onTimeUpdate.bind(this) ), 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"; let i = this.videoElement.getAttribute(e); e = i; this.prevVideoSrc !== e && ((this.videoElement.playState = !1), this.video.querySelectorAll("source").forEach((e) => { var 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(); }, { once: !0 } )), (this.prevVideoSrc = e); } } onLoad(e) { if (e === this.videoElement) { e = "mobile" !== this.currentDevice ? "data-media-pc" : "data-media-mo"; let i = this.videoElement.getAttribute(e); (this.videoElement.playState = !1), this.video.querySelectorAll("source").forEach((e) => { var 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.isCanplayThrough = !1), this.video.addEventListener( "canplaythrough", () => { (this.video.isCanplayThrough = !0), d.isLowNetwork() || this.onPlay(); }, { once: !0 } ); } } onPlay(e) { var t = () => { if (!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.remove(this.classes.ended), this.videoElement.classList.remove(this.classes.paused); let e = () => { this.video.isCanplayThrough && 3 < this.video.readyState ? (cancelAnimationFrame(this.opts.videoFrame), clearTimeout(this.opts.videoPlayTimeout), (this.opts.videoPlayTimeout = setTimeout(() => { this.video.play(), this.updateController(), this.outCallback("updatePlayState", !0), this.videoElement.classList.remove( this.classes.ended ), this.videoElement.classList.remove( this.classes.paused ), this.videoElement.classList.add(this.classes.playing); }, 250))) : (this.opts.videoFrame = requestAnimationFrame(e)); }; (this.opts.videoFrame = requestAnimationFrame(e)), 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) { this.videoElement.playState || (cancelAnimationFrame(this.opts.videoFrame), clearTimeout(this.opts.videoPlayTimeout)); 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); } onTimeUpdate() { var e = { el: this.videoElement, duration: this.video.duration, currentTime: this.video.currentTime, playState: this.videoElement.playState, controller: this.videoController, }; this.outCallback("updateTime", e); } onClickController(e) { e.preventDefault(), this.videoElement.playState ? this.onPause() : this.onPlay(); } onVideoPlay() { (this.videoElement.playState = !0), this.videoElement.classList.remove(this.classes.ended), this.videoElement.classList.add(this.classes.playing), this.videoElement.classList.remove(this.classes.paused), this.updateController(), this.outCallback("updatePlayState", !0); } onVideoPause() { (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(), this.outCallback("updatePlayState", !1); } onVideoEnded() { (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(), this.outCallback("updatePlayState", !1); } 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), this.outCallback("updatePlayState", this.videoElement.playState)); } onScrollHandler() { if (!this.videoElement.closest(".cm-layer")) { var t = scrollY > this.lastScrollY ? "down" : "up", i = d.getHeight(this.videoElement) * this.opts.playOffset, s = d.getScroll().top, a = d.getScroll().bottom, n = d.getOffset(this.videoElement).top, r = d.getOffset(this.videoElement).bottom; let e = 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 ("oneWay" === this.opts.playType) if (n + i <= a && s <= r) { let e = this.isCanplay || "down" == t; !e || !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || d.isLowNetwork() || this.onPlay(); } else a < n ? this.autoPlay && this.videoElement.autoPlayState && (e || o || l) && this.onReset() : r < s && this.autoPlay && (this.videoElement.autoPlayState ? (e || o) && this.onEnded() : this.videoElement.classList.add(this.classes.ended)); else "reverse" === this.opts.playType && (n + i <= a && s <= r - i ? !this.autoPlay || this.videoElement.playState || this.videoElement.autoPlayState || d.isLowNetwork() || this.onPlay() : (r < s || a < n) && this.autoPlay && this.onReset()); this.lastScrollY = scrollY; } } onResponsiveChange() { window.setTimeout(() => { (this.isCanplay = !0), this.onReset(), this.onScrollHandler(), (this.isCanplay = !1); }, 100); } 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.onScrollHandler(), this.winWidth >= e.MOBILE.WIDTH ? (this.currentDevice = "desktop") : (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); } }; })(), (() => { window.RING = window.RING || {}; var e = (() => { let r = {}, e = !1, t = null, h = null, i = function () { a(), n(), s(), UTILS.isLowNetwork() && document.documentElement.classList.add("low_network"), document.documentElement.classList.add("load"), window.removeEventListener("load", i); }, s = () => { var e = document.querySelectorAll(".click_sup"), t = document.querySelectorAll( "li.common-bottom-disclaimer__list-item" ); let s = Array.from(t).map((e) => e.getAttribute("data-sup")); Array.from(e).map((e) => { var t, i = e.getAttribute("data-sup-tag"); -1 < s.indexOf(i) && (e.innerText = s.indexOf(i) + 1), -1 === s.indexOf(i) && ((i = e.parentElement), 1 === (t = e.parentElement?.children.length ?? 0) && i.remove(), 1 < t) && (i.removeChild(e.nextSibling), e.remove(), 3 === i.childNodes.length) && i.removeChild(i.childNodes[2]); }); }, 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 () { var t = window.pageYOffset, i = t + window.innerHeight; for (let e = 0; e < r.allClickable.length; e++) { var s = r.allClickable[e], a = t + s.getBoundingClientRect().top, n = t + UTILS.getNavHeight(); n <= a && a <= i ? (s.isVisible = !0) : (a < n || i < a) && (s.isVisible = !1); } }, o = function (e) { e.preventDefault(), e.stopPropagation(); let t = this; var i = parseFloat(this.innerText); let s = document.querySelectorAll("#desc-section ol"); s.forEach((e) => { "block" === window.getComputedStyle(e).display && (s = e); }); var a = s.querySelectorAll("li"); let n = s.querySelectorAll("li")[i - 1], r = n.querySelector("span"), o = r.innerHTML; var i = `${o}`; (r.innerHTML = i), (h = e.currentTarget); let l = function () { c.call(t), r.removeEventListener("focusin", l); }, d = function () { (r.innerHTML = o), r.removeAttribute("tabindex"), r.removeEventListener("focusout", d); }; e.currentTarget.closest(".cm-layer") && ((i = e.currentTarget.closest(".cm-layer")), $(i).trigger("closeLayer", !1)), r.addEventListener("focusin", l), r.addEventListener("focusout", d), setTimeout(() => { n.querySelector("a").focus(); }, 0), a.forEach((e) => e.classList.remove("is-active")), n.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].getAttribute("data-sup-tag") === t && (c.call(this), h.focus()); var s, a = h.closest(".cm-layer"); a && ((s = a.id), (a = a.parentNode.querySelector(`[data-layer-target="#${s}"]`)), h.innerText === t) && a.focus(), e.classList.remove("is-active"); }, c = function (e) { if ( void 0 !== e && void 0 !== e.sourceCapabilities && null === e.sourceCapabilities ) e.preventDefault(); else if ( document.documentElement.classList.contains("ios") || !e || null != e.relatedTarget ) { let s = this; this.isClicked || this.isVisible || d(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); } }, d = function (e) { var e = e.parentNode, t = e.getAttribute("id"); return ( "contents" !== t && e !== document.body && (!( "subnav" !== t && !e.classList.contains("sc-s22ultra-popup") ) || d(e)) ); }, p = function () { this.isClicked = !0; }; return { 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.allClickable = r.contents.querySelectorAll( "a, button, input, select" )); { let e = 0; for ( window.addEventListener("load", i), window.addEventListener("resize", a), window.addEventListener("scroll", n), e = 0; e < r.allClickable.length; e++ ) { var t = r.allClickable[e]; (t.isClicked = !1), (t.isVisible = !1), t.addEventListener("focusin", c), t.addEventListener("mousedown", p); } 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 e = document.documentElement.classList; "global" === UTILS.checkRegion() || e.contains("mac") || e.contains("safari") || ANIUTIL.scrollController({ speed: 120, duration: 0.5 }); }, }; })(); window.RING.Disclaimer = e; })(), ((e) => { e.TrapFocus = (() => { var C = void 0, e = window, t = e.document, x = e.jQuery, i = null, s = e.RING.UTILS; function a(e, t) { if (!(this instanceof a)) return new a(e, t); e = { obj: e, prevStep: null, isDestroy: !1, IgnoreUtilFocusChanges: !1, ariaAttr: { hidden: "aria-hidden", disabled: "aria-disabled", modal: "aria-modal", }, ariaNotHidden: t && t.ariaNotHidden ? t.ariaNotHidden : [], classAttr: { clone: "trapfocus" }, elAttr: { tabIndex: "tabindex", role: "role" }, customEvent: ".TrapFocus" + new Date().getTime() + Math.random(), }; (this.opts = s.def(e, t || {})), (this.obj = x(this.opts.obj)).length && (null != i && i.destroy(), (i = this).init()); } return ( (a.prototype = { init: function () { this.initLayout(), this.buildAria(), this.bindEvents(!0), this.loadComponent(), this.obj.data("TrapFocus", this); }, initLayout: function () { var e = this.opts.ariaAttr, t = this.opts.elAttr; this.obj.attr(e.modal, "true"), this.obj.attr(t.role, "dialog"); }, buildAria: function () { var E = this.opts.ariaAttr, S = this.opts.elAttr, e = 0 < this.opts.ariaNotHidden.length ? ", " + this.opts.ariaNotHidden.join(",") : ""; s.def(this, { aria: { notHidden: Array( "head, script, noscript, link, style, meta" + e ), focusType: ["A", "BUTTON", "INPUT", "SELECT", "TEXTAREA"], dataAttr: { ariaHidden: "trapfocusariahidden", ariaDisabled: "trapfocusariadisabled", tabIndex: "trapfocustabindex", role: "trapfocusrole", }, destroy: x.proxy(function () { for ( var e, t, i, s = this.aria.dataAttr, a = this.aria.hiddenEls, n = this.aria.focusEls, r = this.aria.tabindexEls, o = 0, l = a.length; o < l; o++ ) (e = o), (i = t = void 0), (e = a.eq(e)), (t = e.data(s.ariaHidden)), (i = e.data(s.role)), t != C ? (e.attr(E.hidden, t), e.removeData(s.ariaHidden)) : e.removeAttr(E.hidden), i != C ? (e.attr(S.role, i), e.removeData(s.role)) : e.removeAttr(S.role); for (var d, h, c = 0, p = n.length; c < p; c++) (d = c), (h = void 0), (d = n.eq(d)), (h = d.data(s.ariaDisabled)), d.removeAttr(S.tabIndex), h != C ? (d.attr(E.disabled, h), d.removeData(s.ariaDisabled)) : d.removeAttr(E.disabled); for (var u, v, m = 0, g = r.length; m < g; m++) (u = m), (v = void 0), (u = r.eq(u)), (v = u.data(s.tabIndex)) != C ? (u.attr(S.tabIndex, v), u.removeData(s.tabIndex)) : u.removeAttr(S.tabIndex); var f = document.getElementById("teconsent"); f && (f = f.querySelector("a")) && "-1" === f.getAttribute("tabindex") && (f.setAttribute("tabindex", "0"), f.removeAttribute("aria-disabled")); }, this), build: x.proxy(function () { for ( var e = this, t = this.aria.focusType, i = this.aria.dataAttr, s = this.obj.parents(), a = this.obj .siblings() .not(e.aria.notHidden.join(",")), n = x(""), r = x(""), o = 0, l = s.length; o < l; o++ ) { d = void 0; var d = o; (d = s.eq(d)), (a = a.add( d.siblings().not(e.aria.notHidden.join(",")) )); } (n = n.add(a)), (r = r.add(a)), this.obj.removeAttr(E.hidden); for (var h, c, p, u = 0, v = a.length; u < v; u++) (h = u), (p = c = void 0), (h = a.eq(h)), (c = h.attr(E.hidden)), (p = h.attr(S.role)), c != C && h.data(i.ariaHidden, c), p != C && h.data(i.role, p), h.attr(E.hidden, "true"), h.attr(S.role, "none presentation"); for ( var m = 0, g = (n = n.add(a.find(t.join(",").toLowerCase()))) .length; m < g; m++ ) ((e) => { var t = n.eq(e); (e = t.attr(E.disabled)) != C && t.data(i.ariaDisabled, e), t.attr(E.disabled, "true"), setTimeout(() => { t.attr(S.tabIndex, -1); }); })(m); for ( var f, w, y = 0, b = (r = r.add(a.find("[" + S.tabIndex + "]"))) .length; y < b; y++ ) (f = y), (w = void 0), (f = r.eq(f)), (w = f.attr(S.tabIndex)) != C && f.data(i.tabIndex, w), f.attr(S.tabIndex, -1); (this.aria.hiddenEls = a), (this.aria.focusEls = n), (this.aria.tabindexEls = r); }, this), }, }); }, changeEvents: function (e) { var t, i = [], s = e.split(" "); for (t in s) i.push(s[t] + this.opts.customEvent); return i.join(" "); }, bindEvents: function (e) { e ? x(t).on( this.changeEvents("focusin"), x.proxy(this.trapFocus, this) ) : x(t).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 !0; } return !1; }, focusLastDescendant: function (e) { for (var t = e.childNodes.length - 1; 0 <= t; t--) { var i = e.childNodes[t]; if (this.attemptFocus(i) || this.focusLastDescendant(i)) return !0; } return !1; }, isFocusable: function (e) { if ( 0 < e.tabIndex || (0 === e.tabIndex && null !== e.getAttribute("tabIndex")) ) return !0; if (e.disabled) return !1; switch (e.nodeName) { case "A": return !!e.href && "ignore" != e.rel; case "INPUT": return "hidden" != e.type && "file" != e.type; case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return !0; default: return !1; } }, attemptFocus: function (e) { if (!this.opts.isDestroy) { if (!this.isFocusable(e)) return !1; this.opts.IgnoreUtilFocusChanges = !0; try { e.focus(); } catch (e) {} return ( (this.opts.IgnoreUtilFocusChanges = !1), document.activeElement === e ); } }, trapFocus: function (e) { this.opts.isDestroy || this.opts.IgnoreUtilFocusChanges || (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 () { let n = this.opts.ariaAttr, r = this.opts.elAttr; setTimeout(() => { var e, t = document.getElementById("QSIFeedbackButton-btn"), i = (document.getElementById("QSIFeedbackButton-close-btn"), document.getElementById("nebula_div_btn")), s = document.getElementById("spr-live-chat-app"), a = document.getElementById("teconsent"); t && ((e = t.parentElement), t.setAttribute(n.disabled, "true"), t.setAttribute(r.tabIndex, "-1"), e.setAttribute(n.disabled, "true"), e.setAttribute(n.hidden, "true"), e.setAttribute(r.tabIndex, "-1"), e.setAttribute(r.role, "none presentation")), i && ((t = i.parentElement), i.setAttribute(n.disabled, "true"), i.setAttribute(r.tabIndex, "0"), t.setAttribute(n.disabled, "true"), t.setAttribute(n.hidden, "true"), t.setAttribute(r.tabIndex, "-1"), t.setAttribute(r.role, "none presentation")), s && (s.setAttribute(n.disabled, "true"), s.setAttribute(n.hidden, "true"), s.setAttribute(r.tabIndex, "-1"), s.setAttribute(r.role, "none presentation")), a && a.hasAttribute("aria-label") && setTimeout(() => { var e = a.querySelector("a"); e.setAttribute(r.tabIndex, "-1"), e.setAttribute(n.disabled, "true"), e.setAttribute(n.hidden, "true"); }); }); }, destroy: function () { (i = null), (this.opts.isDestroy = !0); var e = this.opts.ariaAttr; this.opts.elAttr; this.bindEvents(!1), this.aria.destroy(), this.obj.removeAttr(e.modal); }, }), a ); })(); })(window), ((e) => { e.HiveLayer = (() => { var a = window, n = a.jQuery, t = a.document, r = a.RING.UTILS, o = []; function i(e, t) { if (!(this instanceof i)) return new i(e, t); e = { 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: !1, useEscape: !0, useCloseFocus: !0, useScrollLock: !0, useTrapFocus: !0, flip: { CLASS: "hive-layer-flip", direction: "horizontal", rotateStart: 90, rotateEnd: 0, }, customToggle: !1, dimmedDuration: 250, fps: 120, easing: "swing", duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null, }, ariaNotHidden: [], }; (this.layerWrap = e.layerWrapElements).length && ((this.layerWrap = n(e.layerWrapElements)), (this.opts = r.def(e, t || {})), this.init()); } return ( (i.prototype = { init: function () { this.initOpts(), this.setElements(), this.initLayout(), this.buildTween(), this.buildTrapFocus(), this.bindEvents(!0), this.layerWrap.data("HiveLayer", this); }, initOpts: function () { (this.layerWrapInstance = "#" + this.layerWrap.attr("id")), this.opts.isSupportTransition || "flip" !== this.opts.effect || (this.opts.effect = "default"), "custom" == this.opts.effect && ((this.opts.effect = "default"), (this.opts.customToggle = !0)); }, 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 () { var e; "slide" === this.opts.effect ? (this.dimmedObj.hide(), this.layerObj.hide()) : "flip" === this.opts.effect && ((e = this.opts.flip.direction), (this.opts.flip.cssD = "vertical" !== e ? "rotateY" : "rotateX"), this.dimmedObj.hide(), this.layerObj.hide(), this.layerWrap.addClass(this.opts.flip.CLASS)); }, buildTween: function () { r.def(this, { tweens: { instance: [], kill: n.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 () { this.opts.useTrapFocus && r.def(this, { trapfocus: { instance: null, destroy: n.proxy(function () { null != this.trapfocus.instance && (this.trapfocus.instance.destroy(), (this.trapfocus.instance = null)); }, this), build: n.proxy(function () { null === this.trapfocus.instance && (this.trapfocus.instance = new TrapFocus( this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden } )); }, this), }, }); }, bindEvents: function (e) { e ? (n(t).on( "click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', n.proxy(this.onLayerOpen, this) ), this.layerWrap.on( "openLayer", n.proxy(this.onLayerOpen, this) ), this.closerObj.on( "mousedown click clickCustom", n.proxy(this.onLayerClose, this) ), this.layerWrap.on( "layerSetOptions", n.proxy(this.setOptions, this) ), this.opts.useEscape && this.layerObj.on( "keydown", n.proxy(this.onEscapeClose, this) )) : (n(t).off("click clickCustom"), this.layerWrap.off("openLayer"), this.closerObj.off("mousedown click clickCustom"), this.layerWrap.off("layerSetOptions"), this.opts.useEscape && this.layerObj.off("keydown")); }, bindOutsideEvents: function (e) { this.opts.useOutside && (e ? this.layerObj.on( "clickoutside touchendoutside", n.proxy(this.onLayerOutsideFunc, this) ) : this.layerObj.off("clickoutside touchendoutside")); }, bindCloseEvents: function (e) { e ? this.layerWrap.on( "closeLayer", n.proxy(this.closeLayer, this) ) : this.layerWrap.off("closeLayer"); }, setOptions: function (e, t) { r.def(this.opts, t || {}), t.customToggle && (this.opts.effect = "default"); }, setScrollLock: function (e) { this.opts.useScrollLock && (e ? r.page.scrollLock.on() : r.page.scrollLock.off(), n("html").toggleClass(this.opts.classAttr.htmlToggle, e)); }, onLayerOpen: function (e) { var t, i, s; e.preventDefault(), setTimeout(() => { this.dimmedObj.on( "mousedown click clickCustom", n.proxy(this.onLayerClose, this) ); }, 500), ("click" !== e.type && "clickCustom" !== e.type) || (this.opts.openerTarget = n(e.currentTarget)), ("click" === e.type && this.opts.openerTarget.hasClass( this.opts.classAttr.isAsync )) || ((this.layerViewType = "open"), o.push({ POPUPWRAP: this.layerWrap }), 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(!0), this.bindCloseEvents(!0), "default" === this.opts.effect ? this.opts.customToggle ? this.outCallback("layerOpenBefore") : (this.layerWrap.css({ opacity: 0, display: "block" }), this.outCallback("layerOpenBefore"), this.outCallback("buildTools"), this.layerWrap.css("opacity", ""), this.openAfterBugFunc()) : "fade" === this.opts.effect ? (this.layerWrap.css({ opacity: 0, display: "block" }), this.outCallback("layerOpenBefore"), TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: "hidden", }), this.outCallback("buildTools"), (t = TweenLite.to( this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: n.proxy(function () { var e = TweenLite.to(this.layerBody, 0.25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: n.proxy(function () { this.layerBody.css({ overflow: "", transform: "", }), this.openAfterBugFunc(); }, this), }); this.tweens.instance.push(e); }, this), } )), this.tweens.instance.push(t)) : "slide" === this.opts.effect ? ((s = 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: -r.winSize().h, }), TweenLite.set(this.layerObj, { display: "" }), this.outCallback("layerOpenBefore"), (t = TweenLite.to(this.dimmedObj, s, { opacity: 0.9 })), (i = TweenLite.to(this.layerObj, s, { y: 0, onComplete: n.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(i)) : "slide2" === this.opts.effect ? ((s = 0.6), TweenLite.set(this.dimmedObj, { display: "block", opacity: 0, }), TweenLite.set(this.layerWrap, { display: "block" }), TweenLite.set(this.layerObj, { display: "", y: r.winSize().h, }), TweenLite.set(this.layerObj, { display: "" }), this.outCallback("layerOpenBefore"), (t = TweenLite.to(this.dimmedObj, s, { opacity: 0.9 })), (i = TweenLite.to(this.layerObj, s, { y: 0, onComplete: n.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(i)) : "flip" === this.opts.effect && ((s = ((e = this.opts.flip.rotateEnd - this.opts.flip.rotateStart) / this.opts.duration) * (1e3 / this.opts.fps)), (this.opts.flip.moveData = { startDistance: this.opts.flip.rotateStart, endDistance: this.opts.flip.rotateEnd, moveDistance: e, moveOneStep: s, currentStep: 0, }), this.layerWrap.show(), this.dimmedObj.fadeIn( this.opts.dimmedDuration, n.proxy(function () { this.outCallback("layerOpenBefore"), this.outCallback("buildTools"), this.layerObj.show(), this.initStep(this.opts.flip.moveData), this.flipFunc(); }, this) ), a.setTimeout( n.proxy(function () { this.outCallback("buildTools"); }, this), 30 ))); }, initStep: function (e) { (this.opts.stepTimeOld = new Date()), (this.direction = e.startDistance > e.moveDistance ? "toNext" : "toPrev"), (this.condition = "toNext" === this.direction ? 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 = 1 - (this.opts.remaining / this.opts.duration || 0), t = n.easing[this.opts.easing]( t, this.opts.duration * t, 0, 1, this.opts.duration ); e.currentStep = (e.endDistance - e.startDistance) * t; }, flipFunc: function () { var e = this.opts.flip.moveData, e = (this.moveStep(e), this.condition ? (a.clearTimeout(this.stepTimeout), (this.stepTimeout = a.setTimeout( n.proxy(function () { this.flipFunc(); }, this), 1e3 / this.opts.fps )), (this.condition = "toNext" === this.direction ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance), this.outCallback("layerMove", e.currentStep, e)) : ((this.opts.remaining = this.opts.duration), "close" !== this.layerViewType && this.layerViewType ? this.openAfterBugFunc() : (this.closeAfterBugFunc(), this.dimmedObj.fadeOut( this.opts.dimmedDuration, n.proxy(function () { this.layerWrap.hide(), this.layerObj.hide(); }, this) ))), e.startDistance + e.currentStep); this.layerObj.css({ transform: this.opts.flip.cssD + "(" + e + "deg)", }); }, onLayerOpenAfter: function () { this.trapfocus && this.trapfocus.build(), this.bindOutsideEvents(!0), this.outCallback("layerOpenAfter"); }, openAfterBugFunc: function () { a.clearTimeout(this.openAfterTimeout), (this.openAfterTimeout = a.setTimeout( n.proxy(this.onLayerOpenAfter, this), 30 )); }, onLayerClose: function (e) { var t = n(e.currentTarget); "mousedown" === e.type ? r.isDevice || (e.stopPropagation(), (this.opts.useCloseFocus = !1)) : ("click" !== e.type && "clickCustom" !== e.type) || (e.preventDefault(), "click" === e.type && t.hasClass(this.opts.classAttr.isAsync)) || (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(!1), this.trapfocus && this.trapfocus.destroy(), document.querySelector("html.load div#header") && ((document.querySelector( "html.load div#header" ).style.opacity = 1), (document.querySelector( "html.load div#header" ).style.pointerEvents = "unset")), a.clearTimeout(this.closeBeforeTimeout), (this.closeBeforeTimeout = a.setTimeout( n.proxy(this.closeBeforeBugFunc, this), 30 )), this.bindOutsideEvents(!1); }, onEscapeClose: function (e) { 27 === (e.which || e.keyCode) && this.layerWrap.trigger("closeLayer"); }, onLayerOutsideFunc: function () { this.layerWrap.trigger("closeLayer"); }, closeBeforeBugFunc: function () { var e, t, i; "default" === this.opts.effect ? (this.opts.customToggle || this.layerWrap.stop(!0, !0).hide(), this.closeAfterBugFunc()) : "fade" === this.opts.effect ? ((i = TweenLite.to( this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: n.proxy(function () { this.layerBody.css("overflow", ""); var e = TweenLite.to( this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: n.proxy(this.closeAfterBugFunc, this), } ); this.tweens.instance.push(e); }, this), } )), this.tweens.instance.push(i)) : "slide" === this.opts.effect ? ((t = 1), TweenLite.set(this.layerBody, { overflow: "hidden" }), (i = TweenLite.to(this.dimmedObj, t, { opacity: 0 })), (e = TweenLite.to(this.layerObj, t, { y: -r.winSize().h, onComplete: n.proxy(function () { this.closeAfterBugFunc(), this.dimmedObj.hide(), this.layerWrap.hide(), this.layerBody.css("overflow", ""), this.layerObj.hide(); }, this), })), this.tweens.instance.push(i), this.tweens.instance.push(e)) : "slide2" === this.opts.effect ? ((t = 0.5), (i = TweenLite.to(this.dimmedObj, t, { opacity: 0 })), (e = TweenLite.to(this.layerObj, t, { y: r.winSize().h, onComplete: n.proxy(function () { this.closeAfterBugFunc(), this.dimmedObj.hide(), this.layerWrap.hide(), this.layerBody.css("overflow", ""), this.layerObj.hide(); }, this), })), this.tweens.instance.push(i), this.tweens.instance.push(e)) : "flip" === this.opts.effect && ((i = ((t = -this.opts.flip.rotateStart - this.opts.flip.rotateEnd) / this.opts.duration) * (1e3 / this.opts.fps)), (this.opts.flip.moveData = { startDistance: this.opts.flip.rotateEnd, endDistance: -this.opts.flip.rotateStart, moveDistance: t, moveOneStep: i, currentStep: 0, }), this.initStep(this.opts.flip.moveData), this.flipFunc()); }, closeAfterBugFunc: function () { a.clearTimeout(this.closeAfterTimeout), (this.closeAfterTimeout = a.setTimeout( n.proxy(this.onLayerCloseAfter, this), 30 )); }, popupOpenPropsControl: function () { for (var e = o, t = 0, i = e.length; t < i; t++) e[t].POPUPWRAP[0] === this.layerWrap[0] && (e[t] = null); for (var s = e.length; 0 < s; s--) null === e[s - 1] && e.splice(s - 1, 1); }, onLayerCloseAfter: function () { null !== this.opts.openerTarget && (!1 !== this.closeType && this.opts.openerTarget.focus(), (this.opts.openerTarget = null)), (this.opts.useCloseFocus = !0), this.bindCloseEvents(!1), this.outCallback("layerCloseAfter"); }, outCallback: function (e) { var t = this.opts.on[e]; "layerMove" === e ? this.layerWrap.trigger(e, arguments[1], arguments[2], this) : this.layerWrap.trigger(e, this), null != t && ("layerMove" === e ? t(arguments[1], arguments[2], this) : 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(), this.trapfocus && this.trapfocus.destroy(), this.styleDestroy(), this.bindEvents(!1), this.bindOutsideEvents(!1), this.bindCloseEvents(!1); }, }), i ); })(); })(window), (() => { window.RING = window.RING || {}; let n = RING.UTILS; RING.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 = n.convertArray( this.el.querySelectorAll(this.opts.navItems) )), (this.navDests = document.querySelectorAll(this.opts.navDests)), (this.visSections = n.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) ); let 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(); var t = t.target, 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); var i = t.dataset.navIndex, t = this.navDests[i], i = t.getBoundingClientRect(), s = parseInt(window.getComputedStyle(t).paddingTop), a = (window.innerHeight - (i.height - s) + n.getNavHeight()) / 2; let e = 0; (e = t.classList.contains("js-nav-center") ? this.winOffsetTop + i.top + s - a : this.winOffsetTop + i.top - n.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 + n.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() { 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.onScrollHandler(), (this.resizeRequestFrame = n.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )); } resizeEndFunc() { (this.opts.resizeStart = null), n.cancelAFrame.call(window, this.resizeRequestFrame); } }; })(), (() => { (window.RING = window.RING || {}), (RING.CardCarousel = class { constructor(e, t = {}) { (this.swiper = null), (this.opts = { pagination: { tagging: { "data-omni-type": "microsite_pcontentinter", "data-omni": "galaxy-ring:carousel:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "galaxy-ring:carousel:index:", }, }, resizeTimeout: null, currentDevice: null, prevDevice: null, currentIndex: 0, clickTimeout: null, centeredSlides: !1, useNavigation: !1, ...t, }), (this.selector = { section: e, swiper: ".common__carousel", swiperSlide: ".swiper-slide", swiperTitle: ".common__blind-carousel", swiperPagination: ".swiper-pagination", swiperNavigation: ".swiper-arrow-wrap", prevArrow: ".swiper-button-prev", nextArrow: ".swiper-button-next", }), (this.class = { featureHide: "is-feature-hide" }), (this.el = { section: document.querySelector(this.selector.section) || null, swiper: null, swiperSlide: null, swiperTitle: null, swiperPagination: null, swiperNavigation: null, prevArrow: null, nextArrow: null, }), (this.events = { load: this.onLoadHandler.bind(this), resize: this.onResizeHandler.bind(this), prevArrow: this.onClickPrevArrow.bind(this), nextArrow: this.onClickNextArrow.bind(this), }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.bindEvents()); } setElements() { (this.el.swiper = this.el.section.querySelector( this.selector.swiper )), (this.el.swiperSlides = this.el.section.querySelectorAll( this.selector.swiperSlide )), (this.el.swiperPagination = this.el.section.querySelector( this.selector.swiperPagination )), (this.el.swiperTitle = this.el.section.querySelector( this.selector.swiperTitle )); } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("resize", this.events.resize); } onLoadHandler() { this.events.resize(), window.removeEventListener("load", this.events.load); } onResizeHandler() { (this.opts.currentDevice = 767 < innerWidth ? "desktop" : "mobile"), this.opts.currentDevice !== this.opts.prevDevice && (this.onResponsiveChange(), (this.opts.prevDevice = this.opts.currentDevice)); } onResponsiveChange() { this.destroySwiper(), "mobile" === this.opts.currentDevice && this.setSwiper(); } updateA11ySwiper() { null !== this.swiper && (Array.from(this.swiper.slides).forEach((e) => { e.setAttribute("aria-hidden", !0); }), "mobile" === this.opts.currentDevice) && this.swiper.slides[this.opts.currentIndex].setAttribute( "aria-hidden", !1 ); } destroyA11ySwiper() { "desktop" === this.opts.currentDevice && Array.from(this.el.swiperSlides).forEach((e) => { e.removeAttribute("aria-hidden"); }); } onTransitionStart() { (this.opts.currentIndex = this.swiper.snapIndex), this.updateA11ySwiper(); } onInitSwiper() { (this.opts.currentIndex = 0), this.onTransitionStart(), this.updateA11ySwiper(), this.setPaginationLabel(); var e = this.swiper.pagination.bullets; let i = this; void 0 !== e && 0 < e.length && Array.from(e).forEach((e, t) => { e.addEventListener("click", function (e) { e.preventDefault(), e.stopImmediatePropagation(), i.swiper.slideTo(t); }); }), void 0 !== this.opts.on && 0 < (e = this.el.section.querySelectorAll( "img.js-res-img:not(.load-complete)" )).length && this.opts.on.updateImageLoader(e); } onSlideChange() { this.setPaginationLabel(), this.opts.useNavigation && (this.setNavigation(), this.setNavigationClass()); } destroySwiper() { null !== this.swiper && (this.destroyA11ySwiper(), this.swiper.destroy(!0, !0), (this.swiper = null)); } setSwiper() { if (null === this.swiper) { let i = this; var e = { init: !1, a11y: !1, slidesPerView: "auto", centeredSlides: this.opts.centeredSlides, pagination: { el: i.el.swiperPagination, renderBullet: function (e) { var t = i.opts.pagination.tagging; return `
  • `; }, }, }; (this.swiper = new Swiper(this.el.swiper, e)), this.swiper.on( "transitionStart", this.onTransitionStart.bind(this) ), this.swiper.on( "snapIndexChange", this.onSlideChange.bind(this) ), this.swiper.on("init", this.onInitSwiper.bind(this)), this.swiper.init(); } } setPaginationLabel() { var e; null !== this.swiper && void 0 !== (e = this.swiper.pagination.bullets) && 0 < e.length && Array.from(e).forEach((e, t) => { var i, s = e.classList.contains("swiper-pagination-bullet-active"), a = this.el.swiperTitle?.innerText ?? ""; "undefined" != typeof LOCAL_VARI && LOCAL_VARI ? ((i = void 0 !== LOCAL_VARI.slide && LOCAL_VARI.slide ? LOCAL_VARI.slide : "Slide"), s ? e.setAttribute( "aria-label", `${i}${t + 1}: ${a} ` + (void 0 !== LOCAL_VARI.selected && LOCAL_VARI.selected ? LOCAL_VARI.selected : "selected") ) : e.setAttribute("aria-label", `${i}${t + 1}: ` + a)) : s ? e.setAttribute( "aria-label", `Slide${t + 1}: ${a} selected` ) : e.setAttribute("aria-label", `Slide${t + 1}: ` + a); }); } setNavigation() { var e = this.el.section.querySelector( this.selector.swiperNavigation ); (this.el.prevArrow = e.querySelector(this.selector.prevArrow)), (this.el.nextArrow = e.querySelector(this.selector.nextArrow)), this.el.prevArrow.addEventListener( "click", this.events.prevArrow ), this.el.nextArrow.addEventListener( "click", this.events.nextArrow ); } setNavigationClass() { var e; null !== this.swiper && (this.el.nextArrow.classList.remove("swiper-button-disabled"), this.el.prevArrow.classList.remove("swiper-button-disabled"), 0 === (e = this.swiper.snapIndex) && this.el.prevArrow.classList.add("swiper-button-disabled"), e === this.swiper.snapGrid.length - 1) && this.el.nextArrow.classList.add("swiper-button-disabled"); } onClickPrevArrow() { var e; null !== this.swiper && (0 == (e = this.swiper.snapIndex - 1) && setTimeout(() => { this.el.nextArrow.focus(); }, 100), this.swiper.slideTo(e)); } onClickNextArrow() { var e; null !== this.swiper && ((e = this.swiper.snapIndex + 1) === this.swiper.snapGrid.length - 1 && setTimeout(() => { this.el.prevArrow.focus(); }, 100), this.swiper.slideTo(e)); } }); })(), (() => { (window.RING = window.RING || {}), (RING.RingVideoPlayer = class { constructor(e, t) { (this.opts = { controlTagging: { play: "movi-play", pause: "movi-pause" }, playType: "reverse", playOffset: 0.4, ignoreLazy: !1, ...t, }), (this.selector = { section: e, videoContainer: ".video__container", videoController: ".video__controller", play: ".play", pause: ".pause", }), (this.class = { featureHide: "is-feature-hide" }), (this.el = { section: document.querySelector(this.selector.section) || null, videoContainer: null, videoPlayer: null, }), (this.events = { load: this.onLoadHandler.bind(this) }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.bindEvents(), this.buildVideoPlayer()); } setElements() { this.el.videoContainer = this.el.section.querySelector( this.selector.videoContainer ); } bindEvents() { this.opts.ignoreLazy && window.addEventListener("load", this.events.load); } onLoadHandler() { var e = this.el.section.querySelectorAll( ".js-res-video:not(.loaded)" ); this.opts.updateVideoLoader(e), window.removeEventListener("load", this.events.load); } buildVideoPlayer() { (this.el.videoPlayer = { instance: null, build: () => { null === this.el.videoPlayer.instance && (this.el.videoPlayer.instance = new RING.VideoPlayer( this.el.videoContainer, { sectionElement: this.selector.section, playType: this.opts.playType, playOffset: this.opts.playOffset, on: { updateController: (e) => { var t = e.playState ? "pause" : "play", e = e.el, i = this.opts.controlTagging; e && (e.setAttribute("data-omni", i[t] + ":#"), e.setAttribute("ga-la", i[t] + ":#"), (i = e.querySelector(".blind"))) && ("undefined" != typeof LOCAL_VARI && LOCAL_VARI && void 0 !== LOCAL_VARI[t] && LOCAL_VARI[t] ? (i.innerText = LOCAL_VARI[t]) : (i.innerText = t)); }, }, } )); }, }), this.el.videoPlayer.build(); } }); })(), (() => { window.RING = window.RING || {}; let o = RING.UTILS; RING.HighlightCarousel = class { constructor(e, t = {}) { (this.opts = { currDevice: null, prevDevice: null, resizeTimeout: null, clickTimeout: null, focusMoveTimeout: null, tagging: { pagination: { "data-omni-type": "microsite_pcontentinter", "data-omni": "gring:highlights:catch-the-highlights^titanium:sldr-dots:#", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "gring:highlights:catch-the-highlights^titanium:sldr-dots:#", }, navigation: { "data-omni-type": "microsite_pcontentinter", "data-omni": "gring:highlights:catch-the-highlights:sldr-arrow:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "gring:highlights:catch-the-highlights:sldr-arrow:", }, }, taggingIdList: [ "titanium", "galaxy-ai", "sensor", "slim-and-light", ], prevIndex: -1, activeIndex: 0, videoCanPlay: !0, videoAnimationFrame: null, videoCircleSize: 266, isFocusPrevArrow: !1, isFocusNextArrow: !1, isCarouselAutoPlay: !0, isVideoAutoPlay: !0, prevState: !0, startX: 0, endX: 0, isPointerMoving: !1, ...t, }), (this.selector = { section: e, frontSlider: ".front-slider", backSlider: ".background-slider", swiper: ".swiper", swiperSlide: ".swiper-slide", swiperSlideTitle: ".wearable-common__carousel-tit", swiperPrevArrow: ".wearable-common__carousel-prev", swiperNextArrow: ".wearable-common__carousel-next", swiperPagination: ".wearable-common__carousel-pagination", swiperScrollbar: ".swiper-scrollbar", videoContainer: ".video__container", videoController: ".video__controller", blindController: ".js-blind-controller", }), (this.class = { featureHide: "is-feature-hide" }), (this.el = { section: document.querySelector(this.selector.section) || null, frontSlider: null, frontSwiper: null, frontSwiperEl: null, frontSwiperSlides: null, backSlider: null, backSwiper: null, backSwiperEl: null, swiperPrevArrow: null, swiperNextArrow: null, swiperPagination: null, swiperScrollbar: null, videoContainers: null, videoControllers: null, blindController: null, }), (this.events = { load: this.onLoadHandler.bind(this), scroll: this.onScrollHandler.bind(this), resize: this.onResizeHandler.bind(this), prevArrow: { click: this.onClickPrevArrow.bind(this), keyDown: this.onKeyDownPrevArrow.bind(this), focusin: this.onFocusinPrevArrow.bind(this), focusout: this.onFocusoutPrevArrow.bind(this), }, nextArrow: { click: this.onClickNextArrow.bind(this), keyDown: this.onKeyDownNextArrow.bind(this), focusin: this.onFocusinNextArrow.bind(this), focusout: this.onFocusoutNextArrow.bind(this), }, controller: { click: this.onClickControllButton.bind(this) }, blindController: { click: this.onClickBlindController.bind(this), }, click: { down: this.onClickDownHandler.bind(this), up: this.onClickUpHandler.bind(this), }, }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.setVideoPlayer(), this.setSwiper(), this.bindEvents()); } setElements() { (this.el.frontSlider = this.el.section.querySelector( this.selector.frontSlider )), (this.el.frontSwiperEl = this.el.frontSlider.querySelector( this.selector.swiper )), (this.el.frontSwiperSlides = this.el.frontSlider.querySelectorAll( this.selector.swiperSlide )), (this.el.swiperPrevArrow = this.el.frontSlider.querySelector( this.selector.swiperPrevArrow )), (this.el.swiperNextArrow = this.el.frontSlider.querySelector( this.selector.swiperNextArrow )), (this.el.swiperPagination = this.el.frontSlider.querySelector( this.selector.swiperPagination )), (this.el.swiperScrollbar = this.el.frontSlider.querySelector( this.selector.swiperScrollbar )), (this.el.blindController = this.el.frontSlider.querySelector( this.selector.blindController )), (this.el.backSlider = this.el.section.querySelector( this.selector.backSlider )), (this.el.backSwiperEl = this.el.backSlider.querySelector( this.selector.swiper )), (this.el.videoContainers = this.el.section.querySelectorAll( this.selector.videoContainer )), (this.el.videoControllers = this.el.section.querySelectorAll( this.selector.videoController )); } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("scroll", this.events.scroll), window.addEventListener("resize", this.events.resize), this.el.frontSwiperEl.addEventListener( "mousedown", this.events.click.down ), this.el.frontSwiperEl.addEventListener( "mouseup", this.events.click.up ), this.el.frontSwiperEl.addEventListener( "touchstart", this.events.click.down ), this.el.frontSwiperEl.addEventListener( "touchend", this.events.click.up ), Array.from(this.el.videoControllers).forEach((e) => { e.addEventListener("click", this.events.controller.click); }), this.el.blindController.addEventListener( "click", this.events.blindController.click ); } onLoadHandler() { this.events.resize(), this.events.scroll(), window.removeEventListener("load", this.events.load); } onResizeHandler() { (this.opts.currDevice = 767 < innerWidth ? "desktop" : "mobile"), this.opts.currDevice !== this.opts.prevDevice && ((this.opts.activeIndex = 0), (this.opts.videoCanPlay = !0), clearTimeout(this.opts.resizeTimeout), (this.opts.resizeTimeout = setTimeout(() => { (this.opts.videoCanPlay = !0), this.events.scroll(), this.onResponsiveChange(); }, 150)), (this.opts.prevDevice = this.opts.currDevice)); } onResponsiveChange() { this.resetVideo(), this.setSwiper(); } onScrollHandler() { var e = this.el.frontSwiperEl.getBoundingClientRect(), t = e.height, i = 0.15 * e.height, s = scrollY, a = s + innerHeight, n = s + e.top, e = s + e.bottom; n + t <= a && s + o.getNavHeight() <= e - i ? this.opts.videoCanPlay && ((this.opts.videoCanPlay = !1), (t = this.el.frontSwiperSlides[ this.opts.activeIndex ].querySelector(this.selector.videoContainer))) && this.playVideo(t) : (a < n || s + o.getNavHeight() > e - i) && !this.opts.videoCanPlay && (this.onFocusoutNextArrow(), this.onFocusoutPrevArrow(), (this.opts.videoCanPlay = !0), this.resetVideo(!0)); } setSwiper() { this.destroyFrontSwiper(), this.setFrontSwiper(), this.destroyBackSwiper(), this.setBackSwiper(); } setFrontSwiper() { if (null === this.el.frontSwiper) { let s = this; (this.el.frontSwiper = new Swiper(this.el.frontSwiperEl, { init: !1, a11y: !1, speed: 400, allowTouchMove: !0, centeredSlides: !0, centeresSlidesBounds: !0, slidesPerView: "auto", navigation: { nextEl: s.el.swiperNextArrow, prevEl: s.el.swiperPrevArrow, }, scrollbar: { el: s.el.swiperScrollbar, draggable: !0 }, pagination: { el: s.el.swiperPagination, bulletActiveClass: "is-active", renderBullet: function (e) { var t = s.opts.tagging.pagination, e = s.opts.taggingIdList[e]; return ` `; }, }, })), this.el.frontSwiper.on("transitionEnd", function () { var e; this.slides[this.activeIndex].classList.contains( "js-active-slide" ) || ((s.opts.activeIndex = this.activeIndex), s.resetVideo(), s.opts.videoCanPlay) || ((e = this.slides[this.activeIndex].querySelector( s.selector.videoContainer )) && s.playVideo(e), s.setSwiperActiveClass.call(this)); }), this.el.frontSwiper.on("scrollbarDragEnd", function () { var e; (s.opts.isCarouselAutoPlay = !1), this.slides[this.activeIndex].classList.contains( "js-active-slide" ) || ((s.opts.activeIndex = this.activeIndex), s.resetVideo(), s.opts.videoCanPlay) || ((e = this.slides[this.activeIndex].querySelector( s.selector.videoContainer )) && s.playVideo(e), s.setSwiperActiveClass.call(this)); }), this.el.frontSwiper.on("snapIndexChange", function () { var e = this.slides[this.activeIndex] .querySelector(".video__controller") ?.getAttribute("title") ?? ""; s.el.blindController.setAttribute("title", "" + e), s.setNavigationDisabled(); }), this.el.frontSwiper.on("slideChange", function () { (s.opts.activeIndex = this.activeIndex), s.setSlideA11y(), s.setNavigationDisabled(), s.setPaginationLabel(); let e = this.slides[this.activeIndex] .querySelector(s.selector.videoContainer) .querySelector(s.selector.videoController); s.opts.isCarouselAutoPlay && (clearTimeout(s.opts.focusMoveTimeout), (s.opts.focusMoveTimeout = setTimeout(() => { e && e.focus(); }, 300))), s.opts.activeIndex === this.slides.length - 1 && (s.opts.isCarouselAutoPlay = !1), null !== s.el.backSwiper && s.el.backSwiper.slideTo(this.realIndex); }), this.el.frontSwiper.on("init", function () { (s.opts.activeIndex = this.activeIndex), s.setSlideA11y(), s.setNavigationLabel(), s.setPaginationLabel(), s.setNavigationDisabled(), s.el.swiperPrevArrow.addEventListener( "click", s.events.prevArrow.click ), s.el.swiperNextArrow.addEventListener( "click", s.events.nextArrow.click ), s.el.swiperPrevArrow.addEventListener( "keydown", s.events.prevArrow.keyDown ), s.el.swiperNextArrow.addEventListener( "keydown", s.events.nextArrow.keyDown ), s.el.swiperPrevArrow.addEventListener( "focusin", s.events.prevArrow.focusin ), s.el.swiperNextArrow.addEventListener( "focusin", s.events.nextArrow.focusin ), s.el.swiperPrevArrow.addEventListener( "focusout", s.events.prevArrow.focusout ), s.el.swiperNextArrow.addEventListener( "focusout", s.events.nextArrow.focusout ); let i = this; var e = i.pagination.bullets; Array.from(e).forEach((e, t) => { e.addEventListener("click", function (e) { e.preventDefault(), e.stopPropagation(), i.slideTo(t); }); }); }), this.el.frontSwiper.init(); } } destroyFrontSwiper() { null !== this.el.frontSwiper && (this.el.swiperPrevArrow.removeEventListener( "click", this.events.prevArrow.click ), this.el.swiperNextArrow.removeEventListener( "click", this.events.nextArrow.click ), this.el.swiperPrevArrow.removeEventListener( "keydown", this.events.prevArrow.keyDown ), this.el.swiperNextArrow.removeEventListener( "keydown", this.events.nextArrow.keyDown ), this.el.frontSwiper.destroy(!0, !0), (this.el.frontSwiper = null)); } setBackSwiper() { null === this.el.backSwiper && ((this.el.backSwiper = new Swiper(this.el.backSwiperEl, { init: !1, a11y: !1, speed: 600, allowTouchMove: !1, centeredSlides: !0, centeresSlidesBounds: !0, slidesPerView: "auto", })), this.el.backSwiper.on("init", function () { Array.from(this.slides).forEach((e) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"); }); }), this.el.backSwiper.init()); } destroyBackSwiper() { null !== this.el.backSwiper && (this.el.backSwiper.destroy(!0, !0), (this.el.backSwiper = null)); } slideTo(e = 300) { null !== this.el.frontSwiper && this.el.frontSwiper.slideTo(this.opts.activeIndex, e); } setSwiperActiveClass() { Array.from(this.slides).forEach((e, t) => { this.activeIndex !== t ? e.classList.remove("js-active-slide") : e.classList.add("js-active-slide"); }); } setSlideA11y() { if (null !== this.el.frontSwiper) { var e = this.el.frontSwiper, t = e.slides; let s = e.activeIndex; Array.from(t).forEach((e, t) => { var i = e.querySelectorAll("a, button, input, select, iframe"); s === t ? (e.setAttribute("aria-hidden", !1), 0 < i.length && i.forEach((e) => { e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"); })) : (e.setAttribute("aria-hidden", !0), 0 < i.length && i.forEach((e) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"); })); }); } } setNavigationLabel() { let t = this.opts.tagging.navigation; var e, i; "undefined" != typeof LOCAL_VARI && LOCAL_VARI ? ((e = void 0 !== LOCAL_VARI.previous && LOCAL_VARI.previous ? LOCAL_VARI.previous : "Previous"), (i = void 0 !== LOCAL_VARI.next && LOCAL_VARI.next ? LOCAL_VARI.next : "Next"), (this.el.swiperPrevArrow.querySelector(".blind").innerText = e), (this.el.swiperNextArrow.querySelector(".blind").innerText = i)) : ((this.el.swiperPrevArrow.querySelector(".blind").innerText = "Previous"), (this.el.swiperNextArrow.querySelector(".blind").innerText = "Next")), Object.keys(t).forEach((e) => { "data-omni" === e || "ga-la" === e ? this.el.swiperPrevArrow.setAttribute(e, t[e] + "left") : this.el.swiperPrevArrow.setAttribute(e, t[e]); }), Object.keys(t).forEach((e) => { "data-omni" === e || "ga-la" === e ? this.el.swiperNextArrow.setAttribute(e, t[e] + "right") : this.el.swiperNextArrow.setAttribute(e, t[e]); }); } setNavigationDisabled() { var e; null !== this.el.frontSwiper && (0 === (e = this.el.frontSwiper).activeIndex && e.activeIndex < e.slides.length - 1 ? ((this.el.swiperPrevArrow.disabled = !0), (this.el.swiperNextArrow.disabled = !1), this.onA11y(this.el.swiperPrevArrow), this.offA11y(this.el.swiperNextArrow)) : 0 < e.activeIndex && e.activeIndex === e.slides.length - 1 ? ((this.el.swiperPrevArrow.disabled = !1), (this.el.swiperNextArrow.disabled = !0), this.offA11y(this.el.swiperPrevArrow), this.onA11y(this.el.swiperNextArrow)) : 0 < e.activeIndex && e.activeIndex < e.slides.length - 1 && ((this.el.swiperPrevArrow.disabled = !1), (this.el.swiperNextArrow.disabled = !1), this.offA11y(this.el.swiperPrevArrow), this.offA11y(this.el.swiperNextArrow))); } setPaginationLabel() { if (null !== this.el.frontSwiper) { var e = this.el.frontSwiper; let n = e.slides; var t = e.pagination.bullets; let r = e.activeIndex; Array.from(t).forEach((e, t) => { var i, s, a = n[t].querySelector(this.selector.swiperSlideTitle) ?.innerText ?? ""; "undefined" != typeof LOCAL_VARI && LOCAL_VARI ? ((i = void 0 !== LOCAL_VARI.slide && LOCAL_VARI.slide ? LOCAL_VARI.slide : "Slide"), (s = void 0 !== LOCAL_VARI.selected && LOCAL_VARI.selected ? LOCAL_VARI.selected : "selected"), r === t ? e.setAttribute("aria-label", `${i}${t + 1}: ${a} ` + s) : e.setAttribute("aria-label", `${i}${t + 1}: ` + a)) : r === t ? e.setAttribute("aria-label", `Slide${t + 1}: ${a} selected`) : e.setAttribute("aria-label", `Slide${t + 1}: ` + a); }); } } onA11y(e) { var t = e.querySelectorAll("a, button, input, select, iframe"); e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"); for (var i = 0; i < t.length; i++) t[i].setAttribute("aria-hidden", "true"), t[i].setAttribute("tabindex", " -1"); } offA11y(e) { e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"); for ( var t = e.querySelectorAll("a, button, input, select, iframe"), i = 0; i < t.length; i++ ) t[i].setAttribute("aria-hidden", "false"), t[i].removeAttribute("tabindex"); } onClickPrevArrow() { null !== this.el.frontSwiper && (clearTimeout(this.opts.clickTimeout), (this.opts.clickTimeout = setTimeout(() => { this.el.frontSwiper.isBeginning && this.el.swiperNextArrow.focus(); }, 100)), (this.opts.isCarouselAutoPlay = !1)); } onClickNextArrow() { clearTimeout(this.opts.clickTimeout), (this.opts.clickTimeout = setTimeout(() => { this.el.frontSwiper.isEnd && this.el.swiperPrevArrow.focus(); }, 100)), (this.opts.isCarouselAutoPlay = !1); } onKeyDownPrevArrow(e) { "enter" === e.key.toLowerCase() && this.onClickPrevArrow(); } onKeyDownNextArrow(e) { "enter" === e.key.toLowerCase() && this.onClickNextArrow(); } onFocusinPrevArrow() { this.opts.isFocusPrevArrow = !0; } onFocusinNextArrow() { this.opts.isFocusNextArrow = !0; } onFocusoutPrevArrow() { this.el.frontSwiper.isBeginning && this.opts.isFocusPrevArrow && this.onClickPrevArrow(), (this.opts.isFocusPrevArrow = !1); } onFocusoutNextArrow() { this.el.frontSwiper.isEnd && this.opts.isFocusNextArrow && this.onClickNextArrow(), (this.opts.isFocusNextArrow = !1); } onClickControllButton() { this.opts.isCarouselAutoPlay && (this.opts.isCarouselAutoPlay = !1), (this.opts.isVideoAutoPlay = !this.opts.isVideoAutoPlay); } onClickBlindController() { var e = this.el.frontSwiperSlides[ this.opts.activeIndex ].querySelector(this.selector.videoContainer); (this.opts.isVideoAutoPlay = !e.playState), this.opts.isVideoAutoPlay ? this.el.videoPlayer.play(e) : this.el.videoPlayer.pause(e), (this.opts.isCarouselAutoPlay = !1); } onClickDownHandler(e) { this.opts.isPointerMoving || ((this.opts.isPointerMoving = !0), (this.opts.startX = 0), (this.opts.endX = 0), (this.opts.startX = this.getMovePointerX(e))); } onClickUpHandler(e) { this.opts.isPointerMoving && ((this.opts.isPointerMoving = !1), (this.opts.endX = this.getMovePointerX(e)), (e = "mobile" !== this.opts.currDevice ? 80 : 50), this.el.frontSwiper) && Math.abs(this.opts.startX - this.opts.endX) > e && (this.opts.isCarouselAutoPlay = !1); } getMovePointerX(e) { return ( e.touches && 0 < e.touches.length ? e.touches[0] : e.changedTouches && 0 < e.changedTouches.length ? e.changedTouches[0] : e ).clientX; } setVideoPlayer() { (this.el.videoPlayer = { instance: [], load: (t) => { this.el.videoPlayer.instance.length && this.el.videoPlayer.instance.forEach((e) => { e.onLoad(t); }); }, reset: (t) => { this.el.videoPlayer.instance.length && this.el.videoPlayer.instance.forEach((e) => { e.onReset(t); }); }, play: (t) => { this.el.videoPlayer.instance.length && this.el.videoPlayer.instance.forEach((e) => { e.onPlay(t); }); }, pause: (t) => { this.el.videoPlayer.instance.length && this.el.videoPlayer.instance.forEach((e) => { e.onPause(t); }); }, ended: (t) => { this.el.videoPlayer.instance.length && this.el.videoPlayer.instance.forEach((e) => { e.onEnded(t); }); }, init: () => { this.el.videoPlayer.instance.length || 0 === this.el.videoContainers.length || this.el.videoContainers.forEach((a, n) => { this.el.videoPlayer.instance.push( new RING.VideoPlayer(a, { sectionElement: this.selector.section, playType: "others", on: { updateController: (e) => { var t = e.playState ? "pause" : "play", i = e.el, s = this.opts.taggingIdList[n], s = (i.setAttribute( "data-omni", `gring:highlights:catch-the-highlights^${s}:movi-${t}:#` ), i.setAttribute( "ga-la", `gring:highlights:catch-the-highlights^${s}:movi-${t}:#` ), i.querySelector(".blind")), i = "undefined" != typeof LOCAL_VARI && LOCAL_VARI && void 0 !== LOCAL_VARI[t] && LOCAL_VARI[t] ? LOCAL_VARI[t] : t; s && (s.innerText = i), t !== this.opts.prevState && ((this.el.blindController.innerText = "" + i), (this.opts.prevState = t)), e.playState && this.playProgress(a); }, }, }) ); }); }, }), this.el.videoPlayer.init(); } playVideo(e) { let t = () => { e.classList.contains("loaded") ? (cancelAnimationFrame(this.opts.videoAnimationFrame), o.isLowNetwork() || (this.opts.isVideoAutoPlay && this.el.videoPlayer.play(e))) : (this.opts.videoAnimationFrame = requestAnimationFrame(t)); }; this.opts.videoAnimationFrame = requestAnimationFrame(t); } resetVideo(e = !1) { if (null !== this.el.frontSwiper) { let i = this.el.frontSwiper; var t = i.slides; e ? Array.from(t).forEach((e) => { e = e.querySelector(this.selector.videoContainer); this.el.videoPlayer.reset(e), this.resetProgress(e); }) : Array.from(t).forEach((e, t) => { e = e.querySelector(this.selector.videoContainer); t !== i.activeIndex && e && (this.el.videoPlayer.reset(e), this.resetProgress(e)); }); } } playProgress(e) { let t = this.opts.videoCircleSize, i = e.querySelector("video"), s = i.duration; let a = e .querySelector(".video__controller") .querySelector(".progress-icon"), n = a.querySelector(".draw-line"), r = () => { var e; a && s && (i.paused || i.ended || ((e = (i.currentTime / s) * 100), (e = (e = (this.opts.videoCircleSize * (100 - e)) / 100) < 8 ? 0 : e) < t && (TweenMax.to(n, 0, { strokeDashoffset: e }), (t = e)), (this.opts.frame = requestAnimationFrame(r))), i.ended) && (o.isLowNetwork() || (this.opts.isCarouselAutoPlay && !this.opts.videoCanPlay && (this.opts.activeIndex++, this.slideTo())), cancelAnimationFrame(this.opts.frame)); }; this.opts.frame = requestAnimationFrame(r); } resetProgress(e) { var e = e .querySelector(".video__controller") .querySelector(".progress-icon"); e && ((e = e.querySelector(".draw-line")), TweenMax.to(e, 0, { strokeDashoffset: this.opts.videoCircleSize, })); } }; })(), (() => { (window.RING = window.RING || {}), (RING.MediaQuote = class { constructor(e) { (this.opts = { currDevice: null, prevDevice: null, tagging: { pagination: { "data-omni-type": "microsite_pcontentinter", "data-omni": "gring:highlights:media-quote:sldr-dots:#", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "gring:highlights:media-quote:sldr-dots:#", }, }, }), (this.selector = { section: e, carouselWrap: ".wearable-common__carousel-wrap", swiperContainer: ".wearable-common__carousel-container", swiper: ".swiper", swiperSlide: ".swiper-slide", swiperPrevArrow: ".wearable-common__carousel-prev", swiperNextArrow: ".wearable-common__carousel-next", swiperPagination: ".wearable-common__carousel-pagination", swiperScrollbar: ".swiper-scrollbar", }), (this.class = { featureHide: "is-feature-hide", isDimmed: "is-dimmed", swiperInitialized: "swiper-initialized", }), (this.el = { section: document.querySelector(this.selector.section) || null, carouselWrap: null, swiper: null, swiperContainer: null, swiperEl: null, swiperSlides: null, swiperPrevArrow: null, swiperNextArrow: null, swiperPagination: null, swiperScrollbar: null, }), (this.events = { resize: this.onResizeHandler.bind(this), clickPrevArrow: this.onClickPrevArrow.bind(this), clickNextButton: this.onClickNextArrow.bind(this), }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.bindEvents(), this.buildSwiper()); } setElements() { (this.el.swiperContainer = this.el.section.querySelector( this.selector.swiperContainer )), (this.el.carouselWrap = this.el.section.querySelector( this.selector.carouselWrap )), (this.el.swiperEl = this.el.section.querySelector( this.selector.swiper )), (this.el.swiperSlides = this.el.section.querySelectorAll( this.selector.swiperSlide )), (this.el.swiperPrevArrow = this.el.section.querySelector( this.selector.swiperPrevArrow )), (this.el.swiperNextArrow = this.el.section.querySelector( this.selector.swiperNextArrow )), (this.el.swiperPagination = this.el.section.querySelector( this.selector.swiperPagination )), (this.el.swiperScrollbar = this.el.section.querySelector( this.selector.swiperScrollbar )); } bindEvents() { window.addEventListener("resize", this.events.resize); } onResizeHandler() { (this.opts.currDevice = 767 < innerWidth ? "desktop" : "mobile"), this.opts.currDevice !== this.opts.prevDevice && ((this.opts.prevDevice = this.opts.currDevice), this.destroySwiper(), ("desktop" === this.opts.currDevice && this.el.swiperSlides.length < 4) || this.buildSwiper()); } buildSwiper() { if (null === this.el.swiper) { var t = 767 < innerWidth; let e = this.opts.tagging.pagination, i = { init: !1, speed: 400, allowTouchMove: !0, centeredSlides: !t, slidesPerView: "auto", scrollbar: { el: this.el.swiperScrollbar, draggable: !0 }, pagination: { el: this.el.swiperPagination, bulletActiveClass: "is-active", renderBullet: function () { return ` `; }, }, }; (this.el.swiper = new Swiper(this.el.swiperEl, i)), this.el.swiper.on("snapIndexChange", () => { this.updateA11ySwiper(); }), this.el.swiper.on("init", () => { this.el.carouselWrap.classList.add( this.class.swiperInitialized ), this.el.swiperPrevArrow.addEventListener( "click", this.events.clickPrevArrow ), this.el.swiperNextArrow.addEventListener( "click", this.events.clickNextButton ), this.updateA11ySwiper(); var e = this.el.swiper.pagination.bullets; Array.from(e).forEach((e, t) => { e.addEventListener("click", () => { this.el.swiper.slideTo(t, i.speed); }); }); }), (this.el.swiperPagination.style.display = ""), (this.el.swiperScrollbar.style.display = ""), this.el.swiper.init(); } } destroySwiper() { var e; null !== this.el.swiper && (this.el.carouselWrap.classList.remove( this.class.swiperInitialized ), (this.el.swiperPagination.style.display = "none"), (this.el.swiperScrollbar.style.display = "none"), this.el.swiperPrevArrow.classList.add("swiper-button-disabled"), this.el.swiperNextArrow.classList.add("swiper-button-disabled"), this.el.swiperPrevArrow.removeEventListener( "click", this.events.clickPrevArrow ), this.el.swiperNextArrow.removeEventListener( "click", this.events.clickNextButton ), this.updateA11ySwiperNavigation(this.el.swiperPrevArrow, !1), this.updateA11ySwiperNavigation(this.el.swiperNextArrow, !1), (e = this.el.swiper.slides), Array.from(e).forEach((e) => { e.setAttribute("aria-hidden", !1), e.classList.remove(this.class.isDimmed); }), this.el.swiper.destroy(!0, !0), (this.el.swiper = null)); } updateA11ySwiper() { if (null !== this.el.swiper) { var e = 767 < innerWidth; let i = this.el.swiper.snapIndex; var t = this.el.swiper.snapGrid, a = this.el.swiper.slides; 1 === t.length ? (this.updateA11ySwiperNavigation( this.el.swiperPrevArrow, !1 ), this.updateA11ySwiperNavigation( this.el.swiperNextArrow, !1 ), this.el.swiperPrevArrow.classList.add( "swiper-button-disabled" ), this.el.swiperNextArrow.classList.add( "swiper-button-disabled" )) : 0 === i ? (this.updateA11ySwiperNavigation( this.el.swiperPrevArrow, !1 ), this.updateA11ySwiperNavigation( this.el.swiperNextArrow, !0 ), this.el.swiperPrevArrow.classList.add( "swiper-button-disabled" ), this.el.swiperNextArrow.classList.remove( "swiper-button-disabled" )) : i === t.length - 1 ? (this.updateA11ySwiperNavigation( this.el.swiperPrevArrow, !0 ), this.updateA11ySwiperNavigation( this.el.swiperNextArrow, !1 ), this.el.swiperPrevArrow.classList.remove( "swiper-button-disabled" ), this.el.swiperNextArrow.classList.add( "swiper-button-disabled" )) : (this.updateA11ySwiperNavigation( this.el.swiperPrevArrow, !0 ), this.updateA11ySwiperNavigation( this.el.swiperNextArrow, !0 ), this.el.swiperPrevArrow.classList.remove( "swiper-button-disabled" ), this.el.swiperNextArrow.classList.remove( "swiper-button-disabled" )); let s = Array.from({ length: e ? 3 : 1 }).map((e, t) => i + t); Array.from(a).forEach((e, t) => { s.includes(t) ? (e.setAttribute("aria-hidden", !1), e.classList.remove(this.class.isDimmed)) : (e.setAttribute("aria-hidden", !0), e.classList.add(this.class.isDimmed)); }); } } updateA11ySwiperNavigation(e, t) { e.setAttribute("aria-hidden", !t), (e.disabled = !t), t ? e.removeAttribute("tabindex") : e.setAttribute("tabindex", "-1"); } onClickPrevArrow() { var e, t; null !== this.el.swiper && (0 == (t = (e = this.el.swiper).snapIndex - 1) && setTimeout(() => { this.el.swiperNextArrow.focus(); }, 100), e.slideTo(t)); } onClickNextArrow() { var e, t; null !== this.el.swiper && ((t = (e = this.el.swiper).snapIndex + 1) === e.snapGrid.length - 1 && setTimeout(() => { this.el.swiperPrevArrow.focus(); }, 100), e.slideTo(t)); } }); })(), (() => { window.RING = window.RING || {}; let t = RING.UTILS; RING.Sensor = class { constructor(e, t) { (this.opts = { navHeight: 0, useInterger: !0, divide: 1, isBrokenSticky: !1, startCount: 0, endCount: 0, loadOffset: 1, resizeTimeout: null, currDevice: "dekstop", prevDevice: null, isInSectionBefore: null, isInSectionAfter: null, imageSrc: "", imageFormat: "jpg", imageLoaded: !1, sequenceSrc: [], sequenceImages: [], imgProgress: 0, prevress: -1, percent: 0, isUpdateSameImage: !1, imageSequenceEndPercent: 0.9, anim: { step1: { startPoint: 11, endPoint: 30 }, step2: { startPoint: 42, endPoint: 61 }, step3: { startPoint: 73, endPoint: 92 }, }, ...t, }), (this.selector = { section: e, targetElement: ".sensor__visual-inner", imageElement: ".sensor__visual-inner img", trackElement: ".sensor__sticky-wrap", stickyElement: ".sensor__sticky-content", contentWrapElement: ".common__wrap", contentElement: ".sensor__motion-wrap", }), (this.class = { featureHide: "is-feature-hide", brokenSticky: "broken-sticky", }), (this.el = { section: document.querySelector(this.selector.section) || null, targetElement: null, imageElement: null, trackElement: null, stickyElement: null, contentWrapElement: null, contentElement: null, canvasElement: null, contextElement: null, }), (this.events = { load: this.onLoadHandler.bind(this), resize: this.onResizeHandler.bind(this), scroll: { load: this.onScrollLoadHandler.bind(this), play: this.onScrollPlayHandler.bind(this), }, }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.setCanvas(), this.bindEvents()); } setElements() { (this.el.targetElement = this.el.section.querySelector( this.selector.targetElement )), (this.el.imageElement = this.el.section.querySelector( this.selector.imageElement )), (this.el.trackElement = this.el.section.querySelector( this.selector.trackElement )), (this.el.stickyElement = this.el.section.querySelector( this.selector.stickyElement )), (this.el.contentWrapElement = this.el.section.querySelector( this.selector.contentWrapElement )), (this.el.contentElement = this.el.section.querySelector( this.selector.contentElement )), (this.el.canvasElement = document.createElement("canvas")), this.el.targetElement.appendChild(this.el.canvasElement), (this.el.contextElement = this.el.canvasElement.getContext("2d")); } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("resize", this.events.resize), window.addEventListener("scroll", this.events.scroll.load), window.addEventListener("scroll", this.events.scroll.play); } onLoadHandler() { this.events.resize(), window.removeEventListener("load", this.events.load); } onResizeHandler() { (this.opts.currDevice = 767 < window.innerWidth ? "desktop" : "mobile"), (this.opts.isBrokenSticky = !1), document.documentElement.classList.remove( this.class.brokenSticky ), this.opts.isBrokenSticky && ((this.el.stickyElement.style.top = ""), (this.el.stickyElement.style.height = ""), (this.el.contentWrapElement.style.justifyContent = "")), clearTimeout(this.opts.resizeTimeout), (this.opts.resizeTimeout = setTimeout(() => { var e = this.el.contentElement.clientHeight; this.el.stickyElement.scrollHeight < e && ((this.opts.isBrokenSticky = !0), document.documentElement.classList.add( this.class.brokenSticky )), this.opts.isBrokenSticky || ((this.opts.navHeight = t.getNavHeight()), (this.el.stickyElement.style.top = this.opts.navHeight + "px"), (this.el.stickyElement.style.height = `calc(100vh - ${this.opts.navHeight}px)`), (this.el.contentWrapElement.style.justifyContent = ""), this.el.contentWrapElement.scrollHeight <= this.el.contentWrapElement.clientHeight && (this.el.contentWrapElement.style.justifyContent = "center"), this.events.scroll.play(), this.opts.currDevice !== this.opts.prevDevice && (this.onResponsiveChange(), (this.opts.prevDevice = this.opts.currDevice))); }, 150)); } onResponsiveChange() { this.events.scroll.load(), this.events.scroll.play(); } onScrollLoadHandler() { var e, t, i, s, a; this.opts.isBrokenSticky || ((t = (e = scrollY) + window.innerHeight), (i = window.innerHeight * this.opts.loadOffset), (a = (s = e + this.el.targetElement.getBoundingClientRect().top) + this.el.targetElement.clientHeight), s - i < t && e < a + i && (this.setDefaultImage(), this.loadSequenceImages(), window.removeEventListener("scroll", this.events.scroll.load))); } setCanvas() { (this.opts.sequenceSrc = []), this.getSequenceSrc(); } setDefaultImage() { let e = new Image(); (e.src = this.opts.sequenceSrc[0]), e.addEventListener("load", () => { (this.opts.canvasWidth = e.naturalWidth), (this.opts.canvasHeight = e.naturalHeight), (this.el.canvasElement.width = e.naturalWidth), (this.el.canvasElement.height = e.naturalHeight), this.el.contextElement.drawImage( e, 0, 0, this.opts.canvasWidth, this.opts.canvasHeight ); }); } getSequenceSrc() { var e = this.el.imageElement; (this.opts.imageFormat = e.getAttribute("data-seq-format") ?? this.opts.imageFormat), (this.opts.imageSrc = e.getAttribute("data-seq-img")); for (let e = this.opts.startCount; e <= this.opts.endCount; e++) this.opts.sequenceSrc.push( `${this.opts.imageSrc}-${e}.` + this.opts.imageFormat ); } loadSequenceImages() { if (!(0 < this.opts.sequenceImages.length)) { let t = 0, i = (e) => { e = e.currentTarget; t < this.opts.sequenceSrc.length - 1 ? (t++, e.removeEventListener("load", i)) : (this.opts.imageLoaded = !0); }; for (let e = 0; e < this.opts.sequenceSrc.length; e++) { var s = new Image(); (s.src = this.opts.sequenceSrc[e]), s.addEventListener("load", i), this.opts.sequenceImages.push(s); } } } onScrollPlayHandler() { var e, t, i, s, a, n; this.opts.isBrokenSticky || ((t = (e = scrollY) + window.innerHeight), (n = this.el.trackElement.getBoundingClientRect()), (i = this.el.trackElement.clientHeight - window.innerHeight), (a = (s = e + n.top) + this.el.trackElement.clientHeight), s <= e && t <= a ? ((this.opts.percent = -n.top / i), (n = this.opts.percent * (1 / this.opts.imageSequenceEndPercent) * (this.opts.sequenceImages.length - 1)), (this.opts.imgProgress = this.opts.useInterger ? Math.round(n) : n), (this.opts.isInSectionAfter = !1), (this.opts.isInSectionBefore = !1), this.setMotions(), this.opts.percent < this.opts.imageSequenceEndPercent ? (1 < this.opts.divide && this.opts.imgProgress % this.opts.divide != 0) || this.playSequenceImage() : ((this.opts.imgProgress = this.opts.sequenceImages.length - 1), this.playSequenceImage())) : e < s ? ((this.opts.imgProgress = 0), this.playSequenceImage(), this.opts.isInSectionBefore || ((this.opts.isInSectionBefore = !0), this.setMotionsBefore())) : a < t && ((this.opts.imgProgress = this.opts.sequenceImages.length - 1), this.playSequenceImage(), this.opts.isInSectionAfter || ((this.opts.isInSectionAfter = !0), this.setMotionsAfter()))); } playSequenceImage() { if (this.opts.imageLoaded) { if ( (null !== this.opts.loadFrame && (cancelAnimationFrame(this.opts.loadFrame), (this.opts.loadFrame = null)), this.opts.imgProgress === this.opts.prevress) ) { if (this.opts.isUpdateSameImage) return; this.el.contextElement.drawImage( this.opts.sequenceImages[this.opts.imgProgress], 0, 0, this.opts.canvasWidth, this.opts.canvasHeight ), (this.opts.isUpdateSameImage = !0); } if (this.opts.imgProgress !== this.opts.prevress) { if ( this.opts.imgProgress - this.opts.prevress > this.opts.divide ) for ( let e = this.opts.prevress + this.opts.divide; e < this.opts.imgProgress; ) this.el.contextElement.drawImage( this.opts.sequenceImages[e], 0, 0, this.opts.canvasWidth, this.opts.canvasHeight ), (e += this.opts.divide); if ( this.opts.prevress - this.opts.imgProgress > this.opts.divide ) for ( let e = this.opts.prevress - this.opts.divide; e > this.opts.imgProgress; ) this.el.contextElement.drawImage( this.opts.sequenceImages[e], 0, 0, this.opts.canvasWidth, this.opts.canvasHeight ), (e -= this.opts.divide); this.el.contextElement.drawImage( this.opts.sequenceImages[this.opts.imgProgress], 0, 0, this.opts.canvasWidth, this.opts.canvasHeight ), (this.opts.prevress = this.opts.imgProgress), (this.opts.isUpdateSameImage = !1); } } else this.opts.loadFrame = requestAnimationFrame( this.playSequenceImage.bind(this) ); } setMotions() { var e = this.opts.anim, t = this.opts.imgProgress; t <= e.step1.startPoint ? this.removeClasses(["step01", "step02", "step03"]) : t >= e.step1.startPoint && t <= e.step1.endPoint ? (this.removeClasses(["step02", "step03"]), this.addClasses(["step01"])) : t >= e.step2.startPoint && t <= e.step2.endPoint ? (this.removeClasses(["step01", "step03"]), this.addClasses(["step02"])) : t >= e.step3.startPoint && t <= e.step3.endPoint ? (this.removeClasses(["step01", "step02"]), this.addClasses(["step03"])) : t > e.step3.endPoint ? this.addClasses(["step03"]) : this.removeClasses(["step01", "step02", "step03"]); } setMotionsBefore() { this.removeClasses(["step01", "step02", "step03"]); } setMotionsAfter() { this.addClasses(["step03"]); } addClasses(e) { e.forEach((e) => { this.el.section.classList.contains(e) || this.el.section.classList.add(e); }); } removeClasses(e) { e.forEach((e) => { this.el.section.classList.contains(e) && this.el.section.classList.remove(e); }); } }; })(), (() => { window.RING = window.RING || {}; let i = RING.UTILS; class e { constructor(e, t = {}) { (this.opts = { currDevice: "desktop", prevDevice: null, prevIndex: null, currentIndex: 0, isPlaying: !1, }), (this.selector = { section: e, tabList: ".common__tab-list", tab: ".common__tab-cta", tabPanels: ".common__tab-panels", tabPanel: ".common__tab-panel", videoContainer: ".video__container", videoController: ".video__controller", play: ".play", pause: ".pause", ...t.selector, }), (this.class = { featureHide: "is-feature-hide", isActive: "is-active", tabPanel: "common__tab-panel", loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isPaused: "is-paused", videoController: "video__controller", ...t.class, }), (this.el = { section: document.querySelector(this.selector.section) || null, }), (this.tagging = { open: { play: "gring:highlights:charging-case:movi-play:case-open", pause: "gring:highlights:charging-case:movi-pause:case-open", }, short: { play: "gring:highlights:charging-case:movi-play:short-press", pause: "gring:highlights:charging-case:movi-pause:short-press", }, long: { play: "gring:highlights:charging-case:movi-play:long-press", pause: "gring:highlights:charging-case:movi-pause:long-press", }, }), (this.events = { load: this.onLoadHandler.bind(this), canplaythrough: this.onCanplaythrough.bind(this), click: this.onClickHandler.bind(this), scroll: this.onScrollHandler.bind(this), resize: this.onResizeHandler.bind(this), }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.initVideoPlayer(), this.bindEvents()); } setElements() { (this.el.tabs = this.el.section.querySelectorAll( this.selector.tab )), (this.el.tabPanelWrapper = this.el.section.querySelector( this.selector.tabPanels )), (this.el.tabPanels = this.el.section.querySelectorAll( this.selector.tabPanel )), (this.el.videoContainers = this.el.section.querySelectorAll( this.selector.videoContainer )), (this.el.videoControllers = this.el.section.querySelectorAll( this.selector.videoController )), (this.el.videos = this.el.section.querySelectorAll("video")); } bindEvents() { window.addEventListener("load", this.events.load), Array.from(this.el.tabs).forEach((e, t) => { e.addEventListener("click", () => this.events.click(t)); }), window.addEventListener("resize", this.events.resize); } onLoadHandler() { this.el.videoContainers[this.opts.currentIndex] .querySelector("video") .addEventListener("canplaythrough", this.events.canplaythrough, { once: !0, }), window.removeEventListener("load", this.events.load); } onCanplaythrough(e) { i.isLowNetwork() || (this.events.scroll(), window.addEventListener("scroll", this.events.scroll)); } onResizeHandler() { (this.opts.currDevice = 767 < innerWidth ? "desktop" : "mobile"), this.opts.currDevice !== this.opts.prevDevice && (this.onResponsiveChange(), (this.opts.prevDevice = this.opts.currDevice)); } onResponsiveChange() { i.isLowNetwork() || this.events.scroll(); } onClickHandler(i) { (this.opts.prevIndex = this.opts.currentIndex), (this.opts.currentIndex = i), this.opts.prevIndex !== this.opts.currentIndex && Array.from(this.el.tabs).forEach((e, t) => { i === t && this.setActive(e, t), i !== t && this.setInactive(e, t); }); } onScrollHandler() { var e = window.scrollY; let t = this.el.videoContainers[this.opts.currentIndex]; var i = 0.5 * t.getBoundingClientRect().height, s = e, e = e + window.innerHeight, a = s + t.getBoundingClientRect().top, n = s + t.getBoundingClientRect().bottom; if (a + i < e && s < n) { if (!this.opts.isPlaying) { let e = () => { t.classList.contains(this.class.playing) ? cancelAnimationFrame(this.opts.videoPlayTime) : (this.opts.videoPlayTime = requestAnimationFrame(e)), this.videoPlayer.play(t), (this.opts.isPlaying = !0); }; this.opts.videoPlayTime = requestAnimationFrame(e); } } else (e < a || n < s) && 0 != this.opts.isPlaying && (this.videoPlayer.reset(t), (this.opts.isPlaying = !1)); } setActive(e, t) { this.addClass(e), e.setAttribute("aria-selected", !0), this.addClass(this.el.tabPanels[t]), this.el.tabPanels[t].setAttribute("aria-hidden", !1), (this.el.tabPanels[t].style.zIndex = 5), 0 < this.el.videoControllers.length && this.el.videoControllers[t].removeAttribute("tabindex"), i.isLowNetwork() || (this.videoPlayer.play(this.el.videoContainers[t]), (this.opts.isPlaying = !0)); } setInactive(e, t) { this.el.tabPanels[t].classList.contains(this.class.isActive) && (this.removeClass(e), e.setAttribute("aria-selected", !1), this.el.tabPanels[t].setAttribute("aria-hidden", !0), (this.el.tabPanels[t].style.zIndex = ""), 0 < this.el.videoControllers.length && this.el.videoControllers[t].setAttribute("tabindex", -1), setTimeout(() => { this.opts.currentIndex !== t && (this.removeClass(this.el.tabPanels[t]), this.videoPlayer.reset(this.el.videoContainers[t])); }, 300)); } addClass(e) { e.classList.add(this.class.isActive); } removeClass(e) { e.classList.remove(this.class.isActive); } initVideoPlayer() { (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: (e) => { this.videoPlayer.instance.length && this.videoPlayer.instance[this.opts.currentIndex].onPlay(e); }, pause: (e) => { this.videoPlayer.instance.length && this.videoPlayer.instance[this.opts.currentIndex].onPause(e); }, ended: (e) => { this.videoPlayer.instance.length && this.videoPlayer.instance[this.opts.currentIndex].onEnded(e); }, init: () => { this.videoPlayer.instance.length || this.el.videoContainers.forEach((e) => { e.closest(this.class.tabPanel); let s = e.querySelector(this.selector.videoController); this.videoPlayer.instance.push( new RING.VideoPlayer(e, { sectionElement: this.selector.section, on: { updateController: (t) => { if (s) { var i = t.playState ? "pause" : "play"; let e = t.el; (t = e.dataset.tagging), (t = (e.setAttribute( "data-omni", "" + this.tagging[t][i] ), e.setAttribute( "ga-la", "" + this.tagging[t][i] ), e.querySelector(".blind"))); t && ("undefined" != typeof LOCAL_VARI && LOCAL_VARI && void 0 !== LOCAL_VARI[i] && LOCAL_VARI[i] ? (t.innerText = LOCAL_VARI[i]) : (t.innerText = i)); } }, }, }) ); }); }, }), this.videoPlayer.init(); } } RING.ChargingCase = e; })(), (() => { (window.RING = window.RING || {}), (RING.ColorTab = class { constructor(e, t = {}) { (this.opts = { currentIndex: 0 }), (this.selector = { section: e, tabList: ".common__tab-list", tab: ".common__tab-cta", tabPanel: ".common__tab-panel", tabCTAText: ".tab-cta__text", ...t.selector, }), (this.class = { isActive: "is-active", featureHide: "is-feature-hide", ...t.class, }), (this.el = { section: document.querySelector(this.selector.section) || null, }), (this.events = { click: this.onClickHandler.bind(this) }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.bindEvents()); } setElements() { (this.el.tabs = this.el.section.querySelectorAll( this.selector.tab )), (this.el.tabPanels = this.el.section.querySelectorAll( this.selector.tabPanel )), (this.el.tabCTATexts = this.el.section.querySelectorAll( this.selector.tabCTAText )); } bindEvents() { Array.from(this.el.tabs).forEach((e, t) => { e.addEventListener("click", (e) => this.events.click(e, t)); }); } onClickHandler(e, t) { (this.opts.currentIndex = t), Array.from(this.el.tabs).forEach((e, t) => { this.opts.currentIndex === t && this.setActive(e, t), this.opts.currentIndex !== t && this.setInactive(e, t); }); } setActive(e, t) { this.addClass(this.el.tabCTATexts[t]), this.addClass(e), e.setAttribute("aria-selected", !0), this.addClass(this.el.tabPanels[t]), this.el.tabPanels[t].setAttribute("aria-hidden", !1), (this.el.tabPanels[t].style.zIndex = 5); } setInactive(e, t) { this.el.tabPanels[t].classList.contains(this.class.isActive) && (this.removeClass(this.el.tabCTATexts[t]), this.removeClass(e), e.setAttribute("aria-selected", !1), this.el.tabPanels[t].setAttribute("aria-hidden", !0), (this.el.tabPanels[t].style.zIndex = ""), setTimeout(() => { this.opts.currentIndex !== t && this.removeClass(this.el.tabPanels[t]); }, 300)); } addClass(e) { e.classList.add(this.class.isActive); } removeClass(e) { e.classList.remove(this.class.isActive); } }); })(), (() => { (window.RING = window.RING || {}), (RING.Waterproof = class { constructor(e, t) { (this.opts = { controlTagging: { play: "movi-play", pause: "movi-pause" }, playType: "reverse", ...t, }), (this.selector = { section: e, videoContainer: ".video__container", videoController: ".video__controller", play: ".play", pause: ".pause", }), (this.class = { featureHide: "is-feature-hide" }), (this.el = { section: document.querySelector(this.selector.section) || null, videoContainer: null, }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.buildVideoPlayer()); } setElements() { this.el.videoContainer = this.el.section.querySelector( this.selector.videoContainer ); } buildVideoPlayer() { let t = this; (this.el.videoPlayer = { instance: null, play: (e) => { null !== this.el.videoPlayer.instance && this.el.videoPlayer.instance.onPlay(e); }, ended: () => { null !== this.el.videoPlayer.instance && this.el.videoPlayer.instance.onEnded(); }, reset: (e) => { null !== this.el.videoPlayer.instance && this.el.videoPlayer.instance.onReset(e); }, build: () => { null === this.el.videoPlayer.instance && (this.el.videoContainer.querySelector( this.selector.videoController ), (this.el.videoPlayer.instance = new RING.VideoPlayer( this.el.videoContainer, { sectionElement: this.selector.section, videoParentElement: this.selector.section, playType: this.opts.playType, on: { updateTime: (e) => { e.duration && e.playState && e.currentTime >= e.duration && (t.el.videoPlayer.reset(this.el.videoContainer), setTimeout(() => { t.el.videoPlayer.play(this.el.videoContainer); }, 0)); }, updateController: (e) => { var t = e.playState ? "pause" : "play", e = e.el, i = this.opts.controlTagging; e && (e.setAttribute("data-omni", i[t] + ":#"), e.setAttribute("ga-la", i[t] + ":#"), (i = e.querySelector(".blind"))) && ("undefined" != typeof LOCAL_VARI && LOCAL_VARI && void 0 !== LOCAL_VARI[t] && LOCAL_VARI[t] ? (i.innerText = LOCAL_VARI[t]) : (i.innerText = t)); }, }, } ))); }, }), this.el.videoPlayer.build(); } }); })(), (() => { (window.RING = window.RING || {}), (RING.WalkRun = class { constructor(e, t) { (this.opts = { ...t }), (this.selector = { section: e, motionTarget: ".walk-run__motion-wrap", wrap: "#wrap", }), (this.class = { featureHide: "is-feature-hide", isActive: "is-active", }), (this.el = { wrap: document.querySelector(this.selector.wrap) || null, section: document.querySelector(this.selector.section) || null, videoContainer: null, videoPlayer: null, }), (this.events = { load: this.onLoadHandler.bind(this), scroll: this.onScrollHandler.bind(this), }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.bindEvents()); } setElements() { (this.el.target = this.el.section.querySelector( this.selector.target )), (this.el.motionTarget = this.el.section.querySelector( this.selector.motionTarget )); } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("scroll", this.events.scroll); } onLoadHandler() { this.events.scroll(), window.removeEventListener("load", this.events.load); } onScrollHandler() { var e = scrollY, t = window.innerHeight, i = scrollY + 0.8 * t, s = this.el.motionTarget, a = 0 * s.getBoundingClientRect().height, n = e + this.el.section.getBoundingClientRect().top, r = e + s.getBoundingClientRect().top, o = e + s.getBoundingClientRect().bottom; if (r + a <= i && e <= o - a) { if (s.classList.contains(this.class.isActive)) return; s.classList.add(this.class.isActive); } scrollY + t < n && s.classList.contains(this.class.isActive) && s.classList.remove(this.class.isActive); } }); })(), (() => { (window.RING = window.RING || {}), (RING.ChooseSize = class { constructor(e, t = {}) { (this.swiper = null), (this.opts = { pagination: { tagging: { "data-omni-type": "microsite_pcontentinter", "data-omni": "galaxy-ring:find:carousel:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "galaxy-ring:find:carousel:index:", }, }, resizeTimeout: null, currentDevice: null, prevDevice: null, currentIndex: 0, clickTimeout: null, ...t, }), (this.selector = { section: e, popupSection: "#choose-size-popup", popupLayer: ".cm-layer", popupLayerContent: ".cm-layer__content", popupButton: ".js-layer-opener", youtubeIframe: ".common-video-popup__iframe > iframe", swiper: ".common__carousel", swiperSlide: ".swiper-slide", swiperHeadline: ".common__headline", swiperSubHeadline: ".common__sub-headline", swiperPagination: ".swiper-pagination", swiperPaginationBlind: ".common__blind", buttonDisabled: ".swiper-button-disabled", blind: ".blind", }), (this.class = { featureHide: "is-feature-hide", isActive: "is-active", }), (this.el = { section: document.querySelector(this.selector.section) || null, popupSection: null, popupLayer: null, popupLayerEl: null, popupLayerContent: null, popupButton: null, youtubeIframe: null, swiper: null, swiperHeadline: null, swiperSlides: null, swiperPagination: null, swiperPaginationBlind: null, }), (this.events = { load: this.onLoadHandler.bind(this), resize: this.onResizeHandler.bind(this), popup: { click: this.onClickPopupButton.bind(this) }, }), this.init(); } init() { null === this.el.section || this.el.section.classList.contains(this.class.featureHide) || (this.setElements(), this.setPopupLayer(), this.bindEvents()); } setElements() { (this.el.popupSection = this.el.section.querySelector( this.selector.popupSection )), (this.el.popupLayerEl = this.el.section.querySelector( this.selector.popupLayer )), (this.el.popupLayerContent = this.el.popupLayerEl.querySelector( this.selector.popupLayerContent )), (this.el.popupButton = this.el.section.querySelector( this.selector.popupButton )), (this.el.youtubeIframe = this.el.popupLayerEl.querySelector( this.selector.youtubeIframe )), (this.el.swiper = this.el.section.querySelector( this.selector.swiper )), (this.el.swiperHeadline = this.el.section.querySelector( this.selector.swiperHeadline )), (this.el.swiperSlides = this.el.section.querySelectorAll( this.selector.swiperSlide )), (this.el.swiperPagination = this.el.section.querySelector( this.selector.swiperPagination )), (this.el.swiperPaginationBlind = this.el.section.querySelector( this.selector.swiperPaginationBlind )); } bindEvents() { window.addEventListener("load", this.events.load), window.addEventListener("resize", this.events.resize), this.el.popupButton.addEventListener( "click", this.events.popup.click ); } onLoadHandler() { this.events.resize(), window.removeEventListener("load", this.events.load); } onResizeHandler() { (this.opts.currentDevice = 767 < innerWidth ? "desktop" : "mobile"), this.opts.currentDevice !== this.opts.prevDevice && (this.onResponsiveChange(), (this.opts.prevDevice = this.opts.currentDevice)); } onResponsiveChange() { this.destroySwiper(), "mobile" === this.opts.currentDevice && this.setSwiper(); } updateA11ySwiper() { null !== this.swiper && (Array.from(this.swiper.slides).forEach((e) => { e.setAttribute("aria-hidden", !0); }), "mobile" === this.opts.currentDevice) && this.swiper.slides[this.opts.currentIndex].setAttribute( "aria-hidden", !1 ); } destroyA11ySwiper() { "desktop" === this.opts.currentDevice && Array.from(this.el.swiperSlides).forEach((e) => { e.removeAttribute("aria-hidden"); }); } onTransitionStart() { (this.opts.currentIndex = this.swiper.snapIndex), this.updateA11ySwiper(); } onInitSwiper() { (this.opts.currentIndex = 0), this.onTransitionStart(), this.updateA11ySwiper(), this.setPaginationLabel(); var e = this.swiper.pagination.bullets; let i = this; void 0 !== e && 0 < e.length && Array.from(e).forEach((e, t) => { e.addEventListener("click", function (e) { e.preventDefault(), e.stopImmediatePropagation(), i.swiper.slideTo(t); }); }); } onSlideChange() { this.setPaginationLabel(); } destroySwiper() { null !== this.swiper && (this.destroyA11ySwiper(), this.swiper.destroy(!0, !0), (this.swiper = null)); } setSwiper() { if (null === this.swiper) { let i = this; var e = { init: !1, a11y: !1, slidesPerView: "auto", pagination: { el: i.el.swiperPagination, renderBullet: function (e) { var t = i.opts.pagination.tagging; return `
  • `; }, }, }; (this.swiper = new Swiper(this.el.swiper, e)), this.swiper.on( "transitionStart", this.onTransitionStart.bind(this) ), this.swiper.on( "snapIndexChange", this.onSlideChange.bind(this) ), this.swiper.on("init", this.onInitSwiper.bind(this)), this.swiper.init(); } } setPaginationLabel() { if (null !== this.swiper) { let r = this.swiper.slides; var e = this.swiper.pagination.bullets; void 0 !== e && 0 < e.length && Array.from(e).forEach((e, t) => { var i, s = e.classList.contains( "swiper-pagination-bullet-active" ), a = r[t].querySelector(".choose-size__step-num") ?.innerText ?? "", n = r[t].querySelector(".choose-size__step-tit") ?.innerText ?? ""; "undefined" != typeof LOCAL_VARI && LOCAL_VARI ? ((i = void 0 !== LOCAL_VARI.slide && LOCAL_VARI.slide ? LOCAL_VARI.slide : "Slide"), s ? e.setAttribute( "aria-label", `${i}${t + 1}: ${a} ${n} ` + (void 0 !== LOCAL_VARI.selected && LOCAL_VARI.selected ? LOCAL_VARI.selected : "selected") ) : e.setAttribute( "aria-label", `${i}${t + 1}: ${a} ` + n )) : s ? e.setAttribute( "aria-label", `Slide${t + 1}: ${a} ${n} selected` ) : e.setAttribute( "aria-label", `Slide${t + 1}: ${a} ` + n ); }); } } setPopupLayer() { let e = () => { var e = this.el.popupButton, t = "https://www.youtube.com/embed/" + e.getAttribute("data-youtube-id") + "?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1", i = e.getAttribute("data-youtube-title"); this.el.youtubeIframe.setAttribute("src", t), this.el.youtubeIframe.setAttribute("title", i), (this.el.OpenerTarget = e); }, t = () => { this.el.youtubeIframe.removeAttribute("src"); }; (this.el.popupLayer = { instance: null, setup: () => { null === this.el.popupLayer.instance && (this.el.popupLayer.instance = new HiveLayer( this.selector.section + " " + this.selector.popupLayer, { effect: "default", on: { layerOpenBefore: () => { var e = this.el.popupLayerEl.querySelectorAll( "img.js-res-img:not(.load-complete)" ); 0 < e.length && this.opts.updateImageLoader(e); }, layerOpenAfter: () => { e(); }, layerCloseBefore: () => {}, layerCloseAfter: () => { t(); }, }, } )); }, }), this.el.popupLayer.setup(); } onClickPopupButton(e) { e = e.currentTarget; (this.opts.targetPopupId = e.getAttribute("data-content-target")), this.setPopupContentA11y(); } setPopupContentA11y() { var e = this.el.popupLayerContent, t = e.getAttribute("id"), i = e.querySelectorAll("a, button, input, select, iframe"); this.opts.targetPopupId === t ? (this.el.popupSection.setAttribute("aria-hidden", "false"), (e.style.display = "block"), e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"), 0 < i.length && i.forEach((e) => { e.setAttribute("aria-hidden", "false"), e.removeAttribute("tabindex"); })) : (this.el.popupSection.setAttribute("aria-hidden", "true"), (e.style.display = ""), e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"), 0 < i.length && i.forEach((e) => { e.setAttribute("aria-hidden", "true"), e.setAttribute("tabindex", "-1"); })); } }); })(), (() => { window.RING = window.RING || {}; let t = RING.UTILS; RING.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" )); } }; })(), new (class { constructor(e) { (this.container = e), (this.containerEl = document.querySelector(this.container)), this.init(); } init() { null !== this.containerEl && this.buildComponents(); } buildComponents() { (this.imageLoader = new RING.ImageLoader(this.container, { visiblePoint: 0.5, loadOption: [ { resolution: 1920, attribute: "data-src-pc" }, { resolution: 767, attribute: "data-src-mobile" }, ], })), (this.videoLoader = new RING.VideoLoader(this.container, { visiblePoint: 1.5, videoLazyClass: ".js-video-src", responsiveClass: ".js-res-video", imageEndLazyClass: ".js-end-img-src", notLoadElement: [".cm-layer"], loadOption: [ { resolution: 1920, attribute: "data-media-pc" }, { resolution: 767, attribute: "data-media-mo" }, ], })); new RING.RingVideoPlayer(".kv", { ignoreLazy: !0, updateVideoLoader: (e) => { this.videoLoader.setResponsiveVideo(e); }, controlTagging: { play: "gring:highlights:main-kv:movi-play", pause: "gring:highlights:main-kv:movi-pause", }, }), new RING.HighlightCarousel(".highlight-carousel"), new RING.MediaQuote(".media-quote"), new RING.RingVideoPlayer(".concave-design", { playOffset: 0, controlTagging: { play: "gring:highlights:design:movi-play", pause: "gring:highlights:design:movi-pause", }, }), new RING.Sensor(".sensor", { startCount: 0, endCount: 92, loadOffset: 1.5, }), new RING.RingVideoPlayer(".battery", { controlTagging: { play: "gring:highlights:battery:movi-play", pause: "gring:highlights:battery:movi-pause", }, }), new RING.RingVideoPlayer(".health-fitness-tracker", { controlTagging: { play: "gring:highlights:track-with-galaxy-ring:movi-play", pause: "gring:highlights:track-with-galaxy-ring:movi-pause", }, }), new RING.ChargingCase(".charging-case__video-type"), new RING.ColorTab(".color-option"), new RING.Waterproof(".waterproof", { controlTagging: { play: "gring:highlights:waterproof:movi-play", pause: "gring:highlights:waterproof:movi-pause", }, }), new RING.RingVideoPlayer(".ai-samsung-health", { controlTagging: { play: "gring:highlights:samsung-health:movi-play", pause: "gring:highlights:samsung-health:movi-pause", }, }), new RING.RingVideoPlayer(".energy-score", { controlTagging: { play: "gring:highlights:energy-score:movi-play", pause: "gring:highlights:energy-score:movi-pause", }, }), new RING.RingVideoPlayer(".wellness-tips", { controlTagging: { play: "gring:highlights:wellness-tips:movi-play", pause: "gring:highlights:wellness-tips:movi-pause", }, }), new RING.CardCarousel(".sleep", { pagination: { tagging: { "data-omni-type": "microsite_pcontentinter", "data-omni": "gring:highlights:sleep:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "gring:highlights:sleep:index:", }, }, }), new RING.WalkRun(".walk-run"), new RING.CardCarousel(".walk-run", { centeredSlides: !0, useNavigation: !0, pagination: { tagging: { "data-omni-type": "microsite_pcontentinter", "data-omni": "gring:highlights:exercise-tracking:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "gring:highlights:exercise-tracking:index:", }, }, on: { updateImageLoader: (e) => { this.imageLoader.setResponsiveImage(e); }, }, }), new RING.RingVideoPlayer(".track-wide-range", { controlTagging: { play: "gring:highlights:exercise-tracking:movi-play", pause: "gring:highlights:exercise-tracking:movi-pause", }, }), new RING.ChooseSize(".choose-size", { updateImageLoader: (e) => { this.imageLoader.setResponsiveImage(e); }, pagination: { tagging: { "data-omni-type": "microsite_pcontentinter", "data-omni": "gring:highlights:sizing-kit:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "gring:highlights:sizing-kit:index:", }, }, }), new RING.Contrast(".cp-high-contrast"), RING.Disclaimer.init(), window.addEventListener("load", () => { setTimeout(() => { window.GALAXY && window.GALAXY.isGalaxy && (this.subNav = new RING.SubNav("#subnav")); }, 5); }); } })(".wearable-ring"); });

    Specifications

    • Body Weight (g)

      2.8

    • Bluetooth Version

      Bluetooth v5.4

    • Sensors

      Accelerometer, Optical Heart Rate Sensor, Temperature Sensor

    • Infra

      Bluetooth Only

    • Bluetooth Version

      Bluetooth v5.4

    • Zephyr RTOS

    • Storage (MB)

      8

    • Accelerometer, Optical Heart Rate Sensor, Temperature Sensor

    • Body Dimension (WxD, mm)

      7.0 x 2.6

    • Body Weight (g)

      2.8

    • Case Dimension (HxWxD, mm)

      48.9 x 48.9 x 24.5

    • Case Weight (g)

      61.3

    • Durability

      10 ATM, IP68

    • Battery Capacity (mAh, Typical)

      19.5

    • Removable

      No

    • Usage Time (Days, Typical)

      Up to 6

    User manual & downloads

    User Manual

    ver 1.0 | 2.35 MB

    Dec 20. 2024

    ENGLISH

    User Manual

    ver 1.0 | 2.2 MB

    Dec 20. 2024

    FRENCH

    Safety Guide

    ver 1.0 | 4.39 MB

    Aug 28. 2024

    ENGLISH, FRENCH

    Product support

    Find answers to the questions you have about the product

    Product support

    Get the most from Samsung device and services.

    Recently viewed