Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (2024)

Galaxy Watch6 Classic

Get up to £125 off when you trade in your old watch.*

BUY NOW

PRE-REGISTER

PRE-ORDER

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (1)

Look your best. Get more done. That's the dream.

We're making it a reality with our largest watch screen yet, custom exercise routines and sleep tracking — finished with a timeless aesthetic.1, 2

Start your everyday wellness journey with a refined classic

Expansive Screen
Rotating Bezel
Exercise
Sleep Tracking
Customisable Aesthetics

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (2)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (3)

A zoomed-in view of Galaxy Watch6 Classic and its rotating bezel getting thinner and the screen getting larger, highlighting the larger display.

More room to be more productive Go to Expansive Screen

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (5)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (6)

A zoomed-in side view of Galaxy Watch6 Classic with the app being displayed changing as the bezel rotates.

Smooth, intuitive scrolling. Any way you spin it Go to Rotating Bezel

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (8)

Track your workouts to maximise results Go to Exercise

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (10)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (11)

Galaxy Watch6 Classic can be seen displaying the Sleep score screen. The progress bar is advancing as the sleep score '82' appears with the text 'Excellent' below. The sleep animal, a lion, appears at the bottom of the screen.

Understand your habits to improve your sleep Go to Sleep Tracking

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (13)

Create a look tailored to your style Go to Customisable Aesthetics

Expansive Screen Rotating Bezel Exercise Sleep Tracking Customisable Aesthetics

Close Popup

More screen. Thinner bezel

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (15)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (16)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (17)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (18)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (19)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (20)

More screen.
Thinner bezel

Experience enhanced visuals and clear motion graphics on a 20% larger display. The 15% thinner bezel and increased screen size create an aesthetically perfect display-to-bezel ratio — and extra space for every tap and swipe.3, 4

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (21)

Sapphire Crystal glass.
A clear difference in durability

Designed to withstand daily wear and tear. The display of Galaxy Watch6 Classic is expertly crafted with Sapphire Crystal glass to protect its timeless beauty. And the finishing has IP68 and 5ATM ratings, so you can keep your watch on through all your adventures.5, 6

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (22)

Take the improved
rotating bezel for a spin1

Embrace the time-defying style of a classic. Inspired by the iconic design of diving watches, the slim spinning bezel on Galaxy Watch6 Classic brings history into the future with more fluid, responsive scrolling for intuitive interaction with the screen. And the circular frame is crafted with sleek stainless steel to elevate every glance at the clock.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (23)

Go from boardroom to
weight room in a snap

Swapping bands is as seamless as pressing the quick release button. A convenient guide lets you install the new band with ease — just press gently until you hear a click. Transition from work to workout or back again without breaking a sweat.7

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (24)

Don't fret even when it's wet

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (25)

Defy the dangers of dust

18% faster CPU speed

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (26)

Up to all-day battery

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (27)

More processing power to do more with every minute

Get more done in less time with Galaxy Watch6 Classic's upgraded processor. The 18% faster CPU speed and quick app launch time keep you productive and efficient throughout the day.1

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (28)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (29)

Galaxy Watch6 Classic's processor is being assembled with the bezel and display.

Charge up in record time

With one full charge, the watch lasts up to 40 hours. Fast charge the watch to 45% in just 30 minutes and you're all set to explore the great outdoors or enjoy a well-deserved break in bed.8, 9, 10

Up to 45 %

charged in 30 min

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (30)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (31)

Front view of Galaxy Watch6 Classic can be seen with the charging screen GUI on display. The number is going up from '50%' to '100%', implying the battery is being fully charged.

Hands-on
shooting, hands-free

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (32)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (33)

On the left is Galaxy Z Fold5 on Flex mode. On the right is Galaxy Watch6 Classic displaying the same screen as Galaxy Z Fold5 , illustrating the Camera Controller feature.

Pair your watch with Galaxy Z Fold5 to capture the healthy you up close or from a distance. Galaxy Z Fold5's Flex mode and Camera Controller let you easily switch between photo and video mode, or zoom in and out, all from the comfort of your wrist. Then tap the shutter button on your watch to take a pic.11, 12

Begin with
your watch,
follow up on your phone

Team up with your Galaxy Z Fold5 to monitor your progress seamlessly. Use your Galaxy Watch6 Classic track your workouts and health stats. Then sync your watch with the Samsung Health app to graph your activities on a larger screen, including your daily steps, workout intensity, heart rate and more.11

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (34)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (35)

Daily steps icon and progress bar can be seen. The number of steps go up from 824 to 3,456 and the progress bar advances accordingly. On the right is the Galaxy Z Fold5 displaying the Samsung Health app with the detailed data.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (36)

Power to do more in
your day

Keep your day running smoothly, even when you've left your phone behind. You can make calls, send texts and stream music directly from your Galaxy Watch6 Classic. Or locate your smartphone using the Find My Phone feature on your watch.13, 14, 15, 16

Call Text Find My Phone

Call Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (37)

Text Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (38)

Find My Phone Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (39)

International Roaming keeps your world within reach

Galaxy Watch6 Classic can be seen on the wrist of a person wearing a blazer, displaying the Settings screen with the Mobile data and Data roaming feature enabled.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (40)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (41)

Whether exploring a new city, hiking in the mountains or lounging on a beach, international roaming keeps you connected to loved ones, or help you call for reservations and even access important information.13, 17

Find your way around with GPS

Navigate the world without constantly pulling out your phone. Simply glance at your wrist for GPS navigation on Google Maps, so you can find your way to the gallery opening, or track down a more challenging cycling path.18, 19

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (42)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (43)

Samsung Wallet is always on hand

Access Samsung Wallet right from your Galaxy Watch6 Classic. Make payments, ride public transit, scan membership cards and more. You can even store non-payment items like digital IDs, tickets and keys, to lighten your load and empty out your pockets.18

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (44)

Wake up to our most advanced sleep tracking

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (45)

Get detailed sleep tracking with improved analysis and deeper insights to enhance the quality of your sleep. And now you can access Sleep Coaching on your Galaxy Watch6 Classic to build better sleeping habits. Get a good night's sleep when wearing your watch to bed by switching to the Fabric Band. Be sure to put your watch on sleep mode to change the PPG sensor's green LED to invisible infrared LED, dim the display brightness and mute notifications.19, 20, 21, 22, 23, 24, 25

Information on the time spent in each sleep stage can be seen: Awake 35m, REM 1h 30m, Light 4h 30m, Deep 55m. The information is also displayed as a graph.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (46)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (47)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (48)

Better together

Fabric Band

Light and comfortable Optimised for sleep

Learn more

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (51)

Be prepared with Cycle Tracking

Get in tune with your health and body. Cycle Tracking powered by Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (52) Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (53) uses your nightly skin temperature from your watch, measured while you sleep, to predict the dates of your period and other cycles. Plan ahead and live life to the fullest with Galaxy Watch6 Classic.26

A heart monitoring package that watches over you

The built-in PPG sensor periodically measures heart rate and heart rhythm while you wear your Galaxy Watch6 Classic, and will alert you if your heart rate is too high or too low. It will also send you a notification if it detects an irregular heart rhythm, along with a prompt to take an ECG to examine your heart rhythm in more detail.27, 28, 29

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (54)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (55)

GUI of ECG being measured can be seen, with the measure time changing from 26 to 31 seconds and the bpm changing between 72 and 77. Under the numbers is a moving graph illustrating the heartbeat.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (56)

Keep a watchful eye on your blood pressure

Stay informed and stay healthy. Allow your watch to track your daily blood pressure so you can focus on making sound choices for a balanced lifestyle.30, 31, 32, 33

Clock your goals with BIA

Keep an eye on your body composition with detailed Bioelectrical Impedance Analysis (BIA). Set your target weight, body fat, muscle mass and more, then set up an optimised program to help you achieve your health and wellness goals.34, 35, 36

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (57)

Safety features for your peace of mind

Fall detection should sense if you've suffered a fall and sends an Emergency SOS if you need help. When help arrives, you can access your medical info from the lock screen with a touch of a button to aid emergency services.37, 38, 39, 40

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (58)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (59)

Meet your Personalised HR Zone

Your watch can assess your fitness capacity to determine your personal HR Zone. If there's a specific HR zone you want to hit, you can set the goal manually. As you workout you'll be alerted when you enter your target HR Zone, whether that's fat burning, cardio or high-intensity training. Move out of the zone, and it'll alert you too — letting you adjust your effort accordingly.41

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (60)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (61)

5 different curved lines that form a U-shape can be seen. Each is in different shade of colour from yellow to red. A white dot placed in the middle of each line moves along the lines as a same-coloured heart and heart rate number indicating the Personalised HR Zone changes. GUI of Personalised HR Zone can be seen, with the function button enabled and 5 HR Zones. With the increasing heart rate from 90 to 114, 125, 158 and 174, the selected zone changes from 1 to 5, respectively.

Start a healthy competition amongst friends and family

Create challenges and let your competitive side shine. Invite your workout buddies, and encourage each other to go the extra mile. Celebrate progress, achievements and personal bests together.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (62)

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (63)

Exercise tracking - Chart your growth to peak performance

Gain valuable insights into your progress and achievements with Galaxy Watch6 Classic. Track over 90 different workouts, or you can even create your own custom workout, to log your daily activity and monitor your progress. You can activate auto detect for select workouts like running, walking, and now, cycling to go straight from warm up mode to beast mode.42, 43, 44

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (64)

Start your own friendly fitness challenges

Boost your workouts by challenging your crew to group exercises. Motivate each other along the way to meet your fitness goals together.

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (65)

Change plans?
Change bands.
Change faces

Create your own bespoke look for Galaxy Watch6 Classic. Choose from a wide collection of bands to take your look from rugged to classy, depending on your mood. Customise your watch face with a sleek design or compilations to quickly access your favourite apps.45

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (66)

Switch, upgrade and trade.
It's all easy

Trade in and save

Trade in your old smartwatch for an instant discount on the new Galaxy Watch6 Classic.

LEARN MORE

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (67)

Watch how easy switching is

Smart Switch is the sure and secure way to transfer your data to Galaxy. Take all your apps, watch faces, settings and more, with you when you make the switch.46, 47, 48, 49

LEARN MORE

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (68)

It's time to find your Watch

  • Galaxy Watch6 Classic

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (69)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (70)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (71)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (72)

    Buy Now

    Learn More

    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (73) Display Sapphire Crystal
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (74) Screen Size 37.3mm | 33.3mm
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (75) Fast Charge9, 10 Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (76)
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (77) Infrared
      Temperature
      Sensor
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (78)
    • Material Stainless Steel
    • Battery
      (typical)8
      425mAh |
      300mAh
    • Sleep
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (79)
    • Cycle
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (80)
    • Body
      Composition
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (81)
    • Route
      Workout /
      Track Back
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (82)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 47mm | 43mm
    • Weight 59.0g | 52.0g
  • Galaxy Watch6

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (83)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (84)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (85)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (86)

    Buy Now

    Learn More

    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (87) Display Sapphire Crystal
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (88) Screen Size 37.3mm | 33.3mm
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (89) Fast Charge9, 10 Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (90)
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (91) Infrared
      Temperature
      Sensor
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (92)
    • Material Armor
      Aluminum
    • Battery
      (typical)8
      425mAh |
      300mAh
    • Sleep
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (93)
    • Cycle
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (94)
    • Body
      Composition
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (95)
    • Route
      Workout /
      Track Back
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (96)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 44mm | 40mm
    • Weight 33.3g | 28.7g
  • Galaxy Watch4 Classic

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (97)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (98)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (99)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (100)

    Buy Now

    Learn More

    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (101) Display Corning®
      Gorilla® Glass
      with DX+
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (102) Screen Size 34.6mm | 30.4mm
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (103) Fast Charge9, 10 Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (104)
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (105) Infrared
      Temperature
      Sensor
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (106)
    • Material Stainless Steel
    • Battery
      (typical)50
      361mAh |
      247mAh
    • Sleep
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (107)
    • Cycle
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (108)
    • Body
      Composition
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (109)
    • Route
      workout /
      Track back
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (110)
    • Durability 5ATM+IP68/
      MIL-STD-810G
    • Size 46mm | 42mm
    • Weight 52.0g | 46.5g
  • Galaxy Watch5 Pro

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (111)

    Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (112)

    Buy Now

    Learn More

    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (113) Display Sapphire Crystal
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (114) Screen Size 34.6mm
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (115) Fast Charge9, 10 Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (116)
    • Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (117) Infrared
      Temperature
      Sensor
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (118)
    • Material Titanium
    • Battery
      (typical)51
      590mAh
    • Sleep
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (119)
    • Cycle
      Tracking
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (120)
    • Body
      Composition
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (121)
    • Route
      Workout /
      Track Back
      Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (122)
    • Durability 5ATM+IP68/
      MIL-STD-810H
    • Size 45mm
    • Weight 46.5g

Join the Flip side

Go to galaxy Z flip5

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (123)

Unfold your world

Go to galaxy Z fold5

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (124)

Galaxy
Tab S9 | S9+ | S9
Ultra

Go to galaxy tab s9

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (125)

Galaxy Watch6

Go to galaxy watch6

Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (126)

C C

  1. *Purchase by 28/09/23. £125 value based on Watch5 Pro. Values can vary by model and condition of Trade In device. Charges apply if you fail to send us your Trade In device.
  1. Compared to Galaxy Watch4 Classic.
  2. The screen size comparison is based on Galaxy Watch6 Classic 43mm model.
  3. The screen size and bezel width comparisons are based on Galaxy Watch6 Classic 43mm model.
  4. Galaxy Watch6 Classic 43mm model display size is compared to that of Galaxy Watch4 Classic 42mm model.
  5. Galaxy Watch6 Classic is water resistant to up to 50 meters in depth for 10 minutes under the 5ATM rating. It is not suitable for diving or high-pressure water activities. If the device or your hands are wet, they must be dried thoroughly prior to handling. Galaxy Watch6 Classic provides ingress protection (IP68) against dust and fresh water to a maximum of 1.5 meters for up to 30 minutes. Refer to user manual for further information, including care/use instructions.
  6. Based on Vickers hardness measured with constant load of 200gf.
  7. Availability of Watch bands may vary by country or region. Additional Watch bands are sold separately.
  8. Actual battery life may vary depending on network environment, usage patterns and other factors.
  9. Testing conducted by Samsung using pre-released version of Galaxy Watch6 Classic (BT & LTE), each paired to a Samsung phone; all devices tested with prerelease software, Galaxy Watch Magnetic Fast Charging USB C Cable (EP-OR900), and Samsung 25W USB C Power Adapter (EP-TA800). Charge time varies with region, settings, usage pattern and environmental factors; actual results may vary.
  10. Samsung 25W USB C Power Adapter (EP-TA800) sold separately.
  11. Galaxy Z Fold5 sold separately.
  12. Camera Controller is supported on Galaxy Watch4 and later released Galaxy Watch models when paired with Galaxy S9 Series and later. Camera Controller zoom feature is available on Samsung Galaxy Watch4 series and later released Galaxy Watch models that are paired with a Galaxy S series, Galaxy Note series and Galaxy Z series smartphone running One UI 5.1 or above with Camera Controller support.
  13. LTE connection required to use select features on Galaxy Watch6 Classic. LTE connectivity only available in LTE models.
  14. Bluetooth models must be paired with a compatible mobile device connected to a mobile network.
  15. Not all apps and services are compatible with Wear OS.
  16. Find My Phone is supported when Galaxy Watch in Wear OS is paired with a smartphone running Android 10 or above. To use this feature, the paired smartphone should be signed in to Samsung Account.
  17. Enabling International Roaming may result in roaming charges depending on your smartphone carrier's plan.
  18. GPS function requires internet connection. Can be used on LTE models without paired smartphone. Non-LTE models require Bluetooth connection to paired smartphone.
  19. By enabling GPS, your current location information may be gathered and used by Galaxy apps and third-party apps to provide location-based services.
  20. The availability of Samsung Wallet and its features may vary by country or region.
  21. Requires Samsung Health app version 6.24 or later.
  22. Galaxy Watch6 Classic must be paired with a Samsung Galaxy smartphone with Android 10.0 and minimum 1.5GB Memory.
  23. Sleep tracking features are intended for general wellness and fitness purposes only. Not intended for use in detection, diagnosis, treatment of any medical condition or sleep disorder. The measurements are for your personal reference only. Please consult a medical professional for advice.
  24. Sleep Coaching requires sleep data of at least 7 days, including 2 days off.
  25. Availability of blood oxygen level feature may vary by country or regions.
  26. Invisible LED is enabled when Sleep mode is turned on.
  27. Fabric Band is sold separately and compatible with Galaxy Watch4 and later released Galaxy Watch series. Availability of watch bands may vary by country/region or carrier.
  28. Cycle Tracking is available for cycle and period prediction which is powered by Natural Cycles. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), Cycle Tracking based on skin temperature only 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 watch for at least 4 hours during sleep, 5 times a week. Predictions may vary depending on the proper use of your watch, 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.
  29. HR alerts is 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.
  30. Availability of Irregular Heart Rhythm Notification (IHRN) feature may vary by country or region. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), it only works on watches and smartphones purchased in the countries where service is currently available (however, service may be restricted when users travel to non-service countries). Not intended to provide a notification on every episode of irregular rhythm suggestive of AFib and the absence of a notification is not intended to indicate no disease process is present. It is not intended for users with other known arrhythmias or users under 22 years old. Users should not interpret or take clinical action based on the predictions made without consultation of a qualified healthcare professional.
  31. Availability of ECG app may vary by country or region. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), ECG app only works on watches and smartphones purchased in the countries where service is currently available (however, service may be restricted when users travel to non-service countries). Check out https://www.samsung.com/apps/samsung-health-monitor for more information and latest update on service countries. It is not intended for users by people under 22 years old. Users should not interpret or take clinical action based on the device output without consultation of a qualified healthcare professional.
  32. For accurate blood pressure readings, a calibration is required every 4 weeks by BP monitor & arm cuff. Requires a Galaxy smartphone running Android 9.0 or above.
  33. Availability of Blood pressure app may vary by country or region. Due to country restrictions in obtaining approval/registration as a Software as a medical device (SaMD), Blood pressure app only works on watches and smartphones purchased in the countries where service is currently available (however, service may be restricted when users travel to non-service countries). Check out https://www.samsung.com/apps/samsung-health-monitor for more information and latest update on service countries. It is not intended for use by people under 22 years old.
  34. Users should measure their blood pressure when at rest, as they would do with a traditional cuff, and refrain from measuring when they are working out, smoking, or drinking. Blood pressure app is not intended for any diagnostic purposes regarding hypertension or other heart conditions or users under 22 years old. Users should not interpret or take clinical action based on the device output without consultation of a qualified healthcare professional. Blood pressure app is not intended to replace traditional methods of diagnosis or treatment.
  35. Measured blood pressure history can be reviewed within the Samsung Health Monitor app on a paired smartphone.
  36. Not intended for use in detection, diagnosis, treatment. Intended for general wellness and fitness purposes only.
  37. Body composition is only supported in Samsung Galaxy Watch4 series and later released Galaxy Watch models. Body composition should not be used if you have an implanted pacemaker or other implanted medical devices, or if you are pregnant. Any health-related information accessed through the device and application should not be treated as medical advice. Measurement results may not be accurate if you are under 20 years old. The measurements are for your personal reference only. Please consult a medical professional for advice.
  38. Compatible smartphones and available features may vary by country/region, carrier or device.
  39. Galaxy Watch6 Classic must have the latest Wear OS version installed.
  40. Detect falls feature must be enabled on the Galaxy Wearable app on your Galaxy smartphone to use Fall Detection on the watch.
  41. Emergency call requires network connection or pairing with Galaxy smartphone.
  42. Information gathered from the watch, Samsung Health app or related software is not intended to diagnose, cure, mitigate, treat or prevent disease or other conditions.
  43. To update the ranges of each HR zone when running based on cardiopulmonary capabilities, it is required to run outdoors for more than 10 minutes with constant speed of 4km/h or faster.
  44. Compatible smartphones and available features may vary by country/region, carrier or device.
  45. Auto detect workouts must be turned on in Settings. Auto detect is not available for all workouts.
  46. Only available on Galaxy Watch6 series and must be paired with a compatible mobile device.
  47. Availability of Watch bands may vary by country or region. Additional Watch bands are sold separately.
  48. Discount values for broken devices will be considerably lower than those for fully-functional devices, unless there is a separate promotion running that specifically alters the value of broken devices.
  49. Purchase from Samsung.com before DD/MM/YY. £XX value based on any XXX (brand, product) smartwatch. Charges apply if you fail to send us your trade-in device. T&Cs apply.
  50. Bluetooth, Wi-Fi or LTE connection is required.
  51. Third-party apps must be downloaded separately.
  52. Compatible with Galaxy Watch in Wear OS powered by Samsung. Requires pairing with smartphone with latest version of Smart Switch installed.
  53. Data and content available for transfer may vary by OS.
  54. The typical capacity has been tested under third party laboratory conditions. The typical capacity is the estimated average capacity considering the deviation in battery capacity among the battery samples tested under the IEC 61960-3 standard.
  55. Testing conducted by Samsung in June 2022 using pre-released version of Galaxy Watch5 (BT & LTE), each paired to a Samsung phone; all devices tested with prerelease software, Galaxy Watch Magnetic Fast Charging USB C Cable (EP-OR900), and Samsung 25W USB C Power Adapter (EP-TA800). Charge time varies with region, settings, usage pattern and environmental factors; actual results may vary.
  56. The typical capacity has been tested under third party laboratory conditions. The typical capacity is the estimated average capacity considering the deviation in battery capacity among the battery samples tested under the IEC 61960-3 standard. Rated capacity is 573mAh. Actual battery life may vary depending on network environment, usage patterns and other factors.

" ) return ( e.attr("data-swiper-slide-index") || e.attr("data-swiper-slide-index", t), i.cache && (this.virtual.cache[t] = e), e ) }, appendSlide: function (e) { if ("object" == typeof e && "length" in e) for (var t = 0; t < e.length; t += 1) e[t] && this.virtual.slides.push(e[t]) else this.virtual.slides.push(e) this.virtual.update(!0) }, prependSlide: function (e) { var s, a, t = this.activeIndex, i = t + 1, n = 1 if (Array.isArray(e)) { for (var r = 0; r < e.length; r += 1) e[r] && this.virtual.slides.unshift(e[r]) ;(i = t + e.length), (n = e.length) } else this.virtual.slides.unshift(e) this.params.virtual.cache && ((s = this.virtual.cache), (a = {}), Object.keys(s).forEach(function (e) { var t = s[e], i = t.attr("data-swiper-slide-index") i && t.attr("data-swiper-slide-index", parseInt(i, 10) + 1), (a[parseInt(e, 10) + n] = t) }), (this.virtual.cache = a)), this.virtual.update(!0), this.slideTo(i, 0) }, removeSlide: function (e) { if (null != e) { var t = this.activeIndex if (Array.isArray(e)) for (var i = e.length - 1; 0 <= i; --i) this.virtual.slides.splice(e[i], 1), this.params.virtual.cache && delete this.virtual.cache[e[i]], e[i] < t && --t, (t = Math.max(t, 0)) else this.virtual.slides.splice(e, 1), this.params.virtual.cache && delete this.virtual.cache[e], e < t && --t, (t = Math.max(t, 0)) this.virtual.update(!0), this.slideTo(t, 0) } }, removeAllSlides: function () { ;(this.virtual.slides = []), this.params.virtual.cache && (this.virtual.cache = {}), this.virtual.update(!0), this.slideTo(0, 0) }, }, y = { name: "virtual", params: { virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, addSlidesBefore: 0, addSlidesAfter: 0, }, }, create: function () { X.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" ), X.extend(this.params, (e = { watchSlidesProgress: !0 })), X.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 = U.innerWidth, n = U.innerHeight, r = this.$el.offset() t && (r.left -= this.$el[0].scrollLeft) for ( var o = [ [r.left, r.top], [r.left + this.width, r.top], [r.left, r.top + this.height], [r.left + this.width, r.top + this.height], ], l = 0; l < o.length; l += 1 ) { var h = o[l] 0 <= h[0] && h[0] <= a && 0 <= h[1] && h[1] <= n && (s = !0) } if (!s) return } this.isHorizontal() ? ((33 !== i && 34 !== i && 37 !== i && 39 !== i) || (e.preventDefault ? e.preventDefault() : (e.returnValue = !1)), (((34 !== i && 39 !== i) || t) && ((33 !== i && 37 !== i) || !t)) || this.slideNext(), (((33 !== i && 37 !== i) || t) && ((34 !== i && 39 !== i) || !t)) || this.slidePrev()) : ((33 !== i && 34 !== i && 38 !== i && 40 !== i) || (e.preventDefault ? e.preventDefault() : (e.returnValue = !1)), (34 !== i && 40 !== i) || this.slideNext(), (33 !== i && 38 !== i) || this.slidePrev()), this.emit("keyPress", i) } }, enable: function () { this.keyboard.enabled || (S(c).on("keydown", this.keyboard.handle), (this.keyboard.enabled = !0)) }, disable: function () { this.keyboard.enabled && (S(c).off("keydown", this.keyboard.handle), (this.keyboard.enabled = !1)) }, }, E = { name: "keyboard", params: { keyboard: { enabled: !1, onlyInViewport: !0 } }, create: function () { X.extend(this, { keyboard: { enabled: !1, enable: K.enable.bind(this), disable: K.disable.bind(this), handle: K.handle.bind(this), }, }) }, on: { init: function () { this.params.keyboard.enabled && this.keyboard.enable() }, destroy: function () { this.keyboard.enabled && this.keyboard.disable() }, }, } function C() { for (var i, e = [], t = arguments.length; t--; ) e[t] = arguments[t] ;(i = (i = 1 === e.length && e[0].constructor && e[0].constructor === Object ? e[0] : ((n = e[0]), e[1])) || {}), (i = X.extend({}, i)), n && !i.el && (i.el = n), d.call(this, i), Object.keys($).forEach(function (t) { Object.keys($[t]).forEach(function (e) { C.prototype[e] || (C.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 }))) }), X.extend({}, R)), l = (r.useModulesParams(o), (r.params = X.extend({}, o, Y, i)), (r.originalParams = X.extend({}, r.params)), (r.passedParams = X.extend({}, i)), (r.$ = S)(r.params.el)) if ((n = l[0])) return 1 < l.length ? ((s = []), l.each(function (e, t) { t = X.extend({}, i, { el: t }) s.push(new C(t)) }), s) : ((n.swiper = r), l.data("swiper", r), n && n.shadowRoot && n.shadowRoot.querySelector ? ((a = S( n.shadowRoot.querySelector("." + r.params.wrapperClass) )).children = function (e) { return l.children(e) }) : (a = l.children("." + r.params.wrapperClass)), X.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: X.now(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0, }, allowClick: !0, allowTouchMove: r.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0, }, imagesToLoad: [], imagesLoaded: 0, }), r.useModules(), r.params.init && r.init(), r) } var x = { lastScrollTime: X.now(), lastEventBeforeSnap: void 0, recentWheelEvents: [], event: function () { return -1 < U.navigator.userAgent.indexOf("firefox") ? "DOMMouseScroll" : ((t = "onwheel" in c) || ((e = c.createElement("div")).setAttribute( "onwheel", "return;" ), (t = "function" == typeof e.onwheel)), (t = !t && c.implementation && c.implementation.hasFeature && !0 !== c.implementation.hasFeature("", "") ? c.implementation.hasFeature("Events.wheel", "3.0") : t) ? "wheel" : "mousewheel") var e, t }, normalize: function (e) { var t = 0, i = 0, s = 0, a = 0 return ( "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (t = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && ((t = i), (i = 0)), (s = 10 * t), (a = 10 * i), "deltaY" in e && (a = e.deltaY), "deltaX" in e && (s = e.deltaX), e.shiftKey && !s && ((s = a), (a = 0)), (s || a) && e.deltaMode && (1 === e.deltaMode ? ((s *= 40), (a *= 40)) : ((s *= 800), (a *= 800))), { spinX: (t = s && !t ? (s < 1 ? -1 : 1) : t), spinY: (i = a && !i ? (a < 1 ? -1 : 1) : i), pixelX: s, pixelY: a, } ) }, handleMouseEnter: function () { this.mouseEntered = !0 }, handleMouseLeave: function () { this.mouseEntered = !1 }, handle: function (e) { var t = e, i = this, s = i.params.mousewheel if ( (i.params.cssMode && t.preventDefault(), !i.mouseEntered && !s.releaseOnEdges) ) return !0 t.originalEvent && (t = t.originalEvent) var a = 0, n = i.rtlTranslate ? -1 : 1, r = x.normalize(t) if (s.forceToAxis) if (i.isHorizontal()) { if (!(Math.abs(r.pixelX) > Math.abs(r.pixelY))) return !0 a = r.pixelX * n } else { if (!(Math.abs(r.pixelY) > Math.abs(r.pixelX))) return !0 a = r.pixelY } else a = Math.abs(r.pixelX) > Math.abs(r.pixelY) ? -r.pixelX * n : -r.pixelY if (0 === a) return !0 if ((s.invert && (a = -a), i.params.freeMode)) { var o = { time: X.now(), delta: Math.abs(a), direction: Math.sign(a), }, n = i.mousewheel.lastEventBeforeSnap, r = n && o.time < n.time + 500 && o.delta <= n.delta && o.direction === n.direction if (!r) { ;(i.mousewheel.lastEventBeforeSnap = void 0), i.params.loop && i.loopFix() var l, h, n = i.getTranslate() + a * s.sensitivity, s = i.isBeginning, d = i.isEnd if ( ((n = n >= i.minTranslate() ? i.minTranslate() : n) <= i.maxTranslate() && (n = i.maxTranslate()), i.setTransition(0), i.setTranslate(n), i.updateProgress(), i.updateActiveIndex(), i.updateSlidesClasses(), ((!s && i.isBeginning) || (!d && i.isEnd)) && i.updateSlidesClasses(), i.params.freeModeSticky && (clearTimeout(i.mousewheel.timeout), (i.mousewheel.timeout = void 0), 15 <= (l = i.mousewheel.recentWheelEvents).length && l.shift(), (s = l.length ? l[l.length - 1] : void 0), (d = l[0]), l.push(o), s && (o.delta > s.delta || o.direction !== s.direction) ? l.splice(0) : 15 <= l.length && o.time - d.time < 500 && 1 <= d.delta - o.delta && o.delta <= 6 && ((h = 0 < a ? 0.8 : 0.2), (i.mousewheel.lastEventBeforeSnap = o), l.splice(0), (i.mousewheel.timeout = X.nextTick(function () { i.slideToClosest(i.params.speed, !0, void 0, h) }, 0))), i.mousewheel.timeout || (i.mousewheel.timeout = X.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: X.now(), delta: Math.abs(a), direction: Math.sign(a), raw: e, }), (d = i.mousewheel.recentWheelEvents), (r = (2 <= d.length && d.shift(), d.length ? d[d.length - 1] : void 0)) if ( (d.push(s), (!r || s.direction !== r.direction || s.delta > r.delta) && i.mousewheel.animateSlider(s), i.mousewheel.releaseScroll(s)) ) return !0 } return ( t.preventDefault ? t.preventDefault() : (t.returnValue = !1), !1 ) }, animateSlider: function (e) { return ( (6 <= e.delta && X.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 U.Date().getTime()), !1) ) }, releaseScroll: function (e) { var t = this.params.mousewheel if (e.direction < 0) { if (this.isEnd && !this.params.loop && t.releaseOnEdges) return !0 } else if ( this.isBeginning && !this.params.loop && t.releaseOnEdges ) return !0 return !1 }, enable: function () { var e = x.event() if (this.params.cssMode) return ( this.wrapperEl.removeEventListener(e, this.mousewheel.handle), !0 ) if (!e) return !1 if (this.mousewheel.enabled) return !1 var t = this.$el return ( (t = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : t).on("mouseenter", this.mousewheel.handleMouseEnter), t.on("mouseleave", this.mousewheel.handleMouseLeave), t.on(e, this.mousewheel.handle), (this.mousewheel.enabled = !0) ) }, disable: function () { var e = x.event() if (this.params.cssMode) return ( this.wrapperEl.addEventListener(e, this.mousewheel.handle), !0 ) if (!e) return !1 if (!this.mousewheel.enabled) return !1 var t = this.$el return ( (t = "container" !== this.params.mousewheel.eventsTarged ? S(this.params.mousewheel.eventsTarged) : t).off(e, this.mousewheel.handle), !(this.mousewheel.enabled = !1) ) }, }, L = { update: function () { var e, t, i = this.params.navigation this.params.loop || ((e = (t = this.navigation).$nextEl), (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? t.addClass(i.disabledClass) : t.removeClass(i.disabledClass), t[ this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass" ](i.lockClass)), e && 0 < e.length && (this.isEnd ? e.addClass(i.disabledClass) : e.removeClass(i.disabledClass), e[ this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass" ](i.lockClass))) }, onPrevClick: function (e) { e.preventDefault(), (this.isBeginning && !this.params.loop) || this.slidePrev() }, onNextClick: function (e) { e.preventDefault(), (this.isEnd && !this.params.loop) || this.slideNext() }, init: function () { var e, t, i = this.params.navigation ;(i.nextEl || i.prevEl) && (i.nextEl && ((e = S(i.nextEl)), this.params.uniqueNavElements && "string" == typeof i.nextEl && 1 < e.length && 1 === this.$el.find(i.nextEl).length && (e = this.$el.find(i.nextEl))), i.prevEl && ((t = S(i.prevEl)), this.params.uniqueNavElements && "string" == typeof i.prevEl && 1 < t.length && 1 === this.$el.find(i.prevEl).length && (t = this.$el.find(i.prevEl))), e && 0 < e.length && e.on("click", this.navigation.onNextClick), t && 0 < t.length && t.on("click", this.navigation.onPrevClick), X.extend(this.navigation, { $nextEl: e, nextEl: e && e[0], $prevEl: t, prevEl: t && t[0], })) }, destroy: function () { var e = this.navigation, t = e.$nextEl, e = e.$prevEl t && t.length && (t.off("click", this.navigation.onNextClick), t.removeClass(this.params.navigation.disabledClass)), e && e.length && (e.off("click", this.navigation.onPrevClick), e.removeClass(this.params.navigation.disabledClass)) }, }, A = { update: function () { var e = this.rtl, s = this.params.pagination if ( s.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length ) { var a, t = ( this.virtual && this.params.virtual.enabled ? this.virtual : this ).slides.length, i = this.pagination.$el, n = this.params.loop ? Math.ceil( (t - 2 * this.loopedSlides) / this.params.slidesPerGroup ) : this.snapGrid.length if ( (this.params.loop ? ((a = Math.ceil( (this.activeIndex - this.loopedSlides) / this.params.slidesPerGroup )) > t - 1 - 2 * this.loopedSlides && (a -= t - 2 * this.loopedSlides), n - 1 < a && (a -= n), a < 0 && "bullets" !== this.params.paginationType && (a = n + a)) : (a = void 0 !== this.snapIndex ? this.snapIndex : this.activeIndex || 0), "bullets" === s.type && this.pagination.bullets && 0 < this.pagination.bullets.length) ) { var r, o, l, h = this.pagination.bullets if ( (s.dynamicBullets && ((this.pagination.bulletSize = h .eq(0) [this.isHorizontal() ? "outerWidth" : "outerHeight"](!0)), i.css( this.isHorizontal() ? "width" : "height", this.pagination.bulletSize * (s.dynamicMainBullets + 4) + "px" ), 1 < s.dynamicMainBullets && void 0 !== this.previousIndex && ((this.pagination.dynamicBulletIndex += a - this.previousIndex), this.pagination.dynamicBulletIndex > s.dynamicMainBullets - 1 ? (this.pagination.dynamicBulletIndex = s.dynamicMainBullets - 1) : this.pagination.dynamicBulletIndex < 0 && (this.pagination.dynamicBulletIndex = 0)), (r = a - this.pagination.dynamicBulletIndex), (l = ((o = r + (Math.min(h.length, s.dynamicMainBullets) - 1)) + r) / 2)), h.removeClass( s.bulletActiveClass + " " + s.bulletActiveClass + "-next " + s.bulletActiveClass + "-next-next " + s.bulletActiveClass + "-prev " + s.bulletActiveClass + "-prev-prev " + s.bulletActiveClass + "-main" ), 1 < i.length) ) h.each(function (e, t) { var t = S(t), i = t.index() i === a && t.addClass(s.bulletActiveClass), s.dynamicBullets && (r <= i && i <= o && t.addClass(s.bulletActiveClass + "-main"), i === r && t .prev() .addClass(s.bulletActiveClass + "-prev") .prev() .addClass(s.bulletActiveClass + "-prev-prev"), i === o && t .next() .addClass(s.bulletActiveClass + "-next") .next() .addClass(s.bulletActiveClass + "-next-next")) }) else { var t = h.eq(a), d = t.index() if ((t.addClass(s.bulletActiveClass), s.dynamicBullets)) { for (var t = h.eq(r), c = h.eq(o), u = r; u <= o; u += 1) h.eq(u).addClass(s.bulletActiveClass + "-main") if (this.params.loop) if (d >= h.length - s.dynamicMainBullets) { for (var p = s.dynamicMainBullets; 0 <= p; --p) h.eq(h.length - p).addClass( s.bulletActiveClass + "-main" ) h.eq(h.length - s.dynamicMainBullets - 1).addClass( s.bulletActiveClass + "-prev" ) } else t .prev() .addClass(s.bulletActiveClass + "-prev") .prev() .addClass(s.bulletActiveClass + "-prev-prev"), c .next() .addClass(s.bulletActiveClass + "-next") .next() .addClass(s.bulletActiveClass + "-next-next") else t .prev() .addClass(s.bulletActiveClass + "-prev") .prev() .addClass(s.bulletActiveClass + "-prev-prev"), c .next() .addClass(s.bulletActiveClass + "-next") .next() .addClass(s.bulletActiveClass + "-next-next") } } s.dynamicBullets && ((d = Math.min(h.length, s.dynamicMainBullets + 4)), (t = (this.pagination.bulletSize * d - this.pagination.bulletSize) / 2 - l * this.pagination.bulletSize), (c = e ? "right" : "left"), h.css(this.isHorizontal() ? c : "top", t + "px")) } "fraction" === s.type && (i .find("." + s.currentClass) .text(s.formatFractionCurrent(a + 1)), i.find("." + s.totalClass).text(s.formatFractionTotal(n))), "progressbar" === s.type && ((d = s.progressbarOpposite ? this.isHorizontal() ? "vertical" : "horizontal" : this.isHorizontal() ? "horizontal" : "vertical"), (l = (a + 1) / n), (c = e = 1), "horizontal" == d ? (e = l) : (c = l), i .find("." + s.progressbarFillClass) .transform( "translate3d(0,0,0) scaleX(" + e + ") scaleY(" + c + ")" ) .transition(this.params.speed)), "custom" === s.type && s.renderCustom ? (i.html(s.renderCustom(this, a + 1, n)), this.emit("paginationRender", this, i[0])) : this.emit("paginationUpdate", this, i[0]), i[ this.params.watchOverflow && this.isLocked ? "addClass" : "removeClass" ](s.lockClass) } }, render: function () { var e = this.params.pagination if ( e.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length ) { var t = ( this.virtual && this.params.virtual.enabled ? this.virtual : this ).slides.length, i = this.pagination.$el, s = "" if ("bullets" === e.type) { for ( var a = this.params.loop ? Math.ceil( (t - 2 * this.loopedSlides) / this.params.slidesPerGroup ) : this.snapGrid.length, n = 0; n < a; n += 1 ) e.renderBullet ? (s += e.renderBullet.call(this, n, e.bulletClass)) : (s += "<" + e.bulletElement + ' class="' + e.bulletClass + '">' + e.bulletElement + ">") i.html(s), (this.pagination.bullets = i.find("." + e.bulletClass)) } "fraction" === e.type && ((s = e.renderFraction ? e.renderFraction.call(this, e.currentClass, e.totalClass) : ' / '), i.html(s)), "progressbar" === e.type && ((s = e.renderProgressbar ? e.renderProgressbar.call(this, e.progressbarFillClass) : ''), i.html(s)), "custom" !== e.type && this.emit("paginationRender", this.pagination.$el[0]) } }, init: function () { var e, t = this, i = t.params.pagination i.el && 0 !== (e = S(i.el)).length && (t.params.uniqueNavElements && "string" == typeof i.el && 1 < e.length && 1 === t.$el.find(i.el).length && (e = t.$el.find(i.el)), "bullets" === i.type && i.clickable && e.addClass(i.clickableClass), e.addClass(i.modifierClass + i.type), "bullets" === i.type && i.dynamicBullets && (e.addClass("" + i.modifierClass + i.type + "-dynamic"), (t.pagination.dynamicBulletIndex = 0), i.dynamicMainBullets < 1 && (i.dynamicMainBullets = 1)), "progressbar" === i.type && i.progressbarOpposite && e.addClass(i.progressbarOppositeClass), i.clickable && e.on("click", "." + i.bulletClass, function (e) { e.preventDefault() e = S(this).index() * t.params.slidesPerGroup t.params.loop && (e += t.loopedSlides), t.slideTo(e) }), X.extend(t.pagination, { $el: e, el: e[0] })) }, destroy: function () { var e, t = this.params.pagination t.el && this.pagination.el && this.pagination.$el && 0 !== this.pagination.$el.length && ((e = this.pagination.$el).removeClass(t.hiddenClass), e.removeClass(t.modifierClass + t.type), this.pagination.bullets && this.pagination.bullets.removeClass(t.bulletActiveClass), t.clickable && e.off("click", "." + t.bulletClass)) }, }, k = { setTranslate: function () { var e, t, i, s, a, n, r, o this.params.scrollbar.el && this.scrollbar.el && ((n = this.scrollbar), (e = this.rtlTranslate), (o = this.progress), (t = n.dragSize), (i = n.trackSize), (s = n.$dragEl), (a = n.$el), (n = this.params.scrollbar), (o = (i - (r = t)) * o), e ? 0 < (o = -o) ? ((r = t - o), (o = 0)) : i < -o + t && (r = i + o) : o < 0 ? ((r = t + o), (o = 0)) : i < o + t && (r = i - o), this.isHorizontal() ? (s.transform("translate3d(" + o + "px, 0, 0)"), (s[0].style.width = r + "px")) : (s.transform("translate3d(0px, " + o + "px, 0)"), (s[0].style.height = r + "px")), n.hide && (clearTimeout(this.scrollbar.timeout), (a[0].style.opacity = 1), (this.scrollbar.timeout = setTimeout(function () { ;(a[0].style.opacity = 0), a.transition(400) }, 1e3)))) }, setTransition: function (e) { this.params.scrollbar.el && this.scrollbar.el && this.scrollbar.$dragEl.transition(e) }, updateSize: function () { var e, t, i, s, a, n, r this.params.scrollbar.el && this.scrollbar.el && ((t = (e = this.scrollbar).$dragEl), (i = e.$el), (t[0].style.width = ""), (t[0].style.height = ""), (s = this.isHorizontal() ? i[0].offsetWidth : i[0].offsetHeight), (n = (a = this.size / this.virtualSize) * (s / this.size)), (r = "auto" === this.params.scrollbar.dragSize ? s * a : parseInt(this.params.scrollbar.dragSize, 10)), this.isHorizontal() ? (t[0].style.width = r + "px") : (t[0].style.height = r + "px"), (i[0].style.display = 1 <= a ? "none" : ""), this.params.scrollbar.hide && (i[0].style.opacity = 0), X.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 = X.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)), X.extend(e, { $el: i, el: i[0], $dragEl: s, dragEl: s[0] }), t.draggable && e.enableDraggable()) }, destroy: function () { this.scrollbar.disableDraggable() }, }, Q = { setTransform: function (e, t) { var i = this.rtl, e = S(e), i = i ? -1 : 1, s = e.attr("data-swiper-parallax") || "0", a = e.attr("data-swiper-parallax-x"), n = e.attr("data-swiper-parallax-y"), r = e.attr("data-swiper-parallax-scale"), o = e.attr("data-swiper-parallax-opacity") a || n ? ((a = a || "0"), (n = n || "0")) : this.isHorizontal() ? ((a = s), (n = "0")) : ((n = s), (a = "0")), (a = 0 <= a.indexOf("%") ? parseInt(a, 10) * t * i + "%" : a * t * i + "px"), (n = 0 <= n.indexOf("%") ? parseInt(n, 10) * t + "%" : n * t + "px"), null != o && ((s = o - (o - 1) * (1 - Math.abs(t))), (e[0].style.opacity = s)), null == r ? e.transform("translate3d(" + a + ", " + n + ", 0px)") : ((i = r - (r - 1) * (1 - Math.abs(t))), e.transform( "translate3d(" + a + ", " + n + ", 0px) scale(" + i + ")" )) }, setTranslate: function () { var s = this, e = s.$el, t = s.slides, a = s.progress, n = s.snapGrid e .children( "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]" ) .each(function (e, t) { s.parallax.setTransform(t, a) }), t.each(function (e, t) { var i = t.progress 1 < s.params.slidesPerGroup && "auto" !== s.params.slidesPerView && (i += Math.ceil(e / 2) - a * (n.length - 1)), (i = Math.min(Math.max(i, -1), 1)), S(t) .find( "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]" ) .each(function (e, t) { s.parallax.setTransform(t, i) }) }) }, setTransition: function (s) { void 0 === s && (s = this.params.speed), this.$el .find( "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]" ) .each(function (e, t) { var t = S(t), i = parseInt(t.attr("data-swiper-parallax-duration"), 10) || s 0 === s && (i = 0), t.transition(i) }) }, }, J = { getDistanceBetweenTouches: function (e) { if (e.targetTouches.length < 2) return 1 var t = e.targetTouches[0].pageX, i = e.targetTouches[0].pageY, s = e.targetTouches[1].pageX, e = e.targetTouches[1].pageY return Math.sqrt(Math.pow(s - t, 2) + Math.pow(e - i, 2)) }, onGestureStart: function (e) { var t = this.params.zoom, i = this.zoom, s = i.gesture if ( ((i.fakeGestureTouched = !1), (i.fakeGestureMoved = !1), !b.gestures) ) { if ( "touchstart" !== e.type || ("touchstart" === e.type && e.targetTouches.length < 2) ) return ;(i.fakeGestureTouched = !0), (s.scaleStart = J.getDistanceBetweenTouches(e)) } ;(s.$slideEl && s.$slideEl.length) || ((s.$slideEl = S(e.target).closest(".swiper-slide")), 0 === s.$slideEl.length && (s.$slideEl = this.slides.eq(this.activeIndex)), (s.$imageEl = s.$slideEl.find("img, svg, canvas")), (s.$imageWrapEl = s.$imageEl.parent("." + t.containerClass)), (s.maxRatio = s.$imageWrapEl.attr("data-swiper-zoom") || t.maxRatio), 0 !== s.$imageWrapEl.length) ? (s.$imageEl.transition(0), (this.zoom.isScaling = !0)) : (s.$imageEl = void 0) }, onGestureChange: function (e) { var t = this.params.zoom, i = this.zoom, s = i.gesture if (!b.gestures) { if ( "touchmove" !== e.type || ("touchmove" === e.type && e.targetTouches.length < 2) ) return ;(i.fakeGestureMoved = !0), (s.scaleMove = J.getDistanceBetweenTouches(e)) } s.$imageEl && 0 !== s.$imageEl.length && ((i.scale = b.gestures ? e.scale * i.currentScale : (s.scaleMove / s.scaleStart) * i.currentScale), i.scale > s.maxRatio && (i.scale = s.maxRatio - 1 + Math.pow(i.scale - s.maxRatio + 1, 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 = X.getTranslate(i.$imageWrapEl[0], "x") || 0), (s.startY = X.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 = this.zoom, t = e.gesture, i = e.image, s = e.velocity if (t.$imageEl && 0 !== t.$imageEl.length) { if (!i.isTouched || !i.isMoved) return (i.isTouched = !1), void (i.isMoved = !1) ;(i.isTouched = !1), (i.isMoved = !1) var a = 300, n = 300, r = s.x * a, r = i.currentX + r, o = s.y * n, o = i.currentY + o, s = (0 !== s.x && (a = Math.abs((r - i.currentX) / s.x)), 0 !== s.y && (n = Math.abs((o - i.currentY) / s.y)), Math.max(a, n)), a = ((i.currentX = r), (i.currentY = o), i.width * e.scale), n = i.height * e.scale ;(i.minX = Math.min(t.slideWidth / 2 - a / 2, 0)), (i.maxX = -i.minX), (i.minY = Math.min(t.slideHeight / 2 - n / 2, 0)), (i.maxY = -i.minY), (i.currentX = Math.max(Math.min(i.currentX, i.maxX), i.minX)), (i.currentY = Math.max(Math.min(i.currentY, i.maxY), i.minY)), t.$imageWrapEl .transition(s) .transform( "translate3d(" + i.currentX + "px, " + i.currentY + "px,0)" ) } }, onTransitionEnd: function () { var e = this.zoom, t = e.gesture t.$slideEl && this.previousIndex !== this.activeIndex && (t.$imageEl.transform("translate3d(0,0,0) scale(1)"), t.$imageWrapEl.transform("translate3d(0,0,0)"), (e.scale = 1), (e.currentScale = 1), (t.$slideEl = void 0), (t.$imageEl = void 0), (t.$imageWrapEl = void 0)) }, toggle: function (e) { var t = this.zoom t.scale && 1 !== t.scale ? t.out() : t.in(e) }, in: function (e) { var t, i, s, a, n = this.zoom, r = this.params.zoom, o = n.gesture, l = n.image o.$slideEl || ((o.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex)), (o.$imageEl = o.$slideEl.find("img, svg, canvas")), (o.$imageWrapEl = o.$imageEl.parent("." + r.containerClass))), o.$imageEl && 0 !== o.$imageEl.length && (o.$slideEl.addClass("" + r.zoomedSlideClass), (l = void 0 === l.touchesStart.x && e ? ((t = ("touchend" === e.type ? e.changedTouches[0] : e) .pageX), ("touchend" === e.type ? e.changedTouches[0] : e).pageY) : ((t = l.touchesStart.x), l.touchesStart.y)), (n.scale = o.$imageWrapEl.attr("data-swiper-zoom") || r.maxRatio), (n.currentScale = o.$imageWrapEl.attr("data-swiper-zoom") || r.maxRatio), e ? ((r = o.$slideEl[0].offsetWidth), (e = o.$slideEl[0].offsetHeight), (t = o.$slideEl.offset().left + r / 2 - t), (l = o.$slideEl.offset().top + e / 2 - l), (s = o.$imageEl[0].offsetWidth), (a = o.$imageEl[0].offsetHeight), (s = s * n.scale), (a = a * n.scale), (s = -(r = Math.min(r / 2 - s / 2, 0))), (a = -(e = Math.min(e / 2 - a / 2, 0))), s < (i = (i = t * n.scale) < r ? r : i) && (i = s), a < (s = (s = l * n.scale) < e ? e : s) && (s = a)) : (s = i = 0), o.$imageWrapEl .transition(300) .transform("translate3d(" + i + "px, " + s + "px,0)"), o.$imageEl .transition(300) .transform("translate3d(0,0,0) scale(" + n.scale + ")")) }, out: function () { var e = this.zoom, t = this.params.zoom, i = e.gesture i.$slideEl || ((i.$slideEl = this.clickedSlide ? S(this.clickedSlide) : this.slides.eq(this.activeIndex)), (i.$imageEl = i.$slideEl.find("img, svg, canvas")), (i.$imageWrapEl = i.$imageEl.parent("." + t.containerClass))), i.$imageEl && 0 !== i.$imageEl.length && ((e.scale = 1), (e.currentScale = 1), i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), i.$imageEl .transition(300) .transform("translate3d(0,0,0) scale(1)"), i.$slideEl.removeClass("" + t.zoomedSlideClass), (i.$slideEl = void 0)) }, enable: function () { var e, t, i = this.zoom i.enabled || ((i.enabled = !0), (e = !( "touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners ) && { passive: !0, capture: !1 }), (t = !b.passiveListener || { passive: !1, capture: !0 }), b.gestures ? (this.$wrapperEl.on( "gesturestart", ".swiper-slide", i.onGestureStart, e ), this.$wrapperEl.on( "gesturechange", ".swiper-slide", i.onGestureChange, e ), this.$wrapperEl.on( "gestureend", ".swiper-slide", i.onGestureEnd, e )) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.on( this.touchEvents.start, ".swiper-slide", i.onGestureStart, e ), this.$wrapperEl.on( this.touchEvents.move, ".swiper-slide", i.onGestureChange, t ), this.$wrapperEl.on( this.touchEvents.end, ".swiper-slide", i.onGestureEnd, e ), this.touchEvents.cancel && this.$wrapperEl.on( this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, e )), this.$wrapperEl.on( this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, t )) }, disable: function () { var e, t, i = this.zoom i.enabled && ((this.zoom.enabled = !1), (e = !( "touchstart" !== this.touchEvents.start || !b.passiveListener || !this.params.passiveListeners ) && { passive: !0, capture: !1 }), (t = !b.passiveListener || { passive: !1, capture: !0 }), b.gestures ? (this.$wrapperEl.off( "gesturestart", ".swiper-slide", i.onGestureStart, e ), this.$wrapperEl.off( "gesturechange", ".swiper-slide", i.onGestureChange, e ), this.$wrapperEl.off( "gestureend", ".swiper-slide", i.onGestureEnd, e )) : "touchstart" === this.touchEvents.start && (this.$wrapperEl.off( this.touchEvents.start, ".swiper-slide", i.onGestureStart, e ), this.$wrapperEl.off( this.touchEvents.move, ".swiper-slide", i.onGestureChange, t ), this.$wrapperEl.off( this.touchEvents.end, ".swiper-slide", i.onGestureEnd, e ), this.touchEvents.cancel && this.$wrapperEl.off( this.touchEvents.cancel, ".swiper-slide", i.onGestureEnd, e )), this.$wrapperEl.off( this.touchEvents.move, "." + this.params.zoom.containerClass, i.onTouchMove, t )) }, }, Z = { loadInSlide: function (e, o) { void 0 === o && (o = !0) var l, h = this, d = h.params.lazy void 0 !== e && 0 !== h.slides.length && ((e = (l = h.virtual && h.params.virtual.enabled ? h.$wrapperEl.children( "." + h.params.slideClass + '[data-swiper-slide-index="' + e + '"]' ) : h.slides.eq(e)).find( "." + d.elementClass + ":not(." + d.loadedClass + "):not(." + d.loadingClass + ")" )), 0 !== (e = !l.hasClass(d.elementClass) || l.hasClass(d.loadedClass) || l.hasClass(d.loadingClass) ? e : e.add(l[0])).length && e.each(function (e, t) { var i = S(t), s = (i.addClass(d.loadingClass), i.attr("data-background")), a = i.attr("data-src"), n = i.attr("data-srcset"), r = i.attr("data-sizes") h.loadImage(i[0], a || s, n, r, !1, function () { var e, t null == h || !h || (h && !h.params) || h.destroyed || (s ? (i.css("background-image", 'url("' + s + '")'), i.removeAttr("data-background")) : (n && (i.attr("srcset", n), i.removeAttr("data-srcset")), r && (i.attr("sizes", r), i.removeAttr("data-sizes")), a && (i.attr("src", a), i.removeAttr("data-src"))), i.addClass(d.loadedClass).removeClass(d.loadingClass), l.find("." + d.preloaderClass).remove(), h.params.loop && o && ((e = l.attr("data-swiper-slide-index")), l.hasClass(h.params.slideDuplicateClass) ? ((t = h.$wrapperEl.children( '[data-swiper-slide-index="' + e + '"]:not(.' + h.params.slideDuplicateClass + ")" )), h.lazy.loadInSlide(t.index(), !1)) : ((t = h.$wrapperEl.children( "." + h.params.slideDuplicateClass + '[data-swiper-slide-index="' + e + '"]' )), h.lazy.loadInSlide(t.index(), !1))), h.emit("lazyImageReady", l[0], i[0])) }), h.emit("lazyImageLoad", l[0], i[0]) })) }, load: function () { var i = this, t = i.$wrapperEl, s = i.params, a = i.slides, e = i.activeIndex, n = i.virtual && s.virtual.enabled, r = s.lazy, o = s.slidesPerView function l(e) { if (n) { if ( t.children( "." + s.slideClass + '[data-swiper-slide-index="' + e + '"]' ).length ) return 1 } else if (a[e]) return 1 } function h(e) { return n ? S(e).attr("data-swiper-slide-index") : S(e).index() } if ( ("auto" === o && (o = 0), i.lazy.initialImageLoaded || (i.lazy.initialImageLoaded = !0), i.params.watchSlidesVisibility) ) t.children("." + s.slideVisibleClass).each(function (e, t) { t = n ? S(t).attr("data-swiper-slide-index") : S(t).index() i.lazy.loadInSlide(t) }) else if (1 < o) for (var d = e; d < e + o; d += 1) l(d) && i.lazy.loadInSlide(d) else i.lazy.loadInSlide(e) if (r.loadPrevNext) if (1 < o || (r.loadPrevNextAmount && 1 < r.loadPrevNextAmount)) { for ( var r = r.loadPrevNextAmount, c = o, u = Math.min(e + c + Math.max(r, c), a.length), c = Math.max(e - Math.max(c, r), 0), p = e + o; p < u; p += 1 ) l(p) && i.lazy.loadInSlide(p) for (var m = c; m < e; m += 1) l(m) && i.lazy.loadInSlide(m) } else { ;(r = t.children("." + s.slideNextClass)), (c = (0 < r.length && i.lazy.loadInSlide(h(r)), t.children("." + s.slidePrevClass))) 0 < c.length && i.lazy.loadInSlide(h(c)) } }, }, 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 = (function (e, t) { for (s = -1, i = e.length; 1 < i - s; ) e[(a = (i + s) >> 1)] <= t ? (s = a) : (i = a) return i })(this.x, e)), (n = r - 1), ((e - this.x[n]) * (this.y[r] - this.y[n])) / (this.x[r] - this.x[n]) + this.y[n]) : 0 }), this ) }, getInterpolateFunction: function (e) { this.controller.spline || (this.controller.spline = this.params.loop ? new 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 p && r(n[o]) else n instanceof p && t !== n && r(n) }, setTransition: function (t, e) { var i, s = this, a = s.controller.control function n(e) { e.setTransition(t, s), 0 !== t && (e.transitionStart(), e.params.autoHeight && X.nextTick(function () { e.updateAutoHeight() }), e.$wrapperEl.transitionEnd(function () { a && (e.params.loop && "slide" === s.params.controller.by && e.loopFix(), e.transitionEnd()) })) } if (Array.isArray(a)) for (i = 0; i < a.length; i += 1) a[i] !== e && a[i] instanceof p && n(a[i]) else a instanceof p && e !== a && n(a) }, }, ee = { makeElFocusable: function (e) { return e.attr("tabIndex", "0"), e }, addElRole: function (e, t) { return e.attr("role", t), e }, addElLabel: function (e, t) { return e.attr("aria-label", t), e }, disableEl: function (e) { return e.attr("aria-disabled", !0), e }, enableEl: function (e) { return e.attr("aria-disabled", !1), e }, onEnterKey: function (e) { var t = this.params.a11y 13 === e.keyCode && ((e = S(e.target)), this.navigation && this.navigation.$nextEl && e.is(this.navigation.$nextEl) && ((this.isEnd && !this.params.loop) || this.slideNext(), this.isEnd ? this.a11y.notify(t.lastSlideMessage) : this.a11y.notify(t.nextSlideMessage)), this.navigation && this.navigation.$prevEl && e.is(this.navigation.$prevEl) && ((this.isBeginning && !this.params.loop) || this.slidePrev(), this.isBeginning ? this.a11y.notify(t.firstSlideMessage) : this.a11y.notify(t.prevSlideMessage)), this.pagination && e.is("." + this.params.pagination.bulletClass) && e[0].click()) }, notify: function (e) { var t = this.a11y.liveRegion 0 !== t.length && (t.html(""), t.html(e)) }, updateNavigation: function () { var e, t !this.params.loop && this.navigation && ((e = (t = this.navigation).$nextEl), (t = t.$prevEl) && 0 < t.length && (this.isBeginning ? this.a11y.disableEl(t) : this.a11y.enableEl(t)), e && 0 < e.length && (this.isEnd ? this.a11y.disableEl(e) : this.a11y.enableEl(e))) }, updatePagination: function () { var i = this, s = i.params.a11y i.pagination && i.params.pagination.clickable && i.pagination.bullets && i.pagination.bullets.length && i.pagination.bullets.each(function (e, t) { t = S(t) i.a11y.makeElFocusable(t), i.a11y.addElRole(t, "button"), i.a11y.addElLabel( t, s.paginationBulletMessage.replace( /{{index}}/, t.index() + 1 ) ) }) }, init: function () { this.$el.append(this.a11y.liveRegion) var e, t, i = this.params.a11y this.navigation && this.navigation.$nextEl && (e = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (t = this.navigation.$prevEl), e && (this.a11y.makeElFocusable(e), this.a11y.addElRole(e, "button"), this.a11y.addElLabel(e, i.nextSlideMessage), e.on("keydown", this.a11y.onEnterKey)), t && (this.a11y.makeElFocusable(t), this.a11y.addElRole(t, "button"), this.a11y.addElLabel(t, i.prevSlideMessage), t.on("keydown", this.a11y.onEnterKey)), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.on( "keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey ) }, destroy: function () { var e, t this.a11y.liveRegion && 0 < this.a11y.liveRegion.length && this.a11y.liveRegion.remove(), this.navigation && this.navigation.$nextEl && (e = this.navigation.$nextEl), this.navigation && this.navigation.$prevEl && (t = this.navigation.$prevEl), e && e.off("keydown", this.a11y.onEnterKey), t && t.off("keydown", this.a11y.onEnterKey), this.pagination && this.params.pagination.clickable && this.pagination.bullets && this.pagination.bullets.length && this.pagination.$el.off( "keydown", "." + this.params.pagination.bulletClass, this.a11y.onEnterKey ) }, }, z = { init: function () { if (this.params.history) { if (!U.history || !U.history.pushState) return ( (this.params.history.enabled = !1), void (this.params.hashNavigation.enabled = !0) ) var e = this.history ;(e.initialized = !0), (e.paths = z.getPathValues()), (e.paths.key || e.paths.value) && (e.scrollToSlide( 0, e.paths.value, this.params.runCallbacksOnInit ), this.params.history.replaceState || U.addEventListener( "popstate", this.history.setHistoryPopState )) } }, destroy: function () { this.params.history.replaceState || U.removeEventListener("popstate", this.history.setHistoryPopState) }, setHistoryPopState: function () { ;(this.history.paths = z.getPathValues()), this.history.scrollToSlide( this.params.speed, this.history.paths.value, !1 ) }, getPathValues: function () { var e = U.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 = z.slugify(t.attr("data-history"))), U.location.pathname.includes(e) || (t = e + "/" + t), ((e = U.history.state) && e.value === t) || (this.params.history.replaceState ? U.history.replaceState({ value: t }, null, t) : U.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) z.slugify(n.attr("data-history")) !== t || n.hasClass(this.params.slideDuplicateClass) || ((n = n.index()), this.slideTo(n, e, i)) } else this.slideTo(0, e, i) }, }, P = { onHashCange: function () { var e = c.location.hash.replace("#", "") e !== this.slides.eq(this.activeIndex).attr("data-hash") && void 0 !== (e = this.$wrapperEl .children( "." + this.params.slideClass + '[data-hash="' + e + '"]' ) .index()) && this.slideTo(e) }, setHash: function () { var e this.hashNavigation.initialized && this.params.hashNavigation.enabled && (this.params.hashNavigation.replaceState && U.history && U.history.replaceState ? U.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(U).on("hashchange", this.hashNavigation.onHashCange) } }, destroy: function () { this.params.hashNavigation.watchState && S(U).off("hashchange", this.hashNavigation.onHashCange) }, }, H = { run: function () { var e = this, t = e.slides.eq(e.activeIndex), i = e.params.autoplay.delay t.attr("data-swiper-autoplay") && (i = t.attr("data-swiper-autoplay") || e.params.autoplay.delay), clearTimeout(e.autoplay.timeout), (e.autoplay.timeout = X.nextTick(function () { e.params.autoplay.reverseDirection ? e.params.loop ? (e.loopFix(), e.slidePrev(e.params.speed, !0, !0), e.emit("autoplay")) : e.isBeginning ? e.params.autoplay.stopOnLastSlide ? e.autoplay.stop() : (e.slideTo(e.slides.length - 1, e.params.speed, !0, !0), e.emit("autoplay")) : (e.slidePrev(e.params.speed, !0, !0), e.emit("autoplay")) : e.params.loop ? (e.loopFix(), e.slideNext(e.params.speed, !0, !0), e.emit("autoplay")) : e.isEnd ? e.params.autoplay.stopOnLastSlide ? e.autoplay.stop() : (e.slideTo(0, e.params.speed, !0, !0), e.emit("autoplay")) : (e.slideNext(e.params.speed, !0, !0), e.emit("autoplay")), e.params.cssMode && e.autoplay.running && e.autoplay.run() }, i)) }, start: function () { return ( void 0 === this.autoplay.timeout && !this.autoplay.running && ((this.autoplay.running = !0), this.emit("autoplayStart"), this.autoplay.run(), !0) ) }, stop: function () { return ( !!this.autoplay.running && void 0 !== this.autoplay.timeout && (this.autoplay.timeout && (clearTimeout(this.autoplay.timeout), (this.autoplay.timeout = void 0)), (this.autoplay.running = !1), this.emit("autoplayStop"), !0) ) }, pause: function (e) { !this.autoplay.running || this.autoplay.paused || (this.autoplay.timeout && clearTimeout(this.autoplay.timeout), (this.autoplay.paused = !0), 0 !== e && this.params.autoplay.waitForTransition ? (this.$wrapperEl[0].addEventListener( "transitionend", this.autoplay.onTransitionEnd ), this.$wrapperEl[0].addEventListener( "webkitTransitionEnd", this.autoplay.onTransitionEnd )) : ((this.autoplay.paused = !1), this.autoplay.run())) }, }, te = { setTranslate: function () { for (var e = this.slides, t = 0; t < e.length; t += 1) { var i = this.slides.eq(t), s = -i[0].swiperSlideOffset, a = (this.params.virtualTranslate || (s -= this.translate), 0), n = (this.isHorizontal() || ((a = s), (s = 0)), this.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(i[0].progress), 0) : 1 + Math.min(Math.max(i[0].progress, -1), 0)) i.css({ opacity: n }).transform( "translate3d(" + s + "px, " + a + "px, 0px)" ) } }, setTransition: function (e) { var i, s = this, t = s.slides, a = s.$wrapperEl t.transition(e), s.params.virtualTranslate && 0 !== e && ((i = !1), t.transitionEnd(function () { if (!i && s && !s.destroyed) { ;(i = !0), (s.animating = !1) for ( var e = ["webkitTransitionEnd", "transitionend"], t = 0; t < e.length; t += 1 ) a.trigger(e[t]) } })) }, }, ie = { setTranslate: function () { var e, t = this.$el, i = this.$wrapperEl, s = this.slides, a = this.width, n = this.height, r = this.rtlTranslate, o = this.size, l = this.params.cubeEffect, h = this.isHorizontal(), d = this.virtual && this.params.virtual.enabled, c = 0 l.shadow && (h ? (0 === (e = i.find(".swiper-cube-shadow")).length && ((e = S('

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

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

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

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

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

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

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

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

") var o = w("") for (var t = 0, l = s.length; t < l; t++) (function (e) { var t = s.eq(e) n = n.add( t.siblings().not(i.aria.notHidden.join(",")) ) })(t) r = r.add(n) o = o.add(n) this.obj.removeAttr(v.hidden) for (var h = 0, d = n.length; h < d; h++) (function (e) { var t = n.eq(e), i = t.attr(v.hidden), s = t.attr(f.role) if (i != g) t.data(a.ariaHidden, i) if (s != g) t.data(a.role, s) t.attr(v.hidden, "true") t.attr(f.role, "none presentation") })(h) r = r.add(n.find(e.join(",").toLowerCase())) for (var c = 0, u = r.length; c < u; c++) (function (e) { var t = r.eq(e), i = t.attr(v.disabled) if (i != g) t.data(a.ariaDisabled, i) t.attr(v.disabled, "true") setTimeout(() => { t.attr(f.tabIndex, -1) }) })(c) o = o.add(n.find("[" + f.tabIndex + "]")) for (var p = 0, m = o.length; p < m; p++) (function (e) { var t = o.eq(e), i = t.attr(f.tabIndex) if (i != g) t.data(a.tabIndex, i) t.attr(f.tabIndex, -1) })(p) this.aria.hiddenEls = n this.aria.focusEls = r this.aria.tabindexEls = o }, this), }, }) }, changeEvents: function (e) { var t = [], i = e.split(" ") for (var s in i) t.push(i[s] + this.opts.customEvent) return t.join(" ") }, bindEvents: function (e) { if (e) w(i).on( this.changeEvents("focusin"), w.proxy(this.trapFocus, this) ) else w(i).off(this.changeEvents("focusin")) }, focusFirstDescendant: function (e) { for (var t = 0; t < e.childNodes.length; t++) { var i = e.childNodes[t] if (this.attemptFocus(i) || this.focusFirstDescendant(i)) return true } return false }, focusLastDescendant: function (e) { for (var t = e.childNodes.length - 1; t >= 0; t--) { var i = e.childNodes[t] if (this.attemptFocus(i) || this.focusLastDescendant(i)) return true } return false }, isFocusable: function (e) { if ( e.tabIndex > 0 || (e.tabIndex === 0 && e.getAttribute("tabIndex") !== null) ) return true if (e.disabled) return false switch (e.nodeName) { case "A": return !!e.href && e.rel != "ignore" case "INPUT": return e.type != "hidden" && e.type != "file" case "BUTTON": case "SELECT": case "TEXTAREA": case "VIDEO": case "SOURCE": case "IFRAME": return true default: return false } }, attemptFocus: function (e) { if (this.opts.isDestroy) return if (!this.isFocusable(e)) return false this.opts.IgnoreUtilFocusChanges = true try { e.focus() } catch (e) {} this.opts.IgnoreUtilFocusChanges = false return document.activeElement === e }, trapFocus: function (e) { if (this.opts.isDestroy) return if (this.opts.IgnoreUtilFocusChanges) return var t = document this.dynamicComponentFocus() }, loadComponent: function () { this.dynamicComponentFocus() setTimeout(() => { this.dynamicComponentFocus() }, 3e3) this.focusFirstDescendant(this.obj[0]) this.lastFocus = document.activeElement this.aria.build() }, dynamicComponentFocus: function () { const o = this.opts.ariaAttr const l = this.opts.elAttr setTimeout(() => { var e = document.getElementById("QSIFeedbackButton-btn") var t = document.getElementById("QSIFeedbackButton-close-btn") var i = document.getElementById("nebula_div_btn") var s = document.getElementById("spr-live-chat-app") var a = document.getElementById("teconsent") if (e) { var n = e.parentElement e.setAttribute(o.disabled, "true") e.setAttribute(l.tabIndex, "-1") n.setAttribute(o.disabled, "true") n.setAttribute(o.hidden, "true") n.setAttribute(l.tabIndex, "-1") n.setAttribute(l.role, "none presentation") } if (i) { var r = i.parentElement i.setAttribute(o.disabled, "true") i.setAttribute(l.tabIndex, "0") r.setAttribute(o.disabled, "true") r.setAttribute(o.hidden, "true") r.setAttribute(l.tabIndex, "-1") r.setAttribute(l.role, "none presentation") } if (s) { s.setAttribute(o.disabled, "true") s.setAttribute(o.hidden, "true") s.setAttribute(l.tabIndex, "-1") s.setAttribute(l.role, "none presentation") } if (a && a.hasAttribute("aria-label")) setTimeout(() => { var e = a.querySelector("a") e.setAttribute(l.tabIndex, "-1") e.setAttribute(o.disabled, "true") e.setAttribute(o.hidden, "true") }) }) }, destroy: function () { s = null this.opts.isDestroy = true var e = this.opts.ariaAttr var t = this.opts.elAttr this.bindEvents(false) this.aria.destroy() this.obj.removeAttr(e.modal) }, }), n ) })() })(window), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const n = WATCH6.UTILS, e = n.RESPONSIVE WATCH6.HeightMatch = class { constructor(e = container, t) { var i = { container: e || ".heightmatch-wrap", childElement: ">li", notCompareElement: null, pushElement: null, matchElement: ".heightmatch-cont", column: 3, pushObjs: null, useDestroyHeight: !0, destroyType: !1, resizeStart: null, breakpoints: {}, matchBefore: null, matchAfter: null, loadAfter: null, } ;(this.opts = n.def(i, t || {})), (this.classes = i.classes), (this.obj = $(document.querySelector(e))), this.init() } init() { null !== this.obj && (this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("loadAfter"), this.bindEvents()) } setElements() { ;(this.objChild = this.obj.find(this.opts.childElement)), (this.opts.pushObjs = null) == this.opts.pushElement ? (this.opts.pushObjs = this.objChild.not( this.opts.notCompareElement )) : (this.opts.pushObjs = this.objChild .not(this.opts.notCompareElement) .find(this.opts.pushElement)) } setOpts() { ;(this.currentDevice = !1), (this.prevDevice = null) var e, t, i = n.winSize().w, s = this.opts.breakpoints, a = [] for (t in s) e = i <= t ? (a.push(t), Math.min.apply(null, a)) : null ;(this.breakOpts = n.def({}, this.opts)), null != e && (this.breakOpts = n.def(this.breakOpts, s[e])) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { n.winSize().w !== this.winWidth && ((this.winWidth = n.winSize().w), null == this.opts.resizeStart && ((this.opts.resizeStart = this.winWidth), this.outCallback("matchBefore"), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 ))) } resizeAnimateFunc() { this.setLayout(), this.setOpts(), this.setRows(), this.buildHeightControl(), (this.resizeRequestFrame = n.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), this.setOpts(), this.setRows(), this.buildHeightControl(), this.outCallback("matchAfter"), n.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice, this.prevDevice, (this.prevDevice = this.currentDevice) } setRows() { this.rowNum = Math.ceil( this.objChild.length / this.breakOpts.column ) } buildHeightControl() { this.breakOpts.column <= 1 ? null !== this.opts.pushObjs && this.opts.pushObjs.css("height", "") : this.buildHeight() } buildHeight() { this.heightArray = [] for (var e = 0; e < this.rowNum; e++) this.heightArray[e] = [] for (var e = 0, t = this.objChild.length; e < t; e++) { var i = parseInt(e / this.breakOpts.column, 10), s = this.objChild .eq(e) .not(this.opts.notCompareElement) .find(this.opts.matchElement), s = s.is(":visible") ? s.outerHeight() : 0 this.heightArray[i].push(s) } for (e = 0; e < this.rowNum; e++) this.heightArray[e] = Math.max.apply(null, this.heightArray[e]) this.setHeightLayout() } setHeightLayout() { for (var e = 0, t = this.objChild.length; e < t; e++) { var i = parseInt(e / this.breakOpts.column, 10) ;(null == this.opts.pushElement ? this.objChild.eq(e).not(this.opts.notCompareElement) : this.objChild .eq(e) .not(this.opts.notCompareElement) .find(this.opts.pushElement) ).height(this.heightArray[i]) } } destroy() { this.opts.useDestroyHeight && null !== this.opts.pushObjs && this.opts.pushObjs.css("height", ""), (this.opts.destroyType = !0), this.bindEvents(!1) } reInit() { this.setElements(), this.setOpts(), this.setRows(), this.buildHeightControl(), this.onResizeHandler(), this.opts.destroyType && ((this.opts.destroyType = !1), this.bindEvents(!0)) } outCallback(e) { e = this.opts[e] null != e && e() } } })(), (function (e) { e.HiveLayer = (function () { "use strict" var e, t = window, a = t.jQuery, i = t.document, s = t.WATCH6.UTILS, l = [] function n(e, t) { if (!(this instanceof n)) return new n(e, t) var i = { effect: "fade", layerWrapElements: e, layerBody: ".cm-layer__body", layerElements: ".cm-layer__wrapper", openerElements: ".js-layer-opener", closerElements: ".js-layer-closer", dimmedElements: ".cm-layer__dimmed", classAttr: { htmlToggle: "is-layer-open", isAsync: "is-async" }, customEvent: ".HiveLayer" + new Date().getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, customToggle: false, dimmedDuration: 250, fps: 120, easing: "swing", duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null, }, ariaNotHidden: [], } if (!(this.layerWrap = i.layerWrapElements).length) return this.layerWrap = a(i.layerWrapElements) this.opts = s.def(i, t || {}) this.init() } return ( (n.prototype = { init: function () { this.initOpts() this.setElements() this.buildTween() this.buildTrapFocus() this.bindEvents(true) this.layerWrap.data("HiveLayer", this) }, initOpts: function () { this.layerWrapInstance = "#" + this.layerWrap.attr("id") }, 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) }, buildTween: function () { s.def(this, { tweens: { instance: [], kill: a.proxy(function () { for ( var e = 0, t = this.tweens.instance.length; e < t; e++ ) this.tweens.instance[e].kill() this.tweens.instance = [] }, this), }, }) }, buildTrapFocus: function () { if (!this.opts.useTrapFocus) return s.def(this, { trapfocus: { instance: null, destroy: a.proxy(function () { if (this.trapfocus.instance == null) return this.trapfocus.instance.destroy() this.trapfocus.instance = null }, this), build: a.proxy(function () { if (this.trapfocus.instance !== null) return this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden, }) }, this), }, }) }, bindEvents: function (e) { if (e) { a(i).on( "click clickCustom", this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', a.proxy(this.onLayerOpen, this) ) this.layerWrap.on( "openLayer", a.proxy(this.onLayerOpen, this) ) this.closerObj.on( "mousedown click clickCustom", a.proxy(this.onLayerClose, this) ) this.layerWrap.on( "layerSetOptions", a.proxy(this.setOptions, this) ) if (this.opts.useEscape) this.layerObj.on( "keydown", a.proxy(this.onEscapeClose, this) ) } else { a(i).off("click clickCustom") this.layerWrap.off("openLayer") this.closerObj.off("mousedown click clickCustom") this.layerWrap.off("layerSetOptions") if (this.opts.useEscape) this.layerObj.off("keydown") } }, bindOutsideEvents: function (e) { if (!this.opts.useOutside) return if (e) this.layerObj.on( "clickoutside touchendoutside", a.proxy(this.onLayerOutsideFunc, this) ) else this.layerObj.off("clickoutside touchendoutside") }, bindCloseEvents: function (e) { if (e) this.layerWrap.on( "closeLayer", a.proxy(this.closeLayer, this) ) else this.layerWrap.off("closeLayer") }, setOptions: function (e, t) { s.def(this.opts, t || {}) if (t.customToggle) this.opts.effect = "default" }, setScrollLock: function (e) { if (!this.opts.useScrollLock) return if (e) s.page.scrollLock.on() else s.page.scrollLock.off() a("html").toggleClass(this.opts.classAttr.htmlToggle, e) }, onLayerOpen: function (e) { e.preventDefault() setTimeout(() => { this.dimmedObj.on( "mousedown click clickCustom", a.proxy(this.onLayerClose, this) ) }, 500) if (e.type === "click" || e.type === "clickCustom") this.opts.openerTarget = a(e.currentTarget) if (e.type === "click") if ( this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync) ) return this.layerViewType = "open" l.push({ POPUPWRAP: this.layerWrap }) if (document.querySelector("html.load div#header")) { document.querySelector( "html.load div#header" ).style.opacity = 0 document.querySelector( "html.load div#header" ).style.pointerEvents = "none" } this.setScrollLock(true) this.bindCloseEvents(true) if (this.opts.effect === "default") if (!this.opts.customToggle) { this.layerWrap.css({ opacity: 0, display: "block" }) this.outCallback("layerOpenBefore") this.outCallback("buildTools") this.layerWrap.css("opacity", "") this.openAfterBugFunc() } else this.outCallback("layerOpenBefore") else if (this.opts.effect === "fade") { this.layerWrap.css({ opacity: 0, display: "block" }) this.outCallback("layerOpenBefore") TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: "hidden", }) this.outCallback("buildTools") var t = TweenLite.to( this.layerWrap, this.opts.duration / 1e3, { opacity: 1, onComplete: a.proxy(function () { var e = TweenLite.to(this.layerBody, 0.25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: a.proxy(function () { this.layerBody.css({ overflow: "", transform: "" }) this.openAfterBugFunc() }, this), }) this.tweens.instance.push(e) }, this), } ) this.tweens.instance.push(t) } this.ariaAccessbility(true, this.layerWrap) }, initStep: function (e) { this.opts.stepTimeOld = new Date() this.direction = e.startDistance > e.moveDistance ? "toNext" : "toPrev" this.condition = this.direction === "toNext" ? e.currentStep > e.moveDistance : e.currentStep < e.moveDistance }, moveStep: function (e) { this.opts.stepTimeNew = new Date() this.opts.remaining = Math.max( 0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration ) var t = this.opts.remaining / this.opts.duration || 0, i = 1 - t, s = a.easing[this.opts.easing]( i, this.opts.duration * i, 0, 1, this.opts.duration ) e.currentStep = (e.endDistance - e.startDistance) * s }, onLayerOpenAfter: function () { if (this.trapfocus) this.trapfocus.build() this.bindOutsideEvents(true) this.outCallback("layerOpenAfter") }, openAfterBugFunc: function () { t.clearTimeout(this.openAfterTimeout) this.openAfterTimeout = t.setTimeout( a.proxy(this.onLayerOpenAfter, this), 30 ) }, onLayerClose: function (e) { var t = a(e.currentTarget) if (e.type === "mousedown") { if (!s.isDevice) { e.stopPropagation() this.opts.useCloseFocus = false } } else if (e.type === "click" || e.type === "clickCustom") { e.preventDefault() if (e.type === "click") if (t.hasClass(this.opts.classAttr.isAsync)) return this.layerWrap.trigger("closeLayer") this.dimmedObj.off("mousedown click clickCustom") } }, closeLayer: function () { this.closeType = arguments[1] this.layerViewType = "close" this.outCallback("layerCloseBefore") this.popupOpenPropsControl() this.setScrollLock(false) if (this.trapfocus) this.trapfocus.destroy() if (document.querySelector("html.load div#header")) { document.querySelector( "html.load div#header" ).style.opacity = 1 document.querySelector( "html.load div#header" ).style.pointerEvents = "unset" } this.ariaAccessbility(false, this.layerWrap) t.clearTimeout(this.closeBeforeTimeout) this.closeBeforeTimeout = t.setTimeout( a.proxy(this.closeBeforeBugFunc, this), 30 ) this.bindOutsideEvents(false) }, onEscapeClose: function (e) { var t = e.which || e.keyCode if (t !== 27) return this.layerWrap.trigger("closeLayer") }, onLayerOutsideFunc: function () { this.layerWrap.trigger("closeLayer") }, closeBeforeBugFunc: function () { if (this.opts.effect === "default") { if (!this.opts.customToggle) this.layerWrap.stop(true, true).hide() this.closeAfterBugFunc() } else if (this.opts.effect === "fade") { var e = TweenLite.to( this.layerBody, this.opts.duration / 1e3, { overflow: "hidden", opacity: 0, scale: 1, onComplete: a.proxy(function () { this.layerBody.css("overflow", "") var e = TweenLite.to( this.layerWrap, this.opts.duration / 1e3, { opacity: 0, display: "none", onComplete: a.proxy(this.closeAfterBugFunc, this), } ) this.tweens.instance.push(e) }, this), } ) this.tweens.instance.push(e) } }, closeAfterBugFunc: function () { t.clearTimeout(this.closeAfterTimeout) this.closeAfterTimeout = t.setTimeout( a.proxy(this.onLayerCloseAfter, this), 30 ) }, popupOpenPropsControl: function () { var e = l for (var t = 0, i = e.length; t < i; t++) { var s = e[t], a = s["POPUPWRAP"][0] if (a === this.layerWrap[0]) e[t] = null } for (var n = 0, r = e.length; n < r; r--) { var o = e[r - 1] if (o === null) e.splice(r - 1, 1) } }, onLayerCloseAfter: function () { if (this.opts.openerTarget !== null) { if (this.closeType !== false) this.opts.openerTarget.focus() this.opts.openerTarget = null } this.opts.useCloseFocus = true this.bindCloseEvents(false) this.outCallback("layerCloseAfter") }, ariaAccessbility: function (e, t) {}, outCallback: function (e) { var t = this.opts.on[e] if (e === "layerMove") this.layerWrap.trigger(e, arguments[1], arguments[2], this) else this.layerWrap.trigger(e, this) if (t == null) return if (e === "layerMove") t(arguments[1], arguments[2], this) else t(this) }, styleDestroy: function () { this.dimmedObj.attr("style", "") this.layerWrap.attr("style", "") this.layerBody.attr("style", "") this.layerObj.attr("style", "") }, destroy: function () { this.tweens.kill() if (this.trapfocus) this.trapfocus.destroy() this.styleDestroy() this.bindEvents(false) this.bindOutsideEvents(false) this.bindCloseEvents(false) }, }), n ) })() })(window), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const o = WATCH6.UTILS o.RESPONSIVE WATCH6.SubNav = class { constructor(e = container, t) { var i = { navItems: "ul li>a", navDests: '[class*="js-nav-"]', visSections: ".js-visible", resizeStart: null, classes: { isOn: "on" }, } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { ;(this.navItems = o.convertArray( this.el.querySelectorAll(this.opts.navItems) )), (this.navDests = document.querySelectorAll(this.opts.navDests)), (this.visSections = o.convertArray( document.querySelectorAll(this.opts.visSections) )) } initOpts() { ;(this.visCount = -1), this.visSections.forEach((e) => { e.dataset.visIndex = e.classList.contains("js-count") ? ++this.visCount : this.visCount }), (this.winOffsetTop = window.pageYOffset) } bindEvents() { this.onScrollHandler(), window.addEventListener( "resize", this.onResizeHandler.bind(this) ), window.addEventListener("scroll", this.onScrollHandler.bind(this)) const i = window.location.hash this.navItems.forEach((e, t) => { ;-1 < e.getAttribute("href").indexOf("#") && ((e.dataset.navIndex = t), e.addEventListener( "click", this.onNavItemClickEvent.bind(this) )), i && -1 < e.getAttribute("href").indexOf(i) && (e.parentNode.classList.remove(this.classes.isOn), e.click()) }) } onNavItemClickEvent(t) { t.preventDefault() t = t.target const i = t.parentNode if ( !this.el.classList.contains("hold") && !i.classList.contains(this.classes.isOn) ) { this.navItems.forEach((e) => { e.parentNode.classList.remove(this.classes.isOn) }), i.classList.contains(this.classes.isOn) || i.classList.add(this.classes.isOn) var s = t.dataset.navIndex let e = 0 if ("nav" === t.dataset.type) { const r = this.navDests[s] var t = r.getBoundingClientRect(), a = parseInt(window.getComputedStyle(r).paddingTop), n = (window.innerHeight - (t.height - a) + o.getNavHeight()) / 2 ;(e = r.classList.contains("js-nav-center") ? this.winOffsetTop + t.top + a - n : this.winOffsetTop + t.top - o.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() }) } else { a = this.visSections[s].dataset.rectTop ;(e = a) < 150 && (e = 0), 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 + o.getNavHeight()) / 2 this.visSections.forEach((e) => { var i, t, s = e.getBoundingClientRect(), s = e.dataset.rectTop && e.dataset.rectBottom ? ((t = JSON.parse(e.dataset.rectTop)), JSON.parse(e.dataset.rectBottom)) : ((t = this.winOffsetTop + s.top), this.winOffsetTop + s.bottom) this.winOffsetTop + a >= t && this.winOffsetTop + a <= s && ((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) }), (t = this.navItems[i].parentNode).classList.contains( this.classes.isOn ) || (t.classList.add(this.classes.isOn), !this.el.classList.contains("hold") && t.classList.contains(this.classes.isOn) && GALAXY.header && GALAXY.header.resetSubNav())) }) } onResizeHandler() { o.winSize().w !== this.winWidth && ((this.winWidth = o.winSize().w), null == this.opts.resizeStart && ((this.opts.resizeStart = this.winWidth), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 ))) } resizeAnimateFunc() { this.onScrollHandler(), (this.resizeRequestFrame = o.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), o.cancelAFrame.call(window, this.resizeRequestFrame) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const e = WATCH6.UTILS, t = e.RESPONSIVE WATCH6.Battery = class { constructor(e = container, t) { var i = { el: e, popupEl: ".wearable-watch-battery-processor__popup", processorLayerEl: ".wearable-watch-battery-processor__popup.processor-popup", batteryLayerEl: ".wearable-watch-battery-processor__popup.battery-popup", videoElement: ".video__container", featureHide: "is-feature-hide", resizeStart: null, } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer(), this.buildLayer(), this.bindEvents()) } setElements() { ;(this.processorLayerEl = this.el.querySelector( this.opts.processorLayerEl )), (this.batteryLayerEl = this.el.querySelector( this.opts.batteryLayerEl )), (this.videoElement = this.el.querySelectorAll( this.opts.videoElement )), (this.processorVideoElement = this.processorLayerEl.querySelector( this.opts.videoElement )), (this.batteryVideoElement = this.batteryLayerEl.querySelector( this.opts.videoElement )) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)) } onResizeHandler() { e.winSize().w !== this.winWidth && ((this.winWidth = e.winSize().w), null == this.opts.resizeStart && ((this.opts.resizeStart = this.winWidth), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 ))) } resizeAnimateFunc() { this.setLayout(), (this.resizeRequestFrame = e.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), e.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { "block" === this.processorLayerEl.style.display && this.videoPlayer.change(this.processorVideoElement), "block" === this.batteryLayerEl.style.display && this.videoPlayer.change(this.batteryVideoElement) } setLayout() { this.winWidth >= t.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > t.MOBILE.WIDTH && this.winWidth < t.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), (this.prevDevice = this.currentDevice) } buildVideoPlayer() { ;(this.videoPlayer = { instance: [], load: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onLoad(t) }) }, reset: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onReset(t) }) }, play: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onPlay(t) }) }, change: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onChange(t) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((e, t) => { this.videoPlayer.instance.push( new WATCH6.VideoPlayer(e, { sectionElement: this.opts.el, videoParentElement: this.opts.popupEl, }) ) }) }, }), this.videoPlayer.build() } buildLayer() { ;(this.layer = { instance: [], build: () => { this.layer.instance.length || (this.layer.instance.push( new HiveLayer(this.opts.processorLayerEl, { effect: "default", on: { layerOpenBefore: () => { this.processorVideoElement && this.videoPlayer.load(this.processorVideoElement) }, layerCloseAfter: () => { this.videoPlayer.reset(this.processorVideoElement) }, }, }) ), this.layer.instance.push( new HiveLayer(this.opts.batteryLayerEl, { effect: "default", on: { layerOpenBefore: () => { this.batteryVideoElement && this.videoPlayer.load(this.batteryVideoElement) }, layerCloseAfter: () => { this.videoPlayer.reset(this.batteryVideoElement) }, }, }) )) }, }), this.layer.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const o = WATCH6.UTILS, e = o.RESPONSIVE WATCH6.Compare = class { constructor(e = container, t) { var i = { el: e, trackElement: ".wearable-watch-compare__track", fixedElement: ".wearable-watch-compare__fixed", compareWrapEl: ".wearable-watch-compare__list-wrap", compareListEl: ".wearable-watch-compare__list", compareItemEl: ".wearable-watch-compare__list-item", compareImgEl: ".wearable-watch-compare__product-img", compareInfo: ".wearable-watch-compare__info", compareInfoItem: ".wearable-watch-compare__info-item", navigationEl: ".wearable-watch-compare__navigation", colorChipEl: ".wearable-watch-compare__color-chip", colorList: ".wearable-watch-compare__color", tabPanel: ".wearable-watch-compare__product", tabPanels: ".wearable-watch-compare__product-item", scrollbarEl: ".swiper-scrollbar", viewMoreCta: ".view-more__cta", featureHide: "is-feature-hide", viewmore: ".viewmore", collapse: ".collapse", matchElements: [ ".wearable-watch-compare__info-item--display", ".wearable-watch-compare__info-item--screen", ".wearable-watch-compare__info-item--charge", ".wearable-watch-compare__info-item--sensor", ".wearable-watch-compare__info-item--material", ".wearable-watch-compare__info-item--battery", ".wearable-watch-compare__info-item--sleep", ".wearable-watch-compare__info-item--cycle", ".wearable-watch-compare__info-item--composition", ".wearable-watch-compare__info-item--route", ".wearable-watch-compare__info-item--durability", ".wearable-watch-compare__info-item--size", ".wearable-watch-compare__info-item--weight", ".wearable-watch-compare__cta", ".wearable-watch-compare__size", ".wearable-watch-compare__color", ".wearable-watch-common__sub-headline", ], matchCommonOpts: { childElement: ".wearable-watch-compare__list-item", useDestroyHeight: !1, breakpoints: {}, }, classes: { isFixed: "is-fixed", isCollapse: "is-collapse", isExpanded: "is-expanded", }, resizeStart: null, on: { updateImageLoader: null }, } ;(this.opts = o.def(i, t || {})), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.bindEvents(), this.buildHeightMatch(), this.buildSwiper(), this.buildCompareItem(), this.onResizeHandler()) } initOpts() { this.getCurrentDevice(), (this.scroller = null), (this.prevDevice = null), (this.expanded = !1), (this.scrollMoveState = !1), (this.firstImageLoad = !1), (this.viewMoreCtaTagging = this.viewMoreCta.getAttribute("data-omni")), (this.viewMoreTagging = this.viewMoreCta .querySelector(this.opts.viewmore) .getAttribute("data-tagging")), (this.collapseTagging = this.viewMoreCta .querySelector(this.opts.collapse) .getAttribute("data-tagging")) } initLayout() { this.updateViewMoreHeight() } setElements() { ;(this.trackElement = this.el.querySelector( this.opts.trackElement )), (this.fixedElement = this.el.querySelector( this.opts.fixedElement )), (this.compareWrapEl = this.el.querySelector( this.opts.compareWrapEl )), (this.compareListEl = this.compareWrapEl.querySelector( this.opts.compareListEl )), (this.contentsEl = this.el.querySelectorAll( this.opts.colorChipEl )), (this.compareItemEl = this.compareWrapEl.querySelectorAll( this.opts.compareItemEl )), (this.compareInfo = this.el.querySelectorAll( this.opts.compareInfo )), (this.viewMoreCta = this.el.querySelector(this.opts.viewMoreCta)), (this.navigationEl = this.el.querySelector( this.opts.navigationEl )), (this.scrollbarEl = this.el.querySelector(this.opts.scrollbarEl)) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener( "resize", this.onResizeHandler.bind(this) ), window.addEventListener( "scroll", this.onScrollHandler.bind(this) ), this.viewMoreCta.addEventListener( "click", this.onClickViewMoreCta.bind(this) ) } getCurrentDevice() { ;(this.winWidth = o.winSize().w), this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), (this.prevDevice = this.currentDevice) } updateViewMoreHeight() { this.expanded ? (this.viewMoreCta.classList.add(this.classes.isCollapse), this.el.classList.add(this.classes.isExpanded), this.viewMoreCta.setAttribute( "data-omni", this.viewMoreCtaTagging + this.collapseTagging ), this.viewMoreCta.setAttribute( "ga-la", this.viewMoreCtaTagging + this.collapseTagging ), this.heightMatch.reInit()) : (this.viewMoreCta.classList.remove(this.classes.isCollapse), this.el.classList.remove(this.classes.isExpanded), this.viewMoreCta.setAttribute( "data-omni", this.viewMoreCtaTagging + this.viewMoreTagging ), this.viewMoreCta.setAttribute( "ga-la", this.viewMoreCtaTagging + this.viewMoreTagging )) } updateImageLoader(e) { this.outCallback("updateImageLoader", e), (this.firstImageLoad = !0) } buildHeightMatch() { ;(this.heightMatch = { instance: [], reInit: () => { this.heightMatch.instance.length && this.heightMatch.instance.forEach((e) => { e.reInit() }) }, initLayout: () => { for ( let e = 0, t = this.opts.matchElements.length; e < t; e++ ) { const s = this.opts.matchElements[e] var i = "js-" + s.split(".")[1] for (let e = 0, t = this.compareItemEl.length; e < t; e++) { const a = this.compareItemEl[e] if (null === a.querySelector("." + i)) { const n = document.createElement("div"), r = a.querySelector(s) ;(n.innerHTML = r.innerHTML), n.classList.add(i), (r.innerHTML = ""), r.appendChild(n) } } } }, build: () => { this.heightMatch.initLayout() var e = { column: this.compareItemEl.length } o.def(this.opts.matchCommonOpts, e) for ( let e = 0, t = this.opts.matchElements.length; e < t; e++ ) { const a = this.opts.matchElements[e] var i = { pushElement: "." + a.split(".")[1], childElement: this.opts.compareItemEl, matchElement: ".js-" + a.split(".")[1], }, s = JSON.parse(JSON.stringify(this.opts.matchCommonOpts)) o.def(s, i), this.heightMatch.instance.push( new WATCH6.HeightMatch(this.opts.compareWrapEl, s) ) } }, }), this.heightMatch.build() } buildCompareItem() { ;(this.compareItem = { instance: [], build: () => { this.compareItem.instance.length || this.compareItemEl.forEach((e) => { this.compareItem.instance.push( new WATCH6.CompareItem(e, { on: { updateImageLoader: (e) => {} }, }) ) }) }, }), this.compareItem.build() } buildSwiper() { ;(this.swiper = { instance: null, options: { freeMode: !0, slidesPerView: "auto", direction: "horizontal", a11y: !1, scrollbar: { el: this.opts.scrollbarEl }, }, destroy: () => { null !== this.swiper.instance && (this.swiper.instance.destroy(), (this.swiper.instance = null)) }, updateTranslate: (e) => { null !== this.swiper.instance && this.swiper.instance.setTranslate(-e) }, updateLayout: () => { null !== this.swiper.instance && ((this.swiperWidth = this.compareWrapEl.getBoundingClientRect().width), (this.swiperListWidth = this.swiper.instance.virtualSize)) }, build: () => { this.winWidth < 1024 ? null === this.swiper.instance && ((this.swiper.instance = new Swiper( this.compareWrapEl, this.swiper.options )), this.swiper.updateLayout()) : this.swiper.destroy() }, }), this.swiper.build() } onClickViewMoreCta(e) { e.preventDefault(), (this.expanded = !this.expanded), this.updateViewMoreHeight() } onLoadHandler() { this.heightMatch.reInit(), this.onResponsiveChange(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { this.scrollY = window.scrollY this.scrollY, this.lastScrollY var e = window.innerHeight, t = o.getScroll().top - e, i = o.getScroll().bottom, s = o.getOffset(this.el), a = this.swiperWidth, n = (o.getHeight(this.compareWrapEl), o.getOffset(this.compareWrapEl)), r = this.swiperListWidth Math.ceil(r - a), o.getOffset(this.trackElement).top, Math.abs(this.trackElement.clientHeight) o.getNavHeight() if ( (i > s.top && t <= s.top) || (t < s.bottom && i > s.bottom) || (t < s.top && i > s.bottom) || (t > s.top && i < s.bottom) ) { if (this.firstImageLoad) return r = this.el.querySelectorAll(".js-start-img-src") this.updateImageLoader(r) } o.getScroll().top + o.getNavHeight() >= n.top && i <= n.bottom ? this.el.classList.contains(this.classes.isFixed) || this.el.classList.add(this.classes.isFixed) : this.el.classList.contains(this.classes.isFixed) && this.el.classList.remove(this.classes.isFixed), (this.lastScrollY = scrollY) } onResizeHandler() { o.winSize().w !== this.winWidth && ((this.winWidth = o.winSize().w), null == this.opts.resizeStart && ((this.opts.resizeStart = this.winWidth), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 ))) } resizeAnimateFunc() { this.setLayout(), this.updateViewMoreHeight(), this.swiper.build(), (this.resizeRequestFrame = o.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), this.updateViewMoreHeight(), this.swiper.build(), o.cancelAFrame.call(window, this.resizeRequestFrame) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), (this.prevDevice = this.currentDevice) } onResponsiveChange() {} outCallback(e, t) { e = this.opts.on[e] null != e && e(t) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.UTILS.RESPONSIVE WATCH6.CompareItem = class { constructor(e = container, t) { var i = { el: e, productEl: ".wearable-watch-compare__product", productItem: ".wearable-watch-compare__product-item", productImage: ".wearable-watch-compare__product-image", sizeEl: ".wearable-watch-compare__size", sizeCta: ".wearable-watch-compare__size-cta", colorEl: ".wearable-watch-compare__color", colorItem: ".wearable-watch-compare__color-item", colorChip: ".wearable-watch-compare__color-chip", buyNowCta: ".buy__cta", learnMoreCta: ".learn-more__cta", classes: { isActive: "is-active" }, resizeStart: null, } ;(this.opts = i), (this.classes = i.classes), (this.el = e), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.initLayout(), this.bindEvnts()) } initOpts() { ;(this.currentProduct = this.el.dataset.modelName), (this.currentSize = this.el.dataset.defaultSize), (this.currentColor = {}), this.colorItem.forEach((e) => { let t = e.querySelector("." + this.classes.isActive) ;(t = t || e.querySelectorAll(this.opts.colorChip)[0]), (this.currentColor[t.dataset.size] = t.dataset.color) }), (this.DATA = LOCAL_DATA[this.currentProduct]) } initLayout() { this.updateSizeLayout(), this.updateColorItemlayout(), this.updateColorChip(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } setElements() { ;(this.productEl = this.el.querySelector(this.opts.productEl)), (this.productItem = this.productEl.querySelectorAll( this.opts.productItem )), (this.sizeEl = this.el.querySelector(this.opts.sizeEl)), (this.sizeCta = this.sizeEl.querySelectorAll(this.opts.sizeCta)), (this.colorEl = this.el.querySelector(this.opts.colorEl)), (this.colorItem = this.colorEl.querySelectorAll( this.opts.colorItem )), (this.colorChip = this.colorEl.querySelectorAll( this.opts.colorChip )), (this.buyNowCta = this.el.querySelector(this.opts.buyNowCta)), (this.learnMoreCta = this.el.querySelector( this.opts.learnMoreCta )) } bindEvnts() { this.sizeCta.forEach((e) => { e.addEventListener("click", this.handlerClickSizeCta.bind(this)) }), this.colorChip.forEach((e) => { e.addEventListener( "click", this.handlerClickColorChip.bind(this) ) }) } handlerClickColorChip(e) { e = e.currentTarget ;(this.currentColor[this.currentSize] = e.dataset.color), this.updateColorChip(), this.updateProductImage(), this.updateLink() } handlerClickSizeCta(e) { e = e.currentTarget ;(this.currentSize = e.dataset.size), this.updateSizeLayout(), this.updateColorItemlayout(), this.updateProductItemLayout(), this.updateProductImage(), this.updateLink() } updateLink() { var e = this.currentSize, t = this.currentColor[e], e = this.DATA[e][t] this.buyNowCta.setAttribute("href", e.buynow), this.learnMoreCta.setAttribute("href", e.learnmore) } updateSizeLayout() { this.sizeCta.forEach((e) => { this.currentSize === e.dataset.size ? e.classList.add(this.classes.isActive) : e.classList.remove(this.classes.isActive) }) } updateColorItemlayout() { this.currentColorItem = Array.from(this.colorItem).filter((e) => { if (this.currentSize === e.dataset.size) return e.classList.add(this.classes.isActive), e e.classList.remove(this.classes.isActive) })[0] } updateColorChip() { const e = this.currentColorItem.querySelectorAll( this.opts.colorChip ) e.forEach((e) => { this.currentColor[this.currentSize] === e.dataset.color ? e.classList.add(this.classes.isActive) : e.classList.remove(this.classes.isActive) }) } updateProductItemLayout() { this.currentProductItem = Array.from(this.productItem).filter( (e) => { if (this.currentSize === e.dataset.size) return e.classList.add(this.classes.isActive), e e.classList.remove(this.classes.isActive) } )[0] } updateProductImage() { const e = this.currentProductItem.querySelectorAll( this.opts.productImage ) e.forEach((e) => { this.currentColor[this.currentSize] === e.dataset.color ? e.classList.add(this.classes.isActive) : e.classList.remove(this.classes.isActive) }) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const t = WATCH6.UTILS t.RESPONSIVE WATCH6.Contrast = class { constructor(e = container, t) { var i = { el: e, defaultBtn: ".type-default", contrastBtn: ".type-contrast", cookieName: "highContrastMode", featureHide: "is-feature-hide", } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.bindEvents()) } setElements() { ;(this.defaultBtn = this.el.querySelector(this.opts.defaultBtn)), (this.defaultBtnTitle = this.defaultBtn .getAttribute("title") .trim()), (this.contrastBtn = this.el.querySelector(this.opts.contrastBtn)), (this.contrastBtnTitle = this.contrastBtn .getAttribute("title") .trim()), (this.cookieName = this.opts.cookieName) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), this.defaultBtn && this.defaultBtn.addEventListener( "click", this.onClickDefaultBtn.bind(this) ), this.contrastBtn && this.contrastBtn.addEventListener( "click", this.onClickContrastBtn.bind(this) ) } onLoadHandler() { this.activeContrast() } onClickDefaultBtn(e) { e.preventDefault(), t.setCookie(this.cookieName, "0", 1), this.activeContrast() } onClickContrastBtn(e) { e.preventDefault(), t.setCookie(this.cookieName, "1", 1), this.activeContrast() } activeContrast() { var e = t.getCookie(this.cookieName) null != e && e.length && "1" == e ? (document.documentElement.classList.add("color_yb"), this.contrastBtn.setAttribute( "title", this.contrastBtnTitle + " selected" ), this.defaultBtn.setAttribute("title", this.defaultBtnTitle)) : (document.documentElement.classList.remove("color_yb"), this.contrastBtn.setAttribute("title", this.contrastBtnTitle), this.defaultBtn.setAttribute( "title", this.defaultBtnTitle + " selected" )) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.UTILS.RESPONSIVE WATCH6.Fitness = class { constructor(e = container, t) { ;(this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide", }), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { ;(this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer( this.videoElement, { sectionElement: this.opts.el } )) }, }), this.videoPlayer.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.UTILS.RESPONSIVE WATCH6.Hands = class { constructor(e = container, t) { ;(this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide", }), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { ;(this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer( this.videoElement, { sectionElement: this.opts.el } )) }, }), this.videoPlayer.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.UTILS.RESPONSIVE WATCH6.HR = class { constructor(e = container, t) { ;(this.opts = { el: e, videoElement: ".video__container" }), (this.el = document.querySelector(e)), this.init() } init() { null !== this.el && (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { ;(this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer( this.videoElement, { sectionElement: this.opts.el } )) }, }), this.videoPlayer.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.KeyVisual = class { constructor(e = container, t) { var i = { el: e, classes: { isUseBuy: "is-use-buy", isUseRegist: "is-use-regist", isUseOrder: "is-use-order", isUseWhere: "is-use-where", isUseOff: "is-use-off", }, featureHide: "is-feature-hide", } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || this.initLayout() } initLayout() { this.el.classList.remove(this.classes.isUseBuy), this.el.classList.remove(this.classes.isUseRegist), this.el.classList.remove(this.classes.isUseOrder), this.el.classList.remove(this.classes.isUseWhere), this.el.classList.remove(this.classes.isUseOff), "undefined" == typeof __WATCH_USE_KV_CTA || null == __WATCH_USE_KV_CTA || null == __WATCH_USE_KV_CTA || "" == __WATCH_USE_KV_CTA || "buy-now" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseBuy) : "pre-order" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseOrder) : "pre-registration" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseRegist) : "where-to-buy" == __WATCH_USE_KV_CTA ? this.el.classList.add(this.classes.isUseWhere) : "where-to-buy" == __WATCH_USE_KV_CTA && this.el.classList.add(this.classes.isUseOff) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.UTILS.RESPONSIVE WATCH6.Monitoring = class { constructor(e = container, t) { ;(this.opts = { el: e, videoElement: ".video__container", featureHide: "is-feature-hide", }), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildVideoPlayer()) } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement) } buildVideoPlayer() { ;(this.videoPlayer = { instance: null, build: () => { null === this.videoPlayer.instance && (this.videoPlayer.instance = new WATCH6.VideoPlayer( this.videoElement, { sectionElement: this.opts.el } )) }, }), this.videoPlayer.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const n = WATCH6.UTILS, e = n.RESPONSIVE WATCH6.Overview = class { constructor(e = container, t) { var i = { el: e, layerEl: ".wearable-watch-overview__popup", featureList: ".wearable-watch-overview__list", featureItem: ".wearable-watch-overview__list-item", featureCta: ".wearable-watch-overview__list-cta", featureBtn: ".wearable-watch-overview__list-btn", featureContent: ".wearable-watch-overview__popup-content", featurePlayer: ".wearable-watch-overview__player", storyEl: ".wearable-watch-overview__story", storySlide: ".wearable-watch-overview__story-item", indicatorList: ".wearable-watch-overview__indicator-list", indicatorItem: ".wearable-watch-overview__indicator-item", indicatorText: ".indicator__text", controlHiddenEl: ".blind", navigationPrev: ".navigation__cta-prev", navigationNext: ".navigation__cta-next", storyItemController: ".story-item__btn", storyItem: ".story-item__image", storyItemCta: ".story-item__cta", closeBtn: ".cm-layer__btn-close", videoElement: ".video__container", startImage: ".video__start-frame", endImage: ".video__end-frame", featureHide: "is-feature-hide", initSlide: 0, infiniteRolling: !0, transitionDuration: 400, classes: { loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", isHover: "is-hover", isActive: "is-active", isPaused: "is-paused", }, thumbnailTagging: { "expansive-screen": { play: "gwatch6-classic:highlights:overview:movi-play:expansive-screen-video", pause: "gwatch6-classic:highlights:overview:movi-pause:expansive-screen-video", }, "rotating-bezel": { play: "gwatch6-classic:highlights:overview:movi-play:rotating-bezel-video", pause: "gwatch6-classic:highlights:overview:movi-pause:rotating-bezel-video", }, "sleep-tracking": { play: "gwatch6-classic:highlights:overview:movi-play:sleep-tracking-video", pause: "gwatch6-classic:highlights:overview:movi-pause:sleep-tracking-video", }, }, popupTagging: { "expansive-screen": { play: "gwatch6-classic:highlights:overview^lypu:movi-play:expansive-screen-video", pause: "gwatch6-classic:highlights:overview^lypu:movi-pause:expansive-screen-video", }, "rotating-bezel": { play: "gwatch6-classic:highlights:overview^lypu:movi-play:rotating-bezel-video", pause: "gwatch6-classic:highlights:overview^lypu:movi-pause:rotating-bezel-video", }, "sleep-tracking": { play: "gwatch6-classic:highlights:overview^lypu:movi-play:sleep-tracking-video", pause: "gwatch6-classic:highlights:overview^lypu:movi-pause:sleep-tracking-video", }, }, } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.initLayout(), this.buildSwiper(), this.buildLayer(), this.buildVideoPlayer(), this.bindEvents()) } initOpts() { ;(this.currentDevice = !1), (this.prevDevice = null), this.initValues() } initValues() { this.selectedIndex = -1 } initLayout() { this.storySlide.forEach((e, t) => { e.setAttribute("aria-hidden", "true"), e .querySelector(this.opts.storyItemCta) .setAttribute("aria-hidden", "true"), e .querySelector(this.opts.storyItemCta) .setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemController) && (e .querySelector(this.opts.storyItemController) .setAttribute("aria-hidden", "true"), e .querySelector(this.opts.storyItemController) .setAttribute("tabindex", "-1")), this.opts.initSlide === t && (e.setAttribute("aria-hidden", "false"), e .querySelector(this.opts.storyItemCta) .setAttribute("aria-hidden", "false"), e .querySelector(this.opts.storyItemCta) .removeAttribute("tabindex"), e.querySelector(this.opts.storyItemController) && (e .querySelector(this.opts.storyItemController) .setAttribute("aria-hidden", "false"), e .querySelector(this.opts.storyItemController) .removeAttribute("tabindex"))) }), this.indicatorItem.forEach((e) => { "tablist" === this.indicatorList.getAttribute("role") && e.setAttribute("aria-selected", "false") }), this.opts.infiniteRolling || (0 === this.opts.initSlide && (this.navigationPrev.style.display = "none"), this.opts.initSlide === this.storySlide.length - 1 && (this.navigationNext.style.display = "none")) } setElements() { ;(this.layerEl = this.el.querySelector(this.opts.layerEl)), (this.videoElement = this.el.querySelectorAll( this.opts.videoElement )), (this.featureList = this.el.querySelector(this.opts.featureList)), (this.featureContent = this.el.querySelector( this.opts.featureContent )), (this.featureCta = this.featureList.querySelectorAll( this.opts.featureCta )), (this.featureBtn = this.featureList.querySelectorAll( this.opts.featureBtn )), (this.featurePlayer = this.featureList.querySelectorAll( this.opts.videoElement )), (this.storyEl = this.el.querySelector(this.opts.storyEl)), (this.storyItem = this.el.querySelectorAll(this.opts.storyItem)), (this.storySlide = this.el.querySelectorAll( this.opts.storySlide )), (this.storyPlayer = this.storyEl.querySelectorAll( this.opts.videoElement )), (this.indicatorList = this.el.querySelector( this.opts.indicatorList )), (this.indicatorItem = this.indicatorList.querySelectorAll( this.opts.indicatorItem )), (this.navigationPrev = this.el.querySelector( this.opts.navigationPrev )), (this.navigationNext = this.el.querySelector( this.opts.navigationNext )), (this.closeBtn = this.el.querySelector(this.opts.closeBtn)), (this.storyItemController = this.storyEl.querySelectorAll( this.opts.storyItemController )) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.featureCta.forEach((e, t) => { e.addEventListener("click", this.handleLayerOpen.bind(this, t)) }), this.indicatorItem.forEach((e, t) => { e.addEventListener("click", this.select.bind(this, t)) }), this.navigationPrev.addEventListener( "click", this.handleNavigationPrev.bind(this) ), this.navigationNext.addEventListener( "click", this.handleNavigationNext.bind(this) ), this.storySlide.forEach((e, t) => { ;-1 < e .querySelector(this.opts.storyItemCta) .getAttribute("href") .indexOf("#") && e .querySelector(this.opts.storyItemCta) .addEventListener( "click", this.onStoryItemCtaClickEvent.bind(this) ) }) } unBindEvents() { this.indicatorItem.forEach((e, t) => { e.removeAllEventListeners("click") }), this.featureBtn.forEach((e) => { e.removeAllEventListeners("click") }), this.storyItemController.forEach((e) => { e.removeAllEventListeners("click") }) } onStoryItemCtaClickEvent(e) { e.preventDefault() const t = e.target var e = t.getAttribute("href"), i = Math.abs( JSON.parse( document.querySelector("body").style.top.split("px")[0] ) ) const s = document.querySelector(e) e = s.dataset.rectTop || n.getOffset(s).top - n.getNavHeight() + i $(this.layerEl).trigger("closeLayer", !1), $("html, body").animate({ scrollTop: e }, { duration: 1e3 }) const a = s.querySelector(".wearable-watch-common__headline") ? s.querySelector(".wearable-watch-common__headline") : s.querySelector(".wearable-watch-common__sub-headline") a.setAttribute("tabindex", "0"), a.focus(), a.addEventListener("focusout", () => { a.removeAttribute("tabindex") }) } handleNavigationPrev() { let e = this.storySwiper.instance.realIndex - 1 e < 0 && (e = this.storySlide.length - 1), this.storySwiper.instance.slideToLoop(e) } handleNavigationNext() { let e = this.storySwiper.instance.realIndex + 1 e >= this.storySlide.length && (e = 0), this.storySwiper.instance.slideToLoop(e) } handleLayerOpen(e, t) { t.preventDefault(), (this.opts.initSlide = e) } updateControlText(e, t) { const i = e.querySelector(this.opts.controlHiddenEl) e = t ? this.globalText.play : this.globalText.stop i.innerHTML = e } select(e, t = !1, i) { var s = this.selectedIndex ;(s === e && !t) || (this.animReqId && (n.cancelAFrame.call(window, this.animReqId), (this.animReqId = null)), -1 < s && (this.indicatorItem[s].classList.contains( this.classes.isActive ) && (this.indicatorItem[s].classList.remove( this.classes.isActive ), this.indicatorItem[s].removeAttribute("title")), "tablist" === this.role ? this.indicatorItem[s].setAttribute("aria-selected", "false") : this.indicatorItem[s].removeAttribute("title")), e < 0 ? (this.selectedIndex = e) : ((this.selectedIndex = e), this.indicatorItem[this.selectedIndex].classList.contains( this.classes.isActive ) || this.indicatorItem[this.selectedIndex].classList.add( this.classes.isActive ), "tablist" === this.indicatorList.getAttribute("role") ? this.indicatorItem[this.selectedIndex].setAttribute( "aria-selected", "true" ) : this.indicatorItem[this.selectedIndex].setAttribute( "title", "selected" ), this.storySwiper.instance.slideToLoop(this.selectedIndex))) } onResizeHandler() { n.winSize().w !== this.winWidth && ((this.winWidth = n.winSize().w), null == this.opts.resizeStart && ((this.opts.resizeStart = this.winWidth), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 ))) } resizeAnimateFunc() { this.setLayout(), (this.resizeRequestFrame = n.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), n.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.select(this.selectedIndex, !0), this.featurePlayer.forEach((e) => { this.videoPlayer.change(e) }), "block" === this.layerEl.style.display && this.storyPlayer.forEach((e) => { this.videoPlayer.change(e) }) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), (this.prevDevice = this.currentDevice) } buildVideoPlayer() { ;(this.videoPlayer = { instance: [], load: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onLoad(t) }) }, reset: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onReset(t) }) }, play: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onPlay(t) }) }, change: (t) => { this.videoPlayer.instance.length && this.videoPlayer.instance.forEach((e) => { e.onChange(t) }) }, build: () => { this.videoPlayer.instance.length || this.videoElement.forEach((e, t) => { var i = e.closest(this.opts.featureItem) ? this.opts.featureItem : null this.videoPlayer.instance.push( new WATCH6.VideoPlayer(e, { sectionElement: this.opts.el, videoParentElement: i, on: { updateController: (e) => { const t = e.el var i = t.dataset.tagging, e = e.playState ? "pause" : "play", s = t.classList.contains( this.opts.featureBtn.split(".")[1] ) ? this.opts.thumbnailTagging : t.classList.contains( this.opts.storyItemController.split(".")[1] ) ? this.opts.popupTagging : "" t.setAttribute("data-omni", s[i][e]), t.setAttribute("ga-la", s[i][e]) }, }, }) ) }) }, }), this.videoPlayer.build() } buildSwiper() { this.storySwiper = { instance: null, options: { a11y: !1, loop: this.opts.infiniteRolling, speed: this.opts.transitionDuration, effect: "fade", touchMoveStopPropagation: !0, fadeEffect: { crossFade: !0 }, initialSlide: this.opts.initSlide, }, slideChange: () => { const i = this.storySwiper.instance.realIndex, e = this.storySlide[i], t = e.querySelector(this.opts.videoElement) this.select(i), t && (t.classList.contains(this.classes.loaded) ? n.isLowNetwork() || this.videoPlayer.play(t) : this.videoPlayer.load(t)), this.storySlide.forEach((e, t) => { t !== i && (t = e.querySelector(this.opts.videoElement)) && this.videoPlayer.reset(t) }) }, slideChangeTransitionStart: () => { if (null !== this.storySwiper.instance) { const t = Array.from(this.storySwiper.instance.slides) var e = this.storySwiper.instance.realIndex this.storySlide[e] t.forEach((e, t) => { e.setAttribute("aria-hidden", "true"), e .querySelector(this.opts.storyItemCta) .setAttribute("aria-hidden", "true"), e .querySelector(this.opts.storyItemCta) .setAttribute("tabindex", "-1"), e.querySelector(this.opts.storyItemController) && (e .querySelector(this.opts.storyItemController) .setAttribute("aria-hidden", "true"), e .querySelector(this.opts.storyItemController) .setAttribute("tabindex", "-1")), e.classList.contains("swiper-slide-active") && (e.setAttribute("aria-hidden", "false"), e .querySelector(this.opts.storyItemCta) .setAttribute("aria-hidden", "false"), e .querySelector(this.opts.storyItemCta) .removeAttribute("tabindex"), e.querySelector(this.opts.storyItemController) && (e .querySelector(this.opts.storyItemController) .setAttribute("aria-hidden", "false"), e .querySelector(this.opts.storyItemController) .removeAttribute("tabindex"))) }) } }, destroy: () => { null !== this.storySwiper.instance && (this.storySwiper.instance.destroy(), (this.storySwiper.instance = null)) }, build: () => { null === this.storySwiper.instance && ((this.storySwiper.options.on = { slideChange: this.storySwiper.slideChange.bind(this), slideChangeTransitionStart: this.storySwiper.slideChangeTransitionStart.bind(this), }), (this.storySwiper.options.initialSlide = this.opts.initSlide), (this.storySwiper.instance = new Swiper( this.opts.storyEl, this.storySwiper.options )), this.storySwiper.slideChangeTransitionStart()) }, } } buildLayer() { ;(this.layer = { instance: null, build: () => { null === this.layer.instance && (this.layer.instance = new HiveLayer(this.opts.layerEl, { effect: "default", on: { layerOpenBefore: () => { const e = this.storySlide[this.opts.initSlide] var t = e.querySelector(this.opts.videoElement) this.storySwiper.build(), this.select(this.opts.initSlide), t && this.videoPlayer.load(t), this.featurePlayer.forEach((e) => { this.videoPlayer.reset(e) }) }, layerCloseBefore: () => { this.featureBtn.forEach((e) => { e.classList.contains(this.classes.isPaused) && e.classList.remove(this.classes.isPaused) }), this.storySlide.forEach((e) => { this.videoPlayer.reset(e) }) }, layerCloseAfter: () => { this.storySwiper.destroy(), this.initValues(), this.indicatorItem.forEach((e) => { e.classList.remove(this.classes.isActive), e.removeAttribute("title") }) }, }, })) }, }), this.layer.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const m = WATCH6.UTILS, e = m.RESPONSIVE m.MIN_VIEW_HEIGHT WATCH6.Screen = class { constructor(e = container, t) { var i = { el: e, headlineElement: ".wearable-watch-common__headline", trackElement: ".wearable-watch-screen__track", fixedElement: ".wearable-watch-screen__fixed", textElement: ".wearable-watch-screen__text", objElement: ".wearable-watch-screen__obj", introElement: ".wearable-watch-screen__intro", mainElement: ".wearable-watch-screen__main", frameElement: ".wearable-watch-screen__frame", dimmedElement: ".wearable-watch-screen__dimmed", coverElement: ".wearable-watch-screen__cover", scriptElement: ".wearable-watch-screen__script", videoElement: ".video__container", startImage: ".video__start-frame", endImage: ".video__end-frame", featureHide: "is-feature-hide", classes: { isShow: "is-show", loaded: "loaded", ended: "ended", paused: "paused", playing: "playing", intro: "intro", scene01: "scene01", scene02: "scene02", scene03: "scene03", scene04: "scene04", destroyAnimation: "destroy-animation", brokenFixedAnimation: "broken-fixed-animation", }, startPoint: { scene01: 0, scene02: 18, scene03: 52, scene04: 87 }, widthResizeStart: null, heightResizeStart: null, on: { updateImageLoader: null }, } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents(), this.buildVideoPlayer(), this.initLayout(), this.buildAnimation()) } setElements() { ;(this.trackElement = this.el.querySelector( this.opts.trackElement )), (this.fixedElement = this.el.querySelector( this.opts.fixedElement )), (this.textElement = this.el.querySelector(this.opts.textElement)), (this.objElement = this.el.querySelector(this.opts.objElement)), (this.frameElement = this.el.querySelectorAll( this.opts.frameElement )), (this.videoElement = this.el.querySelectorAll( this.opts.videoElement )), (this.headlineElement = this.el.querySelector( this.opts.headlineElement )), (this.dimmedElement = this.el.querySelector( this.opts.dimmedElement )), (this.scriptElement = this.el.querySelector( this.opts.scriptElement )), (this.mainElement = this.el.querySelector(this.opts.mainElement)), (this.mainVideoWrap = this.mainElement.querySelector( this.opts.videoElement )), (this.mainVideo = this.mainVideoWrap.querySelector("video")), (this.mainCoverImage = this.mainElement.querySelector( this.opts.startImage )), (this.mainCoverBackground = this.mainElement.querySelector( this.opts.coverElement )) } initOpts() { this.getCurrentDevice(), (this.firstImageLoad = !1), (this.firstVideoLoad = !1), (this.winHeight = m.winSize().h), (this.currentAnimation = null), (this.prevAnimation = null), (this.scroller = null), (this.brokenScroller = null), (this.lastScrollY = 0), (this.videoLoad = !1) } initLayout() { this.setWidthLayout(), this.setHeightLayout(), this.onScrollHandler() } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [ this.classes.brokenFixedAnimation, this.classes.intro, this.classes.scene01, this.classes.scene02, this.classes.scene03, this.classes.scene04, ], }) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener( "resize", this.onResizeHandler.bind(this) ), window.addEventListener( "scroll", this.onScrollHandler.bind(this) ), window.addEventListener( "orientationchange", this.onOrientationChange.bind(this) ), document.addEventListener( "focusin", this.onFocusHandler.bind(this) ) } getCurrentDevice() { ;(this.winWidth = m.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") } getFrameOffsetTop() { var e = window.pageYOffset if ( document.documentElement.classList.contains( "is-animation-broken-fixed" ) ) window.setTimeout(() => { this.frameElement.forEach((e, t) => { ;(e.dataset.rectTop = m.getOffset(e).top), (e.dataset.rectBottom = m.getOffset(e).bottom) }) }, 200) else { var t = this.opts.startPoint, i = m.getHeight(this.trackElement), e = e + this.trackElement.getBoundingClientRect().top, i = i / 100, s = t.scene02 * i, a = (t.scene03 - t.scene02) * i, n = (t.scene04 - t.scene03) * i, t = (100 - t.scene04) * i const r = e + 5, o = r + s - 5, l = o, h = l + a, d = h, c = d + n, u = c, p = u + t this.frameElement.forEach((e, t) => { 0 === t && ((e.dataset.rectTop = r), (e.dataset.rectBottom = o)), 1 === t && ((e.dataset.rectTop = l), (e.dataset.rectBottom = h)), 2 === t && ((e.dataset.rectTop = d), (e.dataset.rectBottom = c)), 3 === t && ((e.dataset.rectTop = u), (e.dataset.rectBottom = p)) }) } } buildVideoPlayer() { this.videoPlayer = { load: () => { var e = "desktop" === this.currentDevice ? "data-media-pc" : "data-media-mo" const i = this.mainVideoWrap.getAttribute(e) this.mainVideo.querySelectorAll("source").forEach((e) => { const t = e.getAttribute("type") ;-1 < t.indexOf("webm") && (e.src = i + ".webm"), -1 < t.indexOf("mp4") && (e.src = i + ".mp4"), this.mainVideo.load(), this.mainVideo.addEventListener( "canplaythrough", () => { this.mainVideoWrap.classList.add(this.classes.loaded) }, { once: !0 } ) }), (this.firstVideoLoad = !0) }, update: (e, t) => { null !== e && 3 < e.readyState && ((e.playbackRate = 16), (e.currentTime = t)) }, reset: () => { this.mainVideo.currentTime = 0 }, } } buildAnimation() { m.def(this, { animation: { deleteTweenID: (e) => { e = m.def({}, e) return e._gsTweenID, e }, height: (e, t) => { TweenMax.to(e, 0.3, t) }, y: (e, t) => { TweenMax.to(e, 0.3, t) }, currentTime: (e, t) => { TweenMax.to(e, 0.1, t) }, }, }) } updateImageLoader(e) { this.outCallback("updateImageLoader", e), (this.firstImageLoad = !0) } onFocusHandler(t) { m.getScroll().top const e = t.target, i = e.closest(this.opts.frameElement) t = i ? JSON.parse(i.dataset.rectTop) : m.winSize().h / 2 + e.getBoundingClientRect().top if (e.classList.contains("focus-visible")) { let e = t - m.getNavHeight() i && i.classList.contains( this.opts.frameElement.split(".")[1] + "--first" ) && (e += 5), (this.currentSubScrollY = Math.floor(e)), i && this.currentSubScrollY !== this.lastSubScrollY && window.scrollTo(0, e), (this.lastSubScrollY = this.currentSubScrollY) } } onLoadHandler() { this.getFrameOffsetTop(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } onScrollHandler() { const r = this var e = window.scrollY, t = m.getOffset( document.querySelector(".wearable-watch-overview") ), i = window.innerHeight, i = m.getScroll().top - i, s = m.getScroll().bottom this.lastScrollY const o = this.opts.startPoint ;((s > t.top && i <= t.top) || (i < t.bottom && s > t.bottom) || (i < t.top && s > t.bottom) || (i > t.top && s < t.bottom)) && (this.firstImageLoad || ((i = this.el.querySelectorAll(".js-start-img-src")), this.updateImageLoader(i)), this.mainVideoWrap.classList.contains(this.classes.loaded) || this.firstVideoLoad || this.videoPlayer.load()), null !== this.scroller && this.scroller.trackAnimation(function () { let e = ANIUTIL.calRange({ targetValue: "mobile" !== r.currentDevice ? 100 : 130, progress: this.progress, startPoint: "mobile" !== r.currentDevice ? -13 : -10, endPoint: 10, }) ANIUTIL.calRange({ targetValue: "mobile" !== r.currentDevice ? 40 : 50, progress: this.progress, startPoint: -27, endPoint: 27, }) let t = ANIUTIL.calRange({ targetValue: 100, progress: this.progress, startPoint: -10, endPoint: 10, }) ANIUTIL.calRange({ targetValue: "mobile" !== r.currentDevice ? 40 : 50, progress: this.progress, startPoint: -27, endPoint: 27, }) let i = new TimelineMax(), s = (i.to(r.headlineElement, 1, { ease: "power1.out", onUpdate: () => { r.currentDevice r.animation.y( r.headlineElement, r.animation.deleteTweenID({ y: 0 - e + "%" }) ) }, }), new TimelineMax()), a = (s.to(r.mainCoverImage, 1, { ease: "power1.out", onUpdate: () => { r.animation.height( r.mainCoverImage, r.animation.deleteTweenID({ height: 100 - t + "%" }) ) }, }), new TimelineMax()) a.to(r.mainCoverBackground, 1, { ease: "power1.out", onUpdate: () => { r.animation.height( r.mainCoverBackground, r.animation.deleteTweenID({ height: 100 - t + "%" }) ) }, }) var n = ANIUTIL.calRange({ targetValue: r.mainVideo.duration, progress: this.progress, startPoint: 0, endPoint: 100, }) this.progress < 0 && -10 < this.progress && ((r.videoLoad = r.mainVideoWrap.classList.contains( r.classes.loaded )), r.videoLoad ? r.el.classList.remove(r.classes.destroyAnimation) : r.el.classList.add(r.classes.destroyAnimation), r.getFrameOffsetTop()), this.progress < 0 ? (r.videoPlayer.reset(), r.el.classList.add(r.classes.intro)) : r.el.classList.remove(r.classes.intro), 0 < this.progress ? (r.videoPlayer.update(r.mainVideo, n), r.dimmedElement.classList.add(r.classes.isShow)) : r.dimmedElement.classList.remove(r.classes.isShow), this.progress >= o.scene01 && this.progress <= o.scene02 ? r.el.classList.add(r.classes.scene01) : r.el.classList.remove(r.classes.scene01), this.progress > o.scene02 && this.progress <= o.scene03 ? r.el.classList.add(r.classes.scene02) : r.el.classList.remove(r.classes.scene02), this.progress > o.scene03 && this.progress <= o.scene04 ? r.el.classList.add(r.classes.scene03) : r.el.classList.remove(r.classes.scene03), this.progress > o.scene04 ? r.el.classList.add(r.classes.scene04) : r.el.classList.remove(r.classes.scene04) }), null !== this.brokenScroller && this.brokenScroller.activeAnimation(), (this.lastScrollY = e) } onResizeHandler() { ;(m.winSize().w === this.winWidth && m.winSize().h === this.winHeight) || ((this.winWidth = m.winSize().w), (this.winHeight = m.winSize().h), (null != this.opts.widthResizeStart && null != this.opts.heightResizeStart) || ((this.opts.widthResizeStart = this.winWidth), (this.opts.heightResizeStart = this.winHeight), this.resizeAnimateFunc())), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 )) } resizeAnimateFunc() { this.setWidthLayout(), this.setHeightLayout(), (this.resizeRequestFrame = m.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { this.opts.widthResizeStart !== this.winWidth && this.getFrameOffsetTop(), (this.opts.widthResizeStart = null), (this.opts.heightResizeStart = null), m.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), m.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : (this.setScroller(), this.onScrollHandler()), this.getFrameOffsetTop() } onOrientationChange() { setTimeout(() => { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), m.isFullAnimationBrokenFixed() ? this.setBrokenScroller() : this.setScroller(), this.getFrameOffsetTop() }, 150) } setWidthLayout() { this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), (this.prevDevice = this.currentDevice) } setHeightLayout() { var e = window.innerWidth, t = window.innerHeight, i = !!m.isTouchDevice && window.matchMedia("(orientation: landscape)").matches, s = !!m.isTouchDevice && !window.matchMedia("(orientation: landscape)").matches ;(this.currentAnimation = (s && t / e < 1.5) || i || t < 700 ? "broken" : "use"), this.currentAnimation === this.prevAnimation || m.isTouchDevice || this.onResponsiveChange(), (this.prevAnimation = this.currentAnimation) } setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, fixedElement: this.fixedElement, useFixed: !(m.isIEorEdge < 0), useSticky: m.isIEorEdge < 0, useStrictMode: !1, trackHeight: (this.currentDevice, 10), resize: !m.isTouchDevice, })) } setBrokenScroller() { null === this.brokenScroller && (this.brokenScroller = SCROLLER({ trackElement: this.trackElement, activeElement: this.el, activeClass: this.classes.brokenFixedAnimation, })) } destroyScroller() { null !== this.scroller && (this.scroller.destroy(!0), (this.scroller = null)) } destroyBrokenScroller() { null != this.brokenScroller && (this.brokenScroller.destroy(!0), (this.brokenScroller = null)) } outCallback(e, t) { e = this.opts.on[e] null != e && e(t) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const t = WATCH6.UTILS, e = t.RESPONSIVE WATCH6.SleepTracking = class { constructor(e = container, t) { var i = { el: e, trackElement: ".wearable-watch-sleep-tracking__track", fixedElement: ".wearable-watch-sleep-tracking__fixed", headlineElement: ".wearable-watch-common__headline", coverElement: ".wearable-watch-sleep-tracking__visual-cover", featureHide: "is-feature-hide", classes: { scene01: "scene01", scene02: "scene02", scene03: "scene03", scene04: "scene04", brokenFixedAnimation: "broken-fixed-animation", }, } ;(this.opts = i), (this.classes = i.classes), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.initOpts(), this.bindEvents(), this.buildAnimation()) } setElements() { ;(this.trackElement = this.el.querySelector( this.opts.trackElement )), (this.fixedElement = this.el.querySelector( this.opts.fixedElement )), (this.headlineElement = this.el.querySelector( this.opts.headlineElement )), (this.coverElement = this.el.querySelector( this.opts.coverElement )) } initOpts() { ;(this.winWidth = t.winSize().w), (this.winHeight = t.winSize().h), (this.currentDevice = !1), (this.prevDevice = null), (this.scroller = null), (this.brokenScroller = null) } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [this.classes.brokenFixedAnimation], }) } bindEvents() { window.addEventListener("load", this.onLoadHandler.bind(this)), window.addEventListener( "resize", this.onResizeHandler.bind(this) ), window.addEventListener( "scroll", this.onScrollHandler.bind(this) ), window.addEventListener( "orientationchange", this.onOrientationChange.bind(this) ) } onLoadHandler() { this.setLayout(), this.onScrollHandler(), window.removeEventListener("load", this.onLoadHandler.bind(this)) } buildAnimation() { t.def(this, { animation: { deleteTweenID: (e) => { e = t.def({}, e) return e._gsTweenID, e }, paddingTop: (e, t) => { TweenMax.to(e, 0.3, t) }, y: (e, t) => { TweenMax.to(e, 0.3, t) }, opacity: (e, t) => { TweenMax.to(e, 0.3, t) }, }, }) } onScrollHandler() { const a = this var e = window.scrollY this.lastScrollY null !== this.scroller && this.scroller.trackAnimation(function () { let t = ANIUTIL.calRange({ targetValue: "mobile" !== a.currentDevice ? 125 : 0, progress: this.progress, startPoint: "mobile" !== a.currentDevice ? 15 : 0, endPoint: "mobile" !== a.currentDevice ? 45 : 0, }), e = ANIUTIL.calRange({ targetValue: 1, progress: this.progress, startPoint: "mobile" !== a.currentDevice ? 15 : 22, endPoint: "mobile" !== a.currentDevice ? 50 : 55, }), i = ANIUTIL.calRange({ targetValue: 120, progress: this.progress, startPoint: -10, endPoint: 55, }) if ("mobile" !== a.currentDevice) { let e = new TimelineMax() e.to(a.headlineElement, 1, { ease: "power1.out", onUpdate: () => { a.animation.y( a.headlineElement, a.animation.deleteTweenID({ y: 125 - t + "%" }) ) }, }) } let s = new TimelineMax() if ( (s.to(a.coverElement, 1, { ease: "power1.out", onUpdate: () => { a.animation.opacity( a.coverElement, a.animation.deleteTweenID({ opacity: 1 - e }) ) }, }), "mobile" === a.currentDevice) ) { let e = new TimelineMax() e.to(a.fixedElement, 1, { ease: "power1.out", onUpdate: () => { a.animation.paddingTop( a.fixedElement, a.animation.deleteTweenID({ paddingTop: 120 - i + "px", }) ) }, }) } }), null !== this.brokenScroller && this.brokenScroller.activeAnimation(), (this.lastScrollY = e) } onResizeHandler() { t.winSize().w !== this.winWidth && ((this.winWidth = t.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 = t.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), t.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), t.isBrokenFixed() ? this.setBrokenScroller() : this.setScroller() } onOrientationChange() { setTimeout(() => { this.destroyScroller(), this.destroyBrokenScroller(), this.initStyle(), t.isBrokenFixed() ? this.setBrokenScroller() : this.setScroller() }, 150) } setLayout() { this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), (this.prevDevice = this.currentDevice) } setFixedLayout() {} setScroller() { this.destroyScroller(), null === this.scroller && (this.scroller = SCROLLER({ trackElement: this.trackElement, fixedElement: this.fixedElement, useStrictMode: !1, resize: !t.isTouchDevice, })) } setBrokenScroller() { null === this.brokenScroller && (this.brokenScroller = SCROLLER({ trackElement: this.trackElement, activeElement: this.el, activeClass: this.classes.brokenFixedAnimation, })) } destroyScroller() { null !== this.scroller && (this.scroller.destroy(!0), (this.scroller = null)) } destroyBrokenScroller() { null != this.brokenScroller && (this.brokenScroller.destroy(!0), (this.brokenScroller = null)) } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} WATCH6.UTILS.RESPONSIVE WATCH6.Standalone = class { constructor(e = container, t) { ;(this.opts = { el: e, tabEl: ".wearable-watch-standalone__tab", tabList: ".wearable-watch-standalone__tab-list", tabButtons: ".wearable-watch-standalone__tab-cta", tabPanel: ".wearable-watch-standalone__tab-panels", tabPanels: ".wearable-watch-standalone__tab-panel", featureHide: "is-feature-hide", }), (this.el = document.querySelector(e)), this.init() } init() { null === this.el || this.el.classList.contains(this.opts.featureHide) || (this.setElements(), this.buildTab()) } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl) } buildTab() { ;(this.tab = { instance: null, build: () => { null === this.tab.instance && (this.tab.instance = new WATCH6.Tab(this.tabEl, { tabEl: this.opts.tabEl, tabList: this.opts.tabList, tabButtons: this.opts.tabButtons, tabPanel: this.opts.tabPanel, tabPanels: this.opts.tabPanels, })) }, }), this.tab.build() } } })(), (function () { "use strict" window.WATCH6 = window.WATCH6 || {} const a = WATCH6.UTILS, e = a.RESPONSIVE WATCH6.Tab = class { constructor(e = container, t) { var i = { el: e, tabEl: ".wearable-watch__tab", tabList: ".wearable-watch__tab-list", tabButtons: ".wearable-watch__tab-cta", tabPanel: ".wearable-watch__tab-panels", tabPanels: ".wearable-watch__tab-panel", classes: { isActive: "is-active" }, resizeStart: null, } ;(this.opts = a.def(i, t || {})), (this.classes = i.classes), (this.el = e), this.init() } init() { null !== this.el && (this.setElements(), this.initOpts(), this.bindEvents()) } setElements() { ;(this.tabEl = this.el), (this.tabList = this.tabEl.querySelector(this.opts.tabList)), (this.tabButtons = a.convertArray( this.tabList.querySelectorAll(this.opts.tabButtons) )), (this.tabPanel = this.el.querySelector(this.opts.tabPanel)), (this.tabPanels = a.convertArray( this.tabPanel.querySelectorAll(this.opts.tabPanels) )) } initOpts() { ;(this.currentIndex = 0), (this.currentDevice = !1), (this.prevDevice = null) } initLayout() { this.tabButtons.forEach(function (e, t) { const i = this.tabPanels[t] this.currentIndex == t ? (e.classList.contains(this.classes.isActive) || e.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), e.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (e.classList.contains(this.classes.isActive) && e.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), e.setAttribute("aria-selected", !1), a.onAccessibility(i)) }) } bindEvents() { window.addEventListener("resize", this.onResizeHandler.bind(this)), this.tabButtons.forEach((e) => { e.addEventListener("click", this.onClickTabButton.bind(this)) }) } unBindEvents() {} onClickTabButton(e) { e = e.currentTarget const s = this.tabButtons.indexOf(e) s != this.currentIndex && (this.tabButtons.forEach((e, t) => { const i = this.tabPanels[t] s == t ? (e.classList.contains(this.classes.isActive) || e.classList.add(this.classes.isActive), i.classList.contains(this.classes.isActive) || i.classList.add(this.classes.isActive), e.setAttribute("aria-selected", !0), a.offAccessibility(i)) : (e.classList.contains(this.classes.isActive) && e.classList.remove(this.classes.isActive), i.classList.contains(this.classes.isActive) && i.classList.remove(this.classes.isActive), e.setAttribute("aria-selected", !1), a.onAccessibility(i)) }), (this.currentIndex = s)) } onResizeHandler() { a.winSize().w !== this.winWidth && ((this.winWidth = a.winSize().w), null == this.opts.resizeStart && ((this.opts.resizeStart = this.winWidth), this.resizeAnimateFunc()), window.clearTimeout(this.resizeEndTime), (this.resizeEndTime = window.setTimeout( this.resizeEndFunc.bind(this), 150 ))) } resizeAnimateFunc() { this.setLayout(), (this.resizeRequestFrame = a.requestAFrame.call( window, this.resizeAnimateFunc.bind(this) )) } resizeEndFunc() { ;(this.opts.resizeStart = null), a.cancelAFrame.call(window, this.resizeRequestFrame) } onResponsiveChange() {} setLayout() { this.winWidth >= e.TABLET.WIDTH ? (this.currentDevice = "desktop") : this.winWidth > e.MOBILE.WIDTH && this.winWidth < e.TABLET.WIDTH ? (this.currentDevice = "tablet") : (this.currentDevice = "mobile"), this.currentDevice !== this.prevDevice && this.onResponsiveChange(), (this.prevDevice = this.currentDevice) } } })(), (function () { "use strict" WATCH6.UTILS.RESPONSIVE new (class { constructor(e = container) { ;(this.opts = { el: e, wrapEl: "#wrap", keyVisualEl: ".wearable-watch-kv", overviewEl: ".wearable-watch-overview", screenEl: ".wearable-watch-screen", fitnessEl: ".wearable-watch-fitness", sleepTrackingEl: ".wearable-watch-sleep-tracking", standaloneEl: ".wearable-watch-standalone", monitoringEl: ".wearable-watch-monitoring", hrEl: ".wearable-watch-hr", handsEl: ".wearable-watch-hands-free", batteryEl: ".wearable-watch-battery-processor", compareEl: ".wearable-watch-compare", contrastEl: ".cp-high-contrast", subNavEl: "#subnav", }), (this.el = document.querySelector(e)), this.init() } init() { null !== this.el && this.buildComponents() } buildComponents() { ;(this.imageLoader = new WATCH6.ImageLoader(this.opts.el, { startLazyClass: ".js-start-img-src", endLazyClass: ".js-end-img-src", responsiveClass: ".js-res-img", loadOption: [ { resolution: 1920, attribute: "data-src-pc" }, { resolution: 1080, attribute: "data-src-tablet" }, { resolution: 767, attribute: "data-src-mobile" }, ], })), (this.videoLoader = new WATCH6.VideoLoader(this.opts.el, { 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" }, ], })), (this.keyVisual = new WATCH6.KeyVisual(this.opts.keyVisualEl)), (this.overview = new WATCH6.Overview(this.opts.overviewEl)), (this.screen = new WATCH6.Screen(this.opts.screenEl, { on: { updateImageLoader: (e) => { this.imageLoader.setResponsiveImage(e) }, }, })), (this.fitness = new WATCH6.Fitness(this.opts.fitnessEl)), (this.sleepTracking = new WATCH6.SleepTracking( this.opts.sleepTrackingEl )), (this.standalone = new WATCH6.Standalone(this.opts.standaloneEl)), (this.monitoring = new WATCH6.Monitoring(this.opts.monitoringEl)), (this.hr = new WATCH6.HR(this.opts.hrEl)), (this.hands = new WATCH6.Hands(this.opts.handsEl)), (this.compare = new WATCH6.Compare(this.opts.compareEl, { on: { updateImageLoader: (e) => { this.imageLoader.setResponsiveImage(e) }, }, })), (this.contrast = new WATCH6.Contrast(this.opts.contrastEl)), (this.batteryEl = new WATCH6.Battery(this.opts.batteryEl)), window.addEventListener("load", () => { setTimeout(() => { window.GALAXY && window.GALAXY.isGalaxy && (this.subNav = new WATCH6.SubNav(this.opts.subNavEl)) }, 5) }) } })(".wearable-watch") })() })
Galaxy Watch 6 Classic Smartwatch 47mm | Specs | Samsung UK (2024)

FAQs

Is the Galaxy Watch6 Classic worth buying? ›

The Samsung Galaxy Watch 6 and 6 Classic are more of a good thing. Samsung's Galaxy Watch 6 and Watch 6 Classic are some of the safest Wear OS watches to buy if you want something reliable, stable and packed with features.

What model is the watch 6 classic 47mm? ›

Samsung R960 Galaxy Watch 6 Classic 47mm, Silver.

What is the difference between the Samsung Galaxy Watch 6 and 6 Classic? ›

The displays of the Galaxy Watch 6 Classic are the same as the Galaxy Watch 6, despite their larger size. The larger size simply comes down to the rotating bezel being included into the design of the watch. The big change to the display is actually the brightness.

Is a 47mm smart watch too big? ›

Anything larger than 46mm quickly comes across as overly large. And anything smaller than 38mm is usually for women. By measuring your wrist and using the following size chart, you know exactly which size watch case is suitable for your wrist.

References

Top Articles
Latest Posts
Article information

Author: Maia Crooks Jr

Last Updated:

Views: 5820

Rating: 4.2 / 5 (63 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Maia Crooks Jr

Birthday: 1997-09-21

Address: 93119 Joseph Street, Peggyfurt, NC 11582

Phone: +2983088926881

Job: Principal Design Liaison

Hobby: Web surfing, Skiing, role-playing games, Sketching, Polo, Sewing, Genealogy

Introduction: My name is Maia Crooks Jr, I am a homely, joyous, shiny, successful, hilarious, thoughtful, joyous person who loves writing and wants to share my knowledge and understanding with you.